@veloceapps/sdk 7.0.2-6 → 7.0.2-60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (170) hide show
  1. package/cms/cms.actions.d.ts +30 -1
  2. package/cms/cms.default.d.ts +2 -2
  3. package/cms/components/element-children/element-children.component.d.ts +3 -1
  4. package/cms/components/element-tools-panel/element-tools-panel.component.d.ts +14 -0
  5. package/cms/components/preview/preview.component.d.ts +6 -5
  6. package/cms/components/preview/preview.module.d.ts +2 -1
  7. package/cms/components/preview/preview.types.d.ts +4 -0
  8. package/cms/definitions/index.d.ts +1 -0
  9. package/cms/definitions/ui-builder.definitions.d.ts +6 -0
  10. package/cms/index.d.ts +2 -0
  11. package/cms/injection-tokens.d.ts +2 -4
  12. package/cms/modules/migrations/services/migrations.service.d.ts +1 -1
  13. package/cms/modules/migrations/types/migrations.types.d.ts +1 -1
  14. package/cms/modules/runtime/index.d.ts +1 -0
  15. package/cms/modules/runtime/services/compilation.service.d.ts +3 -2
  16. package/cms/modules/runtime/services/runtime-editor.service.d.ts +6 -4
  17. package/cms/modules/runtime/services/runtime.service.d.ts +6 -2
  18. package/cms/modules/runtime/types/runtime.actions.d.ts +5 -2
  19. package/cms/plugins/element-hover.plugin.d.ts +33 -0
  20. package/cms/plugins/page.plugin.d.ts +15 -0
  21. package/cms/plugins/script.plugin.d.ts +0 -3
  22. package/cms/types/common.types.d.ts +11 -1
  23. package/cms/types/index.d.ts +2 -0
  24. package/cms/types/layouts.types.d.ts +30 -2
  25. package/cms/types/pages.types.d.ts +1 -0
  26. package/cms/utils/element.utils.d.ts +1 -1
  27. package/cms/utils/elements-resolver.d.ts +6 -2
  28. package/cms/utils/index.d.ts +1 -0
  29. package/cms/utils/script.utils.d.ts +2 -0
  30. package/cms/utils/ui-builder-layout.utils.d.ts +4 -0
  31. package/cms/vendor-map.d.ts +12 -8
  32. package/core/core.module.d.ts +2 -0
  33. package/core/directives/directives.module.d.ts +7 -0
  34. package/core/directives/index.d.ts +2 -0
  35. package/core/directives/primeng-calendar.directive.d.ts +14 -0
  36. package/core/index.d.ts +2 -0
  37. package/core/modules/configuration/helpers.d.ts +2 -2
  38. package/core/modules/configuration/services/configuration-runtime.service.d.ts +2 -2
  39. package/core/modules/configuration/services/configuration.service.d.ts +3 -3
  40. package/core/pipes/date.pipe.d.ts +12 -0
  41. package/core/pipes/index.d.ts +4 -0
  42. package/core/pipes/number.pipe.d.ts +10 -0
  43. package/core/pipes/pipes.module.d.ts +9 -0
  44. package/core/pipes/price.pipe.d.ts +10 -0
  45. package/core/services/index.d.ts +1 -0
  46. package/core/services/runtime-settings.service.d.ts +21 -0
  47. package/core/types/formatting-settings.types.d.ts +11 -0
  48. package/core/types/index.d.ts +1 -0
  49. package/core/types/runtime.types.d.ts +1 -2
  50. package/core/types/ui-definition.types.d.ts +0 -40
  51. package/core/utils/line-item.utils.d.ts +6 -3
  52. package/core/utils/line-item.worker.d.ts +2 -2
  53. package/core/utils/ui-definition.utils.d.ts +1 -1
  54. package/esm2020/cms/cms.actions.mjs +42 -2
  55. package/esm2020/cms/cms.default.mjs +1 -1
  56. package/esm2020/cms/cms.elements.mjs +16 -4
  57. package/esm2020/cms/cms.layouts.mjs +73 -13
  58. package/esm2020/cms/components/element-children/element-children.component.mjs +11 -6
  59. package/esm2020/cms/components/element-drop-handle/element-drop-handle.component.mjs +2 -2
  60. package/esm2020/cms/components/element-tools-panel/element-tools-panel.component.mjs +35 -0
  61. package/esm2020/cms/components/preview/preview.component.mjs +18 -16
  62. package/esm2020/cms/components/preview/preview.module.mjs +22 -4
  63. package/esm2020/cms/components/preview/preview.types.mjs +1 -1
  64. package/esm2020/cms/definitions/index.mjs +2 -0
  65. package/esm2020/cms/definitions/ui-builder.definitions.mjs +18 -0
  66. package/esm2020/cms/index.mjs +3 -1
  67. package/esm2020/cms/injection-tokens.mjs +1 -2
  68. package/esm2020/cms/modules/migrations/migrations.mjs +10 -3
  69. package/esm2020/cms/modules/migrations/services/migrations.service.mjs +1 -1
  70. package/esm2020/cms/modules/migrations/types/migrations.types.mjs +1 -1
  71. package/esm2020/cms/modules/runtime/index.mjs +2 -1
  72. package/esm2020/cms/modules/runtime/services/compilation.service.mjs +5 -3
  73. package/esm2020/cms/modules/runtime/services/runtime-editor.service.mjs +5 -3
  74. package/esm2020/cms/modules/runtime/services/runtime.service.mjs +41 -6
  75. package/esm2020/cms/modules/runtime/types/runtime.actions.mjs +1 -1
  76. package/esm2020/cms/plugins/element-hover.plugin.mjs +121 -0
  77. package/esm2020/cms/plugins/page.plugin.mjs +37 -0
  78. package/esm2020/cms/plugins/region.plugin.mjs +3 -2
  79. package/esm2020/cms/plugins/script.plugin.mjs +6 -40
  80. package/esm2020/cms/services/integration.state.mjs +3 -6
  81. package/esm2020/cms/services/io-provider.service.mjs +7 -5
  82. package/esm2020/cms/types/common.types.mjs +1 -1
  83. package/esm2020/cms/types/index.mjs +3 -1
  84. package/esm2020/cms/types/layouts.types.mjs +70 -1
  85. package/esm2020/cms/types/pages.types.mjs +2 -0
  86. package/esm2020/cms/utils/element.utils.mjs +1 -1
  87. package/esm2020/cms/utils/elements-resolver.mjs +22 -8
  88. package/esm2020/cms/utils/index.mjs +2 -1
  89. package/esm2020/cms/utils/script.utils.mjs +42 -0
  90. package/esm2020/cms/utils/ui-builder-layout.utils.mjs +46 -0
  91. package/esm2020/cms/vendor-map.mjs +5 -3
  92. package/esm2020/core/core.module.mjs +33 -4
  93. package/esm2020/core/directives/directives.module.mjs +16 -0
  94. package/esm2020/core/directives/index.mjs +3 -0
  95. package/esm2020/core/directives/primeng-calendar.directive.mjs +41 -0
  96. package/esm2020/core/index.mjs +3 -1
  97. package/esm2020/core/modules/configuration/configuration.module.mjs +2 -2
  98. package/esm2020/core/modules/configuration/helpers.mjs +3 -6
  99. package/esm2020/core/modules/configuration/services/configuration-runtime.service.mjs +3 -2
  100. package/esm2020/core/modules/configuration/services/configuration.service.mjs +6 -5
  101. package/esm2020/core/modules/configuration/services/runtime-context.service.mjs +6 -12
  102. package/esm2020/core/pipes/date.pipe.mjs +38 -0
  103. package/esm2020/core/pipes/index.mjs +5 -0
  104. package/esm2020/core/pipes/number.pipe.mjs +27 -0
  105. package/esm2020/core/pipes/pipes.module.mjs +18 -0
  106. package/esm2020/core/pipes/price.pipe.mjs +30 -0
  107. package/esm2020/core/services/index.mjs +2 -1
  108. package/esm2020/core/services/runtime-settings.service.mjs +88 -0
  109. package/esm2020/core/types/formatting-settings.types.mjs +3 -0
  110. package/esm2020/core/types/index.mjs +2 -1
  111. package/esm2020/core/types/runtime.types.mjs +1 -1
  112. package/esm2020/core/types/ui-definition.types.mjs +1 -1
  113. package/esm2020/core/utils/line-item.utils.mjs +19 -9
  114. package/esm2020/core/utils/line-item.worker.mjs +5 -5
  115. package/esm2020/core/utils/ui-definition.utils.mjs +1 -1
  116. package/esm2020/runtime/components/ui-runtime-preview/runtime-preview.component.mjs +2 -2
  117. package/esm2020/runtime/services/runtime-context.service.mjs +8 -5
  118. package/esm2020/runtime/services/runtime.service.mjs +1 -1
  119. package/esm2020/runtime/types/runtime.types.mjs +1 -1
  120. package/esm2020/src/components/dialog/dialog.component.mjs +3 -3
  121. package/esm2020/src/components/doc-gen/doc-gen.component.mjs +2 -2
  122. package/esm2020/src/components/header/cart-overlay/cart-preview.component.mjs +5 -6
  123. package/esm2020/src/components/header/cart-overlay/cart-preview.module.mjs +7 -4
  124. package/esm2020/src/components/header/header.component.mjs +49 -41
  125. package/esm2020/src/components/header/header.module.mjs +7 -3
  126. package/esm2020/src/components/header/metrics/metrics.component.mjs +35 -7
  127. package/esm2020/src/components/header/metrics/metrics.module.mjs +7 -3
  128. package/esm2020/src/flow-routing.module.mjs +1 -1
  129. package/esm2020/src/guards/context.guard.mjs +11 -8
  130. package/esm2020/src/pages/assets/assets.component.mjs +2 -2
  131. package/esm2020/src/pages/catalog/catalog.component.mjs +3 -3
  132. package/esm2020/src/pages/product/product.component.mjs +2 -2
  133. package/esm2020/src/pages/remote/remote.component.mjs +1 -1
  134. package/esm2020/src/pages/shopping-cart/shopping-cart.component.mjs +3 -3
  135. package/esm2020/src/services/flow-dialog.service.mjs +15 -15
  136. package/esm2020/src/types/flow-customization.types.mjs +1 -1
  137. package/fesm2015/veloceapps-sdk-cms.mjs +774 -356
  138. package/fesm2015/veloceapps-sdk-cms.mjs.map +1 -1
  139. package/fesm2015/veloceapps-sdk-core.mjs +300 -36
  140. package/fesm2015/veloceapps-sdk-core.mjs.map +1 -1
  141. package/fesm2015/veloceapps-sdk-runtime.mjs +7 -4
  142. package/fesm2015/veloceapps-sdk-runtime.mjs.map +1 -1
  143. package/fesm2015/veloceapps-sdk.mjs +141 -94
  144. package/fesm2015/veloceapps-sdk.mjs.map +1 -1
  145. package/fesm2020/veloceapps-sdk-cms.mjs +857 -358
  146. package/fesm2020/veloceapps-sdk-cms.mjs.map +1 -1
  147. package/fesm2020/veloceapps-sdk-core.mjs +293 -36
  148. package/fesm2020/veloceapps-sdk-core.mjs.map +1 -1
  149. package/fesm2020/veloceapps-sdk-runtime.mjs +7 -4
  150. package/fesm2020/veloceapps-sdk-runtime.mjs.map +1 -1
  151. package/fesm2020/veloceapps-sdk.mjs +139 -92
  152. package/fesm2020/veloceapps-sdk.mjs.map +1 -1
  153. package/package.json +1 -1
  154. package/runtime/components/ui-runtime-preview/runtime-preview.component.d.ts +3 -3
  155. package/runtime/services/runtime.service.d.ts +2 -2
  156. package/runtime/types/runtime.types.d.ts +2 -2
  157. package/src/components/doc-gen/doc-gen.component.d.ts +2 -1
  158. package/src/components/header/cart-overlay/cart-preview.component.d.ts +1 -1
  159. package/src/components/header/cart-overlay/cart-preview.module.d.ts +1 -1
  160. package/src/components/header/header.component.d.ts +2 -3
  161. package/src/components/header/header.module.d.ts +2 -1
  162. package/src/components/header/metrics/metrics.component.d.ts +10 -2
  163. package/src/components/header/metrics/metrics.module.d.ts +2 -1
  164. package/src/guards/context.guard.d.ts +3 -2
  165. package/src/pages/assets/assets.component.d.ts +2 -1
  166. package/src/pages/catalog/catalog.component.d.ts +2 -1
  167. package/src/pages/product/product.component.d.ts +2 -1
  168. package/src/pages/remote/remote.component.d.ts +2 -1
  169. package/src/pages/shopping-cart/shopping-cart.component.d.ts +2 -1
  170. package/src/types/flow-customization.types.d.ts +1 -2
@@ -1,9 +1,9 @@
1
1
  import { ChangeDetectionStrategy, Component } from '@angular/core';
2
- import { QuoteApiService, SalesforceApiService, ShoppingCartSettingsApiService } from '@veloceapps/api';
3
- import { ConfigurationContextMode, getSupportedDateFormats, } from '@veloceapps/core';
2
+ import { QuoteApiService, SalesforceApiService } from '@veloceapps/api';
3
+ import { ConfigurationContextMode, } from '@veloceapps/core';
4
4
  import { IntegrationState, OpenDocGenAction } from '@veloceapps/sdk/cms';
5
- import { ContextService, FlowConfigurationService, getOriginParent, isLineItemModified, QuoteDraftService, } from '@veloceapps/sdk/core';
6
- import { BehaviorSubject, combineLatest, distinctUntilChanged, filter, finalize, first, map, noop, of, Subject, switchMap, take, takeUntil, tap, } from 'rxjs';
5
+ import { ContextService, FlowConfigurationService, QuoteDraftService, getOriginParent, isLineItemModified, } from '@veloceapps/sdk/core';
6
+ import { BehaviorSubject, Subject, combineLatest, distinctUntilChanged, filter, finalize, first, map, noop, of, switchMap, takeUntil, tap, } from 'rxjs';
7
7
  import { FlowDialogService } from '../../services/flow-dialog.service';
8
8
  import { FlowRouterService } from '../../services/flow-router.service';
9
9
  import * as i0 from "@angular/core";
@@ -22,7 +22,7 @@ import * as i12 from "./cart-overlay/cart-preview.component";
22
22
  import * as i13 from "primeng/splitbutton";
23
23
  import * as i14 from "./metrics/metrics.component";
