@snabcentr/client-core 2.71.0 → 2.71.1

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.
@@ -46,7 +46,7 @@ export class SchemaOrgFactory {
46
46
  ...(id && { '@id': id }),
47
47
  name: product.name,
48
48
  ...(image && { image }),
49
- ...(description && { description }),
49
+ ...(description && { description: this.stripHtml(description) }),
50
50
  mpn: product.code,
51
51
  url: productUrl,
52
52
  offers: {
@@ -75,7 +75,8 @@ export class SchemaOrgFactory {
75
75
  * @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
76
76
  */
77
77
  generateForCategoryItem(category, products, categoryPath, productPath, breadcrumbs, id) {
78
- const description = category.seo?.description ?? category.properties?.description;
78
+ const descriptionRaw = category.seo?.description ?? category.properties?.description;
79
+ const description = descriptionRaw ? this.stripHtml(descriptionRaw) : undefined;
79
80
  const image = this.mediaImageTransformerPipe.transform(category.image, true);
80
81
  return {
81
82
  '@context': 'https://schema.org',
@@ -194,7 +195,7 @@ export class SchemaOrgFactory {
194
195
  '@type': 'NewsArticle',
195
196
  ...(id && { '@id': id }),
196
197
  headline,
197
- ...(description && { description }),
198
+ ...(description && { description: this.stripHtml(description) }),
198
199
  ...(image && { image }),
199
200
  ...(datePublished && { datePublished }),
200
201
  ...(articleBody && { articleBody }),
@@ -326,6 +327,7 @@ export class SchemaOrgFactory {
326
327
  })
327
328
  .join('');
328
329
  return withoutTags
330
+ .replaceAll(/ /gi, ' ')
329
331
  .replaceAll(/\s+/g, ' ')
330
332
  .replaceAll(/ ([.,!?;:])/g, '$1')
331
333
  .trim();
@@ -421,7 +423,7 @@ export class SchemaOrgFactory {
421
423
  name: product.name,
422
424
  url: productUrl,
423
425
  ...(image && { image }),
424
- ...(description && { description }),
426
+ ...(description && { description: this.stripHtml(description) }),
425
427
  offers: {
426
428
  '@type': 'Offer',
427
429
  priceCurrency: 'RUB',
@@ -467,7 +469,7 @@ export class SchemaOrgFactory {
467
469
  name: subCategory.name,
468
470
  url: this.getCategoryCanonicalUrl(subCategory, categoryPath),
469
471
  ...(image && { image }),
470
- ...(description && { description }),
472
+ ...(description && { description: this.stripHtml(description) }),
471
473
  },
472
474
  };
473
475
  }),
@@ -532,4 +534,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
532
534
  providedIn: 'root',
533
535
  }]
534
536
  }] });
