tango-app-ui-manage-billing 3.3.41 → 3.3.43

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.
@@ -456,14 +456,28 @@ export class DailyPricingComponent {
456
456
  outstandingGroupIds,
457
457
  };
458
458
  this.billingService.createInvoice(payload).pipe(takeUntil(this.destroy$)).subscribe({
459
- next: () => {
459
+ next: (res) => {
460
460
  this.generatingInvoice = false;
461
- this.toast.getPrimaryToast(`Invoice generated for ${groupIds.length} billing group(s)`);
461
+ // A partial batch (some groups written, some refused because an advance
462
+ // invoice already covers this month) comes back as a success whose
463
+ // message names the skipped groups — show that instead of the generic
464
+ // "generated for N groups", which would overstate what was created.
465
+ const msg = typeof res?.message === 'string' ? res.message : '';
466
+ if (msg.includes('Skipped:')) {
467
+ this.toast.getErrorToast(msg);
468
+ }
469
+ else {
470
+ this.toast.getPrimaryToast(`Invoice generated for ${groupIds.length} billing group(s)`);
471
+ }
462
472
  this.changeDetector.detectChanges();
463
473
  },
464
- error: () => {
474
+ error: (err) => {
465
475
  this.generatingInvoice = false;
466
- this.toast.getErrorToast('Failed to generate invoice');
476
+ // Surface the backend's exact reason (e.g. "Advance invoice TINV-… already
477
+ // covers Aug 2026 … Cancel it before generating a new advance invoice.")
478
+ // instead of a generic failure.
479
+ // sendError() puts the text under `error`; `message` is kept as a fallback.
480
+ this.toast.getErrorToast(err?.error?.error || err?.error?.message || 'Failed to generate invoice');
467
481
  this.changeDetector.detectChanges();
468
482
  }
469
483
  });
@@ -524,4 +538,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
524
538
  }], ctorParameters: () => [{ type: i1.BillingService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3.NgbModal }], propDecorators: { clientId: [{
525
539
  type: Input
526
540
  }] } });