24
24
  export class FlowHeaderComponent {
25
- constructor(contextService, quoteDraftService, quoteApiService, sfApiService, flowConfiguration, routerService, dialogService, integrationState, shoppingCartSettingsApiService) {
25
+ constructor(contextService, quoteDraftService, quoteApiService, sfApiService, flowConfiguration, routerService, dialogService, integrationState) {
26
26
  this.contextService = contextService;
27
27
  this.quoteDraftService = quoteDraftService;
28
28
  this.quoteApiService = quoteApiService;
@@ -31,7 +31,6 @@ export class FlowHeaderComponent {
31
31
  this.routerService = routerService;
32
32
  this.dialogService = dialogService;
33
33
  this.integrationState = integrationState;
34
- this.shoppingCartSettingsApiService = shoppingCartSettingsApiService;
35
34
  this.isSaveInProgress$ = new BehaviorSubject(false);
36
35
  this.isSubmitInProgress$ = new BehaviorSubject(false);
37
36
  this.dateFormat = 'MM.dd.yyyy';
@@ -51,12 +50,6 @@ export class FlowHeaderComponent {
51
50
  this.isCatalogRoute$ = this.routerService.isCatalogRoute$();
52
51
  this.isAssetsRoute$ = this.routerService.isAssetsRoute$();
53
52
  this.objectDetails$ = this.getObjectDetails$();
54
- this.shoppingCartSettingsApiService
55
- .getSettingsMap()
56
- .pipe(take(1))
57
- .subscribe(settings => {
58
- this.dateFormat = getSupportedDateFormats(settings.DATE_FORMAT ?? this.dateFormat).datePipeFormat;
59
- });
60
53
  }
61
54
  ngOnInit() {
62
55
  this.contextService
@@ -98,6 +91,12 @@ export class FlowHeaderComponent {
98
91
  this.submitButtonClickHandler(isCartRoute);
99
92
  },
100
93
  },
94
+ {
95
+ label: 'Generate Document',
96
+ command: () => {
97
+ this.docGenButtonClickHandler(isCartRoute);
98
+ },
99
+ },
101
100
  ];
102
101
  }
103
102
  back(objectId) {
@@ -221,7 +220,11 @@ export class FlowHeaderComponent {
221
220
  this.quoteDraftService.updateActivePriceList(priceListId);
222
221
  }
223
222
  toggleCartOverlay(cart, event) {
223
+ event.stopPropagation();
224
224
  if (!this.isReadonlyMode()) {
225
+ if (!cart.overlayPanel.overlayVisible) {
226
+ document.dispatchEvent(new Event('click'));
227
+ }
225
228
  cart?.overlayPanel.toggle(event);
226
229
  }
227
230
  }
@@ -273,15 +276,19 @@ export class FlowHeaderComponent {
273
276
  return combineLatest([
274
277
  this.flowConfiguration.get(),
275
278
  this.integrationState.state$.pipe(map(state => state.modifiedAssets), distinctUntilChanged()),
276
- ]).pipe(map(([lineItems, modifiedAssets]) => lineItems.reduce((acc, li) => {
277
- const assetId = li.assetId || li.openOrderLineItemId;
278
- const isModified = isLineItemModified(li);
279
- const currentTerm = getOriginParent(lineItems, li) ?? li;
280
- if (isModified || (assetId && modifiedAssets?.[assetId])) {
281
- acc.push(currentTerm);
282
- }
283
- return acc;
284
- }, [])));
279
+ ]).pipe(map(([lineItems, modifiedAssets]) => {
280
+ const currentTerms = lineItems.reduce((acc, li) => {
281
+ const assetId = li.assetId || li.openOrderLineItemId;
282
+ const isModified = isLineItemModified(li);
283
+ const currentTerm = getOriginParent(lineItems, li) ?? li;
284
+ if (isModified || (assetId && modifiedAssets?.[assetId])) {
285
+ acc.push(currentTerm);
286
+ }
287
+ return acc;
288
+ }, []);
289
+ const uniqCurrentTerms = currentTerms.filter((value, index, array) => array.indexOf(value) === index);
290
+ return uniqCurrentTerms;
291
+ }));
285
292
  }
286
293
  getAssets$() {
287
294
  return this.flowConfiguration
@@ -293,6 +300,10 @@ export class FlowHeaderComponent {
293
300
  date.setHours(0, 0, 0, 0);
294
301
  const now = date.getTime();
295
302
  const termParentIds = lineItems.map(li => li.rampInstanceId).filter(Boolean);
303
+ const lineItemsRampInstanceIdMap = lineItems.reduce((acc, li) => {
304
+ acc[li.rampInstanceId ?? ''] = li;
305
+ return acc;
306
+ }, {});
296
307
  return lineItems.reduce((result, li) => {
297
308
  // find main term line item
298
309
  if (li.rampInstanceId) {
@@ -301,23 +312,20 @@ export class FlowHeaderComponent {
301
312
  // find current term line item
302
313
  let target = li;
303
314
  while (target && target.endDate && new Date(target.endDate).getTime() <= now) {
304
- target = lineItems.find(sub => sub.rampInstanceId === li.id);
315
+ target = lineItemsRampInstanceIdMap[li.id];
305
316
  }
306
317
  if (target && target.productId) {
307
- return [
308
- ...result,
309
- {
310
- id: target.id,
311
- productId: target.productId,
312
- name: target.name,
313
- configurable: target.properties['#configurable'] === 'true',
314
- deleted: target.actionCode === 'DELETE',
315
- hasTerm: termParentIds.includes(target.id),
316
- qty: target.qty,
317
- mrr: this.formatMetric(target.properties.VDM_Total_MRR),
318
- nrr: this.formatMetric(target.properties.VDM_Total_NRR),
319
- },
320
- ];
318
+ result.push({
319
+ id: target.id,
320
+ productId: target.productId,
321
+ name: target.name,
322
+ configurable: target.properties['#configurable'] === 'true',
323
+ deleted: target.actionCode === 'DELETE',
324
+ hasTerm: termParentIds.includes(target.id),
325
+ qty: target.qty,
326
+ mrr: this.formatMetric(target.properties.VDM_Total_MRR),
327
+ nrr: this.formatMetric(target.properties.VDM_Total_NRR),
328
+ });
321
329
  }
322
330
  return result;
323
331
  }, []);
@@ -332,10 +340,10 @@ export class FlowHeaderComponent {
332
340
  return noUpdates && sameNumberOfProducts;
333
341
  }
334
342
  }
335
- FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i2.QuoteApiService }, { token: i2.SalesforceApiService }, { token: i1.FlowConfigurationService }, { token: i3.FlowRouterService }, { token: i4.FlowDialogService }, { token: i5.IntegrationState }, { token: i2.ShoppingCartSettingsApiService }], target: i0.ɵɵFactoryTarget.Component });
336
- FlowHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: FlowHeaderComponent, selector: "vl-flow-header", ngImport: i0, template: "<ng-container *ngIf=\"contextProperties$ | async as contextProperties\">\n <ng-container *ngIf=\"objectDetails$ | async as details\">\n <div class=\"flow-info\">\n <nav class=\"nav-item nav-back\" (click)=\"back()\">\n <i class=\"nav-icon vl-icon vl-icon-arrow-left\"></i>\n\n <span> Back to {{ objectName$ | async | titlecase }}</span>\n </nav>\n\n <ng-container *ngIf=\"isAccountMode$ | async\">\n <span class=\"dot-separator\"></span>\n\n <nav class=\"account-name\" [pTooltip]=\"contextProperties.Name ?? ''\" tooltipPosition=\"bottom\" [showDelay]=\"1000\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(contextProperties.Id)\">{{ contextProperties.Name }}</a>\n </nav>\n </ng-container>\n\n <ng-container *ngIf=\"isQuoteMode$ | async\">\n <span class=\"dot-separator\"></span>\n\n <span>Quote #{{ details.quoteNumber }}</span>\n\n <span class=\"dot-separator\"></span>\n\n <nav class=\"nav-item\" (click)=\"quoteDetails.toggle($event)\">\n <span>{{ status$ | async }}</span>\n\n <i *ngIf=\"!quoteDetails.overlayVisible\" class=\"vl-icon vl-icon-chevron-down icon-with-margin\"></i>\n <i *ngIf=\"quoteDetails.overlayVisible\" class=\"vl-icon vl-icon-chevron-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"navigation-settings-overlay flow-header-overlay center\" #quoteDetails>\n <ng-template pTemplate>\n <div class=\"flow-header-overlay__wrapper\">\n <h2 class=\"flow-header-overlay__title\">\n <span>Quote Information</span>\n <i class=\"vl-icon vl-icon-close close-icon\" (click)=\"quoteDetails.hide()\"></i>\n </h2>\n\n <ul class=\"info-list\">\n <li class=\"info-list__row\">\n <span>Account Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.accountId)\">\n <span>{{ details.accountName }}</span>\n </a>\n </li>\n <li class=\"info-list__row\">\n <span>Opportunity Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.opportunityId)\">\n <span>{{ details.opportunityName }}</span>\n </a>\n </li>\n <li class=\"info-list__row\">\n <span>Quote Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteId)\">\n <span>{{ details.quoteName }}</span>\n </a>\n </li>\n <li class=\"info-list__row\">\n <span>Quote Number:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteId)\">\n <span>{{ details.quoteNumber }}</span>\n </a>\n </li>\n </ul>\n </div>\n </ng-template>\n </p-overlayPanel>\n </ng-container>\n </div>\n\n <div class=\"flow-navigation\">\n <ng-container *vlLet=\"isReadonlyMode$ | async as isReadonlyMode\">\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isAssetsRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToAssets()\"\n >\n Assets ({{ assetsCount$ | async }})\n </nav>\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isCatalogRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToCatalog()\"\n >\n Catalog\n </nav>\n <nav class=\"nav-item disabled\" [ngClass]=\"{ active: isConfigurationRoute$ | async }\">Configurator</nav>\n <ng-container *vlLet=\"products$ | async as products\">\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isCartRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToShoppingCart()\"\n >\n Shopping Cart ({{ products?.length ?? 0 }})\n </nav>\n\n <nav\n class=\"nav-popover-toggle\"\n [ngClass]=\"{ active: (isCartRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"toggleCartOverlay(cart, $event)\"\n >\n <i *ngIf=\"!cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-icon-chevron-down icon-with-margin\"></i>\n <i *ngIf=\"cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-icon-chevron-up icon-with-margin\"></i>\n </nav>\n\n <vl-cart-preview #cart [products]=\"products ?? []\"></vl-cart-preview>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"flow-controls\">\n <ng-container *ngIf=\"(isReadonlyMode$ | async) === false\">\n <ng-container *vlLet=\"activePriceList$ | async as priceList\">\n <div>\n <ng-container *vlLet=\"assetPriceLists$ | async as assetPriceLists\">\n <ng-container\n *ngIf=\"(isAccountMode$ | async) && assetPriceLists && assetPriceLists.length > 1; else singlePriceList\"\n >\n <nav class=\"nav-item\" (click)=\"priceListsOverlay?.toggle($event)\">\n <span>{{ priceList?.name }}</span>\n <i\n *ngIf=\"!priceListsOverlay?.overlayVisible\"\n class=\"vl-icon vl-icon-chevron-down icon-with-margin\"\n ></i>\n <i *ngIf=\"priceListsOverlay?.overlayVisible\" class=\"vl-icon vl-icon-chevron-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"price-list-overlay\" #priceListsOverlay>\n <ng-template pTemplate>\n <span\n *ngFor=\"let option of assetPriceLists\"\n class=\"price-list-option\"\n [class.active]=\"priceList?.id === option.id\"\n (click)=\"selectPriceList(option.id); priceListsOverlay.hide()\"\n >\n {{ option.name }}\n </span>\n </ng-template>\n </p-overlayPanel>\n </ng-container>\n </ng-container>\n\n <ng-template #singlePriceList>\n <div>{{ priceList?.name }}</div>\n </ng-template>\n\n <div *ngIf=\"contextProperties.StartDate\">{{ contextProperties.StartDate | date : dateFormat }}</div>\n </div>\n </ng-container>\n </ng-container>\n\n <vl-metrics></vl-metrics>\n\n <ng-container *vlLet=\"isCartRoute$ | async as isCartRoute\">\n <ng-container *vlLet=\"isReadonlyMode$ | async as isReadonlyMode\">\n <p-button\n class=\"doc-gen-button\"\n icon=\"vl-icon vl-icon-doc-gen\"\n [disabled]=\"isReadonlyMode === true\"\n (onClick)=\"docGenButtonClickHandler(isCartRoute === true)\"\n pTooltip=\"Generate Document\"\n tooltipPosition=\"bottom\"\n tooltipStyleClass=\"vl-info-tooltip\"\n ></p-button>\n\n <ng-container *vlLet=\"isSaveInProgress$ | async as isSaveInProgress\">\n <ng-container *vlLet=\"isSubmitInProgress$ | async as isSubmitInProgress\">\n <p-splitButton\n *ngIf=\"!isSaveInProgress && !isSubmitInProgress\"\n label=\"Save to Quote\"\n (onClick)=\"saveButtonClickHandler(isCartRoute === true)\"\n [model]=\"getSplitButtonActions(isCartRoute === true)\"\n [disabled]=\"isReadonlyMode === true\"\n styleClass=\"p-button-outlined\"\n >\n </p-splitButton>\n\n <p-button\n *ngIf=\"isSaveInProgress\"\n class=\"save-button\"\n styleClass=\"p-button\"\n label=\"Saving\"\n [loading]=\"true\"\n ></p-button>\n\n <p-button\n *ngIf=\"isSubmitInProgress\"\n class=\"submit-button\"\n styleClass=\"p-button\"\n label=\"Submitting\"\n [loading]=\"true\"\n ></p-button>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex;align-items:center;height:48px;width:100%;background-color:var(--vl-primary-color);color:#fff;padding:0 32px;flex-shrink:0}::ng-deep .p-overlaypanel.flow-header-overlay .p-overlaypanel-content{background-color:#fff;padding:16px}::ng-deep .p-overlaypanel.flow-header-overlay.no-padding .p-overlaypanel-content{padding:0}::ng-deep .p-overlaypanel.flow-header-overlay.left:before{left:6px!important}::ng-deep .p-overlaypanel.flow-header-overlay.right:before{right:6px!important}::ng-deep .p-overlaypanel.flow-header-overlay.left .p-overlaypanel-content{margin-left:-16px}::ng-deep .p-overlaypanel.flow-header-overlay.right .p-overlaypanel-content{margin-right:-16px}::ng-deep .p-overlaypanel.flow-header-overlay:before{background-color:#fff}::ng-deep .p-overlaypanel.price-list-overlay .p-overlaypanel-content{border-radius:5px;border-color:var(--vl-border-color);padding:0;display:flex;flex-direction:column;max-height:140px;overflow:auto}:host ::ng-deep p-splitButton{height:32px;width:146px;display:flex}:host ::ng-deep p-splitButton .p-splitbutton{display:flex;font-size:12px;border-radius:2px;height:100%;width:100%;-webkit-backface-visibility:hidden}:host ::ng-deep p-splitButton .p-splitbutton .p-button:focus{box-shadow:none}:host ::ng-deep p-splitButton .p-splitbutton .p-splitbutton-defaultbutton{padding:7px 12px 7px 10px}:host ::ng-deep p-splitButton .p-splitbutton .p-splitbutton-defaultbutton:disabled{opacity:.2}:host ::ng-deep p-splitButton .p-splitbutton .p-splitbutton-menubutton:disabled{opacity:.3}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button{background-color:#fff;color:var(--vl-primary-color);border:1px solid #fff}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button:enabled:hover{background-color:var(--vl-secondary-nav-bg);color:var(--vl-primary-color);border:1px solid var(--vl-secondary-nav-bg);outline:none}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button.p-splitbutton-menubutton{background-color:var(--vl-secondary-nav-bg);border-radius:0 2px 2px 0;border:1px solid var(--vl-secondary-nav-bg);border-left:none}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button.p-splitbutton-menubutton:hover{background-color:var(--vl-secondary-nav-bg);border:1px solid var(--vl-secondary-nav-bg);border-left:none}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button.p-splitbutton-defaultbutton{border-radius:2px 0 0 2px}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button.p-splitbutton-defaultbutton .p-button-label{font-size:12px;line-height:16px;letter-spacing:.3px;white-space:nowrap}:host ::ng-deep p-splitButton .p-splitbutton .p-menu{display:flex;width:auto;margin-top:2px;border-radius:4px;border:1px solid var(--vl-border-color);box-shadow:0 4px 20px #2767c11a}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list{display:flex;flex-direction:column}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem{display:flex;width:100%;height:32px}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem .p-menuitem-link{padding:8px;width:100%;height:100%}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem .p-menuitem-link:not(.p-disabled):hover{background-color:var(--vl-secondary-nav-bg)}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text{color:var(--vl-primary-color)}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem .p-menuitem-link .p-menuitem-text{line-height:16px;font-size:12px;letter-spacing:.3px;white-space:nowrap}:host ::ng-deep .doc-gen-button{height:32px;width:32px;display:inline-flex}:host ::ng-deep .doc-gen-button .p-button{border:1px solid #fff;border-radius:2px;width:100%;height:100%}:host ::ng-deep .doc-gen-button .p-button.p-component:disabled{opacity:.3}:host ::ng-deep .save-button,:host ::ng-deep .submit-button{height:32px;width:146px;display:flex}:host ::ng-deep .save-button .p-button,:host ::ng-deep .submit-button .p-button{border-radius:3px;width:100%;height:100%;background:rgba(255,255,255,.3);opacity:1;border:none}:host ::ng-deep .save-button .p-button .p-button-label,:host ::ng-deep .submit-button .p-button .p-button-label{font-size:12px;line-height:16px;letter-spacing:.3px;white-space:nowrap}.vl-icon{display:inline-block}.flow-info{flex-shrink:0;display:flex;gap:8px;align-items:center}.flow-info .nav-popover-toggle{margin-left:-8px}.flow-info .nav-back{font-weight:700}.flow-info .nav-item:not(.disabled):hover,.flow-info .nav-popover-toggle:not(.disabled):hover{opacity:.6}nav{display:flex;align-items:center;cursor:pointer;height:14px}nav.disabled{opacity:.6;cursor:default}nav .nav-icon{margin-right:10px}nav .icon-with-margin{margin:0 4px}nav a{color:#fff}nav.account-name{margin-left:4px;display:block;max-width:200px;overflow:hidden;text-overflow:ellipsis}nav.nav-popover-toggle{width:24px;display:flex;justify-content:center}nav.nav-popover-toggle i{pointer-events:none;margin:0}nav i{pointer-events:none}.metrics__row{display:flex;justify-content:space-between;gap:2px}.dot-separator:after{content:\"\";display:block;width:4px;height:4px;border-radius:50%;background:#fff}.slash-separator:after{content:\"\";display:block;background:#fff;width:1px;height:16px}.flow-header-overlay__wrapper{width:360px}.flow-header-overlay__wrapper .close-icon{cursor:pointer}.flow-header-overlay__wrapper .info-list{list-style:none;padding:0;font-size:12px}.flow-header-overlay__wrapper .info-list__row{padding:8px 0;display:flex;justify-content:space-between}.flow-header-overlay__wrapper .info-list__row a{text-align:right}.flow-header-overlay__title{display:flex;justify-content:space-between;align-items:center;margin:0 0 24px}.flow-navigation{flex-grow:1;display:flex;gap:16px;justify-content:center;font-weight:600}.flow-navigation .cart-nav-container{display:flex}.flow-navigation .nav-popover-toggle{margin-left:-14px}.flow-navigation .nav-item,.flow-navigation .nav-popover-toggle{opacity:.6}.flow-navigation .nav-item.active,.flow-navigation .nav-item:not(.disabled):hover,.flow-navigation .nav-popover-toggle.active,.flow-navigation .nav-popover-toggle:not(.disabled):hover{opacity:1}.price-list-option{padding:8px;color:var(--vl-primary-color);cursor:pointer}.price-list-option.active,.price-list-option:hover{background:var(--vl-secondary-nav-bg)}.flow-controls{flex-shrink:0;display:flex;align-items:center;gap:16px;font-size:12px;line-height:16px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i9.LetDirective, selector: "[vlLet]", inputs: ["vlLet"] }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i11.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i12.CartPreviewComponent, selector: "vl-cart-preview", inputs: ["products"] }, { kind: "component", type: i13.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClick", "onDropdownClick"] }, { kind: "component", type: i14.MetricsComponent, selector: "vl-metrics" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.TitleCasePipe, name: "titlecase" }, { kind: "pipe", type: i6.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
343
+ FlowHeaderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowHeaderComponent, deps: [{ token: i1.ContextService }, { token: i1.QuoteDraftService }, { token: i2.QuoteApiService }, { token: i2.SalesforceApiService }, { token: i1.FlowConfigurationService }, { token: i3.FlowRouterService }, { token: i4.FlowDialogService }, { token: i5.IntegrationState }], target: i0.ɵɵFactoryTarget.Component });
344
+ FlowHeaderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.2.8", type: FlowHeaderComponent, selector: "vl-flow-header", ngImport: i0, template: "<ng-container *ngIf=\"contextProperties$ | async as contextProperties\">\n <ng-container *ngIf=\"objectDetails$ | async as details\">\n <div class=\"flow-info\">\n <nav class=\"nav-item nav-back\" (click)=\"back()\">\n <i class=\"nav-icon vl-icon vl-icon-back\"></i>\n </nav>\n\n <ng-container *ngIf=\"isAccountMode$ | async\">\n <nav\n class=\"account-name nav-item\"\n [pTooltip]=\"contextProperties.Name ?? ''\"\n tooltipPosition=\"bottom\"\n [showDelay]=\"1000\"\n >\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(contextProperties.Id)\">{{ contextProperties.Name }}</a>\n </nav>\n </ng-container>\n\n <ng-container *ngIf=\"isQuoteMode$ | async\">\n <span class=\"nav-item\">Quote #{{ details.quoteNumber }}</span>\n\n <span class=\"dot-separator\"></span>\n\n <nav class=\"nav-item\" (click)=\"quoteDetails.toggle($event)\">\n <span>{{ status$ | async }}</span>\n\n <i *ngIf=\"!quoteDetails.overlayVisible\" class=\"vl-icon vl-arrow-down icon-with-margin\"></i>\n <i *ngIf=\"quoteDetails.overlayVisible\" class=\"vl-icon vl-arrow-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"catalog-overlay quote-info-overlay\" #quoteDetails>\n <ng-template pTemplate>\n <div class=\"quote-info\">\n <div class=\"title\">\n <span>Quote Information</span>\n <span class=\"close-action\" (click)=\"quoteDetails.hide()\">\n <i class=\"vl-icon vl-cross\"></i>\n </span>\n </div>\n\n <div class=\"details\">\n <div class=\"details-row\">\n <div class=\"label\">Account Name</div>\n <div class=\"value\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.accountId)\">\n {{ details.accountName }}\n </a>\n </div>\n </div>\n <div class=\"details-row\">\n <div class=\"label\">Opportunity Name</div>\n <div class=\"value\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.opportunityName)\">\n {{ details.opportunityName }}\n </a>\n </div>\n </div>\n <div class=\"details-row\">\n <div class=\"label\">Quote Name</div>\n <div class=\"value\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteName)\">\n {{ details.quoteName }}\n </a>\n </div>\n </div>\n <div class=\"details-row\">\n <div class=\"label\">Quote Number</div>\n <div class=\"value\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteNumber)\">\n {{ details.quoteNumber }}\n </a>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </p-overlayPanel>\n </ng-container>\n </div>\n\n <div class=\"flow-navigation\">\n <ng-container *vlLet=\"isReadonlyMode$ | async as isReadonlyMode\">\n <nav\n class=\"nav-item\"\n *vlLet=\"assetsCount$ | async as assetsCount\"\n [ngClass]=\"{ active: (isAssetsRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToAssets()\"\n >\n Assets\n <div *ngIf=\"assetsCount\" class=\"counter\">{{ assetsCount }}</div>\n </nav>\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isCatalogRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToCatalog()\"\n >\n Catalog\n </nav>\n <nav class=\"nav-item disabled\" [ngClass]=\"{ active: isConfigurationRoute$ | async }\">Configurator</nav>\n <ng-container *vlLet=\"products$ | async as products\">\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isCartRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToShoppingCart()\"\n >\n Shopping Cart\n <div *ngIf=\"products?.length\" class=\"counter\">{{ products?.length }}</div>\n\n <nav\n class=\"nav-popover-toggle\"\n [ngClass]=\"{ active: (isCartRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"toggleCartOverlay(cart, $event)\"\n >\n <i *ngIf=\"!cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-arrow-down icon-with-margin\"></i>\n <i *ngIf=\"cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-arrow-up icon-with-margin\"></i>\n </nav>\n </nav>\n\n <vl-cart-preview #cart [products]=\"products ?? []\"></vl-cart-preview>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"flow-controls\">\n <ng-container *ngIf=\"(isReadonlyMode$ | async) === false\">\n <ng-container *vlLet=\"activePriceList$ | async as priceList\">\n <div class=\"price-plan\">\n <ng-container *vlLet=\"assetPriceLists$ | async as assetPriceLists\">\n <ng-container\n *ngIf=\"(isAccountMode$ | async) && assetPriceLists && assetPriceLists.length > 1; else singlePriceList\"\n >\n <nav class=\"nav-item\" (click)=\"priceListsOverlay?.toggle($event)\">\n <span>{{ priceList?.name }}</span>\n <i *ngIf=\"!priceListsOverlay?.overlayVisible\" class=\"vl-icon vl-arrow-down icon-with-margin\"></i>\n <i *ngIf=\"priceListsOverlay?.overlayVisible\" class=\"vl-icon vl-arrow-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"price-list-overlay\" #priceListsOverlay>\n <ng-template pTemplate>\n <span\n *ngFor=\"let option of assetPriceLists\"\n class=\"price-list-option\"\n [class.active]=\"priceList?.id === option.id\"\n (click)=\"selectPriceList(option.id); priceListsOverlay.hide()\"\n >\n {{ option.name }}\n </span>\n </ng-template>\n </p-overlayPanel>\n </ng-container>\n </ng-container>\n\n <ng-template #singlePriceList>\n <div>{{ priceList?.name }}</div>\n </ng-template>\n\n <div *ngIf=\"contextProperties.StartDate\">{{ contextProperties.StartDate | date : dateFormat }}</div>\n </div>\n </ng-container>\n </ng-container>\n\n <vl-metrics></vl-metrics>\n\n <ng-container *vlLet=\"isCartRoute$ | async as isCartRoute\">\n <ng-container *vlLet=\"isReadonlyMode$ | async as isReadonlyMode\">\n <ng-container *vlLet=\"isSaveInProgress$ | async as isSaveInProgress\">\n <ng-container *vlLet=\"isSubmitInProgress$ | async as isSubmitInProgress\">\n <p-splitButton\n *ngIf=\"!isSaveInProgress && !isSubmitInProgress\"\n #splitButton\n label=\"Save to Quote\"\n (onClick)=\"saveButtonClickHandler(isCartRoute === true)\"\n [model]=\"getSplitButtonActions(isCartRoute === true)\"\n [disabled]=\"isReadonlyMode === true\"\n styleClass=\"catalog-split-button p-button-outlined\"\n [class.opened]=\"splitButton?.menu?.visible\"\n icon=\"vl-icon vl-arrow-down\"\n >\n </p-splitButton>\n\n <p-button\n *ngIf=\"isSaveInProgress\"\n class=\"save-button\"\n styleClass=\"p-button\"\n label=\"Saving\"\n [loading]=\"true\"\n ></p-button>\n\n <p-button\n *ngIf=\"isSubmitInProgress\"\n class=\"submit-button\"\n styleClass=\"p-button\"\n label=\"Submitting\"\n [loading]=\"true\"\n ></p-button>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host{font-family:var(--cg-font-family);display:flex;align-items:center;height:48px;width:100%;background-color:var(--cg-primary-color);color:#fff;padding:0 16px;flex-shrink:0}:host *{font-family:var(--cg-font-family)}::ng-deep .p-overlaypanel.quote-info-overlay{margin-left:-16px}.quote-info{width:348px}.quote-info .title{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:16px;font-style:normal;font-weight:500;line-height:20px}.quote-info .title .close-action{padding:4px}.quote-info .title .vl-icon{cursor:pointer}.quote-info .details .details-row{display:flex;align-items:center}.quote-info .details .details-row .label,.quote-info .details .details-row .value{flex:1;padding:8px;color:var(--cg-black)}.quote-info .details .details-row .label{font-size:12px;font-weight:500;line-height:16px;letter-spacing:.2px}.quote-info .details .details-row .value{text-align:right}.quote-info .details .details-row a{color:var(--cg-black);text-decoration:none;font-size:12px;line-height:18px;letter-spacing:.3px;border-bottom:1px solid var(--cg-black)}:host ::ng-deep .catalog-split-button .p-splitbutton-defaultbutton{padding:8px 0 8px 16px;border-top-left-radius:24px;border-bottom-left-radius:24px;color:var(--cg-white);background:var(--cg-primary-color);border-color:var(--cg-white)}:host ::ng-deep .catalog-split-button .p-splitbutton-defaultbutton .p-button-icon{display:none}:host ::ng-deep .catalog-split-button .p-splitbutton-menubutton{width:16px;box-sizing:content-box;padding:8px;border-top-right-radius:24px;border-bottom-right-radius:24px;border-left:none;color:var(--cg-white);background:var(--cg-primary-color);border-color:var(--cg-white)}:host ::ng-deep .catalog-split-button .p-splitbutton-menubutton:hover:enabled{border-left:none}:host ::ng-deep .catalog-split-button:hover .p-splitbutton-defaultbutton,:host ::ng-deep .catalog-split-button:hover .p-splitbutton-menubutton{color:var(--cg-primary-color);background:var(--cg-white);border-color:var(--cg-primary-color)}:host ::ng-deep .catalog-split-button:hover .p-splitbutton-defaultbutton:hover,:host ::ng-deep .catalog-split-button:hover .p-splitbutton-menubutton:hover{color:var(--cg-primary-color);background:var(--cg-white);border-color:var(--cg-primary-color)}:host ::ng-deep .catalog-split-button .p-menu-overlay{overflow:hidden;margin-top:4px;padding:0;border-radius:8px;box-shadow:0 8px 32px #0000001a}:host ::ng-deep .catalog-split-button .p-menu-overlay .p-menuitem:not(:last-child){border-bottom:1px solid var(--cg-border-color)}:host ::ng-deep .catalog-split-button .p-menu-overlay .p-menuitem-link{padding:12px;color:var(--cg-primary-color);white-space:nowrap;font-size:12px;font-weight:300;line-height:16px;letter-spacing:.3px}:host ::ng-deep .catalog-split-button .p-menu-overlay .p-menuitem-link .p-menuitem-text{color:var(--cg-primary-color)}:host ::ng-deep .catalog-split-button .p-menu-overlay .p-menuitem-link:hover{background:var(--cg-bg-color)}:host ::ng-deep p-splitButton.opened .p-button-icon{transform:rotate(180deg)}:host ::ng-deep p-splitButton.opened .p-splitbutton-defaultbutton,:host ::ng-deep p-splitButton.opened .p-splitbutton-menubutton{color:var(--cg-primary-color);background:var(--cg-white);border-color:var(--cg-primary-color)}:host ::ng-deep .save-button,:host ::ng-deep .submit-button{height:32px;width:146px;display:flex}:host ::ng-deep .save-button .p-button,:host ::ng-deep .submit-button .p-button{border-radius:3px;width:100%;height:100%;background:rgba(255,255,255,.3);opacity:1;border:none}:host ::ng-deep .save-button .p-button .p-button-label,:host ::ng-deep .submit-button .p-button .p-button-label{font-size:12px;line-height:16px;letter-spacing:.3px;white-space:nowrap}.vl-icon{display:inline-block}.flow-info{flex-shrink:0;display:flex;gap:8px;align-items:center}.flow-info .nav-item{font-weight:400;font-size:12px;line-height:16px;letter-spacing:.3px}.flow-info .nav-popover-toggle{margin-left:-8px}.flow-info .nav-item:not(.disabled):hover,.flow-info .nav-popover-toggle:not(.disabled):hover{opacity:.6}nav{display:flex;align-items:center;cursor:pointer;height:32px}nav.disabled{opacity:.6;cursor:default}nav .icon-with-margin{margin:0 4px}nav a{color:#fff}nav.account-name{margin-left:4px;display:block;max-width:200px;overflow:hidden;text-overflow:ellipsis}nav.nav-popover-toggle{width:16px;display:flex;justify-content:center}nav.nav-popover-toggle i{pointer-events:none;margin:0}nav i{pointer-events:none}.metrics__row{display:flex;justify-content:space-between;gap:2px}.dot-separator:after{content:\"\";display:block;width:2px;height:2px;border-radius:50%;background:#fff}.slash-separator:after{content:\"\";display:block;background:#fff;width:1px;height:16px}.flow-navigation{flex-grow:1;display:flex;gap:8px;justify-content:center}.flow-navigation .nav-item{padding:8px 16px;border-radius:32px;color:#ffffff80;font-size:12px;line-height:16px;letter-spacing:.3px;white-space:nowrap}.flow-navigation .nav-item:not(.disabled):hover:not(.active){color:var(--cg-white);background:rgba(255,255,255,.1)}.flow-navigation .nav-item:not(.disabled).active{color:var(--cg-white)}.flow-navigation .cart-nav-container{display:flex}.flow-navigation .nav-popover-toggle{margin-left:8px}.price-list-option{padding:8px;color:var(--vl-primary-color);cursor:pointer}.price-list-option.active,.price-list-option:hover{background:var(--vl-secondary-nav-bg)}.flow-controls{flex-shrink:0;display:flex;align-items:center;gap:8px;font-size:12px;line-height:16px}.flow-controls .price-plan{color:#ffffffb3}.counter{margin-left:8px;height:16px;min-width:16px;text-align:center;background:rgba(255,255,255,.2);border-radius:16px;padding:0 4px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.OverlayPanel, selector: "p-overlayPanel", inputs: ["dismissable", "showCloseIcon", "style", "styleClass", "appendTo", "autoZIndex", "ariaCloseLabel", "baseZIndex", "focusOnShow", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onShow", "onHide"] }, { kind: "directive", type: i8.PrimeTemplate, selector: "[pTemplate]", inputs: ["type", "pTemplate"] }, { kind: "directive", type: i9.LetDirective, selector: "[vlLet]", inputs: ["vlLet"] }, { kind: "directive", type: i10.Tooltip, selector: "[pTooltip]", inputs: ["tooltipPosition", "tooltipEvent", "appendTo", "positionStyle", "tooltipStyleClass", "tooltipZIndex", "escape", "showDelay", "hideDelay", "life", "positionTop", "positionLeft", "pTooltip", "tooltipDisabled", "tooltipOptions"] }, { kind: "component", type: i11.Button, selector: "p-button", inputs: ["type", "iconPos", "icon", "badge", "label", "disabled", "loading", "loadingIcon", "style", "styleClass", "badgeClass"], outputs: ["onClick", "onFocus", "onBlur"] }, { kind: "component", type: i12.CartPreviewComponent, selector: "vl-cart-preview", inputs: ["products"] }, { kind: "component", type: i13.SplitButton, selector: "p-splitButton", inputs: ["model", "icon", "iconPos", "label", "style", "styleClass", "menuStyle", "menuStyleClass", "disabled", "tabindex", "appendTo", "dir", "expandAriaLabel", "showTransitionOptions", "hideTransitionOptions"], outputs: ["onClick", "onDropdownClick"] }, { kind: "component", type: i14.MetricsComponent, selector: "vl-metrics" }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i6.DatePipe, name: "date" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
337
345
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowHeaderComponent, decorators: [{
338
346
  type: Component,
339
- args: [{ selector: 'vl-flow-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"contextProperties$ | async as contextProperties\">\n <ng-container *ngIf=\"objectDetails$ | async as details\">\n <div class=\"flow-info\">\n <nav class=\"nav-item nav-back\" (click)=\"back()\">\n <i class=\"nav-icon vl-icon vl-icon-arrow-left\"></i>\n\n <span> Back to {{ objectName$ | async | titlecase }}</span>\n </nav>\n\n <ng-container *ngIf=\"isAccountMode$ | async\">\n <span class=\"dot-separator\"></span>\n\n <nav class=\"account-name\" [pTooltip]=\"contextProperties.Name ?? ''\" tooltipPosition=\"bottom\" [showDelay]=\"1000\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(contextProperties.Id)\">{{ contextProperties.Name }}</a>\n </nav>\n </ng-container>\n\n <ng-container *ngIf=\"isQuoteMode$ | async\">\n <span class=\"dot-separator\"></span>\n\n <span>Quote #{{ details.quoteNumber }}</span>\n\n <span class=\"dot-separator\"></span>\n\n <nav class=\"nav-item\" (click)=\"quoteDetails.toggle($event)\">\n <span>{{ status$ | async }}</span>\n\n <i *ngIf=\"!quoteDetails.overlayVisible\" class=\"vl-icon vl-icon-chevron-down icon-with-margin\"></i>\n <i *ngIf=\"quoteDetails.overlayVisible\" class=\"vl-icon vl-icon-chevron-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"navigation-settings-overlay flow-header-overlay center\" #quoteDetails>\n <ng-template pTemplate>\n <div class=\"flow-header-overlay__wrapper\">\n <h2 class=\"flow-header-overlay__title\">\n <span>Quote Information</span>\n <i class=\"vl-icon vl-icon-close close-icon\" (click)=\"quoteDetails.hide()\"></i>\n </h2>\n\n <ul class=\"info-list\">\n <li class=\"info-list__row\">\n <span>Account Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.accountId)\">\n <span>{{ details.accountName }}</span>\n </a>\n </li>\n <li class=\"info-list__row\">\n <span>Opportunity Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.opportunityId)\">\n <span>{{ details.opportunityName }}</span>\n </a>\n </li>\n <li class=\"info-list__row\">\n <span>Quote Name:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteId)\">\n <span>{{ details.quoteName }}</span>\n </a>\n </li>\n <li class=\"info-list__row\">\n <span>Quote Number:</span>\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteId)\">\n <span>{{ details.quoteNumber }}</span>\n </a>\n </li>\n </ul>\n </div>\n </ng-template>\n </p-overlayPanel>\n </ng-container>\n </div>\n\n <div class=\"flow-navigation\">\n <ng-container *vlLet=\"isReadonlyMode$ | async as isReadonlyMode\">\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isAssetsRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToAssets()\"\n >\n Assets ({{ assetsCount$ | async }})\n </nav>\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isCatalogRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToCatalog()\"\n >\n Catalog\n </nav>\n <nav class=\"nav-item disabled\" [ngClass]=\"{ active: isConfigurationRoute$ | async }\">Configurator</nav>\n <ng-container *vlLet=\"products$ | async as products\">\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isCartRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToShoppingCart()\"\n >\n Shopping Cart ({{ products?.length ?? 0 }})\n </nav>\n\n <nav\n class=\"nav-popover-toggle\"\n [ngClass]=\"{ active: (isCartRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"toggleCartOverlay(cart, $event)\"\n >\n <i *ngIf=\"!cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-icon-chevron-down icon-with-margin\"></i>\n <i *ngIf=\"cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-icon-chevron-up icon-with-margin\"></i>\n </nav>\n\n <vl-cart-preview #cart [products]=\"products ?? []\"></vl-cart-preview>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"flow-controls\">\n <ng-container *ngIf=\"(isReadonlyMode$ | async) === false\">\n <ng-container *vlLet=\"activePriceList$ | async as priceList\">\n <div>\n <ng-container *vlLet=\"assetPriceLists$ | async as assetPriceLists\">\n <ng-container\n *ngIf=\"(isAccountMode$ | async) && assetPriceLists && assetPriceLists.length > 1; else singlePriceList\"\n >\n <nav class=\"nav-item\" (click)=\"priceListsOverlay?.toggle($event)\">\n <span>{{ priceList?.name }}</span>\n <i\n *ngIf=\"!priceListsOverlay?.overlayVisible\"\n class=\"vl-icon vl-icon-chevron-down icon-with-margin\"\n ></i>\n <i *ngIf=\"priceListsOverlay?.overlayVisible\" class=\"vl-icon vl-icon-chevron-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"price-list-overlay\" #priceListsOverlay>\n <ng-template pTemplate>\n <span\n *ngFor=\"let option of assetPriceLists\"\n class=\"price-list-option\"\n [class.active]=\"priceList?.id === option.id\"\n (click)=\"selectPriceList(option.id); priceListsOverlay.hide()\"\n >\n {{ option.name }}\n </span>\n </ng-template>\n </p-overlayPanel>\n </ng-container>\n </ng-container>\n\n <ng-template #singlePriceList>\n <div>{{ priceList?.name }}</div>\n </ng-template>\n\n <div *ngIf=\"contextProperties.StartDate\">{{ contextProperties.StartDate | date : dateFormat }}</div>\n </div>\n </ng-container>\n </ng-container>\n\n <vl-metrics></vl-metrics>\n\n <ng-container *vlLet=\"isCartRoute$ | async as isCartRoute\">\n <ng-container *vlLet=\"isReadonlyMode$ | async as isReadonlyMode\">\n <p-button\n class=\"doc-gen-button\"\n icon=\"vl-icon vl-icon-doc-gen\"\n [disabled]=\"isReadonlyMode === true\"\n (onClick)=\"docGenButtonClickHandler(isCartRoute === true)\"\n pTooltip=\"Generate Document\"\n tooltipPosition=\"bottom\"\n tooltipStyleClass=\"vl-info-tooltip\"\n ></p-button>\n\n <ng-container *vlLet=\"isSaveInProgress$ | async as isSaveInProgress\">\n <ng-container *vlLet=\"isSubmitInProgress$ | async as isSubmitInProgress\">\n <p-splitButton\n *ngIf=\"!isSaveInProgress && !isSubmitInProgress\"\n label=\"Save to Quote\"\n (onClick)=\"saveButtonClickHandler(isCartRoute === true)\"\n [model]=\"getSplitButtonActions(isCartRoute === true)\"\n [disabled]=\"isReadonlyMode === true\"\n styleClass=\"p-button-outlined\"\n >\n </p-splitButton>\n\n <p-button\n *ngIf=\"isSaveInProgress\"\n class=\"save-button\"\n styleClass=\"p-button\"\n label=\"Saving\"\n [loading]=\"true\"\n ></p-button>\n\n <p-button\n *ngIf=\"isSubmitInProgress\"\n class=\"submit-button\"\n styleClass=\"p-button\"\n label=\"Submitting\"\n [loading]=\"true\"\n ></p-button>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host{display:flex;align-items:center;height:48px;width:100%;background-color:var(--vl-primary-color);color:#fff;padding:0 32px;flex-shrink:0}::ng-deep .p-overlaypanel.flow-header-overlay .p-overlaypanel-content{background-color:#fff;padding:16px}::ng-deep .p-overlaypanel.flow-header-overlay.no-padding .p-overlaypanel-content{padding:0}::ng-deep .p-overlaypanel.flow-header-overlay.left:before{left:6px!important}::ng-deep .p-overlaypanel.flow-header-overlay.right:before{right:6px!important}::ng-deep .p-overlaypanel.flow-header-overlay.left .p-overlaypanel-content{margin-left:-16px}::ng-deep .p-overlaypanel.flow-header-overlay.right .p-overlaypanel-content{margin-right:-16px}::ng-deep .p-overlaypanel.flow-header-overlay:before{background-color:#fff}::ng-deep .p-overlaypanel.price-list-overlay .p-overlaypanel-content{border-radius:5px;border-color:var(--vl-border-color);padding:0;display:flex;flex-direction:column;max-height:140px;overflow:auto}:host ::ng-deep p-splitButton{height:32px;width:146px;display:flex}:host ::ng-deep p-splitButton .p-splitbutton{display:flex;font-size:12px;border-radius:2px;height:100%;width:100%;-webkit-backface-visibility:hidden}:host ::ng-deep p-splitButton .p-splitbutton .p-button:focus{box-shadow:none}:host ::ng-deep p-splitButton .p-splitbutton .p-splitbutton-defaultbutton{padding:7px 12px 7px 10px}:host ::ng-deep p-splitButton .p-splitbutton .p-splitbutton-defaultbutton:disabled{opacity:.2}:host ::ng-deep p-splitButton .p-splitbutton .p-splitbutton-menubutton:disabled{opacity:.3}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button{background-color:#fff;color:var(--vl-primary-color);border:1px solid #fff}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button:enabled:hover{background-color:var(--vl-secondary-nav-bg);color:var(--vl-primary-color);border:1px solid var(--vl-secondary-nav-bg);outline:none}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button.p-splitbutton-menubutton{background-color:var(--vl-secondary-nav-bg);border-radius:0 2px 2px 0;border:1px solid var(--vl-secondary-nav-bg);border-left:none}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button.p-splitbutton-menubutton:hover{background-color:var(--vl-secondary-nav-bg);border:1px solid var(--vl-secondary-nav-bg);border-left:none}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button.p-splitbutton-defaultbutton{border-radius:2px 0 0 2px}:host ::ng-deep p-splitButton .p-splitbutton.p-button-outlined .p-button.p-splitbutton-defaultbutton .p-button-label{font-size:12px;line-height:16px;letter-spacing:.3px;white-space:nowrap}:host ::ng-deep p-splitButton .p-splitbutton .p-menu{display:flex;width:auto;margin-top:2px;border-radius:4px;border:1px solid var(--vl-border-color);box-shadow:0 4px 20px #2767c11a}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list{display:flex;flex-direction:column}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem{display:flex;width:100%;height:32px}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem .p-menuitem-link{padding:8px;width:100%;height:100%}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem .p-menuitem-link:not(.p-disabled):hover{background-color:var(--vl-secondary-nav-bg)}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem .p-menuitem-link:not(.p-disabled):hover .p-menuitem-text{color:var(--vl-primary-color)}:host ::ng-deep p-splitButton .p-splitbutton .p-menu .p-menu-list .p-menuitem .p-menuitem-link .p-menuitem-text{line-height:16px;font-size:12px;letter-spacing:.3px;white-space:nowrap}:host ::ng-deep .doc-gen-button{height:32px;width:32px;display:inline-flex}:host ::ng-deep .doc-gen-button .p-button{border:1px solid #fff;border-radius:2px;width:100%;height:100%}:host ::ng-deep .doc-gen-button .p-button.p-component:disabled{opacity:.3}:host ::ng-deep .save-button,:host ::ng-deep .submit-button{height:32px;width:146px;display:flex}:host ::ng-deep .save-button .p-button,:host ::ng-deep .submit-button .p-button{border-radius:3px;width:100%;height:100%;background:rgba(255,255,255,.3);opacity:1;border:none}:host ::ng-deep .save-button .p-button .p-button-label,:host ::ng-deep .submit-button .p-button .p-button-label{font-size:12px;line-height:16px;letter-spacing:.3px;white-space:nowrap}.vl-icon{display:inline-block}.flow-info{flex-shrink:0;display:flex;gap:8px;align-items:center}.flow-info .nav-popover-toggle{margin-left:-8px}.flow-info .nav-back{font-weight:700}.flow-info .nav-item:not(.disabled):hover,.flow-info .nav-popover-toggle:not(.disabled):hover{opacity:.6}nav{display:flex;align-items:center;cursor:pointer;height:14px}nav.disabled{opacity:.6;cursor:default}nav .nav-icon{margin-right:10px}nav .icon-with-margin{margin:0 4px}nav a{color:#fff}nav.account-name{margin-left:4px;display:block;max-width:200px;overflow:hidden;text-overflow:ellipsis}nav.nav-popover-toggle{width:24px;display:flex;justify-content:center}nav.nav-popover-toggle i{pointer-events:none;margin:0}nav i{pointer-events:none}.metrics__row{display:flex;justify-content:space-between;gap:2px}.dot-separator:after{content:\"\";display:block;width:4px;height:4px;border-radius:50%;background:#fff}.slash-separator:after{content:\"\";display:block;background:#fff;width:1px;height:16px}.flow-header-overlay__wrapper{width:360px}.flow-header-overlay__wrapper .close-icon{cursor:pointer}.flow-header-overlay__wrapper .info-list{list-style:none;padding:0;font-size:12px}.flow-header-overlay__wrapper .info-list__row{padding:8px 0;display:flex;justify-content:space-between}.flow-header-overlay__wrapper .info-list__row a{text-align:right}.flow-header-overlay__title{display:flex;justify-content:space-between;align-items:center;margin:0 0 24px}.flow-navigation{flex-grow:1;display:flex;gap:16px;justify-content:center;font-weight:600}.flow-navigation .cart-nav-container{display:flex}.flow-navigation .nav-popover-toggle{margin-left:-14px}.flow-navigation .nav-item,.flow-navigation .nav-popover-toggle{opacity:.6}.flow-navigation .nav-item.active,.flow-navigation .nav-item:not(.disabled):hover,.flow-navigation .nav-popover-toggle.active,.flow-navigation .nav-popover-toggle:not(.disabled):hover{opacity:1}.price-list-option{padding:8px;color:var(--vl-primary-color);cursor:pointer}.price-list-option.active,.price-list-option:hover{background:var(--vl-secondary-nav-bg)}.flow-controls{flex-shrink:0;display:flex;align-items:center;gap:16px;font-size:12px;line-height:16px}\n"] }]
340
- }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i2.QuoteApiService }, { type: i2.SalesforceApiService }, { type: i1.FlowConfigurationService }, { type: i3.FlowRouterService }, { type: i4.FlowDialogService }, { type: i5.IntegrationState }, { type: i2.ShoppingCartSettingsApiService }]; } });
341
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvc3JjL2NvbXBvbmVudHMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLDhCQUE4QixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEcsT0FBTyxFQUNMLHdCQUF3QixFQUV4Qix1QkFBdUIsR0FLeEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RSxPQUFPLEVBQ0wsY0FBYyxFQUNkLHdCQUF3QixFQUN4QixlQUFlLEVBQ2Ysa0JBQWtCLEVBQ2xCLGlCQUFpQixHQUNsQixNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxHQUFHLEVBQ0gsSUFBSSxFQUVKLEVBQUUsRUFDRixPQUFPLEVBQ1AsU0FBUyxFQUNULElBQUksRUFDSixTQUFTLEVBQ1QsR0FBRyxHQUNKLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7QUFZdkUsTUFBTSxPQUFPLG1CQUFtQjtJQXVCOUIsWUFDVSxjQUE4QixFQUM5QixpQkFB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QUF3QixDQUFDLE9BQU87WUFDL0YsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUNwQyxDQUFDO0lBQ0osQ0FBQztJQUVPLDJCQUEyQjtRQUNqQyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsS0FBSyxPQUFPLENBQUMsQ0FBQztRQUMvRyxNQUFNLG9CQUFvQixHQUN4QixJQUFJLENBQUMsaUJBQWlCLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxNQUFNLEtBQUssSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQztRQUU5RyxPQUFPLFNBQVMsSUFBSSxvQkFBb0IsQ0FBQztJQUMzQyxDQUFDOztnSEF2YVUsbUJBQW1CO29HQUFuQixtQkFBbUIsc0RDbERoQyxxMVFBd01BOzJGRHRKYSxtQkFBbUI7a0JBTi9CLFNBQVM7K0JBQ0UsZ0JBQWdCLG1CQUdULHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUXVvdGVBcGlTZXJ2aWNlLCBTYWxlc2ZvcmNlQXBpU2VydmljZSwgU2hvcHBpbmdDYXJ0U2V0dGluZ3NBcGlTZXJ2aWNlIH0gZnJvbSAnQHZlbG9jZWFwcHMvYXBpJztcbmltcG9ydCB7XG4gIENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZSxcbiAgQ29udGV4dFByb3BlcnRpZXMsXG4gIGdldFN1cHBvcnRlZERhdGVGb3JtYXRzLFxuICBMaW5lSXRlbSxcbiAgUHJpY2VMaXN0LFxuICBTZWFyY2hSZXF1ZXN0LFxuICBWbFdpbmRvdyxcbn0gZnJvbSAnQHZlbG9jZWFwcHMvY29yZSc7XG5pbXBvcnQgeyBJbnRlZ3JhdGlvblN0YXRlLCBPcGVuRG9jR2VuQWN0aW9uIH0gZnJvbSAnQHZlbG9jZWFwcHMvc2RrL2Ntcyc7XG5pbXBvcnQge1xuICBDb250ZXh0U2VydmljZSxcbiAgRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICBnZXRPcmlnaW5QYXJlbnQsXG4gIGlzTGluZUl0ZW1Nb2RpZmllZCxcbiAgUXVvdGVEcmFmdFNlcnZpY2UsXG59IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jb3JlJztcbmltcG9ydCB7IE1lbnVJdGVtIH0gZnJvbSAncHJpbWVuZy9hcGknO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgZmlsdGVyLFxuICBmaW5hbGl6ZSxcbiAgZmlyc3QsXG4gIG1hcCxcbiAgbm9vcCxcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZSxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG59IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgRmxvd0RpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mbG93LWRpYWxvZy5zZXJ2aWNlJztcbmltcG9ydCB7IEZsb3dSb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1yb3V0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBDYXJ0UHJldmlld0NvbXBvbmVudCB9IGZyb20gJy4vY2FydC1vdmVybGF5L2NhcnQtcHJldmlldy5jb21wb25lbnQnO1xuaW1wb3J0IHsgSGVhZGVyT2JqZWN0RGV0YWlscywgSGVhZGVyUHJvZHVjdCB9IGZyb20gJy4vaGVhZGVyLnR5cGVzJztcblxuZGVjbGFyZSBjb25zdCB3aW5kb3c6IFZsV2luZG93O1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd2bC1mbG93LWhlYWRlcicsXG4gIHRlbXBsYXRlVXJsOiAnLi9oZWFkZXIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9oZWFkZXIuY29tcG9uZW50LnNjc3MnXSxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIEZsb3dIZWFkZXJDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG4gIHB1YmxpYyBvYmplY3ROYW1lJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBwdWJsaWMgY29udGV4dFByb3BlcnRpZXMkOiBPYnNlcnZhYmxlPENvbnRleHRQcm9wZXJ0aWVzPjtcbiAgcHVibGljIGFjdGl2ZVByaWNlTGlzdCQ6IE9ic2VydmFibGU8UHJpY2VMaXN0IHwgbnVsbD47XG4gIHB1YmxpYyBpc1JlYWRvbmx5TW9kZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBzdGF0dXMkOiBPYnNlcnZhYmxlPHN0cmluZz47XG4gIHB1YmxpYyBvYmplY3REZXRhaWxzJDogT2JzZXJ2YWJsZTxIZWFkZXJPYmplY3REZXRhaWxzPjtcbiAgcHVibGljIGFzc2V0c0NvdW50JDogT2JzZXJ2YWJsZTxudW1iZXI+O1xuICBwdWJsaWMgcHJvZHVjdHMkOiBPYnNlcnZhYmxlPEhlYWRlclByb2R1Y3RbXT47XG4gIHB1YmxpYyBpc0NvbmZpZ3VyYXRpb25Sb3V0ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBpc0NhcnRSb3V0ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBpc0NhdGFsb2dSb3V0ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBpc0Fzc2V0c1JvdXRlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzRWRpdE1vZGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgaXNTYXZlSW5Qcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIGlzU3VibWl0SW5Qcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcbiAgcHVibGljIGRhdGVGb3JtYXQgPSAnTU0uZGQueXl5eSc7XG5cbiAgcHVibGljIGFzc2V0UHJpY2VMaXN0cyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFByaWNlTGlzdFtdPihbXSk7XG5cbiAgcHJpdmF0ZSBtb2RlJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8Q29uZmlndXJhdGlvbkNvbnRleHRNb2RlPihDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuVEVTVCk7XG4gIHByaXZhdGUgZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb250ZXh0U2VydmljZTogQ29udGV4dFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZURyYWZ0U2VydmljZTogUXVvdGVEcmFmdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBxdW90ZUFwaVNlcnZpY2U6IFF1b3RlQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHNmQXBpU2VydmljZTogU2FsZXNmb3JjZUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBmbG93Q29uZmlndXJhdGlvbjogRmxvd0NvbmZpZ3VyYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgcm91dGVyU2VydmljZTogRmxvd1JvdXRlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSBkaWFsb2dTZXJ2aWNlOiBGbG93RGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGludGVncmF0aW9uU3RhdGU6IEludGVncmF0aW9uU3RhdGUsXG4gICAgcHJpdmF0ZSBzaG9wcGluZ0NhcnRTZXR0aW5nc0FwaVNlcnZpY2U6IFNob3BwaW5nQ2FydFNldHRpbmdzQXBpU2VydmljZSxcbiAgKSB7XG4gICAgdGhpcy5jb250ZXh0UHJvcGVydGllcyQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUkKCkucGlwZShtYXAoY3R4ID0+IGN0eC5wcm9wZXJ0aWVzKSk7XG4gICAgdGhpcy5vYmplY3ROYW1lJCA9IHRoaXMubW9kZSQucGlwZShtYXAobW9kZSA9PiBtb2RlPy50b0xvY2FsZUxvd2VyQ2FzZSgpID8/ICcnKSk7XG5cbiAgICB0aGlzLmFjdGl2ZVByaWNlTGlzdCQgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmFjdGl2ZVByaWNlTGlzdCQ7XG4gICAgdGhpcy5pc1JlYWRvbmx5TW9kZSQgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmhhc1Byb2R1Y3RzJC5waXBlKG1hcCgoKSA9PiB0aGlzLmlzUmVhZG9ubHlNb2RlKCkpKTtcbiAgICB0aGlzLnN0YXR1cyQgPSB0aGlzLmNvbnRleHRTZXJ2aWNlLnJlc29sdmUkKCkucGlwZShtYXAoY29udGV4dCA9PiBjb250ZXh0LnByb3BlcnRpZXMuU3RhdHVzID8/ICcnKSk7XG4gICAgdGhpcy5pc0VkaXRNb2RlJCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaXNFZGl0TW9kZSQoKTtcblxuICAgIHRoaXMuYXNzZXRzQ291bnQkID0gdGhpcy5nZXRBc3NldHMkKCkucGlwZShtYXAobGluZUl0ZW1zID0+IGxpbmVJdGVtcy5sZW5ndGgpKTtcbiAgICB0aGlzLnByb2R1Y3RzJCA9IHRoaXMuZ2V0RHJhZnRJdGVtcyQoKS5waXBlKG1hcChsaW5lSXRlbXMgPT4gdGhpcy5nZW5lcmF0ZVByb2R1Y3RzKGxpbmVJdGVtcykpKTtcblxuICAgIHRoaXMuaXNDb25maWd1cmF0aW9uUm91dGUkID0gdGhpcy5yb3V0ZXJTZXJ2aWNlLmlzQ29uZmlndXJhdGlvblJvdXRlJCgpO1xuICAgIHRoaXMuaXNDYXJ0Um91dGUkID0gdGhpcy5yb3V0ZXJTZXJ2aWNlLmlzQ2FydFJvdXRlJCgpO1xuICAgIHRoaXMuaXNDYXRhbG9nUm91dGUkID0gdGhpcy5yb3V0ZXJTZXJ2aWNlLmlzQ2F0YWxvZ1JvdXRlJCgpO1xuICAgIHRoaXMuaXNBc3NldHNSb3V0ZSQgPSB0aGlzLnJvdXRlclNlcnZpY2UuaXNBc3NldHNSb3V0ZSQoKTtcbiAgICB0aGlzLm9iamVjdERldGFpbHMkID0gdGhpcy5nZXRPYmplY3REZXRhaWxzJCgpO1xuXG4gICAgdGhpcy5zaG9wcGluZ0NhcnRTZXR0aW5nc0FwaVNlcnZpY2VcbiAgICAgIC5nZXRTZXR0aW5nc01hcCgpXG4gICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZShzZXR0aW5ncyA9PiB7XG4gICAgICAgIHRoaXMuZGF0ZUZvcm1hdCA9IGdldFN1cHBvcnRlZERhdGVGb3JtYXRzKHNldHRpbmdzLkRBVEVfRk9STUFUID8/IHRoaXMuZGF0ZUZvcm1hdCkuZGF0ZVBpcGVGb3JtYXQ7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmNvbnRleHRTZXJ2aWNlXG4gICAgICAucmVzb2x2ZSQoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCkpXG4gICAgICAuc3Vic2NyaWJlKGN0eCA9PiB0aGlzLm1vZGUkLm5leHQoY3R4Lm1vZGUpKTtcblxuICAgIC8vIHVwZGF0ZSBhc3NldFByaWNlTGlzdHMgb24gcXVvdGVEcmFmdCBjaGFuZ2UgaW4gQUNDT1VOVCBtb2RlXG4gICAgdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0JFxuICAgICAgLnBpcGUoXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpLFxuICAgICAgICBmaWx0ZXIoKCkgPT4gdGhpcy5pc0FjY291bnRNb2RlKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy5hc3NldFByaWNlTGlzdHMkLm5leHQodGhpcy5xdW90ZURyYWZ0U2VydmljZS5hc3NldFByaWNlTGlzdHMpKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuZGVzdHJveWVkJC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc0FjY291bnRNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUkLnZhbHVlID09PSBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuQUNDT1VOVDtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNRdW90ZU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSQudmFsdWUgPT09IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZS5RVU9URTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNBY2NvdW50TW9kZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSQucGlwZShtYXAobW9kZSA9PiBtb2RlID09PSBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuQUNDT1VOVCkpO1xuICB9XG5cbiAgcHVibGljIGdldCBpc1F1b3RlTW9kZSQoKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMubW9kZSQucGlwZShtYXAobW9kZSA9PiBtb2RlID09PSBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuUVVPVEUpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRTcGxpdEJ1dHRvbkFjdGlvbnMoaXNDYXJ0Um91dGU6IGJvb2xlYW4pOiBNZW51SXRlbVtdIHtcbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBsYWJlbDogJ1NhdmUgdG8gUXVvdGUnLFxuICAgICAgICBjb21tYW5kOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5zYXZlQnV0dG9uQ2xpY2tIYW5kbGVyKGlzQ2FydFJvdXRlKTtcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGxhYmVsOiAnU3VibWl0IEZvciBBcHByb3ZhbCcsXG4gICAgICAgIGNvbW1hbmQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdEJ1dHRvbkNsaWNrSGFuZGxlcihpc0NhcnRSb3V0ZSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgYmFjayhvYmplY3RJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldElkID0gb2JqZWN0SWQgPz8gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCkucHJvcGVydGllcy5JZDtcblxuICAgIGlmICh0YXJnZXRJZCkge1xuICAgICAgd2luZG93LlZFTE9fQkFDS19GTi5hcHBseShudWxsLCBbdGFyZ2V0SWRdKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U2FsZXNmb3JjZU9iamVjdExpbmsob2JqZWN0SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghb2JqZWN0SWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vJHtvYmplY3RJZH1gO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9TaG9wcGluZ0NhcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVhZG9ubHlNb2RlKCkpIHtcbiAgICAgIHRoaXMucm91dGVyU2VydmljZS5uYXZpZ2F0ZVRvU2hvcHBpbmdDYXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9DYXRhbG9nKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1JlYWRvbmx5TW9kZSgpKSB7XG4gICAgICB0aGlzLnJvdXRlclNlcnZpY2UubmF2aWdhdGVUb0NhdGFsb2coKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGVUb0Fzc2V0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZWFkb25seU1vZGUoKSkge1xuICAgICAgdGhpcy5yb3V0ZXJTZXJ2aWNlLm5hdmlnYXRlVG9Bc3NldHMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG9jR2VuQnV0dG9uQ2xpY2tIYW5kbGVyKGlzQ2FydFJvdXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBY2NvdW50TW9kZSkge1xuICAgICAgaWYgKCF0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmhhc1Vuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93QWNjb3VudE5vQ2hhbmdlc0RpYWxvZygpLnN1YnNjcmliZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dEb2NnZW5BY2NvdW50VW5zYXZlZENoYW5nZXNEaWFsb2coKS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaXNFZGl0TW9kZSgpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0RvY2dlblJlYWRvbmx5RGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpc0NhcnRSb3V0ZSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dEb2NnZW5PdXRzaWRlU2hvcHBpbmdDYXJ0RGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHNob3VsZE9wZW4kID0gb2YodHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgc2hvdWxkT3BlbiQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0RvY2dlblVuc2F2ZWRDaGFuZ2VzRGlhbG9nKCkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGNvbmZpcm1lZCA9PiB7XG4gICAgICAgICAgaWYgKCFjb25maXJtZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLnNhdmVRdW90ZSQodHJ1ZSkucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2hvdWxkT3BlbiRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICB0YXAoc2hvdWxkT3BlbiA9PiBzaG91bGRPcGVuICYmIHRoaXMuaW50ZWdyYXRpb25TdGF0ZS5kaXNwYXRjaChPcGVuRG9jR2VuQWN0aW9uKCkpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlQnV0dG9uQ2xpY2tIYW5kbGVyKGlzQ2FydFJvdXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmlzRWRpdE1vZGUoKSkge1xuICAgICAgaWYgKHRoaXMuaXNRdW90ZU1vZGUpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dRdW90ZVJlYWRvbmx5TW9kZURpYWxvZygpLnN1YnNjcmliZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dSZWFkb25seU1vZGVEaWFsb2coKS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Vwc2VsbFF1b3RlV2l0aG91dENoYW5nZXMoKSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dBY2NvdW50Tm9DaGFuZ2VzRGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNBY2NvdW50TW9kZSAmJiAhdGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dBY2NvdW50Tm9DaGFuZ2VzRGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpc0NhcnRSb3V0ZSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dRdW90ZU91dHNpZGVTaG9wcGluZ0NhcnREaWFsb2coKS5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lSXRlbXMgPSB0aGlzLmZsb3dDb25maWd1cmF0aW9uLmdldFNuYXBzaG90KCk7XG5cbiAgICBpZiAoIWxpbmVJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RW1wdHlDYXJ0RGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zYXZlUXVvdGUkKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0QnV0dG9uQ2xpY2tIYW5kbGVyKGlzQ2FydFJvdXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNRdW90ZU1vZGUgJiYgIXRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaXNFZGl0TW9kZSgpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1JlYWRvbmx5UXVvdGVTdWJtaXRGYWlsdXJlRGlhbG9nKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVcHNlbGxRdW90ZVdpdGhvdXRDaGFuZ2VzKCkpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93QWNjb3VudE5vQ2hhbmdlc0RpYWxvZygpLnN1YnNjcmliZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQWNjb3VudE1vZGUpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93QWNjb3VudFN1Ym1pdEZhaWx1cmVEaWFsb2coKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWlzQ2FydFJvdXRlKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd091dHNpZGVTaG9wcGluZ0NhcnRRdW90ZVN1Ym1pdEZhaWx1cmVEaWFsb2coKS5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBxdW90ZURyYWZ0ID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0O1xuICAgIGlmICghcXVvdGVEcmFmdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNTdWJtaXRJblByb2dyZXNzJC5uZXh0KHRydWUpO1xuXG4gICAgdGhpcy5xdW90ZUFwaVNlcnZpY2VcbiAgICAgIC5zdWJtaXRRdW90ZShxdW90ZURyYWZ0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoeyBxdW90ZUlkIH0pID0+IHtcbiAgICAgICAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5iYWNrKHF1b3RlSWQpO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1N1Ym1pdEluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0UHJpY2VMaXN0KHByaWNlTGlzdElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnVwZGF0ZUFjdGl2ZVByaWNlTGlzdChwcmljZUxpc3RJZCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ2FydE92ZXJsYXkoY2FydDogQ2FydFByZXZpZXdDb21wb25lbnQsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1JlYWRvbmx5TW9kZSgpKSB7XG4gICAgICBjYXJ0Py5vdmVybGF5UGFuZWwudG9nZ2xlKGV2ZW50KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNhdmVRdW90ZSQoc3RheU9uUGFnZSA9IGZhbHNlKTogT2JzZXJ2YWJsZTx2b2lkPiB7XG4gICAgY29uc3QgcXVvdGVEcmFmdCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdEZvckFjdGl2ZVByaWNlTGlzdDtcbiAgICBpZiAoIXF1b3RlRHJhZnQpIHtcbiAgICAgIHJldHVybiBvZih1bmRlZmluZWQpO1xuICAgIH1cblxuICAgIHRoaXMuaXNTYXZlSW5Qcm9ncmVzcyQubmV4dCh0cnVlKTtcblxuICAgIHJldHVybiB0aGlzLnF1b3RlQXBpU2VydmljZS51cHNlcnRRdW90ZShxdW90ZURyYWZ0KS5waXBlKFxuICAgICAgdGFwKCh7IHF1b3RlSWQgfSkgPT4ge1xuICAgICAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG5cbiAgICAgICAgaWYgKCFzdGF5T25QYWdlKSB7XG4gICAgICAgICAgdGhpcy5iYWNrKHF1b3RlSWQpO1xuICAgICAgICB9XG4gICAgICB9KSxcbiAgICAgIGZpbmFsaXplKCgpID0+IHRoaXMuaXNTYXZlSW5Qcm9ncmVzcyQubmV4dChmYWxzZSkpLFxuICAgICAgbWFwKG5vb3ApLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgcXVlcnlOYW1lJChvYmplY3ROYW1lOiBzdHJpbmcsIGlkPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBpZiAoIWlkKSB7XG4gICAgICByZXR1cm4gb2YoJycpO1xuICAgIH1cblxuICAgIGNvbnN0IHNlYXJjaFJlcXVlc3Q6IFNlYXJjaFJlcXVlc3QgPSB7XG4gICAgICBjb3VudDogMSxcbiAgICAgIHJhd0NvbmRpdGlvbjogYElkID0gJyR7aWR9J2AsXG4gICAgICBmaWVsZHM6IFsnTmFtZSddLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5zZkFwaVNlcnZpY2UucXVlcnk8YW55PihzZWFyY2hSZXF1ZXN0LCBvYmplY3ROYW1lKS5waXBlKFxuICAgICAgbWFwKHJlc3VsdCA9PiByZXN1bHRbMF0/Lk5hbWUgPz8gJycpLFxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0T2JqZWN0RGV0YWlscyQoKTogT2JzZXJ2YWJsZTxIZWFkZXJPYmplY3REZXRhaWxzPiB7XG4gICAgcmV0dXJuIHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSQoKS5waXBlKFxuICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKHByZXZDdHgsIGN1cnJDdHgpID0+IHByZXZDdHgucHJvcGVydGllcy5JZCA9PT0gY3VyckN0eC5wcm9wZXJ0aWVzLklkKSxcbiAgICAgIG1hcChjdHggPT4ge1xuICAgICAgICBjb25zdCBpc0FjY291bnRNb2RlID0gY3R4Lm1vZGUgPT09IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZS5BQ0NPVU5UO1xuICAgICAgICBjb25zdCBpc1F1b3RlTW9kZSA9IGN0eC5tb2RlID09PSBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuUVVPVEU7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY2NvdW50SWQ6IGlzQWNjb3VudE1vZGUgPyBjdHgucHJvcGVydGllcy5JZCA6IGN0eC5wcm9wZXJ0aWVzLkFjY291bnRJZCxcbiAgICAgICAgICBvcHBvcnR1bml0eUlkOiBjdHgucHJvcGVydGllcy5PcHBvcnR1bml0eUlkLFxuICAgICAgICAgIHF1b3RlSWQ6IGlzUXVvdGVNb2RlID8gY3R4LnByb3BlcnRpZXMuSWQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgcXVvdGVOYW1lOiBpc1F1b3RlTW9kZSA/IGN0eC5wcm9wZXJ0aWVzLk5hbWUgOiB1bmRlZmluZWQsXG4gICAgICAgICAgcXVvdGVOdW1iZXI6IGlzUXVvdGVNb2RlID8gY3R4LnByb3BlcnRpZXMuUXVvdGVOdW1iZXIgOiB1bmRlZmluZWQsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICAgIHN3aXRjaE1hcChkZXRhaWxzID0+XG4gICAgICAgIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgICAgIG9mKGRldGFpbHMpLFxuICAgICAgICAgIHRoaXMucXVlcnlOYW1lJCgnQWNjb3VudCcsIGRldGFpbHMuYWNjb3VudElkKSxcbiAgICAgICAgICB0aGlzLnF1ZXJ5TmFtZSQoJ09wcG9ydHVuaXR5JywgZGV0YWlscy5vcHBvcnR1bml0eUlkKSxcbiAgICAgICAgXSksXG4gICAgICApLFxuICAgICAgbWFwKChbZGV0YWlscywgYWNjb3VudE5hbWUsIG9wcG9ydHVuaXR5TmFtZV0pID0+ICh7IC4uLmRldGFpbHMsIGFjY291bnROYW1lLCBvcHBvcnR1bml0eU5hbWUgfSkpLFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdE1ldHJpYyh2YWx1ZT86IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuICh2YWx1ZSA/IE51bWJlcih2YWx1ZSkgOiAwKS50b0ZpeGVkKDIpO1xuICB9XG5cbiAgcHVibGljIGdldERyYWZ0SXRlbXMkKCk6IE9ic2VydmFibGU8TGluZUl0ZW1bXT4ge1xuICAgIHJldHVybiBjb21iaW5lTGF0ZXN0KFtcbiAgICAgIHRoaXMuZmxvd0NvbmZpZ3VyYXRpb24uZ2V0KCksXG4gICAgICB0aGlzLmludGVncmF0aW9uU3RhdGUuc3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcChzdGF0ZSA9PiBzdGF0ZS5tb2RpZmllZEFzc2V0cyksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICApLFxuICAgIF0pLnBpcGUoXG4gICAgICBtYXAoKFtsaW5lSXRlbXMsIG1vZGlmaWVkQXNzZXRzXSkgPT5cbiAgICAgICAgbGluZUl0ZW1zLnJlZHVjZSgoYWNjOiBMaW5lSXRlbVtdLCBsaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGFzc2V0SWQgPSBsaS5hc3NldElkIHx8IGxpLm9wZW5PcmRlckxpbmVJdGVtSWQ7XG4gICAgICAgICAgY29uc3QgaXNNb2RpZmllZCA9IGlzTGluZUl0ZW1Nb2RpZmllZChsaSk7XG4gICAgICAgICAgY29uc3QgY3VycmVudFRlcm0gPSBnZXRPcmlnaW5QYXJlbnQobGluZUl0ZW1zLCBsaSkgPz8gbGk7XG5cbiAgICAgICAgICBpZiAoaXNNb2RpZmllZCB8fCAoYXNzZXRJZCAmJiBtb2RpZmllZEFzc2V0cz8uW2Fzc2V0SWRdKSkge1xuICAgICAgICAgICAgYWNjLnB1c2goY3VycmVudFRlcm0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICB9LCBbXSksXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXNzZXRzJCgpOiBPYnNlcnZhYmxlPExpbmVJdGVtW10+IHtcbiAgICByZXR1cm4gdGhpcy5mbG93Q29uZmlndXJhdGlvblxuICAgICAgLmdldCgpXG4gICAgICAucGlwZShtYXAobGluZUl0ZW1zID0+IGxpbmVJdGVtcy5maWx0ZXIobGkgPT4gKCEhbGkuYXNzZXRJZCB8fCAhIWxpLm9wZW5PcmRlckxpbmVJdGVtSWQpICYmICFsaS5yYW1wSW5zdGFuY2VJZCkpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVQcm9kdWN0cyhsaW5lSXRlbXM6IExpbmVJdGVtW10pOiBIZWFkZXJQcm9kdWN0W10ge1xuICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7XG4gICAgY29uc3Qgbm93ID0gZGF0ZS5nZXRUaW1lKCk7XG4gICAgY29uc3QgdGVybVBhcmVudElkcyA9IGxpbmVJdGVtcy5tYXAobGkgPT4gbGkucmFtcEluc3RhbmNlSWQpLmZpbHRlcihCb29sZWFuKTtcblxuICAgIHJldHVybiBsaW5lSXRlbXMucmVkdWNlKChyZXN1bHQ6IEhlYWRlclByb2R1Y3RbXSwgbGkpID0+IHtcbiAgICAgIC8vIGZpbmQgbWFpbiB0ZXJtIGxpbmUgaXRlbVxuICAgICAgaWYgKGxpLnJhbXBJbnN0YW5jZUlkKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIC8vIGZpbmQgY3VycmVudCB0ZXJtIGxpbmUgaXRlbVxuICAgICAgbGV0IHRhcmdldDogTGluZUl0ZW0gfCB1bmRlZmluZWQgPSBsaTtcbiAgICAgIHdoaWxlICh0YXJnZXQgJiYgdGFyZ2V0LmVuZERhdGUgJiYgbmV3IERhdGUodGFyZ2V0LmVuZERhdGUpLmdldFRpbWUoKSA8PSBub3cpIHtcbiAgICAgICAgdGFyZ2V0ID0gbGluZUl0ZW1zLmZpbmQoc3ViID0+IHN1Yi5yYW1wSW5zdGFuY2VJZCA9PT0gbGkuaWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAodGFyZ2V0ICYmIHRhcmdldC5wcm9kdWN0SWQpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAge1xuICAgICAgICAgICAgaWQ6IHRhcmdldC5pZCxcbiAgICAgICAgICAgIHByb2R1Y3RJZDogdGFyZ2V0LnByb2R1Y3RJZCxcbiAgICAgICAgICAgIG5hbWU6IHRhcmdldC5uYW1lLFxuICAgICAgICAgICAgY29uZmlndXJhYmxlOiB0YXJnZXQucHJvcGVydGllc1snI2NvbmZpZ3VyYWJsZSddID09PSAndHJ1ZScsXG4gICAgICAgICAgICBkZWxldGVkOiB0YXJnZXQuYWN0aW9uQ29kZSA9PT0gJ0RFTEVURScsXG4gICAgICAgICAgICBoYXNUZXJtOiB0ZXJtUGFyZW50SWRzLmluY2x1ZGVzKHRhcmdldC5pZCksXG4gICAgICAgICAgICBxdHk6IHRhcmdldC5xdHksXG4gICAgICAgICAgICBtcnI6IHRoaXMuZm9ybWF0TWV0cmljKHRhcmdldC5wcm9wZXJ0aWVzLlZETV9Ub3RhbF9NUlIpLFxuICAgICAgICAgICAgbnJyOiB0aGlzLmZvcm1hdE1ldHJpYyh0YXJnZXQucHJvcGVydGllcy5WRE1fVG90YWxfTlJSKSxcbiAgICAgICAgICB9LFxuICAgICAgICBdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZWFkb25seU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdD8uY29udGV4dC5wcm9wZXJ0aWVzLm1vZGUgPT09IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZS5BQ0NPVU5UICYmXG4gICAgICAhdGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNQcm9kdWN0c1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzVXBzZWxsUXVvdGVXaXRob3V0Q2hhbmdlcygpOiBib29sZWFuIHtcbiAgICBjb25zdCBub1VwZGF0ZXMgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmFjdGl2ZUN1cnJlbnRTdGF0ZS5ldmVyeShsaW5lSXRlbSA9PiBsaW5lSXRlbS5hY3Rpb25Db2RlID09PSAnRVhJU1QnKTtcbiAgICBjb25zdCBzYW1lTnVtYmVyT2ZQcm9kdWN0cyA9XG4gICAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmdldEluaXRpYWxDdXJyZW50U3RhdGUoKS5sZW5ndGggPT09IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuYWN0aXZlQ3VycmVudFN0YXRlLmxlbmd0aDtcblxuICAgIHJldHVybiBub1VwZGF0ZXMgJiYgc2FtZU51bWJlck9mUHJvZHVjdHM7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZXh0UHJvcGVydGllcyQgfCBhc3luYyBhcyBjb250ZXh0UHJvcGVydGllc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwib2JqZWN0RGV0YWlscyQgfCBhc3luYyBhcyBkZXRhaWxzXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsb3ctaW5mb1wiPlxuICAgICAgPG5hdiBjbGFzcz1cIm5hdi1pdGVtIG5hdi1iYWNrXCIgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICA8aSBjbGFzcz1cIm5hdi1pY29uIHZsLWljb24gdmwtaWNvbi1hcnJvdy1sZWZ0XCI+PC9pPlxuXG4gICAgICAgIDxzcGFuPiBCYWNrIHRvIHt7IG9iamVjdE5hbWUkIHwgYXN5bmMgfCB0aXRsZWNhc2UgfX08L3NwYW4+XG4gICAgICA8L25hdj5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzQWNjb3VudE1vZGUkIHwgYXN5bmNcIj5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3Qtc2VwYXJhdG9yXCI+PC9zcGFuPlxuXG4gICAgICAgIDxuYXYgY2xhc3M9XCJhY2NvdW50LW5hbWVcIiBbcFRvb2x0aXBdPVwiY29udGV4dFByb3BlcnRpZXMuTmFtZSA/PyAnJ1wiIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiIFtzaG93RGVsYXldPVwiMTAwMFwiPlxuICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cImdldFNhbGVzZm9yY2VPYmplY3RMaW5rKGNvbnRleHRQcm9wZXJ0aWVzLklkKVwiPnt7IGNvbnRleHRQcm9wZXJ0aWVzLk5hbWUgfX08L2E+XG4gICAgICAgIDwvbmF2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1F1b3RlTW9kZSQgfCBhc3luY1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cImRvdC1zZXBhcmF0b3JcIj48L3NwYW4+XG5cbiAgICAgICAgPHNwYW4+UXVvdGUgI3t7IGRldGFpbHMucXVvdGVOdW1iZXIgfX08L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3Qtc2VwYXJhdG9yXCI+PC9zcGFuPlxuXG4gICAgICAgIDxuYXYgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJxdW90ZURldGFpbHMudG9nZ2xlKCRldmVudClcIj5cbiAgICAgICAgICA8c3Bhbj57eyBzdGF0dXMkIHwgYXN5bmMgfX08L3NwYW4+XG5cbiAgICAgICAgICA8aSAqbmdJZj1cIiFxdW90ZURldGFpbHMub3ZlcmxheVZpc2libGVcIiBjbGFzcz1cInZsLWljb24gdmwtaWNvbi1jaGV2cm9uLWRvd24gaWNvbi13aXRoLW1hcmdpblwiPjwvaT5cbiAgICAgICAgICA8aSAqbmdJZj1cInF1b3RlRGV0YWlscy5vdmVybGF5VmlzaWJsZVwiIGNsYXNzPVwidmwtaWNvbiB2bC1pY29uLWNoZXZyb24tdXAgaWNvbi13aXRoLW1hcmdpblwiPjwvaT5cbiAgICAgICAgPC9uYXY+XG5cbiAgICAgICAgPHAtb3ZlcmxheVBhbmVsIHN0eWxlQ2xhc3M9XCJuYXZpZ2F0aW9uLXNldHRpbmdzLW92ZXJsYXkgZmxvdy1oZWFkZXItb3ZlcmxheSBjZW50ZXJcIiAjcXVvdGVEZXRhaWxzPlxuICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxvdy1oZWFkZXItb3ZlcmxheV9fd3JhcHBlclwiPlxuICAgICAgICAgICAgICA8aDIgY2xhc3M9XCJmbG93LWhlYWRlci1vdmVybGF5X190aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlF1b3RlIEluZm9ybWF0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidmwtaWNvbiB2bC1pY29uLWNsb3NlIGNsb3NlLWljb25cIiAoY2xpY2spPVwicXVvdGVEZXRhaWxzLmhpZGUoKVwiPjwvaT5cbiAgICAgICAgICAgICAgPC9oMj5cblxuICAgICAgICAgICAgICA8dWwgY2xhc3M9XCJpbmZvLWxpc3RcIj5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJpbmZvLWxpc3RfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+QWNjb3VudCBOYW1lOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cImdldFNhbGVzZm9yY2VPYmplY3RMaW5rKGRldGFpbHMuYWNjb3VudElkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkZXRhaWxzLmFjY291bnROYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9hPlxuICAgICAgICAgICAgICAgIDwvbGk+XG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwiaW5mby1saXN0X19yb3dcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuPk9wcG9ydHVuaXR5IE5hbWU6PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwiZ2V0U2FsZXNmb3JjZU9iamVjdExpbmsoZGV0YWlscy5vcHBvcnR1bml0eUlkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBkZXRhaWxzLm9wcG9ydHVuaXR5TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cImluZm8tbGlzdF9fcm93XCI+XG4gICAgICAgICAgICAgICAgICA8c3Bhbj5RdW90ZSBOYW1lOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cImdldFNhbGVzZm9yY2VPYmplY3RMaW5rKGRldGFpbHMucXVvdGVJZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZGV0YWlscy5xdW90ZU5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJpbmZvLWxpc3RfX3Jvd1wiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+UXVvdGUgTnVtYmVyOjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cImdldFNhbGVzZm9yY2VPYmplY3RMaW5rKGRldGFpbHMucXVvdGVJZClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgZGV0YWlscy5xdW90ZU51bWJlciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgICA8L3VsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgPC9wLW92ZXJsYXlQYW5lbD5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cImZsb3ctbmF2aWdhdGlvblwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqdmxMZXQ9XCJpc1JlYWRvbmx5TW9kZSQgfCBhc3luYyBhcyBpc1JlYWRvbmx5TW9kZVwiPlxuICAgICAgICA8bmF2XG4gICAgICAgICAgY2xhc3M9XCJuYXYtaXRlbVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IChpc0Fzc2V0c1JvdXRlJCB8IGFzeW5jKSwgZGlzYWJsZWQ6IGlzUmVhZG9ubHlNb2RlIH1cIlxuICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvQXNzZXRzKClcIlxuICAgICAgICA+XG4gICAgICAgICAgQXNzZXRzICh7eyBhc3NldHNDb3VudCQgfCBhc3luYyB9fSlcbiAgICAgICAgPC9uYXY+XG4gICAgICAgIDxuYXZcbiAgICAgICAgICBjbGFzcz1cIm5hdi1pdGVtXCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogKGlzQ2F0YWxvZ1JvdXRlJCB8IGFzeW5jKSwgZGlzYWJsZWQ6IGlzUmVhZG9ubHlNb2RlIH1cIlxuICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvQ2F0YWxvZygpXCJcbiAgICAgICAgPlxuICAgICAgICAgIENhdGFsb2dcbiAgICAgICAgPC9uYXY+XG4gICAgICAgIDxuYXYgY2xhc3M9XCJuYXYtaXRlbSBkaXNhYmxlZFwiIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiBpc0NvbmZpZ3VyYXRpb25Sb3V0ZSQgfCBhc3luYyB9XCI+Q29uZmlndXJhdG9yPC9uYXY+XG4gICAgICAgIDxuZy1jb250YWluZXIgKnZsTGV0PVwicHJvZHVjdHMkIHwgYXN5bmMgYXMgcHJvZHVjdHNcIj5cbiAgICAgICAgICA8bmF2XG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1pdGVtXCJcbiAgICAgICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiAoaXNDYXJ0Um91dGUkIHwgYXN5bmMpLCBkaXNhYmxlZDogaXNSZWFkb25seU1vZGUgfVwiXG4gICAgICAgICAgICAoY2xpY2spPVwibmF2aWdhdGVUb1Nob3BwaW5nQ2FydCgpXCJcbiAgICAgICAgICA+XG4gICAgICAgICAgICBTaG9wcGluZyBDYXJ0ICh7eyBwcm9kdWN0cz8ubGVuZ3RoID8/IDAgfX0pXG4gICAgICAgICAgPC9uYXY+XG5cbiAgICAgICAgICA8bmF2XG4gICAgICAgICAgICBjbGFzcz1cIm5hdi1wb3BvdmVyLXRvZ2dsZVwiXG4gICAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogKGlzQ2FydFJvdXRlJCB8IGFzeW5jKSwgZGlzYWJsZWQ6IGlzUmVhZG9ubHlNb2RlIH1cIlxuICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhcnRPdmVybGF5KGNhcnQsICRldmVudClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwiIWNhcnQ/Lm92ZXJsYXlQYW5lbD8ub3ZlcmxheVZpc2libGVcIiBjbGFzcz1cInZsLWljb24gdmwtaWNvbi1jaGV2cm9uLWRvd24gaWNvbi13aXRoLW1hcmdpblwiPjwvaT5cbiAgICAgICAgICAgIDxpICpuZ0lmPVwiY2FydD8ub3ZlcmxheVBhbmVsPy5vdmVybGF5VmlzaWJsZVwiIGNsYXNzPVwidmwtaWNvbiB2bC1pY29uLWNoZXZyb24tdXAgaWNvbi13aXRoLW1hcmdpblwiPjwvaT5cbiAgICAgICAgICA8L25hdj5cblxuICAgICAgICAgIDx2bC1jYXJ0LXByZXZpZXcgI2NhcnQgW3Byb2R1Y3RzXT1cInByb2R1Y3RzID8/IFtdXCI+PC92bC1jYXJ0LXByZXZpZXc+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxvdy1jb250cm9sc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpc1JlYWRvbmx5TW9kZSQgfCBhc3luYykgPT09IGZhbHNlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKnZsTGV0PVwiYWN0aXZlUHJpY2VMaXN0JCB8IGFzeW5jIGFzIHByaWNlTGlzdFwiPlxuICAgICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICp2bExldD1cImFzc2V0UHJpY2VMaXN0cyQgfCBhc3luYyBhcyBhc3NldFByaWNlTGlzdHNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGlzQWNjb3VudE1vZGUkIHwgYXN5bmMpICYmIGFzc2V0UHJpY2VMaXN0cyAmJiBhc3NldFByaWNlTGlzdHMubGVuZ3RoID4gMTsgZWxzZSBzaW5nbGVQcmljZUxpc3RcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5hdiBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInByaWNlTGlzdHNPdmVybGF5Py50b2dnbGUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcHJpY2VMaXN0Py5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGlcbiAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCIhcHJpY2VMaXN0c092ZXJsYXk/Lm92ZXJsYXlWaXNpYmxlXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tY2hldnJvbi1kb3duIGljb24td2l0aC1tYXJnaW5cIlxuICAgICAgICAgICAgICAgICAgPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicHJpY2VMaXN0c092ZXJsYXk/Lm92ZXJsYXlWaXNpYmxlXCIgY2xhc3M9XCJ2bC1pY29uIHZsLWljb24tY2hldnJvbi11cCBpY29uLXdpdGgtbWFyZ2luXCI+PC9pPlxuICAgICAgICAgICAgICAgIDwvbmF2PlxuXG4gICAgICAgICAgICAgICAgPHAtb3ZlcmxheVBhbmVsIHN0eWxlQ2xhc3M9XCJwcmljZS1saXN0LW92ZXJsYXlcIiAjcHJpY2VMaXN0c092ZXJsYXk+XG4gICAgICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgcFRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICA8c3BhblxuICAgICAgICAgICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBvcHRpb24gb2YgYXNzZXRQcmljZUxpc3RzXCJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInByaWNlLWxpc3Qtb3B0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuYWN0aXZlXT1cInByaWNlTGlzdD8uaWQgPT09IG9wdGlvbi5pZFwiXG4gICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFByaWNlTGlzdChvcHRpb24uaWQpOyBwcmljZUxpc3RzT3ZlcmxheS5oaWRlKClcIlxuICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uLm5hbWUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICA8L3Atb3ZlcmxheVBhbmVsPlxuICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI3NpbmdsZVByaWNlTGlzdD5cbiAgICAgICAgICAgICAgPGRpdj57eyBwcmljZUxpc3Q/Lm5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJjb250ZXh0UHJvcGVydGllcy5TdGFydERhdGVcIj57eyBjb250ZXh0UHJvcGVydGllcy5TdGFydERhdGUgfCBkYXRlIDogZGF0ZUZvcm1hdCB9fTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICA8dmwtbWV0cmljcz48L3ZsLW1ldHJpY3M+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKnZsTGV0PVwiaXNDYXJ0Um91dGUkIHwgYXN5bmMgYXMgaXNDYXJ0Um91dGVcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqdmxMZXQ9XCJpc1JlYWRvbmx5TW9kZSQgfCBhc3luYyBhcyBpc1JlYWRvbmx5TW9kZVwiPlxuICAgICAgICAgIDxwLWJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJkb2MtZ2VuLWJ1dHRvblwiXG4gICAgICAgICAgICBpY29uPVwidmwtaWNvbiB2bC1pY29uLWRvYy1nZW5cIlxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImlzUmVhZG9ubHlNb2RlID09PSB0cnVlXCJcbiAgICAgICAgICAgIChvbkNsaWNrKT1cImRvY0dlbkJ1dHRvbkNsaWNrSGFuZGxlcihpc0NhcnRSb3V0ZSA9PT0gdHJ1ZSlcIlxuICAgICAgICAgICAgcFRvb2x0aXA9XCJHZW5lcmF0ZSBEb2N1bWVudFwiXG4gICAgICAgICAgICB0b29sdGlwUG9zaXRpb249XCJib3R0b21cIlxuICAgICAgICAgICAgdG9vbHRpcFN0eWxlQ2xhc3M9XCJ2bC1pbmZvLXRvb2x0aXBcIlxuICAgICAgICAgID48L3AtYnV0dG9uPlxuXG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqdmxMZXQ9XCJpc1NhdmVJblByb2dyZXNzJCB8IGFzeW5jIGFzIGlzU2F2ZUluUHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnZsTGV0PVwiaXNTdWJtaXRJblByb2dyZXNzJCB8IGFzeW5jIGFzIGlzU3VibWl0SW5Qcm9ncmVzc1wiPlxuICAgICAgICAgICAgICA8cC1zcGxpdEJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzU2F2ZUluUHJvZ3Jlc3MgJiYgIWlzU3VibWl0SW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJTYXZlIHRvIFF1b3RlXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQnV0dG9uQ2xpY2tIYW5kbGVyKGlzQ2FydFJvdXRlID09PSB0cnVlKVwiXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImdldFNwbGl0QnV0dG9uQWN0aW9ucyhpc0NhcnRSb3V0ZSA9PT0gdHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5TW9kZSA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3Atc3BsaXRCdXR0b24+XG5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc1NhdmVJblByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNhdmUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b25cIlxuICAgICAgICAgICAgICAgIGxhYmVsPVwiU2F2aW5nXCJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvcC1idXR0b24+XG5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc1N1Ym1pdEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VibWl0LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBsYWJlbD1cIlN1Ym1pdHRpbmdcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cInRydWVcIlxuICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
347
+ args: [{ selector: 'vl-flow-header', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"contextProperties$ | async as contextProperties\">\n <ng-container *ngIf=\"objectDetails$ | async as details\">\n <div class=\"flow-info\">\n <nav class=\"nav-item nav-back\" (click)=\"back()\">\n <i class=\"nav-icon vl-icon vl-icon-back\"></i>\n </nav>\n\n <ng-container *ngIf=\"isAccountMode$ | async\">\n <nav\n class=\"account-name nav-item\"\n [pTooltip]=\"contextProperties.Name ?? ''\"\n tooltipPosition=\"bottom\"\n [showDelay]=\"1000\"\n >\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(contextProperties.Id)\">{{ contextProperties.Name }}</a>\n </nav>\n </ng-container>\n\n <ng-container *ngIf=\"isQuoteMode$ | async\">\n <span class=\"nav-item\">Quote #{{ details.quoteNumber }}</span>\n\n <span class=\"dot-separator\"></span>\n\n <nav class=\"nav-item\" (click)=\"quoteDetails.toggle($event)\">\n <span>{{ status$ | async }}</span>\n\n <i *ngIf=\"!quoteDetails.overlayVisible\" class=\"vl-icon vl-arrow-down icon-with-margin\"></i>\n <i *ngIf=\"quoteDetails.overlayVisible\" class=\"vl-icon vl-arrow-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"catalog-overlay quote-info-overlay\" #quoteDetails>\n <ng-template pTemplate>\n <div class=\"quote-info\">\n <div class=\"title\">\n <span>Quote Information</span>\n <span class=\"close-action\" (click)=\"quoteDetails.hide()\">\n <i class=\"vl-icon vl-cross\"></i>\n </span>\n </div>\n\n <div class=\"details\">\n <div class=\"details-row\">\n <div class=\"label\">Account Name</div>\n <div class=\"value\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.accountId)\">\n {{ details.accountName }}\n </a>\n </div>\n </div>\n <div class=\"details-row\">\n <div class=\"label\">Opportunity Name</div>\n <div class=\"value\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.opportunityName)\">\n {{ details.opportunityName }}\n </a>\n </div>\n </div>\n <div class=\"details-row\">\n <div class=\"label\">Quote Name</div>\n <div class=\"value\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteName)\">\n {{ details.quoteName }}\n </a>\n </div>\n </div>\n <div class=\"details-row\">\n <div class=\"label\">Quote Number</div>\n <div class=\"value\">\n <a target=\"_blank\" [href]=\"getSalesforceObjectLink(details.quoteNumber)\">\n {{ details.quoteNumber }}\n </a>\n </div>\n </div>\n </div>\n </div>\n </ng-template>\n </p-overlayPanel>\n </ng-container>\n </div>\n\n <div class=\"flow-navigation\">\n <ng-container *vlLet=\"isReadonlyMode$ | async as isReadonlyMode\">\n <nav\n class=\"nav-item\"\n *vlLet=\"assetsCount$ | async as assetsCount\"\n [ngClass]=\"{ active: (isAssetsRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToAssets()\"\n >\n Assets\n <div *ngIf=\"assetsCount\" class=\"counter\">{{ assetsCount }}</div>\n </nav>\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isCatalogRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToCatalog()\"\n >\n Catalog\n </nav>\n <nav class=\"nav-item disabled\" [ngClass]=\"{ active: isConfigurationRoute$ | async }\">Configurator</nav>\n <ng-container *vlLet=\"products$ | async as products\">\n <nav\n class=\"nav-item\"\n [ngClass]=\"{ active: (isCartRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"navigateToShoppingCart()\"\n >\n Shopping Cart\n <div *ngIf=\"products?.length\" class=\"counter\">{{ products?.length }}</div>\n\n <nav\n class=\"nav-popover-toggle\"\n [ngClass]=\"{ active: (isCartRoute$ | async), disabled: isReadonlyMode }\"\n (click)=\"toggleCartOverlay(cart, $event)\"\n >\n <i *ngIf=\"!cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-arrow-down icon-with-margin\"></i>\n <i *ngIf=\"cart?.overlayPanel?.overlayVisible\" class=\"vl-icon vl-arrow-up icon-with-margin\"></i>\n </nav>\n </nav>\n\n <vl-cart-preview #cart [products]=\"products ?? []\"></vl-cart-preview>\n </ng-container>\n </ng-container>\n </div>\n\n <div class=\"flow-controls\">\n <ng-container *ngIf=\"(isReadonlyMode$ | async) === false\">\n <ng-container *vlLet=\"activePriceList$ | async as priceList\">\n <div class=\"price-plan\">\n <ng-container *vlLet=\"assetPriceLists$ | async as assetPriceLists\">\n <ng-container\n *ngIf=\"(isAccountMode$ | async) && assetPriceLists && assetPriceLists.length > 1; else singlePriceList\"\n >\n <nav class=\"nav-item\" (click)=\"priceListsOverlay?.toggle($event)\">\n <span>{{ priceList?.name }}</span>\n <i *ngIf=\"!priceListsOverlay?.overlayVisible\" class=\"vl-icon vl-arrow-down icon-with-margin\"></i>\n <i *ngIf=\"priceListsOverlay?.overlayVisible\" class=\"vl-icon vl-arrow-up icon-with-margin\"></i>\n </nav>\n\n <p-overlayPanel styleClass=\"price-list-overlay\" #priceListsOverlay>\n <ng-template pTemplate>\n <span\n *ngFor=\"let option of assetPriceLists\"\n class=\"price-list-option\"\n [class.active]=\"priceList?.id === option.id\"\n (click)=\"selectPriceList(option.id); priceListsOverlay.hide()\"\n >\n {{ option.name }}\n </span>\n </ng-template>\n </p-overlayPanel>\n </ng-container>\n </ng-container>\n\n <ng-template #singlePriceList>\n <div>{{ priceList?.name }}</div>\n </ng-template>\n\n <div *ngIf=\"contextProperties.StartDate\">{{ contextProperties.StartDate | date : dateFormat }}</div>\n </div>\n </ng-container>\n </ng-container>\n\n <vl-metrics></vl-metrics>\n\n <ng-container *vlLet=\"isCartRoute$ | async as isCartRoute\">\n <ng-container *vlLet=\"isReadonlyMode$ | async as isReadonlyMode\">\n <ng-container *vlLet=\"isSaveInProgress$ | async as isSaveInProgress\">\n <ng-container *vlLet=\"isSubmitInProgress$ | async as isSubmitInProgress\">\n <p-splitButton\n *ngIf=\"!isSaveInProgress && !isSubmitInProgress\"\n #splitButton\n label=\"Save to Quote\"\n (onClick)=\"saveButtonClickHandler(isCartRoute === true)\"\n [model]=\"getSplitButtonActions(isCartRoute === true)\"\n [disabled]=\"isReadonlyMode === true\"\n styleClass=\"catalog-split-button p-button-outlined\"\n [class.opened]=\"splitButton?.menu?.visible\"\n icon=\"vl-icon vl-arrow-down\"\n >\n </p-splitButton>\n\n <p-button\n *ngIf=\"isSaveInProgress\"\n class=\"save-button\"\n styleClass=\"p-button\"\n label=\"Saving\"\n [loading]=\"true\"\n ></p-button>\n\n <p-button\n *ngIf=\"isSubmitInProgress\"\n class=\"submit-button\"\n styleClass=\"p-button\"\n label=\"Submitting\"\n [loading]=\"true\"\n ></p-button>\n </ng-container>\n </ng-container>\n </ng-container>\n </ng-container>\n </div>\n </ng-container>\n</ng-container>\n", styles: [":host{font-family:var(--cg-font-family);display:flex;align-items:center;height:48px;width:100%;background-color:var(--cg-primary-color);color:#fff;padding:0 16px;flex-shrink:0}:host *{font-family:var(--cg-font-family)}::ng-deep .p-overlaypanel.quote-info-overlay{margin-left:-16px}.quote-info{width:348px}.quote-info .title{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px;font-size:16px;font-style:normal;font-weight:500;line-height:20px}.quote-info .title .close-action{padding:4px}.quote-info .title .vl-icon{cursor:pointer}.quote-info .details .details-row{display:flex;align-items:center}.quote-info .details .details-row .label,.quote-info .details .details-row .value{flex:1;padding:8px;color:var(--cg-black)}.quote-info .details .details-row .label{font-size:12px;font-weight:500;line-height:16px;letter-spacing:.2px}.quote-info .details .details-row .value{text-align:right}.quote-info .details .details-row a{color:var(--cg-black);text-decoration:none;font-size:12px;line-height:18px;letter-spacing:.3px;border-bottom:1px solid var(--cg-black)}:host ::ng-deep .catalog-split-button .p-splitbutton-defaultbutton{padding:8px 0 8px 16px;border-top-left-radius:24px;border-bottom-left-radius:24px;color:var(--cg-white);background:var(--cg-primary-color);border-color:var(--cg-white)}:host ::ng-deep .catalog-split-button .p-splitbutton-defaultbutton .p-button-icon{display:none}:host ::ng-deep .catalog-split-button .p-splitbutton-menubutton{width:16px;box-sizing:content-box;padding:8px;border-top-right-radius:24px;border-bottom-right-radius:24px;border-left:none;color:var(--cg-white);background:var(--cg-primary-color);border-color:var(--cg-white)}:host ::ng-deep .catalog-split-button .p-splitbutton-menubutton:hover:enabled{border-left:none}:host ::ng-deep .catalog-split-button:hover .p-splitbutton-defaultbutton,:host ::ng-deep .catalog-split-button:hover .p-splitbutton-menubutton{color:var(--cg-primary-color);background:var(--cg-white);border-color:var(--cg-primary-color)}:host ::ng-deep .catalog-split-button:hover .p-splitbutton-defaultbutton:hover,:host ::ng-deep .catalog-split-button:hover .p-splitbutton-menubutton:hover{color:var(--cg-primary-color);background:var(--cg-white);border-color:var(--cg-primary-color)}:host ::ng-deep .catalog-split-button .p-menu-overlay{overflow:hidden;margin-top:4px;padding:0;border-radius:8px;box-shadow:0 8px 32px #0000001a}:host ::ng-deep .catalog-split-button .p-menu-overlay .p-menuitem:not(:last-child){border-bottom:1px solid var(--cg-border-color)}:host ::ng-deep .catalog-split-button .p-menu-overlay .p-menuitem-link{padding:12px;color:var(--cg-primary-color);white-space:nowrap;font-size:12px;font-weight:300;line-height:16px;letter-spacing:.3px}:host ::ng-deep .catalog-split-button .p-menu-overlay .p-menuitem-link .p-menuitem-text{color:var(--cg-primary-color)}:host ::ng-deep .catalog-split-button .p-menu-overlay .p-menuitem-link:hover{background:var(--cg-bg-color)}:host ::ng-deep p-splitButton.opened .p-button-icon{transform:rotate(180deg)}:host ::ng-deep p-splitButton.opened .p-splitbutton-defaultbutton,:host ::ng-deep p-splitButton.opened .p-splitbutton-menubutton{color:var(--cg-primary-color);background:var(--cg-white);border-color:var(--cg-primary-color)}:host ::ng-deep .save-button,:host ::ng-deep .submit-button{height:32px;width:146px;display:flex}:host ::ng-deep .save-button .p-button,:host ::ng-deep .submit-button .p-button{border-radius:3px;width:100%;height:100%;background:rgba(255,255,255,.3);opacity:1;border:none}:host ::ng-deep .save-button .p-button .p-button-label,:host ::ng-deep .submit-button .p-button .p-button-label{font-size:12px;line-height:16px;letter-spacing:.3px;white-space:nowrap}.vl-icon{display:inline-block}.flow-info{flex-shrink:0;display:flex;gap:8px;align-items:center}.flow-info .nav-item{font-weight:400;font-size:12px;line-height:16px;letter-spacing:.3px}.flow-info .nav-popover-toggle{margin-left:-8px}.flow-info .nav-item:not(.disabled):hover,.flow-info .nav-popover-toggle:not(.disabled):hover{opacity:.6}nav{display:flex;align-items:center;cursor:pointer;height:32px}nav.disabled{opacity:.6;cursor:default}nav .icon-with-margin{margin:0 4px}nav a{color:#fff}nav.account-name{margin-left:4px;display:block;max-width:200px;overflow:hidden;text-overflow:ellipsis}nav.nav-popover-toggle{width:16px;display:flex;justify-content:center}nav.nav-popover-toggle i{pointer-events:none;margin:0}nav i{pointer-events:none}.metrics__row{display:flex;justify-content:space-between;gap:2px}.dot-separator:after{content:\"\";display:block;width:2px;height:2px;border-radius:50%;background:#fff}.slash-separator:after{content:\"\";display:block;background:#fff;width:1px;height:16px}.flow-navigation{flex-grow:1;display:flex;gap:8px;justify-content:center}.flow-navigation .nav-item{padding:8px 16px;border-radius:32px;color:#ffffff80;font-size:12px;line-height:16px;letter-spacing:.3px;white-space:nowrap}.flow-navigation .nav-item:not(.disabled):hover:not(.active){color:var(--cg-white);background:rgba(255,255,255,.1)}.flow-navigation .nav-item:not(.disabled).active{color:var(--cg-white)}.flow-navigation .cart-nav-container{display:flex}.flow-navigation .nav-popover-toggle{margin-left:8px}.price-list-option{padding:8px;color:var(--vl-primary-color);cursor:pointer}.price-list-option.active,.price-list-option:hover{background:var(--vl-secondary-nav-bg)}.flow-controls{flex-shrink:0;display:flex;align-items:center;gap:8px;font-size:12px;line-height:16px}.flow-controls .price-plan{color:#ffffffb3}.counter{margin-left:8px;height:16px;min-width:16px;text-align:center;background:rgba(255,255,255,.2);border-radius:16px;padding:0 4px}\n"] }]
348
+ }], ctorParameters: function () { return [{ type: i1.ContextService }, { type: i1.QuoteDraftService }, { type: i2.QuoteApiService }, { type: i2.SalesforceApiService }, { type: i1.FlowConfigurationService }, { type: i3.FlowRouterService }, { type: i4.FlowDialogService }, { type: i5.IntegrationState }]; } });
349
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zZGsvc3JjL2NvbXBvbmVudHMvaGVhZGVyL2hlYWRlci5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUN0RixPQUFPLEVBQUUsZUFBZSxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDeEUsT0FBTyxFQUNMLHdCQUF3QixHQU16QixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3pFLE9BQU8sRUFDTCxjQUFjLEVBQ2Qsd0JBQXdCLEVBQ3hCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2Ysa0JBQWtCLEdBQ25CLE1BQU0sc0JBQXNCLENBQUM7QUFFOUIsT0FBTyxFQUNMLGVBQWUsRUFFZixPQUFPLEVBQ1AsYUFBYSxFQUNiLG9CQUFvQixFQUNwQixNQUFNLEVBQ04sUUFBUSxFQUNSLEtBQUssRUFDTCxHQUFHLEVBQ0gsSUFBSSxFQUNKLEVBQUUsRUFDRixTQUFTLEVBQ1QsU0FBUyxFQUNULEdBQUcsR0FDSixNQUFNLE1BQU0sQ0FBQztBQUNkLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7O0FBWXZFLE1BQU0sT0FBTyxtQkFBbUI7SUF1QjlCLFlBQ1UsY0FBOEIsRUFDOUIsaUJBQW9DLEVBQ3BDLGVBQWdDLEVBQ2hDLFlBQWtDLEVBQ2xDLGlC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QUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDO29CQUN2RCxHQUFHLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQztpQkFDeEQsQ0FBQyxDQUFDO2FBQ0o7WUFFRCxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRU8sY0FBYztRQUNwQixPQUFPLENBQ0wsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksS0FBSyx3QkFBd0IsQ0FBQyxPQUFPO1lBQy9GLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FDcEMsQ0FBQztJQUNKLENBQUM7SUFFTywyQkFBMkI7UUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxVQUFVLEtBQUssT0FBTyxDQUFDLENBQUM7UUFDL0csTUFBTSxvQkFBb0IsR0FDeEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLHNCQUFzQixFQUFFLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUM7UUFFOUcsT0FBTyxTQUFTLElBQUksb0JBQW9CLENBQUM7SUFDM0MsQ0FBQzs7Z0hBN2FVLG1CQUFtQjtvR0FBbkIsbUJBQW1CLHNEQ2hEaEMsbTZRQTBNQTsyRkQxSmEsbUJBQW1CO2tCQU4vQixTQUFTOytCQUNFLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFF1b3RlQXBpU2VydmljZSwgU2FsZXNmb3JjZUFwaVNlcnZpY2UgfSBmcm9tICdAdmVsb2NlYXBwcy9hcGknO1xuaW1wb3J0IHtcbiAgQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLFxuICBDb250ZXh0UHJvcGVydGllcyxcbiAgTGluZUl0ZW0sXG4gIFByaWNlTGlzdCxcbiAgU2VhcmNoUmVxdWVzdCxcbiAgVmxXaW5kb3csXG59IGZyb20gJ0B2ZWxvY2VhcHBzL2NvcmUnO1xuaW1wb3J0IHsgSW50ZWdyYXRpb25TdGF0ZSwgT3BlbkRvY0dlbkFjdGlvbiB9IGZyb20gJ0B2ZWxvY2VhcHBzL3Nkay9jbXMnO1xuaW1wb3J0IHtcbiAgQ29udGV4dFNlcnZpY2UsXG4gIEZsb3dDb25maWd1cmF0aW9uU2VydmljZSxcbiAgUXVvdGVEcmFmdFNlcnZpY2UsXG4gIGdldE9yaWdpblBhcmVudCxcbiAgaXNMaW5lSXRlbU1vZGlmaWVkLFxufSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY29yZSc7XG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3ByaW1lbmcvYXBpJztcbmltcG9ydCB7XG4gIEJlaGF2aW9yU3ViamVjdCxcbiAgT2JzZXJ2YWJsZSxcbiAgU3ViamVjdCxcbiAgY29tYmluZUxhdGVzdCxcbiAgZGlzdGluY3RVbnRpbENoYW5nZWQsXG4gIGZpbHRlcixcbiAgZmluYWxpemUsXG4gIGZpcnN0LFxuICBtYXAsXG4gIG5vb3AsXG4gIG9mLFxuICBzd2l0Y2hNYXAsXG4gIHRha2VVbnRpbCxcbiAgdGFwLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEZsb3dEaWFsb2dTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZmxvdy1kaWFsb2cuc2VydmljZSc7XG5pbXBvcnQgeyBGbG93Um91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Zsb3ctcm91dGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ2FydFByZXZpZXdDb21wb25lbnQgfSBmcm9tICcuL2NhcnQtb3ZlcmxheS9jYXJ0LXByZXZpZXcuY29tcG9uZW50JztcbmltcG9ydCB7IEhlYWRlck9iamVjdERldGFpbHMsIEhlYWRlclByb2R1Y3QgfSBmcm9tICcuL2hlYWRlci50eXBlcyc7XG5cbmRlY2xhcmUgY29uc3Qgd2luZG93OiBWbFdpbmRvdztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAndmwtZmxvdy1oZWFkZXInLFxuICB0ZW1wbGF0ZVVybDogJy4vaGVhZGVyLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vaGVhZGVyLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBGbG93SGVhZGVyQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBwdWJsaWMgb2JqZWN0TmFtZSQ6IE9ic2VydmFibGU8c3RyaW5nPjtcbiAgcHVibGljIGNvbnRleHRQcm9wZXJ0aWVzJDogT2JzZXJ2YWJsZTxDb250ZXh0UHJvcGVydGllcz47XG4gIHB1YmxpYyBhY3RpdmVQcmljZUxpc3QkOiBPYnNlcnZhYmxlPFByaWNlTGlzdCB8IG51bGw+O1xuICBwdWJsaWMgaXNSZWFkb25seU1vZGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgc3RhdHVzJDogT2JzZXJ2YWJsZTxzdHJpbmc+O1xuICBwdWJsaWMgb2JqZWN0RGV0YWlscyQ6IE9ic2VydmFibGU8SGVhZGVyT2JqZWN0RGV0YWlscz47XG4gIHB1YmxpYyBhc3NldHNDb3VudCQ6IE9ic2VydmFibGU8bnVtYmVyPjtcbiAgcHVibGljIHByb2R1Y3RzJDogT2JzZXJ2YWJsZTxIZWFkZXJQcm9kdWN0W10+O1xuICBwdWJsaWMgaXNDb25maWd1cmF0aW9uUm91dGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgaXNDYXJ0Um91dGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgaXNDYXRhbG9nUm91dGUkOiBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBwdWJsaWMgaXNBc3NldHNSb3V0ZSQ6IE9ic2VydmFibGU8Ym9vbGVhbj47XG4gIHB1YmxpYyBpc0VkaXRNb2RlJDogT2JzZXJ2YWJsZTxib29sZWFuPjtcbiAgcHVibGljIGlzU2F2ZUluUHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHB1YmxpYyBpc1N1Ym1pdEluUHJvZ3Jlc3MkID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XG4gIHB1YmxpYyBkYXRlRm9ybWF0ID0gJ01NLmRkLnl5eXknO1xuXG4gIHB1YmxpYyBhc3NldFByaWNlTGlzdHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxQcmljZUxpc3RbXT4oW10pO1xuXG4gIHByaXZhdGUgbW9kZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZT4oQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLlRFU1QpO1xuICBwcml2YXRlIGRlc3Ryb3llZCQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgY29udGV4dFNlcnZpY2U6IENvbnRleHRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVEcmFmdFNlcnZpY2U6IFF1b3RlRHJhZnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcXVvdGVBcGlTZXJ2aWNlOiBRdW90ZUFwaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzZkFwaVNlcnZpY2U6IFNhbGVzZm9yY2VBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgZmxvd0NvbmZpZ3VyYXRpb246IEZsb3dDb25maWd1cmF0aW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJvdXRlclNlcnZpY2U6IEZsb3dSb3V0ZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRmxvd0RpYWxvZ1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBpbnRlZ3JhdGlvblN0YXRlOiBJbnRlZ3JhdGlvblN0YXRlLFxuICApIHtcbiAgICB0aGlzLmNvbnRleHRQcm9wZXJ0aWVzJCA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSQoKS5waXBlKG1hcChjdHggPT4gY3R4LnByb3BlcnRpZXMpKTtcbiAgICB0aGlzLm9iamVjdE5hbWUkID0gdGhpcy5tb2RlJC5waXBlKG1hcChtb2RlID0+IG1vZGU/LnRvTG9jYWxlTG93ZXJDYXNlKCkgPz8gJycpKTtcblxuICAgIHRoaXMuYWN0aXZlUHJpY2VMaXN0JCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuYWN0aXZlUHJpY2VMaXN0JDtcbiAgICB0aGlzLmlzUmVhZG9ubHlNb2RlJCA9IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaGFzUHJvZHVjdHMkLnBpcGUobWFwKCgpID0+IHRoaXMuaXNSZWFkb25seU1vZGUoKSkpO1xuICAgIHRoaXMuc3RhdHVzJCA9IHRoaXMuY29udGV4dFNlcnZpY2UucmVzb2x2ZSQoKS5waXBlKG1hcChjb250ZXh0ID0+IGNvbnRleHQucHJvcGVydGllcy5TdGF0dXMgPz8gJycpKTtcbiAgICB0aGlzLmlzRWRpdE1vZGUkID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5pc0VkaXRNb2RlJCgpO1xuXG4gICAgdGhpcy5hc3NldHNDb3VudCQgPSB0aGlzLmdldEFzc2V0cyQoKS5waXBlKG1hcChsaW5lSXRlbXMgPT4gbGluZUl0ZW1zLmxlbmd0aCkpO1xuICAgIHRoaXMucHJvZHVjdHMkID0gdGhpcy5nZXREcmFmdEl0ZW1zJCgpLnBpcGUobWFwKGxpbmVJdGVtcyA9PiB0aGlzLmdlbmVyYXRlUHJvZHVjdHMobGluZUl0ZW1zKSkpO1xuXG4gICAgdGhpcy5pc0NvbmZpZ3VyYXRpb25Sb3V0ZSQgPSB0aGlzLnJvdXRlclNlcnZpY2UuaXNDb25maWd1cmF0aW9uUm91dGUkKCk7XG4gICAgdGhpcy5pc0NhcnRSb3V0ZSQgPSB0aGlzLnJvdXRlclNlcnZpY2UuaXNDYXJ0Um91dGUkKCk7XG4gICAgdGhpcy5pc0NhdGFsb2dSb3V0ZSQgPSB0aGlzLnJvdXRlclNlcnZpY2UuaXNDYXRhbG9nUm91dGUkKCk7XG4gICAgdGhpcy5pc0Fzc2V0c1JvdXRlJCA9IHRoaXMucm91dGVyU2VydmljZS5pc0Fzc2V0c1JvdXRlJCgpO1xuICAgIHRoaXMub2JqZWN0RGV0YWlscyQgPSB0aGlzLmdldE9iamVjdERldGFpbHMkKCk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5jb250ZXh0U2VydmljZVxuICAgICAgLnJlc29sdmUkKClcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3llZCQpKVxuICAgICAgLnN1YnNjcmliZShjdHggPT4gdGhpcy5tb2RlJC5uZXh0KGN0eC5tb2RlKSk7XG5cbiAgICAvLyB1cGRhdGUgYXNzZXRQcmljZUxpc3RzIG9uIHF1b3RlRHJhZnQgY2hhbmdlIGluIEFDQ09VTlQgbW9kZVxuICAgIHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdCRcbiAgICAgIC5waXBlKFxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICAgICAgZmlsdGVyKCgpID0+IHRoaXMuaXNBY2NvdW50TW9kZSksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHRoaXMuYXNzZXRQcmljZUxpc3RzJC5uZXh0KHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuYXNzZXRQcmljZUxpc3RzKSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95ZWQkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNBY2NvdW50TW9kZSgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5tb2RlJC52YWx1ZSA9PT0gQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLkFDQ09VTlQ7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzUXVvdGVNb2RlKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUkLnZhbHVlID09PSBDb25maWd1cmF0aW9uQ29udGV4dE1vZGUuUVVPVEU7XG4gIH1cblxuICBwdWJsaWMgZ2V0IGlzQWNjb3VudE1vZGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUkLnBpcGUobWFwKG1vZGUgPT4gbW9kZSA9PT0gQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLkFDQ09VTlQpKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgaXNRdW90ZU1vZGUkKCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiB0aGlzLm1vZGUkLnBpcGUobWFwKG1vZGUgPT4gbW9kZSA9PT0gQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLlFVT1RFKSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0U3BsaXRCdXR0b25BY3Rpb25zKGlzQ2FydFJvdXRlOiBib29sZWFuKTogTWVudUl0ZW1bXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdTYXZlIHRvIFF1b3RlJyxcbiAgICAgICAgY29tbWFuZDogKCk6IHZvaWQgPT4ge1xuICAgICAgICAgIHRoaXMuc2F2ZUJ1dHRvbkNsaWNrSGFuZGxlcihpc0NhcnRSb3V0ZSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBsYWJlbDogJ1N1Ym1pdCBGb3IgQXBwcm92YWwnLFxuICAgICAgICBjb21tYW5kOiAoKTogdm9pZCA9PiB7XG4gICAgICAgICAgdGhpcy5zdWJtaXRCdXR0b25DbGlja0hhbmRsZXIoaXNDYXJ0Um91dGUpO1xuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgbGFiZWw6ICdHZW5lcmF0ZSBEb2N1bWVudCcsXG4gICAgICAgIGNvbW1hbmQ6ICgpOiB2b2lkID0+IHtcbiAgICAgICAgICB0aGlzLmRvY0dlbkJ1dHRvbkNsaWNrSGFuZGxlcihpc0NhcnRSb3V0ZSk7XG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICBwdWJsaWMgYmFjayhvYmplY3RJZD86IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IHRhcmdldElkID0gb2JqZWN0SWQgPz8gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlKCkucHJvcGVydGllcy5JZDtcblxuICAgIGlmICh0YXJnZXRJZCkge1xuICAgICAgd2luZG93LlZFTE9fQkFDS19GTi5hcHBseShudWxsLCBbdGFyZ2V0SWRdKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0U2FsZXNmb3JjZU9iamVjdExpbmsob2JqZWN0SWQ/OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghb2JqZWN0SWQpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICByZXR1cm4gYCR7d2luZG93LmxvY2F0aW9uLm9yaWdpbn0vJHtvYmplY3RJZH1gO1xuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9TaG9wcGluZ0NhcnQoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzUmVhZG9ubHlNb2RlKCkpIHtcbiAgICAgIHRoaXMucm91dGVyU2VydmljZS5uYXZpZ2F0ZVRvU2hvcHBpbmdDYXJ0KCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIG5hdmlnYXRlVG9DYXRhbG9nKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5pc1JlYWRvbmx5TW9kZSgpKSB7XG4gICAgICB0aGlzLnJvdXRlclNlcnZpY2UubmF2aWdhdGVUb0NhdGFsb2coKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgbmF2aWdhdGVUb0Fzc2V0cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuaXNSZWFkb25seU1vZGUoKSkge1xuICAgICAgdGhpcy5yb3V0ZXJTZXJ2aWNlLm5hdmlnYXRlVG9Bc3NldHMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZG9jR2VuQnV0dG9uQ2xpY2tIYW5kbGVyKGlzQ2FydFJvdXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNBY2NvdW50TW9kZSkge1xuICAgICAgaWYgKCF0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmhhc1Vuc2F2ZWRDaGFuZ2VzKSB7XG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93QWNjb3VudE5vQ2hhbmdlc0RpYWxvZygpLnN1YnNjcmliZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dEb2NnZW5BY2NvdW50VW5zYXZlZENoYW5nZXNEaWFsb2coKS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaXNFZGl0TW9kZSgpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0RvY2dlblJlYWRvbmx5RGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpc0NhcnRSb3V0ZSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dEb2NnZW5PdXRzaWRlU2hvcHBpbmdDYXJ0RGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IHNob3VsZE9wZW4kID0gb2YodHJ1ZSk7XG5cbiAgICBpZiAodGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgc2hvdWxkT3BlbiQgPSB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0RvY2dlblVuc2F2ZWRDaGFuZ2VzRGlhbG9nKCkucGlwZShcbiAgICAgICAgc3dpdGNoTWFwKGNvbmZpcm1lZCA9PiB7XG4gICAgICAgICAgaWYgKCFjb25maXJtZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBvZihmYWxzZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLnNhdmVRdW90ZSQodHJ1ZSkucGlwZShtYXAoKCkgPT4gdHJ1ZSkpO1xuICAgICAgICB9KSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgc2hvdWxkT3BlbiRcbiAgICAgIC5waXBlKFxuICAgICAgICBmaXJzdCgpLFxuICAgICAgICB0YXAoc2hvdWxkT3BlbiA9PiBzaG91bGRPcGVuICYmIHRoaXMuaW50ZWdyYXRpb25TdGF0ZS5kaXNwYXRjaChPcGVuRG9jR2VuQWN0aW9uKCkpKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzYXZlQnV0dG9uQ2xpY2tIYW5kbGVyKGlzQ2FydFJvdXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmlzRWRpdE1vZGUoKSkge1xuICAgICAgaWYgKHRoaXMuaXNRdW90ZU1vZGUpIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dRdW90ZVJlYWRvbmx5TW9kZURpYWxvZygpLnN1YnNjcmliZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dSZWFkb25seU1vZGVEaWFsb2coKS5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc1Vwc2VsbFF1b3RlV2l0aG91dENoYW5nZXMoKSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dBY2NvdW50Tm9DaGFuZ2VzRGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNBY2NvdW50TW9kZSAmJiAhdGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNVbnNhdmVkQ2hhbmdlcykge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dBY2NvdW50Tm9DaGFuZ2VzRGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFpc0NhcnRSb3V0ZSkge1xuICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dRdW90ZU91dHNpZGVTaG9wcGluZ0NhcnREaWFsb2coKS5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBsaW5lSXRlbXMgPSB0aGlzLmZsb3dDb25maWd1cmF0aW9uLmdldFNuYXBzaG90KCk7XG5cbiAgICBpZiAoIWxpbmVJdGVtcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93RW1wdHlDYXJ0RGlhbG9nKCkuc3Vic2NyaWJlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5zYXZlUXVvdGUkKCkuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgc3VibWl0QnV0dG9uQ2xpY2tIYW5kbGVyKGlzQ2FydFJvdXRlOiBib29sZWFuKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNRdW90ZU1vZGUgJiYgIXRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaXNFZGl0TW9kZSgpKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd1JlYWRvbmx5UXVvdGVTdWJtaXRGYWlsdXJlRGlhbG9nKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaXNVcHNlbGxRdW90ZVdpdGhvdXRDaGFuZ2VzKCkpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93QWNjb3VudE5vQ2hhbmdlc0RpYWxvZygpLnN1YnNjcmliZSgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmlzQWNjb3VudE1vZGUpIHtcbiAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93QWNjb3VudFN1Ym1pdEZhaWx1cmVEaWFsb2coKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoIWlzQ2FydFJvdXRlKSB7XG4gICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd091dHNpZGVTaG9wcGluZ0NhcnRRdW90ZVN1Ym1pdEZhaWx1cmVEaWFsb2coKS5zdWJzY3JpYmUoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBxdW90ZURyYWZ0ID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0O1xuICAgIGlmICghcXVvdGVEcmFmdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuaXNTdWJtaXRJblByb2dyZXNzJC5uZXh0KHRydWUpO1xuXG4gICAgdGhpcy5xdW90ZUFwaVNlcnZpY2VcbiAgICAgIC5zdWJtaXRRdW90ZShxdW90ZURyYWZ0KVxuICAgICAgLnBpcGUoXG4gICAgICAgIHRhcCgoeyBxdW90ZUlkIH0pID0+IHtcbiAgICAgICAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmhhc1Vuc2F2ZWRDaGFuZ2VzID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5iYWNrKHF1b3RlSWQpO1xuICAgICAgICB9KSxcbiAgICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1N1Ym1pdEluUHJvZ3Jlc3MkLm5leHQoZmFsc2UpKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveWVkJCksXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBwdWJsaWMgc2VsZWN0UHJpY2VMaXN0KHByaWNlTGlzdElkOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLnVwZGF0ZUFjdGl2ZVByaWNlTGlzdChwcmljZUxpc3RJZCk7XG4gIH1cblxuICBwdWJsaWMgdG9nZ2xlQ2FydE92ZXJsYXkoY2FydDogQ2FydFByZXZpZXdDb21wb25lbnQsIGV2ZW50OiBFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIGlmICghdGhpcy5pc1JlYWRvbmx5TW9kZSgpKSB7XG4gICAgICBpZiAoIWNhcnQub3ZlcmxheVBhbmVsLm92ZXJsYXlWaXNpYmxlKSB7XG4gICAgICAgIGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdjbGljaycpKTtcbiAgICAgIH1cbiAgICAgIGNhcnQ/Lm92ZXJsYXlQYW5lbC50b2dnbGUoZXZlbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVF1b3RlJChzdGF5T25QYWdlID0gZmFsc2UpOiBPYnNlcnZhYmxlPHZvaWQ+IHtcbiAgICBjb25zdCBxdW90ZURyYWZ0ID0gdGhpcy5xdW90ZURyYWZ0U2VydmljZS5xdW90ZURyYWZ0Rm9yQWN0aXZlUHJpY2VMaXN0O1xuICAgIGlmICghcXVvdGVEcmFmdCkge1xuICAgICAgcmV0dXJuIG9mKHVuZGVmaW5lZCk7XG4gICAgfVxuXG4gICAgdGhpcy5pc1NhdmVJblByb2dyZXNzJC5uZXh0KHRydWUpO1xuXG4gICAgcmV0dXJuIHRoaXMucXVvdGVBcGlTZXJ2aWNlLnVwc2VydFF1b3RlKHF1b3RlRHJhZnQpLnBpcGUoXG4gICAgICB0YXAoKHsgcXVvdGVJZCB9KSA9PiB7XG4gICAgICAgIHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuaGFzVW5zYXZlZENoYW5nZXMgPSBmYWxzZTtcblxuICAgICAgICBpZiAoIXN0YXlPblBhZ2UpIHtcbiAgICAgICAgICB0aGlzLmJhY2socXVvdGVJZCk7XG4gICAgICAgIH1cbiAgICAgIH0pLFxuICAgICAgZmluYWxpemUoKCkgPT4gdGhpcy5pc1NhdmVJblByb2dyZXNzJC5uZXh0KGZhbHNlKSksXG4gICAgICBtYXAobm9vcCksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBxdWVyeU5hbWUkKG9iamVjdE5hbWU6IHN0cmluZywgaWQ/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHJldHVybiBvZignJyk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2VhcmNoUmVxdWVzdDogU2VhcmNoUmVxdWVzdCA9IHtcbiAgICAgIGNvdW50OiAxLFxuICAgICAgcmF3Q29uZGl0aW9uOiBgSWQgPSAnJHtpZH0nYCxcbiAgICAgIGZpZWxkczogWydOYW1lJ10sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLnNmQXBpU2VydmljZS5xdWVyeTxhbnk+KHNlYXJjaFJlcXVlc3QsIG9iamVjdE5hbWUpLnBpcGUoXG4gICAgICBtYXAocmVzdWx0ID0+IHJlc3VsdFswXT8uTmFtZSA/PyAnJyksXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95ZWQkKSxcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRPYmplY3REZXRhaWxzJCgpOiBPYnNlcnZhYmxlPEhlYWRlck9iamVjdERldGFpbHM+IHtcbiAgICByZXR1cm4gdGhpcy5jb250ZXh0U2VydmljZS5yZXNvbHZlJCgpLnBpcGUoXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldkN0eCwgY3VyckN0eCkgPT4gcHJldkN0eC5wcm9wZXJ0aWVzLklkID09PSBjdXJyQ3R4LnByb3BlcnRpZXMuSWQpLFxuICAgICAgbWFwKGN0eCA9PiB7XG4gICAgICAgIGNvbnN0IGlzQWNjb3VudE1vZGUgPSBjdHgubW9kZSA9PT0gQ29uZmlndXJhdGlvbkNvbnRleHRNb2RlLkFDQ09VTlQ7XG4gICAgICAgIGNvbnN0IGlzUXVvdGVNb2RlID0gY3R4Lm1vZGUgPT09IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZS5RVU9URTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGFjY291bnRJZDogaXNBY2NvdW50TW9kZSA/IGN0eC5wcm9wZXJ0aWVzLklkIDogY3R4LnByb3BlcnRpZXMuQWNjb3VudElkLFxuICAgICAgICAgIG9wcG9ydHVuaXR5SWQ6IGN0eC5wcm9wZXJ0aWVzLk9wcG9ydHVuaXR5SWQsXG4gICAgICAgICAgcXVvdGVJZDogaXNRdW90ZU1vZGUgPyBjdHgucHJvcGVydGllcy5JZCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBxdW90ZU5hbWU6IGlzUXVvdGVNb2RlID8gY3R4LnByb3BlcnRpZXMuTmFtZSA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBxdW90ZU51bWJlcjogaXNRdW90ZU1vZGUgPyBjdHgucHJvcGVydGllcy5RdW90ZU51bWJlciA6IHVuZGVmaW5lZCxcbiAgICAgICAgfTtcbiAgICAgIH0pLFxuICAgICAgc3dpdGNoTWFwKGRldGFpbHMgPT5cbiAgICAgICAgY29tYmluZUxhdGVzdChbXG4gICAgICAgICAgb2YoZGV0YWlscyksXG4gICAgICAgICAgdGhpcy5xdWVyeU5hbWUkKCdBY2NvdW50JywgZGV0YWlscy5hY2NvdW50SWQpLFxuICAgICAgICAgIHRoaXMucXVlcnlOYW1lJCgnT3Bwb3J0dW5pdHknLCBkZXRhaWxzLm9wcG9ydHVuaXR5SWQpLFxuICAgICAgICBdKSxcbiAgICAgICksXG4gICAgICBtYXAoKFtkZXRhaWxzLCBhY2NvdW50TmFtZSwgb3Bwb3J0dW5pdHlOYW1lXSkgPT4gKHsgLi4uZGV0YWlscywgYWNjb3VudE5hbWUsIG9wcG9ydHVuaXR5TmFtZSB9KSksXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0TWV0cmljKHZhbHVlPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gKHZhbHVlID8gTnVtYmVyKHZhbHVlKSA6IDApLnRvRml4ZWQoMik7XG4gIH1cblxuICBwdWJsaWMgZ2V0RHJhZnRJdGVtcyQoKTogT2JzZXJ2YWJsZTxMaW5lSXRlbVtdPiB7XG4gICAgcmV0dXJuIGNvbWJpbmVMYXRlc3QoW1xuICAgICAgdGhpcy5mbG93Q29uZmlndXJhdGlvbi5nZXQoKSxcbiAgICAgIHRoaXMuaW50ZWdyYXRpb25TdGF0ZS5zdGF0ZSQucGlwZShcbiAgICAgICAgbWFwKHN0YXRlID0+IHN0YXRlLm1vZGlmaWVkQXNzZXRzKSxcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSxcbiAgICAgICksXG4gICAgXSkucGlwZShcbiAgICAgIG1hcCgoW2xpbmVJdGVtcywgbW9kaWZpZWRBc3NldHNdKSA9PiB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRUZXJtcyA9IGxpbmVJdGVtcy5yZWR1Y2UoKGFjYzogTGluZUl0ZW1bXSwgbGkpID0+IHtcbiAgICAgICAgICBjb25zdCBhc3NldElkID0gbGkuYXNzZXRJZCB8fCBsaS5vcGVuT3JkZXJMaW5lSXRlbUlkO1xuICAgICAgICAgIGNvbnN0IGlzTW9kaWZpZWQgPSBpc0xpbmVJdGVtTW9kaWZpZWQobGkpO1xuICAgICAgICAgIGNvbnN0IGN1cnJlbnRUZXJtID0gZ2V0T3JpZ2luUGFyZW50KGxpbmVJdGVtcywgbGkpID8/IGxpO1xuXG4gICAgICAgICAgaWYgKGlzTW9kaWZpZWQgfHwgKGFzc2V0SWQgJiYgbW9kaWZpZWRBc3NldHM/Llthc3NldElkXSkpIHtcbiAgICAgICAgICAgIGFjYy5wdXNoKGN1cnJlbnRUZXJtKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgfSwgW10pO1xuICAgICAgICBjb25zdCB1bmlxQ3VycmVudFRlcm1zID0gY3VycmVudFRlcm1zLmZpbHRlcigodmFsdWUsIGluZGV4LCBhcnJheSkgPT4gYXJyYXkuaW5kZXhPZih2YWx1ZSkgPT09IGluZGV4KTtcbiAgICAgICAgcmV0dXJuIHVuaXFDdXJyZW50VGVybXM7XG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgcHVibGljIGdldEFzc2V0cyQoKTogT2JzZXJ2YWJsZTxMaW5lSXRlbVtdPiB7XG4gICAgcmV0dXJuIHRoaXMuZmxvd0NvbmZpZ3VyYXRpb25cbiAgICAgIC5nZXQoKVxuICAgICAgLnBpcGUobWFwKGxpbmVJdGVtcyA9PiBsaW5lSXRlbXMuZmlsdGVyKGxpID0+ICghIWxpLmFzc2V0SWQgfHwgISFsaS5vcGVuT3JkZXJMaW5lSXRlbUlkKSAmJiAhbGkucmFtcEluc3RhbmNlSWQpKSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlUHJvZHVjdHMobGluZUl0ZW1zOiBMaW5lSXRlbVtdKTogSGVhZGVyUHJvZHVjdFtdIHtcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcbiAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApO1xuICAgIGNvbnN0IG5vdyA9IGRhdGUuZ2V0VGltZSgpO1xuICAgIGNvbnN0IHRlcm1QYXJlbnRJZHMgPSBsaW5lSXRlbXMubWFwKGxpID0+IGxpLnJhbXBJbnN0YW5jZUlkKS5maWx0ZXIoQm9vbGVhbik7XG5cbiAgICBjb25zdCBsaW5lSXRlbXNSYW1wSW5zdGFuY2VJZE1hcCA9IGxpbmVJdGVtcy5yZWR1Y2UoKGFjYzogeyBba2V5OiBzdHJpbmddOiBMaW5lSXRlbSB9LCBsaSkgPT4ge1xuICAgICAgYWNjW2xpLnJhbXBJbnN0YW5jZUlkID8/ICcnXSA9IGxpO1xuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG5cbiAgICByZXR1cm4gbGluZUl0ZW1zLnJlZHVjZSgocmVzdWx0OiBIZWFkZXJQcm9kdWN0W10sIGxpKSA9PiB7XG4gICAgICAvLyBmaW5kIG1haW4gdGVybSBsaW5lIGl0ZW1cbiAgICAgIGlmIChsaS5yYW1wSW5zdGFuY2VJZCkge1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICAvLyBmaW5kIGN1cnJlbnQgdGVybSBsaW5lIGl0ZW1cbiAgICAgIGxldCB0YXJnZXQ6IExpbmVJdGVtIHwgdW5kZWZpbmVkID0gbGk7XG4gICAgICB3aGlsZSAodGFyZ2V0ICYmIHRhcmdldC5lbmREYXRlICYmIG5ldyBEYXRlKHRhcmdldC5lbmREYXRlKS5nZXRUaW1lKCkgPD0gbm93KSB7XG4gICAgICAgIHRhcmdldCA9IGxpbmVJdGVtc1JhbXBJbnN0YW5jZUlkTWFwW2xpLmlkXTtcbiAgICAgIH1cblxuICAgICAgaWYgKHRhcmdldCAmJiB0YXJnZXQucHJvZHVjdElkKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICBpZDogdGFyZ2V0LmlkLFxuICAgICAgICAgIHByb2R1Y3RJZDogdGFyZ2V0LnByb2R1Y3RJZCxcbiAgICAgICAgICBuYW1lOiB0YXJnZXQubmFtZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRhcmdldC5wcm9wZXJ0aWVzWycjY29uZmlndXJhYmxlJ10gPT09ICd0cnVlJyxcbiAgICAgICAgICBkZWxldGVkOiB0YXJnZXQuYWN0aW9uQ29kZSA9PT0gJ0RFTEVURScsXG4gICAgICAgICAgaGFzVGVybTogdGVybVBhcmVudElkcy5pbmNsdWRlcyh0YXJnZXQuaWQpLFxuICAgICAgICAgIHF0eTogdGFyZ2V0LnF0eSxcbiAgICAgICAgICBtcnI6IHRoaXMuZm9ybWF0TWV0cmljKHRhcmdldC5wcm9wZXJ0aWVzLlZETV9Ub3RhbF9NUlIpLFxuICAgICAgICAgIG5ycjogdGhpcy5mb3JtYXRNZXRyaWModGFyZ2V0LnByb3BlcnRpZXMuVkRNX1RvdGFsX05SUiksXG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNSZWFkb25seU1vZGUoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIHRoaXMucXVvdGVEcmFmdFNlcnZpY2UucXVvdGVEcmFmdD8uY29udGV4dC5wcm9wZXJ0aWVzLm1vZGUgPT09IENvbmZpZ3VyYXRpb25Db250ZXh0TW9kZS5BQ0NPVU5UICYmXG4gICAgICAhdGhpcy5xdW90ZURyYWZ0U2VydmljZS5oYXNQcm9kdWN0c1xuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGlzVXBzZWxsUXVvdGVXaXRob3V0Q2hhbmdlcygpOiBib29sZWFuIHtcbiAgICBjb25zdCBub1VwZGF0ZXMgPSB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmFjdGl2ZUN1cnJlbnRTdGF0ZS5ldmVyeShsaW5lSXRlbSA9PiBsaW5lSXRlbS5hY3Rpb25Db2RlID09PSAnRVhJU1QnKTtcbiAgICBjb25zdCBzYW1lTnVtYmVyT2ZQcm9kdWN0cyA9XG4gICAgICB0aGlzLnF1b3RlRHJhZnRTZXJ2aWNlLmdldEluaXRpYWxDdXJyZW50U3RhdGUoKS5sZW5ndGggPT09IHRoaXMucXVvdGVEcmFmdFNlcnZpY2UuYWN0aXZlQ3VycmVudFN0YXRlLmxlbmd0aDtcblxuICAgIHJldHVybiBub1VwZGF0ZXMgJiYgc2FtZU51bWJlck9mUHJvZHVjdHM7XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJjb250ZXh0UHJvcGVydGllcyQgfCBhc3luYyBhcyBjb250ZXh0UHJvcGVydGllc1wiPlxuICA8bmctY29udGFpbmVyICpuZ0lmPVwib2JqZWN0RGV0YWlscyQgfCBhc3luYyBhcyBkZXRhaWxzXCI+XG4gICAgPGRpdiBjbGFzcz1cImZsb3ctaW5mb1wiPlxuICAgICAgPG5hdiBjbGFzcz1cIm5hdi1pdGVtIG5hdi1iYWNrXCIgKGNsaWNrKT1cImJhY2soKVwiPlxuICAgICAgICA8aSBjbGFzcz1cIm5hdi1pY29uIHZsLWljb24gdmwtaWNvbi1iYWNrXCI+PC9pPlxuICAgICAgPC9uYXY+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0FjY291bnRNb2RlJCB8IGFzeW5jXCI+XG4gICAgICAgIDxuYXZcbiAgICAgICAgICBjbGFzcz1cImFjY291bnQtbmFtZSBuYXYtaXRlbVwiXG4gICAgICAgICAgW3BUb29sdGlwXT1cImNvbnRleHRQcm9wZXJ0aWVzLk5hbWUgPz8gJydcIlxuICAgICAgICAgIHRvb2x0aXBQb3NpdGlvbj1cImJvdHRvbVwiXG4gICAgICAgICAgW3Nob3dEZWxheV09XCIxMDAwXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cImdldFNhbGVzZm9yY2VPYmplY3RMaW5rKGNvbnRleHRQcm9wZXJ0aWVzLklkKVwiPnt7IGNvbnRleHRQcm9wZXJ0aWVzLk5hbWUgfX08L2E+XG4gICAgICAgIDwvbmF2PlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc1F1b3RlTW9kZSQgfCBhc3luY1wiPlxuICAgICAgICA8c3BhbiBjbGFzcz1cIm5hdi1pdGVtXCI+UXVvdGUgI3t7IGRldGFpbHMucXVvdGVOdW1iZXIgfX08L3NwYW4+XG5cbiAgICAgICAgPHNwYW4gY2xhc3M9XCJkb3Qtc2VwYXJhdG9yXCI+PC9zcGFuPlxuXG4gICAgICAgIDxuYXYgY2xhc3M9XCJuYXYtaXRlbVwiIChjbGljayk9XCJxdW90ZURldGFpbHMudG9nZ2xlKCRldmVudClcIj5cbiAgICAgICAgICA8c3Bhbj57eyBzdGF0dXMkIHwgYXN5bmMgfX08L3NwYW4+XG5cbiAgICAgICAgICA8aSAqbmdJZj1cIiFxdW90ZURldGFpbHMub3ZlcmxheVZpc2libGVcIiBjbGFzcz1cInZsLWljb24gdmwtYXJyb3ctZG93biBpY29uLXdpdGgtbWFyZ2luXCI+PC9pPlxuICAgICAgICAgIDxpICpuZ0lmPVwicXVvdGVEZXRhaWxzLm92ZXJsYXlWaXNpYmxlXCIgY2xhc3M9XCJ2bC1pY29uIHZsLWFycm93LXVwIGljb24td2l0aC1tYXJnaW5cIj48L2k+XG4gICAgICAgIDwvbmF2PlxuXG4gICAgICAgIDxwLW92ZXJsYXlQYW5lbCBzdHlsZUNsYXNzPVwiY2F0YWxvZy1vdmVybGF5IHF1b3RlLWluZm8tb3ZlcmxheVwiICNxdW90ZURldGFpbHM+XG4gICAgICAgICAgPG5nLXRlbXBsYXRlIHBUZW1wbGF0ZT5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJxdW90ZS1pbmZvXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXRsZVwiPlxuICAgICAgICAgICAgICAgIDxzcGFuPlF1b3RlIEluZm9ybWF0aW9uPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2xvc2UtYWN0aW9uXCIgKGNsaWNrKT1cInF1b3RlRGV0YWlscy5oaWRlKClcIj5cbiAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwidmwtaWNvbiB2bC1jcm9zc1wiPjwvaT5cbiAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbHMtcm93XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibGFiZWxcIj5BY2NvdW50IE5hbWU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ2YWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9XCJfYmxhbmtcIiBbaHJlZl09XCJnZXRTYWxlc2ZvcmNlT2JqZWN0TGluayhkZXRhaWxzLmFjY291bnRJZClcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkZXRhaWxzLmFjY291bnROYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+T3Bwb3J0dW5pdHkgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cImdldFNhbGVzZm9yY2VPYmplY3RMaW5rKGRldGFpbHMub3Bwb3J0dW5pdHlOYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRldGFpbHMub3Bwb3J0dW5pdHlOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+UXVvdGUgTmFtZTwvZGl2PlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxhIHRhcmdldD1cIl9ibGFua1wiIFtocmVmXT1cImdldFNhbGVzZm9yY2VPYmplY3RMaW5rKGRldGFpbHMucXVvdGVOYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7IGRldGFpbHMucXVvdGVOYW1lIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxzLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImxhYmVsXCI+UXVvdGUgTnVtYmVyPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGEgdGFyZ2V0PVwiX2JsYW5rXCIgW2hyZWZdPVwiZ2V0U2FsZXNmb3JjZU9iamVjdExpbmsoZGV0YWlscy5xdW90ZU51bWJlcilcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBkZXRhaWxzLnF1b3RlTnVtYmVyIH19XG4gICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgIDwvcC1vdmVybGF5UGFuZWw+XG4gICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbG93LW5hdmlnYXRpb25cIj5cbiAgICAgIDxuZy1jb250YWluZXIgKnZsTGV0PVwiaXNSZWFkb25seU1vZGUkIHwgYXN5bmMgYXMgaXNSZWFkb25seU1vZGVcIj5cbiAgICAgICAgPG5hdlxuICAgICAgICAgIGNsYXNzPVwibmF2LWl0ZW1cIlxuICAgICAgICAgICp2bExldD1cImFzc2V0c0NvdW50JCB8IGFzeW5jIGFzIGFzc2V0c0NvdW50XCJcbiAgICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogKGlzQXNzZXRzUm91dGUkIHwgYXN5bmMpLCBkaXNhYmxlZDogaXNSZWFkb25seU1vZGUgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlVG9Bc3NldHMoKVwiXG4gICAgICAgID5cbiAgICAgICAgICBBc3NldHNcbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiYXNzZXRzQ291bnRcIiBjbGFzcz1cImNvdW50ZXJcIj57eyBhc3NldHNDb3VudCB9fTwvZGl2PlxuICAgICAgICA8L25hdj5cbiAgICAgICAgPG5hdlxuICAgICAgICAgIGNsYXNzPVwibmF2LWl0ZW1cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cInsgYWN0aXZlOiAoaXNDYXRhbG9nUm91dGUkIHwgYXN5bmMpLCBkaXNhYmxlZDogaXNSZWFkb25seU1vZGUgfVwiXG4gICAgICAgICAgKGNsaWNrKT1cIm5hdmlnYXRlVG9DYXRhbG9nKClcIlxuICAgICAgICA+XG4gICAgICAgICAgQ2F0YWxvZ1xuICAgICAgICA8L25hdj5cbiAgICAgICAgPG5hdiBjbGFzcz1cIm5hdi1pdGVtIGRpc2FibGVkXCIgW25nQ2xhc3NdPVwieyBhY3RpdmU6IGlzQ29uZmlndXJhdGlvblJvdXRlJCB8IGFzeW5jIH1cIj5Db25maWd1cmF0b3I8L25hdj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqdmxMZXQ9XCJwcm9kdWN0cyQgfCBhc3luYyBhcyBwcm9kdWN0c1wiPlxuICAgICAgICAgIDxuYXZcbiAgICAgICAgICAgIGNsYXNzPVwibmF2LWl0ZW1cIlxuICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IChpc0NhcnRSb3V0ZSQgfCBhc3luYyksIGRpc2FibGVkOiBpc1JlYWRvbmx5TW9kZSB9XCJcbiAgICAgICAgICAgIChjbGljayk9XCJuYXZpZ2F0ZVRvU2hvcHBpbmdDYXJ0KClcIlxuICAgICAgICAgID5cbiAgICAgICAgICAgIFNob3BwaW5nIENhcnRcbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJwcm9kdWN0cz8ubGVuZ3RoXCIgY2xhc3M9XCJjb3VudGVyXCI+e3sgcHJvZHVjdHM/Lmxlbmd0aCB9fTwvZGl2PlxuXG4gICAgICAgICAgICA8bmF2XG4gICAgICAgICAgICAgIGNsYXNzPVwibmF2LXBvcG92ZXItdG9nZ2xlXCJcbiAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieyBhY3RpdmU6IChpc0NhcnRSb3V0ZSQgfCBhc3luYyksIGRpc2FibGVkOiBpc1JlYWRvbmx5TW9kZSB9XCJcbiAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNhcnRPdmVybGF5KGNhcnQsICRldmVudClcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8aSAqbmdJZj1cIiFjYXJ0Py5vdmVybGF5UGFuZWw/Lm92ZXJsYXlWaXNpYmxlXCIgY2xhc3M9XCJ2bC1pY29uIHZsLWFycm93LWRvd24gaWNvbi13aXRoLW1hcmdpblwiPjwvaT5cbiAgICAgICAgICAgICAgPGkgKm5nSWY9XCJjYXJ0Py5vdmVybGF5UGFuZWw/Lm92ZXJsYXlWaXNpYmxlXCIgY2xhc3M9XCJ2bC1pY29uIHZsLWFycm93LXVwIGljb24td2l0aC1tYXJnaW5cIj48L2k+XG4gICAgICAgICAgICA8L25hdj5cbiAgICAgICAgICA8L25hdj5cblxuICAgICAgICAgIDx2bC1jYXJ0LXByZXZpZXcgI2NhcnQgW3Byb2R1Y3RzXT1cInByb2R1Y3RzID8/IFtdXCI+PC92bC1jYXJ0LXByZXZpZXc+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9kaXY+XG5cbiAgICA8ZGl2IGNsYXNzPVwiZmxvdy1jb250cm9sc1wiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIihpc1JlYWRvbmx5TW9kZSQgfCBhc3luYykgPT09IGZhbHNlXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKnZsTGV0PVwiYWN0aXZlUHJpY2VMaXN0JCB8IGFzeW5jIGFzIHByaWNlTGlzdFwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJwcmljZS1wbGFuXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICp2bExldD1cImFzc2V0UHJpY2VMaXN0cyQgfCBhc3luYyBhcyBhc3NldFByaWNlTGlzdHNcIj5cbiAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgICAgICpuZ0lmPVwiKGlzQWNjb3VudE1vZGUkIHwgYXN5bmMpICYmIGFzc2V0UHJpY2VMaXN0cyAmJiBhc3NldFByaWNlTGlzdHMubGVuZ3RoID4gMTsgZWxzZSBzaW5nbGVQcmljZUxpc3RcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPG5hdiBjbGFzcz1cIm5hdi1pdGVtXCIgKGNsaWNrKT1cInByaWNlTGlzdHNPdmVybGF5Py50b2dnbGUoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgcHJpY2VMaXN0Py5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPGkgKm5nSWY9XCIhcHJpY2VMaXN0c092ZXJsYXk/Lm92ZXJsYXlWaXNpYmxlXCIgY2xhc3M9XCJ2bC1pY29uIHZsLWFycm93LWRvd24gaWNvbi13aXRoLW1hcmdpblwiPjwvaT5cbiAgICAgICAgICAgICAgICAgIDxpICpuZ0lmPVwicHJpY2VMaXN0c092ZXJsYXk/Lm92ZXJsYXlWaXNpYmxlXCIgY2xhc3M9XCJ2bC1pY29uIHZsLWFycm93LXVwIGljb24td2l0aC1tYXJnaW5cIj48L2k+XG4gICAgICAgICAgICAgICAgPC9uYXY+XG5cbiAgICAgICAgICAgICAgICA8cC1vdmVybGF5UGFuZWwgc3R5bGVDbGFzcz1cInByaWNlLWxpc3Qtb3ZlcmxheVwiICNwcmljZUxpc3RzT3ZlcmxheT5cbiAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBwVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBhc3NldFByaWNlTGlzdHNcIlxuICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwicHJpY2UtbGlzdC1vcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5hY3RpdmVdPVwicHJpY2VMaXN0Py5pZCA9PT0gb3B0aW9uLmlkXCJcbiAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VsZWN0UHJpY2VMaXN0KG9wdGlvbi5pZCk7IHByaWNlTGlzdHNPdmVybGF5LmhpZGUoKVwiXG4gICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24ubmFtZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvcC1vdmVybGF5UGFuZWw+XG4gICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjc2luZ2xlUHJpY2VMaXN0PlxuICAgICAgICAgICAgICA8ZGl2Pnt7IHByaWNlTGlzdD8ubmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cblxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cImNvbnRleHRQcm9wZXJ0aWVzLlN0YXJ0RGF0ZVwiPnt7IGNvbnRleHRQcm9wZXJ0aWVzLlN0YXJ0RGF0ZSB8IGRhdGUgOiBkYXRlRm9ybWF0IH19PC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDx2bC1tZXRyaWNzPjwvdmwtbWV0cmljcz5cblxuICAgICAgPG5nLWNvbnRhaW5lciAqdmxMZXQ9XCJpc0NhcnRSb3V0ZSQgfCBhc3luYyBhcyBpc0NhcnRSb3V0ZVwiPlxuICAgICAgICA8bmctY29udGFpbmVyICp2bExldD1cImlzUmVhZG9ubHlNb2RlJCB8IGFzeW5jIGFzIGlzUmVhZG9ubHlNb2RlXCI+XG4gICAgICAgICAgPG5nLWNvbnRhaW5lciAqdmxMZXQ9XCJpc1NhdmVJblByb2dyZXNzJCB8IGFzeW5jIGFzIGlzU2F2ZUluUHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKnZsTGV0PVwiaXNTdWJtaXRJblByb2dyZXNzJCB8IGFzeW5jIGFzIGlzU3VibWl0SW5Qcm9ncmVzc1wiPlxuICAgICAgICAgICAgICA8cC1zcGxpdEJ1dHRvblxuICAgICAgICAgICAgICAgICpuZ0lmPVwiIWlzU2F2ZUluUHJvZ3Jlc3MgJiYgIWlzU3VibWl0SW5Qcm9ncmVzc1wiXG4gICAgICAgICAgICAgICAgI3NwbGl0QnV0dG9uXG4gICAgICAgICAgICAgICAgbGFiZWw9XCJTYXZlIHRvIFF1b3RlXCJcbiAgICAgICAgICAgICAgICAob25DbGljayk9XCJzYXZlQnV0dG9uQ2xpY2tIYW5kbGVyKGlzQ2FydFJvdXRlID09PSB0cnVlKVwiXG4gICAgICAgICAgICAgICAgW21vZGVsXT1cImdldFNwbGl0QnV0dG9uQWN0aW9ucyhpc0NhcnRSb3V0ZSA9PT0gdHJ1ZSlcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc1JlYWRvbmx5TW9kZSA9PT0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cImNhdGFsb2ctc3BsaXQtYnV0dG9uIHAtYnV0dG9uLW91dGxpbmVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mub3BlbmVkXT1cInNwbGl0QnV0dG9uPy5tZW51Py52aXNpYmxlXCJcbiAgICAgICAgICAgICAgICBpY29uPVwidmwtaWNvbiB2bC1hcnJvdy1kb3duXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8L3Atc3BsaXRCdXR0b24+XG5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc1NhdmVJblByb2dyZXNzXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cInNhdmUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBzdHlsZUNsYXNzPVwicC1idXR0b25cIlxuICAgICAgICAgICAgICAgIGxhYmVsPVwiU2F2aW5nXCJcbiAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgPjwvcC1idXR0b24+XG5cbiAgICAgICAgICAgICAgPHAtYnV0dG9uXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJpc1N1Ym1pdEluUHJvZ3Jlc3NcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwic3VibWl0LWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgc3R5bGVDbGFzcz1cInAtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBsYWJlbD1cIlN1Ym1pdHRpbmdcIlxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cInRydWVcIlxuICAgICAgICAgICAgICA+PC9wLWJ1dHRvbj5cbiAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICA8L25nLWNvbnRhaW5lcj5cbjwvbmctY29udGFpbmVyPlxuIl19
@@ -1,6 +1,7 @@
1
1
  import { CommonModule } from '@angular/common';