535
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLW9yZy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZW8vY2xhc3Nlcy9zY2hlbWEtb3JnLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFZMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRy9DOztHQUVHO0FBSUgsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQUlJOztXQUVHO1FBQ2MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdkQ7O1dBRUc7UUFDYyxTQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhDOztXQUVHO1FBQ0ssaUJBQVksR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlEOztXQUVHO1FBQ2MsOEJBQXlCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7S0F5aUJwRjtJQXZpQkc7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCLENBQUMsT0FBbUIsRUFBRSxXQUFtQixFQUFFLEVBQVc7UUFDL0UsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUs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QUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUVwRixlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2xJLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTztZQUNILE9BQU8sRUFBRSxnQkFBZ0I7WUFDekIsYUFBYSxFQUFFLDJDQUEyQztZQUMxRCxlQUFlLEVBQUUsZUFBZTtTQUNqQixDQUFDO0lBQ3hCLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxrREFBa0Q7SUFDMUMsd0JBQXdCLENBQUMsUUFBZ0IsRUFBRSxJQUFZLEVBQUUsR0FBWTtRQUN6RSxPQUFPO1lBQ0gsT0FBTyxFQUFFLFVBQVU7WUFDbkIsUUFBUTtZQUNSLEdBQUcsQ0FBQyxHQUFHO2dCQUNILENBQUMsQ0FBQztvQkFDSSxJQUFJLEVBQUU7d0JBQ0YsS0FBSyxFQUFFLEdBQUc7d0JBQ1YsSUFBSTtxQkFDUDtpQkFDSjtnQkFDSCxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUNOLENBQUM7SUFDbEIsQ0FBQzsrR0EzakJRLGdCQUFnQjttSEFBaEIsZ0JBQWdCLGNBRmIsTUFBTTs7NEZBRVQsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaXNBcnJheSwgb21pdCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5pbXBvcnQgeyBCcmVhZGNydW1iTGlzdCwgQ29sbGVjdGlvblBhZ2UsIENvbnRhY3RQb2ludCwgRkFRUGFnZSwgTGlzdEl0ZW0sIE5ld3NBcnRpY2xlLCBPcmdhbml6YXRpb24sIFBvc3RhbEFkZHJlc3MsIFByb2R1Y3QsIFRoaW5nLCBXaXRoQ29udGV4dCB9IGZyb20gJ3NjaGVtYS1kdHMnO1xuXG5pbXBvcnQgeyBTY0NhdGVnb3J5IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9kdG8vc2MtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NQcm9kdWN0IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9kdG8vc2MtcHJvZHVjdCc7XG5pbXBvcnQgeyBTY1ZpcnR1YWxDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvZHRvL3NjLXZpcnR1YWwtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY0lQcm9kdWN0IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9pbnRlcmZhY2VzL3NjLWktcHJvZHVjdCc7XG5pbXBvcnQgeyBTY0lWaXJ0dWFsQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS12aXJ0dWFsLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSUNvbXBhbnlCYXNlSW5mbyB9IGZyb20gJy4uLy4uL2NvbmZpZy9zYy1pLWNvbXBhbnktYmFzZS1pbmZvJztcbmltcG9ydCB7IFNjRmFxSXRlbSB9IGZyb20gJy4uLy4uL2ZyZXF1ZW50bHktYXNrZWQtcXVlc3Rpb25zL2ludGVyZmFjZXMvc2MtaS1mYXEtaXRlbSc7XG5pbXBvcnQgeyBTY0lOZXdzIH0gZnJvbSAnLi4vLi4vbmV3cy9pbnRlcmZhY2VzL3NjLWktbmV3cyc7XG5pbXBvcnQgeyBTY0lkT3JTbHVnUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLWlkLW9yLXNsdWcucGlwZSc7XG5pbXBvcnQgeyBTY01lZGlhSW1hZ2VUcmFuc2Zvcm1lclBpcGUgfSBmcm9tICcuLi8uLi9waXBlcy9zYy1tZWRpYS1pbWFnZS10cmFuc2Zvcm1lci5waXBlJztcbmltcG9ydCB7IFNDX0NPTVBBTllfSU5GTyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy1jb21wYW55LWluZm8nO1xuaW1wb3J0IHsgU0NfVVJMUyB9IGZyb20gJy4uLy4uL3Rva2Vucy9zYy11cmxzJztcbmltcG9ydCB7IFNjSUJyZWFkY3J1bWJJdGVtIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zYy1pLWJyZWFkY3J1bWItaXRlbSc7XG5cbi8qKlxuICog0JzQtdGF0LDQvdC40LfQvNGLINCz0LXQvdC10YDQsNGG0LjQuCDRgdGF0LXQvCDQtNCw0L3QvdGL0YUgU2NoZW1hLm9yZy5cbiAqL1xuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgU2NoZW1hT3JnRmFjdG9yeSB7XG4gICAgLyoqXG4gICAgICog0JTQsNC90L3Ri9C1INC+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
537
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLW9yZy1mYWN0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29yZS9zZW8vY2xhc3Nlcy9zY2hlbWEtb3JnLWZhY3RvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFZMUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzFGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMvRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBRy9DOztHQUVHO0FBSUgsTUFBTSxPQUFPLGdCQUFnQjtJQUg3QjtRQUlJOztXQUVHO1FBQ2MsZ0JBQVcsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFdkQ7O1dBRUc7UUFDYyxTQUFJLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhDOztXQUVHO1FBQ0ssaUJBQVksR0FBbUIsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBRTlEOztXQUVHO1FBQ2MsOEJBQXlCLEdBQUcsTUFBTSxDQUFDLDJCQUEyQixDQUFDLENBQUM7S0EyaUJwRjtJQXppQkc7Ozs7OztPQU1HO0lBQ0ksc0JBQXNCLENBQUMsT0FBbUIsRUFBRSxXQUFtQixFQUFFLEVBQVc7UUFDL0UsTUFBTSxVQUFVLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxRQUFRLEVBQUUs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O2dCQUNILENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ04sQ0FBQztJQUNsQixDQUFDOytHQTdqQlEsZ0JBQWdCO21IQUFoQixnQkFBZ0IsY0FGYixNQUFNOzs0RkFFVCxnQkFBZ0I7a0JBSDVCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpc0FycmF5LCBvbWl0IH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJyZWFkY3J1bWJMaXN0LCBDb2xsZWN0aW9uUGFnZSwgQ29udGFjdFBvaW50LCBGQVFQYWdlLCBMaXN0SXRlbSwgTmV3c0FydGljbGUsIE9yZ2FuaXphdGlvbiwgUG9zdGFsQWRkcmVzcywgUHJvZHVjdCwgVGhpbmcsIFdpdGhDb250ZXh0IH0gZnJvbSAnc2NoZW1hLWR0cyc7XG5cbmltcG9ydCB7IFNjQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2R0by9zYy1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY1Byb2R1Y3QgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2R0by9zYy1wcm9kdWN0JztcbmltcG9ydCB7IFNjVmlydHVhbENhdGVnb3J5IH0gZnJvbSAnLi4vLi4vY2F0YWxvZy9kdG8vc2MtdmlydHVhbC1jYXRlZ29yeSc7XG5pbXBvcnQgeyBTY0lDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLWNhdGVnb3J5JztcbmltcG9ydCB7IFNjSVByb2R1Y3QgfSBmcm9tICcuLi8uLi9jYXRhbG9nL2ludGVyZmFjZXMvc2MtaS1wcm9kdWN0JztcbmltcG9ydCB7IFNjSVZpcnR1YWxDYXRlZ29yeSB9IGZyb20gJy4uLy4uL2NhdGFsb2cvaW50ZXJmYWNlcy9zYy1pLXZpcnR1YWwtY2F0ZWdvcnknO1xuaW1wb3J0IHsgU2NJQ29tcGFueUJhc2VJbmZvIH0gZnJvbSAnLi4vLi4vY29uZmlnL3NjLWktY29tcGFueS1iYXNlLWluZm8nO1xuaW1wb3J0IHsgU2NGYXFJdGVtIH0gZnJvbSAnLi4vLi4vZnJlcXVlbnRseS1hc2tlZC1xdWVzdGlvbnMvaW50ZXJmYWNlcy9zYy1pLWZhcS1pdGVtJztcbmltcG9ydCB7IFNjSU5ld3MgfSBmcm9tICcuLi8uLi9uZXdzL2ludGVyZmFjZXMvc2MtaS1uZXdzJztcbmltcG9ydCB7IFNjSWRPclNsdWdQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvc2MtaWQtb3Itc2x1Zy5waXBlJztcbmltcG9ydCB7IFNjTWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSB9IGZyb20gJy4uLy4uL3BpcGVzL3NjLW1lZGlhLWltYWdlLXRyYW5zZm9ybWVyLnBpcGUnO1xuaW1wb3J0IHsgU0NfQ09NUEFOWV9JTkZPIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLWNvbXBhbnktaW5mbyc7XG5pbXBvcnQgeyBTQ19VUkxTIH0gZnJvbSAnLi4vLi4vdG9rZW5zL3NjLXVybHMnO1xuaW1wb3J0IHsgU2NJQnJlYWRjcnVtYkl0ZW0gfSBmcm9tICcuLi9pbnRlcmZhY2VzL3NjLWktYnJlYWRjcnVtYi1pdGVtJztcblxuLyoqXG4gKiDQnNC10YXQsNC90LjQt9C80Ysg0LPQtdC90LXRgNCw0YbQuNC4INGB0YXQtdC8INC00LDQvdC90YvRhSBTY2hlbWEub3JnLlxuICovXG5ASW5qZWN0YWJsZSh7XG4gICAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBTY2hlbWFPcmdGYWN0b3J5IHtcbiAgICAvKipcbiAgICAgKiDQlNCw0L3QvdGL0LUg0L4g0LrQvtC80L/QsNC90LjQuC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbXBhbnlJbmZvID0gaW5qZWN0KFNDX0NPTVBBTllfSU5GTyk7XG5cbiAgICAvKipcbiAgICAgKiDQodC/0LjRgdC+0Log0YHRgdGL0LvQvtC6INC/0YDQuNC70L7QttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXJscyA9IGluamVjdChTQ19VUkxTKTtcblxuICAgIC8qKlxuICAgICAqINCf0LDQudC/LCDQstC+0LfQstGA0LDRidCw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LjQu9C4INGB0LjQvNCy0L7Qu9GM0L3QvtC1INC+0LHQvtC30L3QsNGH0LXQvdC40LUgKHNsdWcpINC40YHRhdC+0LTRjyDQuNC3INC90LDRgdGC0YDQvtC10Log0L7QutGA0YPQttC10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgaWRPclNsdWdQaXBlOiBTY0lkT3JTbHVnUGlwZSA9IGluamVjdChTY0lkT3JTbHVnUGlwZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9Cw0LnQvyDQtNC70Y8g0YTQvtGA0LzQuNGA0L7QstCw0L3QuNGPINC/0L7Qu9C90L7Qs9C+IFVSSSDQuNC30L7QsdGA0LDQttC10L3QuNGPINC90LAgbWVkaWEg0YHQtdGA0LLQtdGA0LUuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlID0gaW5qZWN0KFNjTWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZSk7XG5cbiAgICAvKipcbiAgICAgKiDQk9C10L3QtdGA0LjRgNGD0LXRgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDRgdGF0LXQvNGDINC00LDQvdC90YvRhSDQtNC70Y8g0YPQutCw0LfQsNC90L3QvtCz0L4g0L/RgNC+0LTRg9C60YLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0INCU0LDQvdC90YvQtSDQviDQv9GA0L7QtNGD0LrRgtC1LlxuICAgICAqIEBwYXJhbSBwcm9kdWN0UGF0aCBVcmwg0L/Rg9GC0Ywg0Log0YLQvtCy0LDRgNGDLiDQkiDQv9GD0YLQuCDQtNC+0LvQttC10L0g0L/RgNC40YHRg9GC0YHRgtCy0L7QstCw0YLRjCDRiNCw0LHQu9C+0L0gJzppZCcsINC+0LHQvtC30L3QsNGH0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC+0LLQsNGA0LAg0LTQu9GPINC/0L7QtNGB0YLQsNC90L7QstC60LguXG4gICAgICogQHBhcmFtIGlkINCd0LXQvtCx0Y/Qt9Cw0YLQtdC70YzQvdGL0Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YHRg9GJ0L3QvtGB0YLQuCDQtNC70Y8g0L/QvtC70Y8gYEBpZGAg0LIgSlNPTi1MRC5cbiAgICAgKi9cbiAgICBwdWJsaWMgZ2VuZXJhdGVGb3JQcm9kdWN0SXRlbShwcm9kdWN0OiBTY0lQcm9kdWN0LCBwcm9kdWN0UGF0aDogc3RyaW5nLCBpZD86IHN0cmluZyk6IFdpdGhDb250ZXh0PFByb2R1Y3Q+IHtcbiAgICAgICAgY29uc3QgcHJvZHVjdFVybCA9IGAke3RoaXMudXJscy5zaXRlVXJsfSR7cHJvZHVjdFBhdGgucmVwbGFjZSgnOmlkJywgdGhpcy5pZE9yU2x1Z1BpcGUudHJhbnNmb3JtKHByb2R1Y3QpLnRvU3RyaW5nKCkpfWA7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5uZWNlc3NhcnktY29uZGl0aW9uXG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybSgocHJvZHVjdCBhcyBTY1Byb2R1Y3QpPy5nZXRJbWFnZVByZXZpZXc/LigpID8/IHByb2R1Y3QuaW1hZ2UsIHRydWUpO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHByb2R1Y3QucHJvcGVydGllcz8uZGVzY3JpcHRpb247XG4gICAgICAgIGNvbnN0IHByaWNlVmFsaWRVbnRpbCA9IHRoaXMubm9ybWFsaXplUHJpY2VWYWxpZFVudGlsKHByb2R1Y3QuZGlzY291bnQ/LmV4cGlyZWRBdCk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdAY29udGV4dCc6ICdodHRwczovL3NjaGVtYS5vcmcnLFxuICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb2R1Y3QnLFxuICAgICAgICAgICAgLi4uKGlkICYmIHsgJ0BpZCc6IGlkIH0pLFxuICAgICAgICAgICAgbmFtZTogcHJvZHVjdC5uYW1lLFxuICAgICAgICAgICAgLi4uKGltYWdlICYmIHsgaW1hZ2UgfSksXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbjogdGhpcy5zdHJpcEh0bWwoZGVzY3JpcHRpb24pIH0pLFxuICAgICAgICAgICAgbXBuOiBwcm9kdWN0LmNvZGUsXG4gICAgICAgICAgICB1cmw6IHByb2R1Y3RVcmwsXG4gICAgICAgICAgICBvZmZlcnM6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnT2ZmZXInLFxuICAgICAgICAgICAgICAgIHByaWNlQ3VycmVuY3k6ICdSVUInLFxuICAgICAgICAgICAgICAgIC4uLihwcmljZVZhbGlkVW50aWwgJiYgeyBwcmljZVZhbGlkVW50aWwgfSksXG4gICAgICAgICAgICAgICAgcHJpY2U6IHByb2R1Y3QuY29zdFJ1YixcbiAgICAgICAgICAgICAgICBhdmFpbGFiaWxpdHk6IHRoaXMuZ2V0QXZhaWxhYmlsaXR5KHByb2R1Y3QpLFxuICAgICAgICAgICAgICAgIGl0ZW1Db25kaXRpb246ICdodHRwczovL3NjaGVtYS5vcmcvTmV3Q29uZGl0aW9uJyxcbiAgICAgICAgICAgICAgICBzZWxsZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ09yZ2FuaXphdGlvbicsXG4gICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuY29tcGFueUluZm8ubmFtZSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHVybDogcHJvZHVjdFVybCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0gYXMgV2l0aENvbnRleHQ8UHJvZHVjdD47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JPQtdC90LXRgNC40YDRg9C10YIg0Lgg0LLQvtC30LLRgNCw0YnQsNC10YIg0YHRhdC10LzRgyDQtNCw0L3QvdGL0YUg0LTQu9GPINGD0LrQsNC30LDQvdC90L7Qs9C+INC/0YDQvtC00YPQutGC0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnkg0JTQsNC90L3Ri9C1INC+INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdHMg0JTQsNC90L3Ri9C1INC+INC/0YDQvtC00YPQutGC0LDRhSDQutCw0YLQtdCz0L7RgNC40LguXG4gICAgICogQHBhcmFtIGNhdGVnb3J5UGF0aCBVcmwg0L/Rg9GC0Ywg0Log0LrQsNGC0LXQs9C+0YDQuNGP0Lwg0YLQvtCy0LDRgNC+0LIuINCSINC/0YPRgtC4INC00L7Qu9C20LXQvSDQv9GA0LjRgdGD0YLRgdGC0LLQvtCy0LDRgtGMINGI0LDQsdC70L7QvSAnOmlkJywg0L7QsdC+0LfQvdCw0YfQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC60LDRgtC10LPQvtGA0LjQuCDQtNC70Y8g0L/QvtC00YHRgtCw0L3QvtCy0LrQuC5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdFBhdGggVXJsINC/0YPRgtGMINC6INGC0L7QstCw0YDRgy4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0YLQvtCy0LDRgNCwINC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqIEBwYXJhbSBicmVhZGNydW1icyDQlNCw0L3QvdGL0LUg0L4g0YXQu9C10LHQvdGL0YUg0LrRgNC+0YjQutCw0YUg0LTQu9GPINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKiBAcGFyYW0gaWQg0J3QtdC+0LHRj9C30LDRgtC10LvRjNC90YvQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgdGD0YnQvdC+0YHRgtC4INC00LvRjyDQv9C+0LvRjyBgQGlkYCDQsiBKU09OLUxELlxuICAgICAqL1xuICAgIHB1YmxpYyBnZW5lcmF0ZUZvckNhdGVnb3J5SXRlbShcbiAgICAgICAgY2F0ZWdvcnk6IFNjSUNhdGVnb3J5IHwgU2NJVmlydHVhbENhdGVnb3J5LFxuICAgICAgICBwcm9kdWN0czogU2NJUHJvZHVjdFtdLFxuICAgICAgICBjYXRlZ29yeVBhdGg6IHN0cmluZyxcbiAgICAgICAgcHJvZHVjdFBhdGg6IHN0cmluZyxcbiAgICAgICAgYnJlYWRjcnVtYnM6IFNjSUJyZWFkY3J1bWJJdGVtW10sXG4gICAgICAgIGlkPzogc3RyaW5nXG4gICAgKTogV2l0aENvbnRleHQ8Q29sbGVjdGlvblBhZ2U+IHtcbiAgICAgICAgY29uc3QgZGVzY3JpcHRpb25SYXcgPSBjYXRlZ29yeS5zZW8/LmRlc2NyaXB0aW9uID8/IGNhdGVnb3J5LnByb3BlcnRpZXM/LmRlc2NyaXB0aW9uO1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uUmF3ID8gdGhpcy5zdHJpcEh0bWwoZGVzY3JpcHRpb25SYXcpIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBpbWFnZSA9IHRoaXMubWVkaWFJbWFnZVRyYW5zZm9ybWVyUGlwZS50cmFuc2Zvcm0oY2F0ZWdvcnkuaW1hZ2UsIHRydWUpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQGNvbnRleHQnOiAnaHR0cHM6Ly9zY2hlbWEub3JnJyxcbiAgICAgICAgICAgICdAdHlwZSc6ICdDb2xsZWN0aW9uUGFnZScsXG4gICAgICAgICAgICAuLi4oaWQgJiYgeyAnQGlkJzogaWQgfSksXG4gICAgICAgICAgICBuYW1lOiBjYXRlZ29yeS5zZW8/LnRpdGxlID8/IGNhdGVnb3J5Lm5hbWUsXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbiB9KSxcbiAgICAgICAgICAgIHVybDogdGhpcy5nZXRDYXRlZ29yeUNhbm9uaWNhbFVybChjYXRlZ29yeSwgY2F0ZWdvcnlQYXRoKSxcbiAgICAgICAgICAgIC4uLihpbWFnZSAmJiB7IGltYWdlIH0pLFxuICAgICAgICAgICAgLy8gU0VPINC00LDQvdC90YvQtS5cbiAgICAgICAgICAgIC4uLihjYXRlZ29yeS5zZW8/LmtleXdvcmRzICYmIHsga2V5d29yZHM6IGNhdGVnb3J5LnNlby5rZXl3b3JkcyB9KSxcbiAgICAgICAgICAgIC8vINCe0YHQvdC+0LLQvdC+0Lkg0LrQvtC90YLQtdC90YIg0YHRgtGA0LDQvdC40YbRiyAtINGB0L/QuNGB0L7QuiDRgtC+0LLQsNGA0L7QsiDQuCDQv9C+0LTQutCw0YLQtdCz0L7RgNC40LkuXG4gICAgICAgICAgICBtYWluRW50aXR5OiB0aGlzLmNyZWF0ZUNhdGVnb3J5TWFpbkVudGl0eShjYXRlZ29yeSwgcHJvZHVjdHMsIGNhdGVnb3J5UGF0aCwgcHJvZHVjdFBhdGgpLFxuICAgICAgICAgICAgLy8g0J3QsNCy0LjQs9Cw0YbQuNC+0L3QvdGL0LUg0YXQu9C10LHQvdGL0LUg0LrRgNC+0YjQutC4IChTY2hlbWEub3JnOiBicmVhZGNydW1iKS5cbiAgICAgICAgICAgIGJyZWFkY3J1bWI6IHRoaXMuY3JlYXRlQ2F0YWxvZ0JyZWFkY3J1bWJzTGlzdChicmVhZGNydW1icywgY2F0ZWdvcnlQYXRoKSxcbiAgICAgICAgICAgIC8vINCU0L7Qv9C+0LvQvdC40YLQtdC70YzQvdGL0LUg0LzQtdGC0LDQtNCw0L3QvdGL0LUg0LTQu9GPIFNFTy5cbiAgICAgICAgICAgIGFib3V0OiB7XG4gICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0NhdGVnb3J5Q29kZScsXG4gICAgICAgICAgICAgICAgY29kZVZhbHVlOiBjYXRlZ29yeS5zbHVnLFxuICAgICAgICAgICAgICAgIG5hbWU6IGNhdGVnb3J5Lm5hbWUsXG4gICAgICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb24gfSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLy8g0KHQstGP0LfQsNC90L3Ri9C1INGB0YLRgNCw0L3QuNGG0YsuXG4gICAgICAgICAgICByZWxhdGVkTGluazogW1xuICAgICAgICAgICAgICAgIGAke3RoaXMudXJscy5zaXRlVXJsfSR7Y2F0ZWdvcnlQYXRoLnJlcGxhY2UoJzppZCcsICcnKX1gLFxuICAgICAgICAgICAgICAgIC4uLih0aGlzLmlzVmlydHVhbENhdGVnb3J5KGNhdGVnb3J5KSB8fCAhY2F0ZWdvcnkucGFyZW50Q2F0ZWdvcnkgPyBbXSA6IFt0aGlzLmdldENhdGVnb3J5Q2Fub25pY2FsVXJsKGNhdGVnb3J5LnBhcmVudENhdGVnb3J5LCBjYXRlZ29yeVBhdGgpXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICAgICAgLy8g0JTQvtC/0L7Qu9C90LjRgtC10LvRjNC90YvQtSDRgdCy0L7QudGB0YLQstCwINC60LDRgtC10LPQvtGA0LjQuCAo0L3QtSDQuNC30L7QsdGA0LDQttC10L3QuNGPKS5cbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0eTogW1xuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAn0JrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNC+0LInLFxuICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVubmVjZXNzYXJ5LWNvbmRpdGlvblxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogKHByb2R1Y3RzPy5sZW5ndGggPz8gMCkudG9TdHJpbmcoKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU2x1ZyDQutCw0YLQtdCz0L7RgNC40LgnLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnkuc2x1ZyxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIC8vINCU0L7QsdCw0LLQu9GP0LXQvCBTRU8g0LTQsNC90L3Ri9C1INC10YHQu9C4INC10YHRgtGMLlxuICAgICAgICAgICAgICAgIC4uLihjYXRlZ29yeS5zZW8/LmtleXdvcmRzXG4gICAgICAgICAgICAgICAgICAgID8gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUHJvcGVydHlWYWx1ZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiAnU0VPIEtleXdvcmRzJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBjYXRlZ29yeS5zZW8ua2V5d29yZHMsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICA6IFtdKSxcbiAgICAgICAgICAgICAgICAuLi4oY2F0ZWdvcnkuc2VvPy50aXRsZVxuICAgICAgICAgICAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb3BlcnR5VmFsdWUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTogJ1NFTyBUaXRsZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogY2F0ZWdvcnkuc2VvLnRpdGxlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgICAgOiBbXSksXG4gICAgICAgICAgICBdLFxuICAgICAgICB9IGFzIFdpdGhDb250ZXh0PENvbGxlY3Rpb25QYWdlPjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQk9C10L3QtdGA0LjRgNGD0LXRgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDRgdGF0LXQvNGDINC00LDQvdC90YvRhSBPbmxpbmVTdG9yZSDQvdCwINC+0YHQvdC+0LLQtSDQtNCw0L3QvdGL0YUg0LrQvtC80L/QsNC90LjQuCDQuNC3INC+0LrRgNGD0LbQtdC90LjRjy5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgc29uYXJqcy9mdW5jdGlvbi1yZXR1cm4tdHlwZVxuICAgIHB1YmxpYyBnZW5lcmF0ZUZvck9yZ2FuaXphdGlvbigpOiBXaXRoQ29udGV4dDxPcmdhbml6YXRpb24+IHtcbiAgICAgICAgY29uc3QgcG9zdGFsQWRkcmVzcyA9IHRoaXMuY3JlYXRlUG9zdGFsQWRkcmVzcyh0aGlzLmNvbXBhbnlJbmZvLmFkZHJlc3MpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQGNvbnRleHQnOiAnaHR0cHM6Ly9zY2hlbWEub3JnJyxcbiAgICAgICAgICAgICdAdHlwZSc6ICdPbmxpbmVTdG9yZScsXG4gICAgICAgICAgICAnQGlkJzogYCR7dGhpcy51cmxzLnNpdGVVcmx9I29yZ2FuaXphdGlvbmAsXG4gICAgICAgICAgICBuYW1lOiB0aGlzLmNvbXBhbnlJbmZvLm5hbWUsXG4gICAgICAgICAgICBsZWdhbE5hbWU6IHRoaXMuY29tcGFueUluZm8ubmFtZSxcbiAgICAgICAgICAgIHVybDogdGhpcy51cmxzLnNpdGVVcmwsXG4gICAgICAgICAgICBsb2dvOiB0aGlzLnVybHMubG9nb1VybCxcbiAgICAgICAgICAgIGltYWdlOiB0aGlzLnVybHMubG9nb1VybCxcbiAgICAgICAgICAgIGVtYWlsOiB0aGlzLmNvbXBhbnlJbmZvLm1haWwsXG4gICAgICAgICAgICB0ZWxlcGhvbmU6IHRoaXMuY29tcGFueUluZm8ucGhvbmUsXG4gICAgICAgICAgICAuLi4ocG9zdGFsQWRkcmVzcyAmJiB7IGFkZHJlc3M6IHBvc3RhbEFkZHJlc3MgfSksXG4gICAgICAgICAgICBsZWdhbEFkZHJlc3M6IHRoaXMuY3JlYXRlUG9zdGFsQWRkcmVzcyh7IHN0cmVldEFkZHJlc3M6IHRoaXMuY29tcGFueUluZm8ubGVnYWxBZGRyZXNzIH0gYXMgU2NJQ29tcGFueUJhc2VJbmZvWydhZGRyZXNzJ10pLFxuICAgICAgICAgICAgLy8gVE9ETzog0J/QtdGA0LXRh9C40YHQu9C40YLRjCDQstGB0LUg0YDQvtC30L3QuNGH0L3Ri9C1INC80LDQs9Cw0LfQuNC90YsuXG4gICAgICAgICAgICAvLyBoYXNQT1M6IFtdLFxuICAgICAgICAgICAgdGF4SUQ6IHRoaXMuY29tcGFueUluZm8uaW5uLFxuICAgICAgICAgICAgaWRlbnRpZmllcjoge1xuICAgICAgICAgICAgICAgICdAdHlwZSc6ICdQcm9wZXJ0eVZhbHVlJyxcbiAgICAgICAgICAgICAgICBwcm9wZXJ0eUlEOiAnT0dSTicsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuY29tcGFueUluZm8ub2dybixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBjb250YWN0UG9pbnQ6IHRoaXMuY3JlYXRlT3JnYW5pemF0aW9uQ29udGFjdFBvaW50cygpLFxuICAgICAgICAgICAgLi4uKHRoaXMuY29tcGFueUluZm8ud2FyZWhvdXNlQWRkcmVzcy5sZW5ndGggPiAwICYmIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5jb21wYW55SW5mby53YXJlaG91c2VBZGRyZXNzLm1hcCgod2FyZWhvdXNlQWRkcmVzcykgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1BsYWNlJyxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogYCR7dGhpcy5jb21wYW55SW5mby5uYW1lfSDigJQg0YHQutC70LDQtCDRgdCw0LzQvtCy0YvQstC+0LfQsGAsXG4gICAgICAgICAgICAgICAgICAgIGFkZHJlc3M6IHdhcmVob3VzZUFkZHJlc3MsXG4gICAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgIH0gYXMgV2l0aENvbnRleHQ8T3JnYW5pemF0aW9uPjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQk9C10L3QtdGA0LjRgNGD0LXRgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDRgdGF0LXQvNGDINC00LDQvdC90YvRhSDQtNC70Y8g0YPQutCw0LfQsNC90L3QvtC5INC90L7QstC+0YHRgtC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld3Mg0JTQsNC90L3Ri9C1INC+INC90L7QstC+0YHRgtC4LlxuICAgICAqIEBwYXJhbSBuZXdzUGF0aCBVcmwg0L/Rg9GC0Ywg0Log0L3QvtCy0L7RgdGC0LguINCSINC/0YPRgtC4INC00L7Qu9C20LXQvSDQv9GA0LjRgdGD0YLRgdGC0LLQvtCy0LDRgtGMINGI0LDQsdC70L7QvSAnOmlkJywg0L7QsdC+0LfQvdCw0YfQsNGO0YnQuNC5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINC90L7QstC+0YHRgtC4INC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqIEBwYXJhbSBpZCDQndC10L7QsdGP0LfQsNGC0LXQu9GM0L3Ri9C5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0YPRidC90L7RgdGC0Lgg0LTQu9GPINC/0L7Qu9GPIGBAaWRgINCyIEpTT04tTEQuXG4gICAgICovXG4gICAgcHVibGljIGdlbmVyYXRlRm9yTmV3c0FydGljbGUobmV3czogU2NJTmV3cywgbmV3c1BhdGg6IHN0cmluZywgaWQ/OiBzdHJpbmcpOiBXaXRoQ29udGV4dDxOZXdzQXJ0aWNsZT4ge1xuICAgICAgICBjb25zdCBuZXdzVXJsID0gYCR7dGhpcy51cmxzLnNpdGVVcmx9JHtuZXdzUGF0aC5yZXBsYWNlKCc6aWQnLCBuZXdzLmlkLnRvU3RyaW5nKCkpfWA7XG4gICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybShuZXdzLmltYWdlLCB0cnVlKTtcbiAgICAgICAgY29uc3QgaGVhZGxpbmUgPSBuZXdzLnNlbz8udGl0bGUgPz8gbmV3cy5zdWJqZWN0O1xuICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IG5ld3Muc2VvPy5kZXNjcmlwdGlvbjtcbiAgICAgICAgY29uc3QgZGF0ZVB1Ymxpc2hlZCA9IHRoaXMubm9ybWFsaXplU2NoZW1hRGF0ZShuZXdzLmNyZWF0ZWRBdCk7XG4gICAgICAgIGNvbnN0IGFydGljbGVCb2R5ID0gbmV3cy50ZXh0ID8gdGhpcy5zdHJpcEh0bWwobmV3cy50ZXh0KSA6IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0Bjb250ZXh0JzogJ2h0dHBzOi8vc2NoZW1hLm9yZycsXG4gICAgICAgICAgICAnQHR5cGUnOiAnTmV3c0FydGljbGUnLFxuICAgICAgICAgICAgLi4uKGlkICYmIHsgJ0BpZCc6IGlkIH0pLFxuICAgICAgICAgICAgaGVhZGxpbmUsXG4gICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbjogdGhpcy5zdHJpcEh0bWwoZGVzY3JpcHRpb24pIH0pLFxuICAgICAgICAgICAgLi4uKGltYWdlICYmIHsgaW1hZ2UgfSksXG4gICAgICAgICAgICAuLi4oZGF0ZVB1Ymxpc2hlZCAmJiB7IGRhdGVQdWJsaXNoZWQgfSksXG4gICAgICAgICAgICAuLi4oYXJ0aWNsZUJvZHkgJiYgeyBhcnRpY2xlQm9keSB9KSxcbiAgICAgICAgICAgIHVybDogbmV3c1VybCxcbiAgICAgICAgICAgIG1haW5FbnRpdHlPZlBhZ2U6IG5ld3NVcmwsXG4gICAgICAgICAgICBhdXRob3I6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnT3JnYW5pemF0aW9uJyxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbXBhbnlJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgdXJsOiB0aGlzLnVybHMuc2l0ZVVybCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwdWJsaXNoZXI6IHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnT3JnYW5pemF0aW9uJyxcbiAgICAgICAgICAgICAgICBuYW1lOiB0aGlzLmNvbXBhbnlJbmZvLm5hbWUsXG4gICAgICAgICAgICAgICAgbG9nbzoge1xuICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnSW1hZ2VPYmplY3QnLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHRoaXMudXJscy5sb2dvVXJsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9IGFzIFdpdGhDb250ZXh0PE5ld3NBcnRpY2xlPjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQk9C10L3QtdGA0LjRgNGD0LXRgiDQuCDQstC+0LfQstGA0LDRidCw0LXRgiDRgdGF0LXQvNGDINC00LDQvdC90YvRhSBGQVFQYWdlINC00LvRjyDRgdGC0YDQsNC90LjRhtGLINGBINCy0L7Qv9GA0L7RgdCw0LzQuCDQuCDQvtGC0LLQtdGC0LDQvNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW1zINCh0L/QuNGB0L7QuiDQstC+0L/RgNC+0YHQvtCyINC4INC+0YLQstC10YLQvtCyLlxuICAgICAqIEBwYXJhbSBwYWdlUGF0aCBVcmwg0L/Rg9GC0Ywg0Log0YHRgtGA0LDQvdC40YbQtSBGQVEuXG4gICAgICogQHBhcmFtIHBhZ2VOYW1lINCd0LXQvtCx0Y/Qt9Cw0YLQtdC70YzQvdC+0LUg0L3QsNC30LLQsNC90LjQtSDRgdGC0YDQsNC90LjRhtGLLlxuICAgICAqIEBwYXJhbSBpZCDQndC10L7QsdGP0LfQsNGC0LXQu9GM0L3Ri9C5INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGAINGB0YPRidC90L7RgdGC0Lgg0LTQu9GPINC/0L7Qu9GPIGBAaWRgINCyIEpTT04tTEQuXG4gICAgICovXG4gICAgcHVibGljIGdlbmVyYXRlRm9yRmFxUGFnZShpdGVtczogU2NGYXFJdGVtW10sIHBhZ2VQYXRoOiBzdHJpbmcsIHBhZ2VOYW1lPzogc3RyaW5nLCBpZD86IHN0cmluZyk6IFdpdGhDb250ZXh0PEZBUVBhZ2U+IHtcbiAgICAgICAgY29uc3QgcGFnZVVybCA9IGAke3RoaXMudXJscy5zaXRlVXJsfSR7cGFnZVBhdGh9YDtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0Bjb250ZXh0JzogJ2h0dHBzOi8vc2NoZW1hLm9yZycsXG4gICAgICAgICAgICAnQHR5cGUnOiAnRkFRUGFnZScsXG4gICAgICAgICAgICAuLi4oaWQgJiYgeyAnQGlkJzogaWQgfSksXG4gICAgICAgICAgICAuLi4ocGFnZU5hbWUgJiYgeyBuYW1lOiBwYWdlTmFtZSB9KSxcbiAgICAgICAgICAgIHVybDogcGFnZVVybCxcbiAgICAgICAgICAgIG1haW5FbnRpdHk6IGl0ZW1zLm1hcCgoaXRlbSkgPT4gKHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnUXVlc3Rpb24nLFxuICAgICAgICAgICAgICAgIG5hbWU6IGl0ZW0ucXVlc3Rpb24sXG4gICAgICAgICAgICAgICAgYWNjZXB0ZWRBbnN3ZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0Fuc3dlcicsXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IHRoaXMuc3RyaXBIdG1sKGl0ZW0uYW5zd2VyKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICB9IGFzIFdpdGhDb250ZXh0PEZBUVBhZ2U+O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRitC10LTQuNC90Y/QtdGCINC90LXRgdC60L7Qu9GM0LrQviBKU09OLUxEINGB0YPRidC90L7RgdGC0LXQuSDQsiDQvtC00LjQvSDQtNC+0LrRg9C80LXQvdGCINGBIGBAZ3JhcGhgLlxuICAgICAqXG4gICAgICogQHBhcmFtIGRhdGEg0JzQsNGB0YHQuNCyIEpTT04tTEQg0YHRg9GJ0L3QvtGB0YLQtdC5INC00LvRjyDQvtCx0YrQtdC00LjQvdC10L3QuNGPLlxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzLHNvbmFyanMvZnVuY3Rpb24tcmV0dXJuLXR5cGVcbiAgICBwdWJsaWMgbWVyZ2UoZGF0YTogQXJyYXk8V2l0aENvbnRleHQ8VGhpbmc+Pik6IFdpdGhDb250ZXh0PFRoaW5nPiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQGNvbnRleHQnOiAnaHR0cHM6Ly9zY2hlbWEub3JnJyxcbiAgICAgICAgICAgICdAZ3JhcGgnOiBkYXRhLm1hcCgoaXRlbSkgPT4gb21pdChpdGVtLCAnQGNvbnRleHQnKSksXG4gICAgICAgIH0gYXMgdW5rbm93biBhcyBXaXRoQ29udGV4dDxUaGluZz47XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQuNGA0YPQtdGCIFBvc3RhbEFkZHJlc3Mg0LjQtyDRgdGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3QvtCz0L4g0LDQtNGA0LXRgdCwINC60L7QvNC/0LDQvdC40LguXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYWRkcmVzcyDQodGC0YDRg9C60YLRg9GA0LjRgNC+0LLQsNC90L3Ri9C5INCw0LTRgNC10YEg0LrQvtC80L/QsNC90LjQuC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgY3JlYXRlUG9zdGFsQWRkcmVzcyhhZGRyZXNzOiBTY0lDb21wYW55QmFzZUluZm9bJ2FkZHJlc3MnXSk6IFBvc3RhbEFkZHJlc3MgfCB1bmRlZmluZWQge1xuICAgICAgICBjb25zdCBzdHJlZXRBZGRyZXNzID0gW2FkZHJlc3Muc3RyZWV0QWRkcmVzcywgYWRkcmVzcy5leHRlbmRlZEFkZHJlc3NdLmZpbHRlcihCb29sZWFuKS5qb2luKCcsICcpO1xuXG4gICAgICAgIGlmICghc3RyZWV0QWRkcmVzcyAmJiAhYWRkcmVzcy5sb2NhbGl0eSAmJiAhYWRkcmVzcy5yZWdpb24gJiYgIWFkZHJlc3MucG9zdGFsQ29kZSAmJiAhYWRkcmVzcy5jb3VudHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdAdHlwZSc6ICdQb3N0YWxBZGRyZXNzJyxcbiAgICAgICAgICAgIC4uLihzdHJlZXRBZGRyZXNzICYmIHsgc3RyZWV0QWRkcmVzcyB9KSxcbiAgICAgICAgICAgIC4uLihhZGRyZXNzLmxvY2FsaXR5ICYmIHsgYWRkcmVzc0xvY2FsaXR5OiBhZGRyZXNzLmxvY2FsaXR5IH0pLFxuICAgICAgICAgICAgLi4uKGFkZHJlc3MucmVnaW9uICYmIHsgYWRkcmVzc1JlZ2lvbjogYWRkcmVzcy5yZWdpb24gfSksXG4gICAgICAgICAgICAuLi4oYWRkcmVzcy5wb3N0YWxDb2RlICYmIHsgcG9zdGFsQ29kZTogYWRkcmVzcy5wb3N0YWxDb2RlIH0pLFxuICAgICAgICAgICAgLi4uKGFkZHJlc3MuY291bnRyeSAmJiB7IGFkZHJlc3NDb3VudHJ5OiBhZGRyZXNzLmNvdW50cnkgfSksXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KTQvtGA0LzQuNGA0YPQtdGCINGB0L/QuNGB0L7QuiBDb250YWN0UG9pbnQg0LTQu9GPIE9yZ2FuaXphdGlvbi5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNyZWF0ZU9yZ2FuaXphdGlvbkNvbnRhY3RQb2ludHMoKTogQ29udGFjdFBvaW50W10ge1xuICAgICAgICBjb25zdCBjb250YWN0UG9pbnRzOiBDb250YWN0UG9pbnRbXSA9IFtcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnQ29udGFjdFBvaW50JyxcbiAgICAgICAgICAgICAgICBjb250YWN0VHlwZTogJ2N1c3RvbWVyIHNlcnZpY2UnLFxuICAgICAgICAgICAgICAgIHRlbGVwaG9uZTogdGhpcy5jb21wYW55SW5mby5waG9uZSxcbiAgICAgICAgICAgICAgICBlbWFpbDogdGhpcy5jb21wYW55SW5mby5tYWlsLFxuICAgICAgICAgICAgICAgIGFyZWFTZXJ2ZWQ6ICdSVScsXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlTGFuZ3VhZ2U6ICdSdXNzaWFuJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIF07XG5cbiAgICAgICAgaWYgKHRoaXMuY29tcGFueUluZm8uc2Vjb25kYXJ5UGhvbmUpIHtcbiAgICAgICAgICAgIGNvbnRhY3RQb2ludHMucHVzaCh7XG4gICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0NvbnRhY3RQb2ludCcsXG4gICAgICAgICAgICAgICAgY29udGFjdFR5cGU6ICdjdXN0b21lciBzZXJ2aWNlJyxcbiAgICAgICAgICAgICAgICB0ZWxlcGhvbmU6IHRoaXMuY29tcGFueUluZm8uc2Vjb25kYXJ5UGhvbmUsXG4gICAgICAgICAgICAgICAgYXJlYVNlcnZlZDogJ1JVJyxcbiAgICAgICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZTogJ1J1c3NpYW4nLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb21wYW55SW5mby5ocikge1xuICAgICAgICAgICAgY29udGFjdFBvaW50cy5wdXNoKHtcbiAgICAgICAgICAgICAgICAnQHR5cGUnOiAnQ29udGFjdFBvaW50JyxcbiAgICAgICAgICAgICAgICBjb250YWN0VHlwZTogJ0hSJyxcbiAgICAgICAgICAgICAgICB0ZWxlcGhvbmU6IHRoaXMuY29tcGFueUluZm8uaHIucGhvbmUsXG4gICAgICAgICAgICAgICAgZW1haWw6IHRoaXMuY29tcGFueUluZm8uaHIubWFpbCxcbiAgICAgICAgICAgICAgICBhcmVhU2VydmVkOiAnUlUnLFxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZUxhbmd1YWdlOiAnUnVzc2lhbicsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjb250YWN0UG9pbnRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LTQsNC70Y/QtdGCIEhUTUwt0YDQsNC30LzQtdGC0LrRgyDQuNC3INGC0LXQutGB0YLQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBodG1sINCi0LXQutGB0YIg0YEgSFRNTC3RgNCw0LfQvNC10YLQutC+0LkuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXNcbiAgICBwcml2YXRlIHN0cmlwSHRtbChodG1sOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgICAgICBjb25zdCB3aXRob3V0VGFncyA9IGh0bWxcbiAgICAgICAgICAgIC5zcGxpdCgnPCcpXG4gICAgICAgICAgICAubWFwKChwYXJ0LCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFydDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb25zdCBjbG9zZVRhZ0luZGV4ID0gcGFydC5pbmRleE9mKCc+Jyk7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gY2xvc2VUYWdJbmRleCA9PT0gLTEgPyBwYXJ0IDogYCAke3BhcnQuc2xpY2UoY2xvc2VUYWdJbmRleCArIDEpfWA7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLmpvaW4oJycpO1xuXG4gICAgICAgIHJldHVybiB3aXRob3V0VGFnc1xuICAgICAgICAgICAgLnJlcGxhY2VBbGwoLyZuYnNwOy9naSwgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2VBbGwoL1xccysvZywgJyAnKVxuICAgICAgICAgICAgLnJlcGxhY2VBbGwoLyAoWy4sIT87Ol0pL2csICckMScpXG4gICAgICAgICAgICAudHJpbSgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCd0L7RgNC80LDQu9C40LfRg9C10YIg0LTQsNGC0YMg0LIg0YTQvtGA0LzQsNGCIFNjaGVtYS5vcmcgKElTTyA4NjAxKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBkYXRlVmFsdWUg0JTQsNGC0LAg0LTQu9GPINC90L7RgNC80LDQu9C40LfQsNGG0LjQuC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgbm9ybWFsaXplU2NoZW1hRGF0ZShkYXRlVmFsdWU/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/LmRlc2NyaXB0aW9uO1xuICAgICAgICBjb25zdCBwcmljZVZhbGlkVW50aWwgPSB0aGlzLm5vcm1hbGl6ZVByaWNlVmFsaWRVbnRpbChwcm9kdWN0LmRpc2NvdW50Py5leHBpcmVkQXQpO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnQHR5cGUnOiAnTGlzdEl0ZW0nLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICBpdGVtOiB7XG4gICAgICAgICAgICAgICAgJ0B0eXBlJzogJ1Byb2R1Y3QnLFxuICAgICAgICAgICAgICAgIG5hbWU6IHByb2R1Y3QubmFtZSxcbiAgICAgICAgICAgICAgICB1cmw6IHByb2R1Y3RVcmwsXG4gICAgICAgICAgICAgICAgLi4uKGltYWdlICYmIHsgaW1hZ2UgfSksXG4gICAgICAgICAgICAgICAgLi4uKGRlc2NyaXB0aW9uICYmIHsgZGVzY3JpcHRpb246IHRoaXMuc3RyaXBIdG1sKGRlc2NyaXB0aW9uKSB9KSxcbiAgICAgICAgICAgICAgICBvZmZlcnM6IHtcbiAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ09mZmVyJyxcbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDdXJyZW5jeTogJ1JVQicsXG4gICAgICAgICAgICAgICAgICAgIC4uLihwcmljZVZhbGlkVW50aWwgJiYgeyBwcmljZVZhbGlkVW50aWwgfSksXG4gICAgICAgICAgICAgICAgICAgIHByaWNlOiBwcm9kdWN0LmNvc3RSdWIsXG4gICAgICAgICAgICAgICAgICAgIGF2YWlsYWJpbGl0eTogdGhpcy5nZXRBdmFpbGFiaWxpdHkocHJvZHVjdCksXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Db25kaXRpb246ICdodHRwczovL3NjaGVtYS5vcmcvTmV3Q29uZGl0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgc2VsbGVyOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAnQHR5cGUnOiAnT3JnYW5pemF0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IHRoaXMuY29tcGFueUluZm8ubmFtZSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBwcm9kdWN0VXJsLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L7Qt9C00LDQtdGCIG1haW5FbnRpdHkg0LTQu9GPINGD0LrQsNC30LDQvdC90L7QuSDQutCw0YLQtdCz0L7RgNC40Lgg0YLQvtCy0LDRgNC+0LIuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnkg0JTQsNC90L3Ri9C1INC+INC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKiBAcGFyYW0gcHJvZHVjdHMg0JTQsNC90L3Ri9C1INC+INGC0L7QstCw0YDQsNGFINC60LDRgtC10LPQvtGA0LjQuC5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlQYXRoIFVybCDQv9GD0YLRjCDQuiDQutCw0YLQtdCz0L7RgNC40Y/QvCDRgtC+0LLQsNGA0L7Qsi4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQsNGC0LXQs9C+0YDQuNC4INC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqIEBwYXJhbSBwcm9kdWN0UGF0aCBVcmwg0L/Rg9GC0Ywg0Log0YLQvtCy0LDRgNGDLiDQkiDQv9GD0YLQuCDQtNC+0LvQttC10L0g0L/RgNC40YHRg9GC0YHRgtCy0L7QstCw0YLRjCDRiNCw0LHQu9C+0L0gJzppZCcsINC+0LHQvtC30L3QsNGH0LDRjtGJ0LjQuSDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDRgtC+0LLQsNGA0LAg0LTQu9GPINC/0L7QtNGB0YLQsNC90L7QstC60LguXG4gICAgICovXG4gICAgcHJpdmF0ZSBjcmVhdGVDYXRlZ29yeU1haW5FbnRpdHkoY2F0ZWdvcnk6IFNjSUNhdGVnb3J5IHwgU2NJVmlydHVhbENhdGVnb3J5LCBwcm9kdWN0czogU2NJUHJvZHVjdFtdLCBjYXRlZ29yeVBhdGg6IHN0cmluZywgcHJvZHVjdFBhdGg6IHN0cmluZyk6IG9iamVjdCB7XG4gICAgICAgIGNvbnN0IGNoaWxkQ2F0ZWdvcmllcyA9IHRoaXMuaXNWaXJ0dWFsQ2F0ZWdvcnkoY2F0ZWdvcnkpXG4gICAgICAgICAgICA/IFsuLi4oKGNhdGVnb3J5IGFzIFNjVmlydHVhbENhdGVnb3J5KS5jaGlsZENhdGVnb3JpZXMgPz8gW10pLCAuLi4oKGNhdGVnb3J5IGFzIFNjVmlydHVhbENhdGVnb3J5KS5wcm9kdWN0Q2F0ZWdvcmllcyA/PyBbXSldXG4gICAgICAgICAgICA6ICgoY2F0ZWdvcnkgYXMgU2NDYXRlZ29yeSkuY2F0ZWdvcmllcyA/PyBbXSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdAdHlwZSc6ICdJdGVtTGlzdCcsXG4gICAgICAgICAgICBudW1iZXJPZkl0ZW1zOiBwcm9kdWN0cy5sZW5ndGggKyBjaGlsZENhdGVnb3JpZXMubGVuZ3RoLFxuICAgICAgICAgICAgaXRlbUxpc3RPcmRlcjogJ2h0dHBzOi8vc2NoZW1hLm9yZy9JdGVtTGlzdFVub3JkZXJlZCcsXG4gICAgICAgICAgICBpdGVtTGlzdEVsZW1lbnQ6IFtcbiAgICAgICAgICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0L/QvtC00LrQsNGC0LXQs9C+0YDQuNC4INCyINC90LDRh9Cw0LvQviDRgdC/0LjRgdC60LAuXG4gICAgICAgICAgICAgICAgLi4uY2hpbGRDYXRlZ29yaWVzLnNsaWNlKDAsIDUpLm1hcCgoc3ViQ2F0ZWdvcnksIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGltYWdlID0gdGhpcy5tZWRpYUltYWdlVHJhbnNmb3JtZXJQaXBlLnRyYW5zZm9ybShzdWJDYXRlZ29yeS5pbWFnZSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc3ViQ2F0ZWdvcnkuc2VvPy5kZXNjcmlwdGlvbiA/PyBzdWJDYXRlZ29yeS5wcm9wZXJ0aWVzPy5kZXNjcmlwdGlvbjtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0xpc3RJdGVtJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBpbmRleCArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICBpdGVtOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0B0eXBlJzogJ0NvbGxlY3Rpb25QYWdlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBzdWJDYXRlZ29yeS5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdGhpcy5nZXRDYXRlZ29yeUNhbm9uaWNhbFVybChzdWJDYXRlZ29yeSwgY2F0ZWdvcnlQYXRoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oaW1hZ2UgJiYgeyBpbWFnZSB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4oZGVzY3JpcHRpb24gJiYgeyBkZXNjcmlwdGlvbjogdGhpcy5zdHJpcEh0bWwoZGVzY3JpcHRpb24pIH0pLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAvLyDQlNC+0LHQsNCy0LvRj9C10Lwg0YLQvtCy0LDRgNGLINC/0L7RgdC70LUg0L/QvtC00LrQsNGC0LXQs9C+0YDQuNC5LlxuICAgICAgICAgICAgICAgIC4uLnByb2R1Y3RzLnNsaWNlKDAsIDEwKS5tYXAoKHByb2R1Y3QsIGluZGV4KSA9PiB0aGlzLmNyZWF0ZVByb2R1Y3RzTGlzdEl0ZW0ocHJvZHVjdCwgY2hpbGRDYXRlZ29yaWVzLmxlbmd0aCArIGluZGV4ICsgMSwgcHJvZHVjdFBhdGgpKSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC10L7QsdGA0LDQt9GD0LXRgiDQvNCw0YHRgdC40LIgTGlua0RhdGEg0LIgQnJlYWRjcnVtYkxpc3Qg0LTQu9GPINC60LDRgtCw0LvQvtCz0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gYnJlYWRjcnVtYnMg0JzQsNGB0YHQuNCyINGF0LvQtdCx0L3Ri9GFINC60YDQvtGI0LXQui5cbiAgICAgKiBAcGFyYW0gY2F0ZWdvcnlQYXRoIFVybCDQv9GD0YLRjCDQuiDQutCw0YLQtdCz0L7RgNC40Y/QvCDRgtC+0LLQsNGA0L7Qsi4g0JIg0L/Rg9GC0Lgg0LTQvtC70LbQtdC9INC/0YDQuNGB0YPRgtGB0YLQstC+0LLQsNGC0Ywg0YjQsNCx0LvQvtC9ICc6aWQnLCDQvtCx0L7Qt9C90LDRh9Cw0Y7RidC40Lkg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LrQsNGC0LXQs9C+0YDQuNC4INC00LvRjyDQv9C+0LTRgdGC0LDQvdC+0LLQutC4LlxuICAgICAqL1xuICAgIHByaXZhdGUgY3JlYXRlQ2F0YWxvZ0JyZWFkY3J1bWJzTGlzdChicmVhZGNydW1iczogU2NJQnJlYWRjcnVtYkl0ZW1bXSwgY2F0ZWdvcnlQYXRoOiBzdHJpbmcpOiBCcmVhZGNydW1iTGlzdCB7XG4gICAgICAgIGNvbnN0IGNhdGFsb2dVcmwgPSBgJHt0aGlzLnVybHMuc2l0ZVVybH0ke2NhdGVnb3J5UGF0aC5yZXBsYWNlKCc6aWQnLCAnJyl9YDtcbiAgICAgICAgY29uc3QgYnJlYWRjcnVtYkl0ZW1zOiBMaXN0SXRlbVtdID0gW1xuICAgICAgICAgICAgLy8g0JLRgdC10LPQtNCwINC00L7QsdCw0LLQu9GP0LXQvCDQs9C70LDQstC90YPRjiDRgdGC0YDQsNC90LjRhtGDLlxuICAgICAgICAgICAgdGhpcy5jcmVhdGVCcmVhZGNydW1iTGlzdEl0ZW0oMSwgJ9CT0LvQsNCy0L3QsNGPJywgdGhpcy51cmxzLnNpdGVVcmwpLFxuICAgICAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INC60LDRgtCw0LvQvtCzLlxuICAgICAgICAgICAgdGhpcy5jcmVhdGVCcmVhZGNydW1iTGlzdEl0ZW0oMiwgJ9Ca0LDRgtCw0LvQvtCzJywgY2F0YWxvZ1VybCksXG4gICAgICAgIF07XG5cbiAgICAgICAgLy8g0JTQvtCx0LDQstC70Y/QtdC8INGB0YPRidC10YHRgtCy0YPRjtGJ0LjQtSBicmVhZGNydW1icyDRgSDQutC+0YDRgNC10LrRgtC40YDQvtCy0LrQvtC5INC/0L7Qt9C40YbQuNC5LlxuICAgICAgICBicmVhZGNydW1icy5mb3JFYWNoKChpdGVtLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgbGluayA9IGlzQXJyYXkoaXRlbS5yb3V0ZXJMaW5rKSA/IGl0ZW0ucm91dGVyTGluay5qb2luKCcvJykgOiBpdGVtLnJvdXRlckxpbms7XG5cbiAgICAgICAgICAgIGJyZWFkY3J1bWJJdGVtcy5wdXNoKHRoaXMuY3JlYXRlQnJlYWRjcnVtYkxpc3RJdGVtKGluZGV4ICsgMywgaXRlbS5sYWJlbCwgbGluayA/IGAke3RoaXMudXJscy5zaXRlVXJsfS8ke2xpbmt9YCA6IHVuZGVmaW5lZCkpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0B0eXBlJzogJ0JyZWFkY3J1bWJMaXN0JyxcbiAgICAgICAgICAgIGl0ZW1MaXN0T3JkZXI6ICdodHRwczovL3NjaGVtYS5vcmcvSXRlbUxpc3RPcmRlckFzY2VuZGluZycsXG4gICAgICAgICAgICBpdGVtTGlzdEVsZW1lbnQ6IGJyZWFkY3J1bWJJdGVtcyxcbiAgICAgICAgfSBhcyBCcmVhZGNydW1iTGlzdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodC+0LfQtNCw0ZHRgiDRjdC70LXQvNC10L3RgiBCcmVhZGNydW1iTGlzdCDQsiDRhNC+0YDQvNCw0YLQtSwg0YDQtdC60L7QvNC10L3QtNC+0LLQsNC90L3QvtC8IFNjaGVtYS5vcmcuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcG9zaXRpb24g0J/QvtC30LjRhtC40Y8g0Y3Qu9C10LzQtdC90YLQsCDQsiDRhtC10L/QvtGH0LrQtS5cbiAgICAgKiBAcGFyYW0gbmFtZSDQndCw0LfQstCw0L3QuNC1INGN0LvQtdC80LXQvdGC0LAuXG4gICAgICogQHBhcmFtIHVybCBVUkwg0Y3Qu9C10LzQtdC90YLQsC5cbiAgICAgKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY2xhc3MtbWV0aG9kcy11c2UtdGhpc1xuICAgIHByaXZhdGUgY3JlYXRlQnJlYWRjcnVtYkxpc3RJdGVtKHBvc2l0aW9uOiBudW1iZXIsIG5hbWU6IHN0cmluZywgdXJsPzogc3RyaW5nKTogTGlzdEl0ZW0ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgJ0B0eXBlJzogJ0xpc3RJdGVtJyxcbiAgICAgICAgICAgIHBvc2l0aW9uLFxuICAgICAgICAgICAgLi4uKHVybFxuICAgICAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgICAgICAgIGl0ZW06IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ0BpZCc6IHVybCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIDogeyBuYW1lIH0pLFxuICAgICAgICB9IGFzIExpc3RJdGVtO1xuICAgIH1cbn1cbiJdfQ==
@@ -7726,7 +7726,7 @@ class SchemaOrgFactory {
7726
7726
  ...(id && { '@id': id }),
7727
7727
  name: product.name,
7728
7728
  ...(image && { image }),
7729
- ...(description && { description }),
7729
+ ...(description && { description: this.stripHtml(description) }),
7730
7730
  mpn: product.code,
7731
7731
  url: productUrl,
7732
7732
  offers: {
@@ -7755,7 +7755,8 @@ class SchemaOrgFactory {
7755
7755
  * @param id Необязательный идентификатор сущности для поля `@id` в JSON-LD.
7756
7756
  */
7757
7757
  generateForCategoryItem(category, products, categoryPath, productPath, breadcrumbs, id) {
7758
- const description = category.seo?.description ?? category.properties?.description;
7758
+ const descriptionRaw = category.seo?.description ?? category.properties?.description;
7759
+ const description = descriptionRaw ? this.stripHtml(descriptionRaw) : undefined;
7759
7760
  const image = this.mediaImageTransformerPipe.transform(category.image, true);
7760
7761
  return {
7761
7762
  '@context': 'https://schema.org',
@@ -7874,7 +7875,7 @@ class SchemaOrgFactory {
7874
7875
  '@type': 'NewsArticle',
7875
7876
  ...(id && { '@id': id }),
7876
7877
  headline,
7877
- ...(description && { description }),
7878
+ ...(description && { description: this.stripHtml(description) }),
7878
7879
  ...(image && { image }),
7879
7880
  ...(datePublished && { datePublished }),
7880
7881
  ...(articleBody && { articleBody }),
@@ -8006,6 +8007,7 @@ class SchemaOrgFactory {
8006
8007
  })
8007
8008
  .join('');
8008
8009
  return withoutTags
8010
+ .replaceAll(/ /gi, ' ')
8009
8011
  .replaceAll(/\s+/g, ' ')
8010
8012
  .replaceAll(/ ([.,!?;:])/g, '$1')
8011
8013
  .trim();
@@ -8101,7 +8103,7 @@ class SchemaOrgFactory {
8101
8103
  name: product.name,
8102
8104
  url: productUrl,
8103
8105
  ...(image && { image }),
8104
- ...(description && { description }),
8106
+ ...(description && { description: this.stripHtml(description) }),
8105
8107
  offers: {
8106
8108
  '@type': 'Offer',
8107
8109
  priceCurrency: 'RUB',
@@ -8147,7 +8149,7 @@ class SchemaOrgFactory {
8147
8149
  name: subCategory.name,
8148
8150
  url: this.getCategoryCanonicalUrl(subCategory, categoryPath),
8149
8151
  ...(image && { image }),
8150
- ...(description && { description }),
8152
+ ...(description && { description: this.stripHtml(description) }),
8151
8153
  },
8152
8154
  };
8153
8155
  }),