527
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpbHktcHJpY2luZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtYmlsbGluZy9zcmMvbGliL2NvbXBvbmVudHMvZGFpbHktcHJpY2luZy9kYWlseS1wcmljaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy9kYWlseS1wcmljaW5nL2RhaWx5LXByaWNpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7OztBQU94RixNQUFNLE9BQU8scUJBQXFCO0lBaUV0QjtJQUNBO0lBQ0E7SUFDQTtJQW5FTyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVqQyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBRS9CLEdBQUcsQ0FBTTtJQUNULGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsV0FBVztJQUNYLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztJQUUzQix5RUFBeUU7SUFDekUsY0FBYyxHQUFRLEVBQUUsQ0FBQztJQUN6Qix3RkFBd0Y7SUFDeEYsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUV2QixjQUFjO0lBQ2QsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUV4Qix3RUFBd0U7SUFDeEUsNkRBQTZEO0lBQzdELFlBQVksR0FBYSxFQUFFLENBQUM7SUFDNUIsOEVBQThFO0lBQzlFLGFBQWEsR0FB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SUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUU7YUFDbkUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDN0QsQ0FBQzt3R0F0aUJVLHFCQUFxQjs0RkFBckIscUJBQXFCLGdIQ2JsQyx5Z2pDQW9iTTs7NEZEdmFPLHFCQUFxQjtrQkFMakMsU0FBUzsrQkFDRSxtQkFBbUI7cUtBT3BCLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSwgU2ltcGxlQ2hhbmdlcyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBOZ2JNb2RhbCB9IGZyb20gJ0BuZy1ib290c3RyYXAvbmctYm9vdHN0cmFwJztcbmltcG9ydCB7IEJpbGxpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMvYmlsbGluZy5zZXJ2aWNlJztcbmltcG9ydCB7IFRvYXN0U2VydmljZSB9IGZyb20gJ3RhbmdvLWFwcC11aS1zaGFyZWQnO1xuaW1wb3J0IHsgR2VuZXJhdGVJbnZvaWNlTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL2dlbmVyYXRlLWludm9pY2UtbW9kYWwvZ2VuZXJhdGUtaW52b2ljZS1tb2RhbC5jb21wb25lbnQnO1xuaW1wb3J0IHsgTmV3U3RvcmVzTW9kYWxDb21wb25lbnQgfSBmcm9tICcuL25ldy1zdG9yZXMtbW9kYWwvbmV3LXN0b3Jlcy1tb2RhbC5jb21wb25lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdsaWItZGFpbHktcHJpY2luZycsXG4gIHRlbXBsYXRlVXJsOiAnLi9kYWlseS1wcmljaW5nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmw6ICcuL2RhaWx5LXByaWNpbmcuY29tcG9uZW50LnNjc3MnXG59KVxuZXhwb3J0IGNsYXNzIERhaWx5UHJpY2luZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcblxuICBASW5wdXQoKSBjbGllbnRJZDogc3RyaW5nID0gJyc7XG5cbiAgbGVuOiBhbnk7XG4gIHNlYXJjaERpc2FibGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gTWV0YWRhdGFcbiAgZGFpbHlQcmljaW5nSW5mbzogYW55ID0ge307XG5cbiAgLy8gRWRpdCB0cmFja2luZzoga2V5ID0gJ3N0b3JlSWRfcHJvZHVjdE5hbWUnLCB2YWx1ZSA9IGVkaXRlZCB3b3JraW5nZGF5c1xuICBlZGl0aW5nUHJvZHVjdDogYW55ID0ge307XG4gIC8vIEVkaXQgdHJhY2tpbmcgZm9yIHN0b3JlLWxldmVsIGZpZWxkcyAodHJhZmZpY0NhbWVyYUNvdW50LCB6b25lQ2FtZXJhQ291bnQsIHpvbmVDb3VudClcbiAgZWRpdGluZ0ZpZWxkOiBhbnkgPSB7fTtcblxuICAvLyBEYXRlIGZpbHRlclxuICBkYXRlRmlsdGVyOiBzdHJpbmcgPSAnJztcblxuICAvLyBGaWx0ZXIg4oCUIG11bHRpLXNlbGVjdCBzdGF0dXMuIE5vIGRlZmF1bHQ6IHRoZSB0YWJsZSBvcGVucyBzaG93aW5nIEFMTFxuICAvLyBzdG9yZXMgKGFjdGl2ZSArIGRlYWN0aXZlKTsgbmVpdGhlciBvcHRpb24gaXMgcHJlLWNoZWNrZWQuXG4gIHN0YXR1c0ZpbHRlcjogc3RyaW5nW10gPSBbXTtcbiAgLy8gTXVsdGktc2VsZWN0IGNvdW50cnkgZmlsdGVyIChvcHRpb25zIHBvcHVsYXRlZCBmcm9tIHRoZSBBUEkncyBgY291bnRyaWVzYCkuXG4gIGNvdW50cnlGaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIHN0b3JlRmlsdGVyT2JqZWN0OiBhbnlbXSA9IFtcbiAgICB7IERlc2NyaXB0aW9uOiAnU3RhdHVzJywgdHlwZTogJ211bHRpJywgSXNzdWVzOiBbeyBpZDogJ2FjdGl2ZScsIHRleHQ6ICdBY3RpdmUnIH0sIHsgaWQ6ICdkZWFjdGl2ZScsIHRleHQ6ICdEZWFjdGl2ZScgfV0gfSxcbiAgXTtcbiAgLy8gbGliLWZpbHRlcnMgc25hcHNob3RzIGRhdGFPYmplY3QgaW4gaXRzIG5nT25Jbml0LCBzbyB0aGUgQ291bnRyeSBncm91cCBtdXN0XG4gIC8vIGJlIHByZXNlbnQgQkVGT1JFIGl0IG1vdW50cy4gV2UgZ2F0ZSB0aGUgPGxpYi1maWx0ZXJzPiByZW5kZXIgb24gdGhpcyBmbGFnLFxuICAvLyBmbGlwcGluZyBpdCB0cnVlIG9ubHkgb25jZSB0aGUgY291bnRyeSBvcHRpb25zIGhhdmUgYmVlbiBidWlsdCBmcm9tIHRoZSBBUEkuXG4gIGZpbHRlcnNSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1vbnRobHkgQmlsbGluZyBTdW1tYXJ5IOKAlCBkZXJpdmVkIGZyb20gaW52b2ljZSBoaXN0b3J5IGZvciB0aGUgYnJhbmQuXG4gIC8vIE5ld2VzdCBmaXJzdDsgZWFjaCByb3cgY2FycmllcyBwcmlvci1tb250aCBkZWx0YXMgZm9yIHRoZSB0cmVuZCBpbmRpY2F0b3IuXG4gIG1vbnRobHlCaWxsaW5nU3VtbWFyeTogYW55W10gPSBbXTtcbiAgbW9udGhseVN1bW1hcnlFeHBhbmRlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIFRhYmxlXG4gIHN0b3JlTGlzdDogYW55ID0gW107XG4gIHN0b3JlTG9hZGluZzogYm9vbGVhbiA9IHRydWU7XG4gIHN0b3JlTm9EYXRhOiBib29sZWFuID0gZmFsc2U7XG4gIHRvdGFsSXRlbXM6IG51bWJlciA9IDA7XG4gIHBhZ2VTaXplOiBudW1iZXIgPSAxMDtcbiAgY3VycmVudFBhZ2U6IG51bWJlciA9IDE7XG4gIGl0ZW1zUGVyUGFnZTogbnVtYmVyID0gMTA7XG4gIHBhZ2luYXRpb25TaXplcyA9IFsxMCwgMjAsIDMwXTtcbiAgLy8gRGVmYXVsdCBzb3J0OiB3b3JraW5nIGRheXMgKGRheXNEaWZmZXJlbmNlKSwgaGlnaGVzdCBmaXJzdC5cbiAgc29ydENvbHVtTmFtZTogc3RyaW5nID0gJ2RheXNEaWZmZXJlbmNlJztcbiAgc29ydEJ5OiBudW1iZXIgPSAtMTtcbiAgZ2VuZXJhdGluZ0ludm9pY2U6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBBZGRpdGlvbmFsIChub24tc3RhbmRhcmQpIHByb2R1Y3RzIGF2YWlsYWJsZSBvbmx5IGZvciBzcGVjaWZpYyBjbGllbnRzXG4gIC8vIChjdXJyZW50bHkgY2xpZW50SWQgMTEpLiBFbXB0eSBmb3IgZXZlcnlvbmUgZWxzZSAtPiB0aGUgdGFibGUgaXMgaGlkZGVuLlxuICBhZGRpdGlvbmFsUHJvZHVjdHM6IGFueVtdID0gW107XG4gIGFkZGl0aW9uYWxQcm9kdWN0c0N1cnJlbmN5OiBzdHJpbmcgPSAnaW5yJztcbiAgLy8gRGF0ZSAoWVlZWS1NTS1ERCkgb2YgdGhlIGJpbGxpbmdfZGV0YWlscyBzbmFwc2hvdCBiZWhpbmQgdGhlIGFkZGl0aW9uYWxcbiAgLy8gcHJvZHVjdCBjb3VudHM7IHBhc3NlZCB0byB0aGUgZXhwb3J0IHNvIGV4cG9ydHMgbWF0Y2ggdGhlIGRpc3BsYXllZCBjYXJkcy5cbiAgYWRkaXRpb25hbFByb2R1Y3RzRGF0ZTogc3RyaW5nID0gJyc7XG5cbiAgLy8gQ291bnQgKyBsaXN0IG9mIHN0b3JlcyBvbmJvYXJkZWQgdGhpcyBtb250aCAoZmlyc3QgZmlsZSBkYXRlIGluIHRoZSBjdXJyZW50XG4gIC8vIG1vbnRoKS4gVGhlIGxpc3QgZmVlZHMgdGhlIFwiVmlldyBTdG9yZXNcIiBwb3B1cC5cbiAgbmV3bHlPbmJvYXJkZWRTdG9yZXM6IG51bWJlciA9IDA7XG4gIG5ld2x5T25ib2FyZGVkU3RvcmVMaXN0OiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYmlsbGluZ1NlcnZpY2U6IEJpbGxpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgICAgIHRoaXMubG9hZEFkZGl0aW9uYWxQcm9kdWN0cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY2xpZW50SWQnXSAmJiAhY2hhbmdlc1snY2xpZW50SWQnXS5maXJzdENoYW5nZSAmJiB0aGlzLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgICAgIHRoaXMubG9hZEFkZGl0aW9uYWxQcm9kdWN0cygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdyYW5kIHRvdGFsIGFjcm9zcyBhbGwgYWRkaXRpb25hbC1wcm9kdWN0IHJvd3MuXG4gIGdldCBhZGRpdGlvbmFsUHJvZHVjdHNUb3RhbCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5hZGRpdGlvbmFsUHJvZHVjdHMgfHwgW10pLnJlZHVjZSgoYSwgcCkgPT4gYSArIChOdW1iZXIocC50b3RhbCkgfHwgMCksIDApO1xuICB9XG5cbiAgLy8gUHJvZHVjdHMgdGhhdCBoYXZlIGEgYmFja2VuZCBkZXRhaWxlZCBleHBvcnQuIEtleWVkIGJ5IHRoZSBwcm9kdWN0IGtleSB0aGVcbiAgLy8gZXhwb3J0IGVuZHBvaW50IHVuZGVyc3RhbmRzLiBBZGQgbW9yZSBhcyB0aGVpciBxdWVyaWVzIGFyZSB3aXJlZCB1cC5cbiAgcHJpdmF0ZSByZWFkb25seSBleHBvcnRhYmxlUHJvZHVjdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ2V5ZXRlc3QnOiAnZXlldGVzdCcsXG4gICAgJ2V5ZXRlc3QgKGFkZGl0aW9uYWwgc3RvcmFnZSknOiAnZXlldGVzdGFkZGl0aW9uYWxzdG9yYWdlJyxcbiAgICAncGxhbm9ncmFtJzogJ3BsYW5vZ3JhbScsXG4gICAgJ2FpIG1hbmFnZXInOiAnYWltYW5hZ2VyJyxcbiAgICAndm1zJzogJ3ZtcycsXG4gICAgLy8gJ1J1biBBSScgaXMgZGlzcGxheWVkIGFzICdBSSBpbiBjaGVja2xpc3QnOyBib3RoIG1hcCB0byB0aGUgc2FtZSBleHBvcnRcbiAgICAvLyBrZXkgc28gdGhlIGRvd25sb2FkIHdvcmtzIHdoaWNoZXZlciBsYWJlbCB0aGUgQVBJIHJldHVybnMuXG4gICAgJ3J1biBhaSc6ICdydW5haScsXG4gICAgJ2FpIGluIGNoZWNrbGlzdCc6ICdydW5haScsXG4gICAgJ3JlbW90ZSBvcHR1bSc6ICdyZW1vdGVvcHR1bScsXG4gICAgLy8gRmFjdG9yeSBRQyAoRmFjdG9yeVFDX2JpbGxpbmcgTGFtYmRhKS4gRGF5LXNjb3BlZDogdGhlIExhbWJkYSB0YWtlcyBvbmx5XG4gICAgLy8gcmVwb3J0X2RhdGUsIHNvIHRoaXMgZXhwb3J0IGNvdmVycyB0aGUgc25hcHNob3QgZGF0ZSBzaG93biBvbiB0aGUgY2FyZFxuICAgIC8vIHJhdGhlciB0aGFuIG1vbnRoLXRvLWRhdGUgbGlrZSBSZW1vdGUgT3B0dW0uXG4gICAgJ2ZhY3RvcnknOiAnZmFjdG9yeScsXG4gIH07XG5cbiAgY2FuRXhwb3J0QWRkaXRpb25hbFByb2R1Y3QocHJvZHVjdE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIXRoaXMuZXhwb3J0YWJsZVByb2R1Y3RzWyhwcm9kdWN0TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICBleHBvcnRBZGRpdGlvbmFsUHJvZHVjdChwcm9kdWN0TmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5leHBvcnRhYmxlUHJvZHVjdHNbKHByb2R1Y3ROYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpXTtcbiAgICBpZiAoIWtleSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBQYXNzIHRoZSBiaWxsaW5nX2RldGFpbHMgc25hcHNob3QgZGF0ZSAoWVlZWS1NTS1ERCkgYmVoaW5kIHRoZSBjYXJkIGNvdW50c1xuICAgIC8vIHNvIGRheS1zY29wZWQgZXhwb3J0cyAoVk1TIC8gUnVuIEFJIHZpYSBMYW1iZGEgdG9fZGF0ZSwgUmVtb3RlIE9wdHVtKSBtYXRjaFxuICAgIC8vIHdoYXQncyBzaG93bi4gRmFsbCBiYWNrIHRvIHRvZGF5IGlmIHRoZSBiYWNrZW5kIGRpZG4ndCByZXR1cm4gYSBkYXRlLlxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCB0b2RheVN0ciA9IGAke3RvZGF5LmdldEZ1bGxZZWFyKCl9LSR7U3RyaW5nKHRvZGF5LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpfS0ke1N0cmluZyh0b2RheS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICBjb25zdCBleHBvcnREYXRlID0gdGhpcy5hZGRpdGlvbmFsUHJvZHVjdHNEYXRlIHx8IHRvZGF5U3RyO1xuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuYWRkaXRpb25hbFByb2R1Y3RFeHBvcnQodGhpcy5jbGllbnRJZCwga2V5LCBleHBvcnREYXRlKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxuICAgICAgLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChyZXM6IEFycmF5QnVmZmVyKSA9PiB7XG4gICAgICAgICAgLy8gQSByZWFsIC54bHN4IGlzIGEgemlwIOKAlCBpdHMgZmlyc3QgdHdvIGJ5dGVzIGFyZSAnUEsnICgweDUwIDB4NEIpLlxuICAgICAgICAgIC8vIEEgMjA0L2VtcHR5IG9yIEpTT04gZXJyb3IgYm9keSBpcyBOT1QsIGFuZCBzYXZpbmcgaXQgcHJvZHVjZXMgYVxuICAgICAgICAgIC8vIFwiY29ycnVwdGVkXCIgZmlsZS4gR3VhcmQgc28gd2Ugb25seSBzYXZlIGEgZ2VudWluZSB3b3JrYm9vay5cbiAgICAgICAgICBjb25zdCBieXRlcyA9IHJlcyA/IG5ldyBVaW50OEFycmF5KHJlcykgOiBuZXcgVWludDhBcnJheSgpO1xuICAgICAgICAgIGNvbnN0IGlzWGxzeCA9IGJ5dGVzLmxlbmd0aCA+IDEgJiYgYnl0ZXNbMF0gPT09IDB4NTAgJiYgYnl0ZXNbMV0gPT09IDB4NGI7XG4gICAgICAgICAgaWYgKCFpc1hsc3gpIHtcbiAgICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnTm8gZGF0YSB0byBleHBvcnQnKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5iaWxsaW5nU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCBgJHtwcm9kdWN0TmFtZX0tJHt0aGlzLmNsaWVudElkfWApO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnRXhwb3J0IGZhaWxlZCcpO1xuICAgICAgICB9LFxuICAgICAgfSk7XG4gIH1cblxuICAvLyBGZXRjaCB0aGUgYWRkaXRpb25hbC1wcm9kdWN0cyB0YWJsZSBmb3IgdGhpcyBjbGllbnQuIEJhY2tlbmQgcmV0dXJucyBhblxuICAvLyBlbXB0eSBsaXN0IGZvciBhbnkgY2xpZW50IHRoYXQgaGFzIG5vbmUgKHNvIHRoZSB0YWJsZSBqdXN0IHdvbid0IHJlbmRlcikuXG4gIGxvYWRBZGRpdGlvbmFsUHJvZHVjdHMoKSB7XG4gICAgLy8gU2VuZCB0aGUgcGFnZSdzIHNlbGVjdGVkIGRhdGUgKGlmIGFueSkgc28gdGhlIHNlY3Rpb24gcmVmbGVjdHMgaXQuXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS5hZGRpdGlvbmFsUHJvZHVjdHModGhpcy5jbGllbnRJZCwgdGhpcy5kYXRlRmlsdGVyIHx8IHVuZGVmaW5lZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbFByb2R1Y3RzID0gcmVzPy5kYXRhPy5wcm9kdWN0cyB8fCBbXTtcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsUHJvZHVjdHNDdXJyZW5jeSA9IHJlcz8uZGF0YT8uY3VycmVuY3kgfHwgJ2lucic7XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbFByb2R1Y3RzRGF0ZSA9IHJlcz8uZGF0YT8uYmlsbGluZ0RhdGUgfHwgJyc7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbFByb2R1Y3RzID0gW107XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuZGVzdHJveSQubmV4dCh0cnVlKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBsb2FkRGFpbHlQcmljaW5nKCkge1xuICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnN0b3JlTG9hZGluZyA9IHRydWU7XG4gICAgdGhpcy5zdG9yZU5vRGF0YSA9IGZhbHNlO1xuXG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIGxpbWl0OiB0aGlzLnBhZ2VTaXplLFxuICAgICAgb2Zmc2V0OiB0aGlzLmN1cnJlbnRQYWdlLFxuICAgICAgc2VhcmNoVmFsdWU6IHRoaXMubGVuLFxuICAgICAgc29ydENvbHVtTmFtZTogdGhpcy5zb3J0Q29sdW1OYW1lLFxuICAgICAgc29ydEJ5OiB0aGlzLnNvcnRCeSxcbiAgICAgIHN0YXR1c0ZpbHRlcjogdGhpcy5zdGF0dXNGaWx0ZXIsXG4gICAgICBjb3VudHJ5RmlsdGVyOiB0aGlzLmNvdW50cnlGaWx0ZXIsXG4gICAgICBkYXRlRmlsdGVyOiB0aGlzLmRhdGVGaWx0ZXIgfHwgJycsXG4gICAgICBleHBvcnQ6IGZhbHNlXG4gICAgfTtcblxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UubGF0ZXN0RGFpbHlQcmljaW5nKGZpbHRlcnMpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKGUpID0+IHtcbiAgICAgICAgLy8gVGhlIE1vbnRobHkgQmlsbGluZyBTdW1tYXJ5IGNvbWVzIGZyb20gaW52b2ljZSBoaXN0b3J5LCBub3QgdGhlIHN0b3JlXG4gICAgICAgIC8vIHJvd3Mg4oCUIGFwcGx5IGl0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc3RvcmUgbGlzdCBpcyBlbXB0eSwgc28gaXRcbiAgICAgICAgLy8gc3RpbGwgc2hvd3Mgd2hlbiB0aGUgZmlsdGVyZWQgc3RvcmUgdGFibGUgaGFzIG5vIHJvd3MuXG4gICAgICAgIHRoaXMubW9udGhseUJpbGxpbmdTdW1tYXJ5ID0gdGhpcy5kZWNvcmF0ZU1vbnRobHlTdW1tYXJ5KGU/LmRhdGE/Lm1vbnRobHlCaWxsaW5nU3VtbWFyeSB8fCBbXSk7XG4gICAgICAgIC8vIE5ld2x5IG9uYm9hcmRlZCBjb3VudC9saXN0IGlzIGluZGVwZW5kZW50IG9mIHRoZSBzdG9yZSB0YWJsZSdzXG4gICAgICAgIC8vIGZpbHRlcnMsIHNvIGNhcHR1cmUgaXQgd2hldGhlciBvciBub3QgdGhlIGZpbHRlcmVkIHN0b3JlIGxpc3QgaGFzIHJvd3MuXG4gICAgICAgIHRoaXMubmV3bHlPbmJvYXJkZWRTdG9yZXMgPSBlPy5kYXRhPy5uZXdseU9uYm9hcmRlZFN0b3JlcyB8fCAwO1xuICAgICAgICB0aGlzLm5ld2x5T25ib2FyZGVkU3RvcmVMaXN0ID0gZT8uZGF0YT8ubmV3bHlPbmJvYXJkZWRTdG9yZUxpc3QgfHwgW107XG5cbiAgICAgICAgLy8gUG9wdWxhdGUgdGhlIENvdW50cnkgZmlsdGVyIG9wdGlvbnMgZnJvbSB0aGUgQVBJJ3MgY291bnRyeSBsaXN0IChhbGxcbiAgICAgICAgLy8gY2xpZW50IHN0b3JlcykuIEluZGVwZW5kZW50IG9mIHRoZSBmaWx0ZXJlZCBzdG9yZSBjb3VudCwgc28gYnVpbGQgaXRcbiAgICAgICAgLy8gZXZlbiB3aGVuIHRoZSBmaWx0ZXJlZCB0YWJsZSBpcyBlbXB0eS5cbiAgICAgICAgdGhpcy5idWlsZENvdW50cnlGaWx0ZXJPcHRpb25zKGU/LmRhdGE/LmNvdW50cmllcyB8fCBbXSk7XG5cbiAgICAgICAgaWYgKGU/LmRhdGE/LmNvdW50KSB7XG4gICAgICAgICAgdGhpcy5zdG9yZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0b3JlTm9EYXRhID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBlLmRhdGE/LmRhdGE7XG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gZS5kYXRhPy5jb3VudDtcblxuICAgICAgICAgIHRoaXMuZGFpbHlQcmljaW5nSW5mbyA9IHtcbiAgICAgICAgICAgIGJyYW5kTmFtZTogZS5kYXRhPy5icmFuZE5hbWUgfHwgJycsXG4gICAgICAgICAgICBkYXRlU3RyaW5nOiBlLmRhdGE/LmRhdGVTdHJpbmcgfHwgJycsXG4gICAgICAgICAgICBkYXRlSVNPOiBlLmRhdGE/LmRhdGVJU08gfHwgJycsXG4gICAgICAgICAgICBhY3RpdmVTdG9yZXM6IGUuZGF0YT8uYWN0aXZlU3RvcmVzIHx8IDAsXG4gICAgICAgICAgICBhY2NvdW50VHlwZTogZS5kYXRhPy5hY2NvdW50VHlwZSB8fCAnJyxcbiAgICAgICAgICAgIHN0YXR1czogZS5kYXRhPy5zdGF0dXMgfHwgJycsXG4gICAgICAgICAgICBwcm9SYXRlOiBlLmRhdGE/LnByb1JhdGUgfHwgJycsXG4gICAgICAgICAgICBjbGllbnRJZDogZS5kYXRhPy5jbGllbnRJZCB8fCAnJ1xuICAgICAgICAgIH07XG5cbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnN0b3JlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3RvcmVOb0RhdGEgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSB0cnVlO1xuICAgICAgICAgIGlmICh0aGlzLmxlbj8ubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gW107XG4gICAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcbiAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuc3RvcmVMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIHRoaXMuc3RvcmVOb0RhdGEgPSB0cnVlO1xuICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xuICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xuICAgICAgICB0aGlzLm1vbnRobHlCaWxsaW5nU3VtbWFyeSA9IFtdO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIG9uRGF0ZUZpbHRlcihldmVudDogYW55KSB7XG4gICAgdGhpcy5kYXRlRmlsdGVyID0gZXZlbnQ/LnRhcmdldD8udmFsdWUgfHwgJyc7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gICAgLy8gQWRkaXRpb25hbCBQcm9kdWN0cyByZWZsZWN0IHRoZSBzZWxlY3RlZCBkYXRlIHRvby5cbiAgICB0aGlzLmxvYWRBZGRpdGlvbmFsUHJvZHVjdHMoKTtcbiAgfVxuXG4gIGNsZWFyRGF0ZUZpbHRlcigpIHtcbiAgICB0aGlzLmRhdGVGaWx0ZXIgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgICB0aGlzLmxvYWRBZGRpdGlvbmFsUHJvZHVjdHMoKTtcbiAgfVxuXG4gIHNlYXJjaEZpZWxkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgLy8gQWRkL3JlZnJlc2ggdGhlIENvdW50cnkgZ3JvdXAgaW4gdGhlIGZpbHRlciBkcm9wZG93biBmcm9tIHRoZSBBUEkncyBjb3VudHJ5XG4gIC8vIGxpc3QsIHByZXNlcnZpbmcgdGhlIGN1cnJlbnQgc2VsZWN0aW9uIChjaGVja2VkKS4gbGliLWZpbHRlcnMgc25hcHNob3RzXG4gIC8vIGRhdGFPYmplY3Qgb25seSBpbiBuZ09uSW5pdCwgc28gd2UgYnVpbGQgdGhlIGZ1bGwgc3RvcmVGaWx0ZXJPYmplY3QgaGVyZSBhbmRcbiAgLy8gdGhlbiBmbGlwIGZpbHRlcnNSZWFkeSB0byBtb3VudCA8bGliLWZpbHRlcnM+IG9uY2Ug4oCUIGFmdGVyIHdoaWNoIGl0IHNlZXMgYm90aFxuICAvLyBTdGF0dXMgYW5kIENvdW50cnkgZ3JvdXBzLlxuICBwcml2YXRlIGJ1aWxkQ291bnRyeUZpbHRlck9wdGlvbnMoY291bnRyaWVzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IGxpc3QgPSBBcnJheS5pc0FycmF5KGNvdW50cmllcykgPyBjb3VudHJpZXMuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgaWYgKGxpc3QubGVuZ3RoKSB7XG4gICAgICBjb25zdCBzZWxlY3RlZCA9IG5ldyBTZXQodGhpcy5jb3VudHJ5RmlsdGVyKTtcbiAgICAgIGNvbnN0IGlzc3VlcyA9IGxpc3QubWFwKChjKSA9PiAoeyBpZDogYywgdGV4dDogYywgY2hlY2tlZDogc2VsZWN0ZWQuaGFzKGMpIH0pKTtcbiAgICAgIGNvbnN0IGV4aXN0aW5nID0gdGhpcy5zdG9yZUZpbHRlck9iamVjdC5maW5kKChnKSA9PiBnLkRlc2NyaXB0aW9uID09PSAnQ291bnRyeScpO1xuICAgICAgaWYgKGV4aXN0aW5nKSB7XG4gICAgICAgIGV4aXN0aW5nLklzc3VlcyA9IGlzc3VlcztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcmVGaWx0ZXJPYmplY3QgPSBbLi4udGhpcy5zdG9yZUZpbHRlck9iamVjdCwgeyBEZXNjcmlwdGlvbjogJ0NvdW50cnknLCB0eXBlOiAnbXVsdGknLCBJc3N1ZXM6IGlzc3VlcyB9XTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gTW91bnQgbGliLWZpbHRlcnMgb25jZSB0aGUgZmlyc3QgcmVzcG9uc2UgaXMgaW4gKFN0YXR1cyBhbG9uZSBpZiB0aGVyZSBhcmVcbiAgICAvLyBubyBjb3VudHJpZXMpLCBzbyBpdCBzbmFwc2hvdHMgdGhlIGZ1bGwgZGF0YU9iamVjdCBvbiBpbml0LlxuICAgIGlmICghdGhpcy5maWx0ZXJzUmVhZHkpIHtcbiAgICAgIHRoaXMuZmlsdGVyc1JlYWR5ID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBhcHBseVN0b3JlRmlsdGVycyhldmVudDogYW55KSB7XG4gICAgLy8gTXVsdGktc2VsZWN0IFN0YXR1cyAvIENvdW50cnkg4oCUIGxpYi1maWx0ZXJzIGVtaXRzIGVhY2ggZ3JvdXAncyBzZWxlY3RlZFxuICAgIC8vIG9wdGlvbnMgYXMgYW4gQVJSQVkgdW5kZXIgSXNzdWVzIChBcHBseSBzZXRzIElzc3VlcyA9IHNlbGVjdGVkVmFsdWVzQXJyYXlcbiAgICAvLyBbaW5kZXhdKS4gQ29sbGVjdCBldmVyeSBzZWxlY3RlZCBpZCwgdG9sZXJhdGluZyBhcnJheSBhbmQgc2luZ2xlLW9iamVjdFxuICAgIC8vIHNoYXBlcy5cbiAgICBjb25zdCBzdGF0dXNlczogc3RyaW5nW10gPSBbXTtcbiAgICBjb25zdCBjb3VudHJpZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGV2ZW50Py5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICBjb25zdCBpc3N1ZXMgPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuSXNzdWVzKSA/IGVsZW1lbnQuSXNzdWVzIDogKGVsZW1lbnQuSXNzdWVzID8gW2VsZW1lbnQuSXNzdWVzXSA6IFtdKTtcbiAgICAgICAgaWYgKGVsZW1lbnQuRGVzY3JpcHRpb24gPT09ICdTdGF0dXMnKSB7XG4gICAgICAgICAgaXNzdWVzLmZvckVhY2goKGk6IGFueSkgPT4geyBpZiAoaT8uaWQpIHN0YXR1c2VzLnB1c2goaS5pZCk7IH0pO1xuICAgICAgICB9IGVsc2UgaWYgKGVsZW1lbnQuRGVzY3JpcHRpb24gPT09ICdDb3VudHJ5Jykge1xuICAgICAgICAgIGlzc3Vlcy5mb3JFYWNoKChpOiBhbnkpID0+IHsgaWYgKGk/LmlkKSBjb3VudHJpZXMucHVzaChpLmlkKTsgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnN0YXR1c0ZpbHRlciA9IFsuLi5uZXcgU2V0KHN0YXR1c2VzKV07XG4gICAgdGhpcy5jb3VudHJ5RmlsdGVyID0gWy4uLm5ldyBTZXQoY291bnRyaWVzKV07XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gIH1cblxuICBzb3J0RGF0YShjb2x1bW46IHN0cmluZykge1xuICAgIHRoaXMuc29ydENvbHVtTmFtZSA9IGNvbHVtbjtcbiAgICB0aGlzLnNvcnRCeSAqPSAtMTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyc2VJbnQocGFnZU9mZnNldCk7XG4gICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLnBhZ2VTaXplID0gcGFyc2VJbnQocGFnZVNpemUpO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgb25FeHBvcnQoKSB7XG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmxlbixcbiAgICAgIHNvcnRDb2x1bU5hbWU6IHRoaXMuc29ydENvbHVtTmFtZSxcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnksXG4gICAgICBzdGF0dXNGaWx0ZXI6IHRoaXMuc3RhdHVzRmlsdGVyLFxuICAgICAgZGF0ZUZpbHRlcjogdGhpcy5kYXRlRmlsdGVyIHx8ICcnLFxuICAgICAgZXhwb3J0OiB0cnVlXG4gICAgfTtcblxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UubGF0ZXN0RGFpbHlQcmljaW5nRXhwb3J0KGZpbHRlcnMpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICAvLyBzYXZlQXNUZW1wbGF0ZSAobm90IHNhdmVBc0V4Y2VsRmlsZSkg4oCUIHRoZSBsYXR0ZXIgYXBwZW5kcyBhIFwibGlzdFwiXG4gICAgICAgIC8vIHN1ZmZpeCwgd2hpY2ggd291bGQgZG93bmxvYWQgdGhpcyBhcyBcIkFubmV4dXJlbGlzdC54bHN4XCIuXG4gICAgICAgIHRoaXMuYmlsbGluZ1NlcnZpY2Uuc2F2ZUFzVGVtcGxhdGUocmVzLCAnQW5uZXh1cmUnKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ1NvbWV0aGluZyB3ZW50IFdyb25nLi4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGdldEVkaXRLZXkoc3RvcmVJZDogc3RyaW5nLCBwcm9kdWN0TmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYCR7c3RvcmVJZH1fJHtwcm9kdWN0TmFtZX1gO1xuICB9XG5cbiAgaXNFZGl0aW5nKHN0b3JlSWQ6IHN0cmluZywgcHJvZHVjdE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdQcm9kdWN0W3RoaXMuZ2V0RWRpdEtleShzdG9yZUlkLCBwcm9kdWN0TmFtZSldICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGFydEVkaXQoc3RvcmU6IGFueSwgcHJvZHVjdDogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIHByb2R1Y3QucHJvZHVjdE5hbWUpO1xuICAgIC8vIENvZXJjZSB0byBhIG51bWJlciBzbyBhIDAgLyBtaXNzaW5nIHZhbHVlIHN0aWxsIGVudGVycyBlZGl0IG1vZGUgd2l0aCBhXG4gICAgLy8gZGVmaW5lZCB2YWx1ZSAodW5kZWZpbmVkIHdvdWxkIG1ha2UgaXNFZGl0aW5nKCkgdGhpbmsgd2UncmUgbm90IGVkaXRpbmcpLlxuICAgIHRoaXMuZWRpdGluZ1Byb2R1Y3Rba2V5XSA9IE51bWJlcihwcm9kdWN0LndvcmtpbmdkYXlzKSB8fCAwO1xuICB9XG5cbiAgY2FuY2VsRWRpdChzdG9yZTogYW55LCBwcm9kdWN0OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEVkaXRLZXkoc3RvcmUuc3RvcmVJZCwgcHJvZHVjdC5wcm9kdWN0TmFtZSk7XG4gICAgZGVsZXRlIHRoaXMuZWRpdGluZ1Byb2R1Y3Rba2V5XTtcbiAgfVxuXG4gIHNhdmVXb3JraW5nRGF5cyhzdG9yZTogYW55LCBwcm9kdWN0OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEVkaXRLZXkoc3RvcmUuc3RvcmVJZCwgcHJvZHVjdC5wcm9kdWN0TmFtZSk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSBOdW1iZXIodGhpcy5lZGl0aW5nUHJvZHVjdFtrZXldKSB8fCAwO1xuXG4gICAgLy8gVW5jaGFuZ2VkIOKGkiBqdXN0IGNsb3NlIHRoZSBlZGl0b3IgKGNvbXBhcmUgYXMgbnVtYmVycyBzbyAwIHZzIFwiMFwiIGV0Yy5cbiAgICAvLyBkb24ndCBzbGlwIHRocm91Z2gpLlxuICAgIGlmIChuZXdWYWx1ZSA9PT0gKE51bWJlcihwcm9kdWN0LndvcmtpbmdkYXlzKSB8fCAwKSkge1xuICAgICAgZGVsZXRlIHRoaXMuZWRpdGluZ1Byb2R1Y3Rba2V5XTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBkYXRlU3RyaW5nOiB0aGlzLmRhaWx5UHJpY2luZ0luZm8uZGF0ZVN0cmluZyxcbiAgICAgIHN0b3JlSWQ6IHN0b3JlLnN0b3JlSWQsXG4gICAgICBwcm9kdWN0TmFtZTogcHJvZHVjdC5wcm9kdWN0TmFtZSxcbiAgICAgIHdvcmtpbmdkYXlzOiBuZXdWYWx1ZVxuICAgIH07XG5cbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLnVwZGF0ZURhaWx5UHJpY2luZ1dvcmtpbmdEYXlzKHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICBwcm9kdWN0LndvcmtpbmdkYXlzID0gTnVtYmVyKG5ld1ZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuZWRpdGluZ1Byb2R1Y3Rba2V5XTtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoJ1dvcmtpbmcgZGF5cyB1cGRhdGVkIHN1Y2Nlc3NmdWxseScpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byB1cGRhdGUgd29ya2luZyBkYXlzJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRGaWVsZEVkaXRLZXkoc3RvcmVJZDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3N0b3JlSWR9XyR7ZmllbGROYW1lfWA7XG4gIH1cblxuICBpc0VkaXRpbmdGaWVsZChzdG9yZUlkOiBzdHJpbmcsIGZpZWxkTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ0ZpZWxkW3RoaXMuZ2V0RmllbGRFZGl0S2V5KHN0b3JlSWQsIGZpZWxkTmFtZSldICE9PSB1bmRlZmluZWQ7XG4gIH1cblxuICBzdGFydEZpZWxkRWRpdChzdG9yZTogYW55LCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0RmllbGRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIGZpZWxkTmFtZSk7XG4gICAgdGhpcy5lZGl0aW5nRmllbGRba2V5XSA9IHN0b3JlW2ZpZWxkTmFtZV0gfHwgMDtcbiAgfVxuXG4gIGNhbmNlbEZpZWxkRWRpdChzdG9yZTogYW55LCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0RmllbGRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIGZpZWxkTmFtZSk7XG4gICAgZGVsZXRlIHRoaXMuZWRpdGluZ0ZpZWxkW2tleV07XG4gIH1cblxuICBzYXZlRmllbGRFZGl0KHN0b3JlOiBhbnksIGZpZWxkTmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRGaWVsZEVkaXRLZXkoc3RvcmUuc3RvcmVJZCwgZmllbGROYW1lKTtcbiAgICBjb25zdCBuZXdWYWx1ZSA9IHRoaXMuZWRpdGluZ0ZpZWxkW2tleV07XG5cbiAgICBpZiAobmV3VmFsdWUgPT09IHN0b3JlW2ZpZWxkTmFtZV0pIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIGRhdGVTdHJpbmc6IHRoaXMuZGFpbHlQcmljaW5nSW5mby5kYXRlU3RyaW5nLFxuICAgICAgc3RvcmVJZDogc3RvcmUuc3RvcmVJZCxcbiAgICAgIGZpZWxkTmFtZTogZmllbGROYW1lLFxuICAgICAgdmFsdWU6IE51bWJlcihuZXdWYWx1ZSlcbiAgICB9O1xuXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS51cGRhdGVEYWlseVByaWNpbmdTdG9yZUZpZWxkKHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICBzdG9yZVtmaWVsZE5hbWVdID0gTnVtYmVyKG5ld1ZhbHVlKTtcbiAgICAgICAgZGVsZXRlIHRoaXMuZWRpdGluZ0ZpZWxkW2tleV07XG4gICAgICAgIGNvbnN0IGZpZWxkTGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyB0cmFmZmljQ2FtZXJhQ291bnQ6ICdUcmFmZmljIGNhbWVyYSBjb3VudCcsIHpvbmVDYW1lcmFDb3VudDogJ1pvbmUgY2FtZXJhIGNvdW50Jywgem9uZUNvdW50OiAnWm9uZSBjb3VudCcgfTtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRQcmltYXJ5VG9hc3QoYCR7ZmllbGRMYWJlbHNbZmllbGROYW1lXSB8fCBmaWVsZE5hbWV9IHVwZGF0ZWQgc3VjY2Vzc2Z1bGx5YCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yTGFiZWxzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyB0cmFmZmljQ2FtZXJhQ291bnQ6ICd0cmFmZmljIGNhbWVyYSBjb3VudCcsIHpvbmVDYW1lcmFDb3VudDogJ3pvbmUgY2FtZXJhIGNvdW50Jywgem9uZUNvdW50OiAnem9uZSBjb3VudCcgfTtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KGBGYWlsZWQgdG8gdXBkYXRlICR7ZXJyb3JMYWJlbHNbZmllbGROYW1lXSB8fCBmaWVsZE5hbWV9YCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZW5lcmF0ZUludm9pY2UoKSB7XG4gICAgaWYgKCF0aGlzLmNsaWVudElkKSByZXR1cm47XG4gICAgLy8gT3BlbiB0aGUgcGlja2VyIGZpcnN0IOKAlCB0aGUgdXNlciBjaG9vc2VzIHdoaWNoIGJpbGxpbmcgZ3JvdXBzIHRvXG4gICAgLy8gZ2VuZXJhdGUgZm9yLiBNb2RhbCBjbG9zZXMgd2l0aCB7IGdyb3VwSWRzLCBvdXRzdGFuZGluZ0dyb3VwSWRzIH1cbiAgICAvLyAob3IgaXMgZGlzbWlzc2VkID0gbm8tb3ApLlxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihHZW5lcmF0ZUludm9pY2VNb2RhbENvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChyZXN1bHQ6IHsgZ3JvdXBJZHM6IHN0cmluZ1tdOyBvdXRzdGFuZGluZ0dyb3VwSWRzOiBzdHJpbmdbXSB9KSA9PiB7XG4gICAgICBpZiAoIXJlc3VsdCB8fCAhQXJyYXkuaXNBcnJheShyZXN1bHQuZ3JvdXBJZHMpIHx8IHJlc3VsdC5ncm91cElkcy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAgIHRoaXMucnVuSW52b2ljZUdlbmVyYXRpb24ocmVzdWx0Lmdyb3VwSWRzLCByZXN1bHQub3V0c3RhbmRpbmdHcm91cElkcyB8fCBbXSk7XG4gICAgfSkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgLy8gT3BlbiBhIHBvcHVwIGxpc3RpbmcgdGhlIG5ld2x5IG9uYm9hcmRlZCBzdG9yZXMgKHdpdGggZmlyc3QgZmlsZSBkYXRlKS5cbiAgLy8gVGhlIGxpc3QgaXMgYWxyZWFkeSBsb2FkZWQgd2l0aCB0aGUgcGFnZSwgc28gbm8gZXh0cmEgQVBJIGNhbGwgaXMgbmVlZGVkLlxuICB2aWV3TmV3U3RvcmVzKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5uZXdseU9uYm9hcmRlZFN0b3JlTGlzdC5sZW5ndGgpIHJldHVybjtcbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oTmV3U3RvcmVzTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbGcnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLnN0b3JlcyA9IHRoaXMubmV3bHlPbmJvYXJkZWRTdG9yZUxpc3Q7XG4gICAgLy8gTmVlZGVkIGJ5IHRoZSBtb2RhbCdzIEV4cG9ydCBidXR0b24gc28gdGhlIHNoZWV0IGlzIGJ1aWx0IGZyb20gdGhlIHNhbWVcbiAgICAvLyBjbGllbnQgYW5kIGRhaWx5LXByaWNpbmcgc25hcHNob3QgdGhlIHBvcHVwIGlzIHNob3dpbmcuXG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmRhdGVGaWx0ZXIgPSB0aGlzLmRhdGVGaWx0ZXIgfHwgJyc7XG4gIH1cblxuICBwcml2YXRlIHJ1bkludm9pY2VHZW5lcmF0aW9uKGdyb3VwSWRzOiBzdHJpbmdbXSwgb3V0c3RhbmRpbmdHcm91cElkczogc3RyaW5nW10gPSBbXSk6IHZvaWQge1xuICAgIHRoaXMuZ2VuZXJhdGluZ0ludm9pY2UgPSB0cnVlO1xuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGFsbENsaWVudDogdHJ1ZSxcbiAgICAgIGNsaWVudExpc3Q6IFt0aGlzLmNsaWVudElkXSxcbiAgICAgIGdyb3VwSWRzLFxuICAgICAgb3V0c3RhbmRpbmdHcm91cElkcyxcbiAgICB9O1xuXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS5jcmVhdGVJbnZvaWNlKHBheWxvYWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICB0aGlzLmdlbmVyYXRpbmdJbnZvaWNlID0gZmFsc2U7XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KGBJbnZvaWNlIGdlbmVyYXRlZCBmb3IgJHtncm91cElkcy5sZW5ndGh9IGJpbGxpbmcgZ3JvdXAocylgKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5nZW5lcmF0aW5nSW52b2ljZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0ZhaWxlZCB0byBnZW5lcmF0ZSBpbnZvaWNlJyk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZm9ybWF0UHJvZHVjdE5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiAnJztcbiAgICByZXR1cm4gbmFtZS5yZXBsYWNlKC8oW2Etel0pKFtBLVpdKS9nLCAnJDEgJDInKVxuICAgICAgLnJlcGxhY2UoL14uLywgKHN0cikgPT4gc3RyLnRvVXBwZXJDYXNlKCkpO1xuICB9XG5cbiAgLy8gVGFrZSB0aGUgcmF3IGFnZ3JlZ2F0aW9uIHJvd3MgKGFscmVhZHkgc29ydGVkIG5ld2VzdC1maXJzdCBieSB0aGUgQVBJKSBhbmRcbiAgLy8gYXR0YWNoIChhKSBhIGh1bWFuLXJlYWRhYmxlIG1vbnRoTGFiZWwsIChiKSB0YWcgZm9yIHRoZSBsYXRlc3QgdHdvIHJvd3NcbiAgLy8gKFwiQ3VycmVudFwiIC8gXCJMYXN0IGdlbmVyYXRlZFwiKSBhbmQgKGMpIGRlbHRhcyB2cyB0aGUgaW1tZWRpYXRlbHkgb2xkZXJcbiAgLy8gQ3VycmVuY3kgc3ltYm9sIGZvciBhIHN0b3JlJ3MgaW52b2ljZSBhbW91bnQgKG1hdGNoZXMgdGhlIGJhY2tlbmQnc1xuICAvLyBiYXNlcHJpY2luZyBjdXJyZW5jeTsgQUVEIHJlbmRlcmVkIGFzIHRleHQpLlxuICBzdG9yZUN1cnJlbmN5U3ltYm9sKHN0b3JlOiBhbnkpOiBzdHJpbmcge1xuICAgIGNvbnN0IHN5bWJvbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGlucjogJ+KCuScsIGRvbGxhcjogJyQnLCBzaW5nYXBvcmVkb2xsYXI6ICdTJCcsIGV1cm86ICfigqwnLCBhZWQ6ICdBRUQgJyB9O1xuICAgIHJldHVybiBzeW1ib2xzWyhzdG9yZT8uaW52b2ljZUN1cnJlbmN5IHx8ICdpbnInKS50b0xvd2VyQ2FzZSgpXSB8fCAn4oK5JztcbiAgfVxuXG4gIC8vIG1vbnRoIHNvIHRoZSB0ZW1wbGF0ZSBjYW4gcmVuZGVyIHRoZSDilrIv4pa8L+KWrCB0cmVuZCBpbmRpY2F0b3JzLlxuICBwcml2YXRlIGRlY29yYXRlTW9udGhseVN1bW1hcnkocm93czogYW55W10pOiBhbnlbXSB7XG4gICAgaWYgKCFBcnJheS5pc0FycmF5KHJvd3MpIHx8IHJvd3MubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG4gICAgY29uc3QgbW9udGhOYW1lcyA9IFsnSmFuJywnRmViJywnTWFyJywnQXByJywnTWF5JywnSnVuJywnSnVsJywnQXVnJywnU2VwJywnT2N0JywnTm92JywnRGVjJ107XG4gICAgY29uc3Qgc3ltYm9sczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgaW5yOiAn4oK5JywgZG9sbGFyOiAnJCcsIHNpbmdhcG9yZWRvbGxhcjogJ1MkJywgZXVybzogJ+KCrCcgfTtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IGlzQ3VycmVudCA9IChyOiBhbnkpID0+IHIueWVhciA9PT0gbm93LmdldEZ1bGxZZWFyKCkgJiYgci5tb250aCA9PT0gKG5vdy5nZXRNb250aCgpICsgMSk7XG4gICAgcmV0dXJuIHJvd3MubWFwKChyLCBpKSA9PiB7XG4gICAgICBjb25zdCBuZXh0ID0gcm93c1tpICsgMV07XG4gICAgICBjb25zdCBzdG9yZXNEZWx0YSA9IG5leHQgPyAoci5zdG9yZXNCaWxsZWQgfHwgMCkgLSAobmV4dC5zdG9yZXNCaWxsZWQgfHwgMCkgOiBudWxsO1xuICAgICAgY29uc3QgYW1vdW50RGVsdGEgPSBuZXh0ID8gKHIuaW52b2ljZUFtb3VudCB8fCAwKSAtIChuZXh0Lmludm9pY2VBbW91bnQgfHwgMCkgOiBudWxsO1xuICAgICAgbGV0IHRhZyA9ICcnO1xuICAgICAgaWYgKGlzQ3VycmVudChyKSkgdGFnID0gJ0N1cnJlbnQnO1xuICAgICAgZWxzZSBpZiAoaSA9PT0gMCkgdGFnID0gJ0xhc3QgZ2VuZXJhdGVkJztcbiAgICAgIGVsc2UgaWYgKGkgPT09IDEgJiYgaXNDdXJyZW50KHJvd3NbMF0pKSB0YWcgPSAnTGFzdCBnZW5lcmF0ZWQnO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ucixcbiAgICAgICAgbW9udGhMYWJlbDogYCR7bW9udGhOYW1lc1soci5tb250aCB8fCAxKSAtIDFdfSAke3IueWVhcn1gLFxuICAgICAgICB0YWcsXG4gICAgICAgIHN0b3Jlc0RlbHRhLFxuICAgICAgICBhbW91bnREZWx0YSxcbiAgICAgICAgY3VycmVuY3lTeW1ib2w6IHN5bWJvbHNbKHIuY3VycmVuY3kgfHwgJ2lucicpLnRvTG93ZXJDYXNlKCldIHx8ICcnLFxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHRvZ2dsZU1vbnRobHlTdW1tYXJ5SGlzdG9yeSgpOiB2b2lkIHtcbiAgICB0aGlzLm1vbnRobHlTdW1tYXJ5RXhwYW5kZWQgPSAhdGhpcy5tb250aGx5U3VtbWFyeUV4cGFuZGVkO1xuICB9XG59IiwiPGRpdiBjbGFzcz1cImludm9pY2VzLXNlY3Rpb25cIj5cbiAgICA8IS0tIEhlYWRlciBSb3cgLS0+XG4gICAgPGRpdiBjbGFzcz1cImQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBhbGlnbi1pdGVtcy1jZW50ZXIgbWItM1wiPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjIwXCIgaGVpZ2h0PVwiMjBcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjY2NjY3IDEwSDEzLjMzMzNNNi42NjY2NyA2LjY2NjY3SDEzLjMzMzNNNi42NjY2NyAxMy4zMzMzSDEwTTUgMTcuNUgxNUMxNS45MjA1IDE3LjUgMTYuNjY2NyAxNi43NTM4IDE2LjY2NjcgMTUuODMzM1Y0LjE2NjY3QzE2LjY2NjcgMy4yNDYxOSAxNS45MjA1IDIuNSAxNSAyLjVINUM0LjA3OTUzIDIuNSAzLjMzMzMzIDMuMjQ2MTkgMy4zMzMzMyA0LjE2NjY3VjE1LjgzMzNDMy4zMzMzMyAxNi43NTM4IDQuMDc5NTMgMTcuNSA1IDE3LjVaXCIgc3Ryb2tlPVwiIzM0NDA1NFwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiaWxsaW5naGVhZGVyXCI+QmlsbGluZyBCcmVha2Rvd248L3NwYW4+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJiYWRnZSBiZy1saWdodCB0ZXh0LWRhcmsgbXMtMVwiPnt7IHRvdGFsSXRlbXMgfX0gc3RvcmVzPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1tdXRlZCBzbWFsbCBtdC0xXCIgKm5nSWY9XCJkYWlseVByaWNpbmdJbmZvPy5kYXRlU3RyaW5nXCI+XG4gICAgICAgICAgICAgICAgRGF0ZTogPHN0cm9uZz57eyBkYWlseVByaWNpbmdJbmZvPy5kYXRlU3RyaW5nIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0yXCI+fDwvc3Bhbj5cbiAgICAgICAgICAgICAgICBBY3RpdmUgU3RvcmVzOiA8c3Ryb25nPnt7IGRhaWx5UHJpY2luZ0luZm8/LmFjdGl2ZVN0b3JlcyB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMlwiPnw8L3NwYW4+XG4gICAgICAgICAgICAgICAgQWNjb3VudCBUeXBlOiA8c3Ryb25nPnt7IGRhaWx5UHJpY2luZ0luZm8/LmFjY291bnRUeXBlIH19PC9zdHJvbmc+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0zXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZGF0ZVwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBkYXRlLWZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJkYXRlRmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJvbkRhdGVGaWx0ZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiRmlsdGVyIGJ5IGRhdGVcIj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uICpuZ0lmPVwiZGF0ZUZpbHRlclwiIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtc2Vjb25kYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImNsZWFyRGF0ZUZpbHRlcigpXCIgdGl0bGU9XCJDbGVhciBkYXRlIGZpbHRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTAuNSAzLjVMMy41IDEwLjVNMy41IDMuNUwxMC41IDEwLjVcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImdlbmVyYXRlSW52b2ljZSgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0biBidG4tcHJpbWFyeSBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXN0b3JlTGlzdC5sZW5ndGggfHwgZ2VuZXJhdGluZ0ludm9pY2VcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk02LjY2NjY3IDEwSDEzLjMzMzNNNi42NjY2NyA2LjY2NjY3SDEzLjMzMzNNNi42NjY2NyAxMy4zMzMzSDEwTTUgMTcuNUgxNUMxNS45MjA1IDE3LjUgMTYuNjY2NyAxNi43NTM4IDE2LjY2NjcgMTUuODMzM1Y0LjE2NjY3QzE2LjY2NjcgMy4yNDYxOSAxNS45MjA1IDIuNSAxNSAyLjVINUM0LjA3OTUzIDIuNSAzLjMzMzMzIDMuMjQ2MTkgMy4zMzMzMyA0LjE2NjY3VjE1LjgzMzNDMy4zMzMzMyAxNi43NTM4IDQuMDc5NTMgMTcuNSA1IDE3LjVaXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiNmZmZcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTFcIj57eyBnZW5lcmF0aW5nSW52b2ljZSA/ICdHZW5lcmF0aW5nLi4uJyA6ICdHZW5lcmF0ZSBJbnZvaWNlJyB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTmV3bHkgT25ib2FyZGVkIFN0b3JlcyDigJQgc3RvcmVzIHdob3NlIGZpcnN0IGZpbGUgZGF0ZSBpcyBpbiB0aGUgY3VycmVudCBtb250aCAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IG1iLTRcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm5ld2x5LW9uYm9hcmRlZC1jYXJkXCJcbiAgICAgICAgICAgIHN0eWxlPVwiZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6MTRweDtib3JkZXI6MXB4IHNvbGlkICNFNEU3RUM7Ym9yZGVyLXJhZGl1czoxMHB4O3BhZGRpbmc6MTRweCAxOHB4O2JhY2tncm91bmQ6I2ZmZjttaW4td2lkdGg6MjQwcHg7XCI+XG4gICAgICAgICAgICA8ZGl2IHN0eWxlPVwid2lkdGg6NDBweDtoZWlnaHQ6NDBweDtib3JkZXItcmFkaXVzOjhweDtiYWNrZ3JvdW5kOiNFQUY4RkY7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO1wiPlxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjJcIiBoZWlnaHQ9XCIyMlwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTMgMjFWOGw5LTUgOSA1djEzTTMgMjFoMThNMyAyMUgxbTIwIDBoMk05IDIxdi02aDZ2Nk0xMiA3LjVoLjAxXCIgc3Ryb2tlPVwiIzAwQTNGRlwiIHN0cm9rZS13aWR0aD1cIjEuNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjI0cHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOiMxMDE4Mjg7bGluZS1oZWlnaHQ6MS4xO1wiPnt7IG5ld2x5T25ib2FyZGVkU3RvcmVzIHwgbnVtYmVyOicxLjAtMCc6J2VuLUlOJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MTNweDtjb2xvcjojNjY3MDg1O1wiPk5ld2x5IE9uYm9hcmRlZCBTdG9yZXM8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPVwiZm9udC1zaXplOjExcHg7Y29sb3I6Izk4QTJCMztcIj5GaXJzdCBmaWxlIGluIGN1cnJlbnQgbW9udGg8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXByaW1hcnkgbXMtM1wiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFuZXdseU9uYm9hcmRlZFN0b3Jlc1wiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cInZpZXdOZXdTdG9yZXMoKVwiPlZpZXcgU3RvcmVzPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBNb250aGx5IEJpbGxpbmcgU3VtbWFyeSDigJQgaW52b2ljZSB0cmVuZCAobmV3ZXN0IGZpcnN0LCB3aXRoIGRlbHRhcyB2cyBwcmlvciBtb250aCkgLS0+XG4gICAgPGRpdiBjbGFzcz1cIm1vbnRobHktYmlsbGluZy1zdW1tYXJ5XCIgKm5nSWY9XCJtb250aGx5QmlsbGluZ1N1bW1hcnk/Lmxlbmd0aFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibXN1bS1oZWFkZXJcIj5Nb250aGx5IEJpbGxpbmcgU3VtbWFyeTwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbWItMFwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk1PTlRIPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5OVU1CRVIgT0YgU1RPUkVTIEJJTExFRDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+SU5WT0lDRSBBTU9VTlQ8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCByb3cgb2YgbW9udGhseUJpbGxpbmdTdW1tYXJ5OyBsZXQgaSA9IGluZGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHIgKm5nSWY9XCJpIDwgMiB8fCBtb250aGx5U3VtbWFyeUV4cGFuZGVkXCIgW2NsYXNzLmN1cnJdPVwicm93LnRhZyA9PT0gJ0N1cnJlbnQnXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJvdy5tb250aExhYmVsIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93LnRhZyA9PT0gJ0N1cnJlbnQnXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IG1zLTJcIj5DdXJyZW50PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvdy50YWcgPT09ICdMYXN0IGdlbmVyYXRlZCdcIiBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtZGFyayBtcy0yXCI+TGFzdCBnZW5lcmF0ZWQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcm93LnN0b3Jlc0JpbGxlZCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvdy5zdG9yZXNEZWx0YSAhPT0gbnVsbFwiIGNsYXNzPVwiaW5kIG1zLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnVwXT1cInJvdy5zdG9yZXNEZWx0YSA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRvd25dPVwicm93LnN0b3Jlc0RlbHRhIDwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmxhdF09XCJyb3cuc3RvcmVzRGVsdGEgPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJyb3cuc3RvcmVzRGVsdGEgPiAwXCI+4payIHt7IHJvdy5zdG9yZXNEZWx0YSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInJvdy5zdG9yZXNEZWx0YSA8IDBcIj7ilrwge3sgLXJvdy5zdG9yZXNEZWx0YSB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD7ilqwgMDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyByb3cuY3VycmVuY3lTeW1ib2wgfX17eyByb3cuaW52b2ljZUFtb3VudCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3cuYW1vdW50RGVsdGEgIT09IG51bGxcIiBjbGFzcz1cImluZCBtcy0yXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy51cF09XCJyb3cuYW1vdW50RGVsdGEgPiAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5kb3duXT1cInJvdy5hbW91bnREZWx0YSA8IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmZsYXRdPVwicm93LmFtb3VudERlbHRhID09PSAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyIFtuZ1N3aXRjaF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwicm93LmFtb3VudERlbHRhID4gMFwiPuKWsiB7eyByb3cuY3VycmVuY3lTeW1ib2wgfX17eyByb3cuYW1vdW50RGVsdGEgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwicm93LmFtb3VudERlbHRhIDwgMFwiPuKWvCB7eyByb3cuY3VycmVuY3lTeW1ib2wgfX17eyAtcm93LmFtb3VudERlbHRhIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoRGVmYXVsdD7ilqwgMDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibW9udGhseUJpbGxpbmdTdW1tYXJ5Lmxlbmd0aCA+IDJcIiBjbGFzcz1cIm1zdW0tdG9nZ2xlXCIgKGNsaWNrKT1cInRvZ2dsZU1vbnRobHlTdW1tYXJ5SGlzdG9yeSgpXCI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIW1vbnRobHlTdW1tYXJ5RXhwYW5kZWRcIj7ilr4gU2hvdyBvbGRlciBtb250aHMgKHt7IG1vbnRobHlCaWxsaW5nU3VtbWFyeS5sZW5ndGggLSAyIH19KTwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIm1vbnRobHlTdW1tYXJ5RXhwYW5kZWRcIj7ilrQgSGlkZSBvbGRlciBtb250aHM8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIEFkZGl0aW9uYWwgUHJvZHVjdHMg4oCUIG5vbi1zdGFuZGFyZCBwcm9kdWN0cyBiaWxsZWQgZm9yIHRoaXMgY2xpZW50IG9ubHlcbiAgICAgICAgIChlLmcuIGNsaWVudElkIDExOiBFeWV0ZXN0LCBQbGFub2dyYW0pLiBIaWRkZW4gd2hlbiB0aGUgY2xpZW50IGhhcyBub25lLiAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibW9udGhseS1iaWxsaW5nLXN1bW1hcnlcIiAqbmdJZj1cImFkZGl0aW9uYWxQcm9kdWN0cz8ubGVuZ3RoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtc3VtLWhlYWRlclwiPkFkZGl0aW9uYWwgUHJvZHVjdHM8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cbiAgICAgICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG1iLTBcIj5cbiAgICAgICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5Qcm9kdWN0IE5hbWU8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1lbmRcIj5RdWFudGl0eTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWVuZFwiPlByaWNlPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtZW5kXCI+VG90YWw8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5BY3Rpb248L3RoPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHAgb2YgYWRkaXRpb25hbFByb2R1Y3RzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgcC5wcm9kdWN0TmFtZSB9fTwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWVuZFwiPnt7IHAucXVhbnRpdHkgfCBudW1iZXI6JzEuMC0wJzonZW4tSU4nIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZW5kXCI+e3sgKGFkZGl0aW9uYWxQcm9kdWN0c0N1cnJlbmN5ID09PSAnZG9sbGFyJyA/ICckJyA6ICfigrknKSB9fXt7IHAucHJpY2UgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZW5kXCI+PHN0cm9uZz57eyAoYWRkaXRpb25hbFByb2R1Y3RzQ3VycmVuY3kgPT09ICdkb2xsYXInID8gJyQnIDogJ+KCuScpIH19e3sgcC50b3RhbCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3N0cm9uZz48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwiY2FuRXhwb3J0QWRkaXRpb25hbFByb2R1Y3QocC5wcm9kdWN0TmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZXhwb3J0QWRkaXRpb25hbFByb2R1Y3QocC5wcm9kdWN0TmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRG93bmxvYWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPVwiM1wiIGNsYXNzPVwidGV4dC1lbmRcIj48c3Ryb25nPkdyYW5kIFRvdGFsPC9zdHJvbmc+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZW5kXCI+PHN0cm9uZz57eyAoYWRkaXRpb25hbFByb2R1Y3RzQ3VycmVuY3kgPT09ICdkb2xsYXInID8gJyQnIDogJ+KCuScpIH19e3sgYWRkaXRpb25hbFByb2R1Y3RzVG90YWwgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zdHJvbmc+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gU2VhcmNoICsgRmlsdGVyIFJvdyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiY2FyZC1oZWFkZXIgcGF5bWVudGhpc3RvcnkgYm9yZGVyLTAgcHgtMFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC10b29sYmFyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNvbnRlbnQtYmV0d2VlbiBmbGV4LXdyYXAgZ2FwLTIgdy0xMDBcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gaW52b2ljZXNlYXJjaCBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG10LTYgbXMtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwibGVuXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBpbnZvaWNlc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU3RvcmUgbmFtZSBvciBJRC4uLlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2VhcmNoRmllbGQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoRGlzYWJsZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWZpbHRlcnMgKm5nSWY9XCJmaWx0ZXJzUmVhZHlcIiBbZGF0YU9iamVjdF09XCJzdG9yZUZpbHRlck9iamVjdFwiIChhcHBsaWVkRmlsdGVycyk9XCJhcHBseVN0b3JlRmlsdGVycygkZXZlbnQpXCI+PC9saWItZmlsdGVycz5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwib25FeHBvcnQoKVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuLW91dGxpbmUgYnRuIGFsaWduLWl0ZW1zLWVuZCB0ZXh0LW5vd3JhcCBpbnZoZWFkZXJcIlxuICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXN0b3JlTGlzdC5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTE3LjUgMTIuNVYxNS44MzMzQzE3LjUgMTYuMjc1NCAxNy4zMjQ0IDE2LjY5OTMgMTcuMDExOCAxNy4wMTE4QzE2LjY5OTMgMTcuMzI0NCAxNi4yNzU0IDE3LjUgMTUuODMzMyAxNy41SDQuMTY2NjdDMy43MjQ2NCAxNy41IDMuMzAwNzIgMTcuMzI0NCAyLjk4ODE2IDE3LjAxMThDMi42NzU1OSAxNi42OTkzIDIuNSAxNi4yNzU0IDIuNSAxNS44MzMzVjEyLjVNMTQuMTY2NyA2LjY2NjY3TDEwIDIuNU0xMCAyLjVMNS44MzMzMyA2LjY2NjY3TTEwIDIuNVYxMi41XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm1zLTFcIj5FeHBvcnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExvYWRpbmcgU2hpbW1lciAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RvcmVMb2FkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBObyBEYXRhIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdG9yZU5vRGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyB3LTI1XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBTdG9yZXMgVGFibGUgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFzdG9yZUxvYWRpbmcgJiYgIXN0b3JlTm9EYXRhXCIgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFjY29yZGlvbiB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnc3RvcmVOYW1lJylcIj5TVE9SRSBOQU1FXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZU5hbWUnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5TVE9SRSBJRDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5DT1VOVFJZPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPlBST0RVQ1RTPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCI+VFJBRkZJQyBDQU1FUkFTXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICd0cmFmZmljQ2FtZXJhQ291bnQnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAndHJhZmZpY0NhbWVyYUNvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCd6b25lQ2FtZXJhQ291bnQnKVwiPlpPTkUgQ0FNRVJBU1xuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnem9uZUNhbWVyYUNvdW50JyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVDYW1lcmFDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnem9uZUNvdW50JylcIj5aT05FU1xuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnem9uZUNvdW50JyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+RklSU1QgRklMRSBEQVRFPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ2RheXNEaWZmZXJlbmNlJylcIj5XT1JLSU5HIERBWVNcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ2RheXNEaWZmZXJlbmNlJyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ2RheXNEaWZmZXJlbmNlJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5TVEFUVVM8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWVuZFwiPklOVk9JQ0UgQU1PVU5UPC90aD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICA8dHIgKm5nRm9yPVwibGV0IHN0b3JlIG9mIHN0b3JlTGlzdFwiPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgdGFibGUtdGl0bGUtcHJpbWFyeVwiPnt7IHN0b3JlPy5zdG9yZU5hbWUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgc3RvcmU/LnN0b3JlSWQgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgc3RvcmU/LmNvdW50cnkgfHwgJ+KAlCcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2Ygc3RvcmU/LnByb2R1Y3RzXCIgY2xhc3M9XCJiYWRnZSBiYWRnZS1saWdodC1wcmltYXJ5IG1lLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgZm9ybWF0UHJvZHVjdE5hbWUocHJvZHVjdD8ucHJvZHVjdE5hbWUpIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0aW5nRmllbGQoc3RvcmU/LnN0b3JlSWQsICd0cmFmZmljQ2FtZXJhQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzdG9yZT8udHJhZmZpY0NhbWVyYUNvdW50IHx8IDAgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZWRpdC1pY29uXCIgKGNsaWNrKT1cInN0YXJ0RmllbGRFZGl0KHN0b3JlLCAndHJhZmZpY0NhbWVyYUNvdW50JylcIiB0aXRsZT1cIkVkaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjkxNjY3IDEuNzUwMDRDMTAuMDY5OCAxLjU5NjgzIDEwLjI1MTggMS40NzUzMyAxMC40NTE5IDEuMzkyMzhDMTAuNjUyMiAxLjMwOTQ2IDEwLjg2NjcgMS4yNjY3OSAxMS4wODMzIDEuMjY2NzlDMTEuMyAxLjI2Njc5IDExLjUxNDUgMS4zMDk0NiAxMS43MTQ4IDEuMzkyMzhDMTEuOTE0OSAxLjQ3NTMzIDEyLjA5NjkgMS41OTY4MyAxMi4yNSAxLjc1MDA0QzEyLjQwMzIgMS45MDMyNSAxMi41MjQ3IDIuMDg1MjkgMTIuNjA3NyAyLjI4NTQ2QzEyLjY5MDYgMi40ODU2NyAxMi43MzMzIDIuNzAwMTMgMTIuNzMzMyAyLjkxNjcxQzEyLjczMzMgMy4xMzMyOSAxMi42OTA2IDMuMzQ3NzUgMTIuNjA3NyAzLjU0Nzk2QzEyLjUyNDcgMy43NDgxMyAxMi40MDMyIDMuOTMwMTcgMTIuMjUgNC4wODMzOEw0LjM3NSAxMS45NTg0TDEuMTY2NjcgMTIuODMzNEwyLjA0MTY3IDkuNjI1MDRMOS45MTY2NyAxLjc1MDA0WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjE2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZ0ZpZWxkKHN0b3JlPy5zdG9yZUlkLCAndHJhZmZpY0NhbWVyYUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGVkaXQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGluZ0ZpZWxkW2dldEZpZWxkRWRpdEtleShzdG9yZT8uc3RvcmVJZCwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZUZpZWxkRWRpdChzdG9yZSwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiY2FuY2VsRmllbGRFZGl0KHN0b3JlLCAndHJhZmZpY0NhbWVyYUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1zdWNjZXNzXCIgKGNsaWNrKT1cInNhdmVGaWVsZEVkaXQoc3RvcmUsICd0cmFmZmljQ2FtZXJhQ291bnQnKVwiIHRpdGxlPVwiU2F2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzLjMzMzQgNEw2LjAwMDA4IDExLjMzMzNMMi42NjY3NSA4XCIgc3Ryb2tlPVwiIzEyQjc2QVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwiY2FuY2VsRmllbGRFZGl0KHN0b3JlLCAndHJhZmZpY0NhbWVyYUNvdW50JylcIiB0aXRsZT1cIkNhbmNlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDRMNCAxMk00IDRMMTIgMTJcIiBzdHJva2U9XCIjRjA0NDM4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWRpdGluZ0ZpZWxkKHN0b3JlPy5zdG9yZUlkLCAnem9uZUNhbWVyYUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgc3RvcmU/LnpvbmVDYW1lcmFDb3VudCB8fCAwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGVkaXQtaWNvblwiIChjbGljayk9XCJzdGFydEZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDYW1lcmFDb3VudCcpXCIgdGl0bGU9XCJFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45MTY2NyAxLjc1MDA0QzEwLjA2OTggMS41OTY4MyAxMC4yNTE4IDEuNDc1MzMgMTAuNDUxOSAxLjM5MjM4QzEwLjY1MjIgMS4zMDk0NiAxMC44NjY3IDEuMjY2NzkgMTEuMDgzMyAxLjI2Njc5QzExLjMgMS4yNjY3OSAxMS41MTQ1IDEuMzA5NDYgMTEuNzE0OCAxLjM5MjM4QzExLjkxNDkgMS40NzUzMyAxMi4wOTY5IDEuNTk2ODMgMTIuMjUgMS43NTAwNEMxMi40MDMyIDEuOTAzMjUgMTIuNTI0NyAyLjA4NTI5IDEyLjYwNzcgMi4yODU0NkMxMi42OTA2IDIuNDg1NjcgMTIuNzMzMyAyLjcwMDEzIDEyLjczMzMgMi45MTY3MUMxMi43MzMzIDMuMTMzMjkgMTIuNjkwNiAzLjM0Nzc1IDEyLjYwNzcgMy41NDc5NkMxMi41MjQ3IDMuNzQ4MTMgMTIuNDAzMiAzLjkzMDE3IDEyLjI1IDQuMDgzMzhMNC4zNzUgMTEuOTU4NEwxLjE2NjY3IDEyLjgzMzRMMi4wNDE2NyA5LjYyNTA0TDkuOTE2NjcgMS43NTAwNFpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4xNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpbmdGaWVsZChzdG9yZT8uc3RvcmVJZCwgJ3pvbmVDYW1lcmFDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBlZGl0LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbmdGaWVsZFtnZXRGaWVsZEVkaXRLZXkoc3RvcmU/LnN0b3JlSWQsICd6b25lQ2FtZXJhQ291bnQnKV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVGaWVsZEVkaXQoc3RvcmUsICd6b25lQ2FtZXJhQ291bnQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDYW1lcmFDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtc3VjY2Vzc1wiIChjbGljayk9XCJzYXZlRmllbGRFZGl0KHN0b3JlLCAnem9uZUNhbWVyYUNvdW50JylcIiB0aXRsZT1cIlNhdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMy4zMzM0IDRMNi4wMDAwOCAxMS4zMzMzTDIuNjY2NzUgOFwiIHN0cm9rZT1cIiMxMkI3NkFcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtZGFuZ2VyXCIgKGNsaWNrKT1cImNhbmNlbEZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDYW1lcmFDb3VudCcpXCIgdGl0bGU9XCJDYW5jZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA0TDQgMTJNNCA0TDEyIDEyXCIgc3Ryb2tlPVwiI0YwNDQzOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmdGaWVsZChzdG9yZT8uc3RvcmVJZCwgJ3pvbmVDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHN0b3JlPy56b25lQ291bnQgfHwgMCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0LWljb25cIiAoY2xpY2spPVwic3RhcnRGaWVsZEVkaXQoc3RvcmUsICd6b25lQ291bnQnKVwiIHRpdGxlPVwiRWRpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTE2NjcgMS43NTAwNEMxMC4wNjk4IDEuNTk2ODMgMTAuMjUxOCAxLjQ3NTMzIDEwLjQ1MTkgMS4zOTIzOEMxMC42NTIyIDEuMzA5NDYgMTAuODY2NyAxLjI2Njc5IDExLjA4MzMgMS4yNjY3OUMxMS4zIDEuMjY2NzkgMTEuNTE0NSAxLjMwOTQ2IDExLjcxNDggMS4zOTIzOEMxMS45MTQ5IDEuNDc1MzMgMTIuMDk2OSAxLjU5NjgzIDEyLjI1IDEuNzUwMDRDMTIuNDAzMiAxLjkwMzI1IDEyLjUyNDcgMi4wODUyOSAxMi42MDc3IDIuMjg1NDZDMTIuNjkwNiAyLjQ4NTY3IDEyLjczMzMgMi43MDAxMyAxMi43MzMzIDIuOTE2NzFDMTIuNzMzMyAzLjEzMzI5IDEyLjY5MDYgMy4zNDc3NSAxMi42MDc3IDMuNTQ3OTZDMTIuNTI0NyAzLjc0ODEzIDEyLjQwMzIgMy45MzAxNyAxMi4yNSA0LjA4MzM4TDQuMzc1IDExLjk1ODRMMS4xNjY2NyAxMi44MzM0TDIuMDQxNjcgOS42MjUwNEw5LjkxNjY3IDEuNzUwMDRaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nRmllbGQoc3RvcmU/LnN0b3JlSWQsICd6b25lQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZWRpdC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5nRmllbGRbZ2V0RmllbGRFZGl0S2V5KHN0b3JlPy5zdG9yZUlkLCAnem9uZUNvdW50JyldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlRmllbGRFZGl0KHN0b3JlLCAnem9uZUNvdW50JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjYW5jZWxGaWVsZEVkaXQoc3RvcmUsICd6b25lQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LXN1Y2Nlc3NcIiAoY2xpY2spPVwic2F2ZUZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDb3VudCcpXCIgdGl0bGU9XCJTYXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMuMzMzNCA0TDYuMDAwMDggMTEuMzMzM0wyLjY2Njc1IDhcIiBzdHJva2U9XCIjMTJCNzZBXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJjYW5jZWxGaWVsZEVkaXQoc3RvcmUsICd6b25lQ291bnQnKVwiIHRpdGxlPVwiQ2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNEw0IDEyTTQgNEwxMiAxMlwiIHN0cm9rZT1cIiNGMDQ0MzhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IHN0b3JlPy5lZGdlZmlyc3RGaWxlRGF0ZSA/IChzdG9yZT8uZWRnZWZpcnN0RmlsZURhdGUgfCBkYXRlOiAnZGQgTU1NIHl5eXknKSA6ICfigJQnIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIHN0b3JlPy5wcm9kdWN0c1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yIG1iLTFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzbWFsbCB0ZXh0LW11dGVkXCI+e3sgZm9ybWF0UHJvZHVjdE5hbWUocHJvZHVjdD8ucHJvZHVjdE5hbWUpIH19Ojwvc3Bhbj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFZpZXcgbW9kZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmcoc3RvcmU/LnN0b3JlSWQsIHByb2R1Y3Q/LnByb2R1Y3ROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBwcm9kdWN0Py53b3JraW5nZGF5cyB8fCAwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGVkaXQtaWNvblwiIChjbGljayk9XCJzdGFydEVkaXQoc3RvcmUsIHByb2R1Y3QpXCIgdGl0bGU9XCJFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45MTY2NyAxLjc1MDA0QzEwLjA2OTggMS41OTY4MyAxMC4yNTE4IDEuNDc1MzMgMTAuNDUxOSAxLjM5MjM4QzEwLjY1MjIgMS4zMDk0NiAxMC44NjY3IDEuMjY2NzkgMTEuMDgzMyAxLjI2Njc5QzExLjMgMS4yNjY3OSAxMS41MTQ1IDEuMzA5NDYgMTEuNzE0OCAxLjM5MjM4QzExLjkxNDkgMS40NzUzMyAxMi4wOTY5IDEuNTk2ODMgMTIuMjUgMS43NTAwNEMxMi40MDMyIDEuOTAzMjUgMTIuNTI0NyAyLjA4NTI5IDEyLjYwNzcgMi4yODU0NkMxMi42OTA2IDIuNDg1NjcgMTIuNzMzMyAyLjcwMDEzIDEyLjczMzMgMi45MTY3MUMxMi43MzMzIDMuMTMzMjkgMTIuNjkwNiAzLjM0Nzc1IDEyLjYwNzcgMy41NDc5NkMxMi41MjQ3IDMuNzQ4MTMgMTIuNDAzMiAzLjkzMDE3IDEyLjI1IDQuMDgzMzhMNC4zNzUgMTEuOTU4NEwxLjE2NjY3IDEyLjgzMzRMMi4wNDE2NyA5LjYyNTA0TDkuOTE2NjcgMS43NTAwNFpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4xNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBFZGl0IG1vZGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpbmcoc3RvcmU/LnN0b3JlSWQsIHByb2R1Y3Q/LnByb2R1Y3ROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZWRpdC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5nUHJvZHVjdFtnZXRFZGl0S2V5KHN0b3JlPy5zdG9yZUlkLCBwcm9kdWN0Py5wcm9kdWN0TmFtZSldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlV29ya2luZ0RheXMoc3RvcmUsIHByb2R1Y3QpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiY2FuY2VsRWRpdChzdG9yZSwgcHJvZHVjdClcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1zdWNjZXNzXCIgKGNsaWNrKT1cInNhdmVXb3JraW5nRGF5cyhzdG9yZSwgcHJvZHVjdClcIiB0aXRsZT1cIlNhdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMy4zMzM0IDRMNi4wMDAwOCAxMS4zMzMzTDIuNjY2NzUgOFwiIHN0cm9rZT1cIiMxMkI3NkFcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtZGFuZ2VyXCIgKGNsaWNrKT1cImNhbmNlbEVkaXQoc3RvcmUsIHByb2R1Y3QpXCIgdGl0bGU9XCJDYW5jZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA0TDQgMTJNNCA0TDEyIDEyXCIgc3Ryb2tlPVwiI0YwNDQzOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm10LTNcIiBbbmdDbGFzc109XCJzdG9yZT8uc3RhdHVzID09PSAnYWN0aXZlJyA/ICdiYWRnZSBiYWRnZS1saWdodC1zdWNjZXNzJyA6ICdiYWRnZSBiYWRnZS1saWdodC1kYW5nZXInXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3RvcmU/LnN0YXR1cyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZW5kXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8IS0tIFBlci1wcm9kdWN0IGJyZWFrZG93biAoVHJhZmZpYzog4oK5eCwgWm9uZTog4oK5eSDigKYpICsgdG90YWwuIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgYiBvZiBzdG9yZT8uaW52b2ljZUJyZWFrZG93blwiIGNsYXNzPVwiaW52LWJyZWFrZG93bi1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImludi1icmVha2Rvd24tbGFiZWxcIj57eyBiLmxhYmVsIH19Ojwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdG9yZUN1cnJlbmN5U3ltYm9sKHN0b3JlKSB9fXt7IChiLmFtb3VudCB8fCAwKSB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIGludi1icmVha2Rvd24tdG90YWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHN0b3JlQ3VycmVuY3lTeW1ib2woc3RvcmUpIH19e3sgKHN0b3JlPy5pbnZvaWNlQW1vdW50IHx8IDApIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgIDwvdGFibGU+XG4gICAgICAgIDxkaXYgKm5nSWY9XCIhc3RvcmVMb2FkaW5nICYmICFzdG9yZU5vRGF0YVwiPlxuICAgICAgICAgICAgPGxpYi1wYWdpbmF0aW9uIGNsYXNzPVwidGV4dC1zdGFydFwiIFtpdGVtc1BlclBhZ2VdPVwiaXRlbXNQZXJQYWdlXCIgW2N1cnJlbnRQYWdlXT1cImN1cnJlbnRQYWdlXCJcbiAgICAgICAgICAgICAgICBbdG90YWxJdGVtc109XCJ0b3RhbEl0ZW1zXCIgW3BhZ2luYXRpb25TaXplc109XCJwYWdpbmF0aW9uU2l6ZXNcIiBbcGFnZVNpemVdPVwicGFnZVNpemVcIlxuICAgICAgICAgICAgICAgIChwYWdlQ2hhbmdlKT1cIm9uUGFnZUNoYW5nZSgkZXZlbnQpXCIgKHBhZ2VTaXplQ2hhbmdlKT1cIm9uUGFnZVNpemVDaGFuZ2UoJGV2ZW50KVwiPjwvbGliLXBhZ2luYXRpb24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+Il19
541
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpbHktcHJpY2luZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtYmlsbGluZy9zcmMvbGliL2NvbXBvbmVudHMvZGFpbHktcHJpY2luZy9kYWlseS1wcmljaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy9kYWlseS1wcmljaW5nL2RhaWx5LXByaWNpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7OztBQU94RixNQUFNLE9BQU8scUJBQXFCO0lBaUV0QjtJQUNBO0lBQ0E7SUFDQTtJQW5FTyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVqQyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBRS9CLEdBQUcsQ0FBTTtJQUNULGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsV0FBVztJQUNYLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztJQUUzQix5RUFBeUU7SUFDekUsY0FBYyxHQUFRLEVBQUUsQ0FBQztJQUN6Qix3RkFBd0Y7SUFDeEYsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUV2QixjQUFjO0lBQ2QsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUV4Qix3RUFBd0U7SUFDeEUsNkRBQTZEO0lBQzdELFlBQVksR0FBYSxFQUFFLENBQUM7SUFDNUIsOEVBQThFO0lBQzlFLGFBQWEsR0FB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QUNiLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFBRSxHQUFHLEdBQUcsU0FBUyxDQUFDO2lCQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDO2dCQUFFLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQztpQkFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsR0FBRyxHQUFHLGdCQUFnQixDQUFDO1lBQy9ELE9BQU87Z0JBQ0wsR0FBRyxDQUFDO2dCQUNKLFVBQVUsRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRTtnQkFDekQsR0FBRztnQkFDSCxXQUFXO2dCQUNYLFdBQVc7Z0JBQ1gsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsSUFBSSxFQUFFO2FBQ25FLENBQUM7UUFDSixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCwyQkFBMkI7UUFDekIsSUFBSSxDQUFDLHNCQUFzQixHQUFHLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQzdELENBQUM7d0dBbmpCVSxxQkFBcUI7NEZBQXJCLHFCQUFxQixnSENibEMseWdqQ0FvYk07OzRGRHZhTyxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsbUJBQW1CO3FLQU9wQixRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBCaWxsaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcbmltcG9ydCB7IEdlbmVyYXRlSW52b2ljZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9nZW5lcmF0ZS1pbnZvaWNlLW1vZGFsL2dlbmVyYXRlLWludm9pY2UtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE5ld1N0b3Jlc01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9uZXctc3RvcmVzLW1vZGFsL25ldy1zdG9yZXMtbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhaWx5LXByaWNpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFpbHktcHJpY2luZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYWlseS1wcmljaW5nLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBEYWlseVByaWNpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgQElucHV0KCkgY2xpZW50SWQ6IHN0cmluZyA9ICcnO1xuXG4gIGxlbjogYW55O1xuICBzZWFyY2hEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1ldGFkYXRhXG4gIGRhaWx5UHJpY2luZ0luZm86IGFueSA9IHt9O1xuXG4gIC8vIEVkaXQgdHJhY2tpbmc6IGtleSA9ICdzdG9yZUlkX3Byb2R1Y3ROYW1lJywgdmFsdWUgPSBlZGl0ZWQgd29ya2luZ2RheXNcbiAgZWRpdGluZ1Byb2R1Y3Q6IGFueSA9IHt9O1xuICAvLyBFZGl0IHRyYWNraW5nIGZvciBzdG9yZS1sZXZlbCBmaWVsZHMgKHRyYWZmaWNDYW1lcmFDb3VudCwgem9uZUNhbWVyYUNvdW50LCB6b25lQ291bnQpXG4gIGVkaXRpbmdGaWVsZDogYW55ID0ge307XG5cbiAgLy8gRGF0ZSBmaWx0ZXJcbiAgZGF0ZUZpbHRlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gRmlsdGVyIOKAlCBtdWx0aS1zZWxlY3Qgc3RhdHVzLiBObyBkZWZhdWx0OiB0aGUgdGFibGUgb3BlbnMgc2hvd2luZyBBTExcbiAgLy8gc3RvcmVzIChhY3RpdmUgKyBkZWFjdGl2ZSk7IG5laXRoZXIgb3B0aW9uIGlzIHByZS1jaGVja2VkLlxuICBzdGF0dXNGaWx0ZXI6IHN0cmluZ1tdID0gW107XG4gIC8vIE11bHRpLXNlbGVjdCBjb3VudHJ5IGZpbHRlciAob3B0aW9ucyBwb3B1bGF0ZWQgZnJvbSB0aGUgQVBJJ3MgYGNvdW50cmllc2ApLlxuICBjb3VudHJ5RmlsdGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzdG9yZUZpbHRlck9iamVjdDogYW55W10gPSBbXG4gICAgeyBEZXNjcmlwdGlvbjogJ1N0YXR1cycsIHR5cGU6ICdtdWx0aScsIElzc3VlczogW3sgaWQ6ICdhY3RpdmUnLCB0ZXh0OiAnQWN0aXZlJyB9LCB7IGlkOiAnZGVhY3RpdmUnLCB0ZXh0OiAnRGVhY3RpdmUnIH1dIH0sXG4gIF07XG4gIC8vIGxpYi1maWx0ZXJzIHNuYXBzaG90cyBkYXRhT2JqZWN0IGluIGl0cyBuZ09uSW5pdCwgc28gdGhlIENvdW50cnkgZ3JvdXAgbXVzdFxuICAvLyBiZSBwcmVzZW50IEJFRk9SRSBpdCBtb3VudHMuIFdlIGdhdGUgdGhlIDxsaWItZmlsdGVycz4gcmVuZGVyIG9uIHRoaXMgZmxhZyxcbiAgLy8gZmxpcHBpbmcgaXQgdHJ1ZSBvbmx5IG9uY2UgdGhlIGNvdW50cnkgb3B0aW9ucyBoYXZlIGJlZW4gYnVpbHQgZnJvbSB0aGUgQVBJLlxuICBmaWx0ZXJzUmVhZHk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBNb250aGx5IEJpbGxpbmcgU3VtbWFyeSDigJQgZGVyaXZlZCBmcm9tIGludm9pY2UgaGlzdG9yeSBmb3IgdGhlIGJyYW5kLlxuICAvLyBOZXdlc3QgZmlyc3Q7IGVhY2ggcm93IGNhcnJpZXMgcHJpb3ItbW9udGggZGVsdGFzIGZvciB0aGUgdHJlbmQgaW5kaWNhdG9yLlxuICBtb250aGx5QmlsbGluZ1N1bW1hcnk6IGFueVtdID0gW107XG4gIG1vbnRobHlTdW1tYXJ5RXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBUYWJsZVxuICBzdG9yZUxpc3Q6IGFueSA9IFtdO1xuICBzdG9yZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBzdG9yZU5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICB0b3RhbEl0ZW1zOiBudW1iZXIgPSAwO1xuICBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xuICBpdGVtc1BlclBhZ2U6IG51bWJlciA9IDEwO1xuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XG4gIC8vIERlZmF1bHQgc29ydDogd29ya2luZyBkYXlzIChkYXlzRGlmZmVyZW5jZSksIGhpZ2hlc3QgZmlyc3QuXG4gIHNvcnRDb2x1bU5hbWU6IHN0cmluZyA9ICdkYXlzRGlmZmVyZW5jZSc7XG4gIHNvcnRCeTogbnVtYmVyID0gLTE7XG4gIGdlbmVyYXRpbmdJbnZvaWNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gQWRkaXRpb25hbCAobm9uLXN0YW5kYXJkKSBwcm9kdWN0cyBhdmFpbGFibGUgb25seSBmb3Igc3BlY2lmaWMgY2xpZW50c1xuICAvLyAoY3VycmVudGx5IGNsaWVudElkIDExKS4gRW1wdHkgZm9yIGV2ZXJ5b25lIGVsc2UgLT4gdGhlIHRhYmxlIGlzIGhpZGRlbi5cbiAgYWRkaXRpb25hbFByb2R1Y3RzOiBhbnlbXSA9IFtdO1xuICBhZGRpdGlvbmFsUHJvZHVjdHNDdXJyZW5jeTogc3RyaW5nID0gJ2lucic7XG4gIC8vIERhdGUgKFlZWVktTU0tREQpIG9mIHRoZSBiaWxsaW5nX2RldGFpbHMgc25hcHNob3QgYmVoaW5kIHRoZSBhZGRpdGlvbmFsXG4gIC8vIHByb2R1Y3QgY291bnRzOyBwYXNzZWQgdG8gdGhlIGV4cG9ydCBzbyBleHBvcnRzIG1hdGNoIHRoZSBkaXNwbGF5ZWQgY2FyZHMuXG4gIGFkZGl0aW9uYWxQcm9kdWN0c0RhdGU6IHN0cmluZyA9ICcnO1xuXG4gIC8vIENvdW50ICsgbGlzdCBvZiBzdG9yZXMgb25ib2FyZGVkIHRoaXMgbW9udGggKGZpcnN0IGZpbGUgZGF0ZSBpbiB0aGUgY3VycmVudFxuICAvLyBtb250aCkuIFRoZSBsaXN0IGZlZWRzIHRoZSBcIlZpZXcgU3RvcmVzXCIgcG9wdXAuXG4gIG5ld2x5T25ib2FyZGVkU3RvcmVzOiBudW1iZXIgPSAwO1xuICBuZXdseU9uYm9hcmRlZFN0b3JlTGlzdDogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJpbGxpbmdTZXJ2aWNlOiBCaWxsaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbGllbnRJZCkge1xuICAgICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gICAgICB0aGlzLmxvYWRBZGRpdGlvbmFsUHJvZHVjdHMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NsaWVudElkJ10gJiYgIWNoYW5nZXNbJ2NsaWVudElkJ10uZmlyc3RDaGFuZ2UgJiYgdGhpcy5jbGllbnRJZCkge1xuICAgICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gICAgICB0aGlzLmxvYWRBZGRpdGlvbmFsUHJvZHVjdHMoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHcmFuZCB0b3RhbCBhY3Jvc3MgYWxsIGFkZGl0aW9uYWwtcHJvZHVjdCByb3dzLlxuICBnZXQgYWRkaXRpb25hbFByb2R1Y3RzVG90YWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuYWRkaXRpb25hbFByb2R1Y3RzIHx8IFtdKS5yZWR1Y2UoKGEsIHApID0+IGEgKyAoTnVtYmVyKHAudG90YWwpIHx8IDApLCAwKTtcbiAgfVxuXG4gIC8vIFByb2R1Y3RzIHRoYXQgaGF2ZSBhIGJhY2tlbmQgZGV0YWlsZWQgZXhwb3J0LiBLZXllZCBieSB0aGUgcHJvZHVjdCBrZXkgdGhlXG4gIC8vIGV4cG9ydCBlbmRwb2ludCB1bmRlcnN0YW5kcy4gQWRkIG1vcmUgYXMgdGhlaXIgcXVlcmllcyBhcmUgd2lyZWQgdXAuXG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwb3J0YWJsZVByb2R1Y3RzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICdleWV0ZXN0JzogJ2V5ZXRlc3QnLFxuICAgICdleWV0ZXN0IChhZGRpdGlvbmFsIHN0b3JhZ2UpJzogJ2V5ZXRlc3RhZGRpdGlvbmFsc3RvcmFnZScsXG4gICAgJ3BsYW5vZ3JhbSc6ICdwbGFub2dyYW0nLFxuICAgICdhaSBtYW5hZ2VyJzogJ2FpbWFuYWdlcicsXG4gICAgJ3Ztcyc6ICd2bXMnLFxuICAgIC8vICdSdW4gQUknIGlzIGRpc3BsYXllZCBhcyAnQUkgaW4gY2hlY2tsaXN0JzsgYm90aCBtYXAgdG8gdGhlIHNhbWUgZXhwb3J0XG4gICAgLy8ga2V5IHNvIHRoZSBkb3dubG9hZCB3b3JrcyB3aGljaGV2ZXIgbGFiZWwgdGhlIEFQSSByZXR1cm5zLlxuICAgICdydW4gYWknOiAncnVuYWknLFxuICAgICdhaSBpbiBjaGVja2xpc3QnOiAncnVuYWknLFxuICAgICdyZW1vdGUgb3B0dW0nOiAncmVtb3Rlb3B0dW0nLFxuICAgIC8vIEZhY3RvcnkgUUMgKEZhY3RvcnlRQ19iaWxsaW5nIExhbWJkYSkuIERheS1zY29wZWQ6IHRoZSBMYW1iZGEgdGFrZXMgb25seVxuICAgIC8vIHJlcG9ydF9kYXRlLCBzbyB0aGlzIGV4cG9ydCBjb3ZlcnMgdGhlIHNuYXBzaG90IGRhdGUgc2hvd24gb24gdGhlIGNhcmRcbiAgICAvLyByYXRoZXIgdGhhbiBtb250aC10by1kYXRlIGxpa2UgUmVtb3RlIE9wdHVtLlxuICAgICdmYWN0b3J5JzogJ2ZhY3RvcnknLFxuICB9O1xuXG4gIGNhbkV4cG9ydEFkZGl0aW9uYWxQcm9kdWN0KHByb2R1Y3ROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmV4cG9ydGFibGVQcm9kdWN0c1socHJvZHVjdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgZXhwb3J0QWRkaXRpb25hbFByb2R1Y3QocHJvZHVjdE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZXhwb3J0YWJsZVByb2R1Y3RzWyhwcm9kdWN0TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gUGFzcyB0aGUgYmlsbGluZ19kZXRhaWxzIHNuYXBzaG90IGRhdGUgKFlZWVktTU0tREQpIGJlaGluZCB0aGUgY2FyZCBjb3VudHNcbiAgICAvLyBzbyBkYXktc2NvcGVkIGV4cG9ydHMgKFZNUyAvIFJ1biBBSSB2aWEgTGFtYmRhIHRvX2RhdGUsIFJlbW90ZSBPcHR1bSkgbWF0Y2hcbiAgICAvLyB3aGF0J3Mgc2hvd24uIEZhbGwgYmFjayB0byB0b2RheSBpZiB0aGUgYmFja2VuZCBkaWRuJ3QgcmV0dXJuIGEgZGF0ZS5cbiAgICBjb25zdCB0b2RheSA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgdG9kYXlTdHIgPSBgJHt0b2RheS5nZXRGdWxsWWVhcigpfS0ke1N0cmluZyh0b2RheS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKX0tJHtTdHJpbmcodG9kYXkuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpfWA7XG4gICAgY29uc3QgZXhwb3J0RGF0ZSA9IHRoaXMuYWRkaXRpb25hbFByb2R1Y3RzRGF0ZSB8fCB0b2RheVN0cjtcbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmFkZGl0aW9uYWxQcm9kdWN0RXhwb3J0KHRoaXMuY2xpZW50SWQsIGtleSwgZXhwb3J0RGF0ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBBcnJheUJ1ZmZlcikgPT4ge1xuICAgICAgICAgIC8vIEEgcmVhbCAueGxzeCBpcyBhIHppcCDigJQgaXRzIGZpcnN0IHR3byBieXRlcyBhcmUgJ1BLJyAoMHg1MCAweDRCKS5cbiAgICAgICAgICAvLyBBIDIwNC9lbXB0eSBvciBKU09OIGVycm9yIGJvZHkgaXMgTk9ULCBhbmQgc2F2aW5nIGl0IHByb2R1Y2VzIGFcbiAgICAgICAgICAvLyBcImNvcnJ1cHRlZFwiIGZpbGUuIEd1YXJkIHNvIHdlIG9ubHkgc2F2ZSBhIGdlbnVpbmUgd29ya2Jvb2suXG4gICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXMgPyBuZXcgVWludDhBcnJheShyZXMpIDogbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICAgICAgICBjb25zdCBpc1hsc3ggPSBieXRlcy5sZW5ndGggPiAxICYmIGJ5dGVzWzBdID09PSAweDUwICYmIGJ5dGVzWzFdID09PSAweDRiO1xuICAgICAgICAgIGlmICghaXNYbHN4KSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ05vIGRhdGEgdG8gZXhwb3J0Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYmlsbGluZ1NlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgYCR7cHJvZHVjdE5hbWV9LSR7dGhpcy5jbGllbnRJZH1gKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0V4cG9ydCBmYWlsZWQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gRmV0Y2ggdGhlIGFkZGl0aW9uYWwtcHJvZHVjdHMgdGFibGUgZm9yIHRoaXMgY2xpZW50LiBCYWNrZW5kIHJldHVybnMgYW5cbiAgLy8gZW1wdHkgbGlzdCBmb3IgYW55IGNsaWVudCB0aGF0IGhhcyBub25lIChzbyB0aGUgdGFibGUganVzdCB3b24ndCByZW5kZXIpLlxuICBsb2FkQWRkaXRpb25hbFByb2R1Y3RzKCkge1xuICAgIC8vIFNlbmQgdGhlIHBhZ2UncyBzZWxlY3RlZCBkYXRlIChpZiBhbnkpIHNvIHRoZSBzZWN0aW9uIHJlZmxlY3RzIGl0LlxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuYWRkaXRpb25hbFByb2R1Y3RzKHRoaXMuY2xpZW50SWQsIHRoaXMuZGF0ZUZpbHRlciB8fCB1bmRlZmluZWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmFkZGl0aW9uYWxQcm9kdWN0cyA9IHJlcz8uZGF0YT8ucHJvZHVjdHMgfHwgW107XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbFByb2R1Y3RzQ3VycmVuY3kgPSByZXM/LmRhdGE/LmN1cnJlbmN5IHx8ICdpbnInO1xuICAgICAgICB0aGlzLmFkZGl0aW9uYWxQcm9kdWN0c0RhdGUgPSByZXM/LmRhdGE/LmJpbGxpbmdEYXRlIHx8ICcnO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmFkZGl0aW9uYWxQcm9kdWN0cyA9IFtdO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbG9hZERhaWx5UHJpY2luZygpIHtcbiAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdG9yZUxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc3RvcmVOb0RhdGEgPSBmYWxzZTtcblxuICAgIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBsaW1pdDogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIG9mZnNldDogdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmxlbixcbiAgICAgIHNvcnRDb2x1bU5hbWU6IHRoaXMuc29ydENvbHVtTmFtZSxcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnksXG4gICAgICBzdGF0dXNGaWx0ZXI6IHRoaXMuc3RhdHVzRmlsdGVyLFxuICAgICAgY291bnRyeUZpbHRlcjogdGhpcy5jb3VudHJ5RmlsdGVyLFxuICAgICAgZGF0ZUZpbHRlcjogdGhpcy5kYXRlRmlsdGVyIHx8ICcnLFxuICAgICAgZXhwb3J0OiBmYWxzZVxuICAgIH07XG5cbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmxhdGVzdERhaWx5UHJpY2luZyhmaWx0ZXJzKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChlKSA9PiB7XG4gICAgICAgIC8vIFRoZSBNb250aGx5IEJpbGxpbmcgU3VtbWFyeSBjb21lcyBmcm9tIGludm9pY2UgaGlzdG9yeSwgbm90IHRoZSBzdG9yZVxuICAgICAgICAvLyByb3dzIOKAlCBhcHBseSBpdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHN0b3JlIGxpc3QgaXMgZW1wdHksIHNvIGl0XG4gICAgICAgIC8vIHN0aWxsIHNob3dzIHdoZW4gdGhlIGZpbHRlcmVkIHN0b3JlIHRhYmxlIGhhcyBubyByb3dzLlxuICAgICAgICB0aGlzLm1vbnRobHlCaWxsaW5nU3VtbWFyeSA9IHRoaXMuZGVjb3JhdGVNb250aGx5U3VtbWFyeShlPy5kYXRhPy5tb250aGx5QmlsbGluZ1N1bW1hcnkgfHwgW10pO1xuICAgICAgICAvLyBOZXdseSBvbmJvYXJkZWQgY291bnQvbGlzdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3RvcmUgdGFibGUnc1xuICAgICAgICAvLyBmaWx0ZXJzLCBzbyBjYXB0dXJlIGl0IHdoZXRoZXIgb3Igbm90IHRoZSBmaWx0ZXJlZCBzdG9yZSBsaXN0IGhhcyByb3dzLlxuICAgICAgICB0aGlzLm5ld2x5T25ib2FyZGVkU3RvcmVzID0gZT8uZGF0YT8ubmV3bHlPbmJvYXJkZWRTdG9yZXMgfHwgMDtcbiAgICAgICAgdGhpcy5uZXdseU9uYm9hcmRlZFN0b3JlTGlzdCA9IGU/LmRhdGE/Lm5ld2x5T25ib2FyZGVkU3RvcmVMaXN0IHx8IFtdO1xuXG4gICAgICAgIC8vIFBvcHVsYXRlIHRoZSBDb3VudHJ5IGZpbHRlciBvcHRpb25zIGZyb20gdGhlIEFQSSdzIGNvdW50cnkgbGlzdCAoYWxsXG4gICAgICAgIC8vIGNsaWVudCBzdG9yZXMpLiBJbmRlcGVuZGVudCBvZiB0aGUgZmlsdGVyZWQgc3RvcmUgY291bnQsIHNvIGJ1aWxkIGl0XG4gICAgICAgIC8vIGV2ZW4gd2hlbiB0aGUgZmlsdGVyZWQgdGFibGUgaXMgZW1wdHkuXG4gICAgICAgIHRoaXMuYnVpbGRDb3VudHJ5RmlsdGVyT3B0aW9ucyhlPy5kYXRhPy5jb3VudHJpZXMgfHwgW10pO1xuXG4gICAgICAgIGlmIChlPy5kYXRhPy5jb3VudCkge1xuICAgICAgICAgIHRoaXMuc3RvcmVMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdG9yZU5vRGF0YSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gZS5kYXRhPy5kYXRhO1xuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGUuZGF0YT8uY291bnQ7XG5cbiAgICAgICAgICB0aGlzLmRhaWx5UHJpY2luZ0luZm8gPSB7XG4gICAgICAgICAgICBicmFuZE5hbWU6IGUuZGF0YT8uYnJhbmROYW1lIHx8ICcnLFxuICAgICAgICAgICAgZGF0ZVN0cmluZzogZS5kYXRhPy5kYXRlU3RyaW5nIHx8ICcnLFxuICAgICAgICAgICAgZGF0ZUlTTzogZS5kYXRhPy5kYXRlSVNPIHx8ICcnLFxuICAgICAgICAgICAgYWN0aXZlU3RvcmVzOiBlLmRhdGE/LmFjdGl2ZVN0b3JlcyB8fCAwLFxuICAgICAgICAgICAgYWNjb3VudFR5cGU6IGUuZGF0YT8uYWNjb3VudFR5cGUgfHwgJycsXG4gICAgICAgICAgICBzdGF0dXM6IGUuZGF0YT8uc3RhdHVzIHx8ICcnLFxuICAgICAgICAgICAgcHJvUmF0ZTogZS5kYXRhPy5wcm9SYXRlIHx8ICcnLFxuICAgICAgICAgICAgY2xpZW50SWQ6IGUuZGF0YT8uY2xpZW50SWQgfHwgJydcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdG9yZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0b3JlTm9EYXRhID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5sZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b3JlTm9EYXRhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcbiAgICAgICAgdGhpcy5tb250aGx5QmlsbGluZ1N1bW1hcnkgPSBbXTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkRhdGVGaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGF0ZUZpbHRlciA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlIHx8ICcnO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICAgIC8vIEFkZGl0aW9uYWwgUHJvZHVjdHMgcmVmbGVjdCB0aGUgc2VsZWN0ZWQgZGF0ZSB0b28uXG4gICAgdGhpcy5sb2FkQWRkaXRpb25hbFByb2R1Y3RzKCk7XG4gIH1cblxuICBjbGVhckRhdGVGaWx0ZXIoKSB7XG4gICAgdGhpcy5kYXRlRmlsdGVyID0gJyc7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gICAgdGhpcy5sb2FkQWRkaXRpb25hbFByb2R1Y3RzKCk7XG4gIH1cblxuICBzZWFyY2hGaWVsZCgpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgfVxuXG4gIC8vIEFkZC9yZWZyZXNoIHRoZSBDb3VudHJ5IGdyb3VwIGluIHRoZSBmaWx0ZXIgZHJvcGRvd24gZnJvbSB0aGUgQVBJJ3MgY291bnRyeVxuICAvLyBsaXN0LCBwcmVzZXJ2aW5nIHRoZSBjdXJyZW50IHNlbGVjdGlvbiAoY2hlY2tlZCkuIGxpYi1maWx0ZXJzIHNuYXBzaG90c1xuICAvLyBkYXRhT2JqZWN0IG9ubHkgaW4gbmdPbkluaXQsIHNvIHdlIGJ1aWxkIHRoZSBmdWxsIHN0b3JlRmlsdGVyT2JqZWN0IGhlcmUgYW5kXG4gIC8vIHRoZW4gZmxpcCBmaWx0ZXJzUmVhZHkgdG8gbW91bnQgPGxpYi1maWx0ZXJzPiBvbmNlIOKAlCBhZnRlciB3aGljaCBpdCBzZWVzIGJvdGhcbiAgLy8gU3RhdHVzIGFuZCBDb3VudHJ5IGdyb3Vwcy5cbiAgcHJpdmF0ZSBidWlsZENvdW50cnlGaWx0ZXJPcHRpb25zKGNvdW50cmllczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBsaXN0ID0gQXJyYXkuaXNBcnJheShjb3VudHJpZXMpID8gY291bnRyaWVzLmZpbHRlcihCb29sZWFuKSA6IFtdO1xuICAgIGlmIChsaXN0Lmxlbmd0aCkge1xuICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBuZXcgU2V0KHRoaXMuY291bnRyeUZpbHRlcik7XG4gICAgICBjb25zdCBpc3N1ZXMgPSBsaXN0Lm1hcCgoYykgPT4gKHsgaWQ6IGMsIHRleHQ6IGMsIGNoZWNrZWQ6IHNlbGVjdGVkLmhhcyhjKSB9KSk7XG4gICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuc3RvcmVGaWx0ZXJPYmplY3QuZmluZCgoZykgPT4gZy5EZXNjcmlwdGlvbiA9PT0gJ0NvdW50cnknKTtcbiAgICAgIGlmIChleGlzdGluZykge1xuICAgICAgICBleGlzdGluZy5Jc3N1ZXMgPSBpc3N1ZXM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnN0b3JlRmlsdGVyT2JqZWN0ID0gWy4uLnRoaXMuc3RvcmVGaWx0ZXJPYmplY3QsIHsgRGVzY3JpcHRpb246ICdDb3VudHJ5JywgdHlwZTogJ211bHRpJywgSXNzdWVzOiBpc3N1ZXMgfV07XG4gICAgICB9XG4gICAgfVxuICAgIC8vIE1vdW50IGxpYi1maWx0ZXJzIG9uY2UgdGhlIGZpcnN0IHJlc3BvbnNlIGlzIGluIChTdGF0dXMgYWxvbmUgaWYgdGhlcmUgYXJlXG4gICAgLy8gbm8gY291bnRyaWVzKSwgc28gaXQgc25hcHNob3RzIHRoZSBmdWxsIGRhdGFPYmplY3Qgb24gaW5pdC5cbiAgICBpZiAoIXRoaXMuZmlsdGVyc1JlYWR5KSB7XG4gICAgICB0aGlzLmZpbHRlcnNSZWFkeSA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgYXBwbHlTdG9yZUZpbHRlcnMoZXZlbnQ6IGFueSkge1xuICAgIC8vIE11bHRpLXNlbGVjdCBTdGF0dXMgLyBDb3VudHJ5IOKAlCBsaWItZmlsdGVycyBlbWl0cyBlYWNoIGdyb3VwJ3Mgc2VsZWN0ZWRcbiAgICAvLyBvcHRpb25zIGFzIGFuIEFSUkFZIHVuZGVyIElzc3VlcyAoQXBwbHkgc2V0cyBJc3N1ZXMgPSBzZWxlY3RlZFZhbHVlc0FycmF5XG4gICAgLy8gW2luZGV4XSkuIENvbGxlY3QgZXZlcnkgc2VsZWN0ZWQgaWQsIHRvbGVyYXRpbmcgYXJyYXkgYW5kIHNpbmdsZS1vYmplY3RcbiAgICAvLyBzaGFwZXMuXG4gICAgY29uc3Qgc3RhdHVzZXM6IHN0cmluZ1tdID0gW107XG4gICAgY29uc3QgY291bnRyaWVzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChldmVudD8ubGVuZ3RoKSB7XG4gICAgICBldmVudC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgaXNzdWVzID0gQXJyYXkuaXNBcnJheShlbGVtZW50Lklzc3VlcykgPyBlbGVtZW50Lklzc3VlcyA6IChlbGVtZW50Lklzc3VlcyA/IFtlbGVtZW50Lklzc3Vlc10gOiBbXSk7XG4gICAgICAgIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSAnU3RhdHVzJykge1xuICAgICAgICAgIGlzc3Vlcy5mb3JFYWNoKChpOiBhbnkpID0+IHsgaWYgKGk/LmlkKSBzdGF0dXNlcy5wdXNoKGkuaWQpOyB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChlbGVtZW50LkRlc2NyaXB0aW9uID09PSAnQ291bnRyeScpIHtcbiAgICAgICAgICBpc3N1ZXMuZm9yRWFjaCgoaTogYW55KSA9PiB7IGlmIChpPy5pZCkgY291bnRyaWVzLnB1c2goaS5pZCk7IH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zdGF0dXNGaWx0ZXIgPSBbLi4ubmV3IFNldChzdGF0dXNlcyldO1xuICAgIHRoaXMuY291bnRyeUZpbHRlciA9IFsuLi5uZXcgU2V0KGNvdW50cmllcyldO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgc29ydERhdGEoY29sdW1uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNvcnRDb2x1bU5hbWUgPSBjb2x1bW47XG4gICAgdGhpcy5zb3J0QnkgKj0gLTE7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhcnNlSW50KHBhZ2VPZmZzZXQpO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHBhcnNlSW50KHBhZ2VTaXplKTtcbiAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgfVxuXG4gIG9uRXhwb3J0KCkge1xuICAgIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5sZW4sXG4gICAgICBzb3J0Q29sdW1OYW1lOiB0aGlzLnNvcnRDb2x1bU5hbWUsXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5LFxuICAgICAgc3RhdHVzRmlsdGVyOiB0aGlzLnN0YXR1c0ZpbHRlcixcbiAgICAgIGRhdGVGaWx0ZXI6IHRoaXMuZGF0ZUZpbHRlciB8fCAnJyxcbiAgICAgIGV4cG9ydDogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmxhdGVzdERhaWx5UHJpY2luZ0V4cG9ydChmaWx0ZXJzKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgLy8gc2F2ZUFzVGVtcGxhdGUgKG5vdCBzYXZlQXNFeGNlbEZpbGUpIOKAlCB0aGUgbGF0dGVyIGFwcGVuZHMgYSBcImxpc3RcIlxuICAgICAgICAvLyBzdWZmaXgsIHdoaWNoIHdvdWxkIGRvd25sb2FkIHRoaXMgYXMgXCJBbm5leHVyZWxpc3QueGxzeFwiLlxuICAgICAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLnNhdmVBc1RlbXBsYXRlKHJlcywgJ0FubmV4dXJlJyk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdTb21ldGhpbmcgd2VudCBXcm9uZy4uJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRFZGl0S2V5KHN0b3JlSWQ6IHN0cmluZywgcHJvZHVjdE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3N0b3JlSWR9XyR7cHJvZHVjdE5hbWV9YDtcbiAgfVxuXG4gIGlzRWRpdGluZyhzdG9yZUlkOiBzdHJpbmcsIHByb2R1Y3ROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nUHJvZHVjdFt0aGlzLmdldEVkaXRLZXkoc3RvcmVJZCwgcHJvZHVjdE5hbWUpXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhcnRFZGl0KHN0b3JlOiBhbnksIHByb2R1Y3Q6IGFueSkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0RWRpdEtleShzdG9yZS5zdG9yZUlkLCBwcm9kdWN0LnByb2R1Y3ROYW1lKTtcbiAgICAvLyBDb2VyY2UgdG8gYSBudW1iZXIgc28gYSAwIC8gbWlzc2luZyB2YWx1ZSBzdGlsbCBlbnRlcnMgZWRpdCBtb2RlIHdpdGggYVxuICAgIC8vIGRlZmluZWQgdmFsdWUgKHVuZGVmaW5lZCB3b3VsZCBtYWtlIGlzRWRpdGluZygpIHRoaW5rIHdlJ3JlIG5vdCBlZGl0aW5nKS5cbiAgICB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV0gPSBOdW1iZXIocHJvZHVjdC53b3JraW5nZGF5cykgfHwgMDtcbiAgfVxuXG4gIGNhbmNlbEVkaXQoc3RvcmU6IGFueSwgcHJvZHVjdDogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIHByb2R1Y3QucHJvZHVjdE5hbWUpO1xuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV07XG4gIH1cblxuICBzYXZlV29ya2luZ0RheXMoc3RvcmU6IGFueSwgcHJvZHVjdDogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIHByb2R1Y3QucHJvZHVjdE5hbWUpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gTnVtYmVyKHRoaXMuZWRpdGluZ1Byb2R1Y3Rba2V5XSkgfHwgMDtcblxuICAgIC8vIFVuY2hhbmdlZCDihpIganVzdCBjbG9zZSB0aGUgZWRpdG9yIChjb21wYXJlIGFzIG51bWJlcnMgc28gMCB2cyBcIjBcIiBldGMuXG4gICAgLy8gZG9uJ3Qgc2xpcCB0aHJvdWdoKS5cbiAgICBpZiAobmV3VmFsdWUgPT09IChOdW1iZXIocHJvZHVjdC53b3JraW5nZGF5cykgfHwgMCkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxuICAgICAgZGF0ZVN0cmluZzogdGhpcy5kYWlseVByaWNpbmdJbmZvLmRhdGVTdHJpbmcsXG4gICAgICBzdG9yZUlkOiBzdG9yZS5zdG9yZUlkLFxuICAgICAgcHJvZHVjdE5hbWU6IHByb2R1Y3QucHJvZHVjdE5hbWUsXG4gICAgICB3b3JraW5nZGF5czogbmV3VmFsdWVcbiAgICB9O1xuXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS51cGRhdGVEYWlseVByaWNpbmdXb3JraW5nRGF5cyhwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgcHJvZHVjdC53b3JraW5nZGF5cyA9IE51bWJlcihuZXdWYWx1ZSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV07XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KCdXb3JraW5nIGRheXMgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gdXBkYXRlIHdvcmtpbmcgZGF5cycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmllbGRFZGl0S2V5KHN0b3JlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtzdG9yZUlkfV8ke2ZpZWxkTmFtZX1gO1xuICB9XG5cbiAgaXNFZGl0aW5nRmllbGQoc3RvcmVJZDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdGaWVsZFt0aGlzLmdldEZpZWxkRWRpdEtleShzdG9yZUlkLCBmaWVsZE5hbWUpXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhcnRGaWVsZEVkaXQoc3RvcmU6IGFueSwgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEZpZWxkRWRpdEtleShzdG9yZS5zdG9yZUlkLCBmaWVsZE5hbWUpO1xuICAgIHRoaXMuZWRpdGluZ0ZpZWxkW2tleV0gPSBzdG9yZVtmaWVsZE5hbWVdIHx8IDA7XG4gIH1cblxuICBjYW5jZWxGaWVsZEVkaXQoc3RvcmU6IGFueSwgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEZpZWxkRWRpdEtleShzdG9yZS5zdG9yZUlkLCBmaWVsZE5hbWUpO1xuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuICB9XG5cbiAgc2F2ZUZpZWxkRWRpdChzdG9yZTogYW55LCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0RmllbGRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIGZpZWxkTmFtZSk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSBzdG9yZVtmaWVsZE5hbWVdKSB7XG4gICAgICBkZWxldGUgdGhpcy5lZGl0aW5nRmllbGRba2V5XTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBkYXRlU3RyaW5nOiB0aGlzLmRhaWx5UHJpY2luZ0luZm8uZGF0ZVN0cmluZyxcbiAgICAgIHN0b3JlSWQ6IHN0b3JlLnN0b3JlSWQsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgIHZhbHVlOiBOdW1iZXIobmV3VmFsdWUpXG4gICAgfTtcblxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UudXBkYXRlRGFpbHlQcmljaW5nU3RvcmVGaWVsZChwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgc3RvcmVbZmllbGROYW1lXSA9IE51bWJlcihuZXdWYWx1ZSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuICAgICAgICBjb25zdCBmaWVsZExhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgdHJhZmZpY0NhbWVyYUNvdW50OiAnVHJhZmZpYyBjYW1lcmEgY291bnQnLCB6b25lQ2FtZXJhQ291bnQ6ICdab25lIGNhbWVyYSBjb3VudCcsIHpvbmVDb3VudDogJ1pvbmUgY291bnQnIH07XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KGAke2ZpZWxkTGFiZWxzW2ZpZWxkTmFtZV0gfHwgZmllbGROYW1lfSB1cGRhdGVkIHN1Y2Nlc3NmdWxseWApO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgdHJhZmZpY0NhbWVyYUNvdW50OiAndHJhZmZpYyBjYW1lcmEgY291bnQnLCB6b25lQ2FtZXJhQ291bnQ6ICd6b25lIGNhbWVyYSBjb3VudCcsIHpvbmVDb3VudDogJ3pvbmUgY291bnQnIH07XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgRmFpbGVkIHRvIHVwZGF0ZSAke2Vycm9yTGFiZWxzW2ZpZWxkTmFtZV0gfHwgZmllbGROYW1lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGVJbnZvaWNlKCkge1xuICAgIGlmICghdGhpcy5jbGllbnRJZCkgcmV0dXJuO1xuICAgIC8vIE9wZW4gdGhlIHBpY2tlciBmaXJzdCDigJQgdGhlIHVzZXIgY2hvb3NlcyB3aGljaCBiaWxsaW5nIGdyb3VwcyB0b1xuICAgIC8vIGdlbmVyYXRlIGZvci4gTW9kYWwgY2xvc2VzIHdpdGggeyBncm91cElkcywgb3V0c3RhbmRpbmdHcm91cElkcyB9XG4gICAgLy8gKG9yIGlzIGRpc21pc3NlZCA9IG5vLW9wKS5cbiAgICBjb25zdCBtb2RhbFJlZiA9IHRoaXMubW9kYWxTZXJ2aWNlLm9wZW4oR2VuZXJhdGVJbnZvaWNlTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIGNlbnRlcmVkOiB0cnVlLCBzaXplOiAnbWQnLCBzY3JvbGxhYmxlOiB0cnVlLFxuICAgIH0pO1xuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNsaWVudElkID0gdGhpcy5jbGllbnRJZDtcbiAgICBtb2RhbFJlZi5yZXN1bHQudGhlbigocmVzdWx0OiB7IGdyb3VwSWRzOiBzdHJpbmdbXTsgb3V0c3RhbmRpbmdHcm91cElkczogc3RyaW5nW10gfSkgPT4ge1xuICAgICAgaWYgKCFyZXN1bHQgfHwgIUFycmF5LmlzQXJyYXkocmVzdWx0Lmdyb3VwSWRzKSB8fCByZXN1bHQuZ3JvdXBJZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICB0aGlzLnJ1bkludm9pY2VHZW5lcmF0aW9uKHJlc3VsdC5ncm91cElkcywgcmVzdWx0Lm91dHN0YW5kaW5nR3JvdXBJZHMgfHwgW10pO1xuICAgIH0pLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIC8vIE9wZW4gYSBwb3B1cCBsaXN0aW5nIHRoZSBuZXdseSBvbmJvYXJkZWQgc3RvcmVzICh3aXRoIGZpcnN0IGZpbGUgZGF0ZSkuXG4gIC8vIFRoZSBsaXN0IGlzIGFscmVhZHkgbG9hZGVkIHdpdGggdGhlIHBhZ2UsIHNvIG5vIGV4dHJhIEFQSSBjYWxsIGlzIG5lZWRlZC5cbiAgdmlld05ld1N0b3JlcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMubmV3bHlPbmJvYXJkZWRTdG9yZUxpc3QubGVuZ3RoKSByZXR1cm47XG4gICAgY29uc3QgbW9kYWxSZWYgPSB0aGlzLm1vZGFsU2VydmljZS5vcGVuKE5ld1N0b3Jlc01vZGFsQ29tcG9uZW50LCB7XG4gICAgICBjZW50ZXJlZDogdHJ1ZSwgc2l6ZTogJ2xnJywgc2Nyb2xsYWJsZTogdHJ1ZSxcbiAgICB9KTtcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5zdG9yZXMgPSB0aGlzLm5ld2x5T25ib2FyZGVkU3RvcmVMaXN0O1xuICAgIC8vIE5lZWRlZCBieSB0aGUgbW9kYWwncyBFeHBvcnQgYnV0dG9uIHNvIHRoZSBzaGVldCBpcyBidWlsdCBmcm9tIHRoZSBzYW1lXG4gICAgLy8gY2xpZW50IGFuZCBkYWlseS1wcmljaW5nIHNuYXBzaG90IHRoZSBwb3B1cCBpcyBzaG93aW5nLlxuICAgIG1vZGFsUmVmLmNvbXBvbmVudEluc3RhbmNlLmNsaWVudElkID0gdGhpcy5jbGllbnRJZDtcbiAgICBtb2RhbFJlZi5jb21wb25lbnRJbnN0YW5jZS5kYXRlRmlsdGVyID0gdGhpcy5kYXRlRmlsdGVyIHx8ICcnO1xuICB9XG5cbiAgcHJpdmF0ZSBydW5JbnZvaWNlR2VuZXJhdGlvbihncm91cElkczogc3RyaW5nW10sIG91dHN0YW5kaW5nR3JvdXBJZHM6IHN0cmluZ1tdID0gW10pOiB2b2lkIHtcbiAgICB0aGlzLmdlbmVyYXRpbmdJbnZvaWNlID0gdHJ1ZTtcblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBhbGxDbGllbnQ6IHRydWUsXG4gICAgICBjbGllbnRMaXN0OiBbdGhpcy5jbGllbnRJZF0sXG4gICAgICBncm91cElkcyxcbiAgICAgIG91dHN0YW5kaW5nR3JvdXBJZHMsXG4gICAgfTtcblxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuY3JlYXRlSW52b2ljZShwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmdlbmVyYXRpbmdJbnZvaWNlID0gZmFsc2U7XG4gICAgICAgIC8vIEEgcGFydGlhbCBiYXRjaCAoc29tZSBncm91cHMgd3JpdHRlbiwgc29tZSByZWZ1c2VkIGJlY2F1c2UgYW4gYWR2YW5jZVxuICAgICAgICAvLyBpbnZvaWNlIGFscmVhZHkgY292ZXJzIHRoaXMgbW9udGgpIGNvbWVzIGJhY2sgYXMgYSBzdWNjZXNzIHdob3NlXG4gICAgICAgIC8vIG1lc3NhZ2UgbmFtZXMgdGhlIHNraXBwZWQgZ3JvdXBzIOKAlCBzaG93IHRoYXQgaW5zdGVhZCBvZiB0aGUgZ2VuZXJpY1xuICAgICAgICAvLyBcImdlbmVyYXRlZCBmb3IgTiBncm91cHNcIiwgd2hpY2ggd291bGQgb3ZlcnN0YXRlIHdoYXQgd2FzIGNyZWF0ZWQuXG4gICAgICAgIGNvbnN0IG1zZyA9IHR5cGVvZiByZXM/Lm1lc3NhZ2UgPT09ICdzdHJpbmcnID8gcmVzLm1lc3NhZ2UgOiAnJztcbiAgICAgICAgaWYgKG1zZy5pbmNsdWRlcygnU2tpcHBlZDonKSkge1xuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChtc2cpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KGBJbnZvaWNlIGdlbmVyYXRlZCBmb3IgJHtncm91cElkcy5sZW5ndGh9IGJpbGxpbmcgZ3JvdXAocylgKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGluZ0ludm9pY2UgPSBmYWxzZTtcbiAgICAgICAgLy8gU3VyZmFjZSB0aGUgYmFja2VuZCdzIGV4YWN0IHJlYXNvbiAoZS5nLiBcIkFkdmFuY2UgaW52b2ljZSBUSU5WLeKApiBhbHJlYWR5XG4gICAgICAgIC8vIGNvdmVycyBBdWcgMjAyNiDigKYgQ2FuY2VsIGl0IGJlZm9yZSBnZW5lcmF0aW5nIGEgbmV3IGFkdmFuY2UgaW52b2ljZS5cIilcbiAgICAgICAgLy8gaW5zdGVhZCBvZiBhIGdlbmVyaWMgZmFpbHVyZS5cbiAgICAgICAgLy8gc2VuZEVycm9yKCkgcHV0cyB0aGUgdGV4dCB1bmRlciBgZXJyb3JgOyBgbWVzc2FnZWAgaXMga2VwdCBhcyBhIGZhbGxiYWNrLlxuICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoZXJyPy5lcnJvcj8uZXJyb3IgfHwgZXJyPy5lcnJvcj8ubWVzc2FnZSB8fCAnRmFpbGVkIHRvIGdlbmVyYXRlIGludm9pY2UnKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBmb3JtYXRQcm9kdWN0TmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGlmICghbmFtZSkgcmV0dXJuICcnO1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2UoLyhbYS16XSkoW0EtWl0pL2csICckMSAkMicpXG4gICAgICAucmVwbGFjZSgvXi4vLCAoc3RyKSA9PiBzdHIudG9VcHBlckNhc2UoKSk7XG4gIH1cblxuICAvLyBUYWtlIHRoZSByYXcgYWdncmVnYXRpb24gcm93cyAoYWxyZWFkeSBzb3J0ZWQgbmV3ZXN0LWZpcnN0IGJ5IHRoZSBBUEkpIGFuZFxuICAvLyBhdHRhY2ggKGEpIGEgaHVtYW4tcmVhZGFibGUgbW9udGhMYWJlbCwgKGIpIHRhZyBmb3IgdGhlIGxhdGVzdCB0d28gcm93c1xuICAvLyAoXCJDdXJyZW50XCIgLyBcIkxhc3QgZ2VuZXJhdGVkXCIpIGFuZCAoYykgZGVsdGFzIHZzIHRoZSBpbW1lZGlhdGVseSBvbGRlclxuICAvLyBDdXJyZW5jeSBzeW1ib2wgZm9yIGEgc3RvcmUncyBpbnZvaWNlIGFtb3VudCAobWF0Y2hlcyB0aGUgYmFja2VuZCdzXG4gIC8vIGJhc2VwcmljaW5nIGN1cnJlbmN5OyBBRUQgcmVuZGVyZWQgYXMgdGV4dCkuXG4gIHN0b3JlQ3VycmVuY3lTeW1ib2woc3RvcmU6IGFueSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3ltYm9sczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgaW5yOiAn4oK5JywgZG9sbGFyOiAnJCcsIHNpbmdhcG9yZWRvbGxhcjogJ1MkJywgZXVybzogJ+KCrCcsIGFlZDogJ0FFRCAnIH07XG4gICAgcmV0dXJuIHN5bWJvbHNbKHN0b3JlPy5pbnZvaWNlQ3VycmVuY3kgfHwgJ2lucicpLnRvTG93ZXJDYXNlKCldIHx8ICfigrknO1xuICB9XG5cbiAgLy8gbW9udGggc28gdGhlIHRlbXBsYXRlIGNhbiByZW5kZXIgdGhlIOKWsi/ilrwv4pasIHRyZW5kIGluZGljYXRvcnMuXG4gIHByaXZhdGUgZGVjb3JhdGVNb250aGx5U3VtbWFyeShyb3dzOiBhbnlbXSk6IGFueVtdIHtcbiAgICBpZiAoIUFycmF5LmlzQXJyYXkocm93cykgfHwgcm93cy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcbiAgICBjb25zdCBtb250aE5hbWVzID0gWydKYW4nLCdGZWInLCdNYXInLCdBcHInLCdNYXknLCdKdW4nLCdKdWwnLCdBdWcnLCdTZXAnLCdPY3QnLCdOb3YnLCdEZWMnXTtcbiAgICBjb25zdCBzeW1ib2xzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBpbnI6ICfigrknLCBkb2xsYXI6ICckJywgc2luZ2Fwb3JlZG9sbGFyOiAnUyQnLCBldXJvOiAn4oKsJyB9O1xuICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCk7XG4gICAgY29uc3QgaXNDdXJyZW50ID0gKHI6IGFueSkgPT4gci55ZWFyID09PSBub3cuZ2V0RnVsbFllYXIoKSAmJiByLm1vbnRoID09PSAobm93LmdldE1vbnRoKCkgKyAxKTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHIsIGkpID0+IHtcbiAgICAgIGNvbnN0IG5leHQgPSByb3dzW2kgKyAxXTtcbiAgICAgIGNvbnN0IHN0b3Jlc0RlbHRhID0gbmV4dCA/IChyLnN0b3Jlc0JpbGxlZCB8fCAwKSAtIChuZXh0LnN0b3Jlc0JpbGxlZCB8fCAwKSA6IG51bGw7XG4gICAgICBjb25zdCBhbW91bnREZWx0YSA9IG5leHQgPyAoci5pbnZvaWNlQW1vdW50IHx8IDApIC0gKG5leHQuaW52b2ljZUFtb3VudCB8fCAwKSA6IG51bGw7XG4gICAgICBsZXQgdGFnID0gJyc7XG4gICAgICBpZiAoaXNDdXJyZW50KHIpKSB0YWcgPSAnQ3VycmVudCc7XG4gICAgICBlbHNlIGlmIChpID09PSAwKSB0YWcgPSAnTGFzdCBnZW5lcmF0ZWQnO1xuICAgICAgZWxzZSBpZiAoaSA9PT0gMSAmJiBpc0N1cnJlbnQocm93c1swXSkpIHRhZyA9ICdMYXN0IGdlbmVyYXRlZCc7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5yLFxuICAgICAgICBtb250aExhYmVsOiBgJHttb250aE5hbWVzWyhyLm1vbnRoIHx8IDEpIC0gMV19ICR7ci55ZWFyfWAsXG4gICAgICAgIHRhZyxcbiAgICAgICAgc3RvcmVzRGVsdGEsXG4gICAgICAgIGFtb3VudERlbHRhLFxuICAgICAgICBjdXJyZW5jeVN5bWJvbDogc3ltYm9sc1soci5jdXJyZW5jeSB8fCAnaW5yJykudG9Mb3dlckNhc2UoKV0gfHwgJycsXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlTW9udGhseVN1bW1hcnlIaXN0b3J5KCk6IHZvaWQge1xuICAgIHRoaXMubW9udGhseVN1bW1hcnlFeHBhbmRlZCA9ICF0aGlzLm1vbnRobHlTdW1tYXJ5RXhwYW5kZWQ7XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwiaW52b2ljZXMtc2VjdGlvblwiPlxuICAgIDwhLS0gSGVhZGVyIFJvdyAtLT5cbiAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlciBtYi0zXCI+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMjBcIiBoZWlnaHQ9XCIyMFwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuNjY2NjcgMTBIMTMuMzMzM002LjY2NjY3IDYuNjY2NjdIMTMuMzMzM002LjY2NjY3IDEzLjMzMzNIMTBNNSAxNy41SDE1QzE1LjkyMDUgMTcuNSAxNi42NjY3IDE2Ljc1MzggMTYuNjY2NyAxNS44MzMzVjQuMTY2NjdDMTYuNjY2NyAzLjI0NjE5IDE1LjkyMDUgMi41IDE1IDIuNUg1QzQuMDc5NTMgMi41IDMuMzMzMzMgMy4yNDYxOSAzLjMzMzMzIDQuMTY2NjdWMTUuODMzM0MzLjMzMzMzIDE2Ljc1MzggNC4wNzk1MyAxNy41IDUgMTcuNVpcIiBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJpbGxpbmdoZWFkZXJcIj5CaWxsaW5nIEJyZWFrZG93bjwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJhZGdlIGJnLWxpZ2h0IHRleHQtZGFyayBtcy0xXCI+e3sgdG90YWxJdGVtcyB9fSBzdG9yZXM8L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LW11dGVkIHNtYWxsIG10LTFcIiAqbmdJZj1cImRhaWx5UHJpY2luZ0luZm8/LmRhdGVTdHJpbmdcIj5cbiAgICAgICAgICAgICAgICBEYXRlOiA8c3Ryb25nPnt7IGRhaWx5UHJpY2luZ0luZm8/LmRhdGVTdHJpbmcgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTJcIj58PC9zcGFuPlxuICAgICAgICAgICAgICAgIEFjdGl2ZSBTdG9yZXM6IDxzdHJvbmc+e3sgZGFpbHlQcmljaW5nSW5mbz8uYWN0aXZlU3RvcmVzIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJteC0yXCI+fDwvc3Bhbj5cbiAgICAgICAgICAgICAgICBBY2NvdW50IFR5cGU6IDxzdHJvbmc+e3sgZGFpbHlQcmljaW5nSW5mbz8uYWNjb3VudFR5cGUgfX08L3N0cm9uZz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTNcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJkYXRlXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGRhdGUtZmlsdGVyXCJcbiAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImRhdGVGaWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm9uRGF0ZUZpbHRlcigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJGaWx0ZXIgYnkgZGF0ZVwiPlxuICAgICAgICAgICAgICAgIDxidXR0b24gKm5nSWY9XCJkYXRlRmlsdGVyXCIgdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1zZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY2xlYXJEYXRlRmlsdGVyKClcIiB0aXRsZT1cIkNsZWFyIGRhdGUgZmlsdGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMC41IDMuNUwzLjUgMTAuNU0zLjUgMy41TDEwLjUgMTAuNVwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiZ2VuZXJhdGVJbnZvaWNlKClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1wcmltYXJ5IGFsaWduLWl0ZW1zLWVuZCB0ZXh0LW5vd3JhcCBpbnZoZWFkZXJcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3RvcmVMaXN0Lmxlbmd0aCB8fCBnZW5lcmF0aW5nSW52b2ljZVwiPlxuICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMjAgMjBcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTYuNjY2NjcgMTBIMTMuMzMzM002LjY2NjY3IDYuNjY2NjdIMTMuMzMzM002LjY2NjY3IDEzLjMzMzNIMTBNNSAxNy41SDE1QzE1LjkyMDUgMTcuNSAxNi42NjY3IDE2Ljc1MzggMTYuNjY2NyAxNS44MzMzVjQuMTY2NjdDMTYuNjY2NyAzLjI0NjE5IDE1LjkyMDUgMi41IDE1IDIuNUg1QzQuMDc5NTMgMi41IDMuMzMzMzMgMy4yNDYxOSAzLjMzMzMzIDQuMTY2NjdWMTUuODMzM0MzLjMzMzMzIDE2Ljc1MzggNC4wNzk1MyAxNy41IDUgMTcuNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc3Ryb2tlPVwiI2ZmZlwiIHN0cm9rZS13aWR0aD1cIjEuNjdcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiPnt7IGdlbmVyYXRpbmdJbnZvaWNlID8gJ0dlbmVyYXRpbmcuLi4nIDogJ0dlbmVyYXRlIEludm9pY2UnIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBOZXdseSBPbmJvYXJkZWQgU3RvcmVzIOKAlCBzdG9yZXMgd2hvc2UgZmlyc3QgZmlsZSBkYXRlIGlzIGluIHRoZSBjdXJyZW50IG1vbnRoIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggbWItNFwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwibmV3bHktb25ib2FyZGVkLWNhcmRcIlxuICAgICAgICAgICAgc3R5bGU9XCJkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNHB4O2JvcmRlcjoxcHggc29saWQgI0U0RTdFQztib3JkZXItcmFkaXVzOjEwcHg7cGFkZGluZzoxNHB4IDE4cHg7YmFja2dyb3VuZDojZmZmO21pbi13aWR0aDoyNDBweDtcIj5cbiAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJ3aWR0aDo0MHB4O2hlaWdodDo0MHB4O2JvcmRlci1yYWRpdXM6OHB4O2JhY2tncm91bmQ6I0VBRjhGRjtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7XCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMlwiIGhlaWdodD1cIjIyXCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMyAyMVY4bDktNSA5IDV2MTNNMyAyMWgxOE0zIDIxSDFtMjAgMGgyTTkgMjF2LTZoNnY2TTEyIDcuNWguMDFcIiBzdHJva2U9XCIjMDBBM0ZGXCIgc3Ryb2tlLXdpZHRoPVwiMS42XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MjRweDtmb250LXdlaWdodDo3MDA7Y29sb3I6IzEwMTgyODtsaW5lLWhlaWdodDoxLjE7XCI+e3sgbmV3bHlPbmJvYXJkZWRTdG9yZXMgfCBudW1iZXI6JzEuMC0wJzonZW4tSU4nIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBzdHlsZT1cImZvbnQtc2l6ZToxM3B4O2NvbG9yOiM2NjcwODU7XCI+TmV3bHkgT25ib2FyZGVkIFN0b3JlczwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJmb250LXNpemU6MTFweDtjb2xvcjojOThBMkIzO1wiPkZpcnN0IGZpbGUgaW4gY3VycmVudCBtb250aDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0biBidG4tc20gYnRuLW91dGxpbmUtcHJpbWFyeSBtcy0zXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW5ld2x5T25ib2FyZGVkU3RvcmVzXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidmlld05ld1N0b3JlcygpXCI+VmlldyBTdG9yZXM8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIE1vbnRobHkgQmlsbGluZyBTdW1tYXJ5IOKAlCBpbnZvaWNlIHRyZW5kIChuZXdlc3QgZmlyc3QsIHdpdGggZGVsdGFzIHZzIHByaW9yIG1vbnRoKSAtLT5cbiAgICA8ZGl2IGNsYXNzPVwibW9udGhseS1iaWxsaW5nLXN1bW1hcnlcIiAqbmdJZj1cIm1vbnRobHlCaWxsaW5nU3VtbWFyeT8ubGVuZ3RoXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJtc3VtLWhlYWRlclwiPk1vbnRobHkgQmlsbGluZyBTdW1tYXJ5PC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgICAgICA8dGFibGUgY2xhc3M9XCJ0YWJsZSBtYi0wXCI+XG4gICAgICAgICAgICAgICAgPHRoZWFkPlxuICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGg+TU9OVEg8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPk5VTUJFUiBPRiBTVE9SRVMgQklMTEVEPC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5JTlZPSUNFIEFNT1VOVDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IHJvdyBvZiBtb250aGx5QmlsbGluZ1N1bW1hcnk7IGxldCBpID0gaW5kZXhcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ciAqbmdJZj1cImkgPCAyIHx8IG1vbnRobHlTdW1tYXJ5RXhwYW5kZWRcIiBbY2xhc3MuY3Vycl09XCJyb3cudGFnID09PSAnQ3VycmVudCdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcm93Lm1vbnRoTGFiZWwgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJyb3cudGFnID09PSAnQ3VycmVudCdcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgbXMtMlwiPkN1cnJlbnQ8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93LnRhZyA9PT0gJ0xhc3QgZ2VuZXJhdGVkJ1wiIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1kYXJrIG1zLTJcIj5MYXN0IGdlbmVyYXRlZDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyByb3cuc3RvcmVzQmlsbGVkIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwicm93LnN0b3Jlc0RlbHRhICE9PSBudWxsXCIgY2xhc3M9XCJpbmQgbXMtMlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MudXBdPVwicm93LnN0b3Jlc0RlbHRhID4gMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZG93bl09XCJyb3cuc3RvcmVzRGVsdGEgPCAwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy5mbGF0XT1cInJvdy5zdG9yZXNEZWx0YSA9PT0gMFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciBbbmdTd2l0Y2hdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nU3dpdGNoQ2FzZT1cInJvdy5zdG9yZXNEZWx0YSA+IDBcIj7ilrIge3sgcm93LnN0b3Jlc0RlbHRhIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hDYXNlPVwicm93LnN0b3Jlc0RlbHRhIDwgMFwiPuKWvCB7eyAtcm93LnN0b3Jlc0RlbHRhIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PuKWrCAwPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHJvdy5jdXJyZW5jeVN5bWJvbCB9fXt7IHJvdy5pbnZvaWNlQW1vdW50IHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cInJvdy5hbW91bnREZWx0YSAhPT0gbnVsbFwiIGNsYXNzPVwiaW5kIG1zLTJcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLnVwXT1cInJvdy5hbW91bnREZWx0YSA+IDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRvd25dPVwicm93LmFtb3VudERlbHRhIDwgMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuZmxhdF09XCJyb3cuYW1vdW50RGVsdGEgPT09IDBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgW25nU3dpdGNoXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJyb3cuYW1vdW50RGVsdGEgPiAwXCI+4payIHt7IHJvdy5jdXJyZW5jeVN5bWJvbCB9fXt7IHJvdy5hbW91bnREZWx0YSB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1N3aXRjaENhc2U9XCJyb3cuYW1vdW50RGVsdGEgPCAwXCI+4pa8IHt7IHJvdy5jdXJyZW5jeVN5bWJvbCB9fXt7IC1yb3cuYW1vdW50RGVsdGEgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdTd2l0Y2hEZWZhdWx0PuKWrCAwPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgKm5nSWY9XCJtb250aGx5QmlsbGluZ1N1bW1hcnkubGVuZ3RoID4gMlwiIGNsYXNzPVwibXN1bS10b2dnbGVcIiAoY2xpY2spPVwidG9nZ2xlTW9udGhseVN1bW1hcnlIaXN0b3J5KClcIj5cbiAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbW9udGhseVN1bW1hcnlFeHBhbmRlZFwiPuKWviBTaG93IG9sZGVyIG1vbnRocyAoe3sgbW9udGhseUJpbGxpbmdTdW1tYXJ5Lmxlbmd0aCAtIDIgfX0pPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9udGhseVN1bW1hcnlFeHBhbmRlZFwiPuKWtCBIaWRlIG9sZGVyIG1vbnRoczwvbmctY29udGFpbmVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gQWRkaXRpb25hbCBQcm9kdWN0cyDigJQgbm9uLXN0YW5kYXJkIHByb2R1Y3RzIGJpbGxlZCBmb3IgdGhpcyBjbGllbnQgb25seVxuICAgICAgICAgKGUuZy4gY2xpZW50SWQgMTE6IEV5ZXRlc3QsIFBsYW5vZ3JhbSkuIEhpZGRlbiB3aGVuIHRoZSBjbGllbnQgaGFzIG5vbmUuIC0tPlxuICAgIDxkaXYgY2xhc3M9XCJtb250aGx5LWJpbGxpbmctc3VtbWFyeVwiICpuZ0lmPVwiYWRkaXRpb25hbFByb2R1Y3RzPy5sZW5ndGhcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cIm1zdW0taGVhZGVyXCI+QWRkaXRpb25hbCBQcm9kdWN0czwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtcmVzcG9uc2l2ZVwiPlxuICAgICAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgbWItMFwiPlxuICAgICAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlByb2R1Y3QgTmFtZTwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWVuZFwiPlF1YW50aXR5PC90aD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtZW5kXCI+UHJpY2U8L3RoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1lbmRcIj5Ub3RhbDwvdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPkFjdGlvbjwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90aGVhZD5cbiAgICAgICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgcCBvZiBhZGRpdGlvbmFsUHJvZHVjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyBwLnByb2R1Y3ROYW1lIH19PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz1cInRleHQtZW5kXCI+e3sgcC5xdWFudGl0eSB8IG51bWJlcjonMS4wLTAnOidlbi1JTicgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1lbmRcIj57eyAoYWRkaXRpb25hbFByb2R1Y3RzQ3VycmVuY3kgPT09ICdkb2xsYXInID8gJyQnIDogJ+KCuScpIH19e3sgcC5wcmljZSB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1lbmRcIj48c3Ryb25nPnt7IChhZGRpdGlvbmFsUHJvZHVjdHNDdXJyZW5jeSA9PT0gJ2RvbGxhcicgPyAnJCcgOiAn4oK5JykgfX17eyBwLnRvdGFsIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fTwvc3Ryb25nPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWNlbnRlclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIGNsYXNzPVwiYnRuIGJ0bi1zbSBidG4tb3V0bGluZS1wcmltYXJ5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJjYW5FeHBvcnRBZGRpdGlvbmFsUHJvZHVjdChwLnByb2R1Y3ROYW1lKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJleHBvcnRBZGRpdGlvbmFsUHJvZHVjdChwLnByb2R1Y3ROYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEb3dubG9hZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNvbHNwYW49XCIzXCIgY2xhc3M9XCJ0ZXh0LWVuZFwiPjxzdHJvbmc+R3JhbmQgVG90YWw8L3N0cm9uZz48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1lbmRcIj48c3Ryb25nPnt7IChhZGRpdGlvbmFsUHJvZHVjdHNDdXJyZW5jeSA9PT0gJ2RvbGxhcicgPyAnJCcgOiAn4oK5JykgfX17eyBhZGRpdGlvbmFsUHJvZHVjdHNUb3RhbCB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3N0cm9uZz48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgICAgIDwvdGFibGU+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgPCEtLSBTZWFyY2ggKyBGaWx0ZXIgUm93IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLWhlYWRlciBwYXltZW50aGlzdG9yeSBib3JkZXItMCBweC0wXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGZsZXgtd3JhcCBnYXAtMiB3LTEwMFwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIHBvc2l0aW9uLXJlbGF0aXZlIG15LTFcIj5cbiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzdmctaWNvbiBpbnZvaWNlc2VhcmNoIHN2Zy1pY29uLTEgcG9zaXRpb24tYWJzb2x1dGUgbXQtNiBtcy0zXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cmVjdCBvcGFjaXR5PVwiMC41XCIgeD1cIjE3LjAzNjVcIiB5PVwiMTUuMTIyM1wiIHdpZHRoPVwiOC4xNTU0NlwiIGhlaWdodD1cIjJcIiByeD1cIjFcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm09XCJyb3RhdGUoNDUgMTcuMDM2NSAxNS4xMjIzKVwiIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3JlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGhcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZD1cIk0xMSAxOUM2LjU1NTU2IDE5IDMgMTUuNDQ0NCAzIDExQzMgNi41NTU1NiA2LjU1NTU2IDMgMTEgM0MxNS40NDQ0IDMgMTkgNi41NTU1NiAxOSAxMUMxOSAxNS40NDQ0IDE1LjQ0NDQgMTkgMTEgMTlaTTExIDVDNy41MzMzMyA1IDUgNy41MzMzMyA1IDExQzUgMTQuNDY2NyA3LjUzMzMzIDE3IDExIDE3QzE0LjQ2NjcgMTcgMTcgMTQuNDY2NyAxNyAxMUMxNyA3LjUzMzMzIDE0LjQ2NjcgNSAxMSA1WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbGw9XCJjdXJyZW50Q29sb3JcIj48L3BhdGg+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgWyhuZ01vZGVsKV09XCJsZW5cIiB0eXBlPVwidGV4dFwiIGNsYXNzPVwiZm9ybS1jb250cm9sIHBzLTE0IGludm9pY2VzZWFyY2hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTdG9yZSBuYW1lIG9yIElELi4uXCIgYXV0b2NvbXBsZXRlPVwib2ZmXCIgKGNoYW5nZSk9XCJzZWFyY2hGaWVsZCgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJzZWFyY2hEaXNhYmxlZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgIDxsaWItZmlsdGVycyAqbmdJZj1cImZpbHRlcnNSZWFkeVwiIFtkYXRhT2JqZWN0XT1cInN0b3JlRmlsdGVyT2JqZWN0XCIgKGFwcGxpZWRGaWx0ZXJzKT1cImFwcGx5U3RvcmVGaWx0ZXJzKCRldmVudClcIj48L2xpYi1maWx0ZXJzPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkV4cG9ydCgpXCJcbiAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJidG4tb3V0bGluZSBidG4gYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIGludmhlYWRlclwiXG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhc3RvcmVMaXN0Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTcuNSAxMi41VjE1LjgzMzNDMTcuNSAxNi4yNzU0IDE3LjMyNDQgMTYuNjk5MyAxNy4wMTE4IDE3LjAxMThDMTYuNjk5MyAxNy4zMjQ0IDE2LjI3NTQgMTcuNSAxNS44MzMzIDE3LjVINC4xNjY2N0MzLjcyNDY0IDE3LjUgMy4zMDA3MiAxNy4zMjQ0IDIuOTg4MTYgMTcuMDExOEMyLjY3NTU5IDE2LjY5OTMgMi41IDE2LjI3NTQgMi41IDE1LjgzMzNWMTIuNU0xNC4xNjY3IDYuNjY2NjdMMTAgMi41TTEwIDIuNUw1LjgzMzMzIDYuNjY2NjdNMTAgMi41VjEyLjVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXMtMVwiPkV4cG9ydDwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDwhLS0gTG9hZGluZyBTaGltbWVyIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdG9yZUxvYWRpbmdcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInJvdyBsb2FkZXIgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2hpbW1lclwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSB0aXRsZVwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgbGlua1wiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgZGVzY3JpcHRpb25cIj48L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIE5vIERhdGEgLS0+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInN0b3JlTm9EYXRhXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb2wtbGctMTIgbWItM1wiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHkgZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXIgYWxpZ24taXRlbXMtY2VudGVyIGZsZXgtY29sdW1uXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbWcgY2xhc3M9XCJpbWctc3JjIHctMjVcIiBzcmM9XCIuL2Fzc2V0cy90YW5nby9JY29ucy9Ob2RhdGEuc3ZnXCIgYWx0PVwiXCI+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8IS0tIFN0b3JlcyBUYWJsZSAtLT5cbiAgICA8ZGl2ICpuZ0lmPVwiIXN0b3JlTG9hZGluZyAmJiAhc3RvcmVOb0RhdGFcIiBjbGFzcz1cInRhYmxlLXJlc3BvbnNpdmVcIj5cbiAgICAgICAgPHRhYmxlIGNsYXNzPVwidGFibGUgYWNjb3JkaW9uIHRhYmxlIGJvdHRvbS1ib3JkZXIgdGV4dC1ub3dyYXBcIj5cbiAgICAgICAgICAgIDx0aGVhZD5cbiAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdzdG9yZU5hbWUnKVwiPlNUT1JFIE5BTUVcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3N0b3JlTmFtZScgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZU5hbWUnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPlNUT1JFIElEPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPkNPVU5UUlk8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+UFJPRFVDVFM8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgndHJhZmZpY0NhbWVyYUNvdW50JylcIj5UUkFGRklDIENBTUVSQVNcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3RyYWZmaWNDYW1lcmFDb3VudCcgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICd0cmFmZmljQ2FtZXJhQ291bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3pvbmVDYW1lcmFDb3VudCcpXCI+Wk9ORSBDQU1FUkFTXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICd6b25lQ2FtZXJhQ291bnQnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnem9uZUNhbWVyYUNvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCd6b25lQ291bnQnKVwiPlpPTkVTXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICd6b25lQ291bnQnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnem9uZUNvdW50JyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5GSVJTVCBGSUxFIERBVEU8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnZGF5c0RpZmZlcmVuY2UnKVwiPldPUktJTkcgREFZU1xuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAnZGF5c0RpZmZlcmVuY2UnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnZGF5c0RpZmZlcmVuY2UnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPlNUQVRVUzwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cInRleHQtZW5kXCI+SU5WT0lDRSBBTU9VTlQ8L3RoPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3RoZWFkPlxuICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgIDx0ciAqbmdGb3I9XCJsZXQgc3RvcmUgb2Ygc3RvcmVMaXN0XCI+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSB0YWJsZS10aXRsZS1wcmltYXJ5XCI+e3sgc3RvcmU/LnN0b3JlTmFtZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBzdG9yZT8uc3RvcmVJZCB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBzdG9yZT8uY291bnRyeSB8fCAn4oCUJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBzdG9yZT8ucHJvZHVjdHNcIiBjbGFzcz1cImJhZGdlIGJhZGdlLWxpZ2h0LXByaW1hcnkgbWUtMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBmb3JtYXRQcm9kdWN0TmFtZShwcm9kdWN0Py5wcm9kdWN0TmFtZSkgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmdGaWVsZChzdG9yZT8uc3RvcmVJZCwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHN0b3JlPy50cmFmZmljQ2FtZXJhQ291bnQgfHwgMCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0LWljb25cIiAoY2xpY2spPVwic3RhcnRGaWVsZEVkaXQoc3RvcmUsICd0cmFmZmljQ2FtZXJhQ291bnQnKVwiIHRpdGxlPVwiRWRpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTE2NjcgMS43NTAwNEMxMC4wNjk4IDEuNTk2ODMgMTAuMjUxOCAxLjQ3NTMzIDEwLjQ1MTkgMS4zOTIzOEMxMC42NTIyIDEuMzA5NDYgMTAuODY2NyAxLjI2Njc5IDExLjA4MzMgMS4yNjY3OUMxMS4zIDEuMjY2NzkgMTEuNTE0NSAxLjMwOTQ2IDExLjcxNDggMS4zOTIzOEMxMS45MTQ5IDEuNDc1MzMgMTIuMDk2OSAxLjU5NjgzIDEyLjI1IDEuNzUwMDRDMTIuNDAzMiAxLjkwMzI1IDEyLjUyNDcgMi4wODUyOSAxMi42MDc3IDIuMjg1NDZDMTIuNjkwNiAyLjQ4NTY3IDEyLjczMzMgMi43MDAxMyAxMi43MzMzIDIuOTE2NzFDMTIuNzMzMyAzLjEzMzI5IDEyLjY5MDYgMy4zNDc3NSAxMi42MDc3IDMuNTQ3OTZDMTIuNTI0NyAzLjc0ODEzIDEyLjQwMzIgMy45MzAxNyAxMi4yNSA0LjA4MzM4TDQuMzc1IDExLjk1ODRMMS4xNjY2NyAxMi44MzM0TDIuMDQxNjcgOS42MjUwNEw5LjkxNjY3IDEuNzUwMDRaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nRmllbGQoc3RvcmU/LnN0b3JlSWQsICd0cmFmZmljQ2FtZXJhQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZWRpdC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5nRmllbGRbZ2V0RmllbGRFZGl0S2V5KHN0b3JlPy5zdG9yZUlkLCAndHJhZmZpY0NhbWVyYUNvdW50JyldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlRmllbGRFZGl0KHN0b3JlLCAndHJhZmZpY0NhbWVyYUNvdW50JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjYW5jZWxGaWVsZEVkaXQoc3RvcmUsICd0cmFmZmljQ2FtZXJhQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LXN1Y2Nlc3NcIiAoY2xpY2spPVwic2F2ZUZpZWxkRWRpdChzdG9yZSwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCIgdGl0bGU9XCJTYXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMuMzMzNCA0TDYuMDAwMDggMTEuMzMzM0wyLjY2Njc1IDhcIiBzdHJva2U9XCIjMTJCNzZBXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJjYW5jZWxGaWVsZEVkaXQoc3RvcmUsICd0cmFmZmljQ2FtZXJhQ291bnQnKVwiIHRpdGxlPVwiQ2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNEw0IDEyTTQgNEwxMiAxMlwiIHN0cm9rZT1cIiNGMDQ0MzhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0aW5nRmllbGQoc3RvcmU/LnN0b3JlSWQsICd6b25lQ2FtZXJhQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzdG9yZT8uem9uZUNhbWVyYUNvdW50IHx8IDAgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZWRpdC1pY29uXCIgKGNsaWNrKT1cInN0YXJ0RmllbGRFZGl0KHN0b3JlLCAnem9uZUNhbWVyYUNvdW50JylcIiB0aXRsZT1cIkVkaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjkxNjY3IDEuNzUwMDRDMTAuMDY5OCAxLjU5NjgzIDEwLjI1MTggMS40NzUzMyAxMC40NTE5IDEuMzkyMzhDMTAuNjUyMiAxLjMwOTQ2IDEwLjg2NjcgMS4yNjY3OSAxMS4wODMzIDEuMjY2NzlDMTEuMyAxLjI2Njc5IDExLjUxNDUgMS4zMDk0NiAxMS43MTQ4IDEuMzkyMzhDMTEuOTE0OSAxLjQ3NTMzIDEyLjA5NjkgMS41OTY4MyAxMi4yNSAxLjc1MDA0QzEyLjQwMzIgMS45MDMyNSAxMi41MjQ3IDIuMDg1MjkgMTIuNjA3NyAyLjI4NTQ2QzEyLjY5MDYgMi40ODU2NyAxMi43MzMzIDIuNzAwMTMgMTIuNzMzMyAyLjkxNjcxQzEyLjczMzMgMy4xMzMyOSAxMi42OTA2IDMuMzQ3NzUgMTIuNjA3NyAzLjU0Nzk2QzEyLjUyNDcgMy43NDgxMyAxMi40MDMyIDMuOTMwMTcgMTIuMjUgNC4wODMzOEw0LjM3NSAxMS45NTg0TDEuMTY2NjcgMTIuODMzNEwyLjA0MTY3IDkuNjI1MDRMOS45MTY2NyAxLjc1MDA0WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjE2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZ0ZpZWxkKHN0b3JlPy5zdG9yZUlkLCAnem9uZUNhbWVyYUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGVkaXQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGluZ0ZpZWxkW2dldEZpZWxkRWRpdEtleShzdG9yZT8uc3RvcmVJZCwgJ3pvbmVDYW1lcmFDb3VudCcpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZUZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDYW1lcmFDb3VudCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiY2FuY2VsRmllbGRFZGl0KHN0b3JlLCAnem9uZUNhbWVyYUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1zdWNjZXNzXCIgKGNsaWNrKT1cInNhdmVGaWVsZEVkaXQoc3RvcmUsICd6b25lQ2FtZXJhQ291bnQnKVwiIHRpdGxlPVwiU2F2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzLjMzMzQgNEw2LjAwMDA4IDExLjMzMzNMMi42NjY3NSA4XCIgc3Ryb2tlPVwiIzEyQjc2QVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwiY2FuY2VsRmllbGRFZGl0KHN0b3JlLCAnem9uZUNhbWVyYUNvdW50JylcIiB0aXRsZT1cIkNhbmNlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDRMNCAxMk00IDRMMTIgMTJcIiBzdHJva2U9XCIjRjA0NDM4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWRpdGluZ0ZpZWxkKHN0b3JlPy5zdG9yZUlkLCAnem9uZUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgc3RvcmU/LnpvbmVDb3VudCB8fCAwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGVkaXQtaWNvblwiIChjbGljayk9XCJzdGFydEZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDb3VudCcpXCIgdGl0bGU9XCJFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45MTY2NyAxLjc1MDA0QzEwLjA2OTggMS41OTY4MyAxMC4yNTE4IDEuNDc1MzMgMTAuNDUxOSAxLjM5MjM4QzEwLjY1MjIgMS4zMDk0NiAxMC44NjY3IDEuMjY2NzkgMTEuMDgzMyAxLjI2Njc5QzExLjMgMS4yNjY3OSAxMS41MTQ1IDEuMzA5NDYgMTEuNzE0OCAxLjM5MjM4QzExLjkxNDkgMS40NzUzMyAxMi4wOTY5IDEuNTk2ODMgMTIuMjUgMS43NTAwNEMxMi40MDMyIDEuOTAzMjUgMTIuNTI0NyAyLjA4NTI5IDEyLjYwNzcgMi4yODU0NkMxMi42OTA2IDIuNDg1NjcgMTIuNzMzMyAyLjcwMDEzIDEyLjczMzMgMi45MTY3MUMxMi43MzMzIDMuMTMzMjkgMTIuNjkwNiAzLjM0Nzc1IDEyLjYwNzcgMy41NDc5NkMxMi41MjQ3IDMuNzQ4MTMgMTIuNDAzMiAzLjkzMDE3IDEyLjI1IDQuMDgzMzhMNC4zNzUgMTEuOTU4NEwxLjE2NjY3IDEyLjgzMzRMMi4wNDE2NyA5LjYyNTA0TDkuOTE2NjcgMS43NTAwNFpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4xNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpbmdGaWVsZChzdG9yZT8uc3RvcmVJZCwgJ3pvbmVDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBlZGl0LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbmdGaWVsZFtnZXRGaWVsZEVkaXRLZXkoc3RvcmU/LnN0b3JlSWQsICd6b25lQ291bnQnKV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVGaWVsZEVkaXQoc3RvcmUsICd6b25lQ291bnQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtc3VjY2Vzc1wiIChjbGljayk9XCJzYXZlRmllbGRFZGl0KHN0b3JlLCAnem9uZUNvdW50JylcIiB0aXRsZT1cIlNhdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMy4zMzM0IDRMNi4wMDAwOCAxMS4zMzMzTDIuNjY2NzUgOFwiIHN0cm9rZT1cIiMxMkI3NkFcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtZGFuZ2VyXCIgKGNsaWNrKT1cImNhbmNlbEZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDb3VudCcpXCIgdGl0bGU9XCJDYW5jZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA0TDQgMTJNNCA0TDEyIDEyXCIgc3Ryb2tlPVwiI0YwNDQzOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+e3sgc3RvcmU/LmVkZ2VmaXJzdEZpbGVEYXRlID8gKHN0b3JlPy5lZGdlZmlyc3RGaWxlRGF0ZSB8IGRhdGU6ICdkZCBNTU0geXl5eScpIDogJ+KAlCcgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCIgKm5nRm9yPVwibGV0IHByb2R1Y3Qgb2Ygc3RvcmU/LnByb2R1Y3RzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTIgbWItMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNtYWxsIHRleHQtbXV0ZWRcIj57eyBmb3JtYXRQcm9kdWN0TmFtZShwcm9kdWN0Py5wcm9kdWN0TmFtZSkgfX06PC9zcGFuPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gVmlldyBtb2RlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWRpdGluZyhzdG9yZT8uc3RvcmVJZCwgcHJvZHVjdD8ucHJvZHVjdE5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHByb2R1Y3Q/LndvcmtpbmdkYXlzIHx8IDAgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZWRpdC1pY29uXCIgKGNsaWNrKT1cInN0YXJ0RWRpdChzdG9yZSwgcHJvZHVjdClcIiB0aXRsZT1cIkVkaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjkxNjY3IDEuNzUwMDRDMTAuMDY5OCAxLjU5NjgzIDEwLjI1MTggMS40NzUzMyAxMC40NTE5IDEuMzkyMzhDMTAuNjUyMiAxLjMwOTQ2IDEwLjg2NjcgMS4yNjY3OSAxMS4wODMzIDEuMjY2NzlDMTEuMyAxLjI2Njc5IDExLjUxNDUgMS4zMDk0NiAxMS43MTQ4IDEuMzkyMzhDMTEuOTE0OSAxLjQ3NTMzIDEyLjA5NjkgMS41OTY4MyAxMi4yNSAxLjc1MDA0QzEyLjQwMzIgMS45MDMyNSAxMi41MjQ3IDIuMDg1MjkgMTIuNjA3NyAyLjI4NTQ2QzEyLjY5MDYgMi40ODU2NyAxMi43MzMzIDIuNzAwMTMgMTIuNzMzMyAyLjkxNjcxQzEyLjczMzMgMy4xMzMyOSAxMi42OTA2IDMuMzQ3NzUgMTIuNjA3NyAzLjU0Nzk2QzEyLjUyNDcgMy43NDgxMyAxMi40MDMyIDMuOTMwMTcgMTIuMjUgNC4wODMzOEw0LjM3NSAxMS45NTg0TDEuMTY2NjcgMTIuODMzNEwyLjA0MTY3IDkuNjI1MDRMOS45MTY2NyAxLjc1MDA0WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjE2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIEVkaXQgbW9kZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZyhzdG9yZT8uc3RvcmVJZCwgcHJvZHVjdD8ucHJvZHVjdE5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBlZGl0LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbmdQcm9kdWN0W2dldEVkaXRLZXkoc3RvcmU/LnN0b3JlSWQsIHByb2R1Y3Q/LnByb2R1Y3ROYW1lKV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVXb3JraW5nRGF5cyhzdG9yZSwgcHJvZHVjdClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjYW5jZWxFZGl0KHN0b3JlLCBwcm9kdWN0KVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LXN1Y2Nlc3NcIiAoY2xpY2spPVwic2F2ZVdvcmtpbmdEYXlzKHN0b3JlLCBwcm9kdWN0KVwiIHRpdGxlPVwiU2F2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzLjMzMzQgNEw2LjAwMDA4IDExLjMzMzNMMi42NjY3NSA4XCIgc3Ryb2tlPVwiIzEyQjc2QVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwiY2FuY2VsRWRpdChzdG9yZSwgcHJvZHVjdClcIiB0aXRsZT1cIkNhbmNlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDRMNCAxMk00IDRMMTIgMTJcIiBzdHJva2U9XCIjRjA0NDM4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXQtM1wiIFtuZ0NsYXNzXT1cInN0b3JlPy5zdGF0dXMgPT09ICdhY3RpdmUnID8gJ2JhZGdlIGJhZGdlLWxpZ2h0LXN1Y2Nlc3MnIDogJ2JhZGdlIGJhZGdlLWxpZ2h0LWRhbmdlcidcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7eyBzdG9yZT8uc3RhdHVzIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGV4dC1lbmRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gUGVyLXByb2R1Y3QgYnJlYWtkb3duIChUcmFmZmljOiDigrl4LCBab25lOiDigrl5IOKApikgKyB0b3RhbC4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBiIG9mIHN0b3JlPy5pbnZvaWNlQnJlYWtkb3duXCIgY2xhc3M9XCJpbnYtYnJlYWtkb3duLXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiaW52LWJyZWFrZG93bi1sYWJlbFwiPnt7IGIubGFiZWwgfX06PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0b3JlQ3VycmVuY3lTeW1ib2woc3RvcmUpIH19e3sgKGIuYW1vdW50IHx8IDApIHwgbnVtYmVyOicxLjItMic6J2VuLUlOJyB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGUgaW52LWJyZWFrZG93bi10b3RhbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgc3RvcmVDdXJyZW5jeVN5bWJvbChzdG9yZSkgfX17eyAoc3RvcmU/Lmludm9pY2VBbW91bnQgfHwgMCkgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgPC90Ym9keT5cbiAgICAgICAgPC90YWJsZT5cbiAgICAgICAgPGRpdiAqbmdJZj1cIiFzdG9yZUxvYWRpbmcgJiYgIXN0b3JlTm9EYXRhXCI+XG4gICAgICAgICAgICA8bGliLXBhZ2luYXRpb24gY2xhc3M9XCJ0ZXh0LXN0YXJ0XCIgW2l0ZW1zUGVyUGFnZV09XCJpdGVtc1BlclBhZ2VcIiBbY3VycmVudFBhZ2VdPVwiY3VycmVudFBhZ2VcIlxuICAgICAgICAgICAgICAgIFt0b3RhbEl0ZW1zXT1cInRvdGFsSXRlbXNcIiBbcGFnaW5hdGlvblNpemVzXT1cInBhZ2luYXRpb25TaXplc1wiIFtwYWdlU2l6ZV09XCJwYWdlU2l6ZVwiXG4gICAgICAgICAgICAgICAgKHBhZ2VDaGFuZ2UpPVwib25QYWdlQ2hhbmdlKCRldmVudClcIiAocGFnZVNpemVDaGFuZ2UpPVwib25QYWdlU2l6ZUNoYW5nZSgkZXZlbnQpXCI+PC9saWItcGFnaW5hdGlvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG48L2Rpdj4iXX0=