2
2
  import { NgModule } from '@angular/core';
3
3
  import { LetDirectiveModule } from '@veloceapps/components';
4
+ import { SdkPipesModule } from '@veloceapps/sdk/core';
4
5
  import { ButtonModule } from 'primeng/button';
5
6
  import { OverlayPanelModule } from 'primeng/overlaypanel';
6
7
  import { SplitButtonModule } from 'primeng/splitbutton';
@@ -19,7 +20,8 @@ FlowHeaderModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", versio
19
20
  ButtonModule,
20
21
  CartPreviewModule,
21
22
  SplitButtonModule,
22
- MetricsModule], exports: [FlowHeaderComponent] });
23
+ MetricsModule,
24
+ SdkPipesModule], exports: [FlowHeaderComponent] });
23
25
  FlowHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowHeaderModule, imports: [CommonModule,
24
26
  OverlayPanelModule,
25
27
  LetDirectiveModule,
@@ -27,7 +29,8 @@ FlowHeaderModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", versio
27
29
  ButtonModule,
28
30
  CartPreviewModule,
29
31
  SplitButtonModule,
30
- MetricsModule] });
32
+ MetricsModule,
33
+ SdkPipesModule] });
31
34
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImport: i0, type: FlowHeaderModule, decorators: [{
32
35
  type: NgModule,
33
36
  args: [{
@@ -41,8 +44,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.8", ngImpor
41
44
  CartPreviewModule,
42
45
  SplitButtonModule,
43
46
  MetricsModule,
47
+ SdkPipesModule,
44
48
  ],
45
49
  exports: [FlowHeaderComponent],
46
50
  }]
47
51
  }] });
