@snabcentr/client-core 3.9.1 → 3.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/seo/classes/schema-org-factory.mjs +294 -67
- package/esm2022/seo/services/sc-seo.service.mjs +16 -9
- package/fesm2022/snabcentr-client-core.mjs +307 -74
- package/fesm2022/snabcentr-client-core.mjs.map +1 -1
- package/package.json +1 -1
- package/release_notes.tmp +4 -2
- package/seo/classes/schema-org-factory.d.ts +65 -4
- package/seo/services/sc-seo.service.d.ts +8 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { inject, Injectable } from '@angular/core';
|
|
2
|
-
import { isArray } from 'lodash-es';
|
|
2
|
+
import { isArray, omit } from 'lodash-es';
|
|
3
3
|
import { ScIdOrSlugPipe } from '../../pipes/sc-id-or-slug.pipe';
|
|
4
4
|
import { ScMediaImageTransformerPipe } from '../../pipes/sc-media-image-transformer.pipe';
|
|
5
5
|
import { SC_COMPANY_INFO } from '../../tokens/sc-company-info';
|
|
@@ -32,36 +32,36 @@ export class SchemaOrgFactory {
|
|
|
32
32
|
*
|
|
33
33
|
* @param product Данные о продукте.
|
|
34
34
|
* @param productPath Url путь к товару. В пути должен присутствовать шаблон ':id', обозначающий идентификатор товара для подстановки.
|
|
35
|
+
* @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
|
|
35
36
|
*/
|
|
36
|
-
generateForProductItem(product, productPath) {
|
|
37
|
+
generateForProductItem(product, productPath, id) {
|
|
37
38
|
const productUrl = `${this.urls.siteUrl}${productPath.replace(':id', this.idOrSlugPipe.transform(product).toString())}`;
|
|
38
39
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
39
|
-
const image = this.mediaImageTransformerPipe.transform(product?.getImagePreview() ?? product.image, true);
|
|
40
|
+
const image = this.mediaImageTransformerPipe.transform(product?.getImagePreview?.() ?? product.image, true);
|
|
40
41
|
const description = product.properties?.description;
|
|
41
42
|
const priceValidUntil = this.normalizePriceValidUntil(product.discount?.expiredAt);
|
|
42
43
|
return {
|
|
43
44
|
'@context': 'https://schema.org',
|
|
44
45
|
'@type': 'Product',
|
|
46
|
+
...(id && { '@id': id }),
|
|
45
47
|
name: product.name,
|
|
46
48
|
...(image && { image }),
|
|
47
49
|
...(description && { description }),
|
|
48
50
|
mpn: product.code,
|
|
49
51
|
url: productUrl,
|
|
50
|
-
offers:
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
name: this.companyInfo.name,
|
|
61
|
-
},
|
|
62
|
-
url: productUrl,
|
|
52
|
+
offers: {
|
|
53
|
+
'@type': 'Offer',
|
|
54
|
+
priceCurrency: 'RUB',
|
|
55
|
+
...(priceValidUntil && { priceValidUntil }),
|
|
56
|
+
price: product.costRub,
|
|
57
|
+
availability: this.getAvailability(product),
|
|
58
|
+
itemCondition: 'https://schema.org/NewCondition',
|
|
59
|
+
seller: {
|
|
60
|
+
'@type': 'Organization',
|
|
61
|
+
name: this.companyInfo.name,
|
|
63
62
|
},
|
|
64
|
-
|
|
63
|
+
url: productUrl,
|
|
64
|
+
},
|
|
65
65
|
};
|
|
66
66
|
}
|
|
67
67
|
/**
|
|
@@ -72,13 +72,15 @@ export class SchemaOrgFactory {
|
|
|
72
72
|
* @param categoryPath Url путь к категориям товаров. В пути должен присутствовать шаблон ':id', обозначающий идентификатор категории для подстановки.
|
|
73
73
|
* @param productPath Url путь к товару. В пути должен присутствовать шаблон ':id', обозначающий идентификатор товара для подстановки.
|
|
74
74
|
* @param breadcrumbs Данные о хлебных крошках для категории.
|
|
75
|
+
* @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
|
|
75
76
|
*/
|
|
76
|
-
generateForCategoryItem(category, products, categoryPath, productPath, breadcrumbs) {
|
|
77
|
+
generateForCategoryItem(category, products, categoryPath, productPath, breadcrumbs, id) {
|
|
77
78
|
const description = category.seo?.description ?? category.properties?.description;
|
|
78
79
|
const image = this.mediaImageTransformerPipe.transform(category.image, true);
|
|
79
80
|
return {
|
|
80
81
|
'@context': 'https://schema.org',
|
|
81
82
|
'@type': 'CollectionPage',
|
|
83
|
+
...(id && { '@id': id }),
|
|
82
84
|
name: category.seo?.title ?? category.name,
|
|
83
85
|
...(description && { description }),
|
|
84
86
|
url: this.getCategoryCanonicalUrl(category, categoryPath),
|
|
@@ -96,12 +98,6 @@ export class SchemaOrgFactory {
|
|
|
96
98
|
name: category.name,
|
|
97
99
|
...(description && { description }),
|
|
98
100
|
},
|
|
99
|
-
// Информация о сайте.
|
|
100
|
-
isPartOf: {
|
|
101
|
-
'@type': 'WebSite',
|
|
102
|
-
name: this.companyInfo.name,
|
|
103
|
-
url: this.urls.siteUrl,
|
|
104
|
-
},
|
|
105
101
|
// Связанные страницы.
|
|
106
102
|
relatedLink: [
|
|
107
103
|
`${this.urls.siteUrl}${categoryPath.replace(':id', '')}`,
|
|
@@ -142,6 +138,223 @@ export class SchemaOrgFactory {
|
|
|
142
138
|
],
|
|
143
139
|
};
|
|
144
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Генерирует и возвращает схему данных OnlineStore на основе данных компании из окружения.
|
|
143
|
+
*/
|
|
144
|
+
// eslint-disable-next-line sonarjs/function-return-type
|
|
145
|
+
generateForOrganization() {
|
|
146
|
+
const postalAddress = this.createPostalAddress(this.companyInfo.address);
|
|
147
|
+
return {
|
|
148
|
+
'@context': 'https://schema.org',
|
|
149
|
+
'@type': 'OnlineStore',
|
|
150
|
+
'@id': `${this.urls.siteUrl}#organization`,
|
|
151
|
+
name: this.companyInfo.name,
|
|
152
|
+
legalName: this.companyInfo.name,
|
|
153
|
+
url: this.urls.siteUrl,
|
|
154
|
+
logo: this.urls.logoUrl,
|
|
155
|
+
image: this.urls.logoUrl,
|
|
156
|
+
email: this.companyInfo.mail,
|
|
157
|
+
telephone: this.companyInfo.phone,
|
|
158
|
+
...(postalAddress && { address: postalAddress }),
|
|
159
|
+
legalAddress: this.createPostalAddress({ streetAddress: this.companyInfo.legalAddress }),
|
|
160
|
+
// TODO: Перечислить все розничные магазины.
|
|
161
|
+
// hasPOS: [],
|
|
162
|
+
taxID: this.companyInfo.inn,
|
|
163
|
+
identifier: {
|
|
164
|
+
'@type': 'PropertyValue',
|
|
165
|
+
propertyID: 'OGRN',
|
|
166
|
+
value: this.companyInfo.ogrn,
|
|
167
|
+
},
|
|
168
|
+
contactPoint: this.createOrganizationContactPoints(),
|
|
169
|
+
...(this.companyInfo.warehouseAddress.length > 0 && {
|
|
170
|
+
location: this.companyInfo.warehouseAddress.map((warehouseAddress) => ({
|
|
171
|
+
'@type': 'Place',
|
|
172
|
+
name: `${this.companyInfo.name} — склад самовывоза`,
|
|
173
|
+
address: warehouseAddress,
|
|
174
|
+
})),
|
|
175
|
+
}),
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Генерирует и возвращает схему данных для указанной новости.
|
|
180
|
+
*
|
|
181
|
+
* @param news Данные о новости.
|
|
182
|
+
* @param newsPath Url путь к новости. В пути должен присутствовать шаблон ':id', обозначающий идентификатор новости для подстановки.
|
|
183
|
+
* @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
|
|
184
|
+
*/
|
|
185
|
+
generateForNewsArticle(news, newsPath, id) {
|
|
186
|
+
const newsUrl = `${this.urls.siteUrl}${newsPath.replace(':id', news.id.toString())}`;
|
|
187
|
+
const image = this.mediaImageTransformerPipe.transform(news.image, true);
|
|
188
|
+
const headline = news.seo?.title ?? news.subject;
|
|
189
|
+
const description = news.seo?.description;
|
|
190
|
+
const datePublished = this.normalizeSchemaDate(news.createdAt);
|
|
191
|
+
const articleBody = news.text ? this.stripHtml(news.text) : undefined;
|
|
192
|
+
return {
|
|
193
|
+
'@context': 'https://schema.org',
|
|
194
|
+
'@type': 'NewsArticle',
|
|
195
|
+
...(id && { '@id': id }),
|
|
196
|
+
headline,
|
|
197
|
+
...(description && { description }),
|
|
198
|
+
...(image && { image }),
|
|
199
|
+
...(datePublished && { datePublished }),
|
|
200
|
+
...(articleBody && { articleBody }),
|
|
201
|
+
url: newsUrl,
|
|
202
|
+
mainEntityOfPage: newsUrl,
|
|
203
|
+
author: {
|
|
204
|
+
'@type': 'Organization',
|
|
205
|
+
name: this.companyInfo.name,
|
|
206
|
+
url: this.urls.siteUrl,
|
|
207
|
+
},
|
|
208
|
+
publisher: {
|
|
209
|
+
'@type': 'Organization',
|
|
210
|
+
name: this.companyInfo.name,
|
|
211
|
+
logo: {
|
|
212
|
+
'@type': 'ImageObject',
|
|
213
|
+
url: this.urls.logoUrl,
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Генерирует и возвращает схему данных FAQPage для страницы с вопросами и ответами.
|
|
220
|
+
*
|
|
221
|
+
* @param items Список вопросов и ответов.
|
|
222
|
+
* @param pagePath Url путь к странице FAQ.
|
|
223
|
+
* @param pageName Необязательное название страницы.
|
|
224
|
+
* @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
|
|
225
|
+
*/
|
|
226
|
+
generateForFaqPage(items, pagePath, pageName, id) {
|
|
227
|
+
const pageUrl = `${this.urls.siteUrl}${pagePath}`;
|
|
228
|
+
return {
|
|
229
|
+
'@context': 'https://schema.org',
|
|
230
|
+
'@type': 'FAQPage',
|
|
231
|
+
...(id && { '@id': id }),
|
|
232
|
+
...(pageName && { name: pageName }),
|
|
233
|
+
url: pageUrl,
|
|
234
|
+
mainEntity: items.map((item) => ({
|
|
235
|
+
'@type': 'Question',
|
|
236
|
+
name: item.question,
|
|
237
|
+
acceptedAnswer: {
|
|
238
|
+
'@type': 'Answer',
|
|
239
|
+
text: this.stripHtml(item.answer),
|
|
240
|
+
},
|
|
241
|
+
})),
|
|
242
|
+
};
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Объединяет несколько JSON-LD сущностей в один документ с `@graph`.
|
|
246
|
+
*
|
|
247
|
+
* @param data Массив JSON-LD сущностей для объединения.
|
|
248
|
+
*/
|
|
249
|
+
// eslint-disable-next-line class-methods-use-this,sonarjs/function-return-type
|
|
250
|
+
merge(data) {
|
|
251
|
+
return {
|
|
252
|
+
'@context': 'https://schema.org',
|
|
253
|
+
'@graph': data.map((item) => omit(item, '@context')),
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Формирует PostalAddress из структурированного адреса компании.
|
|
258
|
+
*
|
|
259
|
+
* @param address Структурированный адрес компании.
|
|
260
|
+
*/
|
|
261
|
+
// eslint-disable-next-line class-methods-use-this
|
|
262
|
+
createPostalAddress(address) {
|
|
263
|
+
const streetAddress = [address.streetAddress, address.extendedAddress].filter(Boolean).join(', ');
|
|
264
|
+
if (!streetAddress && !address.locality && !address.region && !address.postalCode && !address.country) {
|
|
265
|
+
return undefined;
|
|
266
|
+
}
|
|
267
|
+
return {
|
|
268
|
+
'@type': 'PostalAddress',
|
|
269
|
+
...(streetAddress && { streetAddress }),
|
|
270
|
+
...(address.locality && { addressLocality: address.locality }),
|
|
271
|
+
...(address.region && { addressRegion: address.region }),
|
|
272
|
+
...(address.postalCode && { postalCode: address.postalCode }),
|
|
273
|
+
...(address.country && { addressCountry: address.country }),
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/**
|
|
277
|
+
* Формирует список ContactPoint для Organization.
|
|
278
|
+
*/
|
|
279
|
+
createOrganizationContactPoints() {
|
|
280
|
+
const contactPoints = [
|
|
281
|
+
{
|
|
282
|
+
'@type': 'ContactPoint',
|
|
283
|
+
contactType: 'customer service',
|
|
284
|
+
telephone: this.companyInfo.phone,
|
|
285
|
+
email: this.companyInfo.mail,
|
|
286
|
+
areaServed: 'RU',
|
|
287
|
+
availableLanguage: 'Russian',
|
|
288
|
+
},
|
|
289
|
+
];
|
|
290
|
+
if (this.companyInfo.secondaryPhone) {
|
|
291
|
+
contactPoints.push({
|
|
292
|
+
'@type': 'ContactPoint',
|
|
293
|
+
contactType: 'customer service',
|
|
294
|
+
telephone: this.companyInfo.secondaryPhone,
|
|
295
|
+
areaServed: 'RU',
|
|
296
|
+
availableLanguage: 'Russian',
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
if (this.companyInfo.hr) {
|
|
300
|
+
contactPoints.push({
|
|
301
|
+
'@type': 'ContactPoint',
|
|
302
|
+
contactType: 'HR',
|
|
303
|
+
telephone: this.companyInfo.hr.phone,
|
|
304
|
+
email: this.companyInfo.hr.mail,
|
|
305
|
+
areaServed: 'RU',
|
|
306
|
+
availableLanguage: 'Russian',
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
return contactPoints;
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Удаляет HTML-разметку из текста.
|
|
313
|
+
*
|
|
314
|
+
* @param html Текст с HTML-разметкой.
|
|
315
|
+
*/
|
|
316
|
+
// eslint-disable-next-line class-methods-use-this
|
|
317
|
+
stripHtml(html) {
|
|
318
|
+
const withoutTags = html
|
|
319
|
+
.split('<')
|
|
320
|
+
.map((part, index) => {
|
|
321
|
+
if (index === 0) {
|
|
322
|
+
return part;
|
|
323
|
+
}
|
|
324
|
+
const closeTagIndex = part.indexOf('>');
|
|
325
|
+
return closeTagIndex === -1 ? part : ` ${part.slice(closeTagIndex + 1)}`;
|
|
326
|
+
})
|
|
327
|
+
.join('');
|
|
328
|
+
return withoutTags
|
|
329
|
+
.replaceAll(/\s+/g, ' ')
|
|
330
|
+
.replaceAll(/ ([.,!?;:])/g, '$1')
|
|
331
|
+
.trim();
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Нормализует дату в формат Schema.org (ISO 8601).
|
|
335
|
+
*
|
|
336
|
+
* @param dateValue Дата для нормализации.
|
|
337
|
+
*/
|
|
338
|
+
// eslint-disable-next-line class-methods-use-this
|
|
339
|
+
normalizeSchemaDate(dateValue) {
|
|
340
|
+
if (!dateValue) {
|
|
341
|
+
return undefined;
|
|
342
|
+
}
|
|
343
|
+
if (/^\d{4}-\d{2}-\d{2}/.test(dateValue)) {
|
|
344
|
+
return dateValue;
|
|
345
|
+
}
|
|
346
|
+
const withTimeMatch = /^(\d{2})\.(\d{2})\.(\d{4}) (\d{2}):(\d{2})$/.exec(dateValue);
|
|
347
|
+
if (withTimeMatch) {
|
|
348
|
+
const [, day, month, year, hours, minutes] = withTimeMatch;
|
|
349
|
+
return `${year}-${month}-${day}T${hours}:${minutes}:00`;
|
|
350
|
+
}
|
|
351
|
+
const dateOnlyMatch = /^(\d{2})\.(\d{2})\.(\d{4})$/.exec(dateValue);
|
|
352
|
+
if (!dateOnlyMatch) {
|
|
353
|
+
return undefined;
|
|
354
|
+
}
|
|
355
|
+
const [, day, month, year] = dateOnlyMatch;
|
|
356
|
+
return `${year}-${month}-${day}`;
|
|
357
|
+
}
|
|
145
358
|
/**
|
|
146
359
|
* Нормализует дату окончания цены в формат Schema.org (YYYY-MM-DD).
|
|
147
360
|
*
|
|
@@ -163,9 +376,9 @@ export class SchemaOrgFactory {
|
|
|
163
376
|
// eslint-disable-next-line class-methods-use-this
|
|
164
377
|
getAvailability(product) {
|
|
165
378
|
if (product.onOrder) {
|
|
166
|
-
return 'PreOrder';
|
|
379
|
+
return 'https://schema.org/PreOrder';
|
|
167
380
|
}
|
|
168
|
-
return product.stockCount?.length ? 'InStock' : 'OutOfStock';
|
|
381
|
+
return product.stockCount?.length ? 'https://schema.org/InStock' : 'https://schema.org/OutOfStock';
|
|
169
382
|
}
|
|
170
383
|
/**
|
|
171
384
|
* Проверяет, является ли категория виртуальной.
|
|
@@ -209,21 +422,19 @@ export class SchemaOrgFactory {
|
|
|
209
422
|
url: productUrl,
|
|
210
423
|
...(image && { image }),
|
|
211
424
|
...(description && { description }),
|
|
212
|
-
offers:
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
name: this.companyInfo.name,
|
|
223
|
-
},
|
|
224
|
-
url: productUrl,
|
|
425
|
+
offers: {
|
|
426
|
+
'@type': 'Offer',
|
|
427
|
+
priceCurrency: 'RUB',
|
|
428
|
+
...(priceValidUntil && { priceValidUntil }),
|
|
429
|
+
price: product.costRub,
|
|
430
|
+
availability: this.getAvailability(product),
|
|
431
|
+
itemCondition: 'https://schema.org/NewCondition',
|
|
432
|
+
seller: {
|
|
433
|
+
'@type': 'Organization',
|
|
434
|
+
name: this.companyInfo.name,
|
|
225
435
|
},
|
|
226
|
-
|
|
436
|
+
url: productUrl,
|
|
437
|
+
},
|
|
227
438
|
},
|
|
228
439
|
};
|
|
229
440
|
}
|
|
@@ -245,14 +456,21 @@ export class SchemaOrgFactory {
|
|
|
245
456
|
itemListOrder: 'https://schema.org/ItemListUnordered',
|
|
246
457
|
itemListElement: [
|
|
247
458
|
// Добавляем подкатегории в начало списка.
|
|
248
|
-
...childCategories.slice(0, 5).map((subCategory, index) =>
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
459
|
+
...childCategories.slice(0, 5).map((subCategory, index) => {
|
|
460
|
+
const image = this.mediaImageTransformerPipe.transform(subCategory.image, true);
|
|
461
|
+
const description = subCategory.seo?.description ?? subCategory.properties?.description;
|
|
462
|
+
return {
|
|
463
|
+
'@type': 'ListItem',
|
|
464
|
+
position: index + 1,
|
|
465
|
+
item: {
|
|
466
|
+
'@type': 'CollectionPage',
|
|
467
|
+
name: subCategory.name,
|
|
468
|
+
url: this.getCategoryCanonicalUrl(subCategory, categoryPath),
|
|
469
|
+
...(image && { image }),
|
|
470
|
+
...(description && { description }),
|
|
471
|
+
},
|
|
472
|
+
};
|
|
473
|
+
}),
|
|
256
474
|
// Добавляем товары после подкатегорий.
|
|
257
475
|
...products.slice(0, 10).map((product, index) => this.createProductsListItem(product, childCategories.length + index + 1, productPath)),
|
|
258
476
|
],
|
|
@@ -265,37 +483,46 @@ export class SchemaOrgFactory {
|
|
|
265
483
|
* @param categoryPath Url путь к категориям товаров. В пути должен присутствовать шаблон ':id', обозначающий идентификатор категории для подстановки.
|
|
266
484
|
*/
|
|
267
485
|
createCatalogBreadcrumbsList(breadcrumbs, categoryPath) {
|
|
486
|
+
const catalogUrl = `${this.urls.siteUrl}${categoryPath.replace(':id', '')}`;
|
|
268
487
|
const breadcrumbItems = [
|
|
269
488
|
// Всегда добавляем главную страницу.
|
|
270
|
-
|
|
271
|
-
'@type': 'ListItem',
|
|
272
|
-
position: 1,
|
|
273
|
-
name: 'Главная',
|
|
274
|
-
item: this.urls.siteUrl,
|
|
275
|
-
},
|
|
489
|
+
this.createBreadcrumbListItem(1, 'Главная', this.urls.siteUrl),
|
|
276
490
|
// Добавляем каталог.
|
|
277
|
-
|
|
278
|
-
'@type': 'ListItem',
|
|
279
|
-
position: 2,
|
|
280
|
-
name: 'Каталог',
|
|
281
|
-
item: `${this.urls.siteUrl}/${categoryPath}`,
|
|
282
|
-
},
|
|
491
|
+
this.createBreadcrumbListItem(2, 'Каталог', catalogUrl),
|
|
283
492
|
];
|
|
284
493
|
// Добавляем существующие breadcrumbs с корректировкой позиций.
|
|
285
494
|
breadcrumbs.forEach((item, index) => {
|
|
286
495
|
const link = isArray(item.routerLink) ? item.routerLink.join('/') : item.routerLink;
|
|
287
|
-
breadcrumbItems.push({
|
|
288
|
-
'@type': 'ListItem',
|
|
289
|
-
position: index + 3, // Начинаем с позиции 3 (после Главная и Каталог).
|
|
290
|
-
name: item.label,
|
|
291
|
-
item: link ? `${this.urls.siteUrl}/${link}` : undefined,
|
|
292
|
-
});
|
|
496
|
+
breadcrumbItems.push(this.createBreadcrumbListItem(index + 3, item.label, link ? `${this.urls.siteUrl}/${link}` : undefined));
|
|
293
497
|
});
|
|
294
498
|
return {
|
|
295
499
|
'@type': 'BreadcrumbList',
|
|
500
|
+
itemListOrder: 'https://schema.org/ItemListOrderAscending',
|
|
296
501
|
itemListElement: breadcrumbItems,
|
|
297
502
|
};
|
|
298
503
|
}
|
|
504
|
+
/**
|
|
505
|
+
* Создаёт элемент BreadcrumbList в формате, рекомендованном Schema.org.
|
|
506
|
+
*
|
|
507
|
+
* @param position Позиция элемента в цепочке.
|
|
508
|
+
* @param name Название элемента.
|
|
509
|
+
* @param url URL элемента.
|
|
510
|
+
*/
|
|
511
|
+
// eslint-disable-next-line class-methods-use-this
|
|
512
|
+
createBreadcrumbListItem(position, name, url) {
|
|
513
|
+
return {
|
|
514
|
+
'@type': 'ListItem',
|
|
515
|
+
position,
|
|
516
|
+
...(url
|
|
517
|
+
? {
|
|
518
|
+
item: {
|
|
519
|
+
'@id': url,
|
|
520
|
+
name,
|
|
521
|
+
},
|
|
522
|
+
}
|
|
523
|
+
: { name }),
|
|
524
|
+
};
|
|
525
|
+
}
|
|
299
526
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SchemaOrgFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
300
527
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: SchemaOrgFactory, providedIn: 'root' }); }
|
|
301
528
|
}
|
|
@@ -305,4 +532,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
305
532
|
providedIn: 'root',
|
|
306
533
|
}]
|
|
307
534
|
}] });
|
|
308
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLW9yZy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZW8vY2xhc3Nlcy9zY2hlbWEtb3JnLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFdBQVcsQ0FBQztBQVNwQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDaEUsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDMUYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9ELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFHL0M7O0dBRUc7QUFJSCxNQUFNLE9BQU8sZ0JBQWdCO0lBSDdCO1FBSUk7O1dBRUc7UUFDYyxnQkFBVyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUV2RDs7V0FFRztRQUNjLFNBQUksR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFeEM7O1dBRUc7UUFDSyxpQkFBWSxHQUFtQixNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7UUFFOUQ7O1dBRUc7UUFDYyw4QkFBeUIsR0FBRyxNQUFNLENBQUMsMkJBQTJCLENBQUMsQ0FBQztLQXdTcEY7SUF0U0c7Ozs7O09BS0c7SUFDSSxzQkFBc0IsQ0FBQyxPQUFtQixFQUFFLFdBQW1CO1FBQ2xFLE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3hILHVF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QkFDZixJQUFJLEVBQUUsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxZQUFZLEVBQUU7YUFDL0M7U0FDSixDQUFDO1FBRUYsK0RBQStEO1FBQy9ELFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDaEMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUM7WUFFcEYsZUFBZSxDQUFDLElBQUksQ0FBQztnQkFDakIsT0FBTyxFQUFFLFVBQVU7Z0JBQ25CLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLGtEQUFrRDtnQkFDdkUsSUFBSSxFQUFFLElBQUksQ0FBQyxLQUFLO2dCQUNoQixJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTO2FBQzFELENBQUMsQ0FBQztRQUNQLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNILE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsZUFBZSxFQUFFLGVBQWU7U0FDakIsQ0FBQztJQUN4QixDQUFDOytHQTFUUSxnQkFBZ0I7bUhBQWhCLGdCQUFnQixjQUZiLE1BQU07OzRGQUVULGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGlzQXJyYXkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgQnJlYWRjcnVtYkxpc3QsIENvbGxlY3Rpb25QYWdlLCBMaXN0SXRlbSwgUHJvZHVjdCwgV2l0aENvbnRleHQgfSBmcm9tICdzY2hlbWEtZHRzJztcblxuaW1wb3J0IHsgU2NDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvZHRvL3NjLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjUHJvZHVjdCB9IGZyb20gJy4uLy4uL2NhdGFsb2cvZHRvL3NjLXByb2R1Y3QnO1xuaW1wb3J0IHsgU2NWaXJ0dWFsQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2R0by9zYy12aXJ0dWFsLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSUNhdGVnb3J5IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJUHJvZHVjdCB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLXByb2R1Y3QnO1xuaW1wb3J0IHsgU2NJVmlydHVhbENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktdmlydHVhbC1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY0lkT3JTbHVnUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLWlkLW9yLXNsdWcucGlwZSc7XG5pbXBvcnQgeyBTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9zYy1tZWRpYS1pbWFnZS10cmFuc2Zvcm1lci5waXBlJztcbmltcG9ydCB7IFNDX0NPTVBBTllfSU5GTyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1jb21wYW55LWluZm8nO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy11cmxzJztcbmltcG9ydCB7IFNjSUJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcyc7XG5cbi8qKlxuICog0JzQtdGF0LDQvdC40LfQvNGLINCz0LXQvdC10YDQsNGG0LjQuCDRgdGF0LXQvCDQtNCw0L3QvdGL0YUgU2NoZW1hLm9yZy5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NoZW1hT3JnRmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+INC60L7QvNC/0LDQvdC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wYW55SW5mbyA9IGluamVjdChTQ19DT01QQU5ZX0lORk8pO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybHMgPSBpbmplY3QoU0NfVVJMUyk7XG5cbiAgICAvKipcbiAgICAgKiDQn9Cw0LnQvywg0LLQvtC30LLRgNCw0YnQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCDRgdC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDQuNGB0YXQvtC00Y8g0LjQtyDQvdCw0YHRgtGA0L7QtdC6INC+0LrRgNGD0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlkT3JTbHVnUGlwZTogU2NJZE9yU2x1Z1BpcGUgPSBpbmplY3QoU2NJZE9yU2x1Z1BpcGUpO1xuXG4gICAgLyoqXG4gICAgICog0J/QsNC50L8g0LTQu9GPINGE0L7RgNC80LjRgNC+0LLQsNC90LjRjyDQv9C+0LvQvdC+0LPQviBVUkkg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQvdCwIG1lZGlhINGB0LXRgNCy0LXRgNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSA9IGluamVjdChTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUpO1xuXG4gICAgLyoqXG4gICAgICog0JPQtdC90LXRgNC40YDRg9C10YIg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0YHRhdC10LzRgyDQtNCw0L3QvdGL0YUg0LTQu9GPINGD0LrQsNC30LDQvdC90L7Qs9C+INC/0YDQvtC00YPQutGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQlNCw0L3QvdGL0LUg0L4g0L/RgNC+0LTRg9C60YLQtS5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdFBhdGggVXJsINC/0YPRgtGMINC6INGC0L7QstCw0YDRgy4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YLQvtCy0LDRgNCwINC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZUZvclByb2R1Y3RJdGVtKHByb2R1Y3Q6IFNjSVByb2R1Y3QsIHByb2R1Y3RQYXRoOiBzdHJpbmcpOiBXaXRoQ29udGV4dDxQcm9kdWN0PiB7XG4gICAgICAgIGNvbnN0IHByb2R1Y3RVcmwgPSBgJHt0aGlzLnVybHMuc2l0ZVVybH0ke3Byb2R1Y3RQYXRoLnJlcGxhY2UoJzppZCcsIHRoaXMuaWRPclNsdWdQaXBlLnRyYW5zZm9ybShwcm9kdWN0KS50b1N0cmluZygpKX1gO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMubWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZS50cmFuc2Zvcm0oKHByb2R1Y3QgYXMgU2NQcm9kdWN0KT8uZ2V0SW1hZ2VQcmV2aWV3KCkgPz8gcHJvZHVjdC5pbWFnZSwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcHJvZHVjdC5wcm9wZXJ0aWVzPy5kZXNjcmlwdGlvbjtcbiAgICAgICAgY29uc3QgcHJpY2VWYWxpZFVudGlsID0gdGhpcy5ub3JtYWxpemVQcmljZVZhbGlkVW50aWwocHJvZHVjdC5kaXNjb3VudD8uZXhwaXJlZEF0KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0Bjb250ZXh0JzogJ2h0dHBzOi8vc2NoZW1hLm9yZycsXG4gICAgICAgICAgICAnQHR5cGUnOiAnUHJvZHVjdCcsXG4gICAgICAgICAgICBuYW1lOiBwcm9kdWN0Lm5hbWUsXG4gICAgICAgICAgICAuLi4oaW1hZ2UgJiYgeyBpbWFnZSB9KSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgbXBuOiBwcm9kdWN0LmNvZGUsXG4gICAgICAgICAgICB1cmw6IHByb2R1Y3RVcmwsXG4gICAgICAgICAgICBvZmZlcnM6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdPZmZlcicsXG4gICAgICAgICAgICAgICAgICAgIHByaWNlQ3VycmVuY3k6ICdSVUInLFxuICAgICAgICAgICAgICAgICAgICAuLi4ocHJpY2VWYWxpZFVudGlsICYmIHsgcHJpY2VWYWxpZFVudGlsIH0pLFxuICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJvZHVjdC5jb3N0UnViLFxuICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHk6IHRoaXMuZ2V0QXZhaWxhYmlsaXR5KHByb2R1Y3QpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtQ29uZGl0aW9uOiAnaHR0cHM6Ly9zY2hlbWEub3JnL05ld0NvbmRpdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHNlbGxlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ09yZ2FuaXphdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbXBhbnlJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVybDogcHJvZHVjdFVybCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfSBhcyBXaXRoQ29udGV4dDxQcm9kdWN0PjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQk9C10L3QtdGA0LjRgNGD0LXRgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDRgdGF0LXQvNGDINC00LDQvdC90YvRhSDQtNC70Y8g0YPQutCw0LfQsNC90L3QvtCz0L4g0L/RgNC+0LTRg9C60YLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeSDQlNCw0L3QvdGL0LUg0L4g0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqIEBwYXJhbSBwcm9kdWN0cyDQlNCw0L3QvdGL0LUg0L4g0L/RgNC+0LTRg9C60YLQsNGFINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlQYXRoIFVybCDQv9GD0YLRjCDQuiDQutCw0YLQtdCz0L7RgNC40Y/QvCDRgtC+0LLQsNGA0L7Qsi4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQsNGC0LXQs9C+0YDQuNC4INC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqIEBwYXJhbSBwcm9kdWN0UGF0aCBVcmwg0L/Rg9GC0Ywg0Log0YLQvtCy0LDRgNGDLiDQkiDQv9GD0YLQuCDQtNC+0LvQttC10L0g0L/RgNC40YHRg9GC0YHRgtCy0L7QstCw0YLRjCDRiNCw0LHQu9C+0L0gJzppZCcsINC+0LHQvtC30L3QsNGH0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC+0LLQsNGA0LAg0LTQu9GPINC/0L7QtNGB0YLQsNC90L7QstC60LguXG4gICAgICogQHBhcmFtIGJyZWFkY3J1bWJzINCU0LDQvdC90YvQtSDQviDRhdC70LXQsdC90YvRhSDQutGA0L7RiNC60LDRhSDQtNC70Y8g0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZUZvckNhdGVnb3J5SXRlbShcbiAgICAgICAgY2F0ZWdvcnk6IFNjSUNhdGVnb3J5IHwgU2NJVmlydHVhbENhdGVnb3J5LFxuICAgICAgICBwcm9kdWN0czogU2NJUHJvZHVjdFtdLFxuICAgICAgICBjYXRlZ29yeVBhdGg6IHN0cmluZyxcbiAgICAgICAgcHJvZHVjdFBhdGg6IHN0cmluZyxcbiAgICAgICAgYnJlYWRjcnVtYnM6IFNjSUJyZWFkY3J1bWJJdGVtW11cbiAgICApOiBXaXRoQ29udGV4dDxDb2xsZWN0aW9uUGFnZT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGNhdGVnb3J5LnNlbz8uZGVzY3JpcHRpb24gPz8gY2F0ZWdvcnkucHJvcGVydGllcz8uZGVzY3JpcHRpb247XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybShjYXRlZ29yeS5pbWFnZSwgdHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdAY29udGV4dCc6ICdodHRwczovL3NjaGVtYS5vcmcnLFxuICAgICAgICAgICAgJ0B0eXBlJzogJ0NvbGxlY3Rpb25QYWdlJyxcbiAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5LnNlbz8udGl0bGUgPz8gY2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdXJsOiB0aGlzLmdldENhdGVnb3J5Q2Fub25pY2FsVXJsKGNhdGVnb3J5LCBjYXRlZ29yeVBhdGgpLFxuICAgICAgICAgICAgLi4uKGltYWdlICYmIHsgaW1hZ2UgfSksXG4gICAgICAgICAgICAvLyBTRU8g0LTQsNC90L3Ri9C1LlxuICAgICAgICAgICAgLi4uKGNhdGVnb3J5LnNlbz8ua2V5d29yZHMgJiYgeyBrZXl3b3JkczogY2F0ZWdvcnkuc2VvLmtleXdvcmRzIH0pLFxuICAgICAgICAgICAgLy8g0J7RgdC90L7QstC90L7QuSDQutC+0L3RgtC10L3RgiDRgdGC0YDQsNC90LjRhtGLIC0g0YHQv9C40YHQvtC6INGC0L7QstCw0YDQvtCyINC4INC/0L7QtNC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgICAgICAgIG1haW5FbnRpdHk6IHRoaXMuY3JlYXRlQ2F0ZWdvcnlNYWluRW50aXR5KGNhdGVnb3J5LCBwcm9kdWN0cywgY2F0ZWdvcnlQYXRoLCBwcm9kdWN0UGF0aCksXG4gICAgICAgICAgICAvLyDQndCw0LLQuNCz0LDRhtC40L7QvdC90YvQtSDRhdC70LXQsdC90YvQtSDQutGA0L7RiNC60LggKFNjaGVtYS5vcmc6IGJyZWFkY3J1bWIpLlxuICAgICAgICAgICAgYnJlYWRjcnVtYjogdGhpcy5jcmVhdGVDYXRhbG9nQnJlYWRjcnVtYnNMaXN0KGJyZWFkY3J1bWJzLCBjYXRlZ29yeVBhdGgpLFxuICAgICAgICAgICAgLy8g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQvNC10YLQsNC00LDQvdC90YvQtSDQtNC70Y8gU0VPLlxuICAgICAgICAgICAgYWJvdXQ6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnQ2F0ZWdvcnlDb2RlJyxcbiAgICAgICAgICAgICAgICBjb2RlVmFsdWU6IGNhdGVnb3J5LnNsdWcsXG4gICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyDQmNC90YTQvtGA0LzQsNGG0LjRjyDQviDRgdCw0LnRgtC1LlxuICAgICAgICAgICAgaXNQYXJ0T2Y6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnV2ViU2l0ZScsXG4gICAgICAgICAgICAgICAgbmFtZTogdGhpcy5jb21wYW55SW5mby5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogdGhpcy51cmxzLnNpdGVVcmwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8g0KHQstGP0LfQsNC90L3Ri9C1INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICAgICAgICByZWxhdGVkTGluazogW1xuICAgICAgICAgICAgICAgIGAke3RoaXMudXJscy5zaXRlVXJsfSR7Y2F0ZWdvcnlQYXRoLnJlcGxhY2UoJzppZCcsICcnKX1gLFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLmlzVmlydHVhbENhdGVnb3J5KGNhdGVnb3J5KSB8fCAhY2F0ZWdvcnkucGFyZW50Q2F0ZWdvcnkgPyBbXSA6IFt0aGlzLmdldENhdGVnb3J5Q2Fub25pY2FsVXJsKGNhdGVnb3J5LnBhcmVudENhdGVnb3J5LCBjYXRlZ29yeVBhdGgpXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgLy8g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDRgdCy0L7QudGB0YLQstCwINC60LDRgtC10LPQvtGA0LjQuCAo0L3QtSDQuNC30L7QsdGA0LDQttC10L3QuNGPKS5cbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0eTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAn0JrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNC+0LInLFxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKHByb2R1Y3RzPy5sZW5ndGggPz8gMCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU2x1ZyDQutCw0YLQtdCz0L7RgNC40LgnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnkuc2x1ZyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vINCU0L7QsdCw0LLQu9GP0LXQvCBTRU8g0LTQsNC90L3Ri9C1INC10YHQu9C4INC10YHRgtGMLlxuICAgICAgICAgICAgICAgIC4uLihjYXRlZ29yeS5zZW8/LmtleXdvcmRzXG4gICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvcGVydHlWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0VPIEtleXdvcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRlZ29yeS5zZW8ua2V5d29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICAuLi4oY2F0ZWdvcnkuc2VvPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NFTyBUaXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnkuc2VvLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9IGFzIFdpdGhDb250ZXh0PENvbGxlY3Rpb25QYWdlPjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQndC+0YDQvNCw0LvQuNC30YPQtdGCINC00LDRgtGDINC+0LrQvtC90YfQsNC90LjRjyDRhtC10L3RiyDQsiDRhNC+0YDQvNCw0YIgU2NoZW1hLm9yZyAoWVlZWS1NTS1ERCkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZXhwaXJlZEF0INCU0LDRgtCwINC00LvRjyDQvdC+0YDQvNCw0LvQuNC30LDRhtC40LhcbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgbm9ybWFsaXplUHJpY2VWYWxpZFVudGlsKGV4cGlyZWRBdD86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgICAgIGlmICghZXhwaXJlZEF0KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGF0ZSA9IGV4cGlyZWRBdC5zbGljZSgwLCAxMCk7XG5cbiAgICAgICAgcmV0dXJuIC9eXFxkezR9LVxcZHsyfS1cXGR7Mn0kLy50ZXN0KGRhdGUpID8gZGF0ZSA6IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntC/0YDQtdC00LXQu9GP0LXRgiDQtNC+0YHRgtGD0L/QvdC+0YHRgtGMINGC0L7QstCw0YDQsCDQv9C+INC00LDQvdC90YvQvCDQv9GA0L7QtNGD0LrRgtCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0JTQsNC90L3Ri9C1INC+INC/0YDQvtC00YPQutGC0LUuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBwcml2YXRlIGdldEF2YWlsYWJpbGl0eShwcm9kdWN0OiBTY0lQcm9kdWN0KTogJ0luU3RvY2snIHwgJ091dE9mU3RvY2snIHwgJ1ByZU9yZGVyJyB7XG4gICAgICAgIGlmIChwcm9kdWN0Lm9uT3JkZXIpIHtcbiAgICAgICAgICAgIHJldHVybiAnUHJlT3JkZXInO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb2R1Y3Quc3RvY2tDb3VudD8ubGVuZ3RoID8gJ0luU3RvY2snIDogJ091dE9mU3RvY2snO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQvtCy0LXRgNGP0LXRgiwg0Y/QstC70Y/QtdGC0YHRjyDQu9C4INC60LDRgtC10LPQvtGA0LjRjyDQstC40YDRgtGD0LDQu9GM0L3QvtC5LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5INCU0LDQvdC90YvQtSDQviDQutCw0YLQtdCz0L7RgNC40Lgg0LTQu9GPINC/0YDQvtCy0LXRgNC60LguXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBwcml2YXRlIGlzVmlydHVhbENhdGVnb3J5KGNhdGVnb3J5OiBTY0lDYXRlZ29yeSB8IFNjSVZpcnR1YWxDYXRlZ29yeSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gJ2NoaWxkQ2F0ZWdvcmllcycgaW4gY2F0ZWdvcnkgJiYgJ3Byb2R1Y3RDYXRlZ29yaWVzJyBpbiBjYXRlZ29yeTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiBVUkwg0LTQu9GPINGD0LrQsNC30LDQvdC90L7QuSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnkg0JTQsNC90L3Ri9C1INC+INC60LDRgtC10LPQvtGA0LjQuFxuICAgICAqIEBwYXJhbSBjYXRlZ29yeVBhdGggVXJsINC/0YPRgtGMINC6INC60LDRgtC10LPQvtGA0LjRj9C8INGC0L7QstCw0YDQvtCyLiDQkiDQv9GD0YLQuCDQtNC+0LvQttC10L0g0L/RgNC40YHRg9GC0YHRgtCy0L7QstCw0YLRjCDRiNCw0LHQu9C+0L0gJzppZCcsINC+0LHQvtC30L3QsNGH0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQutCw0YLQtdCz0L7RgNC40Lgg0LTQu9GPINC/0L7QtNGB0YLQsNC90L7QstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRDYXRlZ29yeUNhbm9uaWNhbFVybChjYXRlZ29yeTogU2NJQ2F0ZWdvcnkgfCBTY0lWaXJ0dWFsQ2F0ZWdvcnksIGNhdGVnb3J5UGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgaWQgPSB0aGlzLmlzVmlydHVhbENhdGVnb3J5KGNhdGVnb3J5KSA/IGNhdGVnb3J5LnNsdWcgOiB0aGlzLmlkT3JTbHVnUGlwZS50cmFuc2Zvcm0oY2F0ZWdvcnkpLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IHBhdGggPSBjYXRlZ29yeVBhdGgucmVwbGFjZSgnOmlkJywgaWQpO1xuXG4gICAgICAgIHJldHVybiBgJHt0aGlzLnVybHMuc2l0ZVVybH0ke3BhdGh9YDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDRjdC70LXQvNC10L3RgiDRgdC/0LjRgdC60LAgSXRlbUxpc3Qg0YEg0LrRgNCw0YLQutC40LwgUHJvZHVjdCDQtNC70Y8g0YHRgtGA0LDQvdC40YbRiyDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQlNCw0L3QvdGL0LUg0L4g0L/RgNC+0LTRg9C60YLQtS5cbiAgICAgKiBAcGFyYW0gcG9zaXRpb24g0J/QvtC30LjRhtC40Y8g0LIg0YHQv9C40YHQutC1LlxuICAgICAqIEBwYXJhbSBwcm9kdWN0UGF0aCBVcmwg0L/Rg9GC0Ywg0Log0YLQvtCy0LDRgNGDLiDQkiDQv9GD0YLQuCDQtNC+0LvQttC10L0g0L/RgNC40YHRg9GC0YHRgtCy0L7QstCw0YLRjCDRiNCw0LHQu9C+0L0gJzppZCcsINC+0LHQvtC30L3QsNGH0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC+0LLQsNGA0LAg0LTQu9GPINC/0L7QtNGB0YLQsNC90L7QstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVQcm9kdWN0c0xpc3RJdGVtKHByb2R1Y3Q6IFNjSVByb2R1Y3QsIHBvc2l0aW9uOiBudW1iZXIsIHByb2R1Y3RQYXRoOiBzdHJpbmcpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCBwcm9kdWN0VXJsID0gYCR7dGhpcy51cmxzLnNpdGVVcmx9JHtwcm9kdWN0UGF0aC5yZXBsYWNlKCc6aWQnLCB0aGlzLmlkT3JTbHVnUGlwZS50cmFuc2Zvcm0ocHJvZHVjdCkudG9TdHJpbmcoKSl9YDtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bm5lY2Vzc2FyeS1jb25kaXRpb25cbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLm1lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUudHJhbnNmb3JtKChwcm9kdWN0IGFzIFNjUHJvZHVjdCk/LmdldEltYWdlUHJldmlldz8uKCkgPz8gcHJvZHVjdC5pbWFnZSwgdHJ1ZSk7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gcHJvZHVjdC5zZW8/LmRlc2NyaXB0aW9uID8/IHByb2R1Y3QucHJvcGVydGllcz8uZGVzY3JpcHRpb247XG4gICAgICAgIGNvbnN0IHByaWNlVmFsaWRVbnRpbCA9IHRoaXMubm9ybWFsaXplUHJpY2VWYWxpZFVudGlsKHByb2R1Y3QuZGlzY291bnQ/LmV4cGlyZWRBdCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdAdHlwZSc6ICdMaXN0SXRlbScsXG4gICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgIGl0ZW06IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvZHVjdCcsXG4gICAgICAgICAgICAgICAgbmFtZTogcHJvZHVjdC5uYW1lLFxuICAgICAgICAgICAgICAgIHVybDogcHJvZHVjdFVybCxcbiAgICAgICAgICAgICAgICAuLi4oaW1hZ2UgJiYgeyBpbWFnZSB9KSxcbiAgICAgICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgICAgICBvZmZlcnM6IFtcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ09mZmVyJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlQ3VycmVuY3k6ICdSVUInLFxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uKHByaWNlVmFsaWRVbnRpbCAmJiB7IHByaWNlVmFsaWRVbnRpbCB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiBwcm9kdWN0LmNvc3RSdWIsXG4gICAgICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHk6IHRoaXMuZ2V0QXZhaWxhYmlsaXR5KHByb2R1Y3QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbUNvbmRpdGlvbjogJ2h0dHBzOi8vc2NoZW1hLm9yZy9OZXdDb25kaXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsbGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ09yZ2FuaXphdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5jb21wYW55SW5mby5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogcHJvZHVjdFVybCxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiBtYWluRW50aXR5INC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4INGC0L7QstCw0YDQvtCyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5INCU0LDQvdC90YvQtSDQviDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICogQHBhcmFtIHByb2R1Y3RzINCU0LDQvdC90YvQtSDQviDRgtC+0LLQsNGA0LDRhSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICogQHBhcmFtIGNhdGVnb3J5UGF0aCBVcmwg0L/Rg9GC0Ywg0Log0LrQsNGC0LXQs9C+0YDQuNGP0Lwg0YLQvtCy0LDRgNC+0LIuINCSINC/0YPRgtC4INC00L7Qu9C20LXQvSDQv9GA0LjRgdGD0YLRgdGC0LLQvtCy0LDRgtGMINGI0LDQsdC70L7QvSAnOmlkJywg0L7QsdC+0LfQvdCw0YfQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60LDRgtC10LPQvtGA0LjQuCDQtNC70Y8g0L/QvtC00YHRgtCw0L3QvtCy0LrQuC5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdFBhdGggVXJsINC/0YPRgtGMINC6INGC0L7QstCw0YDRgy4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YLQvtCy0LDRgNCwINC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2F0ZWdvcnlNYWluRW50aXR5KGNhdGVnb3J5OiBTY0lDYXRlZ29yeSB8IFNjSVZpcnR1YWxDYXRlZ29yeSwgcHJvZHVjdHM6IFNjSVByb2R1Y3RbXSwgY2F0ZWdvcnlQYXRoOiBzdHJpbmcsIHByb2R1Y3RQYXRoOiBzdHJpbmcpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCBjaGlsZENhdGVnb3JpZXMgPSB0aGlzLmlzVmlydHVhbENhdGVnb3J5KGNhdGVnb3J5KVxuICAgICAgICAgICAgPyBbLi4uKChjYXRlZ29yeSBhcyBTY1ZpcnR1YWxDYXRlZ29yeSkuY2hpbGRDYXRlZ29yaWVzID8/IFtdKSwgLi4uKChjYXRlZ29yeSBhcyBTY1ZpcnR1YWxDYXRlZ29yeSkucHJvZHVjdENhdGVnb3JpZXMgPz8gW10pXVxuICAgICAgICAgICAgOiAoKGNhdGVnb3J5IGFzIFNjQ2F0ZWdvcnkpLmNhdGVnb3JpZXMgPz8gW10pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQHR5cGUnOiAnSXRlbUxpc3QnLFxuICAgICAgICAgICAgbnVtYmVyT2ZJdGVtczogcHJvZHVjdHMubGVuZ3RoICsgY2hpbGRDYXRlZ29yaWVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW1MaXN0T3JkZXI6ICdodHRwczovL3NjaGVtYS5vcmcvSXRlbUxpc3RVbm9yZGVyZWQnLFxuICAgICAgICAgICAgaXRlbUxpc3RFbGVtZW50OiBbXG4gICAgICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INC/0L7QtNC60LDRgtC10LPQvtGA0LjQuCDQsiDQvdCw0YfQsNC70L4g0YHQv9C40YHQutCwLlxuICAgICAgICAgICAgICAgIC4uLmNoaWxkQ2F0ZWdvcmllcy5zbGljZSgwLCA1KS5tYXAoKHN1YkNhdGVnb3J5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0xpc3RJdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IGluZGV4ICsgMSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogc3ViQ2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB0aGlzLmdldENhdGVnb3J5Q2Fub25pY2FsVXJsKHN1YkNhdGVnb3J5LCBjYXRlZ29yeVBhdGgpLFxuICAgICAgICAgICAgICAgICAgICBpbWFnZTogdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybShzdWJDYXRlZ29yeS5pbWFnZSwgdHJ1ZSksXG4gICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBzdWJDYXRlZ29yeS5zZW8/LmRlc2NyaXB0aW9uID8/IHN1YkNhdGVnb3J5LnByb3BlcnRpZXM/LmRlc2NyaXB0aW9uLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0YLQvtCy0LDRgNGLINC/0L7RgdC70LUg0L/QvtC00LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAgICAgICAgICAgIC4uLnByb2R1Y3RzLnNsaWNlKDAsIDEwKS5tYXAoKHByb2R1Y3QsIGluZGV4KSA9PiB0aGlzLmNyZWF0ZVByb2R1Y3RzTGlzdEl0ZW0ocHJvZHVjdCwgY2hpbGRDYXRlZ29yaWVzLmxlbmd0aCArIGluZGV4ICsgMSwgcHJvZHVjdFBhdGgpKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQvNCw0YHRgdC40LIgTGlua0RhdGEg0LIgQnJlYWRjcnVtYkxpc3Qg0LTQu9GPINC60LDRgtCw0LvQvtCz0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnJlYWRjcnVtYnMg0JzQsNGB0YHQuNCyINGF0LvQtdCx0L3Ri9GFINC60YDQvtGI0LXQui5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlQYXRoIFVybCDQv9GD0YLRjCDQuiDQutCw0YLQtdCz0L7RgNC40Y/QvCDRgtC+0LLQsNGA0L7Qsi4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQsNGC0LXQs9C+0YDQuNC4INC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2F0YWxvZ0JyZWFkY3J1bWJzTGlzdChicmVhZGNydW1iczogU2NJQnJlYWRjcnVtYkl0ZW1bXSwgY2F0ZWdvcnlQYXRoOiBzdHJpbmcpOiBCcmVhZGNydW1iTGlzdCB7XG4gICAgICAgIGNvbnN0IGJyZWFkY3J1bWJJdGVtczogTGlzdEl0ZW1bXSA9IFtcbiAgICAgICAgICAgIC8vINCS0YHQtdCz0LTQsCDQtNC+0LHQsNCy0LvRj9C10Lwg0LPQu9Cw0LLQvdGD0Y4g0YHRgtGA0LDQvdC40YbRgy5cbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiAxLFxuICAgICAgICAgICAgICAgIG5hbWU6ICfQk9C70LDQstC90LDRjycsXG4gICAgICAgICAgICAgICAgaXRlbTogdGhpcy51cmxzLnNpdGVVcmwsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INC60LDRgtCw0LvQvtCzLlxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICdAdHlwZSc6ICdMaXN0SXRlbScsXG4gICAgICAgICAgICAgICAgcG9zaXRpb246IDIsXG4gICAgICAgICAgICAgICAgbmFtZTogJ9Ca0LDRgtCw0LvQvtCzJyxcbiAgICAgICAgICAgICAgICBpdGVtOiBgJHt0aGlzLnVybHMuc2l0ZVVybH0vJHtjYXRlZ29yeVBhdGh9YCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INGB0YPRidC10YHRgtCy0YPRjtGJ0LjQtSBicmVhZGNydW1icyDRgSDQutC+0YDRgNC10LrRgtC40YDQvtCy0LrQvtC5INC/0L7Qt9C40YbQuNC5LlxuICAgICAgICBicmVhZGNydW1icy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGluayA9IGlzQXJyYXkoaXRlbS5yb3V0ZXJMaW5rKSA/IGl0ZW0ucm91dGVyTGluay5qb2luKCcvJykgOiBpdGVtLnJvdXRlckxpbms7XG5cbiAgICAgICAgICAgIGJyZWFkY3J1bWJJdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLFxuICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBpbmRleCArIDMsIC8vINCd0LDRh9C40L3QsNC10Lwg0YEg0L/QvtC30LjRhtC40LggMyAo0L/QvtGB0LvQtSDQk9C70LDQstC90LDRjyDQuCDQmtCw0YLQsNC70L7QsykuXG4gICAgICAgICAgICAgICAgbmFtZTogaXRlbS5sYWJlbCxcbiAgICAgICAgICAgICAgICBpdGVtOiBsaW5rID8gYCR7dGhpcy51cmxzLnNpdGVVcmx9LyR7bGlua31gIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQHR5cGUnOiAnQnJlYWRjcnVtYkxpc3QnLFxuICAgICAgICAgICAgaXRlbUxpc3RFbGVtZW50OiBicmVhZGNydW1iSXRlbXMsXG4gICAgICAgIH0gYXMgQnJlYWRjcnVtYkxpc3Q7XG4gICAgfVxufVxuIl19
|
|
535
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLW9yZy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZW8vY2xhc3Nlcy9zY2hlbWEtb3JnLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFZMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRy9DOztHQUVHO0FBSUgsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQUlJOztXQUVHO1FBQ2MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdkQ7O1dBRUc7UUFDYyxTQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhDOztXQUVHO1FBQ0ssaUJBQVksR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlEOztXQUVHO1FBQ2MsOEJBQXlCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7S0F5aUJwRjtJQXZpQkc7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCLENBQUMsT0FBbUIsRUFBRSxXQUFtQixFQUFFLEVBQVc7UUFDL0UsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDeEgsdUVBQXVFO1FBQ3ZFLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUUsT0FBcUIsRUFBRSxlQUFlLEVBQUUsRUFBRSxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0gsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7UUFDcEQsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFbkYsT0FBTztZQUNILFVBQVUsRUFBRSxvQkFBb0I7WUFDaEMsT0FBTyxFQUFFLFNBQVM7WUFDbEIsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN4QixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDbEIsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUNuQyxHQUFHLEVBQUUsT0FBTyxDQUFDLElBQUk7WUFDakIsR0FBRyxFQUFFLFVBQVU7WUFDZixNQUFNLEVBQUU7Z0JBQ0osT0FBTyxFQUFFLE9BQU87Z0JBQ2hCLGFBQWEsRUFBRSxLQUFLO2dCQUNwQixHQUFHLENBQUMsZUFBZSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUM7Z0JBQzNDLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDdEIsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO2dCQUMzQyxhQUFhLEVBQUUsaUNBQWlDO2dCQUNoRCxNQUFNLEVBQUU7b0JBQ0osT0FBTyxFQUFFLGNBQWM7b0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7aUJBQzlCO2dCQUNELEdBQUcsRUFBRSxVQUFVO2FBQ2xCO1NBQ29CLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7Ozs7Ozs7T0FTRztJQUNJLHVCQUF1QixDQUMxQixRQUEwQyxFQUMxQyxRQUFzQixFQUN0QixZQUFvQixFQUNwQixXQUFtQixFQUNuQixXQUFnQyxFQUNoQyxFQUFXO1FBRVgsTUFBTSxXQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxXQUFXLElBQUksUUFBUSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7UUFDbEYsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBRTdFLE9BQU87WUFDSCxVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN4QixJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLLElBQUksUUFBUSxDQUFDLElBQUk7WUFDMUMsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ25DLEdBQUcsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsUUFBUSxFQUFFLFlBQVksQ0FBQztZQUN6RCxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDdkIsY0FBYztZQUNkLEdBQUcsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLFFBQVEsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xFLDZEQUE2RDtZQUM3RCxVQUFVLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFLFdBQVcsQ0FBQztZQUN4Rix5REFBeUQ7WUFDekQsVUFBVSxFQUFFLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDO1lBQ3hFLHFDQUFxQztZQUNyQyxLQUFLLEVBQUU7Z0JBQ0gsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLFNBQVMsRUFBRSxRQUFRLENBQUMsSUFBSTtnQkFDeEIsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJO2dCQUNuQixHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7YUFDdEM7WUFDRCxzQkFBc0I7WUFDdEIsV0FBVyxFQUFFO2dCQUNULEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUU7Z0JBQ3hELEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFFBQVEsQ0FBQyxjQUFjLEVBQUUsWUFBWSxDQUFDLENBQUMsQ0FBQzthQUNqSjtZQUNELHNEQUFzRDtZQUN0RCxrQkFBa0IsRUFBRTtnQkFDaEI7b0JBQ0ksT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLElBQUksRUFBRSxvQkFBb0I7b0JBQzFCLHVFQUF1RTtvQkFDdkUsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUMsQ0FBQyxRQUFRLEVBQUU7aUJBQzVDO2dCQUNEO29CQUNJLE9BQU8sRUFBRSxlQUFlO29CQUN4QixJQUFJLEVBQUUsZ0JBQWdCO29CQUN0QixLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUk7aUJBQ3ZCO2dCQUNELGtDQUFrQztnQkFDbEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsUUFBUTtvQkFDdEIsQ0FBQyxDQUFDO3dCQUNJOzRCQUNJLE9BQU8sRUFBRSxlQUFlOzRCQUN4QixJQUFJLEVBQUUsY0FBYzs0QkFDcEIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUTt5QkFDL0I7cUJBQ0o7b0JBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDVCxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxLQUFLO29CQUNuQixDQUFDLENBQUM7d0JBQ0k7NEJBQ0ksT0FBTyxFQUFFLGVBQWU7NEJBQ3hCLElBQUksRUFBRSxXQUFXOzRCQUNqQixLQUFLLEVBQUUsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLO3lCQUM1QjtxQkFDSjtvQkFDSCxDQUFDLENBQUMsRUFBRSxDQUFDO2FBQ1o7U0FDMkIsQ0FBQztJQUNyQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCx3REFBd0Q7SUFDakQsdUJBQXVCO1FBQzFCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXpFLE9BQU87WUFDSCxVQUFVLEVBQUUsb0JBQW9CO1lBQ2hDLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxlQUFlO1lBQzFDLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7WUFDM0IsU0FBUyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtZQUNoQyxHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO1lBQ3RCLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU87WUFDdkIsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUN4QixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO1lBQzVCLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7WUFDakMsR0FBRyxDQUFDLGFBQWEsSUFBSSxFQUFFLE9BQU8sRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUNoRCxZQUFZLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFtQyxDQUFDO1lBQ3pILDRDQUE0QztZQUM1QyxjQUFjO1lBQ2QsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRztZQUMzQixVQUFVLEVBQUU7Z0JBQ1IsT0FBTyxFQUFFLGVBQWU7Z0JBQ3hCLFVBQVUsRUFBRSxNQUFNO2dCQUNsQixLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJO2FBQy9CO1lBQ0QsWUFBWSxFQUFFLElBQUksQ0FBQywrQkFBK0IsRUFBRTtZQUNwRCxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJO2dCQUNoRCxRQUFRLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDbkUsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLElBQUksRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxxQkFBcUI7b0JBQ25ELE9BQU8sRUFBRSxnQkFBZ0I7aUJBQzVCLENBQUMsQ0FBQzthQUNOLENBQUM7U0FDd0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCLENBQUMsSUFBYSxFQUFFLFFBQWdCLEVBQUUsRUFBVztRQUN0RSxNQUFNLE9BQU8sR0FBRyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3JGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RSxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ2pELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsV0FBVyxDQUFDO1FBQzFDLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDL0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUV0RSxPQUFPO1lBQ0gsVUFBVSxFQUFFLG9CQUFvQjtZQUNoQyxPQUFPLEVBQUUsYUFBYTtZQUN0QixHQUFHLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUFDO1lBQ3hCLFFBQVE7WUFDUixHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDbkMsR0FBRyxDQUFDLEtBQUssSUFBSSxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLEdBQUcsQ0FBQyxhQUFhLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUN2QyxHQUFHLENBQUMsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDbkMsR0FBRyxFQUFFLE9BQU87WUFDWixnQkFBZ0IsRUFBRSxPQUFPO1lBQ3pCLE1BQU0sRUFBRTtnQkFDSixPQUFPLEVBQUUsY0FBYztnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDM0IsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTzthQUN6QjtZQUNELFNBQVMsRUFBRTtnQkFDUCxPQUFPLEVBQUUsY0FBYztnQkFDdkIsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSTtnQkFDM0IsSUFBSSxFQUFFO29CQUNGLE9BQU8sRUFBRSxhQUFhO29CQUN0QixHQUFHLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO2lCQUN6QjthQUNKO1NBQ3dCLENBQUM7SUFDbEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxrQkFBa0IsQ0FBQyxLQUFrQixFQUFFLFFBQWdCLEVBQUUsUUFBaUIsRUFBRSxFQUFXO1FBQzFGLE1BQU0sT0FBTyxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsUUFBUSxFQUFFLENBQUM7UUFFbEQsT0FBTztZQUNILFVBQVUsRUFBRSxvQkFBb0I7WUFDaEMsT0FBTyxFQUFFLFNBQVM7WUFDbEIsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQztZQUN4QixHQUFHLENBQUMsUUFBUSxJQUFJLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxDQUFDO1lBQ25DLEdBQUcsRUFBRSxPQUFPO1lBQ1osVUFBVSxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxVQUFVO2dCQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLFFBQVE7Z0JBQ25CLGNBQWMsRUFBRTtvQkFDWixPQUFPLEVBQUUsUUFBUTtvQkFDakIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztpQkFDcEM7YUFDSixDQUFDLENBQUM7U0FDa0IsQ0FBQztJQUM5QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILCtFQUErRTtJQUN4RSxLQUFLLENBQUMsSUFBK0I7UUFDeEMsT0FBTztZQUNILFVBQVUsRUFBRSxvQkFBb0I7WUFDaEMsUUFBUSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLENBQUM7U0FDdEIsQ0FBQztJQUN2QyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtEQUFrRDtJQUMxQyxtQkFBbUIsQ0FBQyxPQUFzQztRQUM5RCxNQUFNLGFBQWEsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFbEcsSUFBSSxDQUFDLGFBQWEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwRyxPQUFPLFNBQVMsQ0FBQztRQUNyQixDQUFDO1FBRUQsT0FBTztZQUNILE9BQU8sRUFBRSxlQUFlO1lBQ3hCLEdBQUcsQ0FBQyxhQUFhLElBQUksRUFBRSxhQUFhLEVBQUUsQ0FBQztZQUN2QyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxFQUFFLGVBQWUsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDOUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ3hELEdBQUcsQ0FBQyxPQUFPLENBQUMsVUFBVSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUM3RCxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLGNBQWMsRUFBRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDOUQsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLCtCQUErQjtRQUNuQyxNQUFNLGFBQWEsR0FBbUI7WUFDbEM7Z0JBQ0ksT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLFdBQVcsRUFBRSxrQkFBa0I7Z0JBQy9CLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUs7Z0JBQ2pDLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7Z0JBQzVCLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixpQkFBaUIsRUFBRSxTQUFTO2FBQy9CO1NBQ0osQ0FBQztRQUVGLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNsQyxhQUFhLENBQUMsSUFBSSxDQUFDO2dCQUNmLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixXQUFXLEVBQUUsa0JBQWtCO2dCQUMvQixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjO2dCQUMxQyxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsaUJBQWlCLEVBQUUsU0FBUzthQUMvQixDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3RCLGFBQWEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2YsT0FBTyxFQUFFLGNBQWM7Z0JBQ3ZCLFdBQVcsRUFBRSxJQUFJO2dCQUNqQixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsS0FBSztnQkFDcEMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxDQUFDLElBQUk7Z0JBQy9CLFVBQVUsRUFBRSxJQUFJO2dCQUNoQixpQkFBaUIsRUFBRSxTQUFTO2FBQy9CLENBQUMsQ0FBQztRQUNQLENBQUM7UUFFRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtEQUFrRDtJQUMxQyxTQUFTLENBQUMsSUFBWTtRQUMxQixNQUFNLFdBQVcsR0FBRyxJQUFJO2FBQ25CLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUU7WUFDakIsSUFBSSxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ2QsT0FBTyxJQUFJLENBQUM7WUFDaEIsQ0FBQztZQUVELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7WUFFeEMsT0FBTyxhQUFhLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQzdFLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVkLE9BQU8sV0FBVzthQUNiLFVBQVUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDO2FBQ3ZCLFVBQVUsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDO2FBQ2hDLElBQUksRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0RBQWtEO0lBQzFDLG1CQUFtQixDQUFDLFNBQWtCO1FBQzFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNiLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxJQUFJLG9CQUFvQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQ3ZDLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyw2Q0FBNkMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7UUFFcEYsSUFBSSxhQUFhLEVBQUUsQ0FBQztZQUNoQixNQUFNLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsYUFBYSxDQUFDO1lBRTNELE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsSUFBSSxLQUFLLElBQUksT0FBTyxLQUFLLENBQUM7UUFDNUQsQ0FBQztRQUVELE1BQU0sYUFBYSxHQUFHLDZCQUE2QixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUVwRSxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDakIsT0FBTyxTQUFTLENBQUM7UUFDckIsQ0FBQztRQUVELE1BQU0sQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLEdBQUcsYUFBYSxDQUFDO1FBRTNDLE9BQU8sR0FBRyxJQUFJLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsa0RBQWtEO0lBQzFDLHdCQUF3QixDQUFDLFNBQWtCO1FBQy9DLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNiLE9BQU8sU0FBUyxDQUFDO1FBQ3JCLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVwQyxPQUFPLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDL0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxrREFBa0Q7SUFDMUMsZUFBZSxDQUFDLE9BQW1CO1FBQ3ZDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2xCLE9BQU8sNkJBQTZCLENBQUM7UUFDekMsQ0FBQztRQUVELE9BQU8sT0FBTyxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLDRCQUE0QixDQUFDLENBQUMsQ0FBQywrQkFBK0IsQ0FBQztJQUN2RyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGtEQUFrRDtJQUMxQyxpQkFBaUIsQ0FBQyxRQUEwQztRQUNoRSxPQUFPLGlCQUFpQixJQUFJLFFBQVEsSUFBSSxtQkFBbUIsSUFBSSxRQUFRLENBQUM7SUFDNUUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ssdUJBQXVCLENBQUMsUUFBMEMsRUFBRSxZQUFvQjtRQUM1RixNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQy9HLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLEVBQUUsQ0FBQztJQUN6QyxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ssc0JBQXNCLENBQUMsT0FBbUIsRUFBRSxRQUFnQixFQUFFLFdBQW1CO1FBQ3JGLE1BQU0sVUFBVSxHQUFHLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQ3hILHVFQUF1RTtRQUN2RSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsU0FBUyxDQUFFLE9BQXFCLEVBQUUsZUFBZSxFQUFFLEVBQUUsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNILE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsV0FBVyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEVBQUUsV0FBVyxDQUFDO1FBQ2hGLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRW5GLE9BQU87WUFDSCxPQUFPLEVBQUUsVUFBVTtZQUNuQixRQUFRO1lBQ1IsSUFBSSxFQUFFO2dCQUNGLE9BQU8sRUFBRSxTQUFTO2dCQUNsQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7Z0JBQ2xCLEdBQUcsRUFBRSxVQUFVO2dCQUNmLEdBQUcsQ0FBQyxLQUFLLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztnQkFDdkIsR0FBRyxDQUFDLFdBQVcsSUFBSSxFQUFFLFdBQVcsRUFBRSxDQUFDO2dCQUNuQyxNQUFNLEVBQUU7b0JBQ0osT0FBTyxFQUFFLE9BQU87b0JBQ2hCLGFBQWEsRUFBRSxLQUFLO29CQUNwQixHQUFHLENBQUMsZUFBZSxJQUFJLEVBQUUsZUFBZSxFQUFFLENBQUM7b0JBQzNDLEtBQUssRUFBRSxPQUFPLENBQUMsT0FBTztvQkFDdEIsWUFBWSxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDO29CQUMzQyxhQUFhLEVBQUUsaUNBQWlDO29CQUNoRCxNQUFNLEVBQUU7d0JBQ0osT0FBTyxFQUFFLGNBQWM7d0JBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUk7cUJBQzlCO29CQUNELEdBQUcsRUFBRSxVQUFVO2lCQUNsQjthQUNKO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ssd0JBQXdCLENBQUMsUUFBMEMsRUFBRSxRQUFzQixFQUFFLFlBQW9CLEVBQUUsV0FBbUI7UUFDMUksTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsQ0FBQztZQUNwRCxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUUsUUFBOEIsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFFLFFBQThCLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUM7WUFDNUgsQ0FBQyxDQUFDLENBQUUsUUFBdUIsQ0FBQyxVQUFVLElBQUksRUFBRSxDQUFDLENBQUM7UUFFbEQsT0FBTztZQUNILE9BQU8sRUFBRSxVQUFVO1lBQ25CLGFBQWEsRUFBRSxRQUFRLENBQUMsTUFBTSxHQUFHLGVBQWUsQ0FBQyxNQUFNO1lBQ3ZELGFBQWEsRUFBRSxzQ0FBc0M7WUFDckQsZUFBZSxFQUFFO2dCQUNiLDBDQUEwQztnQkFDMUMsR0FBRyxlQUFlLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLEVBQUU7b0JBQ3RELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFDaEYsTUFBTSxXQUFXLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRSxXQUFXLElBQUksV0FBVyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUM7b0JBRXhGLE9BQU87d0JBQ0gsT0FBTyxFQUFFLFVBQVU7d0JBQ25CLFFBQVEsRUFBRSxLQUFLLEdBQUcsQ0FBQzt3QkFDbkIsSUFBSSxFQUFFOzRCQUNGLE9BQU8sRUFBRSxnQkFBZ0I7NEJBQ3pCLElBQUksRUFBRSxXQUFXLENBQUMsSUFBSTs0QkFDdEIsR0FBRyxFQUFFLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxXQUFXLEVBQUUsWUFBWSxDQUFDOzRCQUM1RCxHQUFHLENBQUMsS0FBSyxJQUFJLEVBQUUsS0FBSyxFQUFFLENBQUM7NEJBQ3ZCLEdBQUcsQ0FBQyxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsQ0FBQzt5QkFDdEM7cUJBQ0osQ0FBQztnQkFDTixDQUFDLENBQUM7Z0JBQ0YsdUNBQXVDO2dCQUN2QyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxDQUFDO2FBQzFJO1NBQ0osQ0FBQztJQUNOLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLDRCQUE0QixDQUFDLFdBQWdDLEVBQUUsWUFBb0I7UUFDdkYsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDO1FBQzVFLE1BQU0sZUFBZSxHQUFlO1lBQ2hDLHFDQUFxQztZQUNyQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztZQUM5RCxxQkFBcUI7WUFDckIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsVUFBVSxDQUFDO1NBQzFELENBQUM7UUFFRiwrREFBK0Q7UUFDL0QsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUNoQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUVwRixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2xJLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNILE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsYUFBYSxFQUFFLDJDQUEyQztZQUMxRCxlQUFlLEVBQUUsZUFBZTtTQUNqQixDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxrREFBa0Q7SUFDMUMsd0JBQXdCLENBQUMsUUFBZ0IsRUFBRSxJQUFZLEVBQUUsR0FBWTtRQUN6RSxPQUFPO1lBQ0gsT0FBTyxFQUFFLFVBQVU7WUFDbkIsUUFBUTtZQUNSLEdBQUcsQ0FBQyxHQUFHO2dCQUNILENBQUMsQ0FBQztvQkFDSSxJQUFJLEVBQUU7d0JBQ0YsS0FBSyxFQUFFLEdBQUc7d0JBQ1YsSUFBSTtxQkFDUDtpQkFDSjtnQkFDSCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNOLENBQUM7SUFDbEIsQ0FBQzsrR0EzakJRLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBRmIsTUFBTTs7NEZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNBcnJheSwgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCcmVhZGNydW1iTGlzdCwgQ29sbGVjdGlvblBhZ2UsIENvbnRhY3RQb2ludCwgRkFRUGFnZSwgTGlzdEl0ZW0sIE5ld3NBcnRpY2xlLCBPcmdhbml6YXRpb24sIFBvc3RhbEFkZHJlc3MsIFByb2R1Y3QsIFRoaW5nLCBXaXRoQ29udGV4dCB9IGZyb20gJ3NjaGVtYS1kdHMnO1xuXG5pbXBvcnQgeyBTY0NhdGVnb3J5IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9kdG8vc2MtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NQcm9kdWN0IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9kdG8vc2MtcHJvZHVjdCc7XG5pbXBvcnQgeyBTY1ZpcnR1YWxDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvZHRvL3NjLXZpcnR1YWwtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY0lQcm9kdWN0IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktcHJvZHVjdCc7XG5pbXBvcnQgeyBTY0lWaXJ0dWFsQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS12aXJ0dWFsLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSUNvbXBhbnlCYXNlSW5mbyB9IGZyb20gJy4uLy4uL2NvbmZpZy9zYy1pLWNvbXBhbnktYmFzZS1pbmZvJztcbmltcG9ydCB7IFNjRmFxSXRlbSB9IGZyb20gJy4uLy4uL2ZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zL2ludGVyZmFjZXMvc2MtaS1mYXEtaXRlbSc7XG5pbXBvcnQgeyBTY0lOZXdzIH0gZnJvbSAnLi4vLi4vbmV3cy9pbnRlcmZhY2VzL3NjLWktbmV3cyc7XG5pbXBvcnQgeyBTY0lkT3JTbHVnUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLWlkLW9yLXNsdWcucGlwZSc7XG5pbXBvcnQgeyBTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9zYy1tZWRpYS1pbWFnZS10cmFuc2Zvcm1lci5waXBlJztcbmltcG9ydCB7IFNDX0NPTVBBTllfSU5GTyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1jb21wYW55LWluZm8nO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy11cmxzJztcbmltcG9ydCB7IFNjSUJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zYy1pLWJyZWFkY3J1bWItaXRlbSc7XG5cbi8qKlxuICog0JzQtdGF0LDQvdC40LfQvNGLINCz0LXQvdC10YDQsNGG0LjQuCDRgdGF0LXQvCDQtNCw0L3QvdGL0YUgU2NoZW1hLm9yZy5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NoZW1hT3JnRmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+INC60L7QvNC/0LDQvdC40LguXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wYW55SW5mbyA9IGluamVjdChTQ19DT01QQU5ZX0lORk8pO1xuXG4gICAgLyoqXG4gICAgICog0KHQv9C40YHQvtC6INGB0YHRi9C70L7QuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IHVybHMgPSBpbmplY3QoU0NfVVJMUyk7XG5cbiAgICAvKipcbiAgICAgKiDQn9Cw0LnQvywg0LLQvtC30LLRgNCw0YnQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC40LvQuCDRgdC40LzQstC+0LvRjNC90L7QtSDQvtCx0L7Qt9C90LDRh9C10L3QuNC1IChzbHVnKSDQuNGB0YXQvtC00Y8g0LjQtyDQvdCw0YHRgtGA0L7QtdC6INC+0LrRgNGD0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcml2YXRlIGlkT3JTbHVnUGlwZTogU2NJZE9yU2x1Z1BpcGUgPSBpbmplY3QoU2NJZE9yU2x1Z1BpcGUpO1xuXG4gICAgLyoqXG4gICAgICog0J/QsNC50L8g0LTQu9GPINGE0L7RgNC80LjRgNC+0LLQsNC90LjRjyDQv9C+0LvQvdC+0LPQviBVUkkg0LjQt9C+0LHRgNCw0LbQtdC90LjRjyDQvdCwIG1lZGlhINGB0LXRgNCy0LXRgNC1LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSA9IGluamVjdChTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUpO1xuXG4gICAgLyoqXG4gICAgICog0JPQtdC90LXRgNC40YDRg9C10YIg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0YHRhdC10LzRgyDQtNCw0L3QvdGL0YUg0LTQu9GPINGD0LrQsNC30LDQvdC90L7Qs9C+INC/0YDQvtC00YPQutGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQlNCw0L3QvdGL0LUg0L4g0L/RgNC+0LTRg9C60YLQtS5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdFBhdGggVXJsINC/0YPRgtGMINC6INGC0L7QstCw0YDRgy4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YLQvtCy0LDRgNCwINC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqIEBwYXJhbSBpZCDQndC10L7QsdGP0LfQsNGC0LXQu9GM0L3Ri9C5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0YPRidC90L7RgdGC0Lgg0LTQu9GPINC/0L7Qu9GPIGBAaWRgINCyIEpTT04tTEQuXG4gICAgICovXG4gICAgcHVibGljIGdlbmVyYXRlRm9yUHJvZHVjdEl0ZW0ocHJvZHVjdDogU2NJUHJvZHVjdCwgcHJvZHVjdFBhdGg6IHN0cmluZywgaWQ/OiBzdHJpbmcpOiBXaXRoQ29udGV4dDxQcm9kdWN0PiB7XG4gICAgICAgIGNvbnN0IHByb2R1Y3RVcmwgPSBgJHt0aGlzLnVybHMuc2l0ZVVybH0ke3Byb2R1Y3RQYXRoLnJlcGxhY2UoJzppZCcsIHRoaXMuaWRPclNsdWdQaXBlLnRyYW5zZm9ybShwcm9kdWN0KS50b1N0cmluZygpKX1gO1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMubWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZS50cmFuc2Zvcm0oKHByb2R1Y3QgYXMgU2NQcm9kdWN0KT8uZ2V0SW1hZ2VQcmV2aWV3Py4oKSA/PyBwcm9kdWN0LmltYWdlLCB0cnVlKTtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb24gPSBwcm9kdWN0LnByb3BlcnRpZXM/LmRlc2NyaXB0aW9uO1xuICAgICAgICBjb25zdCBwcmljZVZhbGlkVW50aWwgPSB0aGlzLm5vcm1hbGl6ZVByaWNlVmFsaWRVbnRpbChwcm9kdWN0LmRpc2NvdW50Py5leHBpcmVkQXQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQGNvbnRleHQnOiAnaHR0cHM6Ly9zY2hlbWEub3JnJyxcbiAgICAgICAgICAgICdAdHlwZSc6ICdQcm9kdWN0JyxcbiAgICAgICAgICAgIC4uLihpZCAmJiB7ICdAaWQnOiBpZCB9KSxcbiAgICAgICAgICAgIG5hbWU6IHByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgIC4uLihpbWFnZSAmJiB7IGltYWdlIH0pLFxuICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICBtcG46IHByb2R1Y3QuY29kZSxcbiAgICAgICAgICAgIHVybDogcHJvZHVjdFVybCxcbiAgICAgICAgICAgIG9mZmVyczoge1xuICAgICAgICAgICAgICAgICdAdHlwZSc6ICdPZmZlcicsXG4gICAgICAgICAgICAgICAgcHJpY2VDdXJyZW5jeTogJ1JVQicsXG4gICAgICAgICAgICAgICAgLi4uKHByaWNlVmFsaWRVbnRpbCAmJiB7IHByaWNlVmFsaWRVbnRpbCB9KSxcbiAgICAgICAgICAgICAgICBwcmljZTogcHJvZHVjdC5jb3N0UnViLFxuICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eTogdGhpcy5nZXRBdmFpbGFiaWxpdHkocHJvZHVjdCksXG4gICAgICAgICAgICAgICAgaXRlbUNvbmRpdGlvbjogJ2h0dHBzOi8vc2NoZW1hLm9yZy9OZXdDb25kaXRpb24nLFxuICAgICAgICAgICAgICAgIHNlbGxlcjoge1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnT3JnYW5pemF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogdGhpcy5jb21wYW55SW5mby5uYW1lLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdXJsOiBwcm9kdWN0VXJsLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfSBhcyBXaXRoQ29udGV4dDxQcm9kdWN0PjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQk9C10L3QtdGA0LjRgNGD0LXRgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDRgdGF0LXQvNGDINC00LDQvdC90YvRhSDQtNC70Y8g0YPQutCw0LfQsNC90L3QvtCz0L4g0L/RgNC+0LTRg9C60YLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeSDQlNCw0L3QvdGL0LUg0L4g0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqIEBwYXJhbSBwcm9kdWN0cyDQlNCw0L3QvdGL0LUg0L4g0L/RgNC+0LTRg9C60YLQsNGFINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlQYXRoIFVybCDQv9GD0YLRjCDQuiDQutCw0YLQtdCz0L7RgNC40Y/QvCDRgtC+0LLQsNGA0L7Qsi4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQsNGC0LXQs9C+0YDQuNC4INC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqIEBwYXJhbSBwcm9kdWN0UGF0aCBVcmwg0L/Rg9GC0Ywg0Log0YLQvtCy0LDRgNGDLiDQkiDQv9GD0YLQuCDQtNC+0LvQttC10L0g0L/RgNC40YHRg9GC0YHRgtCy0L7QstCw0YLRjCDRiNCw0LHQu9C+0L0gJzppZCcsINC+0LHQvtC30L3QsNGH0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC+0LLQsNGA0LAg0LTQu9GPINC/0L7QtNGB0YLQsNC90L7QstC60LguXG4gICAgICogQHBhcmFtIGJyZWFkY3J1bWJzINCU0LDQvdC90YvQtSDQviDRhdC70LXQsdC90YvRhSDQutGA0L7RiNC60LDRhSDQtNC70Y8g0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqIEBwYXJhbSBpZCDQndC10L7QsdGP0LfQsNGC0LXQu9GM0L3Ri9C5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0YPRidC90L7RgdGC0Lgg0LTQu9GPINC/0L7Qu9GPIGBAaWRgINCyIEpTT04tTEQuXG4gICAgICovXG4gICAgcHVibGljIGdlbmVyYXRlRm9yQ2F0ZWdvcnlJdGVtKFxuICAgICAgICBjYXRlZ29yeTogU2NJQ2F0ZWdvcnkgfCBTY0lWaXJ0dWFsQ2F0ZWdvcnksXG4gICAgICAgIHByb2R1Y3RzOiBTY0lQcm9kdWN0W10sXG4gICAgICAgIGNhdGVnb3J5UGF0aDogc3RyaW5nLFxuICAgICAgICBwcm9kdWN0UGF0aDogc3RyaW5nLFxuICAgICAgICBicmVhZGNydW1iczogU2NJQnJlYWRjcnVtYkl0ZW1bXSxcbiAgICAgICAgaWQ/OiBzdHJpbmdcbiAgICApOiBXaXRoQ29udGV4dDxDb2xsZWN0aW9uUGFnZT4ge1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGNhdGVnb3J5LnNlbz8uZGVzY3JpcHRpb24gPz8gY2F0ZWdvcnkucHJvcGVydGllcz8uZGVzY3JpcHRpb247XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybShjYXRlZ29yeS5pbWFnZSwgdHJ1ZSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdAY29udGV4dCc6ICdodHRwczovL3NjaGVtYS5vcmcnLFxuICAgICAgICAgICAgJ0B0eXBlJzogJ0NvbGxlY3Rpb25QYWdlJyxcbiAgICAgICAgICAgIC4uLihpZCAmJiB7ICdAaWQnOiBpZCB9KSxcbiAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5LnNlbz8udGl0bGUgPz8gY2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgdXJsOiB0aGlzLmdldENhdGVnb3J5Q2Fub25pY2FsVXJsKGNhdGVnb3J5LCBjYXRlZ29yeVBhdGgpLFxuICAgICAgICAgICAgLi4uKGltYWdlICYmIHsgaW1hZ2UgfSksXG4gICAgICAgICAgICAvLyBTRU8g0LTQsNC90L3Ri9C1LlxuICAgICAgICAgICAgLi4uKGNhdGVnb3J5LnNlbz8ua2V5d29yZHMgJiYgeyBrZXl3b3JkczogY2F0ZWdvcnkuc2VvLmtleXdvcmRzIH0pLFxuICAgICAgICAgICAgLy8g0J7RgdC90L7QstC90L7QuSDQutC+0L3RgtC10L3RgiDRgdGC0YDQsNC90LjRhtGLIC0g0YHQv9C40YHQvtC6INGC0L7QstCw0YDQvtCyINC4INC/0L7QtNC60LDRgtC10LPQvtGA0LjQuS5cbiAgICAgICAgICAgIG1haW5FbnRpdHk6IHRoaXMuY3JlYXRlQ2F0ZWdvcnlNYWluRW50aXR5KGNhdGVnb3J5LCBwcm9kdWN0cywgY2F0ZWdvcnlQYXRoLCBwcm9kdWN0UGF0aCksXG4gICAgICAgICAgICAvLyDQndCw0LLQuNCz0LDRhtC40L7QvdC90YvQtSDRhdC70LXQsdC90YvQtSDQutGA0L7RiNC60LggKFNjaGVtYS5vcmc6IGJyZWFkY3J1bWIpLlxuICAgICAgICAgICAgYnJlYWRjcnVtYjogdGhpcy5jcmVhdGVDYXRhbG9nQnJlYWRjcnVtYnNMaXN0KGJyZWFkY3J1bWJzLCBjYXRlZ29yeVBhdGgpLFxuICAgICAgICAgICAgLy8g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDQvNC10YLQsNC00LDQvdC90YvQtSDQtNC70Y8gU0VPLlxuICAgICAgICAgICAgYWJvdXQ6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnQ2F0ZWdvcnlDb2RlJyxcbiAgICAgICAgICAgICAgICBjb2RlVmFsdWU6IGNhdGVnb3J5LnNsdWcsXG4gICAgICAgICAgICAgICAgbmFtZTogY2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAvLyDQodCy0Y/Qt9Cw0L3QvdGL0LUg0YHRgtGA0LDQvdC40YbRiy5cbiAgICAgICAgICAgIHJlbGF0ZWRMaW5rOiBbXG4gICAgICAgICAgICAgICAgYCR7dGhpcy51cmxzLnNpdGVVcmx9JHtjYXRlZ29yeVBhdGgucmVwbGFjZSgnOmlkJywgJycpfWAsXG4gICAgICAgICAgICAgICAgLi4uKHRoaXMuaXNWaXJ0dWFsQ2F0ZWdvcnkoY2F0ZWdvcnkpIHx8ICFjYXRlZ29yeS5wYXJlbnRDYXRlZ29yeSA/IFtdIDogW3RoaXMuZ2V0Q2F0ZWdvcnlDYW5vbmljYWxVcmwoY2F0ZWdvcnkucGFyZW50Q2F0ZWdvcnksIGNhdGVnb3J5UGF0aCldKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAvLyDQlNC+0L/QvtC70L3QuNGC0LXQu9GM0L3Ri9C1INGB0LLQvtC50YHRgtCy0LAg0LrQsNGC0LXQs9C+0YDQuNC4ICjQvdC1INC40LfQvtCx0YDQsNC20LXQvdC40Y8pLlxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnR5OiBbXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvcGVydHlWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICfQmtC+0LvQuNGH0LXRgdGC0LLQviDRgtC+0LLQsNGA0L7QsicsXG4gICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiAocHJvZHVjdHM/Lmxlbmd0aCA/PyAwKS50b1N0cmluZygpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvcGVydHlWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTbHVnINC60LDRgtC10LPQvtGA0LjQuCcsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRlZ29yeS5zbHVnLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8IFNFTyDQtNCw0L3QvdGL0LUg0LXRgdC70Lgg0LXRgdGC0YwuXG4gICAgICAgICAgICAgICAgLi4uKGNhdGVnb3J5LnNlbz8ua2V5d29yZHNcbiAgICAgICAgICAgICAgICAgICAgPyBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdQcm9wZXJ0eVZhbHVlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6ICdTRU8gS2V5d29yZHMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNhdGVnb3J5LnNlby5rZXl3b3JkcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgIDogW10pLFxuICAgICAgICAgICAgICAgIC4uLihjYXRlZ29yeS5zZW8/LnRpdGxlXG4gICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvcGVydHlWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0VPIFRpdGxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRlZ29yeS5zZW8udGl0bGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0gYXMgV2l0aENvbnRleHQ8Q29sbGVjdGlvblBhZ2U+O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCT0LXQvdC10YDQuNGA0YPQtdGCINC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0YXQtdC80YMg0LTQsNC90L3Ri9GFIE9ubGluZVN0b3JlINC90LAg0L7RgdC90L7QstC1INC00LDQvdC90YvRhSDQutC+0LzQv9Cw0L3QuNC4INC40Lcg0L7QutGA0YPQttC10L3QuNGPLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBzb25hcmpzL2Z1bmN0aW9uLXJldHVybi10eXBlXG4gICAgcHVibGljIGdlbmVyYXRlRm9yT3JnYW5pemF0aW9uKCk6IFdpdGhDb250ZXh0PE9yZ2FuaXphdGlvbj4ge1xuICAgICAgICBjb25zdCBwb3N0YWxBZGRyZXNzID0gdGhpcy5jcmVhdGVQb3N0YWxBZGRyZXNzKHRoaXMuY29tcGFueUluZm8uYWRkcmVzcyk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdAY29udGV4dCc6ICdodHRwczovL3NjaGVtYS5vcmcnLFxuICAgICAgICAgICAgJ0B0eXBlJzogJ09ubGluZVN0b3JlJyxcbiAgICAgICAgICAgICdAaWQnOiBgJHt0aGlzLnVybHMuc2l0ZVVybH0jb3JnYW5pemF0aW9uYCxcbiAgICAgICAgICAgIG5hbWU6IHRoaXMuY29tcGFueUluZm8ubmFtZSxcbiAgICAgICAgICAgIGxlZ2FsTmFtZTogdGhpcy5jb21wYW55SW5mby5uYW1lLFxuICAgICAgICAgICAgdXJsOiB0aGlzLnVybHMuc2l0ZVVybCxcbiAgICAgICAgICAgIGxvZ286IHRoaXMudXJscy5sb2dvVXJsLFxuICAgICAgICAgICAgaW1hZ2U6IHRoaXMudXJscy5sb2dvVXJsLFxuICAgICAgICAgICAgZW1haWw6IHRoaXMuY29tcGFueUluZm8ubWFpbCxcbiAgICAgICAgICAgIHRlbGVwaG9uZTogdGhpcy5jb21wYW55SW5mby5waG9uZSxcbiAgICAgICAgICAgIC4uLihwb3N0YWxBZGRyZXNzICYmIHsgYWRkcmVzczogcG9zdGFsQWRkcmVzcyB9KSxcbiAgICAgICAgICAgIGxlZ2FsQWRkcmVzczogdGhpcy5jcmVhdGVQb3N0YWxBZGRyZXNzKHsgc3RyZWV0QWRkcmVzczogdGhpcy5jb21wYW55SW5mby5sZWdhbEFkZHJlc3MgfSBhcyBTY0lDb21wYW55QmFzZUluZm9bJ2FkZHJlc3MnXSksXG4gICAgICAgICAgICAvLyBUT0RPOiDQn9C10YDQtdGH0LjRgdC70LjRgtGMINCy0YHQtSDRgNC+0LfQvdC40YfQvdGL0LUg0LzQsNCz0LDQt9C40L3Riy5cbiAgICAgICAgICAgIC8vIGhhc1BPUzogW10sXG4gICAgICAgICAgICB0YXhJRDogdGhpcy5jb21wYW55SW5mby5pbm4sXG4gICAgICAgICAgICBpZGVudGlmaWVyOiB7XG4gICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgIHByb3BlcnR5SUQ6ICdPR1JOJyxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5jb21wYW55SW5mby5vZ3JuLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGNvbnRhY3RQb2ludDogdGhpcy5jcmVhdGVPcmdhbml6YXRpb25Db250YWN0UG9pbnRzKCksXG4gICAgICAgICAgICAuLi4odGhpcy5jb21wYW55SW5mby53YXJlaG91c2VBZGRyZXNzLmxlbmd0aCA+IDAgJiYge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLmNvbXBhbnlJbmZvLndhcmVob3VzZUFkZHJlc3MubWFwKCh3YXJlaG91c2VBZGRyZXNzKSA9PiAoe1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUGxhY2UnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiBgJHt0aGlzLmNvbXBhbnlJbmZvLm5hbWV9IOKAlCDRgdC60LvQsNC0INGB0LDQvNC+0LLRi9Cy0L7Qt9CwYCxcbiAgICAgICAgICAgICAgICAgICAgYWRkcmVzczogd2FyZWhvdXNlQWRkcmVzcyxcbiAgICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSBhcyBXaXRoQ29udGV4dDxPcmdhbml6YXRpb24+O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCT0LXQvdC10YDQuNGA0YPQtdGCINC4INCy0L7Qt9Cy0YDQsNGJ0LDQtdGCINGB0YXQtdC80YMg0LTQsNC90L3Ri9GFINC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0Lkg0L3QvtCy0L7RgdGC0LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3cyDQlNCw0L3QvdGL0LUg0L4g0L3QvtCy0L7RgdGC0LguXG4gICAgICogQHBhcmFtIG5ld3NQYXRoIFVybCDQv9GD0YLRjCDQuiDQvdC+0LLQvtGB0YLQuC4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0L3QvtCy0L7RgdGC0Lgg0LTQu9GPINC/0L7QtNGB0YLQsNC90L7QstC60LguXG4gICAgICogQHBhcmFtIGlkINCd0LXQvtCx0Y/Qt9Cw0YLQtdC70YzQvdGL0Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YHRg9GJ0L3QvtGB0YLQuCDQtNC70Y8g0L/QvtC70Y8gYEBpZGAg0LIgSlNPTi1MRC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2VuZXJhdGVGb3JOZXdzQXJ0aWNsZShuZXdzOiBTY0lOZXdzLCBuZXdzUGF0aDogc3RyaW5nLCBpZD86IHN0cmluZyk6IFdpdGhDb250ZXh0PE5ld3NBcnRpY2xlPiB7XG4gICAgICAgIGNvbnN0IG5ld3NVcmwgPSBgJHt0aGlzLnVybHMuc2l0ZVVybH0ke25ld3NQYXRoLnJlcGxhY2UoJzppZCcsIG5ld3MuaWQudG9TdHJpbmcoKSl9YDtcbiAgICAgICAgY29uc3QgaW1hZ2UgPSB0aGlzLm1lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUudHJhbnNmb3JtKG5ld3MuaW1hZ2UsIHRydWUpO1xuICAgICAgICBjb25zdCBoZWFkbGluZSA9IG5ld3Muc2VvPy50aXRsZSA/PyBuZXdzLnN1YmplY3Q7XG4gICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gbmV3cy5zZW8/LmRlc2NyaXB0aW9uO1xuICAgICAgICBjb25zdCBkYXRlUHVibGlzaGVkID0gdGhpcy5ub3JtYWxpemVTY2hlbWFEYXRlKG5ld3MuY3JlYXRlZEF0KTtcbiAgICAgICAgY29uc3QgYXJ0aWNsZUJvZHkgPSBuZXdzLnRleHQgPyB0aGlzLnN0cmlwSHRtbChuZXdzLnRleHQpIDogdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQGNvbnRleHQnOiAnaHR0cHM6Ly9zY2hlbWEub3JnJyxcbiAgICAgICAgICAgICdAdHlwZSc6ICdOZXdzQXJ0aWNsZScsXG4gICAgICAgICAgICAuLi4oaWQgJiYgeyAnQGlkJzogaWQgfSksXG4gICAgICAgICAgICBoZWFkbGluZSxcbiAgICAgICAgICAgIC4uLihkZXNjcmlwdGlvbiAmJiB7IGRlc2NyaXB0aW9uIH0pLFxuICAgICAgICAgICAgLi4uKGltYWdlICYmIHsgaW1hZ2UgfSksXG4gICAgICAgICAgICAuLi4oZGF0ZVB1Ymxpc2hlZCAmJiB7IGRhdGVQdWJsaXNoZWQgfSksXG4gICAgICAgICAgICAuLi4oYXJ0aWNsZUJvZHkgJiYgeyBhcnRpY2xlQm9keSB9KSxcbiAgICAgICAgICAgIHVybDogbmV3c1VybCxcbiAgICAgICAgICAgIG1haW5FbnRpdHlPZlBhZ2U6IG5ld3NVcmwsXG4gICAgICAgICAgICBhdXRob3I6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnT3JnYW5pemF0aW9uJyxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbXBhbnlJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLnVybHMuc2l0ZVVybCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdWJsaXNoZXI6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnT3JnYW5pemF0aW9uJyxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbXBhbnlJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgbG9nbzoge1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnSW1hZ2VPYmplY3QnLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHRoaXMudXJscy5sb2dvVXJsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9IGFzIFdpdGhDb250ZXh0PE5ld3NBcnRpY2xlPjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQk9C10L3QtdGA0LjRgNGD0LXRgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDRgdGF0LXQvNGDINC00LDQvdC90YvRhSBGQVFQYWdlINC00LvRjyDRgdGC0YDQsNC90LjRhtGLINGBINCy0L7Qv9GA0L7RgdCw0LzQuCDQuCDQvtGC0LLQtdGC0LDQvNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW1zINCh0L/QuNGB0L7QuiDQstC+0L/RgNC+0YHQvtCyINC4INC+0YLQstC10YLQvtCyLlxuICAgICAqIEBwYXJhbSBwYWdlUGF0aCBVcmwg0L/Rg9GC0Ywg0Log0YHRgtGA0LDQvdC40YbQtSBGQVEuXG4gICAgICogQHBhcmFtIHBhZ2VOYW1lINCd0LXQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+0LUg0L3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSBpZCDQndC10L7QsdGP0LfQsNGC0LXQu9GM0L3Ri9C5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0YPRidC90L7RgdGC0Lgg0LTQu9GPINC/0L7Qu9GPIGBAaWRgINCyIEpTT04tTEQuXG4gICAgICovXG4gICAgcHVibGljIGdlbmVyYXRlRm9yRmFxUGFnZShpdGVtczogU2NGYXFJdGVtW10sIHBhZ2VQYXRoOiBzdHJpbmcsIHBhZ2VOYW1lPzogc3RyaW5nLCBpZD86IHN0cmluZyk6IFdpdGhDb250ZXh0PEZBUVBhZ2U+IHtcbiAgICAgICAgY29uc3QgcGFnZVVybCA9IGAke3RoaXMudXJscy5zaXRlVXJsfSR7cGFnZVBhdGh9YDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0Bjb250ZXh0JzogJ2h0dHBzOi8vc2NoZW1hLm9yZycsXG4gICAgICAgICAgICAnQHR5cGUnOiAnRkFRUGFnZScsXG4gICAgICAgICAgICAuLi4oaWQgJiYgeyAnQGlkJzogaWQgfSksXG4gICAgICAgICAgICAuLi4ocGFnZU5hbWUgJiYgeyBuYW1lOiBwYWdlTmFtZSB9KSxcbiAgICAgICAgICAgIHVybDogcGFnZVVybCxcbiAgICAgICAgICAgIG1haW5FbnRpdHk6IGl0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUXVlc3Rpb24nLFxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRBbnN3ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0Fuc3dlcicsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc3RyaXBIdG1sKGl0ZW0uYW5zd2VyKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9IGFzIFdpdGhDb250ZXh0PEZBUVBhZ2U+O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRitC10LTQuNC90Y/QtdGCINC90LXRgdC60L7Qu9GM0LrQviBKU09OLUxEINGB0YPRidC90L7RgdGC0LXQuSDQsiDQvtC00LjQvSDQtNC+0LrRg9C80LXQvdGCINGBIGBAZ3JhcGhgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEg0JzQsNGB0YHQuNCyIEpTT04tTEQg0YHRg9GJ0L3QvtGB0YLQtdC5INC00LvRjyDQvtCx0YrQtdC00LjQvdC10L3QuNGPLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzLHNvbmFyanMvZnVuY3Rpb24tcmV0dXJuLXR5cGVcbiAgICBwdWJsaWMgbWVyZ2UoZGF0YTogQXJyYXk8V2l0aENvbnRleHQ8VGhpbmc+Pik6IFdpdGhDb250ZXh0PFRoaW5nPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQGNvbnRleHQnOiAnaHR0cHM6Ly9zY2hlbWEub3JnJyxcbiAgICAgICAgICAgICdAZ3JhcGgnOiBkYXRhLm1hcCgoaXRlbSkgPT4gb21pdChpdGVtLCAnQGNvbnRleHQnKSksXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBXaXRoQ29udGV4dDxUaGluZz47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQuNGA0YPQtdGCIFBvc3RhbEFkZHJlc3Mg0LjQtyDRgdGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3QvtCz0L4g0LDQtNGA0LXRgdCwINC60L7QvNC/0LDQvdC40LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWRkcmVzcyDQodGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3Ri9C5INCw0LTRgNC10YEg0LrQvtC80L/QsNC90LjQuC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgY3JlYXRlUG9zdGFsQWRkcmVzcyhhZGRyZXNzOiBTY0lDb21wYW55QmFzZUluZm9bJ2FkZHJlc3MnXSk6IFBvc3RhbEFkZHJlc3MgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBzdHJlZXRBZGRyZXNzID0gW2FkZHJlc3Muc3RyZWV0QWRkcmVzcywgYWRkcmVzcy5leHRlbmRlZEFkZHJlc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpO1xuXG4gICAgICAgIGlmICghc3RyZWV0QWRkcmVzcyAmJiAhYWRkcmVzcy5sb2NhbGl0eSAmJiAhYWRkcmVzcy5yZWdpb24gJiYgIWFkZHJlc3MucG9zdGFsQ29kZSAmJiAhYWRkcmVzcy5jb3VudHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdAdHlwZSc6ICdQb3N0YWxBZGRyZXNzJyxcbiAgICAgICAgICAgIC4uLihzdHJlZXRBZGRyZXNzICYmIHsgc3RyZWV0QWRkcmVzcyB9KSxcbiAgICAgICAgICAgIC4uLihhZGRyZXNzLmxvY2FsaXR5ICYmIHsgYWRkcmVzc0xvY2FsaXR5OiBhZGRyZXNzLmxvY2FsaXR5IH0pLFxuICAgICAgICAgICAgLi4uKGFkZHJlc3MucmVnaW9uICYmIHsgYWRkcmVzc1JlZ2lvbjogYWRkcmVzcy5yZWdpb24gfSksXG4gICAgICAgICAgICAuLi4oYWRkcmVzcy5wb3N0YWxDb2RlICYmIHsgcG9zdGFsQ29kZTogYWRkcmVzcy5wb3N0YWxDb2RlIH0pLFxuICAgICAgICAgICAgLi4uKGFkZHJlc3MuY291bnRyeSAmJiB7IGFkZHJlc3NDb3VudHJ5OiBhZGRyZXNzLmNvdW50cnkgfSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQuNGA0YPQtdGCINGB0L/QuNGB0L7QuiBDb250YWN0UG9pbnQg0LTQu9GPIE9yZ2FuaXphdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZU9yZ2FuaXphdGlvbkNvbnRhY3RQb2ludHMoKTogQ29udGFjdFBvaW50W10ge1xuICAgICAgICBjb25zdCBjb250YWN0UG9pbnRzOiBDb250YWN0UG9pbnRbXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnQ29udGFjdFBvaW50JyxcbiAgICAgICAgICAgICAgICBjb250YWN0VHlwZTogJ2N1c3RvbWVyIHNlcnZpY2UnLFxuICAgICAgICAgICAgICAgIHRlbGVwaG9uZTogdGhpcy5jb21wYW55SW5mby5waG9uZSxcbiAgICAgICAgICAgICAgICBlbWFpbDogdGhpcy5jb21wYW55SW5mby5tYWlsLFxuICAgICAgICAgICAgICAgIGFyZWFTZXJ2ZWQ6ICdSVScsXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2U6ICdSdXNzaWFuJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcGFueUluZm8uc2Vjb25kYXJ5UGhvbmUpIHtcbiAgICAgICAgICAgIGNvbnRhY3RQb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0NvbnRhY3RQb2ludCcsXG4gICAgICAgICAgICAgICAgY29udGFjdFR5cGU6ICdjdXN0b21lciBzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICB0ZWxlcGhvbmU6IHRoaXMuY29tcGFueUluZm8uc2Vjb25kYXJ5UGhvbmUsXG4gICAgICAgICAgICAgICAgYXJlYVNlcnZlZDogJ1JVJyxcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZTogJ1J1c3NpYW4nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb21wYW55SW5mby5ocikge1xuICAgICAgICAgICAgY29udGFjdFBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnQ29udGFjdFBvaW50JyxcbiAgICAgICAgICAgICAgICBjb250YWN0VHlwZTogJ0hSJyxcbiAgICAgICAgICAgICAgICB0ZWxlcGhvbmU6IHRoaXMuY29tcGFueUluZm8uaHIucGhvbmUsXG4gICAgICAgICAgICAgICAgZW1haWw6IHRoaXMuY29tcGFueUluZm8uaHIubWFpbCxcbiAgICAgICAgICAgICAgICBhcmVhU2VydmVkOiAnUlUnLFxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlOiAnUnVzc2lhbicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250YWN0UG9pbnRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCIEhUTUwt0YDQsNC30LzQtdGC0LrRgyDQuNC3INGC0LXQutGB0YLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBodG1sINCi0LXQutGB0YIg0YEgSFRNTC3RgNCw0LfQvNC10YLQutC+0LkuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBwcml2YXRlIHN0cmlwSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB3aXRob3V0VGFncyA9IGh0bWxcbiAgICAgICAgICAgIC5zcGxpdCgnPCcpXG4gICAgICAgICAgICAubWFwKChwYXJ0LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZVRhZ0luZGV4ID0gcGFydC5pbmRleE9mKCc+Jyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VUYWdJbmRleCA9PT0gLTEgPyBwYXJ0IDogYCAke3BhcnQuc2xpY2UoY2xvc2VUYWdJbmRleCArIDEpfWA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB3aXRob3V0VGFnc1xuICAgICAgICAgICAgLnJlcGxhY2VBbGwoL1xccysvZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2VBbGwoLyAoWy4sIT87Ol0pL2csICckMScpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCd0L7RgNC80LDQu9C40LfRg9C10YIg0LTQsNGC0YMg0LIg0YTQvtGA0LzQsNGCIFNjaGVtYS5vcmcgKElTTyA4NjAxKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRlVmFsdWUg0JTQsNGC0LAg0LTQu9GPINC90L7RgNC80LDQu9C40LfQsNGG0LjQuC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgbm9ybWFsaXplU2NoZW1hRGF0ZShkYXRlVmFsdWU/OiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgICAgICBpZiAoIWRhdGVWYWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICgvXlxcZHs0fS1cXGR7Mn0tXFxkezJ9Ly50ZXN0KGRhdGVWYWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiBkYXRlVmFsdWU7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB3aXRoVGltZU1hdGNoID0gL14oXFxkezJ9KVxcLihcXGR7Mn0pXFwuKFxcZHs0fSkgKFxcZHsyfSk6KFxcZHsyfSkkLy5leGVjKGRhdGVWYWx1ZSk7XG5cbiAgICAgICAgaWYgKHdpdGhUaW1lTWF0Y2gpIHtcbiAgICAgICAgICAgIGNvbnN0IFssIGRheSwgbW9udGgsIHllYXIsIGhvdXJzLCBtaW51dGVzXSA9IHdpdGhUaW1lTWF0Y2g7XG5cbiAgICAgICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1UJHtob3Vyc306JHttaW51dGVzfTowMGA7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRlT25seU1hdGNoID0gL14oXFxkezJ9KVxcLihcXGR7Mn0pXFwuKFxcZHs0fSkkLy5leGVjKGRhdGVWYWx1ZSk7XG5cbiAgICAgICAgaWYgKCFkYXRlT25seU1hdGNoKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgWywgZGF5LCBtb250aCwgeWVhcl0gPSBkYXRlT25seU1hdGNoO1xuXG4gICAgICAgIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1gO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCd0L7RgNC80LDQu9C40LfRg9C10YIg0LTQsNGC0YMg0L7QutC+0L3Rh9Cw0L3QuNGPINGG0LXQvdGLINCyINGE0L7RgNC80LDRgiBTY2hlbWEub3JnIChZWVlZLU1NLUREKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBleHBpcmVkQXQg0JTQsNGC0LAg0LTQu9GPINC90L7RgNC80LDQu9C40LfQsNGG0LjQuFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSBub3JtYWxpemVQcmljZVZhbGlkVW50aWwoZXhwaXJlZEF0Pzogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgaWYgKCFleHBpcmVkQXQpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkYXRlID0gZXhwaXJlZEF0LnNsaWNlKDAsIDEwKTtcblxuICAgICAgICByZXR1cm4gL15cXGR7NH0tXFxkezJ9LVxcZHsyfSQvLnRlc3QoZGF0ZSkgPyBkYXRlIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0L/RgNC10LTQtdC70Y/QtdGCINC00L7RgdGC0YPQv9C90L7RgdGC0Ywg0YLQvtCy0LDRgNCwINC/0L4g0LTQsNC90L3Ri9C8INC/0YDQvtC00YPQutGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQlNCw0L3QvdGL0LUg0L4g0L/RgNC+0LTRg9C60YLQtS5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgZ2V0QXZhaWxhYmlsaXR5KHByb2R1Y3Q6IFNjSVByb2R1Y3QpOiBzdHJpbmcge1xuICAgICAgICBpZiAocHJvZHVjdC5vbk9yZGVyKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2h0dHBzOi8vc2NoZW1hLm9yZy9QcmVPcmRlcic7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcHJvZHVjdC5zdG9ja0NvdW50Py5sZW5ndGggPyAnaHR0cHM6Ly9zY2hlbWEub3JnL0luU3RvY2snIDogJ2h0dHBzOi8vc2NoZW1hLm9yZy9PdXRPZlN0b2NrJztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0L7QstC10YDRj9C10YIsINGP0LLQu9GP0LXRgtGB0Y8g0LvQuCDQutCw0YLQtdCz0L7RgNC40Y8g0LLQuNGA0YLRg9Cw0LvRjNC90L7QuS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeSDQlNCw0L3QvdGL0LUg0L4g0LrQsNGC0LXQs9C+0YDQuNC4INC00LvRjyDQv9GA0L7QstC10YDQutC4LlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSBpc1ZpcnR1YWxDYXRlZ29yeShjYXRlZ29yeTogU2NJQ2F0ZWdvcnkgfCBTY0lWaXJ0dWFsQ2F0ZWdvcnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICdjaGlsZENhdGVnb3JpZXMnIGluIGNhdGVnb3J5ICYmICdwcm9kdWN0Q2F0ZWdvcmllcycgaW4gY2F0ZWdvcnk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIgVVJMINC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5INCU0LDQvdC90YvQtSDQviDQutCw0YLQtdCz0L7RgNC40LhcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlQYXRoIFVybCDQv9GD0YLRjCDQuiDQutCw0YLQtdCz0L7RgNC40Y/QvCDRgtC+0LLQsNGA0L7Qsi4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQsNGC0LXQs9C+0YDQuNC4INC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgZ2V0Q2F0ZWdvcnlDYW5vbmljYWxVcmwoY2F0ZWdvcnk6IFNjSUNhdGVnb3J5IHwgU2NJVmlydHVhbENhdGVnb3J5LCBjYXRlZ29yeVBhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGlkID0gdGhpcy5pc1ZpcnR1YWxDYXRlZ29yeShjYXRlZ29yeSkgPyBjYXRlZ29yeS5zbHVnIDogdGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKGNhdGVnb3J5KS50b1N0cmluZygpO1xuICAgICAgICBjb25zdCBwYXRoID0gY2F0ZWdvcnlQYXRoLnJlcGxhY2UoJzppZCcsIGlkKTtcblxuICAgICAgICByZXR1cm4gYCR7dGhpcy51cmxzLnNpdGVVcmx9JHtwYXRofWA7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KHQvtC30LTQsNGR0YIg0Y3Qu9C10LzQtdC90YIg0YHQv9C40YHQutCwIEl0ZW1MaXN0INGBINC60YDQsNGC0LrQuNC8IFByb2R1Y3Qg0LTQu9GPINGB0YLRgNCw0L3QuNGG0Ysg0LrQsNGC0LXQs9C+0YDQuNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0JTQsNC90L3Ri9C1INC+INC/0YDQvtC00YPQutGC0LUuXG4gICAgICogQHBhcmFtIHBvc2l0aW9uINCf0L7Qt9C40YbQuNGPINCyINGB0L/QuNGB0LrQtS5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdFBhdGggVXJsINC/0YPRgtGMINC6INGC0L7QstCw0YDRgy4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YLQvtCy0LDRgNCwINC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlUHJvZHVjdHNMaXN0SXRlbShwcm9kdWN0OiBTY0lQcm9kdWN0LCBwb3NpdGlvbjogbnVtYmVyLCBwcm9kdWN0UGF0aDogc3RyaW5nKTogb2JqZWN0IHtcbiAgICAgICAgY29uc3QgcHJvZHVjdFVybCA9IGAke3RoaXMudXJscy5zaXRlVXJsfSR7cHJvZHVjdFBhdGgucmVwbGFjZSgnOmlkJywgdGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKHByb2R1Y3QpLnRvU3RyaW5nKCkpfWA7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybSgocHJvZHVjdCBhcyBTY1Byb2R1Y3QpPy5nZXRJbWFnZVByZXZpZXc/LigpID8/IHByb2R1Y3QuaW1hZ2UsIHRydWUpO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHByb2R1Y3Quc2VvPy5kZXNjcmlwdGlvbiA/PyBwcm9kdWN0LnByb3BlcnRpZXM/LmRlc2NyaXB0aW9uO1xuICAgICAgICBjb25zdCBwcmljZVZhbGlkVW50aWwgPSB0aGlzLm5vcm1hbGl6ZVByaWNlVmFsaWRVbnRpbChwcm9kdWN0LmRpc2NvdW50Py5leHBpcmVkQXQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICBpdGVtOiB7XG4gICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb2R1Y3QnLFxuICAgICAgICAgICAgICAgIG5hbWU6IHByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgICAgICB1cmw6IHByb2R1Y3RVcmwsXG4gICAgICAgICAgICAgICAgLi4uKGltYWdlICYmIHsgaW1hZ2UgfSksXG4gICAgICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICAgICAgb2ZmZXJzOiB7XG4gICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdPZmZlcicsXG4gICAgICAgICAgICAgICAgICAgIHByaWNlQ3VycmVuY3k6ICdSVUInLFxuICAgICAgICAgICAgICAgICAgICAuLi4ocHJpY2VWYWxpZFVudGlsICYmIHsgcHJpY2VWYWxpZFVudGlsIH0pLFxuICAgICAgICAgICAgICAgICAgICBwcmljZTogcHJvZHVjdC5jb3N0UnViLFxuICAgICAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHk6IHRoaXMuZ2V0QXZhaWxhYmlsaXR5KHByb2R1Y3QpLFxuICAgICAgICAgICAgICAgICAgICBpdGVtQ29uZGl0aW9uOiAnaHR0cHM6Ly9zY2hlbWEub3JnL05ld0NvbmRpdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIHNlbGxlcjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ09yZ2FuaXphdGlvbicsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbXBhbnlJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHVybDogcHJvZHVjdFVybCxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0LXRgiBtYWluRW50aXR5INC00LvRjyDRg9C60LDQt9Cw0L3QvdC+0Lkg0LrQsNGC0LXQs9C+0YDQuNC4INGC0L7QstCw0YDQvtCyLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNhdGVnb3J5INCU0LDQvdC90YvQtSDQviDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICogQHBhcmFtIHByb2R1Y3RzINCU0LDQvdC90YvQtSDQviDRgtC+0LLQsNGA0LDRhSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICogQHBhcmFtIGNhdGVnb3J5UGF0aCBVcmwg0L/Rg9GC0Ywg0Log0LrQsNGC0LXQs9C+0YDQuNGP0Lwg0YLQvtCy0LDRgNC+0LIuINCSINC/0YPRgtC4INC00L7Qu9C20LXQvSDQv9GA0LjRgdGD0YLRgdGC0LLQvtCy0LDRgtGMINGI0LDQsdC70L7QvSAnOmlkJywg0L7QsdC+0LfQvdCw0YfQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60LDRgtC10LPQvtGA0LjQuCDQtNC70Y8g0L/QvtC00YHRgtCw0L3QvtCy0LrQuC5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdFBhdGggVXJsINC/0YPRgtGMINC6INGC0L7QstCw0YDRgy4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YLQvtCy0LDRgNCwINC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2F0ZWdvcnlNYWluRW50aXR5KGNhdGVnb3J5OiBTY0lDYXRlZ29yeSB8IFNjSVZpcnR1YWxDYXRlZ29yeSwgcHJvZHVjdHM6IFNjSVByb2R1Y3RbXSwgY2F0ZWdvcnlQYXRoOiBzdHJpbmcsIHByb2R1Y3RQYXRoOiBzdHJpbmcpOiBvYmplY3Qge1xuICAgICAgICBjb25zdCBjaGlsZENhdGVnb3JpZXMgPSB0aGlzLmlzVmlydHVhbENhdGVnb3J5KGNhdGVnb3J5KVxuICAgICAgICAgICAgPyBbLi4uKChjYXRlZ29yeSBhcyBTY1ZpcnR1YWxDYXRlZ29yeSkuY2hpbGRDYXRlZ29yaWVzID8/IFtdKSwgLi4uKChjYXRlZ29yeSBhcyBTY1ZpcnR1YWxDYXRlZ29yeSkucHJvZHVjdENhdGVnb3JpZXMgPz8gW10pXVxuICAgICAgICAgICAgOiAoKGNhdGVnb3J5IGFzIFNjQ2F0ZWdvcnkpLmNhdGVnb3JpZXMgPz8gW10pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQHR5cGUnOiAnSXRlbUxpc3QnLFxuICAgICAgICAgICAgbnVtYmVyT2ZJdGVtczogcHJvZHVjdHMubGVuZ3RoICsgY2hpbGRDYXRlZ29yaWVzLmxlbmd0aCxcbiAgICAgICAgICAgIGl0ZW1MaXN0T3JkZXI6ICdodHRwczovL3NjaGVtYS5vcmcvSXRlbUxpc3RVbm9yZGVyZWQnLFxuICAgICAgICAgICAgaXRlbUxpc3RFbGVtZW50OiBbXG4gICAgICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INC/0L7QtNC60LDRgtC10LPQvtGA0LjQuCDQsiDQvdCw0YfQsNC70L4g0YHQv9C40YHQutCwLlxuICAgICAgICAgICAgICAgIC4uLmNoaWxkQ2F0ZWdvcmllcy5zbGljZSgwLCA1KS5tYXAoKHN1YkNhdGVnb3J5LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMubWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZS50cmFuc2Zvcm0oc3ViQ2F0ZWdvcnkuaW1hZ2UsIHRydWUpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHN1YkNhdGVnb3J5LnNlbz8uZGVzY3JpcHRpb24gPz8gc3ViQ2F0ZWdvcnkucHJvcGVydGllcz8uZGVzY3JpcHRpb247XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdMaXN0SXRlbScsXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbjogaW5kZXggKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdAdHlwZSc6ICdDb2xsZWN0aW9uUGFnZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogc3ViQ2F0ZWdvcnkubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHRoaXMuZ2V0Q2F0ZWdvcnlDYW5vbmljYWxVcmwoc3ViQ2F0ZWdvcnksIGNhdGVnb3J5UGF0aCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGltYWdlICYmIHsgaW1hZ2UgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIC8vINCU0L7QsdCw0LLQu9GP0LXQvCDRgtC+0LLQsNGA0Ysg0L/QvtGB0LvQtSDQv9C+0LTQutCw0YLQtdCz0L7RgNC40LkuXG4gICAgICAgICAgICAgICAgLi4ucHJvZHVjdHMuc2xpY2UoMCwgMTApLm1hcCgocHJvZHVjdCwgaW5kZXgpID0+IHRoaXMuY3JlYXRlUHJvZHVjdHNMaXN0SXRlbShwcm9kdWN0LCBjaGlsZENhdGVnb3JpZXMubGVuZ3RoICsgaW5kZXggKyAxLCBwcm9kdWN0UGF0aCkpLFxuICAgICAgICAgICAgXSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LXQvtCx0YDQsNC30YPQtdGCINC80LDRgdGB0LjQsiBMaW5rRGF0YSDQsiBCcmVhZGNydW1iTGlzdCDQtNC70Y8g0LrQsNGC0LDQu9C+0LPQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBicmVhZGNydW1icyDQnNCw0YHRgdC40LIg0YXQu9C10LHQvdGL0YUg0LrRgNC+0YjQtdC6LlxuICAgICAqIEBwYXJhbSBjYXRlZ29yeVBhdGggVXJsINC/0YPRgtGMINC6INC60LDRgtC10LPQvtGA0LjRj9C8INGC0L7QstCw0YDQvtCyLiDQkiDQv9GD0YLQuCDQtNC+0LvQttC10L0g0L/RgNC40YHRg9GC0YHRgtCy0L7QstCw0YLRjCDRiNCw0LHQu9C+0L0gJzppZCcsINC+0LHQvtC30L3QsNGH0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQutCw0YLQtdCz0L7RgNC40Lgg0LTQu9GPINC/0L7QtNGB0YLQsNC90L7QstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVDYXRhbG9nQnJlYWRjcnVtYnNMaXN0KGJyZWFkY3J1bWJzOiBTY0lCcmVhZGNydW1iSXRlbVtdLCBjYXRlZ29yeVBhdGg6IHN0cmluZyk6IEJyZWFkY3J1bWJMaXN0IHtcbiAgICAgICAgY29uc3QgY2F0YWxvZ1VybCA9IGAke3RoaXMudXJscy5zaXRlVXJsfSR7Y2F0ZWdvcnlQYXRoLnJlcGxhY2UoJzppZCcsICcnKX1gO1xuICAgICAgICBjb25zdCBicmVhZGNydW1iSXRlbXM6IExpc3RJdGVtW10gPSBbXG4gICAgICAgICAgICAvLyDQktGB0LXQs9C00LAg0LTQvtCx0LDQstC70Y/QtdC8INCz0LvQsNCy0L3Rg9GOINGB0YLRgNCw0L3QuNGG0YMuXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUJyZWFkY3J1bWJMaXN0SXRlbSgxLCAn0JPQu9Cw0LLQvdCw0Y8nLCB0aGlzLnVybHMuc2l0ZVVybCksXG4gICAgICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0LrQsNGC0LDQu9C+0LMuXG4gICAgICAgICAgICB0aGlzLmNyZWF0ZUJyZWFkY3J1bWJMaXN0SXRlbSgyLCAn0JrQsNGC0LDQu9C+0LMnLCBjYXRhbG9nVXJsKSxcbiAgICAgICAgXTtcblxuICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0YHRg9GJ0LXRgdGC0LLRg9GO0YnQuNC1IGJyZWFkY3J1bWJzINGBINC60L7RgNGA0LXQutGC0LjRgNC+0LLQutC+0Lkg0L/QvtC30LjRhtC40LkuXG4gICAgICAgIGJyZWFkY3J1bWJzLmZvckVhY2goKGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBsaW5rID0gaXNBcnJheShpdGVtLnJvdXRlckxpbmspID8gaXRlbS5yb3V0ZXJMaW5rLmpvaW4oJy8nKSA6IGl0ZW0ucm91dGVyTGluaztcblxuICAgICAgICAgICAgYnJlYWRjcnVtYkl0ZW1zLnB1c2godGhpcy5jcmVhdGVCcmVhZGNydW1iTGlzdEl0ZW0oaW5kZXggKyAzLCBpdGVtLmxhYmVsLCBsaW5rID8gYCR7dGhpcy51cmxzLnNpdGVVcmx9LyR7bGlua31gIDogdW5kZWZpbmVkKSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQHR5cGUnOiAnQnJlYWRjcnVtYkxpc3QnLFxuICAgICAgICAgICAgaXRlbUxpc3RPcmRlcjogJ2h0dHBzOi8vc2NoZW1hLm9yZy9JdGVtTGlzdE9yZGVyQXNjZW5kaW5nJyxcbiAgICAgICAgICAgIGl0ZW1MaXN0RWxlbWVudDogYnJlYWRjcnVtYkl0ZW1zLFxuICAgICAgICB9IGFzIEJyZWFkY3J1bWJMaXN0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDRkdGCINGN0LvQtdC80LXQvdGCIEJyZWFkY3J1bWJMaXN0INCyINGE0L7RgNC80LDRgtC1LCDRgNC10LrQvtC80LXQvdC00L7QstCw0L3QvdC+0LwgU2NoZW1hLm9yZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwb3NpdGlvbiDQn9C+0LfQuNGG0LjRjyDRjdC70LXQvNC10L3RgtCwINCyINGG0LXQv9C+0YfQutC1LlxuICAgICAqIEBwYXJhbSBuYW1lINCd0LDQt9Cy0LDQvdC40LUg0Y3Qu9C10LzQtdC90YLQsC5cbiAgICAgKiBAcGFyYW0gdXJsIFVSTCDRjdC70LXQvNC10L3RgtCwLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzXG4gICAgcHJpdmF0ZSBjcmVhdGVCcmVhZGNydW1iTGlzdEl0ZW0ocG9zaXRpb246IG51bWJlciwgbmFtZTogc3RyaW5nLCB1cmw/OiBzdHJpbmcpOiBMaXN0SXRlbSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAuLi4odXJsXG4gICAgICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgICAgICAgaXRlbToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAnQGlkJzogdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7IG5hbWUgfSksXG4gICAgICAgIH0gYXMgTGlzdEl0ZW07XG4gICAgfVxufVxuIl19
|