@gnggln/ng-ui-system 1.0.0-alpha.12 → 1.0.0-alpha.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -10,6 +10,8 @@ import * as i1 from "lucide-angular";
10
10
  * Componente wizard che wrappa `UiFormBuilderComponent`
11
11
  * aggiungendo navigazione multi-step, barra di progresso,
12
12
  * validazione per step e sincronizzazione wireless.
13
+ * Più sezioni schema con lo stesso `wizardStep.stepNumber` formano un unico passo
14
+ * (es. più blocchi collassabili per step); metadati del passo dalla prima sezione del gruppo.
13
15
  *
14
16
  * @selector ui-form-wizard
15
17
  *
@@ -57,8 +59,11 @@ export class UiFormWizardComponent {
57
59
  isValid: false,
58
60
  stepErrors: {},
59
61
  };
60
- /** Step ordinati per stepNumber. */
61
- this.wizardSteps = [];
62
+ /**
63
+ * Gruppi di sezioni schema per passo logico del wizard.
64
+ * Sezioni con lo stesso `wizardStep.stepNumber` compongono un unico passo (ordine: come in `schema.sections` dopo sort per numero).
65
+ */
66
+ this.wizardStepGroups = [];
62
67
  /** Dati accumulati del form. */
63
68
  this.accumulatedData = {};
64
69
  /**
@@ -76,24 +81,24 @@ export class UiFormWizardComponent {
76
81
  this._cachedStepSchema) {
77
82
  return this._cachedStepSchema;
78
83
  }
79
- const step = this.wizardSteps[this.state.currentStep];
80
- if (!step)
84
+ const group = this.wizardStepGroups[this.state.currentStep];
85
+ if (!group?.length)
81
86
  return null;
82
87
  this._cachedStepSchema = {
83
88
  id: this.schema.id + '-step-' + this.state.currentStep,
84
- sections: [step],
89
+ sections: group,
85
90
  config: { ...this.schema.config, hideFooter: true, showButtons: false },
86
91
  };
87
92
  this._cachedStepIndex = this.state.currentStep;
88
93
  return this._cachedStepSchema;
89
94
  }
90
95
  get currentStepTitle() {
91
- const step = this.wizardSteps[this.state.currentStep];
92
- return step?.wizardStep?.stepTitle || step?.title || '';
96
+ const primary = this.wizardStepGroups[this.state.currentStep]?.[0];
97
+ return primary?.wizardStep?.stepTitle || primary?.title || '';
93
98
  }
94
99
  get currentStepDescription() {
95
- const step = this.wizardSteps[this.state.currentStep];
96
- return step?.wizardStep?.stepDescription || step?.description || '';
100
+ const primary = this.wizardStepGroups[this.state.currentStep]?.[0];
101
+ return primary?.wizardStep?.stepDescription || primary?.description || '';
97
102
  }
98
103
  get isLastStep() {
99
104
  return this.state.currentStep >= this.state.totalSteps - 1;
@@ -103,15 +108,21 @@ export class UiFormWizardComponent {
103
108
  return 100;
104
109
  return Math.round((this.state.currentStep / (this.state.totalSteps - 1)) * 100);
105
110
  }
111
+ /**
112
+ * Dati passati al form builder: unione tra valori forniti dal consumer e
113
+ * stato accumulato tra gli step. Senza questo, tornando indietro il builder
114
+ * riceverebbe solo `initialData` e ricreerebbe i campi vuoti, pur avendo
115
+ * i valori ancora in `accumulatedData`.
116
+ */
117
+ get mergedInitialDataForBuilder() {
118
+ return { ...this.initialData, ...this.accumulatedData };
119
+ }
106
120
  // ─── Lifecycle ──────────────────────────────────────────────────