48
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFdBQVcsQ0FBQzs7QUFnQjFDLE1BQU0sT0FBTyxnQkFBZ0I7OzZHQUFoQixnQkFBZ0I7OEdBQWhCLGdCQUFnQixpQkFiWixtQkFBbUIsYUFFaEMsWUFBWTtRQUNaLGtCQUFrQjtRQUNsQixrQkFBa0I7UUFDbEIsYUFBYTtRQUNiLFlBQVk7UUFDWixpQkFBaUI7UUFDakIsaUJBQWlCO1FBQ2pCLGFBQWEsYUFFTCxtQkFBbUI7OEdBRWxCLGdCQUFnQixZQVh6QixZQUFZO1FBQ1osa0JBQWtCO1FBQ2xCLGtCQUFrQjtRQUNsQixhQUFhO1FBQ2IsWUFBWTtRQUNaLGlCQUFpQjtRQUNqQixpQkFBaUI7UUFDakIsYUFBYTsyRkFJSixnQkFBZ0I7a0JBZDVCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ25DLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLGFBQWE7cUJBQ2Q7b0JBQ0QsT0FBTyxFQUFFLENBQUMsbUJBQW1CLENBQUM7aUJBQy9CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBMZXREaXJlY3RpdmVNb2R1bGUgfSBmcm9tICdAdmVsb2NlYXBwcy9jb21wb25lbnRzJztcbmltcG9ydCB7IEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvYnV0dG9uJztcbmltcG9ydCB7IE92ZXJsYXlQYW5lbE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvb3ZlcmxheXBhbmVsJztcbmltcG9ydCB7IFNwbGl0QnV0dG9uTW9kdWxlIH0gZnJvbSAncHJpbWVuZy9zcGxpdGJ1dHRvbic7XG5pbXBvcnQgeyBUb29sdGlwTW9kdWxlIH0gZnJvbSAncHJpbWVuZy90b29sdGlwJztcbmltcG9ydCB7IENhcnRQcmV2aWV3TW9kdWxlIH0gZnJvbSAnLi9jYXJ0LW92ZXJsYXkvY2FydC1wcmV2aWV3Lm1vZHVsZSc7XG5pbXBvcnQgeyBGbG93SGVhZGVyQ29tcG9uZW50IH0gZnJvbSAnLi9oZWFkZXIuY29tcG9uZW50JztcbmltcG9ydCB7IE1ldHJpY3NNb2R1bGUgfSBmcm9tICcuL21ldHJpY3MnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtGbG93SGVhZGVyQ29tcG9uZW50XSxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBPdmVybGF5UGFuZWxNb2R1bGUsXG4gICAgTGV0RGlyZWN0aXZlTW9kdWxlLFxuICAgIFRvb2x0aXBNb2R1bGUsXG4gICAgQnV0dG9uTW9kdWxlLFxuICAgIENhcnRQcmV2aWV3TW9kdWxlLFxuICAgIFNwbGl0QnV0dG9uTW9kdWxlLFxuICAgIE1ldHJpY3NNb2R1bGUsXG4gIF0sXG4gIGV4cG9ydHM6IFtGbG93SGVhZGVyQ29tcG9uZW50XSxcbn0pXG5leHBvcnQgY2xhc3MgRmxvd0hlYWRlck1vZHVsZSB7fVxuIl19
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVhZGVyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvc2RrL3NyYy9jb21wb25lbnRzL2hlYWRlci9oZWFkZXIubW9kdWxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3pDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDOUMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDMUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBaUIxQyxNQUFNLE9BQU8sZ0JBQWdCOzs2R0FBaEIsZ0JBQWdCOzhHQUFoQixnQkFBZ0IsaUJBZFosbUJBQW1CLGFBRWhDLFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsa0JBQWtCO1FBQ2xCLGFBQWE7UUFDYixZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGlCQUFpQjtRQUNqQixhQUFhO1FBQ2IsY0FBYyxhQUVOLG1CQUFtQjs4R0FFbEIsZ0JBQWdCLFlBWnpCLFlBQVk7UUFDWixrQkFBa0I7UUFDbEIsa0JBQWtCO1FBQ2xCLGFBQWE7UUFDYixZQUFZO1FBQ1osaUJBQWlCO1FBQ2pCLGlCQUFpQjtRQUNqQixhQUFhO1FBQ2IsY0FBYzsyRkFJTCxnQkFBZ0I7a0JBZjVCLFFBQVE7bUJBQUM7b0JBQ1IsWUFBWSxFQUFFLENBQUMsbUJBQW1CLENBQUM7b0JBQ25DLE9BQU8sRUFBRTt3QkFDUCxZQUFZO3dCQUNaLGtCQUFrQjt3QkFDbEIsa0JBQWtCO3dCQUNsQixhQUFhO3dCQUNiLFlBQVk7d0JBQ1osaUJBQWlCO3dCQUNqQixpQkFBaUI7d0JBQ2pCLGFBQWE7d0JBQ2IsY0FBYztxQkFDZjtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztpQkFDL0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgTmdNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IExldERpcmVjdGl2ZU1vZHVsZSB9IGZyb20gJ0B2ZWxvY2VhcHBzL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgU2RrUGlwZXNNb2R1bGUgfSBmcm9tICdAdmVsb2NlYXBwcy9zZGsvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25Nb2R1bGUgfSBmcm9tICdwcmltZW5nL2J1dHRvbic7XG5pbXBvcnQgeyBPdmVybGF5UGFuZWxNb2R1bGUgfSBmcm9tICdwcmltZW5nL292ZXJsYXlwYW5lbCc7XG5pbXBvcnQgeyBTcGxpdEJ1dHRvbk1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvc3BsaXRidXR0b24nO1xuaW1wb3J0IHsgVG9vbHRpcE1vZHVsZSB9IGZyb20gJ3ByaW1lbmcvdG9vbHRpcCc7XG5pbXBvcnQgeyBDYXJ0UHJldmlld01vZHVsZSB9IGZyb20gJy4vY2FydC1vdmVybGF5L2NhcnQtcHJldmlldy5tb2R1bGUnO1xuaW1wb3J0IHsgRmxvd0hlYWRlckNvbXBvbmVudCB9IGZyb20gJy4vaGVhZGVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNZXRyaWNzTW9kdWxlIH0gZnJvbSAnLi9tZXRyaWNzJztcblxuQE5nTW9kdWxlKHtcbiAgZGVjbGFyYXRpb25zOiBbRmxvd0hlYWRlckNvbXBvbmVudF0sXG4gIGltcG9ydHM6IFtcbiAgICBDb21tb25Nb2R1bGUsXG4gICAgT3ZlcmxheVBhbmVsTW9kdWxlLFxuICAgIExldERpcmVjdGl2ZU1vZHVsZSxcbiAgICBUb29sdGlwTW9kdWxlLFxuICAgIEJ1dHRvbk1vZHVsZSxcbiAgICBDYXJ0UHJldmlld01vZHVsZSxcbiAgICBTcGxpdEJ1dHRvbk1vZHVsZSxcbiAgICBNZXRyaWNzTW9kdWxlLFxuICAgIFNka1BpcGVzTW9kdWxlLFxuICBdLFxuICBleHBvcnRzOiBbRmxvd0hlYWRlckNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIEZsb3dIZWFkZXJNb2R1bGUge31cbiJdfQ==