107
121
  ngOnInit() {
108
122
  if (!this.schema)
109
123
  return;
110
- // Estrai e ordina gli step
111
- this.wizardSteps = this.schema.sections
112
- .filter((s) => s.wizardStep)
113
- .sort((a, b) => (a.wizardStep.stepNumber || 0) - (b.wizardStep.stepNumber || 0));
114
- this.state.totalSteps = this.wizardSteps.length;
124
+ this.wizardStepGroups = this.buildWizardStepGroups(this.schema.sections);
125
+ this.state.totalSteps = this.wizardStepGroups.length;
115
126
  this.accumulatedData = { ...this.initialData };
116
127
  // Sincronizzazione wireless
117
128
  if (this.wizardConfig.wizardId) {
@@ -243,14 +254,15 @@ export class UiFormWizardComponent {
243
254
  }
244
255
  async validateCurrentStep() {
245
256
  this.formBuilder?.validateAllFields();
246
- const step = this.wizardSteps[this.state.currentStep];
247
- const validateCustomComponents = step?.wizardStep?.validation?.validateCustomComponents !== false;
248
- const customFieldKeys = new Set(this.getCustomFieldKeysForStep(step));
257
+ const group = this.wizardStepGroups[this.state.currentStep];
258
+ const primary = group?.[0];
259
+ const validateCustomComponents = primary?.wizardStep?.validation?.validateCustomComponents !== false;
260
+ const customFieldKeys = new Set(this.getCustomFieldKeysForGroup(group));
249
261
  const isFormValid = validateCustomComponents
250
262
  ? (this.formBuilder?.isFormValid() ?? true)
251
263
  : (this.formBuilder?.isFormValidExcludingFieldKeys(customFieldKeys) ??
252
264
  true);
253
- const customFnName = step?.wizardStep?.customValidationFn;
265
+ const customFnName = primary?.wizardStep?.customValidationFn;
254
266
  if (customFnName && this.customValidationMethods[customFnName]) {
255
267
  const customValid = await this.customValidationMethods[customFnName](this.accumulatedData, this.state.currentStep, isFormValid);
256
268
  if (!customValid) {
@@ -261,10 +273,10 @@ export class UiFormWizardComponent {
261
273
  return false;
262
274
  }
263
275
  }
264
- if (!isFormValid && step?.wizardStep?.validation?.required !== false) {
276
+ if (!isFormValid && primary?.wizardStep?.validation?.required !== false) {
265
277
  let details = this.formBuilder?.getDetailedFormErrors() || [];
266
- if (!validateCustomComponents && step) {
267
- details = this.filterErrorDetailsExcludingCustomFields(details, step, customFieldKeys);
278
+ if (!validateCustomComponents && group?.length) {
279
+ details = this.filterErrorDetailsExcludingCustomFields(details, group, customFieldKeys);
268
280
  }
269
281
  const errors = details.flatMap((e) => e.errors);
270
282
  this.stepValidationFailed.emit({
@@ -279,19 +291,58 @@ export class UiFormWizardComponent {
279
291
  });
280
292
  return true;
281
293
  }
282
- /** Chiavi dei campi `custom` nello step (per escluderli dalla validazione wizard se richiesto). */
283
- getCustomFieldKeysForStep(step) {
284
- if (!step?.fields?.length)
294
+ /**
295
+ * Raggruppa le sezioni con `wizardStep` per `stepNumber` (ordine stabile per numero, poi ordine di apparizione nello schema).
296
+ */
297
+ buildWizardStepGroups(sections) {
298
+ const withWizard = sections.filter((s) => s.wizardStep);
299
+ withWizard.sort((a, b) => (a.wizardStep.stepNumber || 0) - (b.wizardStep.stepNumber || 0));
300
+ const groups = [];
301
+ for (const s of withWizard) {
302
+ const num = s.wizardStep.stepNumber;
303
+ const prev = groups[groups.length - 1];
304
+ if (prev?.length &&
305
+ (prev[0].wizardStep.stepNumber || 0) === (num || 0)) {
306
+ prev.push(s);
307
+ }
308
+ else {
309
+ groups.push([s]);
310
+ }
311
+ }
312
+ return groups;
313
+ }
314
+ /** Chiavi dei campi `custom` in tutte le sezioni del passo corrente. */
315
+ getCustomFieldKeysForGroup(group) {
316
+ if (!group?.length)
285
317
  return [];
286
- return step.fields.filter((f) => f.type === 'custom').map((f) => f.key);
318
+ const keys = [];
319
+ for (const section of group) {
320
+ for (const f of section.fields || []) {
321
+ if (f.type === 'custom')
322
+ keys.push(f.key);
323
+ }
324
+ }
325
+ return keys;
287
326
  }
288
327
  /** Rimuove dagli errori i campi custom quando `validateCustomComponents` è false. */
289
- filterErrorDetailsExcludingCustomFields(details, step, customKeys) {
328
+ filterErrorDetailsExcludingCustomFields(details, group, customKeys) {
329
+ const sectionIds = group.map((s) => s.id);
290
330
  return details.filter((d) => {
291
- const logicalKey = this.logicalFieldKeyFromDetailKey(d.fieldKey, step.id);
331
+ const logicalKey = this.logicalFieldKeyFromDetailKeyForGroup(d.fieldKey, sectionIds);
292
332
  return !customKeys.has(logicalKey);
293
333
  });
294
334
  }
335
+ /**
336
+ * Risolve la chiave logica del campo rispetto a tutte le sezioni del gruppo (campi flat o repeatable).
337
+ */
338
+ logicalFieldKeyFromDetailKeyForGroup(fieldKey, sectionIds) {
339
+ for (const id of sectionIds) {
340
+ const k = this.logicalFieldKeyFromDetailKey(fieldKey, id);
341
+ if (k !== fieldKey)
342
+ return k;
343
+ }
344
+ return fieldKey;
345
+ }
295
346
  /** Estrae la chiave campo da `fieldKey` flat o `sectionId[i].fieldKey`. */
296
347
  logicalFieldKeyFromDetailKey(fieldKey, sectionId) {
297
348
  const re = new RegExp(`^${this.escapeRegExp(sectionId)}\\[\\d+\\]\\.(.+)$`);
@@ -313,9 +364,9 @@ export class UiFormWizardComponent {
313
364
  const syncData = {
314
365
  wizardId: this.wizardConfig.wizardId,
315
366
  wizardState: { ...this.state },
316
- wizardSteps: this.wizardSteps.map((s) => ({
317
- title: s.wizardStep?.stepTitle || s.title,
318
- description: s.wizardStep?.stepDescription || s.description,
367
+ wizardSteps: this.wizardStepGroups.map((g) => ({
368
+ title: g[0]?.wizardStep?.stepTitle || g[0]?.title,
369
+ description: g[0]?.wizardStep?.stepDescription || g[0]?.description,
319
370
  })),
320
371
  isWizardMode: true,
321
372
  schema: this.schema,
@@ -344,7 +395,11 @@ export class UiFormWizardComponent {
344
395
  } @else {
345
396
  <!-- Step indicators -->
346
397
  <div class="ui-form-wizard__steps">
347
- @for (step of wizardSteps; track $index; let i = $index) {
398
+ @for (
399
+ group of wizardStepGroups;
400
+ track $index;
401
+ let i = $index
402
+ ) {
348
403
  <div
349
404
  class="ui-form-wizard__step"
350
405
  [class.ui-form-wizard__step--current]="
@@ -366,8 +421,8 @@ export class UiFormWizardComponent {
366
421
  </div>
367
422
  <div class="ui-form-wizard__step-label">
368
423
  {{
369
- step.wizardStep?.stepTitle ||
370
- step.title ||
424
+ group[0].wizardStep?.stepTitle ||
425
+ group[0].title ||
371
426
  'Step ' + (i + 1)
372
427
  }}
373
428
  </div>
@@ -395,7 +450,7 @@ export class UiFormWizardComponent {
395
450
  <!-- Form builder per lo step corrente -->
396
451
  <ui-form-builder
397
452
  [schema]="currentStepSchema!"
398
- [initialData]="initialData"
453
+ [initialData]="mergedInitialDataForBuilder"
399
454
  [readonly]="readonly"
400
455
  [disabled]="disabled"
401
456
  [loadingFor]="loadingFor"
@@ -483,7 +538,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
483
538
  } @else {
484
539
  <!-- Step indicators -->
485
540
  <div class="ui-form-wizard__steps">
486
- @for (step of wizardSteps; track $index; let i = $index) {
541
+ @for (
542
+ group of wizardStepGroups;
543
+ track $index;
544
+ let i = $index
545
+ ) {
487
546
  <div
488
547
  class="ui-form-wizard__step"
489
548
  [class.ui-form-wizard__step--current]="
@@ -505,8 +564,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
505
564
  </div>
506
565
  <div class="ui-form-wizard__step-label">
507
566
  {{
508
- step.wizardStep?.stepTitle ||
509
- step.title ||
567
+ group[0].wizardStep?.stepTitle ||
568
+ group[0].title ||
510
569
  'Step ' + (i + 1)
511
570
  }}
512
571
  </div>
@@ -534,7 +593,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
534
593
  <!-- Form builder per lo step corrente -->
535
594
  <ui-form-builder
536
595
  [schema]="currentStepSchema!"
537
- [initialData]="initialData"
596
+ [initialData]="mergedInitialDataForBuilder"
538
597
  [readonly]="readonly"
539
598
  [disabled]="disabled"
540
599
  [loadingFor]="loadingFor"
@@ -637,4 +696,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
637
696
  type: HostListener,
638
697
  args: ['document:keydown', ['$event']]
639
698
  }] } });
640
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS13aXphcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvZm9ybS13aXphcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsTUFBTSxFQUVOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWdCbEUsT0FBTyxFQUNMLG1CQUFtQixHQUVwQixNQUFNLGdDQUFnQyxDQUFDOzs7QUFFeEM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFnSkgsTUFBTSxPQUFPLHFCQUFxQjtJQS9JbEM7UUFnSm1CLFFBQUcsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNoQyxlQUFVLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDekMsYUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7UUFZaEQsNkNBQTZDO1FBQ3BDLDRCQUF1QixHQUF5QyxFQUFFLENBQUM7UUFFNUUscUJBQXFCO1FBQ1osZ0JBQVcsR0FBZSxFQUFFLENBQUM7UUFFdEMsNkJBQTZCO1FBQ3BCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFFMUIsMEJBQTBCO1FBQ2pCLGFBQVEsR0FBRyxLQUFLLENBQUM7UUFF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Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1SVQscy9GQXpJUyxtQkFBbUIsZ1BBQUUsaUJBQWlCLHVNQUFFLHNCQUFzQjs7NEZBNEk3RCxxQkFBcUI7a0JBL0lqQyxTQUFTOytCQUNFLGdCQUFnQixjQUNkLElBQUksV0FDUCxDQUFDLG1CQUFtQixFQUFFLGlCQUFpQixFQUFFLHNCQUFzQixDQUFDLGlCQUMxRCxpQkFBaUIsQ0FBQyxJQUFJLFlBQzNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1SVQ7OEJBUWtDLFdBQVc7c0JBQTdDLFNBQVM7dUJBQUMsc0JBQXNCO2dCQUt4QixNQUFNO3NCQUFkLEtBQUs7Z0JBR0csWUFBWTtzQkFBcEIsS0FBSztnQkFHRyx1QkFBdUI7c0JBQS9CLEtBQUs7Z0JBR0csV0FBVztzQkFBbkIsS0FBSztnQkFHRyxRQUFRO3NCQUFoQixLQUFLO2dCQUdHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBR0csVUFBVTtzQkFBbEIsS0FBSztnQkFHRyxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBR0csMkJBQTJCO3NCQUFuQyxLQUFLO2dCQUlJLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBSUcsY0FBYztzQkFBdkIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQXFIUCxpQkFBaUI7c0JBRGhCLFlBQVk7dUJBQUMsa0JBQWtCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gIENvbXBvbmVudCxcclxuICBJbnB1dCxcclxuICBPdXRwdXQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uSW5pdCxcclxuICBPbkRlc3Ryb3ksXHJcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbiAgVmlld0NoaWxkLFxyXG4gIGluamVjdCxcclxuICBUZW1wbGF0ZVJlZixcclxuICBIb3N0TGlzdGVuZXIsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEx1Y2lkZUFuZ3VsYXJNb2R1bGUgfSBmcm9tICdsdWNpZGUtYW5ndWxhcic7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBVaUJ1dHRvbkNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvYnV0dG9uL2luZGV4JztcclxuXHJcbmltcG9ydCB7IFVpRm9ybUJ1aWxkZXJDb21wb25lbnQgfSBmcm9tICcuL2Zvcm0tYnVpbGRlci5jb21wb25lbnQnO1xyXG5pbXBvcnQge1xyXG4gIFVpRm9ybVNjaGVtYSxcclxuICBVaUZvcm1TZWN0aW9uLFxyXG4gIFVpRm9ybURhdGEsXHJcbiAgVWlXaXphcmRDb25maWcsXHJcbiAgVWlXaXphcmRTdGF0ZSxcclxuICBVaVdpemFyZFN0ZXBDaGFuZ2VFdmVudCxcclxuICBVaVdpemFyZFN0ZXBDb21wbGV0ZUV2ZW50LFxyXG4gIFVpV2l6YXJkVmFsaWRhdGlvbkZuLFxyXG4gIFVpRm9ybUN1c3RvbUV2ZW50LFxyXG59IGZyb20gJy4vdHlwZXMvc2NoZW1hLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBVaUZvcm1FcnJvckRldGFpbCxcclxuICBVaUZvcm1WYWxpZGF0aW9uU3RhdGUsXHJcbn0gZnJvbSAnLi90eXBlcy92YWxpZGF0aW9uLnR5cGVzJztcclxuaW1wb3J0IHtcclxuICBVaVdpemFyZFN5bmNTZXJ2aWNlLFxyXG4gIFVpV2l6YXJkU3luY0RhdGEsXHJcbn0gZnJvbSAnLi9zZXJ2aWNlcy93aXphcmQtc3luYy5zZXJ2aWNlJztcclxuXHJcbi8qKlxyXG4gKiBDb21wb25lbnRlIHdpemFyZCBjaGUgd3JhcHBhIGBVaUZvcm1CdWlsZGVyQ29tcG9uZW50YFxyXG4gKiBhZ2dpdW5nZW5kbyBuYXZpZ2F6aW9uZSBtdWx0aS1zdGVwLCBiYXJyYSBkaSBwcm9ncmVzc28sXHJcbiAqIHZhbGlkYXppb25lIHBlciBzdGVwIGUgc2luY3Jvbml6emF6aW9uZSB3aXJlbGVzcy5cclxuICpcclxuICogQHNlbGVjdG9yIHVpLWZvcm0td2l6YXJkXHJcbiAqXHJcbiAqIEBleGFtcGxlXHJcbiAqIGBgYGh0bWxcclxuICogPHVpLWZvcm0td2l6YXJkXHJcbiAqICAgW3NjaGVtYV09XCJ3aXphcmRTY2hlbWFcIlxyXG4gKiAgIFt3aXphcmRDb25maWddPVwid2l6YXJkQ29uZmlnXCJcclxuICogICAod2l6YXJkQ29tcGxldGUpPVwib25Db21wbGV0ZSgkZXZlbnQpXCJcclxuICogICAoc3RlcENoYW5nZSk9XCJvblN0ZXBDaGFuZ2UoJGV2ZW50KVwiXHJcbiAqIC8+XHJcbiAqIGBgYFxyXG4gKi9cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd1aS1mb3JtLXdpemFyZCcsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbTHVjaWRlQW5ndWxhck1vZHVsZSwgVWlCdXR0b25Db21wb25lbnQsIFVpRm9ybUJ1aWxkZXJDb21wb25lbnRdLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbiAgdGVtcGxhdGU6IGBcclxuICAgIEBpZiAoc2NoZW1hICYmIHdpemFyZENvbmZpZykge1xyXG4gICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRcIj5cclxuICAgICAgICA8IS0tIEhlYWRlciB3aXphcmQgKG5hc2Nvc3RvIHNlIHdpcmVsZXNzKSAtLT5cclxuICAgICAgICBAaWYgKCF3aXphcmRDb25maWcud2lyZWxlc3NIZWFkaW5nKSB7XHJcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX2hlYWRlclwiPlxyXG4gICAgICAgICAgICBAaWYgKHdpemFyZENvbmZpZy5zaG93UHJvZ3Jlc3MgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgPCEtLSBCYXJyYSBwcm9ncmVzc28gbGluZWFyZSAtLT5cclxuICAgICAgICAgICAgICBAaWYgKHdpemFyZENvbmZpZy5wcm9ncmVzc1N0eWxlICE9PSAnc3RlcHMnKSB7XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3Byb2dyZXNzLWJhclwiPlxyXG4gICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fcHJvZ3Jlc3MtZmlsbFwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0eWxlLndpZHRoLiVdPVwicHJvZ3Jlc3NQZXJjZW50XCJcclxuICAgICAgICAgICAgICAgICAgPjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19wcm9ncmVzcy10ZXh0XCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IHByb2dyZXNzUGVyY2VudCB9fSUgY29tcGxldGF0b1xyXG4gICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgPCEtLSBTdGVwIGluZGljYXRvcnMgLS0+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXBzXCI+XHJcbiAgICAgICAgICAgICAgICAgIEBmb3IgKHN0ZXAgb2Ygd2l6YXJkU3RlcHM7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy51aS1mb3JtLXdpemFyZF9fc3RlcC0tY3VycmVudF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgaSA9PT0gc3RhdGUuY3VycmVudFN0ZXBcclxuICAgICAgICAgICAgICAgICAgICAgIFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudWktZm9ybS13aXphcmRfX3N0ZXAtLWNvbXBsZXRlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUuY29tcGxldGVkU3RlcHMuaGFzKGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnVpLWZvcm0td2l6YXJkX19zdGVwLS12aXNpdGVkXT1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZS52aXNpdGVkU3RlcHMuaGFzKGkpXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgID5cclxuICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC1jaXJjbGVcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzdGF0ZS5jb21wbGV0ZWRTdGVwcy5oYXMoaSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bHVjaWRlLWljb24gbmFtZT1cImNoZWNrXCIgW3NpemVdPVwiMTZcIiAvPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj57eyBpICsgMSB9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXAtbGFiZWxcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdGVwLndpemFyZFN0ZXA/LnN0ZXBUaXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RlcC50aXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ZXAgJyArIChpICsgMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDwhLS0gSW5mbyBzdGVwIGNvcnJlbnRlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXAtaW5mb1wiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLXRpdGxlXCI+e3sgY3VycmVudFN0ZXBUaXRsZSB9fTwvaDI+XHJcbiAgICAgICAgICAgICAgQGlmIChjdXJyZW50U3RlcERlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRTdGVwRGVzY3JpcHRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC1jb3VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICBQYXNzbyB7eyBzdGF0ZS5jdXJyZW50U3RlcCArIDEgfX0gZGkge3sgc3RhdGUudG90YWxTdGVwcyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19jb250ZW50XCI+XHJcbiAgICAgICAgICA8IS0tIEZvcm0gYnVpbGRlciBwZXIgbG8gc3RlcCBjb3JyZW50ZSAtLT5cclxuICAgICAgICAgIDx1aS1mb3JtLWJ1aWxkZXJcclxuICAgICAgICAgICAgW3NjaGVtYV09XCJjdXJyZW50U3RlcFNjaGVtYSFcIlxyXG4gICAgICAgICAgICBbaW5pdGlhbERhdGFdPVwiaW5pdGlhbERhdGFcIlxyXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxyXG4gICAgICAgICAgICBbbG9hZGluZ0Zvcl09XCJsb2FkaW5nRm9yXCJcclxuICAgICAgICAgICAgW2N1c3RvbUZpZWxkVGVtcGxhdGVzXT1cImN1c3RvbUZpZWxkVGVtcGxhdGVzXCJcclxuICAgICAgICAgICAgW2N1c3RvbUZpZWxkVGVtcGxhdGVGYWxsYmFja109XCJjdXN0b21GaWVsZFRlbXBsYXRlRmFsbGJhY2tcIlxyXG4gICAgICAgICAgICAodmFsdWVDaGFuZ2UpPVwib25WYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKHZhbGlkYXRpb25DaGFuZ2UpPVwib25WYWxpZGF0aW9uQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgICAgICAoY3VzdG9tRXZlbnQpPVwiY3VzdG9tRXZlbnQuZW1pdCgkZXZlbnQpXCJcclxuICAgICAgICAgIC8+XHJcblxyXG4gICAgICAgICAgPCEtLSBGb290ZXIgbmF2aWdhemlvbmUgLS0+XHJcbiAgICAgICAgICBAaWYgKHdpemFyZENvbmZpZy5zaG93TmF2aWdhdGlvbkJ1dHRvbnMgIT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fZm9vdGVyXCI+XHJcbiAgICAgICAgICAgICAgQGlmIChcclxuICAgICAgICAgICAgICAgIHdpemFyZENvbmZpZy5hbGxvd0JhY2tOYXZpZ2F0aW9uICE9PSBmYWxzZSAmJlxyXG4gICAgICAgICAgICAgICAgc3RhdGUuY3VycmVudFN0ZXAgPiAwXHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3tcclxuICAgICAgICAgICAgICAgICAgICB3aXphcmRDb25maWcuYnV0dG9uTGFiZWxzPy5wcmV2aW91cyB8fCAnSW5kaWV0cm8nXHJcbiAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgdmFyaWFudD1cIm91dGxpbmVcIlxyXG4gICAgICAgICAgICAgICAgICBpY29uPVwiY2hldnJvbi1sZWZ0XCJcclxuICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9QcmV2aW91c1N0ZXAoKVwiXHJcbiAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgPGRpdj48L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fZm9vdGVyLXJpZ2h0XCI+XHJcbiAgICAgICAgICAgICAgICBAaWYgKHdpemFyZENvbmZpZy5hdXRvU2F2ZSAmJiB3aXphcmRDb25maWcuYnV0dG9uTGFiZWxzPy5zYXZlKSB7XHJcbiAgICAgICAgICAgICAgICAgIDx1aS1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBbbGFiZWxdPVwid2l6YXJkQ29uZmlnLmJ1dHRvbkxhYmVscyEuc2F2ZSFcIlxyXG4gICAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2F2ZUN1cnJlbnRTdGVwKClcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgQGlmIChpc0xhc3RTdGVwKSB7XHJcbiAgICAgICAgICAgICAgICAgIDx1aS1idXR0b25cclxuICAgICAgICAgICAgICAgICAgICBsYWJlbD1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgICB3aXphcmRDb25maWcuYnV0dG9uTGFiZWxzPy5maW5pc2ggfHwgJ0NvbXBsZXRhJ1xyXG4gICAgICAgICAgICAgICAgICAgIH19XCJcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZWNrXCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uUG9zaXRpb249XCJ0cmFpbGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImZpbmlzaFdpemFyZCgpXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7eyB3aXphcmRDb25maWcuYnV0dG9uTGFiZWxzPy5uZXh0IHx8ICdBdmFudGknIH19XCJcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwicHJpbWFyeVwiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tcmlnaHRcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb25Qb3NpdGlvbj1cInRyYWlsaW5nXCJcclxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZ29Ub05leHRTdGVwKClcIlxyXG4gICAgICAgICAgICAgICAgICAvPlxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgIH1cclxuICAgICAgICA8L2Rpdj5cclxuICAgICAgPC9kaXY+XHJcbiAgICB9XHJcbiAgYCxcclxuICBzdHlsZVVybDogJy4vZm9ybS13aXphcmQuY29tcG9uZW50LnNjc3MnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVWlGb3JtV2l6YXJkQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHdpemFyZFN5bmMgPSBpbmplY3QoVWlXaXphcmRTeW5jU2VydmljZSk7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoVWlGb3JtQnVpbGRlckNvbXBvbmVudCkgZm9ybUJ1aWxkZXI/OiBVaUZvcm1CdWlsZGVyQ29tcG9uZW50O1xyXG5cclxuICAvLyDilIDilIDilIAgSW5wdXQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIC8qKiBTY2hlbWEgY29tcGxldG8gZGVsIGZvcm0gKHR1dHRlIGxlIHNlemlvbmkgY29uIHdpemFyZFN0ZXApLiAqL1xyXG4gIEBJbnB1dCgpIHNjaGVtYSE6IFVpRm9ybVNjaGVtYTtcclxuXHJcbiAgLyoqIENvbmZpZ3VyYXppb25lIGRlbCB3aXphcmQuICovXHJcbiAgQElucHV0KCkgd2l6YXJkQ29uZmlnITogVWlXaXphcmRDb25maWc7XHJcblxyXG4gIC8qKiBNZXRvZGkgZGkgdmFsaWRhemlvbmUgY3VzdG9tIHBlciBzdGVwLiAqL1xyXG4gIEBJbnB1dCgpIGN1c3RvbVZhbGlkYXRpb25NZXRob2RzOiBSZWNvcmQ8c3RyaW5nLCBVaVdpemFyZFZhbGlkYXRpb25Gbj4gPSB7fTtcclxuXHJcbiAgLyoqIERhdGkgaW5pemlhbGkuICovXHJcbiAgQElucHV0KCkgaW5pdGlhbERhdGE6IFVpRm9ybURhdGEgPSB7fTtcclxuXHJcbiAgLyoqIE1vZGFsaXRhIHNvbGEgbGV0dHVyYS4gKi9cclxuICBASW5wdXQoKSByZWFkb25seSA9IGZhbHNlO1xyXG5cclxuICAvKiogU3RhdG8gZGlzYWJpbGl0YXRvLiAqL1xyXG4gIEBJbnB1dCgpIGRpc2FibGVkID0gZmFsc2U7XHJcblxyXG4gIC8qKiBQdWxzYW50ZSBpbiBjYXJpY2FtZW50by4gKi9cclxuICBASW5wdXQoKSBsb2FkaW5nRm9yOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcclxuXHJcbiAgLyoqIFRlbXBsYXRlIHBlciBjYW1waSBgdHlwZTogJ2N1c3RvbSdgIChpbm9sdHJvIGFsIGZvcm0gYnVpbGRlcikuICovXHJcbiAgQElucHV0KCkgY3VzdG9tRmllbGRUZW1wbGF0ZXM6IFJlY29yZDxzdHJpbmcsIFRlbXBsYXRlUmVmPHVua25vd24+PiA9IHt9O1xyXG5cclxuICAvKiogRmFsbGJhY2sgdGVtcGxhdGUgcGVyIGNhbXBpIGN1c3RvbSAoaW5vbHRybyBhbCBmb3JtIGJ1aWxkZXIpLiAqL1xyXG4gIEBJbnB1dCgpIGN1c3RvbUZpZWxkVGVtcGxhdGVGYWxsYmFjaz86IFRlbXBsYXRlUmVmPHVua25vd24+O1xyXG5cclxuICAvLyDilIDilIDilIAgT3V0cHV0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBAT3V0cHV0KCkgc3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VWlXaXphcmRTdGVwQ2hhbmdlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHN0ZXBDb21wbGV0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VWlXaXphcmRTdGVwQ29tcGxldGVFdmVudD4oKTtcclxuICBAT3V0cHV0KCkgc3RlcFZhbGlkYXRpb25GYWlsZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHtcclxuICAgIHN0ZXA6IG51bWJlcjtcclxuICAgIGVycm9yczogc3RyaW5nW107XHJcbiAgfT4oKTtcclxuICBAT3V0cHV0KCkgd2l6YXJkQ29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFVpRm9ybURhdGE+KCk7XHJcbiAgQE91dHB1dCgpIHZhbHVlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVaUZvcm1EYXRhPigpO1xyXG4gIEBPdXRwdXQoKSB2YWxpZGF0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxVaUZvcm1WYWxpZGF0aW9uU3RhdGU+KCk7XHJcbiAgQE91dHB1dCgpIGN1c3RvbUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxVaUZvcm1DdXN0b21FdmVudD4oKTtcclxuXHJcbiAgLy8g4pSA4pSA4pSAIFN0YXRvIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBzdGF0ZTogVWlXaXphcmRTdGF0ZSA9IHtcclxuICAgIGN1cnJlbnRTdGVwOiAwLFxyXG4gICAgdG90YWxTdGVwczogMCxcclxuICAgIGNvbXBsZXRlZFN0ZXBzOiBuZXcgU2V0PG51bWJlcj4oKSxcclxuICAgIHZpc2l0ZWRTdGVwczogbmV3IFNldDxudW1iZXI+KFswXSksXHJcbiAgICBpc1ZhbGlkOiBmYWxzZSxcclxuICAgIHN0ZXBFcnJvcnM6IHt9LFxyXG4gIH07XHJcblxyXG4gIC8qKiBTdGVwIG9yZGluYXRpIHBlciBzdGVwTnVtYmVyLiAqL1xyXG4gIHdpemFyZFN0ZXBzOiBVaUZvcm1TZWN0aW9uW10gPSBbXTtcclxuXHJcbiAgLyoqIERhdGkgYWNjdW11bGF0aSBkZWwgZm9ybS4gKi9cclxuICBwcml2YXRlIGFjY3VtdWxhdGVkRGF0YTogVWlGb3JtRGF0YSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBTY2hlbWEgY2FjaGF0byBwZXIgbG8gc3RlcCBjb3JyZW50ZS5cclxuICAgKiBFdml0YSBkaSBjcmVhcmUgdW4gbnVvdm8gb2dnZXR0byBhZCBvZ25pIGNpY2xvIGRpIGNoYW5nZSBkZXRlY3Rpb24sXHJcbiAgICogY29zYSBjaGUgY2F1c2VyZWJiZSByZWJ1aWxkIGluZmluaXRpIG5lbCBmb3JtIGJ1aWxkZXIuXHJcbiAgICovXHJcbiAgX2NhY2hlZFN0ZXBTY2hlbWE6IFVpRm9ybVNjaGVtYSB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2NhY2hlZFN0ZXBJbmRleDogbnVtYmVyID0gLTE7XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBHZXR0ZXIgY2FsY29sYXRpIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBnZXQgY3VycmVudFN0ZXBTY2hlbWEoKTogVWlGb3JtU2NoZW1hIHwgbnVsbCB7XHJcbiAgICAvLyBTZSBsbyBzdGVwIG5vbiBlIGNhbWJpYXRvLCByZXN0aXR1aXNjaSBsbyBzY2hlbWEgY2FjaGF0b1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLl9jYWNoZWRTdGVwSW5kZXggPT09IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAgJiZcclxuICAgICAgdGhpcy5fY2FjaGVkU3RlcFNjaGVtYVxyXG4gICAgKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9jYWNoZWRTdGVwU2NoZW1hO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLndpemFyZFN0ZXBzW3RoaXMuc3RhdGUuY3VycmVudFN0ZXBdO1xyXG4gICAgaWYgKCFzdGVwKSByZXR1cm4gbnVsbDtcclxuXHJcbiAgICB0aGlzLl9jYWNoZWRTdGVwU2NoZW1hID0ge1xyXG4gICAgICBpZDogdGhpcy5zY2hlbWEuaWQgKyAnLXN0ZXAtJyArIHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgIHNlY3Rpb25zOiBbc3RlcF0sXHJcbiAgICAgIGNvbmZpZzogeyAuLi50aGlzLnNjaGVtYS5jb25maWcsIGhpZGVGb290ZXI6IHRydWUsIHNob3dCdXR0b25zOiBmYWxzZSB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2NhY2hlZFN0ZXBJbmRleCA9IHRoaXMuc3RhdGUuY3VycmVudFN0ZXA7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3RlcFNjaGVtYTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50U3RlcFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzdGVwID0gdGhpcy53aXphcmRTdGVwc1t0aGlzLnN0YXRlLmN1cnJlbnRTdGVwXTtcclxuICAgIHJldHVybiBzdGVwPy53aXphcmRTdGVwPy5zdGVwVGl0bGUgfHwgc3RlcD8udGl0bGUgfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXQgY3VycmVudFN0ZXBEZXNjcmlwdGlvbigpOiBzdHJpbmcge1xyXG4gICAgY29uc3Qgc3RlcCA9IHRoaXMud2l6YXJkU3RlcHNbdGhpcy5zdGF0ZS5jdXJyZW50U3RlcF07XHJcbiAgICByZXR1cm4gc3RlcD8ud2l6YXJkU3RlcD8uc3RlcERlc2NyaXB0aW9uIHx8IHN0ZXA/LmRlc2NyaXB0aW9uIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGlzTGFzdFN0ZXAoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCA+PSB0aGlzLnN0YXRlLnRvdGFsU3RlcHMgLSAxO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHByb2dyZXNzUGVyY2VudCgpOiBudW1iZXIge1xyXG4gICAgaWYgKHRoaXMuc3RhdGUudG90YWxTdGVwcyA8PSAxKSByZXR1cm4gMTAwO1xyXG4gICAgcmV0dXJuIE1hdGgucm91bmQoXHJcbiAgICAgICh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwIC8gKHRoaXMuc3RhdGUudG90YWxTdGVwcyAtIDEpKSAqIDEwMCxcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBuZ09uSW5pdCgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zY2hlbWEpIHJldHVybjtcclxuXHJcbiAgICAvLyBFc3RyYWkgZSBvcmRpbmEgZ2xpIHN0ZXBcclxuICAgIHRoaXMud2l6YXJkU3RlcHMgPSB0aGlzLnNjaGVtYS5zZWN0aW9uc1xyXG4gICAgICAuZmlsdGVyKChzKSA9PiBzLndpemFyZFN0ZXApXHJcbiAgICAgIC5zb3J0KFxyXG4gICAgICAgIChhLCBiKSA9PlxyXG4gICAgICAgICAgKGEud2l6YXJkU3RlcCEuc3RlcE51bWJlciB8fCAwKSAtIChiLndpemFyZFN0ZXAhLnN0ZXBOdW1iZXIgfHwgMCksXHJcbiAgICAgICk7XHJcblxyXG4gICAgdGhpcy5zdGF0ZS50b3RhbFN0ZXBzID0gdGhpcy53aXphcmRTdGVwcy5sZW5ndGg7XHJcbiAgICB0aGlzLmFjY3VtdWxhdGVkRGF0YSA9IHsgLi4udGhpcy5pbml0aWFsRGF0YSB9O1xyXG5cclxuICAgIC8vIFNpbmNyb25penphemlvbmUgd2lyZWxlc3NcclxuICAgIGlmICh0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCkge1xyXG4gICAgICB0aGlzLnN5bmNXaXphcmRTdGF0ZSgpO1xyXG5cclxuICAgICAgLy8gQXNjb2x0YSBuYXZpZ2F6aW9uZSBlc3Rlcm5hXHJcbiAgICAgIHRoaXMud2l6YXJkU3luY1xyXG4gICAgICAgIC5nZXRXaXphcmRTdGF0ZSQodGhpcy53aXphcmRDb25maWcud2l6YXJkSWQpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEud2l6YXJkU3RhdGUuY3VycmVudFN0ZXAgIT09IHRoaXMuc3RhdGUuY3VycmVudFN0ZXApIHtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcChkYXRhLndpemFyZFN0YXRlLmN1cnJlbnRTdGVwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWc/LndpemFyZElkKSB7XHJcbiAgICAgIHRoaXMud2l6YXJkU3luYy51bnJlZ2lzdGVyV2l6YXJkKHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjb3JjaWF0b2lhOiBDdHJsICsgRnJlY2NpYSBzaW5pc3RyYS9kZXN0cmEgcGVyIG5hdmlnYXJlIGNvbWUgaSBwdWxzYW50aVxyXG4gICAqIEluZGlldHJvIC8gQXZhbnRpIChzdWxsJ3VsdGltbyBzdGVwLCBBdmFudGkgZXF1aXZhbGUgYSBDb21wbGV0YSkuXHJcbiAgICogSWdub3JhdGEgc2UgaWwgZm9jdXMgw6ggaW4gdW4gY2FtcG8gZGkgaW5wdXQgcGVyIG5vbiBpbnRlcmZlcmlyZSBjb24gbGEgZGlnaXRhemlvbmUuXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zY2hlbWEgfHwgIXRoaXMud2l6YXJkQ29uZmlnIHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGlmICh0aGlzLndpemFyZENvbmZpZy5zaG93TmF2aWdhdGlvbkJ1dHRvbnMgPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICBpZiAoIWV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmIChldmVudC5rZXkgIT09ICdBcnJvd0xlZnQnICYmIGV2ZW50LmtleSAhPT0gJ0Fycm93UmlnaHQnKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXRhYmxlS2V5Ym9hcmRUYXJnZXQoZXZlbnQudGFyZ2V0KSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XHJcbiAgICAgIGlmICh0aGlzLndpemFyZENvbmZpZy5hbGxvd0JhY2tOYXZpZ2F0aW9uID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5jdXJyZW50U3RlcCA8PSAwKSByZXR1cm47XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMuZ29Ub1ByZXZpb3VzU3RlcCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXJyb3dSaWdodFxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICh0aGlzLmlzTGFzdFN0ZXApIHtcclxuICAgICAgdm9pZCB0aGlzLmZpbmlzaFdpemFyZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdm9pZCB0aGlzLmdvVG9OZXh0U3RlcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRydWUgc2UgaWwgdGFyZ2V0IGRlbCBrZXlkb3duIMOoIHVuIGVsZW1lbnRvIGRvdmUgbGEgZGlnaXRhemlvbmUgaGEgcHJpb3JpdMOgIHN1bGxhIHNob3J0Y3V0IHdpemFyZC4gKi9cclxuICBwcml2YXRlIGlzRWRpdGFibGVLZXlib2FyZFRhcmdldCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0YXJnZXQgfHwgISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGVsID0gdGFyZ2V0O1xyXG4gICAgaWYgKGVsLmlzQ29udGVudEVkaXRhYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgIGNvbnN0IHRhZyA9IGVsLnRhZ05hbWU7XHJcbiAgICBpZiAodGFnID09PSAnSU5QVVQnIHx8IHRhZyA9PT0gJ1RFWFRBUkVBJyB8fCB0YWcgPT09ICdTRUxFQ1QnKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBOYXZpZ2F6aW9uZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgLyoqIFZhaSBhbGxvIHN0ZXAgc3VjY2Vzc2l2byBjb24gdmFsaWRhemlvbmUuICovXHJcbiAgYXN5bmMgZ29Ub05leHRTdGVwKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuaXNMYXN0U3RlcCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIFZhbGlkYSBzdGVwIGNvcnJlbnRlXHJcbiAgICBpZiAoIShhd2FpdCB0aGlzLnZhbGlkYXRlQ3VycmVudFN0ZXAoKSkpIHJldHVybjtcclxuXHJcbiAgICAvLyBTYWx2YSBkYXRpIHN0ZXAgY29ycmVudGVcclxuICAgIHRoaXMuc3RhdGUuY29tcGxldGVkU3RlcHMuYWRkKHRoaXMuc3RhdGUuY3VycmVudFN0ZXApO1xyXG4gICAgYXdhaXQgdGhpcy5hdXRvU2F2ZUlmTmVlZGVkKCk7XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcCh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwICsgMSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG9ybmEgYWxsbyBzdGVwIHByZWNlZGVudGUuICovXHJcbiAgZ29Ub1ByZXZpb3VzU3RlcCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwIDw9IDApIHJldHVybjtcclxuICAgIHRoaXMubmF2aWdhdGVUb1N0ZXAodGhpcy5zdGF0ZS5jdXJyZW50U3RlcCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENvbXBsZXRhIGlsIHdpemFyZC4gKi9cclxuICBhc3luYyBmaW5pc2hXaXphcmQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIShhd2FpdCB0aGlzLnZhbGlkYXRlQ3VycmVudFN0ZXAoKSkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnN0YXRlLmNvbXBsZXRlZFN0ZXBzLmFkZCh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwKTtcclxuICAgIGF3YWl0IHRoaXMuYXV0b1NhdmVJZk5lZWRlZCgpO1xyXG5cclxuICAgIHRoaXMud2l6YXJkQ29tcGxldGUuZW1pdCh0aGlzLmFjY3VtdWxhdGVkRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKiogU2FsdmEgbG8gc3RlcCBjb3JyZW50ZSBtYW51YWxtZW50ZS4gKi9cclxuICBhc3luYyBzYXZlQ3VycmVudFN0ZXAoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcub25TdGVwU2F2ZSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtQnVpbGRlcj8uZ2V0Rm9ybVZhbHVlKCkgfHwge307XHJcbiAgICAgIGF3YWl0IHRoaXMud2l6YXJkQ29uZmlnLm9uU3RlcFNhdmUoZGF0YSwgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ2FsbGJhY2sgZm9ybSBidWlsZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBvblZhbHVlQ2hhbmdlKGRhdGE6IFVpRm9ybURhdGEpOiB2b2lkIHtcclxuICAgIHRoaXMuYWNjdW11bGF0ZWREYXRhID0geyAuLi50aGlzLmFjY3VtdWxhdGVkRGF0YSwgLi4uZGF0YSB9O1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuYWNjdW11bGF0ZWREYXRhKTtcclxuICB9XHJcblxyXG4gIG9uVmFsaWRhdGlvbkNoYW5nZShzdGF0ZTogVWlGb3JtVmFsaWRhdGlvblN0YXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlLmlzVmFsaWQgPSBzdGF0ZS52YWxpZDtcclxuICAgIHRoaXMudmFsaWRhdGlvbkNoYW5nZS5lbWl0KHN0YXRlKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBOYXZpZ2F6aW9uZSBpbnRlcm5hIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlVG9TdGVwKHRhcmdldFN0ZXA6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRhcmdldFN0ZXAgPCAwIHx8IHRhcmdldFN0ZXAgPj0gdGhpcy5zdGF0ZS50b3RhbFN0ZXBzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZnJvbSA9IHRoaXMuc3RhdGUuY3VycmVudFN0ZXA7XHJcbiAgICB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwID0gdGFyZ2V0U3RlcDtcclxuICAgIHRoaXMuc3RhdGUudmlzaXRlZFN0ZXBzLmFkZCh0YXJnZXRTdGVwKTtcclxuXHJcbiAgICAvLyBJbnZhbGlkYSBsYSBjYWNoZSBwZXIgZm9yemFyZSBsYSBjcmVhemlvbmUgZGkgdW4gbnVvdm8gc2NoZW1hXHJcbiAgICB0aGlzLl9jYWNoZWRTdGVwU2NoZW1hID0gbnVsbDtcclxuICAgIHRoaXMuX2NhY2hlZFN0ZXBJbmRleCA9IC0xO1xyXG5cclxuICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KHtcclxuICAgICAgZnJvbSxcclxuICAgICAgdG86IHRhcmdldFN0ZXAsXHJcbiAgICAgIGRpcmVjdGlvbjogdGFyZ2V0U3RlcCA+IGZyb20gPyAnbmV4dCcgOiAncHJldmlvdXMnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zeW5jV2l6YXJkU3RhdGUoKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUN1cnJlbnRTdGVwKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5mb3JtQnVpbGRlcj8udmFsaWRhdGVBbGxGaWVsZHMoKTtcclxuICAgIGNvbnN0IHN0ZXAgPSB0aGlzLndpemFyZFN0ZXBzW3RoaXMuc3RhdGUuY3VycmVudFN0ZXBdO1xyXG4gICAgY29uc3QgdmFsaWRhdGVDdXN0b21Db21wb25lbnRzID1cclxuICAgICAgc3RlcD8ud2l6YXJkU3RlcD8udmFsaWRhdGlvbj8udmFsaWRhdGVDdXN0b21Db21wb25lbnRzICE9PSBmYWxzZTtcclxuICAgIGNvbnN0IGN1c3RvbUZpZWxkS2V5cyA9IG5ldyBTZXQodGhpcy5nZXRDdXN0b21GaWVsZEtleXNGb3JTdGVwKHN0ZXApKTtcclxuXHJcbiAgICBjb25zdCBpc0Zvcm1WYWxpZCA9IHZhbGlkYXRlQ3VzdG9tQ29tcG9uZW50c1xyXG4gICAgICA/ICh0aGlzLmZvcm1CdWlsZGVyPy5pc0Zvcm1WYWxpZCgpID8/IHRydWUpXHJcbiAgICAgIDogKHRoaXMuZm9ybUJ1aWxkZXI/LmlzRm9ybVZhbGlkRXhjbHVkaW5nRmllbGRLZXlzKGN1c3RvbUZpZWxkS2V5cykgPz9cclxuICAgICAgICB0cnVlKTtcclxuXHJcbiAgICBjb25zdCBjdXN0b21Gbk5hbWUgPSBzdGVwPy53aXphcmRTdGVwPy5jdXN0b21WYWxpZGF0aW9uRm47XHJcblxyXG4gICAgaWYgKGN1c3RvbUZuTmFtZSAmJiB0aGlzLmN1c3RvbVZhbGlkYXRpb25NZXRob2RzW2N1c3RvbUZuTmFtZV0pIHtcclxuICAgICAgY29uc3QgY3VzdG9tVmFsaWQgPSBhd2FpdCB0aGlzLmN1c3RvbVZhbGlkYXRpb25NZXRob2RzW2N1c3RvbUZuTmFtZV0oXHJcbiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZERhdGEsXHJcbiAgICAgICAgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgICAgICBpc0Zvcm1WYWxpZCxcclxuICAgICAgKTtcclxuXHJcbiAgICAgIGlmICghY3VzdG9tVmFsaWQpIHtcclxuICAgICAgICB0aGlzLnN0ZXBWYWxpZGF0aW9uRmFpbGVkLmVtaXQoe1xyXG4gICAgICAgICAgc3RlcDogdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgICAgICAgIGVycm9yczogWydWYWxpZGF6aW9uZSBjdXN0b20gZmFsbGl0YSddLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmICghaXNGb3JtVmFsaWQgJiYgc3RlcD8ud2l6YXJkU3RlcD8udmFsaWRhdGlvbj8ucmVxdWlyZWQgIT09IGZhbHNlKSB7XHJcbiAgICAgIGxldCBkZXRhaWxzID0gdGhpcy5mb3JtQnVpbGRlcj8uZ2V0RGV0YWlsZWRGb3JtRXJyb3JzKCkgfHwgW107XHJcbiAgICAgIGlmICghdmFsaWRhdGVDdXN0b21Db21wb25lbnRzICYmIHN0ZXApIHtcclxuICAgICAgICBkZXRhaWxzID0gdGhpcy5maWx0ZXJFcnJvckRldGFpbHNFeGNsdWRpbmdDdXN0b21GaWVsZHMoXHJcbiAgICAgICAgICBkZXRhaWxzLFxyXG4gICAgICAgICAgc3RlcCxcclxuICAgICAgICAgIGN1c3RvbUZpZWxkS2V5cyxcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcbiAgICAgIGNvbnN0IGVycm9ycyA9IGRldGFpbHMuZmxhdE1hcCgoZSkgPT4gZS5lcnJvcnMpO1xyXG4gICAgICB0aGlzLnN0ZXBWYWxpZGF0aW9uRmFpbGVkLmVtaXQoe1xyXG4gICAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgZXJyb3JzLFxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3RlcENvbXBsZXRlLmVtaXQoe1xyXG4gICAgICBzdGVwOiB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgICBkYXRhOiB0aGlzLmZvcm1CdWlsZGVyPy5nZXRGb3JtVmFsdWUoKSB8fCB7fSxcclxuICAgIH0pO1xyXG5cclxuICAgIHJldHVybiB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIENoaWF2aSBkZWkgY2FtcGkgYGN1c3RvbWAgbmVsbG8gc3RlcCAocGVyIGVzY2x1ZGVybGkgZGFsbGEgdmFsaWRhemlvbmUgd2l6YXJkIHNlIHJpY2hpZXN0bykuICovXHJcbiAgcHJpdmF0ZSBnZXRDdXN0b21GaWVsZEtleXNGb3JTdGVwKHN0ZXA6IFVpRm9ybVNlY3Rpb24gfCB1bmRlZmluZWQpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIXN0ZXA/LmZpZWxkcz8ubGVuZ3RoKSByZXR1cm4gW107XHJcbiAgICByZXR1cm4gc3RlcC5maWVsZHMuZmlsdGVyKChmKSA9PiBmLnR5cGUgPT09ICdjdXN0b20nKS5tYXAoKGYpID0+IGYua2V5KTtcclxuICB9XHJcblxyXG4gIC8qKiBSaW11b3ZlIGRhZ2xpIGVycm9yaSBpIGNhbXBpIGN1c3RvbSBxdWFuZG8gYHZhbGlkYXRlQ3VzdG9tQ29tcG9uZW50c2Agw6ggZmFsc2UuICovXHJcbiAgcHJpdmF0ZSBmaWx0ZXJFcnJvckRldGFpbHNFeGNsdWRpbmdDdXN0b21GaWVsZHMoXHJcbiAgICBkZXRhaWxzOiBVaUZvcm1FcnJvckRldGFpbFtdLFxyXG4gICAgc3RlcDogVWlGb3JtU2VjdGlvbixcclxuICAgIGN1c3RvbUtleXM6IFNldDxzdHJpbmc+LFxyXG4gICk6IFVpRm9ybUVycm9yRGV0YWlsW10ge1xyXG4gICAgcmV0dXJuIGRldGFpbHMuZmlsdGVyKChkKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxvZ2ljYWxLZXkgPSB0aGlzLmxvZ2ljYWxGaWVsZEtleUZyb21EZXRhaWxLZXkoZC5maWVsZEtleSwgc3RlcC5pZCk7XHJcbiAgICAgIHJldHVybiAhY3VzdG9tS2V5cy5oYXMobG9naWNhbEtleSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKiBFc3RyYWUgbGEgY2hpYXZlIGNhbXBvIGRhIGBmaWVsZEtleWAgZmxhdCBvIGBzZWN0aW9uSWRbaV0uZmllbGRLZXlgLiAqL1xyXG4gIHByaXZhdGUgbG9naWNhbEZpZWxkS2V5RnJvbURldGFpbEtleShcclxuICAgIGZpZWxkS2V5OiBzdHJpbmcsXHJcbiAgICBzZWN0aW9uSWQ6IHN0cmluZyxcclxuICApOiBzdHJpbmcge1xyXG4gICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGBeJHt0aGlzLmVzY2FwZVJlZ0V4cChzZWN0aW9uSWQpfVxcXFxbXFxcXGQrXFxcXF1cXFxcLiguKykkYCk7XHJcbiAgICBjb25zdCBtID0gZmllbGRLZXkubWF0Y2gocmUpO1xyXG4gICAgcmV0dXJuIG0gPyBtWzFdIDogZmllbGRLZXk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVzY2FwZVJlZ0V4cChzOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHMucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xcXVxcXFxdL2csICdcXFxcJCYnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXN5bmMgYXV0b1NhdmVJZk5lZWRlZCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGlmICh0aGlzLndpemFyZENvbmZpZy5hdXRvU2F2ZSAmJiB0aGlzLndpemFyZENvbmZpZy5vblN0ZXBTYXZlKSB7XHJcbiAgICAgIGNvbnN0IGRhdGEgPSB0aGlzLmZvcm1CdWlsZGVyPy5nZXRGb3JtVmFsdWUoKSB8fCB7fTtcclxuICAgICAgYXdhaXQgdGhpcy53aXphcmRDb25maWcub25TdGVwU2F2ZShkYXRhLCB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3luY1dpemFyZFN0YXRlKCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCkgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHN5bmNEYXRhOiBVaVdpemFyZFN5bmNEYXRhID0ge1xyXG4gICAgICB3aXphcmRJZDogdGhpcy53aXphcmRDb25maWcud2l6YXJkSWQsXHJcbiAgICAgIHdpemFyZFN0YXRlOiB7IC4uLnRoaXMuc3RhdGUgfSxcclxuICAgICAgd2l6YXJkU3RlcHM6IHRoaXMud2l6YXJkU3RlcHMubWFwKChzKSA9PiAoe1xyXG4gICAgICAgIHRpdGxlOiBzLndpemFyZFN0ZXA/LnN0ZXBUaXRsZSB8fCBzLnRpdGxlLFxyXG4gICAgICAgIGRlc2NyaXB0aW9uOiBzLndpemFyZFN0ZXA/LnN0ZXBEZXNjcmlwdGlvbiB8fCBzLmRlc2NyaXB0aW9uLFxyXG4gICAgICB9KSksXHJcbiAgICAgIGlzV2l6YXJkTW9kZTogdHJ1ZSxcclxuICAgICAgc2NoZW1hOiB0aGlzLnNjaGVtYSxcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy53aXphcmRTeW5jLnJlZ2lzdGVyV2l6YXJkKHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLCBzeW5jRGF0YSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
699
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS13aXphcmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvZm9ybS13aXphcmQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBR1osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixTQUFTLEVBQ1QsTUFBTSxFQUVOLFlBQVksR0FDYixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQWdCbEUsT0FBTyxFQUNMLG1CQUFtQixHQUVwQixNQUFNLGdDQUFnQyxDQUFDOzs7QUFFeEM7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQW9KSCxNQUFNLE9BQU8scUJBQXFCO0lBbkpsQztRQW9KbUIsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLGVBQVUsR0FBRyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUN6QyxhQUFRLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQVloRCw2Q0FBNkM7UUFDcEMsNEJBQXVCLEdBQXlDLEVBQUUsQ0FBQztRQUU1RSxxQkFBcUI7UUFDWixnQkFBVyxHQUFlLEVBQUUsQ0FBQztRQUV0Qyw2QkFBNkI7UUFDcEIsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUUxQiwwQkFBMEI7UUFDakIsYUFBUSxHQUFHLEtBQUssQ0FBQztR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UUFBUTtzQkFBaEIsS0FBSztnQkFHRyxVQUFVO3NCQUFsQixLQUFLO2dCQUdHLG9CQUFvQjtzQkFBNUIsS0FBSztnQkFHRywyQkFBMkI7c0JBQW5DLEtBQUs7Z0JBSUksVUFBVTtzQkFBbkIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLG9CQUFvQjtzQkFBN0IsTUFBTTtnQkFJRyxjQUFjO3NCQUF2QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZ0JBQWdCO3NCQUF6QixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBMkhQLGlCQUFpQjtzQkFEaEIsWUFBWTt1QkFBQyxrQkFBa0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIElucHV0LFxyXG4gIE91dHB1dCxcclxuICBFdmVudEVtaXR0ZXIsXHJcbiAgT25Jbml0LFxyXG4gIE9uRGVzdHJveSxcclxuICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxuICBWaWV3Q2hpbGQsXHJcbiAgaW5qZWN0LFxyXG4gIFRlbXBsYXRlUmVmLFxyXG4gIEhvc3RMaXN0ZW5lcixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTHVjaWRlQW5ndWxhck1vZHVsZSB9IGZyb20gJ2x1Y2lkZS1hbmd1bGFyJztcclxuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFVpQnV0dG9uQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9idXR0b24vaW5kZXgnO1xyXG5cclxuaW1wb3J0IHsgVWlGb3JtQnVpbGRlckNvbXBvbmVudCB9IGZyb20gJy4vZm9ybS1idWlsZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7XHJcbiAgVWlGb3JtU2NoZW1hLFxyXG4gIFVpRm9ybVNlY3Rpb24sXHJcbiAgVWlGb3JtRGF0YSxcclxuICBVaVdpemFyZENvbmZpZyxcclxuICBVaVdpemFyZFN0YXRlLFxyXG4gIFVpV2l6YXJkU3RlcENoYW5nZUV2ZW50LFxyXG4gIFVpV2l6YXJkU3RlcENvbXBsZXRlRXZlbnQsXHJcbiAgVWlXaXphcmRWYWxpZGF0aW9uRm4sXHJcbiAgVWlGb3JtQ3VzdG9tRXZlbnQsXHJcbn0gZnJvbSAnLi90eXBlcy9zY2hlbWEudHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIFVpRm9ybUVycm9yRGV0YWlsLFxyXG4gIFVpRm9ybVZhbGlkYXRpb25TdGF0ZSxcclxufSBmcm9tICcuL3R5cGVzL3ZhbGlkYXRpb24udHlwZXMnO1xyXG5pbXBvcnQge1xyXG4gIFVpV2l6YXJkU3luY1NlcnZpY2UsXHJcbiAgVWlXaXphcmRTeW5jRGF0YSxcclxufSBmcm9tICcuL3NlcnZpY2VzL3dpemFyZC1zeW5jLnNlcnZpY2UnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudGUgd2l6YXJkIGNoZSB3cmFwcGEgYFVpRm9ybUJ1aWxkZXJDb21wb25lbnRgXHJcbiAqIGFnZ2l1bmdlbmRvIG5hdmlnYXppb25lIG11bHRpLXN0ZXAsIGJhcnJhIGRpIHByb2dyZXNzbyxcclxuICogdmFsaWRhemlvbmUgcGVyIHN0ZXAgZSBzaW5jcm9uaXp6YXppb25lIHdpcmVsZXNzLlxyXG4gKiBQacO5IHNlemlvbmkgc2NoZW1hIGNvbiBsbyBzdGVzc28gYHdpemFyZFN0ZXAuc3RlcE51bWJlcmAgZm9ybWFubyB1biB1bmljbyBwYXNzb1xyXG4gKiAoZXMuIHBpw7kgYmxvY2NoaSBjb2xsYXNzYWJpbGkgcGVyIHN0ZXApOyBtZXRhZGF0aSBkZWwgcGFzc28gZGFsbGEgcHJpbWEgc2V6aW9uZSBkZWwgZ3J1cHBvLlxyXG4gKlxyXG4gKiBAc2VsZWN0b3IgdWktZm9ybS13aXphcmRcclxuICpcclxuICogQGV4YW1wbGVcclxuICogYGBgaHRtbFxyXG4gKiA8dWktZm9ybS13aXphcmRcclxuICogICBbc2NoZW1hXT1cIndpemFyZFNjaGVtYVwiXHJcbiAqICAgW3dpemFyZENvbmZpZ109XCJ3aXphcmRDb25maWdcIlxyXG4gKiAgICh3aXphcmRDb21wbGV0ZSk9XCJvbkNvbXBsZXRlKCRldmVudClcIlxyXG4gKiAgIChzdGVwQ2hhbmdlKT1cIm9uU3RlcENoYW5nZSgkZXZlbnQpXCJcclxuICogLz5cclxuICogYGBgXHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ3VpLWZvcm0td2l6YXJkJyxcclxuICBzdGFuZGFsb25lOiB0cnVlLFxyXG4gIGltcG9ydHM6IFtMdWNpZGVBbmd1bGFyTW9kdWxlLCBVaUJ1dHRvbkNvbXBvbmVudCwgVWlGb3JtQnVpbGRlckNvbXBvbmVudF0sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxuICB0ZW1wbGF0ZTogYFxyXG4gICAgQGlmIChzY2hlbWEgJiYgd2l6YXJkQ29uZmlnKSB7XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZFwiPlxyXG4gICAgICAgIDwhLS0gSGVhZGVyIHdpemFyZCAobmFzY29zdG8gc2Ugd2lyZWxlc3MpIC0tPlxyXG4gICAgICAgIEBpZiAoIXdpemFyZENvbmZpZy53aXJlbGVzc0hlYWRpbmcpIHtcclxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9faGVhZGVyXCI+XHJcbiAgICAgICAgICAgIEBpZiAod2l6YXJkQ29uZmlnLnNob3dQcm9ncmVzcyAhPT0gZmFsc2UpIHtcclxuICAgICAgICAgICAgICA8IS0tIEJhcnJhIHByb2dyZXNzbyBsaW5lYXJlIC0tPlxyXG4gICAgICAgICAgICAgIEBpZiAod2l6YXJkQ29uZmlnLnByb2dyZXNzU3R5bGUgIT09ICdzdGVwcycpIHtcclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fcHJvZ3Jlc3MtYmFyXCI+XHJcbiAgICAgICAgICAgICAgICAgIDxkaXZcclxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19wcm9ncmVzcy1maWxsXCJcclxuICAgICAgICAgICAgICAgICAgICBbc3R5bGUud2lkdGguJV09XCJwcm9ncmVzc1BlcmNlbnRcIlxyXG4gICAgICAgICAgICAgICAgICA+PC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidWktZm9ybS13aXphcmRfX3Byb2dyZXNzLXRleHRcIj5cclxuICAgICAgICAgICAgICAgICAge3sgcHJvZ3Jlc3NQZXJjZW50IH19JSBjb21wbGV0YXRvXHJcbiAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICA8IS0tIFN0ZXAgaW5kaWNhdG9ycyAtLT5cclxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcHNcIj5cclxuICAgICAgICAgICAgICAgICAgQGZvciAoXHJcbiAgICAgICAgICAgICAgICAgICAgZ3JvdXAgb2Ygd2l6YXJkU3RlcEdyb3VwcztcclxuICAgICAgICAgICAgICAgICAgICB0cmFjayAkaW5kZXg7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGkgPSAkaW5kZXhcclxuICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdlxyXG4gICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudWktZm9ybS13aXphcmRfX3N0ZXAtLWN1cnJlbnRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGkgPT09IHN0YXRlLmN1cnJlbnRTdGVwXHJcbiAgICAgICAgICAgICAgICAgICAgICBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnVpLWZvcm0td2l6YXJkX19zdGVwLS1jb21wbGV0ZWRdPVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlLmNvbXBsZXRlZFN0ZXBzLmhhcyhpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy51aS1mb3JtLXdpemFyZF9fc3RlcC0tdmlzaXRlZF09XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUudmlzaXRlZFN0ZXBzLmhhcyhpKVxyXG4gICAgICAgICAgICAgICAgICAgICAgXCJcclxuICAgICAgICAgICAgICAgICAgICA+XHJcbiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXAtY2lyY2xlXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc3RhdGUuY29tcGxldGVkU3RlcHMuaGFzKGkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGx1Y2lkZS1pY29uIG5hbWU9XCJjaGVja1wiIFtzaXplXT1cIjE2XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgaSArIDEgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLWxhYmVsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHt7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBbMF0ud2l6YXJkU3RlcD8uc3RlcFRpdGxlIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cFswXS50aXRsZSB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ1N0ZXAgJyArIChpICsgMSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfX1cclxuICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIDwhLS0gSW5mbyBzdGVwIGNvcnJlbnRlIC0tPlxyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX3N0ZXAtaW5mb1wiPlxyXG4gICAgICAgICAgICAgIDxoMiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLXRpdGxlXCI+e3sgY3VycmVudFN0ZXBUaXRsZSB9fTwvaDI+XHJcbiAgICAgICAgICAgICAgQGlmIChjdXJyZW50U3RlcERlc2NyaXB0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICA8cCBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19zdGVwLWRlc2NyaXB0aW9uXCI+XHJcbiAgICAgICAgICAgICAgICAgIHt7IGN1cnJlbnRTdGVwRGVzY3JpcHRpb24gfX1cclxuICAgICAgICAgICAgICAgIDwvcD5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ1aS1mb3JtLXdpemFyZF9fc3RlcC1jb3VudGVyXCI+XHJcbiAgICAgICAgICAgICAgICBQYXNzbyB7eyBzdGF0ZS5jdXJyZW50U3RlcCArIDEgfX0gZGkge3sgc3RhdGUudG90YWxTdGVwcyB9fVxyXG4gICAgICAgICAgICAgIDwvc3Bhbj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcbiAgICAgICAgPGRpdiBjbGFzcz1cInVpLWZvcm0td2l6YXJkX19jb250ZW50XCI+XHJcbiAgICAgICAgICA8IS0tIEZvcm0gYnVpbGRlciBwZXIgbG8gc3RlcCBjb3JyZW50ZSAtLT5cclxuICAgICAgICAgIDx1aS1mb3JtLWJ1aWxkZXJcclxuICAgICAgICAgICAgW3NjaGVtYV09XCJjdXJyZW50U3RlcFNjaGVtYSFcIlxyXG4gICAgICAgICAgICBbaW5pdGlhbERhdGFdPVwibWVyZ2VkSW5pdGlhbERhdGFGb3JCdWlsZGVyXCJcclxuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5XCJcclxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcclxuICAgICAgICAgICAgW2xvYWRpbmdGb3JdPVwibG9hZGluZ0ZvclwiXHJcbiAgICAgICAgICAgIFtjdXN0b21GaWVsZFRlbXBsYXRlc109XCJjdXN0b21GaWVsZFRlbXBsYXRlc1wiXHJcbiAgICAgICAgICAgIFtjdXN0b21GaWVsZFRlbXBsYXRlRmFsbGJhY2tdPVwiY3VzdG9tRmllbGRUZW1wbGF0ZUZhbGxiYWNrXCJcclxuICAgICAgICAgICAgKHZhbHVlQ2hhbmdlKT1cIm9uVmFsdWVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICh2YWxpZGF0aW9uQ2hhbmdlKT1cIm9uVmFsaWRhdGlvbkNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgKGN1c3RvbUV2ZW50KT1cImN1c3RvbUV2ZW50LmVtaXQoJGV2ZW50KVwiXHJcbiAgICAgICAgICAvPlxyXG5cclxuICAgICAgICAgIDwhLS0gRm9vdGVyIG5hdmlnYXppb25lIC0tPlxyXG4gICAgICAgICAgQGlmICh3aXphcmRDb25maWcuc2hvd05hdmlnYXRpb25CdXR0b25zICE9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX2Zvb3RlclwiPlxyXG4gICAgICAgICAgICAgIEBpZiAoXHJcbiAgICAgICAgICAgICAgICB3aXphcmRDb25maWcuYWxsb3dCYWNrTmF2aWdhdGlvbiAhPT0gZmFsc2UgJiZcclxuICAgICAgICAgICAgICAgIHN0YXRlLmN1cnJlbnRTdGVwID4gMFxyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgPHVpLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICBsYWJlbD1cInt7XHJcbiAgICAgICAgICAgICAgICAgICAgd2l6YXJkQ29uZmlnLmJ1dHRvbkxhYmVscz8ucHJldmlvdXMgfHwgJ0luZGlldHJvJ1xyXG4gICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcclxuICAgICAgICAgICAgICAgICAgaWNvbj1cImNoZXZyb24tbGVmdFwiXHJcbiAgICAgICAgICAgICAgICAgIChjbGljayk9XCJnb1RvUHJldmlvdXNTdGVwKClcIlxyXG4gICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgIDxkaXY+PC9kaXY+XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidWktZm9ybS13aXphcmRfX2Zvb3Rlci1yaWdodFwiPlxyXG4gICAgICAgICAgICAgICAgQGlmICh3aXphcmRDb25maWcuYXV0b1NhdmUgJiYgd2l6YXJkQ29uZmlnLmJ1dHRvbkxhYmVscz8uc2F2ZSkge1xyXG4gICAgICAgICAgICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgW2xhYmVsXT1cIndpemFyZENvbmZpZy5idXR0b25MYWJlbHMhLnNhdmUhXCJcclxuICAgICAgICAgICAgICAgICAgICB2YXJpYW50PVwib3V0bGluZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNhdmVDdXJyZW50U3RlcCgpXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIEBpZiAoaXNMYXN0U3RlcCkge1xyXG4gICAgICAgICAgICAgICAgICA8dWktYnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw9XCJ7e1xyXG4gICAgICAgICAgICAgICAgICAgICAgd2l6YXJkQ29uZmlnLmJ1dHRvbkxhYmVscz8uZmluaXNoIHx8ICdDb21wbGV0YSdcclxuICAgICAgICAgICAgICAgICAgICB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGVja1wiXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvblBvc2l0aW9uPVwidHJhaWxpbmdcIlxyXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJmaW5pc2hXaXphcmQoKVwiXHJcbiAgICAgICAgICAgICAgICAgIC8+XHJcbiAgICAgICAgICAgICAgICB9IEBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgPHVpLWJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsPVwie3sgd2l6YXJkQ29uZmlnLmJ1dHRvbkxhYmVscz8ubmV4dCB8fCAnQXZhbnRpJyB9fVwiXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyaWFudD1cInByaW1hcnlcIlxyXG4gICAgICAgICAgICAgICAgICAgIGljb249XCJjaGV2cm9uLXJpZ2h0XCJcclxuICAgICAgICAgICAgICAgICAgICBpY29uUG9zaXRpb249XCJ0cmFpbGluZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImdvVG9OZXh0U3RlcCgpXCJcclxuICAgICAgICAgICAgICAgICAgLz5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgfVxyXG4gIGAsXHJcbiAgc3R5bGVVcmw6ICcuL2Zvcm0td2l6YXJkLmNvbXBvbmVudC5zY3NzJyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFVpRm9ybVdpemFyZENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XHJcbiAgcHJpdmF0ZSByZWFkb25seSB3aXphcmRTeW5jID0gaW5qZWN0KFVpV2l6YXJkU3luY1NlcnZpY2UpO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG5cclxuICBAVmlld0NoaWxkKFVpRm9ybUJ1aWxkZXJDb21wb25lbnQpIGZvcm1CdWlsZGVyPzogVWlGb3JtQnVpbGRlckNvbXBvbmVudDtcclxuXHJcbiAgLy8g4pSA4pSA4pSAIElucHV0IOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICAvKiogU2NoZW1hIGNvbXBsZXRvIGRlbCBmb3JtICh0dXR0ZSBsZSBzZXppb25pIGNvbiB3aXphcmRTdGVwKS4gKi9cclxuICBASW5wdXQoKSBzY2hlbWEhOiBVaUZvcm1TY2hlbWE7XHJcblxyXG4gIC8qKiBDb25maWd1cmF6aW9uZSBkZWwgd2l6YXJkLiAqL1xyXG4gIEBJbnB1dCgpIHdpemFyZENvbmZpZyE6IFVpV2l6YXJkQ29uZmlnO1xyXG5cclxuICAvKiogTWV0b2RpIGRpIHZhbGlkYXppb25lIGN1c3RvbSBwZXIgc3RlcC4gKi9cclxuICBASW5wdXQoKSBjdXN0b21WYWxpZGF0aW9uTWV0aG9kczogUmVjb3JkPHN0cmluZywgVWlXaXphcmRWYWxpZGF0aW9uRm4+ID0ge307XHJcblxyXG4gIC8qKiBEYXRpIGluaXppYWxpLiAqL1xyXG4gIEBJbnB1dCgpIGluaXRpYWxEYXRhOiBVaUZvcm1EYXRhID0ge307XHJcblxyXG4gIC8qKiBNb2RhbGl0YSBzb2xhIGxldHR1cmEuICovXHJcbiAgQElucHV0KCkgcmVhZG9ubHkgPSBmYWxzZTtcclxuXHJcbiAgLyoqIFN0YXRvIGRpc2FiaWxpdGF0by4gKi9cclxuICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xyXG5cclxuICAvKiogUHVsc2FudGUgaW4gY2FyaWNhbWVudG8uICovXHJcbiAgQElucHV0KCkgbG9hZGluZ0Zvcjogc3RyaW5nIHwgbnVsbCA9IG51bGw7XHJcblxyXG4gIC8qKiBUZW1wbGF0ZSBwZXIgY2FtcGkgYHR5cGU6ICdjdXN0b20nYCAoaW5vbHRybyBhbCBmb3JtIGJ1aWxkZXIpLiAqL1xyXG4gIEBJbnB1dCgpIGN1c3RvbUZpZWxkVGVtcGxhdGVzOiBSZWNvcmQ8c3RyaW5nLCBUZW1wbGF0ZVJlZjx1bmtub3duPj4gPSB7fTtcclxuXHJcbiAgLyoqIEZhbGxiYWNrIHRlbXBsYXRlIHBlciBjYW1waSBjdXN0b20gKGlub2x0cm8gYWwgZm9ybSBidWlsZGVyKS4gKi9cclxuICBASW5wdXQoKSBjdXN0b21GaWVsZFRlbXBsYXRlRmFsbGJhY2s/OiBUZW1wbGF0ZVJlZjx1bmtub3duPjtcclxuXHJcbiAgLy8g4pSA4pSA4pSAIE91dHB1dCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgQE91dHB1dCgpIHN0ZXBDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPFVpV2l6YXJkU3RlcENoYW5nZUV2ZW50PigpO1xyXG4gIEBPdXRwdXQoKSBzdGVwQ29tcGxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPFVpV2l6YXJkU3RlcENvbXBsZXRlRXZlbnQ+KCk7XHJcbiAgQE91dHB1dCgpIHN0ZXBWYWxpZGF0aW9uRmFpbGVkID0gbmV3IEV2ZW50RW1pdHRlcjx7XHJcbiAgICBzdGVwOiBudW1iZXI7XHJcbiAgICBlcnJvcnM6IHN0cmluZ1tdO1xyXG4gIH0+KCk7XHJcbiAgQE91dHB1dCgpIHdpemFyZENvbXBsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxVaUZvcm1EYXRhPigpO1xyXG4gIEBPdXRwdXQoKSB2YWx1ZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VWlGb3JtRGF0YT4oKTtcclxuICBAT3V0cHV0KCkgdmFsaWRhdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8VWlGb3JtVmFsaWRhdGlvblN0YXRlPigpO1xyXG4gIEBPdXRwdXQoKSBjdXN0b21FdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8VWlGb3JtQ3VzdG9tRXZlbnQ+KCk7XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBTdGF0byDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgc3RhdGU6IFVpV2l6YXJkU3RhdGUgPSB7XHJcbiAgICBjdXJyZW50U3RlcDogMCxcclxuICAgIHRvdGFsU3RlcHM6IDAsXHJcbiAgICBjb21wbGV0ZWRTdGVwczogbmV3IFNldDxudW1iZXI+KCksXHJcbiAgICB2aXNpdGVkU3RlcHM6IG5ldyBTZXQ8bnVtYmVyPihbMF0pLFxyXG4gICAgaXNWYWxpZDogZmFsc2UsXHJcbiAgICBzdGVwRXJyb3JzOiB7fSxcclxuICB9O1xyXG5cclxuICAvKipcclxuICAgKiBHcnVwcGkgZGkgc2V6aW9uaSBzY2hlbWEgcGVyIHBhc3NvIGxvZ2ljbyBkZWwgd2l6YXJkLlxyXG4gICAqIFNlemlvbmkgY29uIGxvIHN0ZXNzbyBgd2l6YXJkU3RlcC5zdGVwTnVtYmVyYCBjb21wb25nb25vIHVuIHVuaWNvIHBhc3NvIChvcmRpbmU6IGNvbWUgaW4gYHNjaGVtYS5zZWN0aW9uc2AgZG9wbyBzb3J0IHBlciBudW1lcm8pLlxyXG4gICAqL1xyXG4gIHdpemFyZFN0ZXBHcm91cHM6IFVpRm9ybVNlY3Rpb25bXVtdID0gW107XHJcblxyXG4gIC8qKiBEYXRpIGFjY3VtdWxhdGkgZGVsIGZvcm0uICovXHJcbiAgcHJpdmF0ZSBhY2N1bXVsYXRlZERhdGE6IFVpRm9ybURhdGEgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogU2NoZW1hIGNhY2hhdG8gcGVyIGxvIHN0ZXAgY29ycmVudGUuXHJcbiAgICogRXZpdGEgZGkgY3JlYXJlIHVuIG51b3ZvIG9nZ2V0dG8gYWQgb2duaSBjaWNsbyBkaSBjaGFuZ2UgZGV0ZWN0aW9uLFxyXG4gICAqIGNvc2EgY2hlIGNhdXNlcmViYmUgcmVidWlsZCBpbmZpbml0aSBuZWwgZm9ybSBidWlsZGVyLlxyXG4gICAqL1xyXG4gIF9jYWNoZWRTdGVwU2NoZW1hOiBVaUZvcm1TY2hlbWEgfCBudWxsID0gbnVsbDtcclxuICBwcml2YXRlIF9jYWNoZWRTdGVwSW5kZXg6IG51bWJlciA9IC0xO1xyXG5cclxuICAvLyDilIDilIDilIAgR2V0dGVyIGNhbGNvbGF0aSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgZ2V0IGN1cnJlbnRTdGVwU2NoZW1hKCk6IFVpRm9ybVNjaGVtYSB8IG51bGwge1xyXG4gICAgLy8gU2UgbG8gc3RlcCBub24gZSBjYW1iaWF0bywgcmVzdGl0dWlzY2kgbG8gc2NoZW1hIGNhY2hhdG9cclxuICAgIGlmIChcclxuICAgICAgdGhpcy5fY2FjaGVkU3RlcEluZGV4ID09PSB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwICYmXHJcbiAgICAgIHRoaXMuX2NhY2hlZFN0ZXBTY2hlbWFcclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3RlcFNjaGVtYTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBncm91cCA9IHRoaXMud2l6YXJkU3RlcEdyb3Vwc1t0aGlzLnN0YXRlLmN1cnJlbnRTdGVwXTtcclxuICAgIGlmICghZ3JvdXA/Lmxlbmd0aCkgcmV0dXJuIG51bGw7XHJcblxyXG4gICAgdGhpcy5fY2FjaGVkU3RlcFNjaGVtYSA9IHtcclxuICAgICAgaWQ6IHRoaXMuc2NoZW1hLmlkICsgJy1zdGVwLScgKyB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwLFxyXG4gICAgICBzZWN0aW9uczogZ3JvdXAsXHJcbiAgICAgIGNvbmZpZzogeyAuLi50aGlzLnNjaGVtYS5jb25maWcsIGhpZGVGb290ZXI6IHRydWUsIHNob3dCdXR0b25zOiBmYWxzZSB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuX2NhY2hlZFN0ZXBJbmRleCA9IHRoaXMuc3RhdGUuY3VycmVudFN0ZXA7XHJcbiAgICByZXR1cm4gdGhpcy5fY2FjaGVkU3RlcFNjaGVtYTtcclxuICB9XHJcblxyXG4gIGdldCBjdXJyZW50U3RlcFRpdGxlKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBwcmltYXJ5ID0gdGhpcy53aXphcmRTdGVwR3JvdXBzW3RoaXMuc3RhdGUuY3VycmVudFN0ZXBdPy5bMF07XHJcbiAgICByZXR1cm4gcHJpbWFyeT8ud2l6YXJkU3RlcD8uc3RlcFRpdGxlIHx8IHByaW1hcnk/LnRpdGxlIHx8ICcnO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGN1cnJlbnRTdGVwRGVzY3JpcHRpb24oKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHByaW1hcnkgPSB0aGlzLndpemFyZFN0ZXBHcm91cHNbdGhpcy5zdGF0ZS5jdXJyZW50U3RlcF0/LlswXTtcclxuICAgIHJldHVybiBwcmltYXJ5Py53aXphcmRTdGVwPy5zdGVwRGVzY3JpcHRpb24gfHwgcHJpbWFyeT8uZGVzY3JpcHRpb24gfHwgJyc7XHJcbiAgfVxyXG5cclxuICBnZXQgaXNMYXN0U3RlcCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwID49IHRoaXMuc3RhdGUudG90YWxTdGVwcyAtIDE7XHJcbiAgfVxyXG5cclxuICBnZXQgcHJvZ3Jlc3NQZXJjZW50KCk6IG51bWJlciB7XHJcbiAgICBpZiAodGhpcy5zdGF0ZS50b3RhbFN0ZXBzIDw9IDEpIHJldHVybiAxMDA7XHJcbiAgICByZXR1cm4gTWF0aC5yb3VuZChcclxuICAgICAgKHRoaXMuc3RhdGUuY3VycmVudFN0ZXAgLyAodGhpcy5zdGF0ZS50b3RhbFN0ZXBzIC0gMSkpICogMTAwLFxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERhdGkgcGFzc2F0aSBhbCBmb3JtIGJ1aWxkZXI6IHVuaW9uZSB0cmEgdmFsb3JpIGZvcm5pdGkgZGFsIGNvbnN1bWVyIGVcclxuICAgKiBzdGF0byBhY2N1bXVsYXRvIHRyYSBnbGkgc3RlcC4gU2VuemEgcXVlc3RvLCB0b3JuYW5kbyBpbmRpZXRybyBpbCBidWlsZGVyXHJcbiAgICogcmljZXZlcmViYmUgc29sbyBgaW5pdGlhbERhdGFgIGUgcmljcmVlcmViYmUgaSBjYW1waSB2dW90aSwgcHVyIGF2ZW5kb1xyXG4gICAqIGkgdmFsb3JpIGFuY29yYSBpbiBgYWNjdW11bGF0ZWREYXRhYC5cclxuICAgKi9cclxuICBnZXQgbWVyZ2VkSW5pdGlhbERhdGFGb3JCdWlsZGVyKCk6IFVpRm9ybURhdGEge1xyXG4gICAgcmV0dXJuIHsgLi4udGhpcy5pbml0aWFsRGF0YSwgLi4udGhpcy5hY2N1bXVsYXRlZERhdGEgfTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBMaWZlY3ljbGUg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXHJcblxyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLnNjaGVtYSkgcmV0dXJuO1xyXG5cclxuICAgIHRoaXMud2l6YXJkU3RlcEdyb3VwcyA9IHRoaXMuYnVpbGRXaXphcmRTdGVwR3JvdXBzKHRoaXMuc2NoZW1hLnNlY3Rpb25zKTtcclxuICAgIHRoaXMuc3RhdGUudG90YWxTdGVwcyA9IHRoaXMud2l6YXJkU3RlcEdyb3Vwcy5sZW5ndGg7XHJcbiAgICB0aGlzLmFjY3VtdWxhdGVkRGF0YSA9IHsgLi4udGhpcy5pbml0aWFsRGF0YSB9O1xyXG5cclxuICAgIC8vIFNpbmNyb25penphemlvbmUgd2lyZWxlc3NcclxuICAgIGlmICh0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCkge1xyXG4gICAgICB0aGlzLnN5bmNXaXphcmRTdGF0ZSgpO1xyXG5cclxuICAgICAgLy8gQXNjb2x0YSBuYXZpZ2F6aW9uZSBlc3Rlcm5hXHJcbiAgICAgIHRoaXMud2l6YXJkU3luY1xyXG4gICAgICAgIC5nZXRXaXphcmRTdGF0ZSQodGhpcy53aXphcmRDb25maWcud2l6YXJkSWQpXHJcbiAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKGRhdGEpID0+IHtcclxuICAgICAgICAgIGlmIChkYXRhICYmIGRhdGEud2l6YXJkU3RhdGUuY3VycmVudFN0ZXAgIT09IHRoaXMuc3RhdGUuY3VycmVudFN0ZXApIHtcclxuICAgICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcChkYXRhLndpemFyZFN0YXRlLmN1cnJlbnRTdGVwKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWc/LndpemFyZElkKSB7XHJcbiAgICAgIHRoaXMud2l6YXJkU3luYy51bnJlZ2lzdGVyV2l6YXJkKHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFNjb3JjaWF0b2lhOiBDdHJsICsgRnJlY2NpYSBzaW5pc3RyYS9kZXN0cmEgcGVyIG5hdmlnYXJlIGNvbWUgaSBwdWxzYW50aVxyXG4gICAqIEluZGlldHJvIC8gQXZhbnRpIChzdWxsJ3VsdGltbyBzdGVwLCBBdmFudGkgZXF1aXZhbGUgYSBDb21wbGV0YSkuXHJcbiAgICogSWdub3JhdGEgc2UgaWwgZm9jdXMgw6ggaW4gdW4gY2FtcG8gZGkgaW5wdXQgcGVyIG5vbiBpbnRlcmZlcmlyZSBjb24gbGEgZGlnaXRhemlvbmUuXHJcbiAgICovXHJcbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6a2V5ZG93bicsIFsnJGV2ZW50J10pXHJcbiAgb25Eb2N1bWVudEtleWRvd24oZXZlbnQ6IEtleWJvYXJkRXZlbnQpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy5zY2hlbWEgfHwgIXRoaXMud2l6YXJkQ29uZmlnIHx8IHRoaXMuZGlzYWJsZWQpIHJldHVybjtcclxuICAgIGlmICh0aGlzLndpemFyZENvbmZpZy5zaG93TmF2aWdhdGlvbkJ1dHRvbnMgPT09IGZhbHNlKSByZXR1cm47XHJcbiAgICBpZiAoIWV2ZW50LmN0cmxLZXkgfHwgZXZlbnQuYWx0S2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpXHJcbiAgICAgIHJldHVybjtcclxuICAgIGlmIChldmVudC5rZXkgIT09ICdBcnJvd0xlZnQnICYmIGV2ZW50LmtleSAhPT0gJ0Fycm93UmlnaHQnKSByZXR1cm47XHJcbiAgICBpZiAodGhpcy5pc0VkaXRhYmxlS2V5Ym9hcmRUYXJnZXQoZXZlbnQudGFyZ2V0KSkgcmV0dXJuO1xyXG5cclxuICAgIGlmIChldmVudC5rZXkgPT09ICdBcnJvd0xlZnQnKSB7XHJcbiAgICAgIGlmICh0aGlzLndpemFyZENvbmZpZy5hbGxvd0JhY2tOYXZpZ2F0aW9uID09PSBmYWxzZSkgcmV0dXJuO1xyXG4gICAgICBpZiAodGhpcy5zdGF0ZS5jdXJyZW50U3RlcCA8PSAwKSByZXR1cm47XHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgIHRoaXMuZ29Ub1ByZXZpb3VzU3RlcCgpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gQXJyb3dSaWdodFxyXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIGlmICh0aGlzLmlzTGFzdFN0ZXApIHtcclxuICAgICAgdm9pZCB0aGlzLmZpbmlzaFdpemFyZCgpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdm9pZCB0aGlzLmdvVG9OZXh0U3RlcCgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIFRydWUgc2UgaWwgdGFyZ2V0IGRlbCBrZXlkb3duIMOoIHVuIGVsZW1lbnRvIGRvdmUgbGEgZGlnaXRhemlvbmUgaGEgcHJpb3JpdMOgIHN1bGxhIHNob3J0Y3V0IHdpemFyZC4gKi9cclxuICBwcml2YXRlIGlzRWRpdGFibGVLZXlib2FyZFRhcmdldCh0YXJnZXQ6IEV2ZW50VGFyZ2V0IHwgbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKCF0YXJnZXQgfHwgISh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpIHJldHVybiBmYWxzZTtcclxuICAgIGNvbnN0IGVsID0gdGFyZ2V0O1xyXG4gICAgaWYgKGVsLmlzQ29udGVudEVkaXRhYmxlKSByZXR1cm4gdHJ1ZTtcclxuICAgIGNvbnN0IHRhZyA9IGVsLnRhZ05hbWU7XHJcbiAgICBpZiAodGFnID09PSAnSU5QVVQnIHx8IHRhZyA9PT0gJ1RFWFRBUkVBJyB8fCB0YWcgPT09ICdTRUxFQ1QnKSByZXR1cm4gdHJ1ZTtcclxuICAgIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBOYXZpZ2F6aW9uZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcclxuXHJcbiAgLyoqIFZhaSBhbGxvIHN0ZXAgc3VjY2Vzc2l2byBjb24gdmFsaWRhemlvbmUuICovXHJcbiAgYXN5bmMgZ29Ub05leHRTdGVwKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgaWYgKHRoaXMuaXNMYXN0U3RlcCkgcmV0dXJuO1xyXG5cclxuICAgIC8vIFZhbGlkYSBzdGVwIGNvcnJlbnRlXHJcbiAgICBpZiAoIShhd2FpdCB0aGlzLnZhbGlkYXRlQ3VycmVudFN0ZXAoKSkpIHJldHVybjtcclxuXHJcbiAgICAvLyBTYWx2YSBkYXRpIHN0ZXAgY29ycmVudGVcclxuICAgIHRoaXMuc3RhdGUuY29tcGxldGVkU3RlcHMuYWRkKHRoaXMuc3RhdGUuY3VycmVudFN0ZXApO1xyXG4gICAgYXdhaXQgdGhpcy5hdXRvU2F2ZUlmTmVlZGVkKCk7XHJcblxyXG4gICAgdGhpcy5uYXZpZ2F0ZVRvU3RlcCh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwICsgMSk7XHJcbiAgfVxyXG5cclxuICAvKiogVG9ybmEgYWxsbyBzdGVwIHByZWNlZGVudGUuICovXHJcbiAgZ29Ub1ByZXZpb3VzU3RlcCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwIDw9IDApIHJldHVybjtcclxuICAgIHRoaXMubmF2aWdhdGVUb1N0ZXAodGhpcy5zdGF0ZS5jdXJyZW50U3RlcCAtIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqIENvbXBsZXRhIGlsIHdpemFyZC4gKi9cclxuICBhc3luYyBmaW5pc2hXaXphcmQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAoIShhd2FpdCB0aGlzLnZhbGlkYXRlQ3VycmVudFN0ZXAoKSkpIHJldHVybjtcclxuXHJcbiAgICB0aGlzLnN0YXRlLmNvbXBsZXRlZFN0ZXBzLmFkZCh0aGlzLnN0YXRlLmN1cnJlbnRTdGVwKTtcclxuICAgIGF3YWl0IHRoaXMuYXV0b1NhdmVJZk5lZWRlZCgpO1xyXG5cclxuICAgIHRoaXMud2l6YXJkQ29tcGxldGUuZW1pdCh0aGlzLmFjY3VtdWxhdGVkRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKiogU2FsdmEgbG8gc3RlcCBjb3JyZW50ZSBtYW51YWxtZW50ZS4gKi9cclxuICBhc3luYyBzYXZlQ3VycmVudFN0ZXAoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcub25TdGVwU2F2ZSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtQnVpbGRlcj8uZ2V0Rm9ybVZhbHVlKCkgfHwge307XHJcbiAgICAgIGF3YWl0IHRoaXMud2l6YXJkQ29uZmlnLm9uU3RlcFNhdmUoZGF0YSwgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyDilIDilIDilIAgQ2FsbGJhY2sgZm9ybSBidWlsZGVyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBvblZhbHVlQ2hhbmdlKGRhdGE6IFVpRm9ybURhdGEpOiB2b2lkIHtcclxuICAgIHRoaXMuYWNjdW11bGF0ZWREYXRhID0geyAuLi50aGlzLmFjY3VtdWxhdGVkRGF0YSwgLi4uZGF0YSB9O1xyXG4gICAgdGhpcy52YWx1ZUNoYW5nZS5lbWl0KHRoaXMuYWNjdW11bGF0ZWREYXRhKTtcclxuICB9XHJcblxyXG4gIG9uVmFsaWRhdGlvbkNoYW5nZShzdGF0ZTogVWlGb3JtVmFsaWRhdGlvblN0YXRlKTogdm9pZCB7XHJcbiAgICB0aGlzLnN0YXRlLmlzVmFsaWQgPSBzdGF0ZS52YWxpZDtcclxuICAgIHRoaXMudmFsaWRhdGlvbkNoYW5nZS5lbWl0KHN0YXRlKTtcclxuICB9XHJcblxyXG4gIC8vIOKUgOKUgOKUgCBOYXZpZ2F6aW9uZSBpbnRlcm5hIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxyXG5cclxuICBwcml2YXRlIG5hdmlnYXRlVG9TdGVwKHRhcmdldFN0ZXA6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKHRhcmdldFN0ZXAgPCAwIHx8IHRhcmdldFN0ZXAgPj0gdGhpcy5zdGF0ZS50b3RhbFN0ZXBzKSByZXR1cm47XHJcblxyXG4gICAgY29uc3QgZnJvbSA9IHRoaXMuc3RhdGUuY3VycmVudFN0ZXA7XHJcbiAgICB0aGlzLnN0YXRlLmN1cnJlbnRTdGVwID0gdGFyZ2V0U3RlcDtcclxuICAgIHRoaXMuc3RhdGUudmlzaXRlZFN0ZXBzLmFkZCh0YXJnZXRTdGVwKTtcclxuXHJcbiAgICAvLyBJbnZhbGlkYSBsYSBjYWNoZSBwZXIgZm9yemFyZSBsYSBjcmVhemlvbmUgZGkgdW4gbnVvdm8gc2NoZW1hXHJcbiAgICB0aGlzLl9jYWNoZWRTdGVwU2NoZW1hID0gbnVsbDtcclxuICAgIHRoaXMuX2NhY2hlZFN0ZXBJbmRleCA9IC0xO1xyXG5cclxuICAgIHRoaXMuc3RlcENoYW5nZS5lbWl0KHtcclxuICAgICAgZnJvbSxcclxuICAgICAgdG86IHRhcmdldFN0ZXAsXHJcbiAgICAgIGRpcmVjdGlvbjogdGFyZ2V0U3RlcCA+IGZyb20gPyAnbmV4dCcgOiAncHJldmlvdXMnLFxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5zeW5jV2l6YXJkU3RhdGUoKTtcclxuICAgIHRoaXMuY2RyLm1hcmtGb3JDaGVjaygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyB2YWxpZGF0ZUN1cnJlbnRTdGVwKCk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgdGhpcy5mb3JtQnVpbGRlcj8udmFsaWRhdGVBbGxGaWVsZHMoKTtcclxuICAgIGNvbnN0IGdyb3VwID0gdGhpcy53aXphcmRTdGVwR3JvdXBzW3RoaXMuc3RhdGUuY3VycmVudFN0ZXBdO1xyXG4gICAgY29uc3QgcHJpbWFyeSA9IGdyb3VwPy5bMF07XHJcbiAgICBjb25zdCB2YWxpZGF0ZUN1c3RvbUNvbXBvbmVudHMgPVxyXG4gICAgICBwcmltYXJ5Py53aXphcmRTdGVwPy52YWxpZGF0aW9uPy52YWxpZGF0ZUN1c3RvbUNvbXBvbmVudHMgIT09IGZhbHNlO1xyXG4gICAgY29uc3QgY3VzdG9tRmllbGRLZXlzID0gbmV3IFNldCh0aGlzLmdldEN1c3RvbUZpZWxkS2V5c0Zvckdyb3VwKGdyb3VwKSk7XHJcblxyXG4gICAgY29uc3QgaXNGb3JtVmFsaWQgPSB2YWxpZGF0ZUN1c3RvbUNvbXBvbmVudHNcclxuICAgICAgPyAodGhpcy5mb3JtQnVpbGRlcj8uaXNGb3JtVmFsaWQoKSA/PyB0cnVlKVxyXG4gICAgICA6ICh0aGlzLmZvcm1CdWlsZGVyPy5pc0Zvcm1WYWxpZEV4Y2x1ZGluZ0ZpZWxkS2V5cyhjdXN0b21GaWVsZEtleXMpID8/XHJcbiAgICAgICAgdHJ1ZSk7XHJcblxyXG4gICAgY29uc3QgY3VzdG9tRm5OYW1lID0gcHJpbWFyeT8ud2l6YXJkU3RlcD8uY3VzdG9tVmFsaWRhdGlvbkZuO1xyXG5cclxuICAgIGlmIChjdXN0b21Gbk5hbWUgJiYgdGhpcy5jdXN0b21WYWxpZGF0aW9uTWV0aG9kc1tjdXN0b21Gbk5hbWVdKSB7XHJcbiAgICAgIGNvbnN0IGN1c3RvbVZhbGlkID0gYXdhaXQgdGhpcy5jdXN0b21WYWxpZGF0aW9uTWV0aG9kc1tjdXN0b21Gbk5hbWVdKFxyXG4gICAgICAgIHRoaXMuYWNjdW11bGF0ZWREYXRhLFxyXG4gICAgICAgIHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgaXNGb3JtVmFsaWQsXHJcbiAgICAgICk7XHJcblxyXG4gICAgICBpZiAoIWN1c3RvbVZhbGlkKSB7XHJcbiAgICAgICAgdGhpcy5zdGVwVmFsaWRhdGlvbkZhaWxlZC5lbWl0KHtcclxuICAgICAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgICAgICBlcnJvcnM6IFsnVmFsaWRhemlvbmUgY3VzdG9tIGZhbGxpdGEnXSxcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpZiAoIWlzRm9ybVZhbGlkICYmIHByaW1hcnk/LndpemFyZFN0ZXA/LnZhbGlkYXRpb24/LnJlcXVpcmVkICE9PSBmYWxzZSkge1xyXG4gICAgICBsZXQgZGV0YWlscyA9IHRoaXMuZm9ybUJ1aWxkZXI/LmdldERldGFpbGVkRm9ybUVycm9ycygpIHx8IFtdO1xyXG4gICAgICBpZiAoIXZhbGlkYXRlQ3VzdG9tQ29tcG9uZW50cyAmJiBncm91cD8ubGVuZ3RoKSB7XHJcbiAgICAgICAgZGV0YWlscyA9IHRoaXMuZmlsdGVyRXJyb3JEZXRhaWxzRXhjbHVkaW5nQ3VzdG9tRmllbGRzKFxyXG4gICAgICAgICAgZGV0YWlscyxcclxuICAgICAgICAgIGdyb3VwLFxyXG4gICAgICAgICAgY3VzdG9tRmllbGRLZXlzLFxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgY29uc3QgZXJyb3JzID0gZGV0YWlscy5mbGF0TWFwKChlKSA9PiBlLmVycm9ycyk7XHJcbiAgICAgIHRoaXMuc3RlcFZhbGlkYXRpb25GYWlsZWQuZW1pdCh7XHJcbiAgICAgICAgc3RlcDogdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCxcclxuICAgICAgICBlcnJvcnMsXHJcbiAgICAgIH0pO1xyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zdGVwQ29tcGxldGUuZW1pdCh7XHJcbiAgICAgIHN0ZXA6IHRoaXMuc3RhdGUuY3VycmVudFN0ZXAsXHJcbiAgICAgIGRhdGE6IHRoaXMuZm9ybUJ1aWxkZXI/LmdldEZvcm1WYWx1ZSgpIHx8IHt9LFxyXG4gICAgfSk7XHJcblxyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSYWdncnVwcGEgbGUgc2V6aW9uaSBjb24gYHdpemFyZFN0ZXBgIHBlciBgc3RlcE51bWJlcmAgKG9yZGluZSBzdGFiaWxlIHBlciBudW1lcm8sIHBvaSBvcmRpbmUgZGkgYXBwYXJpemlvbmUgbmVsbG8gc2NoZW1hKS5cclxuICAgKi9cclxuICBwcml2YXRlIGJ1aWxkV2l6YXJkU3RlcEdyb3VwcyhzZWN0aW9uczogVWlGb3JtU2VjdGlvbltdKTogVWlGb3JtU2VjdGlvbltdW10ge1xyXG4gICAgY29uc3Qgd2l0aFdpemFyZCA9IHNlY3Rpb25zLmZpbHRlcigocykgPT4gcy53aXphcmRTdGVwKTtcclxuICAgIHdpdGhXaXphcmQuc29ydChcclxuICAgICAgKGEsIGIpID0+XHJcbiAgICAgICAgKGEud2l6YXJkU3RlcCEuc3RlcE51bWJlciB8fCAwKSAtIChiLndpemFyZFN0ZXAhLnN0ZXBOdW1iZXIgfHwgMCksXHJcbiAgICApO1xyXG4gICAgY29uc3QgZ3JvdXBzOiBVaUZvcm1TZWN0aW9uW11bXSA9IFtdO1xyXG4gICAgZm9yIChjb25zdCBzIG9mIHdpdGhXaXphcmQpIHtcclxuICAgICAgY29uc3QgbnVtID0gcy53aXphcmRTdGVwIS5zdGVwTnVtYmVyO1xyXG4gICAgICBjb25zdCBwcmV2ID0gZ3JvdXBzW2dyb3Vwcy5sZW5ndGggLSAxXTtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHByZXY/Lmxlbmd0aCAmJlxyXG4gICAgICAgIChwcmV2WzBdLndpemFyZFN0ZXAhLnN0ZXBOdW1iZXIgfHwgMCkgPT09IChudW0gfHwgMClcclxuICAgICAgKSB7XHJcbiAgICAgICAgcHJldi5wdXNoKHMpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGdyb3Vwcy5wdXNoKFtzXSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBncm91cHM7XHJcbiAgfVxyXG5cclxuICAvKiogQ2hpYXZpIGRlaSBjYW1waSBgY3VzdG9tYCBpbiB0dXR0ZSBsZSBzZXppb25pIGRlbCBwYXNzbyBjb3JyZW50ZS4gKi9cclxuICBwcml2YXRlIGdldEN1c3RvbUZpZWxkS2V5c0Zvckdyb3VwKFxyXG4gICAgZ3JvdXA6IFVpRm9ybVNlY3Rpb25bXSB8IHVuZGVmaW5lZCxcclxuICApOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAoIWdyb3VwPy5sZW5ndGgpIHJldHVybiBbXTtcclxuICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICBmb3IgKGNvbnN0IHNlY3Rpb24gb2YgZ3JvdXApIHtcclxuICAgICAgZm9yIChjb25zdCBmIG9mIHNlY3Rpb24uZmllbGRzIHx8IFtdKSB7XHJcbiAgICAgICAgaWYgKGYudHlwZSA9PT0gJ2N1c3RvbScpIGtleXMucHVzaChmLmtleSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBrZXlzO1xyXG4gIH1cclxuXHJcbiAgLyoqIFJpbXVvdmUgZGFnbGkgZXJyb3JpIGkgY2FtcGkgY3VzdG9tIHF1YW5kbyBgdmFsaWRhdGVDdXN0b21Db21wb25lbnRzYCDDqCBmYWxzZS4gKi9cclxuICBwcml2YXRlIGZpbHRlckVycm9yRGV0YWlsc0V4Y2x1ZGluZ0N1c3RvbUZpZWxkcyhcclxuICAgIGRldGFpbHM6IFVpRm9ybUVycm9yRGV0YWlsW10sXHJcbiAgICBncm91cDogVWlGb3JtU2VjdGlvbltdLFxyXG4gICAgY3VzdG9tS2V5czogU2V0PHN0cmluZz4sXHJcbiAgKTogVWlGb3JtRXJyb3JEZXRhaWxbXSB7XHJcbiAgICBjb25zdCBzZWN0aW9uSWRzID0gZ3JvdXAubWFwKChzKSA9PiBzLmlkKTtcclxuICAgIHJldHVybiBkZXRhaWxzLmZpbHRlcigoZCkgPT4ge1xyXG4gICAgICBjb25zdCBsb2dpY2FsS2V5ID0gdGhpcy5sb2dpY2FsRmllbGRLZXlGcm9tRGV0YWlsS2V5Rm9yR3JvdXAoXHJcbiAgICAgICAgZC5maWVsZEtleSxcclxuICAgICAgICBzZWN0aW9uSWRzLFxyXG4gICAgICApO1xyXG4gICAgICByZXR1cm4gIWN1c3RvbUtleXMuaGFzKGxvZ2ljYWxLZXkpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSaXNvbHZlIGxhIGNoaWF2ZSBsb2dpY2EgZGVsIGNhbXBvIHJpc3BldHRvIGEgdHV0dGUgbGUgc2V6aW9uaSBkZWwgZ3J1cHBvIChjYW1waSBmbGF0IG8gcmVwZWF0YWJsZSkuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBsb2dpY2FsRmllbGRLZXlGcm9tRGV0YWlsS2V5Rm9yR3JvdXAoXHJcbiAgICBmaWVsZEtleTogc3RyaW5nLFxyXG4gICAgc2VjdGlvbklkczogc3RyaW5nW10sXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGZvciAoY29uc3QgaWQgb2Ygc2VjdGlvbklkcykge1xyXG4gICAgICBjb25zdCBrID0gdGhpcy5sb2dpY2FsRmllbGRLZXlGcm9tRGV0YWlsS2V5KGZpZWxkS2V5LCBpZCk7XHJcbiAgICAgIGlmIChrICE9PSBmaWVsZEtleSkgcmV0dXJuIGs7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmllbGRLZXk7XHJcbiAgfVxyXG5cclxuICAvKiogRXN0cmFlIGxhIGNoaWF2ZSBjYW1wbyBkYSBgZmllbGRLZXlgIGZsYXQgbyBgc2VjdGlvbklkW2ldLmZpZWxkS2V5YC4gKi9cclxuICBwcml2YXRlIGxvZ2ljYWxGaWVsZEtleUZyb21EZXRhaWxLZXkoXHJcbiAgICBmaWVsZEtleTogc3RyaW5nLFxyXG4gICAgc2VjdGlvbklkOiBzdHJpbmcsXHJcbiAgKTogc3RyaW5nIHtcclxuICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChgXiR7dGhpcy5lc2NhcGVSZWdFeHAoc2VjdGlvbklkKX1cXFxcW1xcXFxkK1xcXFxdXFxcXC4oLispJGApO1xyXG4gICAgY29uc3QgbSA9IGZpZWxkS2V5Lm1hdGNoKHJlKTtcclxuICAgIHJldHVybiBtID8gbVsxXSA6IGZpZWxkS2V5O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBlc2NhcGVSZWdFeHAoczogc3RyaW5nKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBzLnJlcGxhY2UoL1suKis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGF1dG9TYXZlSWZOZWVkZWQoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICBpZiAodGhpcy53aXphcmRDb25maWcuYXV0b1NhdmUgJiYgdGhpcy53aXphcmRDb25maWcub25TdGVwU2F2ZSkge1xyXG4gICAgICBjb25zdCBkYXRhID0gdGhpcy5mb3JtQnVpbGRlcj8uZ2V0Rm9ybVZhbHVlKCkgfHwge307XHJcbiAgICAgIGF3YWl0IHRoaXMud2l6YXJkQ29uZmlnLm9uU3RlcFNhdmUoZGF0YSwgdGhpcy5zdGF0ZS5jdXJyZW50U3RlcCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHN5bmNXaXphcmRTdGF0ZSgpOiB2b2lkIHtcclxuICAgIGlmICghdGhpcy53aXphcmRDb25maWcud2l6YXJkSWQpIHJldHVybjtcclxuXHJcbiAgICBjb25zdCBzeW5jRGF0YTogVWlXaXphcmRTeW5jRGF0YSA9IHtcclxuICAgICAgd2l6YXJkSWQ6IHRoaXMud2l6YXJkQ29uZmlnLndpemFyZElkLFxyXG4gICAgICB3aXphcmRTdGF0ZTogeyAuLi50aGlzLnN0YXRlIH0sXHJcbiAgICAgIHdpemFyZFN0ZXBzOiB0aGlzLndpemFyZFN0ZXBHcm91cHMubWFwKChnKSA9PiAoe1xyXG4gICAgICAgIHRpdGxlOiBnWzBdPy53aXphcmRTdGVwPy5zdGVwVGl0bGUgfHwgZ1swXT8udGl0bGUsXHJcbiAgICAgICAgZGVzY3JpcHRpb246IGdbMF0/LndpemFyZFN0ZXA/LnN0ZXBEZXNjcmlwdGlvbiB8fCBnWzBdPy5kZXNjcmlwdGlvbixcclxuICAgICAgfSkpLFxyXG4gICAgICBpc1dpemFyZE1vZGU6IHRydWUsXHJcbiAgICAgIHNjaGVtYTogdGhpcy5zY2hlbWEsXHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMud2l6YXJkU3luYy5yZWdpc3RlcldpemFyZCh0aGlzLndpemFyZENvbmZpZy53aXphcmRJZCwgc3luY0RhdGEpO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -3,4 +3,4 @@
3
3
  * Tipi per lo schema del form, sezioni e configurazione.
4
4
  */
5
5
  export {};
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvdHlwZXMvc2NoZW1hLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBuZy11aS1zeXN0ZW0vZm9ybS1idWlsZGVyXG4gKiBUaXBpIHBlciBsbyBzY2hlbWEgZGVsIGZvcm0sIHNlemlvbmkgZSBjb25maWd1cmF6aW9uZS5cbiAqL1xuXG5pbXBvcnQgeyBVaUZvcm1GaWVsZERlc2NyaXB0b3IgfSBmcm9tICcuL2ZpZWxkLnR5cGVzJztcbmltcG9ydCB7IFVpRmllbGRDb25kaXRpb24gfSBmcm9tICcuL2NvbmRpdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBVaUljb25OYW1lIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90eXBlcyc7XG5cbi8vIOKUgOKUgOKUgCBXaXphcmQgc3RlcCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBDb25maWd1cmF6aW9uZSBkaSB2YWxpZGF6aW9uZSBwZXIgdW4gc2luZ29sbyBzdGVwIGRlbCB3aXphcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlXaXphcmRTdGVwVmFsaWRhdGlvbiB7XG4gIC8qKiBTZSBsbyBzdGVwIHJpY2hpZWRlIHZhbGlkYXppb25lIHByaW1hIGRpIHByb2NlZGVyZS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKiBDYW1waSBzcGVjaWZpY2kgZGEgdmFsaWRhcmUgaW4gcXVlc3RvIHN0ZXAgKHNlIG9tZXNzbywgdHV0dGkgaSBjYW1waSBkZWxsbyBzdGVwKS4gKi9cbiAgdmFsaWRhdGVGaWVsZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFNlIGBmYWxzZWAsIG5lbGxhIG5hdmlnYXppb25lIHdpemFyZCBpIGNhbXBpIGB0eXBlOiAnY3VzdG9tJ2Agbm9uIGNvbmNvcnJvbm9cbiAgICogYWxsYSB2YWxpZGl0w6AgZGVsbG8gc3RlcCAoZSBpIGxvcm8gZXJyb3JpIG5vbiBibG9jY2FubyBpbCBwYXNzYWdnaW8pLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB2YWxpZGF0ZUN1c3RvbUNvbXBvbmVudHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZ1bnppb25lIGRpIHZhbGlkYXppb25lIGN1c3RvbSBwZXIgdW5vIHN0ZXAgZGVsIHdpemFyZC5cbiAqIFZpZW5lIGludm9jYXRhIHByaW1hIGRlbGxhIG5hdmlnYXppb25lIGFsbG8gc3RlcCBzdWNjZXNzaXZvLlxuICpcbiAqIEBwYXJhbSBmb3JtRGF0YSAtIERhdGkgY29ycmVudGkgZGVsIGZvcm0gY29tcGxldG8uXG4gKiBAcGFyYW0gY3VycmVudFN0ZXAgLSBJbmRpY2UgZGVsbG8gc3RlcCBjb3JyZW50ZSAoMC1iYXNlZCkuXG4gKiBAcGFyYW0gaXNWYWxpZCAtIFJpc3VsdGF0byBkZWxsYSB2YWxpZGF6aW9uZSBzdGFuZGFyZCBkZWwgZm9ybS5cbiAqIEByZXR1cm5zIGB0cnVlYCBwZXIgcGVybWV0dGVyZSBsYSBuYXZpZ2F6aW9uZSwgYGZhbHNlYCBwZXIgYmxvY2NhcmxhLlxuICovXG5leHBvcnQgdHlwZSBVaVdpemFyZFZhbGlkYXRpb25GbiA9IChcbiAgZm9ybURhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGN1cnJlbnRTdGVwOiBudW1iZXIsXG4gIGlzVmFsaWQ6IGJvb2xlYW4sXG4pID0+IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuO1xuXG4vKipcbiAqIENvbmZpZ3VyYXppb25lIHdpemFyZCBwZXIgdW5hIHNlemlvbmUgZGVsIGZvcm0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlXaXphcmRTdGVwQ29uZmlnIHtcbiAgLyoqIE51bWVybyBkZWxsbyBzdGVwICgxLWJhc2VkIHBlciBVSSwgY29udmVydGl0byBhIDAtYmFzZWQgaW50ZXJuYW1lbnRlKS4gKi9cbiAgc3RlcE51bWJlcjogbnVtYmVyO1xuICAvKiogVGl0b2xvIHBlcnNvbmFsaXp6YXRvIHBlciBsbyBzdGVwLiAqL1xuICBzdGVwVGl0bGU/OiBzdHJpbmc7XG4gIC8qKiBEZXNjcml6aW9uZSBkZWxsbyBzdGVwLiAqL1xuICBzdGVwRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBDb25maWd1cmF6aW9uZSBkaSB2YWxpZGF6aW9uZSBwZXIgcXVlc3RvIHN0ZXAuICovXG4gIHZhbGlkYXRpb24/OiBVaVdpemFyZFN0ZXBWYWxpZGF0aW9uO1xuICAvKiogUGVybWV0dGUgZGkgc2FsdGFyZSBxdWVzdG8gc3RlcCBzZW56YSB2YWxpZGF6aW9uZS4gKi9cbiAgYWxsb3dTa2lwPzogYm9vbGVhbjtcbiAgLyoqIE5vbWUgZGVsIG1ldG9kbyBkaSB2YWxpZGF6aW9uZSBjdXN0b20gKGRldmUgZXNzZXJlIHJlZ2lzdHJhdG8gbmVsIHdpemFyZCkuICovXG4gIGN1c3RvbVZhbGlkYXRpb25Gbj86IHN0cmluZztcbiAgLyoqIE1ldGFkYXRpIGFnZ2l1bnRpdmkgcGVyIGxvIHN0ZXAuICovXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLy8g4pSA4pSA4pSAIFNlemlvbmUgcmlwZXRpYmlsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBDb25maWd1cmF6aW9uZSBwZXIgc2V6aW9uaSByaXBldGliaWxpIChkeW5hbWljIHJlcGVhdGVyKS5cbiAqIFBlcm1ldHRlIGRpIGFnZ2l1bmdlcmUvcmltdW92ZXJlL2R1cGxpY2FyZSBOIGlzdGFuemUgZGkgdW4gYmxvY2NvXG4gKiBkaSBjYW1waSwgY29uIGlsIG1vZGVsbG8gcmVhdHRpdm8gZ2VzdGl0byB0cmFtaXRlIEZvcm1BcnJheS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2VjdGlvbjogVWlGb3JtU2VjdGlvbiA9IHtcbiAqICAgaWQ6ICdvYmlldHRpdmknLFxuICogICB0aXRsZTogJ09iaWV0dGl2aSBmb3JtYXRpdmknLFxuICogICByZXBlYXRhYmxlOiB7XG4gKiAgICAgbWluOiAxLFxuICogICAgIG1heDogMTAsXG4gKiAgICAgYWRkTGFiZWw6ICdBZ2dpdW5naSBvYmlldHRpdm8nLFxuICogICAgIGFkZEljb246ICdwbHVzJyxcbiAqICAgICBpbnN0YW5jZVRpdGxlOiAnT2JpZXR0aXZvIHtpbmRleH0nLFxuICogICB9LFxuICogICBmaWVsZHM6IFsgLi4uIF0sXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlSZXBlYXRhYmxlQ29uZmlnIHtcbiAgLyoqXG4gICAqIE51bWVybyBtaW5pbW8gZGkgaXN0YW56ZSBvYmJsaWdhdG9yaWUuXG4gICAqIFNlIGBtaW4gPiAwYCwgYWxsYSBjcmVhemlvbmUgZGVsIGZvcm0gdmVuZ29ubyBwcmUtY3JlYXRlIGFsbWVubyBgbWluYCBpc3RhbnplXG4gICAqICh2dW90ZSBvIGRhIGBpbml0aWFsRGF0YVtzZWN0aW9uSWRdYCkuIFNlIG9tZXNzbywgdmFsZSBgMWAuXG4gICAqIENvbiBgbWluOiAwYCBub24gc2kgYWdnaXVuZ29ubyByaWdoZSBvbHRyZSBhIHF1ZWxsZSBnacOgIHByZXNlbnRpIGluIGBpbml0aWFsRGF0YWAuXG4gICAqL1xuICBtaW4/OiBudW1iZXI7XG4gIC8qKiBOdW1lcm8gbWFzc2ltbyBkaSBpc3RhbnplICh1bmRlZmluZWQgPSBpbGxpbWl0YXRvKS4gKi9cbiAgbWF4PzogbnVtYmVyO1xuICAvKiogTGFiZWwgcGVyIGlsIHB1bHNhbnRlIFwiQWdnaXVuZ2lcIi4gQGRlZmF1bHQgJysgQWdnaXVuZ2knICovXG4gIGFkZExhYmVsPzogc3RyaW5nO1xuICAvKiogSWNvbmEgTHVjaWRlIHBlciBpbCBwdWxzYW50ZSBcIkFnZ2l1bmdpXCIuIEBkZWZhdWx0ICdwbHVzJyAqL1xuICBhZGRJY29uPzogVWlJY29uTmFtZTtcbiAgLyoqIFRlbXBsYXRlIHBlciBpbCB0aXRvbG8gZGkgb2duaSBpc3RhbnphLiBge2luZGV4fWAgdmllbmUgc29zdGl0dWl0byBjb24gbCdpbmRpY2UgMS1iYXNlZC4gKi9cbiAgaW5zdGFuY2VUaXRsZT86IHN0cmluZztcbiAgLyoqIFNlIHJpY2hpZWRlcmUgY29uZmVybWEgcHJpbWEgZGVsbGEgcmltb3ppb25lLiBAZGVmYXVsdCBmYWxzZSAqL1xuICBjb25maXJtUmVtb3ZlPzogYm9vbGVhbjtcbiAgLyoqIE1lc3NhZ2dpbyBkaSBjb25mZXJtYSByaW1vemlvbmUuIEBkZWZhdWx0ICdTZWkgc2ljdXJvIGRpIHZvbGVyIHJpbXVvdmVyZSBxdWVzdGEgc2V6aW9uZT8nICovXG4gIGNvbmZpcm1NZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vLyDilIDilIDilIAgU2V6aW9uZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTZXppb25lIGRlbCBmb3JtIGNoZSByYWdncnVwcGEgY2FtcGkgY29ycmVsYXRpLlxuICogU3VwcG9ydGEgY29sbGFwc2liaWxpdGEgKGFjY29yZGlvbiksIGNvbmRpemlvbmkgZGkgdmlzaWJpbGl0YSxcbiAqIGNvbmZpZ3VyYXppb25lIHdpemFyZCBvcHppb25hbGUgZSByaXBldGliaWxpdGEgZGluYW1pY2EuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNlY3Rpb246IFVpRm9ybVNlY3Rpb24gPSB7XG4gKiAgIGlkOiAnYW5hZ3JhZmljYScsXG4gKiAgIHRpdGxlOiAnRGF0aSBhbmFncmFmaWNpJyxcbiAqICAgZGVzY3JpcHRpb246ICdJbmZvcm1hemlvbmkgcGVyc29uYWxpIGRlbCBjYW5kaWRhdG8nLFxuICogICBjb2xsYXBzaWJsZTogdHJ1ZSxcbiAqICAgZmllbGRzOiBbIC4uLiBdLFxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpRm9ybVNlY3Rpb24ge1xuICAvKiogSUQgdW5pdm9jbyBkZWxsYSBzZXppb25lLiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogVGl0b2xvIGRlbGxhIHNlemlvbmUuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICAvKiogRGVzY3JpemlvbmUgZGVsbGEgc2V6aW9uZS4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBJY29uYSBMdWNpZGUgb3B6aW9uYWxlIHBlciBsYSBzZXppb25lICh2aXNpYmlsZSBpbiBtb2RhbGl0w6AgY29sbGFwc2libGUpLiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucyAqL1xuICBpY29uPzogVWlJY29uTmFtZTtcbiAgLyoqIENhbXBpIGNvbnRlbnV0aSBuZWxsYSBzZXppb25lLiAqL1xuICBmaWVsZHM6IFVpRm9ybUZpZWxkRGVzY3JpcHRvcltdO1xuICAvKiogQ29uZGl6aW9uaSBwZXIgbGEgdmlzaWJpbGl0YSBkZWxsYSBzZXppb25lLiAqL1xuICBjb25kaXRpb25zPzogVWlGaWVsZENvbmRpdGlvbltdO1xuICAvKiogU2UgbGEgc2V6aW9uZSBlIGNvbGxhc3NhYmlsZSAoYWNjb3JkaW9uKS4gKi9cbiAgY29sbGFwc2libGU/OiBib29sZWFuO1xuICAvKiogU2UgbGEgc2V6aW9uZSBlIGluaXppYWxtZW50ZSBjb2xsYXNzYXRhLiBAZGVmYXVsdCBmYWxzZSAqL1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xuICAvKiogQ2xhc3NpIENTUyBhZ2dpdW50aXZlIHBlciBsYSBzZXppb25lLiAqL1xuICBjc3NDbGFzc2VzPzogc3RyaW5nW107XG4gIC8qKiBDb25maWd1cmF6aW9uZSB3aXphcmQgcGVyIHF1ZXN0YSBzZXppb25lLiAqL1xuICB3aXphcmRTdGVwPzogVWlXaXphcmRTdGVwQ29uZmlnO1xuICAvKiogQ29uZmlndXJhemlvbmUgcGVyIHNlemlvbmUgcmlwZXRpYmlsZS4gU2UgZGVmaW5pdG8sIGxhIHNlemlvbmUgZGl2ZW50YSB1biBkeW5hbWljIHJlcGVhdGVyLiAqL1xuICByZXBlYXRhYmxlPzogVWlSZXBlYXRhYmxlQ29uZmlnO1xufVxuXG4vLyDilIDilIDilIAgQ29uZmlndXJhemlvbmUgZm9ybSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBDb25maWd1cmF6aW9uZSBnbG9iYWxlIGRlbCBmb3JtIGJ1aWxkZXIuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlGb3JtQnVpbGRlckNvbmZpZyB7XG4gIC8qKiBMYXlvdXQgZGVsIGZvcm0uIEBkZWZhdWx0ICdncmlkJyAqL1xuICBsYXlvdXQ/OiAndmVydGljYWwnIHwgJ2hvcml6b250YWwnIHwgJ2dyaWQnO1xuICAvKiogTnVtZXJvIGRpIGNvbG9ubmUgbmVsIGdyaWQuIEBkZWZhdWx0IDEyICovXG4gIGNvbHVtbnM/OiBudW1iZXI7XG4gIC8qKiBNb3N0cmEgaSBwdWxzYW50aSBkaSBhemlvbmUgKHN1Ym1pdC9yZXNldCkuIEBkZWZhdWx0IHRydWUgKi9cbiAgc2hvd0J1dHRvbnM/OiBib29sZWFuO1xuICAvKiogTmFzY29uZGUgbCdpbnRlcm8gZm9vdGVyIChwdWxzYW50aSArIGVycm9yIHN1bW1hcnkpLiAqL1xuICBoaWRlRm9vdGVyPzogYm9vbGVhbjtcbiAgLyoqIExhYmVsIHBlcnNvbmFsaXp6YXRlIHBlciBpIHB1bHNhbnRpLiAqL1xuICBidXR0b25MYWJlbHM/OiB7XG4gICAgc3VibWl0Pzogc3RyaW5nO1xuICAgIHJlc2V0Pzogc3RyaW5nO1xuICAgIGNhbmNlbD86IHN0cmluZztcbiAgfTtcbiAgLyoqIENsYXNzaSBDU1MgZ2xvYmFsaSBzdWwgY29udGFpbmVyIGRlbCBmb3JtLiAqL1xuICBjc3NDbGFzc2VzPzogc3RyaW5nW107XG59XG5cbi8vIOKUgOKUgOKUgCBDb25maWd1cmF6aW9uZSB3aXphcmQg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQ29uZmlndXJhemlvbmUgcGVyIGxhIG1vZGFsaXRhIHdpemFyZCBkZWwgZm9ybS5cbiAqIFVzYXRhIGRhbCBjb21wb25lbnRlIGBVaUZvcm1XaXphcmRDb21wb25lbnRgLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0eXBlc2NyaXB0XG4gKiBjb25zdCB3aXphcmRDb25maWc6IFVpV2l6YXJkQ29uZmlnID0ge1xuICogICBzaG93UHJvZ3Jlc3M6IHRydWUsXG4gKiAgIHByb2dyZXNzU3R5bGU6ICdzdGVwcycsXG4gKiAgIGFsbG93QmFja05hdmlnYXRpb246IHRydWUsXG4gKiAgIGJ1dHRvbkxhYmVsczogeyBuZXh0OiAnQXZhbnRpJywgcHJldmlvdXM6ICdJbmRpZXRybycsIGZpbmlzaDogJ0NvbXBsZXRhJyB9LFxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpV2l6YXJkQ29uZmlnIHtcbiAgLyoqIElEIHBlciBzaW5jcm9uaXp6YXppb25lIHdpcmVsZXNzIHRyYSBpc3RhbnplLiAqL1xuICB3aXphcmRJZD86IHN0cmluZztcbiAgLyoqIE5hc2NvbmRlIGwnaGVhZGVyIGludGVybm8gZGVsIHdpemFyZCBwZXIgY29uc2VudGlyZSB1biBoZWFkZXIgZXN0ZXJuby4gKi9cbiAgd2lyZWxlc3NIZWFkaW5nPzogYm9vbGVhbjtcbiAgLyoqIE1vc3RyYSBsYSBiYXJyYSBkaSBwcm9ncmVzc28uIEBkZWZhdWx0IHRydWUgKi9cbiAgc2hvd1Byb2dyZXNzPzogYm9vbGVhbjtcbiAgLyoqIFN0aWxlIGRlbGxhIGJhcnJhIGRpIHByb2dyZXNzby4gQGRlZmF1bHQgJ3N0ZXBzJyAqL1xuICBwcm9ncmVzc1N0eWxlPzogJ2xpbmVhcicgfCAnc3RlcHMnO1xuICAvKiogUGVybWV0dGUgbmF2aWdhemlvbmUgYWxsJ2luZGlldHJvLiBAZGVmYXVsdCB0cnVlICovXG4gIGFsbG93QmFja05hdmlnYXRpb24/OiBib29sZWFuO1xuICAvKiogUGVybWV0dGUgbmF2aWdhemlvbmUgaW4gYXZhbnRpIHNlbnphIHZhbGlkYXppb25lLiBAZGVmYXVsdCBmYWxzZSAqL1xuICBhbGxvd0ZvcndhcmROYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFNhbHZhIGF1dG9tYXRpY2FtZW50ZSBpIGRhdGkgYWQgb2duaSBjYW1iaW8gc3RlcC4gKi9cbiAgYXV0b1NhdmU/OiBib29sZWFuO1xuICAvKiogQ2FsbGJhY2sgcGVyIGlsIHNhbHZhdGFnZ2lvIGRlaSBkYXRpIGRlbGxvIHN0ZXAuICovXG4gIG9uU3RlcFNhdmU/OiAoc3RlcERhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sIHN0ZXBOdW1iZXI6IG51bWJlcikgPT4gUHJvbWlzZTx2b2lkPiB8IHZvaWQ7XG4gIC8qKiBNb3N0cmEgcHVsc2FudGkgZGkgbmF2aWdhemlvbmUgKHByZWNlZGVudGUvc3VjY2Vzc2l2bykuIEBkZWZhdWx0IHRydWUgKi9cbiAgc2hvd05hdmlnYXRpb25CdXR0b25zPzogYm9vbGVhbjtcbiAgLyoqIExhYmVsIHBlcnNvbmFsaXp6YXRlIHBlciBpIHB1bHNhbnRpIGRlbCB3aXphcmQuICovXG4gIGJ1dHRvbkxhYmVscz86IHtcbiAgICBwcmV2aW91cz86IHN0cmluZztcbiAgICBuZXh0Pzogc3RyaW5nO1xuICAgIGZpbmlzaD86IHN0cmluZztcbiAgICBzYXZlPzogc3RyaW5nO1xuICB9O1xufVxuXG4vKipcbiAqIFN0YXRvIGNvcnJlbnRlIGRlbCB3aXphcmQsIGVzcG9zdG8gZGFsIGBXaXphcmRTeW5jU2VydmljZWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlXaXphcmRTdGF0ZSB7XG4gIC8qKiBTdGVwIGNvcnJlbnRlICgwLWJhc2VkKS4gKi9cbiAgY3VycmVudFN0ZXA6IG51bWJlcjtcbiAgLyoqIE51bWVybyB0b3RhbGUgZGkgc3RlcC4gKi9cbiAgdG90YWxTdGVwczogbnVtYmVyO1xuICAvKiogSW5kaWNpIGRlZ2xpIHN0ZXAgY29tcGxldGF0aS4gKi9cbiAgY29tcGxldGVkU3RlcHM6IFNldDxudW1iZXI+O1xuICAvKiogSW5kaWNpIGRlZ2xpIHN0ZXAgdmlzaXRhdGkuICovXG4gIHZpc2l0ZWRTdGVwczogU2V0PG51bWJlcj47XG4gIC8qKiBTZSBpbCBmb3JtIG5lbGxvIHN0ZXAgY29ycmVudGUgZSB2YWxpZG8uICovXG4gIGlzVmFsaWQ6IGJvb2xlYW47XG4gIC8qKiBFcnJvcmkgcGVyIHN0ZXAuICovXG4gIHN0ZXBFcnJvcnM6IFJlY29yZDxudW1iZXIsIHN0cmluZ1tdPjtcbn1cblxuLy8g4pSA4pSA4pSAIFNjaGVtYSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTY2hlbWEgY29tcGxldG8gZGVsIGZvcm0uXG4gKlxuICogUmFwcHJlc2VudGEgbGEgY29uZmlndXJhemlvbmUgZGljaGlhcmF0aXZhIGRlbGwnaW50ZXJvIGZvcm06XG4gKiBzZXppb25pLCBjYW1waSwgdmFsaWRhemlvbmksIGNvbmRpemlvbmkgZSBpbXBvc3RhemlvbmkgZ2xvYmFsaS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogZXhwb3J0IGNvbnN0IG15Rm9ybTogVWlGb3JtU2NoZW1hID0ge1xuICogICBpZDogJ3VzZXItcmVnaXN0cmF0aW9uJyxcbiAqICAgdGl0bGU6ICdSZWdpc3RyYXppb25lIHV0ZW50ZScsXG4gKiAgIHNlY3Rpb25zOiBbXG4gKiAgICAgeyBpZDogJ3BlcnNvbmFsJywgdGl0bGU6ICdEYXRpIHBlcnNvbmFsaScsIGZpZWxkczogWy4uLl0gfSxcbiAqICAgICB7IGlkOiAnYWRkcmVzcycsIHRpdGxlOiAnSW5kaXJpenpvJywgZmllbGRzOiBbLi4uXSwgY29sbGFwc2libGU6IHRydWUgfSxcbiAqICAgXSxcbiAqICAgY29uZmlnOiB7IGNvbHVtbnM6IDEyLCBzaG93QnV0dG9uczogdHJ1ZSB9LFxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpRm9ybVNjaGVtYSB7XG4gIC8qKiBJRCB1bml2b2NvIGRlbCBmb3JtLiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogVGl0b2xvIGRlbCBmb3JtLiAqL1xuICB0aXRsZT86IHN0cmluZztcbiAgLyoqIERlc2NyaXppb25lIGRlbCBmb3JtLiAqL1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgLyoqIFNlemlvbmkgZGVsIGZvcm0uICovXG4gIHNlY3Rpb25zOiBVaUZvcm1TZWN0aW9uW107XG4gIC8qKiBDb25maWd1cmF6aW9uZSBnbG9iYWxlLiAqL1xuICBjb25maWc/OiBVaUZvcm1CdWlsZGVyQ29uZmlnO1xufVxuXG4vLyDilIDilIDilIAgVGlwaSBkaSB1dGlsaXRhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIERhdGkgZGVsIGZvcm0gY29tZSBtYXBwYSBjaGlhdmUtdmFsb3JlLlxuICovXG5leHBvcnQgdHlwZSBVaUZvcm1EYXRhID0gUmVjb3JkPHN0cmluZywgYW55PjtcblxuLyoqXG4gKiBFdmVudG8gZW1lc3NvIGRhaSBjYW1waSBjdXN0b20uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlGb3JtQ3VzdG9tRXZlbnQge1xuICAvKiogQ2hpYXZlIGRlbCBjYW1wbyBjaGUgaGEgZW1lc3NvIGwnZXZlbnRvLiAqL1xuICBmaWVsZDogc3RyaW5nO1xuICAvKiogTm9tZSBkZWxsJ2V2ZW50by4gKi9cbiAgZXZlbnQ6IHN0cmluZztcbiAgLyoqIERhdGkgYXNzb2NpYXRpIGFsbCdldmVudG8uICovXG4gIGRhdGE6IGFueTtcbn1cblxuLyoqXG4gKiBFdmVudG8gZW1lc3NvIGFsIGNhbWJpbyBzdGVwIGRlbCB3aXphcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlXaXphcmRTdGVwQ2hhbmdlRXZlbnQge1xuICAvKiogSW5kaWNlIGRlbGxvIHN0ZXAgZGkgcGFydGVuemEuICovXG4gIGZyb206IG51bWJlcjtcbiAgLyoqIEluZGljZSBkZWxsbyBzdGVwIGRpIGRlc3RpbmF6aW9uZS4gKi9cbiAgdG86IG51bWJlcjtcbiAgLyoqIERpcmV6aW9uZSBkZWxsYSBuYXZpZ2F6aW9uZS4gKi9cbiAgZGlyZWN0aW9uOiAnbmV4dCcgfCAncHJldmlvdXMnO1xufVxuXG4vKipcbiAqIEV2ZW50byBlbWVzc28gYWwgY29tcGxldGFtZW50byBkaSB1bm8gc3RlcC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaVdpemFyZFN0ZXBDb21wbGV0ZUV2ZW50IHtcbiAgLyoqIEluZGljZSBkZWxsbyBzdGVwIGNvbXBsZXRhdG8uICovXG4gIHN0ZXA6IG51bWJlcjtcbiAgLyoqIERhdGkgZGVsIGZvcm0gYWwgbW9tZW50byBkZWwgY29tcGxldGFtZW50by4gKi9cbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cbiJdfQ==
6
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NoZW1hLnR5cGVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvbmctdWktc3lzdGVtL3NyYy9saWIvY29tcG9uZW50cy9mb3JtLWJ1aWxkZXIvdHlwZXMvc2NoZW1hLnR5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQG1vZHVsZSBuZy11aS1zeXN0ZW0vZm9ybS1idWlsZGVyXG4gKiBUaXBpIHBlciBsbyBzY2hlbWEgZGVsIGZvcm0sIHNlemlvbmkgZSBjb25maWd1cmF6aW9uZS5cbiAqL1xuXG5pbXBvcnQgeyBVaUZvcm1GaWVsZERlc2NyaXB0b3IgfSBmcm9tICcuL2ZpZWxkLnR5cGVzJztcbmltcG9ydCB7IFVpRmllbGRDb25kaXRpb24gfSBmcm9tICcuL2NvbmRpdGlvbi50eXBlcyc7XG5pbXBvcnQgeyBVaUljb25OYW1lIH0gZnJvbSAnLi4vLi4vLi4vY29yZS90eXBlcyc7XG5cbi8vIOKUgOKUgOKUgCBXaXphcmQgc3RlcCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBDb25maWd1cmF6aW9uZSBkaSB2YWxpZGF6aW9uZSBwZXIgdW4gc2luZ29sbyBzdGVwIGRlbCB3aXphcmQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlXaXphcmRTdGVwVmFsaWRhdGlvbiB7XG4gIC8qKiBTZSBsbyBzdGVwIHJpY2hpZWRlIHZhbGlkYXppb25lIHByaW1hIGRpIHByb2NlZGVyZS4gQGRlZmF1bHQgdHJ1ZSAqL1xuICByZXF1aXJlZD86IGJvb2xlYW47XG4gIC8qKiBDYW1waSBzcGVjaWZpY2kgZGEgdmFsaWRhcmUgaW4gcXVlc3RvIHN0ZXAgKHNlIG9tZXNzbywgdHV0dGkgaSBjYW1waSBkZWxsbyBzdGVwKS4gKi9cbiAgdmFsaWRhdGVGaWVsZHM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFNlIGBmYWxzZWAsIG5lbGxhIG5hdmlnYXppb25lIHdpemFyZCBpIGNhbXBpIGB0eXBlOiAnY3VzdG9tJ2Agbm9uIGNvbmNvcnJvbm9cbiAgICogYWxsYSB2YWxpZGl0w6AgZGVsbG8gc3RlcCAoZSBpIGxvcm8gZXJyb3JpIG5vbiBibG9jY2FubyBpbCBwYXNzYWdnaW8pLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICB2YWxpZGF0ZUN1c3RvbUNvbXBvbmVudHM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZ1bnppb25lIGRpIHZhbGlkYXppb25lIGN1c3RvbSBwZXIgdW5vIHN0ZXAgZGVsIHdpemFyZC5cbiAqIFZpZW5lIGludm9jYXRhIHByaW1hIGRlbGxhIG5hdmlnYXppb25lIGFsbG8gc3RlcCBzdWNjZXNzaXZvLlxuICpcbiAqIEBwYXJhbSBmb3JtRGF0YSAtIERhdGkgY29ycmVudGkgZGVsIGZvcm0gY29tcGxldG8uXG4gKiBAcGFyYW0gY3VycmVudFN0ZXAgLSBJbmRpY2UgZGVsbG8gc3RlcCBjb3JyZW50ZSAoMC1iYXNlZCkuXG4gKiBAcGFyYW0gaXNWYWxpZCAtIFJpc3VsdGF0byBkZWxsYSB2YWxpZGF6aW9uZSBzdGFuZGFyZCBkZWwgZm9ybS5cbiAqIEByZXR1cm5zIGB0cnVlYCBwZXIgcGVybWV0dGVyZSBsYSBuYXZpZ2F6aW9uZSwgYGZhbHNlYCBwZXIgYmxvY2NhcmxhLlxuICovXG5leHBvcnQgdHlwZSBVaVdpemFyZFZhbGlkYXRpb25GbiA9IChcbiAgZm9ybURhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gIGN1cnJlbnRTdGVwOiBudW1iZXIsXG4gIGlzVmFsaWQ6IGJvb2xlYW4sXG4pID0+IFByb21pc2U8Ym9vbGVhbj4gfCBib29sZWFuO1xuXG4vKipcbiAqIENvbmZpZ3VyYXppb25lIHdpemFyZCBwZXIgdW5hIHNlemlvbmUgZGVsIGZvcm0uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlXaXphcmRTdGVwQ29uZmlnIHtcbiAgLyoqIE51bWVybyBkZWxsbyBzdGVwICgxLWJhc2VkIHBlciBVSSwgY29udmVydGl0byBhIDAtYmFzZWQgaW50ZXJuYW1lbnRlKS4gKi9cbiAgc3RlcE51bWJlcjogbnVtYmVyO1xuICAvKiogVGl0b2xvIHBlcnNvbmFsaXp6YXRvIHBlciBsbyBzdGVwLiAqL1xuICBzdGVwVGl0bGU/OiBzdHJpbmc7XG4gIC8qKiBEZXNjcml6aW9uZSBkZWxsbyBzdGVwLiAqL1xuICBzdGVwRGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBDb25maWd1cmF6aW9uZSBkaSB2YWxpZGF6aW9uZSBwZXIgcXVlc3RvIHN0ZXAuICovXG4gIHZhbGlkYXRpb24/OiBVaVdpemFyZFN0ZXBWYWxpZGF0aW9uO1xuICAvKiogUGVybWV0dGUgZGkgc2FsdGFyZSBxdWVzdG8gc3RlcCBzZW56YSB2YWxpZGF6aW9uZS4gKi9cbiAgYWxsb3dTa2lwPzogYm9vbGVhbjtcbiAgLyoqIE5vbWUgZGVsIG1ldG9kbyBkaSB2YWxpZGF6aW9uZSBjdXN0b20gKGRldmUgZXNzZXJlIHJlZ2lzdHJhdG8gbmVsIHdpemFyZCkuICovXG4gIGN1c3RvbVZhbGlkYXRpb25Gbj86IHN0cmluZztcbiAgLyoqIE1ldGFkYXRpIGFnZ2l1bnRpdmkgcGVyIGxvIHN0ZXAuICovXG4gIG1ldGFkYXRhPzogUmVjb3JkPHN0cmluZywgYW55Pjtcbn1cblxuLy8g4pSA4pSA4pSAIFNlemlvbmUgcmlwZXRpYmlsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBDb25maWd1cmF6aW9uZSBwZXIgc2V6aW9uaSByaXBldGliaWxpIChkeW5hbWljIHJlcGVhdGVyKS5cbiAqIFBlcm1ldHRlIGRpIGFnZ2l1bmdlcmUvcmltdW92ZXJlL2R1cGxpY2FyZSBOIGlzdGFuemUgZGkgdW4gYmxvY2NvXG4gKiBkaSBjYW1waSwgY29uIGlsIG1vZGVsbG8gcmVhdHRpdm8gZ2VzdGl0byB0cmFtaXRlIEZvcm1BcnJheS5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgc2VjdGlvbjogVWlGb3JtU2VjdGlvbiA9IHtcbiAqICAgaWQ6ICdvYmlldHRpdmknLFxuICogICB0aXRsZTogJ09iaWV0dGl2aSBmb3JtYXRpdmknLFxuICogICByZXBlYXRhYmxlOiB7XG4gKiAgICAgbWluOiAxLFxuICogICAgIG1heDogMTAsXG4gKiAgICAgYWRkTGFiZWw6ICdBZ2dpdW5naSBvYmlldHRpdm8nLFxuICogICAgIGFkZEljb246ICdwbHVzJyxcbiAqICAgICBpbnN0YW5jZVRpdGxlOiAnT2JpZXR0aXZvIHtpbmRleH0nLFxuICogICB9LFxuICogICBmaWVsZHM6IFsgLi4uIF0sXG4gKiB9O1xuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlSZXBlYXRhYmxlQ29uZmlnIHtcbiAgLyoqXG4gICAqIE51bWVybyBtaW5pbW8gZGkgaXN0YW56ZSBvYmJsaWdhdG9yaWUuXG4gICAqIFNlIGBtaW4gPiAwYCwgYWxsYSBjcmVhemlvbmUgZGVsIGZvcm0gdmVuZ29ubyBwcmUtY3JlYXRlIGFsbWVubyBgbWluYCBpc3RhbnplXG4gICAqICh2dW90ZSBvIGRhIGBpbml0aWFsRGF0YVtzZWN0aW9uSWRdYCkuIFNlIG9tZXNzbywgdmFsZSBgMWAuXG4gICAqIENvbiBgbWluOiAwYCBub24gc2kgYWdnaXVuZ29ubyByaWdoZSBvbHRyZSBhIHF1ZWxsZSBnacOgIHByZXNlbnRpIGluIGBpbml0aWFsRGF0YWAuXG4gICAqL1xuICBtaW4/OiBudW1iZXI7XG4gIC8qKiBOdW1lcm8gbWFzc2ltbyBkaSBpc3RhbnplICh1bmRlZmluZWQgPSBpbGxpbWl0YXRvKS4gKi9cbiAgbWF4PzogbnVtYmVyO1xuICAvKiogTGFiZWwgcGVyIGlsIHB1bHNhbnRlIFwiQWdnaXVuZ2lcIi4gQGRlZmF1bHQgJysgQWdnaXVuZ2knICovXG4gIGFkZExhYmVsPzogc3RyaW5nO1xuICAvKiogSWNvbmEgTHVjaWRlIHBlciBpbCBwdWxzYW50ZSBcIkFnZ2l1bmdpXCIuIEBkZWZhdWx0ICdwbHVzJyAqL1xuICBhZGRJY29uPzogVWlJY29uTmFtZTtcbiAgLyoqIFRlbXBsYXRlIHBlciBpbCB0aXRvbG8gZGkgb2duaSBpc3RhbnphLiBge2luZGV4fWAgdmllbmUgc29zdGl0dWl0byBjb24gbCdpbmRpY2UgMS1iYXNlZC4gKi9cbiAgaW5zdGFuY2VUaXRsZT86IHN0cmluZztcbiAgLyoqIFNlIHJpY2hpZWRlcmUgY29uZmVybWEgcHJpbWEgZGVsbGEgcmltb3ppb25lLiBAZGVmYXVsdCBmYWxzZSAqL1xuICBjb25maXJtUmVtb3ZlPzogYm9vbGVhbjtcbiAgLyoqIE1lc3NhZ2dpbyBkaSBjb25mZXJtYSByaW1vemlvbmUuIEBkZWZhdWx0ICdTZWkgc2ljdXJvIGRpIHZvbGVyIHJpbXVvdmVyZSBxdWVzdGEgc2V6aW9uZT8nICovXG4gIGNvbmZpcm1NZXNzYWdlPzogc3RyaW5nO1xufVxuXG4vLyDilIDilIDilIAgU2V6aW9uZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBTZXppb25lIGRlbCBmb3JtIGNoZSByYWdncnVwcGEgY2FtcGkgY29ycmVsYXRpLlxuICogU3VwcG9ydGEgY29sbGFwc2liaWxpdGEgKGFjY29yZGlvbiksIGNvbmRpemlvbmkgZGkgdmlzaWJpbGl0YSxcbiAqIGNvbmZpZ3VyYXppb25lIHdpemFyZCBvcHppb25hbGUgZSByaXBldGliaWxpdGEgZGluYW1pY2EuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHNlY3Rpb246IFVpRm9ybVNlY3Rpb24gPSB7XG4gKiAgIGlkOiAnYW5hZ3JhZmljYScsXG4gKiAgIHRpdGxlOiAnRGF0aSBhbmFncmFmaWNpJyxcbiAqICAgZGVzY3JpcHRpb246ICdJbmZvcm1hemlvbmkgcGVyc29uYWxpIGRlbCBjYW5kaWRhdG8nLFxuICogICBjb2xsYXBzaWJsZTogdHJ1ZSxcbiAqICAgZmllbGRzOiBbIC4uLiBdLFxuICogfTtcbiAqIGBgYFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpRm9ybVNlY3Rpb24ge1xuICAvKiogSUQgdW5pdm9jbyBkZWxsYSBzZXppb25lLiAqL1xuICBpZDogc3RyaW5nO1xuICAvKiogVGl0b2xvIGRlbGxhIHNlemlvbmUuICovXG4gIHRpdGxlPzogc3RyaW5nO1xuICAvKiogRGVzY3JpemlvbmUgZGVsbGEgc2V6aW9uZS4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBJY29uYSBMdWNpZGUgb3B6aW9uYWxlIHBlciBsYSBzZXppb25lICh2aXNpYmlsZSBpbiBtb2RhbGl0w6AgY29sbGFwc2libGUpLiBAc2VlIGh0dHBzOi8vbHVjaWRlLmRldi9pY29ucyAqL1xuICBpY29uPzogVWlJY29uTmFtZTtcbiAgLyoqIENhbXBpIGNvbnRlbnV0aSBuZWxsYSBzZXppb25lLiAqL1xuICBmaWVsZHM6IFVpRm9ybUZpZWxkRGVzY3JpcHRvcltdO1xuICAvKiogQ29uZGl6aW9uaSBwZXIgbGEgdmlzaWJpbGl0YSBkZWxsYSBzZXppb25lLiAqL1xuICBjb25kaXRpb25zPzogVWlGaWVsZENvbmRpdGlvbltdO1xuICAvKiogU2UgbGEgc2V6aW9uZSBlIGNvbGxhc3NhYmlsZSAoYWNjb3JkaW9uKS4gKi9cbiAgY29sbGFwc2libGU/OiBib29sZWFuO1xuICAvKiogU2UgbGEgc2V6aW9uZSBlIGluaXppYWxtZW50ZSBjb2xsYXNzYXRhLiBAZGVmYXVsdCBmYWxzZSAqL1xuICBjb2xsYXBzZWQ/OiBib29sZWFuO1xuICAvKiogQ2xhc3NpIENTUyBhZ2dpdW50aXZlIHBlciBsYSBzZXppb25lLiAqL1xuICBjc3NDbGFzc2VzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBDb25maWd1cmF6aW9uZSB3aXphcmQgcGVyIHF1ZXN0YSBzZXppb25lLlxuICAgKiBQacO5IHNlemlvbmkgcG9zc29ubyBjb25kaXZpZGVyZSBsbyBzdGVzc28gYHdpemFyZFN0ZXAuc3RlcE51bWJlcmA6IGZvcm1hbm8gdW4gdW5pY29cbiAgICogcGFzc28gZGVsIHdpemFyZCAoZXMuIHBpw7kgYmxvY2NoaSBgY29sbGFwc2libGVgIG5lbGxvIHN0ZXNzbyBzdGVwKS4gVGl0b2xvLCBkZXNjcml6aW9uZVxuICAgKiBlIHZhbGlkYXppb25lIGRlbCBwYXNzbyBzaSBpbnRlbmRvbm8gZGFsbGEgKipwcmltYSoqIHNlemlvbmUgZGVsIGdydXBwbyBpbiBvcmRpbmUgZGkgc2NoZW1hLlxuICAgKiBMZSBjaGlhdmkgZGVpIGNhbXBpIGRldm9ubyByZXN0YXJlIHVuaXZvY2hlIHRyYSB0dXR0ZSBsZSBzZXppb25pIGRlbGxvIHN0ZXNzbyBzY2hlbWEgd2l6YXJkLlxuICAgKi9cbiAgd2l6YXJkU3RlcD86IFVpV2l6YXJkU3RlcENvbmZpZztcbiAgLyoqIENvbmZpZ3VyYXppb25lIHBlciBzZXppb25lIHJpcGV0aWJpbGUuIFNlIGRlZmluaXRvLCBsYSBzZXppb25lIGRpdmVudGEgdW4gZHluYW1pYyByZXBlYXRlci4gKi9cbiAgcmVwZWF0YWJsZT86IFVpUmVwZWF0YWJsZUNvbmZpZztcbn1cblxuLy8g4pSA4pSA4pSAIENvbmZpZ3VyYXppb25lIGZvcm0g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogQ29uZmlndXJhemlvbmUgZ2xvYmFsZSBkZWwgZm9ybSBidWlsZGVyLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpRm9ybUJ1aWxkZXJDb25maWcge1xuICAvKiogTGF5b3V0IGRlbCBmb3JtLiBAZGVmYXVsdCAnZ3JpZCcgKi9cbiAgbGF5b3V0PzogJ3ZlcnRpY2FsJyB8ICdob3Jpem9udGFsJyB8ICdncmlkJztcbiAgLyoqIE51bWVybyBkaSBjb2xvbm5lIG5lbCBncmlkLiBAZGVmYXVsdCAxMiAqL1xuICBjb2x1bW5zPzogbnVtYmVyO1xuICAvKiogTW9zdHJhIGkgcHVsc2FudGkgZGkgYXppb25lIChzdWJtaXQvcmVzZXQpLiBAZGVmYXVsdCB0cnVlICovXG4gIHNob3dCdXR0b25zPzogYm9vbGVhbjtcbiAgLyoqIE5hc2NvbmRlIGwnaW50ZXJvIGZvb3RlciAocHVsc2FudGkgKyBlcnJvciBzdW1tYXJ5KS4gKi9cbiAgaGlkZUZvb3Rlcj86IGJvb2xlYW47XG4gIC8qKiBMYWJlbCBwZXJzb25hbGl6emF0ZSBwZXIgaSBwdWxzYW50aS4gKi9cbiAgYnV0dG9uTGFiZWxzPzoge1xuICAgIHN1Ym1pdD86IHN0cmluZztcbiAgICByZXNldD86IHN0cmluZztcbiAgICBjYW5jZWw/OiBzdHJpbmc7XG4gIH07XG4gIC8qKiBDbGFzc2kgQ1NTIGdsb2JhbGkgc3VsIGNvbnRhaW5lciBkZWwgZm9ybS4gKi9cbiAgY3NzQ2xhc3Nlcz86IHN0cmluZ1tdO1xufVxuXG4vLyDilIDilIDilIAgQ29uZmlndXJhemlvbmUgd2l6YXJkIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4vKipcbiAqIENvbmZpZ3VyYXppb25lIHBlciBsYSBtb2RhbGl0YSB3aXphcmQgZGVsIGZvcm0uXG4gKiBVc2F0YSBkYWwgY29tcG9uZW50ZSBgVWlGb3JtV2l6YXJkQ29tcG9uZW50YC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogY29uc3Qgd2l6YXJkQ29uZmlnOiBVaVdpemFyZENvbmZpZyA9IHtcbiAqICAgc2hvd1Byb2dyZXNzOiB0cnVlLFxuICogICBwcm9ncmVzc1N0eWxlOiAnc3RlcHMnLFxuICogICBhbGxvd0JhY2tOYXZpZ2F0aW9uOiB0cnVlLFxuICogICBidXR0b25MYWJlbHM6IHsgbmV4dDogJ0F2YW50aScsIHByZXZpb3VzOiAnSW5kaWV0cm8nLCBmaW5pc2g6ICdDb21wbGV0YScgfSxcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaVdpemFyZENvbmZpZyB7XG4gIC8qKiBJRCBwZXIgc2luY3Jvbml6emF6aW9uZSB3aXJlbGVzcyB0cmEgaXN0YW56ZS4gKi9cbiAgd2l6YXJkSWQ/OiBzdHJpbmc7XG4gIC8qKiBOYXNjb25kZSBsJ2hlYWRlciBpbnRlcm5vIGRlbCB3aXphcmQgcGVyIGNvbnNlbnRpcmUgdW4gaGVhZGVyIGVzdGVybm8uICovXG4gIHdpcmVsZXNzSGVhZGluZz86IGJvb2xlYW47XG4gIC8qKiBNb3N0cmEgbGEgYmFycmEgZGkgcHJvZ3Jlc3NvLiBAZGVmYXVsdCB0cnVlICovXG4gIHNob3dQcm9ncmVzcz86IGJvb2xlYW47XG4gIC8qKiBTdGlsZSBkZWxsYSBiYXJyYSBkaSBwcm9ncmVzc28uIEBkZWZhdWx0ICdzdGVwcycgKi9cbiAgcHJvZ3Jlc3NTdHlsZT86ICdsaW5lYXInIHwgJ3N0ZXBzJztcbiAgLyoqIFBlcm1ldHRlIG5hdmlnYXppb25lIGFsbCdpbmRpZXRyby4gQGRlZmF1bHQgdHJ1ZSAqL1xuICBhbGxvd0JhY2tOYXZpZ2F0aW9uPzogYm9vbGVhbjtcbiAgLyoqIFBlcm1ldHRlIG5hdmlnYXppb25lIGluIGF2YW50aSBzZW56YSB2YWxpZGF6aW9uZS4gQGRlZmF1bHQgZmFsc2UgKi9cbiAgYWxsb3dGb3J3YXJkTmF2aWdhdGlvbj86IGJvb2xlYW47XG4gIC8qKiBTYWx2YSBhdXRvbWF0aWNhbWVudGUgaSBkYXRpIGFkIG9nbmkgY2FtYmlvIHN0ZXAuICovXG4gIGF1dG9TYXZlPzogYm9vbGVhbjtcbiAgLyoqIENhbGxiYWNrIHBlciBpbCBzYWx2YXRhZ2dpbyBkZWkgZGF0aSBkZWxsbyBzdGVwLiAqL1xuICBvblN0ZXBTYXZlPzogKHN0ZXBEYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LCBzdGVwTnVtYmVyOiBudW1iZXIpID0+IFByb21pc2U8dm9pZD4gfCB2b2lkO1xuICAvKiogTW9zdHJhIHB1bHNhbnRpIGRpIG5hdmlnYXppb25lIChwcmVjZWRlbnRlL3N1Y2Nlc3Npdm8pLiBAZGVmYXVsdCB0cnVlICovXG4gIHNob3dOYXZpZ2F0aW9uQnV0dG9ucz86IGJvb2xlYW47XG4gIC8qKiBMYWJlbCBwZXJzb25hbGl6emF0ZSBwZXIgaSBwdWxzYW50aSBkZWwgd2l6YXJkLiAqL1xuICBidXR0b25MYWJlbHM/OiB7XG4gICAgcHJldmlvdXM/OiBzdHJpbmc7XG4gICAgbmV4dD86IHN0cmluZztcbiAgICBmaW5pc2g/OiBzdHJpbmc7XG4gICAgc2F2ZT86IHN0cmluZztcbiAgfTtcbn1cblxuLyoqXG4gKiBTdGF0byBjb3JyZW50ZSBkZWwgd2l6YXJkLCBlc3Bvc3RvIGRhbCBgV2l6YXJkU3luY1NlcnZpY2VgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpV2l6YXJkU3RhdGUge1xuICAvKiogU3RlcCBjb3JyZW50ZSAoMC1iYXNlZCkuICovXG4gIGN1cnJlbnRTdGVwOiBudW1iZXI7XG4gIC8qKiBOdW1lcm8gdG90YWxlIGRpIHN0ZXAuICovXG4gIHRvdGFsU3RlcHM6IG51bWJlcjtcbiAgLyoqIEluZGljaSBkZWdsaSBzdGVwIGNvbXBsZXRhdGkuICovXG4gIGNvbXBsZXRlZFN0ZXBzOiBTZXQ8bnVtYmVyPjtcbiAgLyoqIEluZGljaSBkZWdsaSBzdGVwIHZpc2l0YXRpLiAqL1xuICB2aXNpdGVkU3RlcHM6IFNldDxudW1iZXI+O1xuICAvKiogU2UgaWwgZm9ybSBuZWxsbyBzdGVwIGNvcnJlbnRlIGUgdmFsaWRvLiAqL1xuICBpc1ZhbGlkOiBib29sZWFuO1xuICAvKiogRXJyb3JpIHBlciBzdGVwLiAqL1xuICBzdGVwRXJyb3JzOiBSZWNvcmQ8bnVtYmVyLCBzdHJpbmdbXT47XG59XG5cbi8vIOKUgOKUgOKUgCBTY2hlbWEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAXG5cbi8qKlxuICogU2NoZW1hIGNvbXBsZXRvIGRlbCBmb3JtLlxuICpcbiAqIFJhcHByZXNlbnRhIGxhIGNvbmZpZ3VyYXppb25lIGRpY2hpYXJhdGl2YSBkZWxsJ2ludGVybyBmb3JtOlxuICogc2V6aW9uaSwgY2FtcGksIHZhbGlkYXppb25pLCBjb25kaXppb25pIGUgaW1wb3N0YXppb25pIGdsb2JhbGkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGV4cG9ydCBjb25zdCBteUZvcm06IFVpRm9ybVNjaGVtYSA9IHtcbiAqICAgaWQ6ICd1c2VyLXJlZ2lzdHJhdGlvbicsXG4gKiAgIHRpdGxlOiAnUmVnaXN0cmF6aW9uZSB1dGVudGUnLFxuICogICBzZWN0aW9uczogW1xuICogICAgIHsgaWQ6ICdwZXJzb25hbCcsIHRpdGxlOiAnRGF0aSBwZXJzb25hbGknLCBmaWVsZHM6IFsuLi5dIH0sXG4gKiAgICAgeyBpZDogJ2FkZHJlc3MnLCB0aXRsZTogJ0luZGlyaXp6bycsIGZpZWxkczogWy4uLl0sIGNvbGxhcHNpYmxlOiB0cnVlIH0sXG4gKiAgIF0sXG4gKiAgIGNvbmZpZzogeyBjb2x1bW5zOiAxMiwgc2hvd0J1dHRvbnM6IHRydWUgfSxcbiAqIH07XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBVaUZvcm1TY2hlbWEge1xuICAvKiogSUQgdW5pdm9jbyBkZWwgZm9ybS4gKi9cbiAgaWQ6IHN0cmluZztcbiAgLyoqIFRpdG9sbyBkZWwgZm9ybS4gKi9cbiAgdGl0bGU/OiBzdHJpbmc7XG4gIC8qKiBEZXNjcml6aW9uZSBkZWwgZm9ybS4gKi9cbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIC8qKiBTZXppb25pIGRlbCBmb3JtLiAqL1xuICBzZWN0aW9uczogVWlGb3JtU2VjdGlvbltdO1xuICAvKiogQ29uZmlndXJhemlvbmUgZ2xvYmFsZS4gKi9cbiAgY29uZmlnPzogVWlGb3JtQnVpbGRlckNvbmZpZztcbn1cblxuLy8g4pSA4pSA4pSAIFRpcGkgZGkgdXRpbGl0YSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuLyoqXG4gKiBEYXRpIGRlbCBmb3JtIGNvbWUgbWFwcGEgY2hpYXZlLXZhbG9yZS5cbiAqL1xuZXhwb3J0IHR5cGUgVWlGb3JtRGF0YSA9IFJlY29yZDxzdHJpbmcsIGFueT47XG5cbi8qKlxuICogRXZlbnRvIGVtZXNzbyBkYWkgY2FtcGkgY3VzdG9tLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpRm9ybUN1c3RvbUV2ZW50IHtcbiAgLyoqIENoaWF2ZSBkZWwgY2FtcG8gY2hlIGhhIGVtZXNzbyBsJ2V2ZW50by4gKi9cbiAgZmllbGQ6IHN0cmluZztcbiAgLyoqIE5vbWUgZGVsbCdldmVudG8uICovXG4gIGV2ZW50OiBzdHJpbmc7XG4gIC8qKiBEYXRpIGFzc29jaWF0aSBhbGwnZXZlbnRvLiAqL1xuICBkYXRhOiBhbnk7XG59XG5cbi8qKlxuICogRXZlbnRvIGVtZXNzbyBhbCBjYW1iaW8gc3RlcCBkZWwgd2l6YXJkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFVpV2l6YXJkU3RlcENoYW5nZUV2ZW50IHtcbiAgLyoqIEluZGljZSBkZWxsbyBzdGVwIGRpIHBhcnRlbnphLiAqL1xuICBmcm9tOiBudW1iZXI7XG4gIC8qKiBJbmRpY2UgZGVsbG8gc3RlcCBkaSBkZXN0aW5hemlvbmUuICovXG4gIHRvOiBudW1iZXI7XG4gIC8qKiBEaXJlemlvbmUgZGVsbGEgbmF2aWdhemlvbmUuICovXG4gIGRpcmVjdGlvbjogJ25leHQnIHwgJ3ByZXZpb3VzJztcbn1cblxuLyoqXG4gKiBFdmVudG8gZW1lc3NvIGFsIGNvbXBsZXRhbWVudG8gZGkgdW5vIHN0ZXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVWlXaXphcmRTdGVwQ29tcGxldGVFdmVudCB7XG4gIC8qKiBJbmRpY2UgZGVsbG8gc3RlcCBjb21wbGV0YXRvLiAqL1xuICBzdGVwOiBudW1iZXI7XG4gIC8qKiBEYXRpIGRlbCBmb3JtIGFsIG1vbWVudG8gZGVsIGNvbXBsZXRhbWVudG8uICovXG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT47XG59XG4iXX0=