tango-app-ui-manage-billing 3.3.20 → 3.3.21

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.
Files changed (21) hide show
  1. package/esm2022/lib/components/billing-summary/billing-summary.component.mjs +25 -17
  2. package/esm2022/lib/components/brand-invoices/brand-invoices.component.mjs +5 -4
  3. package/esm2022/lib/components/daily-pricing/daily-pricing.component.mjs +9 -5
  4. package/esm2022/lib/components/daily-pricing/generate-invoice-modal/generate-invoice-modal.component.mjs +3 -3
  5. package/esm2022/lib/components/invoice-preview/invoice-preview.component.mjs +3 -3
  6. package/esm2022/lib/components/purchase-order/purchase-order-details/purchase-order-details.component.mjs +62 -0
  7. package/esm2022/lib/components/purchase-order/purchase-order-form/purchase-order-form.component.mjs +87 -0
  8. package/esm2022/lib/components/purchase-order/purchase-order.component.mjs +104 -0
  9. package/esm2022/lib/components/services/billing.service.mjs +9 -1
  10. package/esm2022/lib/components/tango-manage-billing/edit-invoice/edit-invoice.component.mjs +25 -3
  11. package/esm2022/lib/tango-manage-billing.module.mjs +10 -1
  12. package/fesm2022/tango-app-ui-manage-billing.mjs +394 -118
  13. package/fesm2022/tango-app-ui-manage-billing.mjs.map +1 -1
  14. package/lib/components/billing-summary/billing-summary.component.d.ts +1 -0
  15. package/lib/components/purchase-order/purchase-order-details/purchase-order-details.component.d.ts +18 -0
  16. package/lib/components/purchase-order/purchase-order-form/purchase-order-form.component.d.ts +25 -0
  17. package/lib/components/purchase-order/purchase-order.component.d.ts +28 -0
  18. package/lib/components/services/billing.service.d.ts +2 -0
  19. package/lib/components/tango-manage-billing/edit-invoice/edit-invoice.component.d.ts +2 -0
  20. package/lib/tango-manage-billing.module.d.ts +28 -25
  21. package/package.json +1 -1
@@ -275,7 +275,9 @@ export class DailyPricingComponent {
275
275
  }
276
276
  startEdit(store, product) {
277
277
  const key = this.getEditKey(store.storeId, product.productName);
278
- this.editingProduct[key] = product.workingdays;
278
+ // Coerce to a number so a 0 / missing value still enters edit mode with a
279
+ // defined value (undefined would make isEditing() think we're not editing).
280
+ this.editingProduct[key] = Number(product.workingdays) || 0;
279
281
  }
280
282
  cancelEdit(store, product) {
281
283
  const key = this.getEditKey(store.storeId, product.productName);
@@ -283,8 +285,10 @@ export class DailyPricingComponent {
283
285
  }
284
286
  saveWorkingDays(store, product) {
285
287
  const key = this.getEditKey(store.storeId, product.productName);
286
- const newValue = this.editingProduct[key];
287
- if (newValue === product.workingdays) {
288
+ const newValue = Number(this.editingProduct[key]) || 0;
289
+ // Unchanged → just close the editor (compare as numbers so 0 vs "0" etc.
290
+ // don't slip through).
291
+ if (newValue === (Number(product.workingdays) || 0)) {
288
292
  delete this.editingProduct[key];
289
293
  return;
290
294
  }
@@ -293,7 +297,7 @@ export class DailyPricingComponent {
293
297
  dateString: this.dailyPricingInfo.dateString,
294
298
  storeId: store.storeId,
295
299
  productName: product.productName,
296
- workingdays: Number(newValue)
300
+ workingdays: newValue
297
301
  };
298
302
  this.billingService.updateDailyPricingWorkingDays(payload).pipe(takeUntil(this.destroy$)).subscribe({
299
303
  next: () => {
@@ -451,4 +455,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImpo
451
455
  }], ctorParameters: () => [{ type: i1.BillingService }, { type: i0.ChangeDetectorRef }, { type: i2.ToastService }, { type: i3.NgbModal }], propDecorators: { clientId: [{
452
456
  type: Input
453
457
  }] } });
454
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpbHktcHJpY2luZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtYmlsbGluZy9zcmMvbGliL2NvbXBvbmVudHMvZGFpbHktcHJpY2luZy9kYWlseS1wcmljaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy9kYWlseS1wcmljaW5nL2RhaWx5LXByaWNpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7OztBQU94RixNQUFNLE9BQU8scUJBQXFCO0lBdUR0QjtJQUNBO0lBQ0E7SUFDQTtJQXpETyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVqQyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBRS9CLEdBQUcsQ0FBTTtJQUNULGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsV0FBVztJQUNYLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztJQUUzQix5RUFBeUU7SUFDekUsY0FBYyxHQUFRLEVBQUUsQ0FBQztJQUN6Qix3RkFBd0Y7SUFDeEYsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUV2QixjQUFjO0lBQ2QsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUV4Qiw2RUFBNkU7SUFDN0UseUVBQXlFO0lBQ3pFLFlBQVksR0FBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLGlCQUFpQixHQUFH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QUFTLENBQUM7aUJBQzdCLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBQUUsR0FBRyxHQUFHLGdCQUFnQixDQUFDO2lCQUNwQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFBRSxHQUFHLEdBQUcsZ0JBQWdCLENBQUM7WUFDL0QsT0FBTztnQkFDTCxHQUFHLENBQUM7Z0JBQ0osVUFBVSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFO2dCQUN6RCxHQUFHO2dCQUNILFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxJQUFJLEVBQUU7YUFDbkUsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELDJCQUEyQjtRQUN6QixJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7SUFDN0QsQ0FBQzt3R0E5ZFUscUJBQXFCOzRGQUFyQixxQkFBcUIsZ0hDYmxDLHV0aUNBZ2JNOzs0RkRuYU8scUJBQXFCO2tCQUxqQyxTQUFTOytCQUNFLG1CQUFtQjtxS0FPcEIsUUFBUTtzQkFBaEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5nYk1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgQmlsbGluZ1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9iaWxsaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG9hc3RTZXJ2aWNlIH0gZnJvbSAndGFuZ28tYXBwLXVpLXNoYXJlZCc7XG5pbXBvcnQgeyBHZW5lcmF0ZUludm9pY2VNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vZ2VuZXJhdGUtaW52b2ljZS1tb2RhbC9nZW5lcmF0ZS1pbnZvaWNlLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBOZXdTdG9yZXNNb2RhbENvbXBvbmVudCB9IGZyb20gJy4vbmV3LXN0b3Jlcy1tb2RhbC9uZXctc3RvcmVzLW1vZGFsLmNvbXBvbmVudCc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1kYWlseS1wcmljaW5nJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2RhaWx5LXByaWNpbmcuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZGFpbHktcHJpY2luZy5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgRGFpbHlQcmljaW5nQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkNoYW5nZXMsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xuXG4gIEBJbnB1dCgpIGNsaWVudElkOiBzdHJpbmcgPSAnJztcblxuICBsZW46IGFueTtcbiAgc2VhcmNoRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBNZXRhZGF0YVxuICBkYWlseVByaWNpbmdJbmZvOiBhbnkgPSB7fTtcblxuICAvLyBFZGl0IHRyYWNraW5nOiBrZXkgPSAnc3RvcmVJZF9wcm9kdWN0TmFtZScsIHZhbHVlID0gZWRpdGVkIHdvcmtpbmdkYXlzXG4gIGVkaXRpbmdQcm9kdWN0OiBhbnkgPSB7fTtcbiAgLy8gRWRpdCB0cmFja2luZyBmb3Igc3RvcmUtbGV2ZWwgZmllbGRzICh0cmFmZmljQ2FtZXJhQ291bnQsIHpvbmVDYW1lcmFDb3VudCwgem9uZUNvdW50KVxuICBlZGl0aW5nRmllbGQ6IGFueSA9IHt9O1xuXG4gIC8vIERhdGUgZmlsdGVyXG4gIGRhdGVGaWx0ZXI6IHN0cmluZyA9ICcnO1xuXG4gIC8vIEZpbHRlciDigJQgbXVsdGktc2VsZWN0IHN0YXR1cy4gRGVmYXVsdCB0byBBY3RpdmUgc28gdGhlIHRhYmxlIG9wZW5zIHNob3dpbmdcbiAgLy8gb25seSBhY3RpdmUgc3RvcmVzOyB0aGUgZHJvcGRvd24gbWFya3MgQWN0aXZlIGNoZWNrZWQgdG8gcmVmbGVjdCB0aGF0LlxuICBzdGF0dXNGaWx0ZXI6IHN0cmluZ1tdID0gWydhY3RpdmUnXTtcbiAgc3RvcmVGaWx0ZXJPYmplY3QgPSBbXG4gICAgeyBEZXNjcmlwdGlvbjogJ1N0YXR1cycsIHR5cGU6ICdtdWx0aScsIElzc3VlczogW3sgaWQ6ICdhY3RpdmUnLCB0ZXh0OiAnQWN0aXZlJywgY2hlY2tlZDogdHJ1ZSB9LCB7IGlkOiAnZGVhY3RpdmUnLCB0ZXh0OiAnRGVhY3RpdmUnIH1dIH0sXG4gIF07XG5cbiAgLy8gTW9udGhseSBCaWxsaW5nIFN1bW1hcnkg4oCUIGRlcml2ZWQgZnJvbSBpbnZvaWNlIGhpc3RvcnkgZm9yIHRoZSBicmFuZC5cbiAgLy8gTmV3ZXN0IGZpcnN0OyBlYWNoIHJvdyBjYXJyaWVzIHByaW9yLW1vbnRoIGRlbHRhcyBmb3IgdGhlIHRyZW5kIGluZGljYXRvci5cbiAgbW9udGhseUJpbGxpbmdTdW1tYXJ5OiBhbnlbXSA9IFtdO1xuICBtb250aGx5U3VtbWFyeUV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gVGFibGVcbiAgc3RvcmVMaXN0OiBhbnkgPSBbXTtcbiAgc3RvcmVMb2FkaW5nOiBib29sZWFuID0gdHJ1ZTtcbiAgc3RvcmVOb0RhdGE6IGJvb2xlYW4gPSBmYWxzZTtcbiAgdG90YWxJdGVtczogbnVtYmVyID0gMDtcbiAgcGFnZVNpemU6IG51bWJlciA9IDEwO1xuICBjdXJyZW50UGFnZTogbnVtYmVyID0gMTtcbiAgaXRlbXNQZXJQYWdlOiBudW1iZXIgPSAxMDtcbiAgcGFnaW5hdGlvblNpemVzID0gWzEwLCAyMCwgMzBdO1xuICBzb3J0Q29sdW1OYW1lOiBzdHJpbmcgPSAnc3RvcmVOYW1lJztcbiAgc29ydEJ5OiBudW1iZXIgPSAxO1xuICBnZW5lcmF0aW5nSW52b2ljZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIEFkZGl0aW9uYWwgKG5vbi1zdGFuZGFyZCkgcHJvZHVjdHMgYXZhaWxhYmxlIG9ubHkgZm9yIHNwZWNpZmljIGNsaWVudHNcbiAgLy8gKGN1cnJlbnRseSBjbGllbnRJZCAxMSkuIEVtcHR5IGZvciBldmVyeW9uZSBlbHNlIC0+IHRoZSB0YWJsZSBpcyBoaWRkZW4uXG4gIGFkZGl0aW9uYWxQcm9kdWN0czogYW55W10gPSBbXTtcbiAgYWRkaXRpb25hbFByb2R1Y3RzQ3VycmVuY3k6IHN0cmluZyA9ICdpbnInO1xuXG4gIC8vIENvdW50ICsgbGlzdCBvZiBzdG9yZXMgb25ib2FyZGVkIHRoaXMgbW9udGggKGZpcnN0IGZpbGUgZGF0ZSBpbiB0aGUgY3VycmVudFxuICAvLyBtb250aCkuIFRoZSBsaXN0IGZlZWRzIHRoZSBcIlZpZXcgU3RvcmVzXCIgcG9wdXAuXG4gIG5ld2x5T25ib2FyZGVkU3RvcmVzOiBudW1iZXIgPSAwO1xuICBuZXdseU9uYm9hcmRlZFN0b3JlTGlzdDogYW55W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGJpbGxpbmdTZXJ2aWNlOiBCaWxsaW5nU2VydmljZSxcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIHRvYXN0OiBUb2FzdFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBtb2RhbFNlcnZpY2U6IE5nYk1vZGFsXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbGllbnRJZCkge1xuICAgICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gICAgICB0aGlzLmxvYWRBZGRpdGlvbmFsUHJvZHVjdHMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgaWYgKGNoYW5nZXNbJ2NsaWVudElkJ10gJiYgIWNoYW5nZXNbJ2NsaWVudElkJ10uZmlyc3RDaGFuZ2UgJiYgdGhpcy5jbGllbnRJZCkge1xuICAgICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gICAgICB0aGlzLmxvYWRBZGRpdGlvbmFsUHJvZHVjdHMoKTtcbiAgICB9XG4gIH1cblxuICAvLyBHcmFuZCB0b3RhbCBhY3Jvc3MgYWxsIGFkZGl0aW9uYWwtcHJvZHVjdCByb3dzLlxuICBnZXQgYWRkaXRpb25hbFByb2R1Y3RzVG90YWwoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gKHRoaXMuYWRkaXRpb25hbFByb2R1Y3RzIHx8IFtdKS5yZWR1Y2UoKGEsIHApID0+IGEgKyAoTnVtYmVyKHAudG90YWwpIHx8IDApLCAwKTtcbiAgfVxuXG4gIC8vIFByb2R1Y3RzIHRoYXQgaGF2ZSBhIGJhY2tlbmQgZGV0YWlsZWQgZXhwb3J0LiBLZXllZCBieSB0aGUgcHJvZHVjdCBrZXkgdGhlXG4gIC8vIGV4cG9ydCBlbmRwb2ludCB1bmRlcnN0YW5kcy4gQWRkIG1vcmUgYXMgdGhlaXIgcXVlcmllcyBhcmUgd2lyZWQgdXAuXG4gIHByaXZhdGUgcmVhZG9ubHkgZXhwb3J0YWJsZVByb2R1Y3RzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICdleWV0ZXN0JzogJ2V5ZXRlc3QnLFxuICAgICdwbGFub2dyYW0nOiAncGxhbm9ncmFtJyxcbiAgICAnYWkgbWFuYWdlcic6ICdhaW1hbmFnZXInLFxuICAgICd2bXMnOiAndm1zJyxcbiAgICAncnVuIGFpJzogJ3J1bmFpJyxcbiAgICAncmVtb3RlIG9wdHVtJzogJ3JlbW90ZW9wdHVtJyxcbiAgfTtcblxuICBjYW5FeHBvcnRBZGRpdGlvbmFsUHJvZHVjdChwcm9kdWN0TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhdGhpcy5leHBvcnRhYmxlUHJvZHVjdHNbKHByb2R1Y3ROYW1lIHx8ICcnKS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIGV4cG9ydEFkZGl0aW9uYWxQcm9kdWN0KHByb2R1Y3ROYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmV4cG9ydGFibGVQcm9kdWN0c1socHJvZHVjdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCldO1xuICAgIGlmICgha2V5KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIFBhc3MgdG9kYXkncyBkYXRlIChZWVlZLU1NLUREKSDigJQgdXNlZCBieSBkYXktc2NvcGVkIHByb2R1Y3RzIChSZW1vdGUgT3B0dW0pLlxuICAgIGNvbnN0IHRvZGF5ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCB0b2RheVN0ciA9IGAke3RvZGF5LmdldEZ1bGxZZWFyKCl9LSR7U3RyaW5nKHRvZGF5LmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpfS0ke1N0cmluZyh0b2RheS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJyl9YDtcbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmFkZGl0aW9uYWxQcm9kdWN0RXhwb3J0KHRoaXMuY2xpZW50SWQsIGtleSwgdG9kYXlTdHIpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXG4gICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogQXJyYXlCdWZmZXIpID0+IHtcbiAgICAgICAgICAvLyBBIHJlYWwgLnhsc3ggaXMgYSB6aXAg4oCUIGl0cyBmaXJzdCB0d28gYnl0ZXMgYXJlICdQSycgKDB4NTAgMHg0QikuXG4gICAgICAgICAgLy8gQSAyMDQvZW1wdHkgb3IgSlNPTiBlcnJvciBib2R5IGlzIE5PVCwgYW5kIHNhdmluZyBpdCBwcm9kdWNlcyBhXG4gICAgICAgICAgLy8gXCJjb3JydXB0ZWRcIiBmaWxlLiBHdWFyZCBzbyB3ZSBvbmx5IHNhdmUgYSBnZW51aW5lIHdvcmtib29rLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gcmVzID8gbmV3IFVpbnQ4QXJyYXkocmVzKSA6IG5ldyBVaW50OEFycmF5KCk7XG4gICAgICAgICAgY29uc3QgaXNYbHN4ID0gYnl0ZXMubGVuZ3RoID4gMSAmJiBieXRlc1swXSA9PT0gMHg1MCAmJiBieXRlc1sxXSA9PT0gMHg0YjtcbiAgICAgICAgICBpZiAoIWlzWGxzeCkge1xuICAgICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdObyBkYXRhIHRvIGV4cG9ydCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsIGAke3Byb2R1Y3ROYW1lfS0ke3RoaXMuY2xpZW50SWR9YCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdFeHBvcnQgZmFpbGVkJyk7XG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgfVxuXG4gIC8vIEZldGNoIHRoZSBhZGRpdGlvbmFsLXByb2R1Y3RzIHRhYmxlIGZvciB0aGlzIGNsaWVudC4gQmFja2VuZCByZXR1cm5zIGFuXG4gIC8vIGVtcHR5IGxpc3QgZm9yIGFueSBjbGllbnQgdGhhdCBoYXMgbm9uZSAoc28gdGhlIHRhYmxlIGp1c3Qgd29uJ3QgcmVuZGVyKS5cbiAgbG9hZEFkZGl0aW9uYWxQcm9kdWN0cygpIHtcbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmFkZGl0aW9uYWxQcm9kdWN0cyh0aGlzLmNsaWVudElkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsUHJvZHVjdHMgPSByZXM/LmRhdGE/LnByb2R1Y3RzIHx8IFtdO1xuICAgICAgICB0aGlzLmFkZGl0aW9uYWxQcm9kdWN0c0N1cnJlbmN5ID0gcmVzPy5kYXRhPy5jdXJyZW5jeSB8fCAnaW5yJztcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5hZGRpdGlvbmFsUHJvZHVjdHMgPSBbXTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xuICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgfVxuXG4gIGxvYWREYWlseVByaWNpbmcoKSB7XG4gICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xuICAgIHRoaXMuc3RvcmVMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnN0b3JlTm9EYXRhID0gZmFsc2U7XG5cbiAgICBsZXQgZmlsdGVyczogUmVjb3JkPHN0cmluZywgYW55PiA9IHtcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxuICAgICAgbGltaXQ6IHRoaXMucGFnZVNpemUsXG4gICAgICBvZmZzZXQ6IHRoaXMuY3VycmVudFBhZ2UsXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5sZW4sXG4gICAgICBzb3J0Q29sdW1OYW1lOiB0aGlzLnNvcnRDb2x1bU5hbWUsXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5LFxuICAgICAgc3RhdHVzRmlsdGVyOiB0aGlzLnN0YXR1c0ZpbHRlcixcbiAgICAgIGRhdGVGaWx0ZXI6IHRoaXMuZGF0ZUZpbHRlciB8fCAnJyxcbiAgICAgIGV4cG9ydDogZmFsc2VcbiAgICB9O1xuXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS5sYXRlc3REYWlseVByaWNpbmcoZmlsdGVycykucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAoZSkgPT4ge1xuICAgICAgICAvLyBUaGUgTW9udGhseSBCaWxsaW5nIFN1bW1hcnkgY29tZXMgZnJvbSBpbnZvaWNlIGhpc3RvcnksIG5vdCB0aGUgc3RvcmVcbiAgICAgICAgLy8gcm93cyDigJQgYXBwbHkgaXQgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBzdG9yZSBsaXN0IGlzIGVtcHR5LCBzbyBpdFxuICAgICAgICAvLyBzdGlsbCBzaG93cyB3aGVuIHRoZSBmaWx0ZXJlZCBzdG9yZSB0YWJsZSBoYXMgbm8gcm93cy5cbiAgICAgICAgdGhpcy5tb250aGx5QmlsbGluZ1N1bW1hcnkgPSB0aGlzLmRlY29yYXRlTW9udGhseVN1bW1hcnkoZT8uZGF0YT8ubW9udGhseUJpbGxpbmdTdW1tYXJ5IHx8IFtdKTtcbiAgICAgICAgLy8gTmV3bHkgb25ib2FyZGVkIGNvdW50L2xpc3QgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIHN0b3JlIHRhYmxlJ3NcbiAgICAgICAgLy8gZmlsdGVycywgc28gY2FwdHVyZSBpdCB3aGV0aGVyIG9yIG5vdCB0aGUgZmlsdGVyZWQgc3RvcmUgbGlzdCBoYXMgcm93cy5cbiAgICAgICAgdGhpcy5uZXdseU9uYm9hcmRlZFN0b3JlcyA9IGU/LmRhdGE/Lm5ld2x5T25ib2FyZGVkU3RvcmVzIHx8IDA7XG4gICAgICAgIHRoaXMubmV3bHlPbmJvYXJkZWRTdG9yZUxpc3QgPSBlPy5kYXRhPy5uZXdseU9uYm9hcmRlZFN0b3JlTGlzdCB8fCBbXTtcblxuICAgICAgICBpZiAoZT8uZGF0YT8uY291bnQpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3RvcmVOb0RhdGEgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IGUuZGF0YT8uZGF0YTtcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSBlLmRhdGE/LmNvdW50O1xuXG4gICAgICAgICAgdGhpcy5kYWlseVByaWNpbmdJbmZvID0ge1xuICAgICAgICAgICAgYnJhbmROYW1lOiBlLmRhdGE/LmJyYW5kTmFtZSB8fCAnJyxcbiAgICAgICAgICAgIGRhdGVTdHJpbmc6IGUuZGF0YT8uZGF0ZVN0cmluZyB8fCAnJyxcbiAgICAgICAgICAgIGRhdGVJU086IGUuZGF0YT8uZGF0ZUlTTyB8fCAnJyxcbiAgICAgICAgICAgIGFjdGl2ZVN0b3JlczogZS5kYXRhPy5hY3RpdmVTdG9yZXMgfHwgMCxcbiAgICAgICAgICAgIGFjY291bnRUeXBlOiBlLmRhdGE/LmFjY291bnRUeXBlIHx8ICcnLFxuICAgICAgICAgICAgc3RhdHVzOiBlLmRhdGE/LnN0YXR1cyB8fCAnJyxcbiAgICAgICAgICAgIHByb1JhdGU6IGUuZGF0YT8ucHJvUmF0ZSB8fCAnJyxcbiAgICAgICAgICAgIGNsaWVudElkOiBlLmRhdGE/LmNsaWVudElkIHx8ICcnXG4gICAgICAgICAgfTtcblxuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuc3RvcmVMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdG9yZU5vRGF0YSA9IHRydWU7XG4gICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHRoaXMubGVuPy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuc2VhcmNoRGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcbiAgICAgICAgICB0aGlzLnRvdGFsSXRlbXMgPSAwO1xuICAgICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy5zdG9yZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zdG9yZU5vRGF0YSA9IHRydWU7XG4gICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gW107XG4gICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XG4gICAgICAgIHRoaXMubW9udGhseUJpbGxpbmdTdW1tYXJ5ID0gW107XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgb25EYXRlRmlsdGVyKGV2ZW50OiBhbnkpIHtcbiAgICB0aGlzLmRhdGVGaWx0ZXIgPSBldmVudD8udGFyZ2V0Py52YWx1ZSB8fCAnJztcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgfVxuXG4gIGNsZWFyRGF0ZUZpbHRlcigpIHtcbiAgICB0aGlzLmRhdGVGaWx0ZXIgPSAnJztcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgfVxuXG4gIHNlYXJjaEZpZWxkKCkge1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgYXBwbHlTdG9yZUZpbHRlcnMoZXZlbnQ6IGFueSkge1xuICAgIC8vIE11bHRpLXNlbGVjdCBTdGF0dXMg4oCUIGxpYi1maWx0ZXJzIGVtaXRzIGVhY2ggZ3JvdXAncyBzZWxlY3RlZCBvcHRpb25zIGFzXG4gICAgLy8gYW4gQVJSQVkgdW5kZXIgSXNzdWVzIChBcHBseSBzZXRzIElzc3VlcyA9IHNlbGVjdGVkVmFsdWVzQXJyYXlbaW5kZXhdKS5cbiAgICAvLyBDb2xsZWN0IGV2ZXJ5IHNlbGVjdGVkIGlkLCB0b2xlcmF0aW5nIGJvdGggYXJyYXkgYW5kIHNpbmdsZS1vYmplY3Qgc2hhcGVzLlxuICAgIGNvbnN0IHN0YXR1c2VzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChldmVudD8ubGVuZ3RoKSB7XG4gICAgICBldmVudC5mb3JFYWNoKChlbGVtZW50OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGVsZW1lbnQuRGVzY3JpcHRpb24gPT09ICdTdGF0dXMnKSB7XG4gICAgICAgICAgY29uc3QgaXNzdWVzID0gQXJyYXkuaXNBcnJheShlbGVtZW50Lklzc3VlcykgPyBlbGVtZW50Lklzc3VlcyA6IChlbGVtZW50Lklzc3VlcyA/IFtlbGVtZW50Lklzc3Vlc10gOiBbXSk7XG4gICAgICAgICAgaXNzdWVzLmZvckVhY2goKGk6IGFueSkgPT4geyBpZiAoaT8uaWQpIHN0YXR1c2VzLnB1c2goaS5pZCk7IH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5zdGF0dXNGaWx0ZXIgPSBbLi4ubmV3IFNldChzdGF0dXNlcyldO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgc29ydERhdGEoY29sdW1uOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNvcnRDb2x1bU5hbWUgPSBjb2x1bW47XG4gICAgdGhpcy5zb3J0QnkgKj0gLTE7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gIH1cblxuICBvblBhZ2VDaGFuZ2UocGFnZU9mZnNldDogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IHBhcnNlSW50KHBhZ2VPZmZzZXQpO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgb25QYWdlU2l6ZUNoYW5nZShwYWdlU2l6ZTogYW55KSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy5wYWdlU2l6ZSA9IHBhcnNlSW50KHBhZ2VTaXplKTtcbiAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgfVxuXG4gIG9uRXhwb3J0KCkge1xuICAgIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBzZWFyY2hWYWx1ZTogdGhpcy5sZW4sXG4gICAgICBzb3J0Q29sdW1OYW1lOiB0aGlzLnNvcnRDb2x1bU5hbWUsXG4gICAgICBzb3J0Qnk6IHRoaXMuc29ydEJ5LFxuICAgICAgc3RhdHVzRmlsdGVyOiB0aGlzLnN0YXR1c0ZpbHRlcixcbiAgICAgIGRhdGVGaWx0ZXI6IHRoaXMuZGF0ZUZpbHRlciB8fCAnJyxcbiAgICAgIGV4cG9ydDogdHJ1ZVxuICAgIH07XG5cbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmxhdGVzdERhaWx5UHJpY2luZ0V4cG9ydChmaWx0ZXJzKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXMpID0+IHtcbiAgICAgICAgdGhpcy5iaWxsaW5nU2VydmljZS5zYXZlQXNFeGNlbEZpbGUocmVzLCAnZGFpbHktcHJpY2luZycpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdCgnU29tZXRoaW5nIHdlbnQgV3JvbmcuLicpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RWRpdEtleShzdG9yZUlkOiBzdHJpbmcsIHByb2R1Y3ROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtzdG9yZUlkfV8ke3Byb2R1Y3ROYW1lfWA7XG4gIH1cblxuICBpc0VkaXRpbmcoc3RvcmVJZDogc3RyaW5nLCBwcm9kdWN0TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZWRpdGluZ1Byb2R1Y3RbdGhpcy5nZXRFZGl0S2V5KHN0b3JlSWQsIHByb2R1Y3ROYW1lKV0gIT09IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHN0YXJ0RWRpdChzdG9yZTogYW55LCBwcm9kdWN0OiBhbnkpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEVkaXRLZXkoc3RvcmUuc3RvcmVJZCwgcHJvZHVjdC5wcm9kdWN0TmFtZSk7XG4gICAgdGhpcy5lZGl0aW5nUHJvZHVjdFtrZXldID0gcHJvZHVjdC53b3JraW5nZGF5cztcbiAgfVxuXG4gIGNhbmNlbEVkaXQoc3RvcmU6IGFueSwgcHJvZHVjdDogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIHByb2R1Y3QucHJvZHVjdE5hbWUpO1xuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV07XG4gIH1cblxuICBzYXZlV29ya2luZ0RheXMoc3RvcmU6IGFueSwgcHJvZHVjdDogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIHByb2R1Y3QucHJvZHVjdE5hbWUpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gdGhpcy5lZGl0aW5nUHJvZHVjdFtrZXldO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSBwcm9kdWN0LndvcmtpbmdkYXlzKSB7XG4gICAgICBkZWxldGUgdGhpcy5lZGl0aW5nUHJvZHVjdFtrZXldO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIGRhdGVTdHJpbmc6IHRoaXMuZGFpbHlQcmljaW5nSW5mby5kYXRlU3RyaW5nLFxuICAgICAgc3RvcmVJZDogc3RvcmUuc3RvcmVJZCxcbiAgICAgIHByb2R1Y3ROYW1lOiBwcm9kdWN0LnByb2R1Y3ROYW1lLFxuICAgICAgd29ya2luZ2RheXM6IE51bWJlcihuZXdWYWx1ZSlcbiAgICB9O1xuXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS51cGRhdGVEYWlseVByaWNpbmdXb3JraW5nRGF5cyhwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgcHJvZHVjdC53b3JraW5nZGF5cyA9IE51bWJlcihuZXdWYWx1ZSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV07XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KCdXb3JraW5nIGRheXMgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gdXBkYXRlIHdvcmtpbmcgZGF5cycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmllbGRFZGl0S2V5KHN0b3JlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtzdG9yZUlkfV8ke2ZpZWxkTmFtZX1gO1xuICB9XG5cbiAgaXNFZGl0aW5nRmllbGQoc3RvcmVJZDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdGaWVsZFt0aGlzLmdldEZpZWxkRWRpdEtleShzdG9yZUlkLCBmaWVsZE5hbWUpXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhcnRGaWVsZEVkaXQoc3RvcmU6IGFueSwgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEZpZWxkRWRpdEtleShzdG9yZS5zdG9yZUlkLCBmaWVsZE5hbWUpO1xuICAgIHRoaXMuZWRpdGluZ0ZpZWxkW2tleV0gPSBzdG9yZVtmaWVsZE5hbWVdIHx8IDA7XG4gIH1cblxuICBjYW5jZWxGaWVsZEVkaXQoc3RvcmU6IGFueSwgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEZpZWxkRWRpdEtleShzdG9yZS5zdG9yZUlkLCBmaWVsZE5hbWUpO1xuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuICB9XG5cbiAgc2F2ZUZpZWxkRWRpdChzdG9yZTogYW55LCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0RmllbGRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIGZpZWxkTmFtZSk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSBzdG9yZVtmaWVsZE5hbWVdKSB7XG4gICAgICBkZWxldGUgdGhpcy5lZGl0aW5nRmllbGRba2V5XTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBkYXRlU3RyaW5nOiB0aGlzLmRhaWx5UHJpY2luZ0luZm8uZGF0ZVN0cmluZyxcbiAgICAgIHN0b3JlSWQ6IHN0b3JlLnN0b3JlSWQsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgIHZhbHVlOiBOdW1iZXIobmV3VmFsdWUpXG4gICAgfTtcblxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UudXBkYXRlRGFpbHlQcmljaW5nU3RvcmVGaWVsZChwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgc3RvcmVbZmllbGROYW1lXSA9IE51bWJlcihuZXdWYWx1ZSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuICAgICAgICBjb25zdCBmaWVsZExhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgdHJhZmZpY0NhbWVyYUNvdW50OiAnVHJhZmZpYyBjYW1lcmEgY291bnQnLCB6b25lQ2FtZXJhQ291bnQ6ICdab25lIGNhbWVyYSBjb3VudCcsIHpvbmVDb3VudDogJ1pvbmUgY291bnQnIH07XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KGAke2ZpZWxkTGFiZWxzW2ZpZWxkTmFtZV0gfHwgZmllbGROYW1lfSB1cGRhdGVkIHN1Y2Nlc3NmdWxseWApO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgdHJhZmZpY0NhbWVyYUNvdW50OiAndHJhZmZpYyBjYW1lcmEgY291bnQnLCB6b25lQ2FtZXJhQ291bnQ6ICd6b25lIGNhbWVyYSBjb3VudCcsIHpvbmVDb3VudDogJ3pvbmUgY291bnQnIH07XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgRmFpbGVkIHRvIHVwZGF0ZSAke2Vycm9yTGFiZWxzW2ZpZWxkTmFtZV0gfHwgZmllbGROYW1lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGVJbnZvaWNlKCkge1xuICAgIGlmICghdGhpcy5jbGllbnRJZCkgcmV0dXJuO1xuICAgIC8vIE9wZW4gdGhlIHBpY2tlciBmaXJzdCDigJQgdGhlIHVzZXIgY2hvb3NlcyB3aGljaCBiaWxsaW5nIGdyb3VwcyB0b1xuICAgIC8vIGdlbmVyYXRlIGZvci4gTW9kYWwgY2xvc2VzIHdpdGggdGhlIGFycmF5IG9mIHNlbGVjdGVkIGdyb3VwIF9pZHNcbiAgICAvLyAob3IgaXMgZGlzbWlzc2VkID0gbm8tb3ApLlxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihHZW5lcmF0ZUludm9pY2VNb2RhbENvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChncm91cElkczogc3RyaW5nW10pID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShncm91cElkcykgfHwgZ3JvdXBJZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICB0aGlzLnJ1bkludm9pY2VHZW5lcmF0aW9uKGdyb3VwSWRzKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7fSk7XG4gIH1cblxuICAvLyBPcGVuIGEgcG9wdXAgbGlzdGluZyB0aGUgbmV3bHkgb25ib2FyZGVkIHN0b3JlcyAod2l0aCBmaXJzdCBmaWxlIGRhdGUpLlxuICAvLyBUaGUgbGlzdCBpcyBhbHJlYWR5IGxvYWRlZCB3aXRoIHRoZSBwYWdlLCBzbyBubyBleHRyYSBBUEkgY2FsbCBpcyBuZWVkZWQuXG4gIHZpZXdOZXdTdG9yZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5ld2x5T25ib2FyZGVkU3RvcmVMaXN0Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihOZXdTdG9yZXNNb2RhbENvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdsZycsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc3RvcmVzID0gdGhpcy5uZXdseU9uYm9hcmRlZFN0b3JlTGlzdDtcbiAgfVxuXG4gIHByaXZhdGUgcnVuSW52b2ljZUdlbmVyYXRpb24oZ3JvdXBJZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5nZW5lcmF0aW5nSW52b2ljZSA9IHRydWU7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYWxsQ2xpZW50OiB0cnVlLFxuICAgICAgY2xpZW50TGlzdDogW3RoaXMuY2xpZW50SWRdLFxuICAgICAgZ3JvdXBJZHMsXG4gICAgfTtcblxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuY3JlYXRlSW52b2ljZShwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5nZW5lcmF0aW5nSW52b2ljZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdChgSW52b2ljZSBnZW5lcmF0ZWQgZm9yICR7Z3JvdXBJZHMubGVuZ3RofSBiaWxsaW5nIGdyb3VwKHMpYCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGluZ0ludm9pY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gZ2VuZXJhdGUgaW52b2ljZScpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZvcm1hdFByb2R1Y3ROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxICQyJylcbiAgICAgIC5yZXBsYWNlKC9eLi8sIChzdHIpID0+IHN0ci50b1VwcGVyQ2FzZSgpKTtcbiAgfVxuXG4gIC8vIFRha2UgdGhlIHJhdyBhZ2dyZWdhdGlvbiByb3dzIChhbHJlYWR5IHNvcnRlZCBuZXdlc3QtZmlyc3QgYnkgdGhlIEFQSSkgYW5kXG4gIC8vIGF0dGFjaCAoYSkgYSBodW1hbi1yZWFkYWJsZSBtb250aExhYmVsLCAoYikgdGFnIGZvciB0aGUgbGF0ZXN0IHR3byByb3dzXG4gIC8vIChcIkN1cnJlbnRcIiAvIFwiTGFzdCBnZW5lcmF0ZWRcIikgYW5kIChjKSBkZWx0YXMgdnMgdGhlIGltbWVkaWF0ZWx5IG9sZGVyXG4gIC8vIEN1cnJlbmN5IHN5bWJvbCBmb3IgYSBzdG9yZSdzIGludm9pY2UgYW1vdW50IChtYXRjaGVzIHRoZSBiYWNrZW5kJ3NcbiAgLy8gYmFzZXByaWNpbmcgY3VycmVuY3k7IEFFRCByZW5kZXJlZCBhcyB0ZXh0KS5cbiAgc3RvcmVDdXJyZW5jeVN5bWJvbChzdG9yZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBzeW1ib2xzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBpbnI6ICfigrknLCBkb2xsYXI6ICckJywgc2luZ2Fwb3JlZG9sbGFyOiAnUyQnLCBldXJvOiAn4oKsJywgYWVkOiAnQUVEICcgfTtcbiAgICByZXR1cm4gc3ltYm9sc1soc3RvcmU/Lmludm9pY2VDdXJyZW5jeSB8fCAnaW5yJykudG9Mb3dlckNhc2UoKV0gfHwgJ+KCuSc7XG4gIH1cblxuICAvLyBtb250aCBzbyB0aGUgdGVtcGxhdGUgY2FuIHJlbmRlciB0aGUg4payL+KWvC/ilqwgdHJlbmQgaW5kaWNhdG9ycy5cbiAgcHJpdmF0ZSBkZWNvcmF0ZU1vbnRobHlTdW1tYXJ5KHJvd3M6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCByb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01heScsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddO1xuICAgIGNvbnN0IHN5bWJvbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGlucjogJ+KCuScsIGRvbGxhcjogJyQnLCBzaW5nYXBvcmVkb2xsYXI6ICdTJCcsIGV1cm86ICfigqwnIH07XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBpc0N1cnJlbnQgPSAocjogYW55KSA9PiByLnllYXIgPT09IG5vdy5nZXRGdWxsWWVhcigpICYmIHIubW9udGggPT09IChub3cuZ2V0TW9udGgoKSArIDEpO1xuICAgIHJldHVybiByb3dzLm1hcCgociwgaSkgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHJvd3NbaSArIDFdO1xuICAgICAgY29uc3Qgc3RvcmVzRGVsdGEgPSBuZXh0ID8gKHIuc3RvcmVzQmlsbGVkIHx8IDApIC0gKG5leHQuc3RvcmVzQmlsbGVkIHx8IDApIDogbnVsbDtcbiAgICAgIGNvbnN0IGFtb3VudERlbHRhID0gbmV4dCA/IChyLmludm9pY2VBbW91bnQgfHwgMCkgLSAobmV4dC5pbnZvaWNlQW1vdW50IHx8IDApIDogbnVsbDtcbiAgICAgIGxldCB0YWcgPSAnJztcbiAgICAgIGlmIChpc0N1cnJlbnQocikpIHRhZyA9ICdDdXJyZW50JztcbiAgICAgIGVsc2UgaWYgKGkgPT09IDApIHRhZyA9ICdMYXN0IGdlbmVyYXRlZCc7XG4gICAgICBlbHNlIGlmIChpID09PSAxICYmIGlzQ3VycmVudChyb3dzWzBdKSkgdGFnID0gJ0xhc3QgZ2VuZXJhdGVkJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnIsXG4gICAgICAgIG1vbnRoTGFiZWw6IGAke21vbnRoTmFtZXNbKHIubW9udGggfHwgMSkgLSAxXX0gJHtyLnllYXJ9YCxcbiAgICAgICAgdGFnLFxuICAgICAgICBzdG9yZXNEZWx0YSxcbiAgICAgICAgYW1vdW50RGVsdGEsXG4gICAgICAgIGN1cnJlbmN5U3ltYm9sOiBzeW1ib2xzWyhyLmN1cnJlbmN5IHx8ICdpbnInKS50b0xvd2VyQ2FzZSgpXSB8fCAnJyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVNb250aGx5U3VtbWFyeUhpc3RvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5tb250aGx5U3VtbWFyeUV4cGFuZGVkID0gIXRoaXMubW9udGhseVN1bW1hcnlFeHBhbmRlZDtcbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJpbnZvaWNlcy1zZWN0aW9uXCI+XG4gICAgPCEtLSBIZWFkZXIgUm93IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi42NjY2NyAxMEgxMy4zMzMzTTYuNjY2NjcgNi42NjY2N0gxMy4zMzMzTTYuNjY2NjcgMTMuMzMzM0gxME01IDE3LjVIMTVDMTUuOTIwNSAxNy41IDE2LjY2NjcgMTYuNzUzOCAxNi42NjY3IDE1LjgzMzNWNC4xNjY2N0MxNi42NjY3IDMuMjQ2MTkgMTUuOTIwNSAyLjUgMTUgMi41SDVDNC4wNzk1MyAyLjUgMy4zMzMzMyAzLjI0NjE5IDMuMzMzMzMgNC4xNjY2N1YxNS44MzMzQzMuMzMzMzMgMTYuNzUzOCA0LjA3OTUzIDE3LjUgNSAxNy41WlwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmlsbGluZ2hlYWRlclwiPkJpbGxpbmcgQnJlYWtkb3duPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1kYXJrIG1zLTFcIj57eyB0b3RhbEl0ZW1zIH19IHN0b3Jlczwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMVwiICpuZ0lmPVwiZGFpbHlQcmljaW5nSW5mbz8uZGF0ZVN0cmluZ1wiPlxuICAgICAgICAgICAgICAgIERhdGU6IDxzdHJvbmc+e3sgZGFpbHlQcmljaW5nSW5mbz8uZGF0ZVN0cmluZyB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMlwiPnw8L3NwYW4+XG4gICAgICAgICAgICAgICAgQWN0aXZlIFN0b3JlczogPHN0cm9uZz57eyBkYWlseVByaWNpbmdJbmZvPy5hY3RpdmVTdG9yZXMgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTJcIj58PC9zcGFuPlxuICAgICAgICAgICAgICAgIEFjY291bnQgVHlwZTogPHN0cm9uZz57eyBkYWlseVByaWNpbmdJbmZvPy5hY2NvdW50VHlwZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZGF0ZS1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0ZUZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25EYXRlRmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieSBkYXRlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGVGaWx0ZXJcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRhdGVGaWx0ZXIoKVwiIHRpdGxlPVwiQ2xlYXIgZGF0ZSBmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjUgMy41TDMuNSAxMC41TTMuNSAzLjVMMTAuNSAxMC41XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJnZW5lcmF0ZUludm9pY2UoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIGludmhlYWRlclwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzdG9yZUxpc3QubGVuZ3RoIHx8IGdlbmVyYXRpbmdJbnZvaWNlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi42NjY2NyAxMEgxMy4zMzMzTTYuNjY2NjcgNi42NjY2N0gxMy4zMzMzTTYuNjY2NjcgMTMuMzMzM0gxME01IDE3LjVIMTVDMTUuOTIwNSAxNy41IDE2LjY2NjcgMTYuNzUzOCAxNi42NjY3IDE1LjgzMzNWNC4xNjY2N0MxNi42NjY3IDMuMjQ2MTkgMTUuOTIwNSAyLjUgMTUgMi41SDVDNC4wNzk1MyAyLjUgMy4zMzMzMyAzLjI0NjE5IDMuMzMzMzMgNC4xNjY2N1YxNS44MzMzQzMuMzMzMzMgMTYuNzUzOCA0LjA3OTUzIDE3LjUgNSAxNy41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xXCI+e3sgZ2VuZXJhdGluZ0ludm9pY2UgPyAnR2VuZXJhdGluZy4uLicgOiAnR2VuZXJhdGUgSW52b2ljZScgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkV4cG9ydCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXN0b3JlTGlzdC5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xXCI+RXhwb3J0PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+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+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gaW52b2ljZXNlYXJjaCBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG10LTYgbXMtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwibGVuXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBpbnZvaWNlc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU3RvcmUgbmFtZSBvciBJRC4uLlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2VhcmNoRmllbGQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoRGlzYWJsZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWZpbHRlcnMgW2RhdGFPYmplY3RdPVwic3RvcmVGaWx0ZXJPYmplY3RcIiAoYXBwbGllZEZpbHRlcnMpPVwiYXBwbHlTdG9yZUZpbHRlcnMoJGV2ZW50KVwiPjwvbGliLWZpbHRlcnM+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExvYWRpbmcgU2hpbW1lciAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RvcmVMb2FkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBObyBEYXRhIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdG9yZU5vRGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyB3LTI1XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBTdG9yZXMgVGFibGUgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFzdG9yZUxvYWRpbmcgJiYgIXN0b3JlTm9EYXRhXCIgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFjY29yZGlvbiB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnc3RvcmVOYW1lJylcIj5TVE9SRSBOQU1FXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZU5hbWUnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5TVE9SRSBJRDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5QUk9EVUNUUzwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCd0cmFmZmljQ2FtZXJhQ291bnQnKVwiPlRSQUZGSUMgQ0FNRVJBU1xuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAndHJhZmZpY0NhbWVyYUNvdW50JyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ3RyYWZmaWNDYW1lcmFDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnem9uZUNhbWVyYUNvdW50JylcIj5aT05FIENBTUVSQVNcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVDYW1lcmFDb3VudCcgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICd6b25lQ2FtZXJhQ291bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3pvbmVDb3VudCcpXCI+Wk9ORVNcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVDb3VudCcgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICd6b25lQ291bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPkZJUlNUIEZJTEUgREFURTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdkYXlzRGlmZmVyZW5jZScpXCI+V09SS0lORyBEQVlTXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdkYXlzRGlmZmVyZW5jZScgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdkYXlzRGlmZmVyZW5jZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+U1RBVFVTPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1lbmRcIj5JTlZPSUNFIEFNT1VOVDwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBzdG9yZUxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIHRhYmxlLXRpdGxlLXByaW1hcnlcIj57eyBzdG9yZT8uc3RvcmVOYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IHN0b3JlPy5zdG9yZUlkIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIHN0b3JlPy5wcm9kdWN0c1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBtZS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFByb2R1Y3ROYW1lKHByb2R1Y3Q/LnByb2R1Y3ROYW1lKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWRpdGluZ0ZpZWxkKHN0b3JlPy5zdG9yZUlkLCAndHJhZmZpY0NhbWVyYUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgc3RvcmU/LnRyYWZmaWNDYW1lcmFDb3VudCB8fCAwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGVkaXQtaWNvblwiIChjbGljayk9XCJzdGFydEZpZWxkRWRpdChzdG9yZSwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCIgdGl0bGU9XCJFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45MTY2NyAxLjc1MDA0QzEwLjA2OTggMS41OTY4MyAxMC4yNTE4IDEuNDc1MzMgMTAuNDUxOSAxLjM5MjM4QzEwLjY1MjIgMS4zMDk0NiAxMC44NjY3IDEuMjY2NzkgMTEuMDgzMyAxLjI2Njc5QzExLjMgMS4yNjY3OSAxMS41MTQ1IDEuMzA5NDYgMTEuNzE0OCAxLjM5MjM4QzExLjkxNDkgMS40NzUzMyAxMi4wOTY5IDEuNTk2ODMgMTIuMjUgMS43NTAwNEMxMi40MDMyIDEuOTAzMjUgMTIuNTI0NyAyLjA4NTI5IDEyLjYwNzcgMi4yODU0NkMxMi42OTA2IDIuNDg1NjcgMTIuNzMzMyAyLjcwMDEzIDEyLjczMzMgMi45MTY3MUMxMi43MzMzIDMuMTMzMjkgMTIuNjkwNiAzLjM0Nzc1IDEyLjYwNzcgMy41NDc5NkMxMi41MjQ3IDMuNzQ4MTMgMTIuNDAzMiAzLjkzMDE3IDEyLjI1IDQuMDgzMzhMNC4zNzUgMTEuOTU4NEwxLjE2NjY3IDEyLjgzMzRMMi4wNDE2NyA5LjYyNTA0TDkuOTE2NjcgMS43NTAwNFpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4xNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpbmdGaWVsZChzdG9yZT8uc3RvcmVJZCwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBlZGl0LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbmdGaWVsZFtnZXRGaWVsZEVkaXRLZXkoc3RvcmU/LnN0b3JlSWQsICd0cmFmZmljQ2FtZXJhQ291bnQnKV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVGaWVsZEVkaXQoc3RvcmUsICd0cmFmZmljQ2FtZXJhQ291bnQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEZpZWxkRWRpdChzdG9yZSwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtc3VjY2Vzc1wiIChjbGljayk9XCJzYXZlRmllbGRFZGl0KHN0b3JlLCAndHJhZmZpY0NhbWVyYUNvdW50JylcIiB0aXRsZT1cIlNhdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMy4zMzM0IDRMNi4wMDAwOCAxMS4zMzMzTDIuNjY2NzUgOFwiIHN0cm9rZT1cIiMxMkI3NkFcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtZGFuZ2VyXCIgKGNsaWNrKT1cImNhbmNlbEZpZWxkRWRpdChzdG9yZSwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCIgdGl0bGU9XCJDYW5jZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA0TDQgMTJNNCA0TDEyIDEyXCIgc3Ryb2tlPVwiI0YwNDQzOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmdGaWVsZChzdG9yZT8uc3RvcmVJZCwgJ3pvbmVDYW1lcmFDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHN0b3JlPy56b25lQ2FtZXJhQ291bnQgfHwgMCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0LWljb25cIiAoY2xpY2spPVwic3RhcnRGaWVsZEVkaXQoc3RvcmUsICd6b25lQ2FtZXJhQ291bnQnKVwiIHRpdGxlPVwiRWRpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTE2NjcgMS43NTAwNEMxMC4wNjk4IDEuNTk2ODMgMTAuMjUxOCAxLjQ3NTMzIDEwLjQ1MTkgMS4zOTIzOEMxMC42NTIyIDEuMzA5NDYgMTAuODY2NyAxLjI2Njc5IDExLjA4MzMgMS4yNjY3OUMxMS4zIDEuMjY2NzkgMTEuNTE0NSAxLjMwOTQ2IDExLjcxNDggMS4zOTIzOEMxMS45MTQ5IDEuNDc1MzMgMTIuMDk2OSAxLjU5NjgzIDEyLjI1IDEuNzUwMDRDMTIuNDAzMiAxLjkwMzI1IDEyLjUyNDcgMi4wODUyOSAxMi42MDc3IDIuMjg1NDZDMTIuNjkwNiAyLjQ4NTY3IDEyLjczMzMgMi43MDAxMyAxMi43MzMzIDIuOTE2NzFDMTIuNzMzMyAzLjEzMzI5IDEyLjY5MDYgMy4zNDc3NSAxMi42MDc3IDMuNTQ3OTZDMTIuNTI0NyAzLjc0ODEzIDEyLjQwMzIgMy45MzAxNyAxMi4yNSA0LjA4MzM4TDQuMzc1IDExLjk1ODRMMS4xNjY2NyAxMi44MzM0TDIuMDQxNjcgOS42MjUwNEw5LjkxNjY3IDEuNzUwMDRaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nRmllbGQoc3RvcmU/LnN0b3JlSWQsICd6b25lQ2FtZXJhQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZWRpdC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5nRmllbGRbZ2V0RmllbGRFZGl0S2V5KHN0b3JlPy5zdG9yZUlkLCAnem9uZUNhbWVyYUNvdW50JyldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlRmllbGRFZGl0KHN0b3JlLCAnem9uZUNhbWVyYUNvdW50JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjYW5jZWxGaWVsZEVkaXQoc3RvcmUsICd6b25lQ2FtZXJhQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LXN1Y2Nlc3NcIiAoY2xpY2spPVwic2F2ZUZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDYW1lcmFDb3VudCcpXCIgdGl0bGU9XCJTYXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMuMzMzNCA0TDYuMDAwMDggMTEuMzMzM0wyLjY2Njc1IDhcIiBzdHJva2U9XCIjMTJCNzZBXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJjYW5jZWxGaWVsZEVkaXQoc3RvcmUsICd6b25lQ2FtZXJhQ291bnQnKVwiIHRpdGxlPVwiQ2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNEw0IDEyTTQgNEwxMiAxMlwiIHN0cm9rZT1cIiNGMDQ0MzhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0aW5nRmllbGQoc3RvcmU/LnN0b3JlSWQsICd6b25lQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzdG9yZT8uem9uZUNvdW50IHx8IDAgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZWRpdC1pY29uXCIgKGNsaWNrKT1cInN0YXJ0RmllbGRFZGl0KHN0b3JlLCAnem9uZUNvdW50JylcIiB0aXRsZT1cIkVkaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjkxNjY3IDEuNzUwMDRDMTAuMDY5OCAxLjU5NjgzIDEwLjI1MTggMS40NzUzMyAxMC40NTE5IDEuMzkyMzhDMTAuNjUyMiAxLjMwOTQ2IDEwLjg2NjcgMS4yNjY3OSAxMS4wODMzIDEuMjY2NzlDMTEuMyAxLjI2Njc5IDExLjUxNDUgMS4zMDk0NiAxMS43MTQ4IDEuMzkyMzhDMTEuOTE0OSAxLjQ3NTMzIDEyLjA5NjkgMS41OTY4MyAxMi4yNSAxLjc1MDA0QzEyLjQwMzIgMS45MDMyNSAxMi41MjQ3IDIuMDg1MjkgMTIuNjA3NyAyLjI4NTQ2QzEyLjY5MDYgMi40ODU2NyAxMi43MzMzIDIuNzAwMTMgMTIuNzMzMyAyLjkxNjcxQzEyLjczMzMgMy4xMzMyOSAxMi42OTA2IDMuMzQ3NzUgMTIuNjA3NyAzLjU0Nzk2QzEyLjUyNDcgMy43NDgxMyAxMi40MDMyIDMuOTMwMTcgMTIuMjUgNC4wODMzOEw0LjM3NSAxMS45NTg0TDEuMTY2NjcgMTIuODMzNEwyLjA0MTY3IDkuNjI1MDRMOS45MTY2NyAxLjc1MDA0WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjE2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZ0ZpZWxkKHN0b3JlPy5zdG9yZUlkLCAnem9uZUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGVkaXQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGluZ0ZpZWxkW2dldEZpZWxkRWRpdEtleShzdG9yZT8uc3RvcmVJZCwgJ3pvbmVDb3VudCcpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZUZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDb3VudCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiY2FuY2VsRmllbGRFZGl0KHN0b3JlLCAnem9uZUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1zdWNjZXNzXCIgKGNsaWNrKT1cInNhdmVGaWVsZEVkaXQoc3RvcmUsICd6b25lQ291bnQnKVwiIHRpdGxlPVwiU2F2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzLjMzMzQgNEw2LjAwMDA4IDExLjMzMzNMMi42NjY3NSA4XCIgc3Ryb2tlPVwiIzEyQjc2QVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwiY2FuY2VsRmllbGRFZGl0KHN0b3JlLCAnem9uZUNvdW50JylcIiB0aXRsZT1cIkNhbmNlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDRMNCAxMk00IDRMMTIgMTJcIiBzdHJva2U9XCIjRjA0NDM4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBzdG9yZT8uZWRnZWZpcnN0RmlsZURhdGUgPyAoc3RvcmU/LmVkZ2VmaXJzdEZpbGVEYXRlIHwgZGF0ZTogJ2RkIE1NTSB5eXl5JykgOiAn4oCUJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBzdG9yZT8ucHJvZHVjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtYi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21hbGwgdGV4dC1tdXRlZFwiPnt7IGZvcm1hdFByb2R1Y3ROYW1lKHByb2R1Y3Q/LnByb2R1Y3ROYW1lKSB9fTo8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWaWV3IG1vZGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0aW5nKHN0b3JlPy5zdG9yZUlkLCBwcm9kdWN0Py5wcm9kdWN0TmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcHJvZHVjdD8ud29ya2luZ2RheXMgfHwgMCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0LWljb25cIiAoY2xpY2spPVwic3RhcnRFZGl0KHN0b3JlLCBwcm9kdWN0KVwiIHRpdGxlPVwiRWRpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTE2NjcgMS43NTAwNEMxMC4wNjk4IDEuNTk2ODMgMTAuMjUxOCAxLjQ3NTMzIDEwLjQ1MTkgMS4zOTIzOEMxMC42NTIyIDEuMzA5NDYgMTAuODY2NyAxLjI2Njc5IDExLjA4MzMgMS4yNjY3OUMxMS4zIDEuMjY2NzkgMTEuNTE0NSAxLjMwOTQ2IDExLjcxNDggMS4zOTIzOEMxMS45MTQ5IDEuNDc1MzMgMTIuMDk2OSAxLjU5NjgzIDEyLjI1IDEuNzUwMDRDMTIuNDAzMiAxLjkwMzI1IDEyLjUyNDcgMi4wODUyOSAxMi42MDc3IDIuMjg1NDZDMTIuNjkwNiAyLjQ4NTY3IDEyLjczMzMgMi43MDAxMyAxMi43MzMzIDIuOTE2NzFDMTIuNzMzMyAzLjEzMzI5IDEyLjY5MDYgMy4zNDc3NSAxMi42MDc3IDMuNTQ3OTZDMTIuNTI0NyAzLjc0ODEzIDEyLjQwMzIgMy45MzAxNyAxMi4yNSA0LjA4MzM4TDQuMzc1IDExLjk1ODRMMS4xNjY2NyAxMi44MzM0TDIuMDQxNjcgOS42MjUwNEw5LjkxNjY3IDEuNzUwMDRaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRWRpdCBtb2RlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nKHN0b3JlPy5zdG9yZUlkLCBwcm9kdWN0Py5wcm9kdWN0TmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGVkaXQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGluZ1Byb2R1Y3RbZ2V0RWRpdEtleShzdG9yZT8uc3RvcmVJZCwgcHJvZHVjdD8ucHJvZHVjdE5hbWUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZVdvcmtpbmdEYXlzKHN0b3JlLCBwcm9kdWN0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEVkaXQoc3RvcmUsIHByb2R1Y3QpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtc3VjY2Vzc1wiIChjbGljayk9XCJzYXZlV29ya2luZ0RheXMoc3RvcmUsIHByb2R1Y3QpXCIgdGl0bGU9XCJTYXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMuMzMzNCA0TDYuMDAwMDggMTEuMzMzM0wyLjY2Njc1IDhcIiBzdHJva2U9XCIjMTJCNzZBXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJjYW5jZWxFZGl0KHN0b3JlLCBwcm9kdWN0KVwiIHRpdGxlPVwiQ2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNEw0IDEyTTQgNEwxMiAxMlwiIHN0cm9rZT1cIiNGMDQ0MzhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgW25nQ2xhc3NdPVwic3RvcmU/LnN0YXR1cyA9PT0gJ2FjdGl2ZScgPyAnYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2VzcycgOiAnYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0b3JlPy5zdGF0dXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQZXItcHJvZHVjdCBicmVha2Rvd24gKFRyYWZmaWM6IOKCuXgsIFpvbmU6IOKCuXkg4oCmKSArIHRvdGFsLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGIgb2Ygc3RvcmU/Lmludm9pY2VCcmVha2Rvd25cIiBjbGFzcz1cImludi1icmVha2Rvd24tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnYtYnJlYWtkb3duLWxhYmVsXCI+e3sgYi5sYWJlbCB9fTo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3RvcmVDdXJyZW5jeVN5bWJvbChzdG9yZSkgfX17eyAoYi5hbW91bnQgfHwgMCkgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBpbnYtYnJlYWtkb3duLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzdG9yZUN1cnJlbmN5U3ltYm9sKHN0b3JlKSB9fXt7IChzdG9yZT8uaW52b2ljZUFtb3VudCB8fCAwKSB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXN0b3JlTG9hZGluZyAmJiAhc3RvcmVOb0RhdGFcIj5cbiAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBjbGFzcz1cInRleHQtc3RhcnRcIiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXG4gICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
458
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGFpbHktcHJpY2luZy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtYmlsbGluZy9zcmMvbGliL2NvbXBvbmVudHMvZGFpbHktcHJpY2luZy9kYWlseS1wcmljaW5nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RhbmdvLW1hbmFnZS1iaWxsaW5nL3NyYy9saWIvY29tcG9uZW50cy9kYWlseS1wcmljaW5nL2RhaWx5LXByaWNpbmcuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFxQixTQUFTLEVBQUUsS0FBSyxFQUErQyxNQUFNLGVBQWUsQ0FBQztBQUNqSCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUkxQyxPQUFPLEVBQUUsNkJBQTZCLEVBQUUsTUFBTSwyREFBMkQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwrQ0FBK0MsQ0FBQzs7Ozs7OztBQU94RixNQUFNLE9BQU8scUJBQXFCO0lBdUR0QjtJQUNBO0lBQ0E7SUFDQTtJQXpETyxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVqQyxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBRS9CLEdBQUcsQ0FBTTtJQUNULGNBQWMsR0FBWSxLQUFLLENBQUM7SUFFaEMsV0FBVztJQUNYLGdCQUFnQixHQUFRLEVBQUUsQ0FBQztJQUUzQix5RUFBeUU7SUFDekUsY0FBYyxHQUFRLEVBQUUsQ0FBQztJQUN6Qix3RkFBd0Y7SUFDeEYsWUFBWSxHQUFRLEVBQUUsQ0FBQztJQUV2QixjQUFjO0lBQ2QsVUFBVSxHQUFXLEVBQUUsQ0FBQztJQUV4Qiw2RUFBNkU7SUFDN0UseUVBQXlFO0lBQ3pFLFlBQVksR0FBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3BDLGlCQUFpQixHQUFH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QUFhLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNyRixJQUFJLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDYixJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUM7Z0JBQUUsR0FBRyxHQUFHLFNBQVMsQ0FBQztpQkFDN0IsSUFBSSxDQUFDLEtBQUssQ0FBQztnQkFBRSxHQUFHLEdBQUcsZ0JBQWdCLENBQUM7aUJBQ3BDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUFFLEdBQUcsR0FBRyxnQkFBZ0IsQ0FBQztZQUMvRCxPQUFPO2dCQUNMLEdBQUcsQ0FBQztnQkFDSixVQUFVLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3pELEdBQUc7Z0JBQ0gsV0FBVztnQkFDWCxXQUFXO2dCQUNYLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLElBQUksRUFBRTthQUNuRSxDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsMkJBQTJCO1FBQ3pCLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQztJQUM3RCxDQUFDO3dHQWxlVSxxQkFBcUI7NEZBQXJCLHFCQUFxQixnSENibEMsdXRpQ0FnYk07OzRGRG5hTyxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBQ0UsbUJBQW1CO3FLQU9wQixRQUFRO3NCQUFoQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3ksIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmdiTW9kYWwgfSBmcm9tICdAbmctYm9vdHN0cmFwL25nLWJvb3RzdHJhcCc7XG5pbXBvcnQgeyBCaWxsaW5nU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZSc7XG5pbXBvcnQgeyBUb2FzdFNlcnZpY2UgfSBmcm9tICd0YW5nby1hcHAtdWktc2hhcmVkJztcbmltcG9ydCB7IEdlbmVyYXRlSW52b2ljZU1vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9nZW5lcmF0ZS1pbnZvaWNlLW1vZGFsL2dlbmVyYXRlLWludm9pY2UtbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IE5ld1N0b3Jlc01vZGFsQ29tcG9uZW50IH0gZnJvbSAnLi9uZXctc3RvcmVzLW1vZGFsL25ldy1zdG9yZXMtbW9kYWwuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnbGliLWRhaWx5LXByaWNpbmcnLFxuICB0ZW1wbGF0ZVVybDogJy4vZGFpbHktcHJpY2luZy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsOiAnLi9kYWlseS1wcmljaW5nLmNvbXBvbmVudC5zY3NzJ1xufSlcbmV4cG9ydCBjbGFzcyBEYWlseVByaWNpbmdDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XG5cbiAgQElucHV0KCkgY2xpZW50SWQ6IHN0cmluZyA9ICcnO1xuXG4gIGxlbjogYW55O1xuICBzZWFyY2hEaXNhYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIC8vIE1ldGFkYXRhXG4gIGRhaWx5UHJpY2luZ0luZm86IGFueSA9IHt9O1xuXG4gIC8vIEVkaXQgdHJhY2tpbmc6IGtleSA9ICdzdG9yZUlkX3Byb2R1Y3ROYW1lJywgdmFsdWUgPSBlZGl0ZWQgd29ya2luZ2RheXNcbiAgZWRpdGluZ1Byb2R1Y3Q6IGFueSA9IHt9O1xuICAvLyBFZGl0IHRyYWNraW5nIGZvciBzdG9yZS1sZXZlbCBmaWVsZHMgKHRyYWZmaWNDYW1lcmFDb3VudCwgem9uZUNhbWVyYUNvdW50LCB6b25lQ291bnQpXG4gIGVkaXRpbmdGaWVsZDogYW55ID0ge307XG5cbiAgLy8gRGF0ZSBmaWx0ZXJcbiAgZGF0ZUZpbHRlcjogc3RyaW5nID0gJyc7XG5cbiAgLy8gRmlsdGVyIOKAlCBtdWx0aS1zZWxlY3Qgc3RhdHVzLiBEZWZhdWx0IHRvIEFjdGl2ZSBzbyB0aGUgdGFibGUgb3BlbnMgc2hvd2luZ1xuICAvLyBvbmx5IGFjdGl2ZSBzdG9yZXM7IHRoZSBkcm9wZG93biBtYXJrcyBBY3RpdmUgY2hlY2tlZCB0byByZWZsZWN0IHRoYXQuXG4gIHN0YXR1c0ZpbHRlcjogc3RyaW5nW10gPSBbJ2FjdGl2ZSddO1xuICBzdG9yZUZpbHRlck9iamVjdCA9IFtcbiAgICB7IERlc2NyaXB0aW9uOiAnU3RhdHVzJywgdHlwZTogJ211bHRpJywgSXNzdWVzOiBbeyBpZDogJ2FjdGl2ZScsIHRleHQ6ICdBY3RpdmUnLCBjaGVja2VkOiB0cnVlIH0sIHsgaWQ6ICdkZWFjdGl2ZScsIHRleHQ6ICdEZWFjdGl2ZScgfV0gfSxcbiAgXTtcblxuICAvLyBNb250aGx5IEJpbGxpbmcgU3VtbWFyeSDigJQgZGVyaXZlZCBmcm9tIGludm9pY2UgaGlzdG9yeSBmb3IgdGhlIGJyYW5kLlxuICAvLyBOZXdlc3QgZmlyc3Q7IGVhY2ggcm93IGNhcnJpZXMgcHJpb3ItbW9udGggZGVsdGFzIGZvciB0aGUgdHJlbmQgaW5kaWNhdG9yLlxuICBtb250aGx5QmlsbGluZ1N1bW1hcnk6IGFueVtdID0gW107XG4gIG1vbnRobHlTdW1tYXJ5RXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAvLyBUYWJsZVxuICBzdG9yZUxpc3Q6IGFueSA9IFtdO1xuICBzdG9yZUxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBzdG9yZU5vRGF0YTogYm9vbGVhbiA9IGZhbHNlO1xuICB0b3RhbEl0ZW1zOiBudW1iZXIgPSAwO1xuICBwYWdlU2l6ZTogbnVtYmVyID0gMTA7XG4gIGN1cnJlbnRQYWdlOiBudW1iZXIgPSAxO1xuICBpdGVtc1BlclBhZ2U6IG51bWJlciA9IDEwO1xuICBwYWdpbmF0aW9uU2l6ZXMgPSBbMTAsIDIwLCAzMF07XG4gIHNvcnRDb2x1bU5hbWU6IHN0cmluZyA9ICdzdG9yZU5hbWUnO1xuICBzb3J0Qnk6IG51bWJlciA9IDE7XG4gIGdlbmVyYXRpbmdJbnZvaWNlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgLy8gQWRkaXRpb25hbCAobm9uLXN0YW5kYXJkKSBwcm9kdWN0cyBhdmFpbGFibGUgb25seSBmb3Igc3BlY2lmaWMgY2xpZW50c1xuICAvLyAoY3VycmVudGx5IGNsaWVudElkIDExKS4gRW1wdHkgZm9yIGV2ZXJ5b25lIGVsc2UgLT4gdGhlIHRhYmxlIGlzIGhpZGRlbi5cbiAgYWRkaXRpb25hbFByb2R1Y3RzOiBhbnlbXSA9IFtdO1xuICBhZGRpdGlvbmFsUHJvZHVjdHNDdXJyZW5jeTogc3RyaW5nID0gJ2lucic7XG5cbiAgLy8gQ291bnQgKyBsaXN0IG9mIHN0b3JlcyBvbmJvYXJkZWQgdGhpcyBtb250aCAoZmlyc3QgZmlsZSBkYXRlIGluIHRoZSBjdXJyZW50XG4gIC8vIG1vbnRoKS4gVGhlIGxpc3QgZmVlZHMgdGhlIFwiVmlldyBTdG9yZXNcIiBwb3B1cC5cbiAgbmV3bHlPbmJvYXJkZWRTdG9yZXM6IG51bWJlciA9IDA7XG4gIG5ld2x5T25ib2FyZGVkU3RvcmVMaXN0OiBhbnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgYmlsbGluZ1NlcnZpY2U6IEJpbGxpbmdTZXJ2aWNlLFxuICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIHByaXZhdGUgdG9hc3Q6IFRvYXN0U2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsU2VydmljZTogTmdiTW9kYWxcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgICAgIHRoaXMubG9hZEFkZGl0aW9uYWxQcm9kdWN0cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICBpZiAoY2hhbmdlc1snY2xpZW50SWQnXSAmJiAhY2hhbmdlc1snY2xpZW50SWQnXS5maXJzdENoYW5nZSAmJiB0aGlzLmNsaWVudElkKSB7XG4gICAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgICAgIHRoaXMubG9hZEFkZGl0aW9uYWxQcm9kdWN0cygpO1xuICAgIH1cbiAgfVxuXG4gIC8vIEdyYW5kIHRvdGFsIGFjcm9zcyBhbGwgYWRkaXRpb25hbC1wcm9kdWN0IHJvd3MuXG4gIGdldCBhZGRpdGlvbmFsUHJvZHVjdHNUb3RhbCgpOiBudW1iZXIge1xuICAgIHJldHVybiAodGhpcy5hZGRpdGlvbmFsUHJvZHVjdHMgfHwgW10pLnJlZHVjZSgoYSwgcCkgPT4gYSArIChOdW1iZXIocC50b3RhbCkgfHwgMCksIDApO1xuICB9XG5cbiAgLy8gUHJvZHVjdHMgdGhhdCBoYXZlIGEgYmFja2VuZCBkZXRhaWxlZCBleHBvcnQuIEtleWVkIGJ5IHRoZSBwcm9kdWN0IGtleSB0aGVcbiAgLy8gZXhwb3J0IGVuZHBvaW50IHVuZGVyc3RhbmRzLiBBZGQgbW9yZSBhcyB0aGVpciBxdWVyaWVzIGFyZSB3aXJlZCB1cC5cbiAgcHJpdmF0ZSByZWFkb25seSBleHBvcnRhYmxlUHJvZHVjdHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7XG4gICAgJ2V5ZXRlc3QnOiAnZXlldGVzdCcsXG4gICAgJ3BsYW5vZ3JhbSc6ICdwbGFub2dyYW0nLFxuICAgICdhaSBtYW5hZ2VyJzogJ2FpbWFuYWdlcicsXG4gICAgJ3Ztcyc6ICd2bXMnLFxuICAgICdydW4gYWknOiAncnVuYWknLFxuICAgICdyZW1vdGUgb3B0dW0nOiAncmVtb3Rlb3B0dW0nLFxuICB9O1xuXG4gIGNhbkV4cG9ydEFkZGl0aW9uYWxQcm9kdWN0KHByb2R1Y3ROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gISF0aGlzLmV4cG9ydGFibGVQcm9kdWN0c1socHJvZHVjdE5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCldO1xuICB9XG5cbiAgZXhwb3J0QWRkaXRpb25hbFByb2R1Y3QocHJvZHVjdE5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZXhwb3J0YWJsZVByb2R1Y3RzWyhwcm9kdWN0TmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKV07XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgLy8gUGFzcyB0b2RheSdzIGRhdGUgKFlZWVktTU0tREQpIOKAlCB1c2VkIGJ5IGRheS1zY29wZWQgcHJvZHVjdHMgKFJlbW90ZSBPcHR1bSkuXG4gICAgY29uc3QgdG9kYXkgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IHRvZGF5U3RyID0gYCR7dG9kYXkuZ2V0RnVsbFllYXIoKX0tJHtTdHJpbmcodG9kYXkuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJyl9LSR7U3RyaW5nKHRvZGF5LmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKX1gO1xuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuYWRkaXRpb25hbFByb2R1Y3RFeHBvcnQodGhpcy5jbGllbnRJZCwga2V5LCB0b2RheVN0cilcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcbiAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBBcnJheUJ1ZmZlcikgPT4ge1xuICAgICAgICAgIC8vIEEgcmVhbCAueGxzeCBpcyBhIHppcCDigJQgaXRzIGZpcnN0IHR3byBieXRlcyBhcmUgJ1BLJyAoMHg1MCAweDRCKS5cbiAgICAgICAgICAvLyBBIDIwNC9lbXB0eSBvciBKU09OIGVycm9yIGJvZHkgaXMgTk9ULCBhbmQgc2F2aW5nIGl0IHByb2R1Y2VzIGFcbiAgICAgICAgICAvLyBcImNvcnJ1cHRlZFwiIGZpbGUuIEd1YXJkIHNvIHdlIG9ubHkgc2F2ZSBhIGdlbnVpbmUgd29ya2Jvb2suXG4gICAgICAgICAgY29uc3QgYnl0ZXMgPSByZXMgPyBuZXcgVWludDhBcnJheShyZXMpIDogbmV3IFVpbnQ4QXJyYXkoKTtcbiAgICAgICAgICBjb25zdCBpc1hsc3ggPSBieXRlcy5sZW5ndGggPiAxICYmIGJ5dGVzWzBdID09PSAweDUwICYmIGJ5dGVzWzFdID09PSAweDRiO1xuICAgICAgICAgIGlmICghaXNYbHN4KSB7XG4gICAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ05vIGRhdGEgdG8gZXhwb3J0Jyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuYmlsbGluZ1NlcnZpY2Uuc2F2ZUFzRXhjZWxGaWxlKHJlcywgYCR7cHJvZHVjdE5hbWV9LSR7dGhpcy5jbGllbnRJZH1gKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICB0aGlzLnRvYXN0LmdldEVycm9yVG9hc3QoJ0V4cG9ydCBmYWlsZWQnKTtcbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICB9XG5cbiAgLy8gRmV0Y2ggdGhlIGFkZGl0aW9uYWwtcHJvZHVjdHMgdGFibGUgZm9yIHRoaXMgY2xpZW50LiBCYWNrZW5kIHJldHVybnMgYW5cbiAgLy8gZW1wdHkgbGlzdCBmb3IgYW55IGNsaWVudCB0aGF0IGhhcyBub25lIChzbyB0aGUgdGFibGUganVzdCB3b24ndCByZW5kZXIpLlxuICBsb2FkQWRkaXRpb25hbFByb2R1Y3RzKCkge1xuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuYWRkaXRpb25hbFByb2R1Y3RzKHRoaXMuY2xpZW50SWQpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmFkZGl0aW9uYWxQcm9kdWN0cyA9IHJlcz8uZGF0YT8ucHJvZHVjdHMgfHwgW107XG4gICAgICAgIHRoaXMuYWRkaXRpb25hbFByb2R1Y3RzQ3VycmVuY3kgPSByZXM/LmRhdGE/LmN1cnJlbmN5IHx8ICdpbnInO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLmFkZGl0aW9uYWxQcm9kdWN0cyA9IFtdO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICB9XG5cbiAgbG9hZERhaWx5UHJpY2luZygpIHtcbiAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gZmFsc2U7XG4gICAgdGhpcy5zdG9yZUxvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuc3RvcmVOb0RhdGEgPSBmYWxzZTtcblxuICAgIGxldCBmaWx0ZXJzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge1xuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBsaW1pdDogdGhpcy5wYWdlU2l6ZSxcbiAgICAgIG9mZnNldDogdGhpcy5jdXJyZW50UGFnZSxcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmxlbixcbiAgICAgIHNvcnRDb2x1bU5hbWU6IHRoaXMuc29ydENvbHVtTmFtZSxcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnksXG4gICAgICBzdGF0dXNGaWx0ZXI6IHRoaXMuc3RhdHVzRmlsdGVyLFxuICAgICAgZGF0ZUZpbHRlcjogdGhpcy5kYXRlRmlsdGVyIHx8ICcnLFxuICAgICAgZXhwb3J0OiBmYWxzZVxuICAgIH07XG5cbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmxhdGVzdERhaWx5UHJpY2luZyhmaWx0ZXJzKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChlKSA9PiB7XG4gICAgICAgIC8vIFRoZSBNb250aGx5IEJpbGxpbmcgU3VtbWFyeSBjb21lcyBmcm9tIGludm9pY2UgaGlzdG9yeSwgbm90IHRoZSBzdG9yZVxuICAgICAgICAvLyByb3dzIOKAlCBhcHBseSBpdCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHN0b3JlIGxpc3QgaXMgZW1wdHksIHNvIGl0XG4gICAgICAgIC8vIHN0aWxsIHNob3dzIHdoZW4gdGhlIGZpbHRlcmVkIHN0b3JlIHRhYmxlIGhhcyBubyByb3dzLlxuICAgICAgICB0aGlzLm1vbnRobHlCaWxsaW5nU3VtbWFyeSA9IHRoaXMuZGVjb3JhdGVNb250aGx5U3VtbWFyeShlPy5kYXRhPy5tb250aGx5QmlsbGluZ1N1bW1hcnkgfHwgW10pO1xuICAgICAgICAvLyBOZXdseSBvbmJvYXJkZWQgY291bnQvbGlzdCBpcyBpbmRlcGVuZGVudCBvZiB0aGUgc3RvcmUgdGFibGUnc1xuICAgICAgICAvLyBmaWx0ZXJzLCBzbyBjYXB0dXJlIGl0IHdoZXRoZXIgb3Igbm90IHRoZSBmaWx0ZXJlZCBzdG9yZSBsaXN0IGhhcyByb3dzLlxuICAgICAgICB0aGlzLm5ld2x5T25ib2FyZGVkU3RvcmVzID0gZT8uZGF0YT8ubmV3bHlPbmJvYXJkZWRTdG9yZXMgfHwgMDtcbiAgICAgICAgdGhpcy5uZXdseU9uYm9hcmRlZFN0b3JlTGlzdCA9IGU/LmRhdGE/Lm5ld2x5T25ib2FyZGVkU3RvcmVMaXN0IHx8IFtdO1xuXG4gICAgICAgIGlmIChlPy5kYXRhPy5jb3VudCkge1xuICAgICAgICAgIHRoaXMuc3RvcmVMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5zdG9yZU5vRGF0YSA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuc3RvcmVMaXN0ID0gZS5kYXRhPy5kYXRhO1xuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IGUuZGF0YT8uY291bnQ7XG5cbiAgICAgICAgICB0aGlzLmRhaWx5UHJpY2luZ0luZm8gPSB7XG4gICAgICAgICAgICBicmFuZE5hbWU6IGUuZGF0YT8uYnJhbmROYW1lIHx8ICcnLFxuICAgICAgICAgICAgZGF0ZVN0cmluZzogZS5kYXRhPy5kYXRlU3RyaW5nIHx8ICcnLFxuICAgICAgICAgICAgZGF0ZUlTTzogZS5kYXRhPy5kYXRlSVNPIHx8ICcnLFxuICAgICAgICAgICAgYWN0aXZlU3RvcmVzOiBlLmRhdGE/LmFjdGl2ZVN0b3JlcyB8fCAwLFxuICAgICAgICAgICAgYWNjb3VudFR5cGU6IGUuZGF0YT8uYWNjb3VudFR5cGUgfHwgJycsXG4gICAgICAgICAgICBzdGF0dXM6IGUuZGF0YT8uc3RhdHVzIHx8ICcnLFxuICAgICAgICAgICAgcHJvUmF0ZTogZS5kYXRhPy5wcm9SYXRlIHx8ICcnLFxuICAgICAgICAgICAgY2xpZW50SWQ6IGUuZGF0YT8uY2xpZW50SWQgfHwgJydcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5zdG9yZUxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgICB0aGlzLnN0b3JlTm9EYXRhID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNlYXJjaERpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAodGhpcy5sZW4/Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5zZWFyY2hEaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnN0b3JlTGlzdCA9IFtdO1xuICAgICAgICAgIHRoaXMudG90YWxJdGVtcyA9IDA7XG4gICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICB0aGlzLnN0b3JlTG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0b3JlTm9EYXRhID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zdG9yZUxpc3QgPSBbXTtcbiAgICAgICAgdGhpcy50b3RhbEl0ZW1zID0gMDtcbiAgICAgICAgdGhpcy5tb250aGx5QmlsbGluZ1N1bW1hcnkgPSBbXTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBvbkRhdGVGaWx0ZXIoZXZlbnQ6IGFueSkge1xuICAgIHRoaXMuZGF0ZUZpbHRlciA9IGV2ZW50Py50YXJnZXQ/LnZhbHVlIHx8ICcnO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgY2xlYXJEYXRlRmlsdGVyKCkge1xuICAgIHRoaXMuZGF0ZUZpbHRlciA9ICcnO1xuICAgIHRoaXMuY3VycmVudFBhZ2UgPSAxO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgc2VhcmNoRmllbGQoKSB7XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gIH1cblxuICBhcHBseVN0b3JlRmlsdGVycyhldmVudDogYW55KSB7XG4gICAgLy8gTXVsdGktc2VsZWN0IFN0YXR1cyDigJQgbGliLWZpbHRlcnMgZW1pdHMgZWFjaCBncm91cCdzIHNlbGVjdGVkIG9wdGlvbnMgYXNcbiAgICAvLyBhbiBBUlJBWSB1bmRlciBJc3N1ZXMgKEFwcGx5IHNldHMgSXNzdWVzID0gc2VsZWN0ZWRWYWx1ZXNBcnJheVtpbmRleF0pLlxuICAgIC8vIENvbGxlY3QgZXZlcnkgc2VsZWN0ZWQgaWQsIHRvbGVyYXRpbmcgYm90aCBhcnJheSBhbmQgc2luZ2xlLW9iamVjdCBzaGFwZXMuXG4gICAgY29uc3Qgc3RhdHVzZXM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGV2ZW50Py5sZW5ndGgpIHtcbiAgICAgIGV2ZW50LmZvckVhY2goKGVsZW1lbnQ6IGFueSkgPT4ge1xuICAgICAgICBpZiAoZWxlbWVudC5EZXNjcmlwdGlvbiA9PT0gJ1N0YXR1cycpIHtcbiAgICAgICAgICBjb25zdCBpc3N1ZXMgPSBBcnJheS5pc0FycmF5KGVsZW1lbnQuSXNzdWVzKSA/IGVsZW1lbnQuSXNzdWVzIDogKGVsZW1lbnQuSXNzdWVzID8gW2VsZW1lbnQuSXNzdWVzXSA6IFtdKTtcbiAgICAgICAgICBpc3N1ZXMuZm9yRWFjaCgoaTogYW55KSA9PiB7IGlmIChpPy5pZCkgc3RhdHVzZXMucHVzaChpLmlkKTsgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnN0YXR1c0ZpbHRlciA9IFsuLi5uZXcgU2V0KHN0YXR1c2VzKV07XG4gICAgdGhpcy5jdXJyZW50UGFnZSA9IDE7XG4gICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gIH1cblxuICBzb3J0RGF0YShjb2x1bW46IHN0cmluZykge1xuICAgIHRoaXMuc29ydENvbHVtTmFtZSA9IGNvbHVtbjtcbiAgICB0aGlzLnNvcnRCeSAqPSAtMTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLmxvYWREYWlseVByaWNpbmcoKTtcbiAgfVxuXG4gIG9uUGFnZUNoYW5nZShwYWdlT2Zmc2V0OiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFyc2VJbnQocGFnZU9mZnNldCk7XG4gICAgdGhpcy5sb2FkRGFpbHlQcmljaW5nKCk7XG4gIH1cblxuICBvblBhZ2VTaXplQ2hhbmdlKHBhZ2VTaXplOiBhbnkpIHtcbiAgICB0aGlzLmN1cnJlbnRQYWdlID0gMTtcbiAgICB0aGlzLnBhZ2VTaXplID0gcGFyc2VJbnQocGFnZVNpemUpO1xuICAgIHRoaXMubG9hZERhaWx5UHJpY2luZygpO1xuICB9XG5cbiAgb25FeHBvcnQoKSB7XG4gICAgbGV0IGZpbHRlcnM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7XG4gICAgICBjbGllbnRJZDogdGhpcy5jbGllbnRJZCxcbiAgICAgIHNlYXJjaFZhbHVlOiB0aGlzLmxlbixcbiAgICAgIHNvcnRDb2x1bU5hbWU6IHRoaXMuc29ydENvbHVtTmFtZSxcbiAgICAgIHNvcnRCeTogdGhpcy5zb3J0QnksXG4gICAgICBzdGF0dXNGaWx0ZXI6IHRoaXMuc3RhdHVzRmlsdGVyLFxuICAgICAgZGF0ZUZpbHRlcjogdGhpcy5kYXRlRmlsdGVyIHx8ICcnLFxuICAgICAgZXhwb3J0OiB0cnVlXG4gICAgfTtcblxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UubGF0ZXN0RGFpbHlQcmljaW5nRXhwb3J0KGZpbHRlcnMpLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKS5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogKHJlcykgPT4ge1xuICAgICAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLnNhdmVBc0V4Y2VsRmlsZShyZXMsICdkYWlseS1wcmljaW5nJyk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdTb21ldGhpbmcgd2VudCBXcm9uZy4uJyk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBnZXRFZGl0S2V5KHN0b3JlSWQ6IHN0cmluZywgcHJvZHVjdE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke3N0b3JlSWR9XyR7cHJvZHVjdE5hbWV9YDtcbiAgfVxuXG4gIGlzRWRpdGluZyhzdG9yZUlkOiBzdHJpbmcsIHByb2R1Y3ROYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5lZGl0aW5nUHJvZHVjdFt0aGlzLmdldEVkaXRLZXkoc3RvcmVJZCwgcHJvZHVjdE5hbWUpXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhcnRFZGl0KHN0b3JlOiBhbnksIHByb2R1Y3Q6IGFueSkge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0RWRpdEtleShzdG9yZS5zdG9yZUlkLCBwcm9kdWN0LnByb2R1Y3ROYW1lKTtcbiAgICAvLyBDb2VyY2UgdG8gYSBudW1iZXIgc28gYSAwIC8gbWlzc2luZyB2YWx1ZSBzdGlsbCBlbnRlcnMgZWRpdCBtb2RlIHdpdGggYVxuICAgIC8vIGRlZmluZWQgdmFsdWUgKHVuZGVmaW5lZCB3b3VsZCBtYWtlIGlzRWRpdGluZygpIHRoaW5rIHdlJ3JlIG5vdCBlZGl0aW5nKS5cbiAgICB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV0gPSBOdW1iZXIocHJvZHVjdC53b3JraW5nZGF5cykgfHwgMDtcbiAgfVxuXG4gIGNhbmNlbEVkaXQoc3RvcmU6IGFueSwgcHJvZHVjdDogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIHByb2R1Y3QucHJvZHVjdE5hbWUpO1xuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV07XG4gIH1cblxuICBzYXZlV29ya2luZ0RheXMoc3RvcmU6IGFueSwgcHJvZHVjdDogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gdGhpcy5nZXRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIHByb2R1Y3QucHJvZHVjdE5hbWUpO1xuICAgIGNvbnN0IG5ld1ZhbHVlID0gTnVtYmVyKHRoaXMuZWRpdGluZ1Byb2R1Y3Rba2V5XSkgfHwgMDtcblxuICAgIC8vIFVuY2hhbmdlZCDihpIganVzdCBjbG9zZSB0aGUgZWRpdG9yIChjb21wYXJlIGFzIG51bWJlcnMgc28gMCB2cyBcIjBcIiBldGMuXG4gICAgLy8gZG9uJ3Qgc2xpcCB0aHJvdWdoKS5cbiAgICBpZiAobmV3VmFsdWUgPT09IChOdW1iZXIocHJvZHVjdC53b3JraW5nZGF5cykgfHwgMCkpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV07XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGNsaWVudElkOiB0aGlzLmNsaWVudElkLFxuICAgICAgZGF0ZVN0cmluZzogdGhpcy5kYWlseVByaWNpbmdJbmZvLmRhdGVTdHJpbmcsXG4gICAgICBzdG9yZUlkOiBzdG9yZS5zdG9yZUlkLFxuICAgICAgcHJvZHVjdE5hbWU6IHByb2R1Y3QucHJvZHVjdE5hbWUsXG4gICAgICB3b3JraW5nZGF5czogbmV3VmFsdWVcbiAgICB9O1xuXG4gICAgdGhpcy5iaWxsaW5nU2VydmljZS51cGRhdGVEYWlseVByaWNpbmdXb3JraW5nRGF5cyhwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgcHJvZHVjdC53b3JraW5nZGF5cyA9IE51bWJlcihuZXdWYWx1ZSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdQcm9kdWN0W2tleV07XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KCdXb3JraW5nIGRheXMgdXBkYXRlZCBzdWNjZXNzZnVsbHknKTtcbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9LFxuICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gdXBkYXRlIHdvcmtpbmcgZGF5cycpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2V0RmllbGRFZGl0S2V5KHN0b3JlSWQ6IHN0cmluZywgZmllbGROYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtzdG9yZUlkfV8ke2ZpZWxkTmFtZX1gO1xuICB9XG5cbiAgaXNFZGl0aW5nRmllbGQoc3RvcmVJZDogc3RyaW5nLCBmaWVsZE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmVkaXRpbmdGaWVsZFt0aGlzLmdldEZpZWxkRWRpdEtleShzdG9yZUlkLCBmaWVsZE5hbWUpXSAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgc3RhcnRGaWVsZEVkaXQoc3RvcmU6IGFueSwgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEZpZWxkRWRpdEtleShzdG9yZS5zdG9yZUlkLCBmaWVsZE5hbWUpO1xuICAgIHRoaXMuZWRpdGluZ0ZpZWxkW2tleV0gPSBzdG9yZVtmaWVsZE5hbWVdIHx8IDA7XG4gIH1cblxuICBjYW5jZWxGaWVsZEVkaXQoc3RvcmU6IGFueSwgZmllbGROYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEZpZWxkRWRpdEtleShzdG9yZS5zdG9yZUlkLCBmaWVsZE5hbWUpO1xuICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuICB9XG5cbiAgc2F2ZUZpZWxkRWRpdChzdG9yZTogYW55LCBmaWVsZE5hbWU6IHN0cmluZykge1xuICAgIGNvbnN0IGtleSA9IHRoaXMuZ2V0RmllbGRFZGl0S2V5KHN0b3JlLnN0b3JlSWQsIGZpZWxkTmFtZSk7XG4gICAgY29uc3QgbmV3VmFsdWUgPSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuXG4gICAgaWYgKG5ld1ZhbHVlID09PSBzdG9yZVtmaWVsZE5hbWVdKSB7XG4gICAgICBkZWxldGUgdGhpcy5lZGl0aW5nRmllbGRba2V5XTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgY2xpZW50SWQ6IHRoaXMuY2xpZW50SWQsXG4gICAgICBkYXRlU3RyaW5nOiB0aGlzLmRhaWx5UHJpY2luZ0luZm8uZGF0ZVN0cmluZyxcbiAgICAgIHN0b3JlSWQ6IHN0b3JlLnN0b3JlSWQsXG4gICAgICBmaWVsZE5hbWU6IGZpZWxkTmFtZSxcbiAgICAgIHZhbHVlOiBOdW1iZXIobmV3VmFsdWUpXG4gICAgfTtcblxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UudXBkYXRlRGFpbHlQcmljaW5nU3RvcmVGaWVsZChwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgc3RvcmVbZmllbGROYW1lXSA9IE51bWJlcihuZXdWYWx1ZSk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmVkaXRpbmdGaWVsZFtrZXldO1xuICAgICAgICBjb25zdCBmaWVsZExhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgdHJhZmZpY0NhbWVyYUNvdW50OiAnVHJhZmZpYyBjYW1lcmEgY291bnQnLCB6b25lQ2FtZXJhQ291bnQ6ICdab25lIGNhbWVyYSBjb3VudCcsIHpvbmVDb3VudDogJ1pvbmUgY291bnQnIH07XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0UHJpbWFyeVRvYXN0KGAke2ZpZWxkTGFiZWxzW2ZpZWxkTmFtZV0gfHwgZmllbGROYW1lfSB1cGRhdGVkIHN1Y2Nlc3NmdWxseWApO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICBjb25zdCBlcnJvckxhYmVsczogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHsgdHJhZmZpY0NhbWVyYUNvdW50OiAndHJhZmZpYyBjYW1lcmEgY291bnQnLCB6b25lQ2FtZXJhQ291bnQ6ICd6b25lIGNhbWVyYSBjb3VudCcsIHpvbmVDb3VudDogJ3pvbmUgY291bnQnIH07XG4gICAgICAgIHRoaXMudG9hc3QuZ2V0RXJyb3JUb2FzdChgRmFpbGVkIHRvIHVwZGF0ZSAke2Vycm9yTGFiZWxzW2ZpZWxkTmFtZV0gfHwgZmllbGROYW1lfWApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgZ2VuZXJhdGVJbnZvaWNlKCkge1xuICAgIGlmICghdGhpcy5jbGllbnRJZCkgcmV0dXJuO1xuICAgIC8vIE9wZW4gdGhlIHBpY2tlciBmaXJzdCDigJQgdGhlIHVzZXIgY2hvb3NlcyB3aGljaCBiaWxsaW5nIGdyb3VwcyB0b1xuICAgIC8vIGdlbmVyYXRlIGZvci4gTW9kYWwgY2xvc2VzIHdpdGggdGhlIGFycmF5IG9mIHNlbGVjdGVkIGdyb3VwIF9pZHNcbiAgICAvLyAob3IgaXMgZGlzbWlzc2VkID0gbm8tb3ApLlxuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihHZW5lcmF0ZUludm9pY2VNb2RhbENvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdtZCcsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2UuY2xpZW50SWQgPSB0aGlzLmNsaWVudElkO1xuICAgIG1vZGFsUmVmLnJlc3VsdC50aGVuKChncm91cElkczogc3RyaW5nW10pID0+IHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheShncm91cElkcykgfHwgZ3JvdXBJZHMubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgICB0aGlzLnJ1bkludm9pY2VHZW5lcmF0aW9uKGdyb3VwSWRzKTtcbiAgICB9KS5jYXRjaCgoKSA9PiB7fSk7XG4gIH1cblxuICAvLyBPcGVuIGEgcG9wdXAgbGlzdGluZyB0aGUgbmV3bHkgb25ib2FyZGVkIHN0b3JlcyAod2l0aCBmaXJzdCBmaWxlIGRhdGUpLlxuICAvLyBUaGUgbGlzdCBpcyBhbHJlYWR5IGxvYWRlZCB3aXRoIHRoZSBwYWdlLCBzbyBubyBleHRyYSBBUEkgY2FsbCBpcyBuZWVkZWQuXG4gIHZpZXdOZXdTdG9yZXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLm5ld2x5T25ib2FyZGVkU3RvcmVMaXN0Lmxlbmd0aCkgcmV0dXJuO1xuICAgIGNvbnN0IG1vZGFsUmVmID0gdGhpcy5tb2RhbFNlcnZpY2Uub3BlbihOZXdTdG9yZXNNb2RhbENvbXBvbmVudCwge1xuICAgICAgY2VudGVyZWQ6IHRydWUsIHNpemU6ICdsZycsIHNjcm9sbGFibGU6IHRydWUsXG4gICAgfSk7XG4gICAgbW9kYWxSZWYuY29tcG9uZW50SW5zdGFuY2Uuc3RvcmVzID0gdGhpcy5uZXdseU9uYm9hcmRlZFN0b3JlTGlzdDtcbiAgfVxuXG4gIHByaXZhdGUgcnVuSW52b2ljZUdlbmVyYXRpb24oZ3JvdXBJZHM6IHN0cmluZ1tdKTogdm9pZCB7XG4gICAgdGhpcy5nZW5lcmF0aW5nSW52b2ljZSA9IHRydWU7XG5cbiAgICBjb25zdCBwYXlsb2FkID0ge1xuICAgICAgYWxsQ2xpZW50OiB0cnVlLFxuICAgICAgY2xpZW50TGlzdDogW3RoaXMuY2xpZW50SWRdLFxuICAgICAgZ3JvdXBJZHMsXG4gICAgfTtcblxuICAgIHRoaXMuYmlsbGluZ1NlcnZpY2UuY3JlYXRlSW52b2ljZShwYXlsb2FkKS5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgdGhpcy5nZW5lcmF0aW5nSW52b2ljZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnRvYXN0LmdldFByaW1hcnlUb2FzdChgSW52b2ljZSBnZW5lcmF0ZWQgZm9yICR7Z3JvdXBJZHMubGVuZ3RofSBiaWxsaW5nIGdyb3VwKHMpYCk7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGluZ0ludm9pY2UgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50b2FzdC5nZXRFcnJvclRvYXN0KCdGYWlsZWQgdG8gZ2VuZXJhdGUgaW52b2ljZScpO1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGZvcm1hdFByb2R1Y3ROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gJyc7XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSgvKFthLXpdKShbQS1aXSkvZywgJyQxICQyJylcbiAgICAgIC5yZXBsYWNlKC9eLi8sIChzdHIpID0+IHN0ci50b1VwcGVyQ2FzZSgpKTtcbiAgfVxuXG4gIC8vIFRha2UgdGhlIHJhdyBhZ2dyZWdhdGlvbiByb3dzIChhbHJlYWR5IHNvcnRlZCBuZXdlc3QtZmlyc3QgYnkgdGhlIEFQSSkgYW5kXG4gIC8vIGF0dGFjaCAoYSkgYSBodW1hbi1yZWFkYWJsZSBtb250aExhYmVsLCAoYikgdGFnIGZvciB0aGUgbGF0ZXN0IHR3byByb3dzXG4gIC8vIChcIkN1cnJlbnRcIiAvIFwiTGFzdCBnZW5lcmF0ZWRcIikgYW5kIChjKSBkZWx0YXMgdnMgdGhlIGltbWVkaWF0ZWx5IG9sZGVyXG4gIC8vIEN1cnJlbmN5IHN5bWJvbCBmb3IgYSBzdG9yZSdzIGludm9pY2UgYW1vdW50IChtYXRjaGVzIHRoZSBiYWNrZW5kJ3NcbiAgLy8gYmFzZXByaWNpbmcgY3VycmVuY3k7IEFFRCByZW5kZXJlZCBhcyB0ZXh0KS5cbiAgc3RvcmVDdXJyZW5jeVN5bWJvbChzdG9yZTogYW55KTogc3RyaW5nIHtcbiAgICBjb25zdCBzeW1ib2xzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0geyBpbnI6ICfigrknLCBkb2xsYXI6ICckJywgc2luZ2Fwb3JlZG9sbGFyOiAnUyQnLCBldXJvOiAn4oKsJywgYWVkOiAnQUVEICcgfTtcbiAgICByZXR1cm4gc3ltYm9sc1soc3RvcmU/Lmludm9pY2VDdXJyZW5jeSB8fCAnaW5yJykudG9Mb3dlckNhc2UoKV0gfHwgJ+KCuSc7XG4gIH1cblxuICAvLyBtb250aCBzbyB0aGUgdGVtcGxhdGUgY2FuIHJlbmRlciB0aGUg4payL+KWvC/ilqwgdHJlbmQgaW5kaWNhdG9ycy5cbiAgcHJpdmF0ZSBkZWNvcmF0ZU1vbnRobHlTdW1tYXJ5KHJvd3M6IGFueVtdKTogYW55W10ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShyb3dzKSB8fCByb3dzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIFtdO1xuICAgIGNvbnN0IG1vbnRoTmFtZXMgPSBbJ0phbicsJ0ZlYicsJ01hcicsJ0FwcicsJ01heScsJ0p1bicsJ0p1bCcsJ0F1ZycsJ1NlcCcsJ09jdCcsJ05vdicsJ0RlYyddO1xuICAgIGNvbnN0IHN5bWJvbHM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gPSB7IGlucjogJ+KCuScsIGRvbGxhcjogJyQnLCBzaW5nYXBvcmVkb2xsYXI6ICdTJCcsIGV1cm86ICfigqwnIH07XG4gICAgY29uc3Qgbm93ID0gbmV3IERhdGUoKTtcbiAgICBjb25zdCBpc0N1cnJlbnQgPSAocjogYW55KSA9PiByLnllYXIgPT09IG5vdy5nZXRGdWxsWWVhcigpICYmIHIubW9udGggPT09IChub3cuZ2V0TW9udGgoKSArIDEpO1xuICAgIHJldHVybiByb3dzLm1hcCgociwgaSkgPT4ge1xuICAgICAgY29uc3QgbmV4dCA9IHJvd3NbaSArIDFdO1xuICAgICAgY29uc3Qgc3RvcmVzRGVsdGEgPSBuZXh0ID8gKHIuc3RvcmVzQmlsbGVkIHx8IDApIC0gKG5leHQuc3RvcmVzQmlsbGVkIHx8IDApIDogbnVsbDtcbiAgICAgIGNvbnN0IGFtb3VudERlbHRhID0gbmV4dCA/IChyLmludm9pY2VBbW91bnQgfHwgMCkgLSAobmV4dC5pbnZvaWNlQW1vdW50IHx8IDApIDogbnVsbDtcbiAgICAgIGxldCB0YWcgPSAnJztcbiAgICAgIGlmIChpc0N1cnJlbnQocikpIHRhZyA9ICdDdXJyZW50JztcbiAgICAgIGVsc2UgaWYgKGkgPT09IDApIHRhZyA9ICdMYXN0IGdlbmVyYXRlZCc7XG4gICAgICBlbHNlIGlmIChpID09PSAxICYmIGlzQ3VycmVudChyb3dzWzBdKSkgdGFnID0gJ0xhc3QgZ2VuZXJhdGVkJztcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLnIsXG4gICAgICAgIG1vbnRoTGFiZWw6IGAke21vbnRoTmFtZXNbKHIubW9udGggfHwgMSkgLSAxXX0gJHtyLnllYXJ9YCxcbiAgICAgICAgdGFnLFxuICAgICAgICBzdG9yZXNEZWx0YSxcbiAgICAgICAgYW1vdW50RGVsdGEsXG4gICAgICAgIGN1cnJlbmN5U3ltYm9sOiBzeW1ib2xzWyhyLmN1cnJlbmN5IHx8ICdpbnInKS50b0xvd2VyQ2FzZSgpXSB8fCAnJyxcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICB0b2dnbGVNb250aGx5U3VtbWFyeUhpc3RvcnkoKTogdm9pZCB7XG4gICAgdGhpcy5tb250aGx5U3VtbWFyeUV4cGFuZGVkID0gIXRoaXMubW9udGhseVN1bW1hcnlFeHBhbmRlZDtcbiAgfVxufSIsIjxkaXYgY2xhc3M9XCJpbnZvaWNlcy1zZWN0aW9uXCI+XG4gICAgPCEtLSBIZWFkZXIgUm93IC0tPlxuICAgIDxkaXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWJldHdlZW4gYWxpZ24taXRlbXMtY2VudGVyIG1iLTNcIj5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyMFwiIGhlaWdodD1cIjIwXCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi42NjY2NyAxMEgxMy4zMzMzTTYuNjY2NjcgNi42NjY2N0gxMy4zMzMzTTYuNjY2NjcgMTMuMzMzM0gxME01IDE3LjVIMTVDMTUuOTIwNSAxNy41IDE2LjY2NjcgMTYuNzUzOCAxNi42NjY3IDE1LjgzMzNWNC4xNjY2N0MxNi42NjY3IDMuMjQ2MTkgMTUuOTIwNSAyLjUgMTUgMi41SDVDNC4wNzk1MyAyLjUgMy4zMzMzMyAzLjI0NjE5IDMuMzMzMzMgNC4xNjY2N1YxNS44MzMzQzMuMzMzMzMgMTYuNzUzOCA0LjA3OTUzIDE3LjUgNSAxNy41WlwiIHN0cm9rZT1cIiMzNDQwNTRcIiBzdHJva2Utd2lkdGg9XCIxLjY3XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmlsbGluZ2hlYWRlclwiPkJpbGxpbmcgQnJlYWtkb3duPC9zcGFuPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYmFkZ2UgYmctbGlnaHQgdGV4dC1kYXJrIG1zLTFcIj57eyB0b3RhbEl0ZW1zIH19IHN0b3Jlczwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtbXV0ZWQgc21hbGwgbXQtMVwiICpuZ0lmPVwiZGFpbHlQcmljaW5nSW5mbz8uZGF0ZVN0cmluZ1wiPlxuICAgICAgICAgICAgICAgIERhdGU6IDxzdHJvbmc+e3sgZGFpbHlQcmljaW5nSW5mbz8uZGF0ZVN0cmluZyB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibXgtMlwiPnw8L3NwYW4+XG4gICAgICAgICAgICAgICAgQWN0aXZlIFN0b3JlczogPHN0cm9uZz57eyBkYWlseVByaWNpbmdJbmZvPy5hY3RpdmVTdG9yZXMgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm14LTJcIj58PC9zcGFuPlxuICAgICAgICAgICAgICAgIEFjY291bnQgVHlwZTogPHN0cm9uZz57eyBkYWlseVByaWNpbmdJbmZvPy5hY2NvdW50VHlwZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtM1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImRhdGVcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZGF0ZS1maWx0ZXJcIlxuICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZGF0ZUZpbHRlclwiXG4gICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwib25EYXRlRmlsdGVyKCRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIkZpbHRlciBieSBkYXRlXCI+XG4gICAgICAgICAgICAgICAgPGJ1dHRvbiAqbmdJZj1cImRhdGVGaWx0ZXJcIiB0eXBlPVwiYnV0dG9uXCIgY2xhc3M9XCJidG4gYnRuLXNtIGJ0bi1vdXRsaW5lLXNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjbGVhckRhdGVGaWx0ZXIoKVwiIHRpdGxlPVwiQ2xlYXIgZGF0ZSBmaWx0ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEwLjUgMy41TDMuNSAxMC41TTMuNSAzLjVMMTAuNSAxMC41XCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJnZW5lcmF0ZUludm9pY2UoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgYWxpZ24taXRlbXMtZW5kIHRleHQtbm93cmFwIGludmhlYWRlclwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFzdG9yZUxpc3QubGVuZ3RoIHx8IGdlbmVyYXRpbmdJbnZvaWNlXCI+XG4gICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAyMCAyMFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNNi42NjY2NyAxMEgxMy4zMzMzTTYuNjY2NjcgNi42NjY2N0gxMy4zMzMzTTYuNjY2NjcgMTMuMzMzM0gxME01IDE3LjVIMTVDMTUuOTIwNSAxNy41IDE2LjY2NjcgMTYuNzUzOCAxNi42NjY3IDE1LjgzMzNWNC4xNjY2N0MxNi42NjY3IDMuMjQ2MTkgMTUuOTIwNSAyLjUgMTUgMi41SDVDNC4wNzk1MyAyLjUgMy4zMzMzMyAzLjI0NjE5IDMuMzMzMzMgNC4xNjY2N1YxNS44MzMzQzMuMzMzMzMgMTYuNzUzOCA0LjA3OTUzIDE3LjUgNSAxNy41WlwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjZmZmXCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xXCI+e3sgZ2VuZXJhdGluZ0ludm9pY2UgPyAnR2VuZXJhdGluZy4uLicgOiAnR2VuZXJhdGUgSW52b2ljZScgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDxidXR0b24gdHlwZT1cImJ1dHRvblwiIChjbGljayk9XCJvbkV4cG9ydCgpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImJ0bi1vdXRsaW5lIGJ0biBhbGlnbi1pdGVtcy1lbmQgdGV4dC1ub3dyYXAgaW52aGVhZGVyXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIXN0b3JlTGlzdC5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDIwIDIwXCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xNy41IDEyLjVWMTUuODMzM0MxNy41IDE2LjI3NTQgMTcuMzI0NCAxNi42OTkzIDE3LjAxMTggMTcuMDExOEMxNi42OTkzIDE3LjMyNDQgMTYuMjc1NCAxNy41IDE1LjgzMzMgMTcuNUg0LjE2NjY3QzMuNzI0NjQgMTcuNSAzLjMwMDcyIDE3LjMyNDQgMi45ODgxNiAxNy4wMTE4QzIuNjc1NTkgMTYuNjk5MyAyLjUgMTYuMjc1NCAyLjUgMTUuODMzM1YxMi41TTE0LjE2NjcgNi42NjY2N0wxMCAyLjVNMTAgMi41TDUuODMzMzMgNi42NjY2N00xMCAyLjVWMTIuNVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJva2U9XCIjMzQ0MDU0XCIgc3Ryb2tlLXdpZHRoPVwiMS42N1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtcy0xXCI+RXhwb3J0PC9zcGFuPlxuICAgICAgICAgICAgPC9idXR0b24+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+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRvb2xiYXJcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXhcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBwb3NpdGlvbi1yZWxhdGl2ZSBteS0xXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic3ZnLWljb24gaW52b2ljZXNlYXJjaCBzdmctaWNvbi0xIHBvc2l0aW9uLWFic29sdXRlIG10LTYgbXMtM1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHJlY3Qgb3BhY2l0eT1cIjAuNVwiIHg9XCIxNy4wMzY1XCIgeT1cIjE1LjEyMjNcIiB3aWR0aD1cIjguMTU1NDZcIiBoZWlnaHQ9XCIyXCIgcng9XCIxXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtPVwicm90YXRlKDQ1IDE3LjAzNjUgMTUuMTIyMylcIiBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9yZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQ9XCJNMTEgMTlDNi41NTU1NiAxOSAzIDE1LjQ0NDQgMyAxMUMzIDYuNTU1NTYgNi41NTU1NiAzIDExIDNDMTUuNDQ0NCAzIDE5IDYuNTU1NTYgMTkgMTFDMTkgMTUuNDQ0NCAxNS40NDQ0IDE5IDExIDE5Wk0xMSA1QzcuNTMzMzMgNSA1IDcuNTMzMzMgNSAxMUM1IDE0LjQ2NjcgNy41MzMzMyAxNyAxMSAxN0MxNC40NjY3IDE3IDE3IDE0LjQ2NjcgMTcgMTFDMTcgNy41MzMzMyAxNC40NjY3IDUgMTEgNVpcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxsPVwiY3VycmVudENvbG9yXCI+PC9wYXRoPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFsobmdNb2RlbCldPVwibGVuXCIgdHlwZT1cInRleHRcIiBjbGFzcz1cImZvcm0tY29udHJvbCBwcy0xNCBpbnZvaWNlc2VhcmNoXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwiU3RvcmUgbmFtZSBvciBJRC4uLlwiIGF1dG9jb21wbGV0ZT1cIm9mZlwiIChjaGFuZ2UpPVwic2VhcmNoRmllbGQoKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VhcmNoRGlzYWJsZWRcIiAvPlxuICAgICAgICAgICAgICAgICAgICA8bGliLWZpbHRlcnMgW2RhdGFPYmplY3RdPVwic3RvcmVGaWx0ZXJPYmplY3RcIiAoYXBwbGllZEZpbHRlcnMpPVwiYXBwbHlTdG9yZUZpbHRlcnMoJGV2ZW50KVwiPjwvbGliLWZpbHRlcnM+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG5cbiAgICA8IS0tIExvYWRpbmcgU2hpbW1lciAtLT5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwic3RvcmVMb2FkaW5nXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJyb3cgbG9hZGVyIGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNoaW1tZXJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwid3JhcHBlclwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3Ryb2tlIGFuaW1hdGUgdGl0bGVcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGxpbmtcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIGRlc2NyaXB0aW9uXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzaGltbWVyXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIndyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0cm9rZSBhbmltYXRlIHRpdGxlXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBsaW5rXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzdHJva2UgYW5pbWF0ZSBkZXNjcmlwdGlvblwiPjwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBObyBEYXRhIC0tPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJzdG9yZU5vRGF0YVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwicm93XCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY29sLWxnLTEyIG1iLTNcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiY2FyZC1ib2R5IGQtZmxleCBqdXN0aWZ5LWNvbnRlbnQtY2VudGVyIGFsaWduLWl0ZW1zLWNlbnRlciBmbGV4LWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICA8aW1nIGNsYXNzPVwiaW1nLXNyYyB3LTI1XCIgc3JjPVwiLi9hc3NldHMvdGFuZ28vSWNvbnMvTm9kYXRhLnN2Z1wiIGFsdD1cIlwiPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPCEtLSBTdG9yZXMgVGFibGUgLS0+XG4gICAgPGRpdiAqbmdJZj1cIiFzdG9yZUxvYWRpbmcgJiYgIXN0b3JlTm9EYXRhXCIgY2xhc3M9XCJ0YWJsZS1yZXNwb25zaXZlXCI+XG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIGFjY29yZGlvbiB0YWJsZSBib3R0b20tYm9yZGVyIHRleHQtbm93cmFwXCI+XG4gICAgICAgICAgICA8dGhlYWQ+XG4gICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnc3RvcmVOYW1lJylcIj5TVE9SRSBOQU1FXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdzdG9yZU5hbWUnICYmIHNvcnRCeSA9PT0gMSA/ICdyb3RhdGUnIDogJydcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk04LjAwMDE2IDMuMzMzMzdWMTIuNjY2N004LjAwMDE2IDEyLjY2NjdMMTIuNjY2OCA4LjAwMDA0TTguMDAwMTYgMTIuNjY2N0wzLjMzMzUgOC4wMDAwNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFthdHRyLnN0cm9rZV09XCJzb3J0Q29sdW1OYW1lID09PSAnc3RvcmVOYW1lJyA/ICcjMDBBM0ZGJyA6ICcjNjY3MDg1J1wiIHN0cm9rZS13aWR0aD1cIjEuMzMzMzNcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5TVE9SRSBJRDwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aD5QUk9EVUNUUzwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCd0cmFmZmljQ2FtZXJhQ291bnQnKVwiPlRSQUZGSUMgQ0FNRVJBU1xuICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBbbmdDbGFzc109XCJzb3J0Q29sdW1OYW1lID09PSAndHJhZmZpY0NhbWVyYUNvdW50JyAmJiBzb3J0QnkgPT09IDEgPyAncm90YXRlJyA6ICcnXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOC4wMDAxNiAzLjMzMzM3VjEyLjY2NjdNOC4wMDAxNiAxMi42NjY3TDEyLjY2NjggOC4wMDAwNE04LjAwMDE2IDEyLjY2NjdMMy4zMzM1IDguMDAwMDRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXR0ci5zdHJva2VdPVwic29ydENvbHVtTmFtZSA9PT0gJ3RyYWZmaWNDYW1lcmFDb3VudCcgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGggY2xhc3M9XCJjdXJzb3ItcG9pbnRlclwiIChjbGljayk9XCJzb3J0RGF0YSgnem9uZUNhbWVyYUNvdW50JylcIj5aT05FIENBTUVSQVNcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVDYW1lcmFDb3VudCcgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICd6b25lQ2FtZXJhQ291bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXJcIiAoY2xpY2spPVwic29ydERhdGEoJ3pvbmVDb3VudCcpXCI+Wk9ORVNcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgW25nQ2xhc3NdPVwic29ydENvbHVtTmFtZSA9PT0gJ3pvbmVDb3VudCcgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICd6b25lQ291bnQnID8gJyMwMEEzRkYnIDogJyM2NjcwODUnXCIgc3Ryb2tlLXdpZHRoPVwiMS4zMzMzM1wiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoPkZJUlNUIEZJTEUgREFURTwvdGg+XG4gICAgICAgICAgICAgICAgICAgIDx0aCBjbGFzcz1cImN1cnNvci1wb2ludGVyXCIgKGNsaWNrKT1cInNvcnREYXRhKCdkYXlzRGlmZmVyZW5jZScpXCI+V09SS0lORyBEQVlTXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIFtuZ0NsYXNzXT1cInNvcnRDb2x1bU5hbWUgPT09ICdkYXlzRGlmZmVyZW5jZScgJiYgc29ydEJ5ID09PSAxID8gJ3JvdGF0ZScgOiAnJ1wiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTguMDAwMTYgMy4zMzMzN1YxMi42NjY3TTguMDAwMTYgMTIuNjY2N0wxMi42NjY4IDguMDAwMDRNOC4wMDAxNiAxMi42NjY3TDMuMzMzNSA4LjAwMDA0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F0dHIuc3Ryb2tlXT1cInNvcnRDb2x1bU5hbWUgPT09ICdkYXlzRGlmZmVyZW5jZScgPyAnIzAwQTNGRicgOiAnIzY2NzA4NSdcIiBzdHJva2Utd2lkdGg9XCIxLjMzMzMzXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxuICAgICAgICAgICAgICAgICAgICA8dGg+U1RBVFVTPC90aD5cbiAgICAgICAgICAgICAgICAgICAgPHRoIGNsYXNzPVwidGV4dC1lbmRcIj5JTlZPSUNFIEFNT1VOVDwvdGg+XG4gICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgIDwvdGhlYWQ+XG4gICAgICAgICAgICA8dGJvZHk+XG4gICAgICAgICAgICAgICAgPHRyICpuZ0Zvcj1cImxldCBzdG9yZSBvZiBzdG9yZUxpc3RcIj5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlIHRhYmxlLXRpdGxlLXByaW1hcnlcIj57eyBzdG9yZT8uc3RvcmVOYW1lIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPnt7IHN0b3JlPy5zdG9yZUlkIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0Zvcj1cImxldCBwcm9kdWN0IG9mIHN0b3JlPy5wcm9kdWN0c1wiIGNsYXNzPVwiYmFkZ2UgYmFkZ2UtbGlnaHQtcHJpbWFyeSBtZS0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGZvcm1hdFByb2R1Y3ROYW1lKHByb2R1Y3Q/LnByb2R1Y3ROYW1lKSB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzRWRpdGluZ0ZpZWxkKHN0b3JlPy5zdG9yZUlkLCAndHJhZmZpY0NhbWVyYUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgc3RvcmU/LnRyYWZmaWNDYW1lcmFDb3VudCB8fCAwIH19PC9zdHJvbmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIGVkaXQtaWNvblwiIChjbGljayk9XCJzdGFydEZpZWxkRWRpdChzdG9yZSwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCIgdGl0bGU9XCJFZGl0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNFwiIGhlaWdodD1cIjE0XCIgdmlld0JveD1cIjAgMCAxNCAxNFwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNOS45MTY2NyAxLjc1MDA0QzEwLjA2OTggMS41OTY4MyAxMC4yNTE4IDEuNDc1MzMgMTAuNDUxOSAxLjM5MjM4QzEwLjY1MjIgMS4zMDk0NiAxMC44NjY3IDEuMjY2NzkgMTEuMDgzMyAxLjI2Njc5QzExLjMgMS4yNjY3OSAxMS41MTQ1IDEuMzA5NDYgMTEuNzE0OCAxLjM5MjM4QzExLjkxNDkgMS40NzUzMyAxMi4wOTY5IDEuNTk2ODMgMTIuMjUgMS43NTAwNEMxMi40MDMyIDEuOTAzMjUgMTIuNTI0NyAyLjA4NTI5IDEyLjYwNzcgMi4yODU0NkMxMi42OTA2IDIuNDg1NjcgMTIuNzMzMyAyLjcwMDEzIDEyLjczMzMgMi45MTY3MUMxMi43MzMzIDMuMTMzMjkgMTIuNjkwNiAzLjM0Nzc1IDEyLjYwNzcgMy41NDc5NkMxMi41MjQ3IDMuNzQ4MTMgMTIuNDAzMiAzLjkzMDE3IDEyLjI1IDQuMDgzMzhMNC4zNzUgMTEuOTU4NEwxLjE2NjY3IDEyLjgzMzRMMi4wNDE2NyA5LjYyNTA0TDkuOTE2NjcgMS43NTAwNFpcIiBzdHJva2U9XCIjNjY3MDg1XCIgc3Ryb2tlLXdpZHRoPVwiMS4xNlwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0VkaXRpbmdGaWVsZChzdG9yZT8uc3RvcmVJZCwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzPVwiZm9ybS1jb250cm9sIGZvcm0tY29udHJvbC1zbSBlZGl0LWlucHV0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbKG5nTW9kZWwpXT1cImVkaXRpbmdGaWVsZFtnZXRGaWVsZEVkaXRLZXkoc3RvcmU/LnN0b3JlSWQsICd0cmFmZmljQ2FtZXJhQ291bnQnKV1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVudGVyKT1cInNhdmVGaWVsZEVkaXQoc3RvcmUsICd0cmFmZmljQ2FtZXJhQ291bnQnKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEZpZWxkRWRpdChzdG9yZSwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtc3VjY2Vzc1wiIChjbGljayk9XCJzYXZlRmllbGRFZGl0KHN0b3JlLCAndHJhZmZpY0NhbWVyYUNvdW50JylcIiB0aXRsZT1cIlNhdmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMy4zMzM0IDRMNi4wMDAwOCAxMS4zMzMzTDIuNjY2NzUgOFwiIHN0cm9rZT1cIiMxMkI3NkFcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtZGFuZ2VyXCIgKGNsaWNrKT1cImNhbmNlbEZpZWxkRWRpdChzdG9yZSwgJ3RyYWZmaWNDYW1lcmFDb3VudCcpXCIgdGl0bGU9XCJDYW5jZWxcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE2XCIgaGVpZ2h0PVwiMTZcIiB2aWV3Qm94PVwiMCAwIDE2IDE2XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk0xMiA0TDQgMTJNNCA0TDEyIDEyXCIgc3Ryb2tlPVwiI0YwNDQzOFwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRhYmxlLXRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBhbGlnbi1pdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0VkaXRpbmdGaWVsZChzdG9yZT8uc3RvcmVJZCwgJ3pvbmVDYW1lcmFDb3VudCcpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Ryb25nPnt7IHN0b3JlPy56b25lQ2FtZXJhQ291bnQgfHwgMCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0LWljb25cIiAoY2xpY2spPVwic3RhcnRGaWVsZEVkaXQoc3RvcmUsICd6b25lQ2FtZXJhQ291bnQnKVwiIHRpdGxlPVwiRWRpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTE2NjcgMS43NTAwNEMxMC4wNjk4IDEuNTk2ODMgMTAuMjUxOCAxLjQ3NTMzIDEwLjQ1MTkgMS4zOTIzOEMxMC42NTIyIDEuMzA5NDYgMTAuODY2NyAxLjI2Njc5IDExLjA4MzMgMS4yNjY3OUMxMS4zIDEuMjY2NzkgMTEuNTE0NSAxLjMwOTQ2IDExLjcxNDggMS4zOTIzOEMxMS45MTQ5IDEuNDc1MzMgMTIuMDk2OSAxLjU5NjgzIDEyLjI1IDEuNzUwMDRDMTIuNDAzMiAxLjkwMzI1IDEyLjUyNDcgMi4wODUyOSAxMi42MDc3IDIuMjg1NDZDMTIuNjkwNiAyLjQ4NTY3IDEyLjczMzMgMi43MDAxMyAxMi43MzMzIDIuOTE2NzFDMTIuNzMzMyAzLjEzMzI5IDEyLjY5MDYgMy4zNDc3NSAxMi42MDc3IDMuNTQ3OTZDMTIuNTI0NyAzLjc0ODEzIDEyLjQwMzIgMy45MzAxNyAxMi4yNSA0LjA4MzM4TDQuMzc1IDExLjk1ODRMMS4xNjY2NyAxMi44MzM0TDIuMDQxNjcgOS42MjUwNEw5LjkxNjY3IDEuNzUwMDRaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nRmllbGQoc3RvcmU/LnN0b3JlSWQsICd6b25lQ2FtZXJhQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJudW1iZXJcIiBjbGFzcz1cImZvcm0tY29udHJvbCBmb3JtLWNvbnRyb2wtc20gZWRpdC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWyhuZ01vZGVsKV09XCJlZGl0aW5nRmllbGRbZ2V0RmllbGRFZGl0S2V5KHN0b3JlPy5zdG9yZUlkLCAnem9uZUNhbWVyYUNvdW50JyldXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJzYXZlRmllbGRFZGl0KHN0b3JlLCAnem9uZUNhbWVyYUNvdW50JylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duLmVzY2FwZSk9XCJjYW5jZWxGaWVsZEVkaXQoc3RvcmUsICd6b25lQ2FtZXJhQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LXN1Y2Nlc3NcIiAoY2xpY2spPVwic2F2ZUZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDYW1lcmFDb3VudCcpXCIgdGl0bGU9XCJTYXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMuMzMzNCA0TDYuMDAwMDggMTEuMzMzM0wyLjY2Njc1IDhcIiBzdHJva2U9XCIjMTJCNzZBXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJjYW5jZWxGaWVsZEVkaXQoc3RvcmUsICd6b25lQ2FtZXJhQ291bnQnKVwiIHRpdGxlPVwiQ2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNEw0IDEyTTQgNEwxMiAxMlwiIHN0cm9rZT1cIiNGMDQ0MzhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggYWxpZ24taXRlbXMtY2VudGVyIGdhcC0yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0aW5nRmllbGQoc3RvcmU/LnN0b3JlSWQsICd6b25lQ291bnQnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzdG9yZT8uem9uZUNvdW50IHx8IDAgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgZWRpdC1pY29uXCIgKGNsaWNrKT1cInN0YXJ0RmllbGRFZGl0KHN0b3JlLCAnem9uZUNvdW50JylcIiB0aXRsZT1cIkVkaXRcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3ZnIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIiB3aWR0aD1cIjE0XCIgaGVpZ2h0PVwiMTRcIiB2aWV3Qm94PVwiMCAwIDE0IDE0XCIgZmlsbD1cIm5vbmVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHBhdGggZD1cIk05LjkxNjY3IDEuNzUwMDRDMTAuMDY5OCAxLjU5NjgzIDEwLjI1MTggMS40NzUzMyAxMC40NTE5IDEuMzkyMzhDMTAuNjUyMiAxLjMwOTQ2IDEwLjg2NjcgMS4yNjY3OSAxMS4wODMzIDEuMjY2NzlDMTEuMyAxLjI2Njc5IDExLjUxNDUgMS4zMDk0NiAxMS43MTQ4IDEuMzkyMzhDMTEuOTE0OSAxLjQ3NTMzIDEyLjA5NjkgMS41OTY4MyAxMi4yNSAxLjc1MDA0QzEyLjQwMzIgMS45MDMyNSAxMi41MjQ3IDIuMDg1MjkgMTIuNjA3NyAyLjI4NTQ2QzEyLjY5MDYgMi40ODU2NyAxMi43MzMzIDIuNzAwMTMgMTIuNzMzMyAyLjkxNjcxQzEyLjczMzMgMy4xMzMyOSAxMi42OTA2IDMuMzQ3NzUgMTIuNjA3NyAzLjU0Nzk2QzEyLjUyNDcgMy43NDgxMyAxMi40MDMyIDMuOTMwMTcgMTIuMjUgNC4wODMzOEw0LjM3NSAxMS45NTg0TDEuMTY2NjcgMTIuODMzNEwyLjA0MTY3IDkuNjI1MDRMOS45MTY2NyAxLjc1MDA0WlwiIHN0cm9rZT1cIiM2NjcwODVcIiBzdHJva2Utd2lkdGg9XCIxLjE2XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzRWRpdGluZ0ZpZWxkKHN0b3JlPy5zdG9yZUlkLCAnem9uZUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGVkaXQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGluZ0ZpZWxkW2dldEZpZWxkRWRpdEtleShzdG9yZT8uc3RvcmVJZCwgJ3pvbmVDb3VudCcpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZUZpZWxkRWRpdChzdG9yZSwgJ3pvbmVDb3VudCcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bi5lc2NhcGUpPVwiY2FuY2VsRmllbGRFZGl0KHN0b3JlLCAnem9uZUNvdW50JylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1zdWNjZXNzXCIgKGNsaWNrKT1cInNhdmVGaWVsZEVkaXQoc3RvcmUsICd6b25lQ291bnQnKVwiIHRpdGxlPVwiU2F2ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEzLjMzMzQgNEw2LjAwMDA4IDExLjMzMzNMMi42NjY3NSA4XCIgc3Ryb2tlPVwiIzEyQjc2QVwiIHN0cm9rZS13aWR0aD1cIjEuNVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY3Vyc29yLXBvaW50ZXIgdGV4dC1kYW5nZXJcIiAoY2xpY2spPVwiY2FuY2VsRmllbGRFZGl0KHN0b3JlLCAnem9uZUNvdW50JylcIiB0aXRsZT1cIkNhbmNlbFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTZcIiBoZWlnaHQ9XCIxNlwiIHZpZXdCb3g9XCIwIDAgMTYgMTZcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTEyIDRMNCAxMk00IDRMMTIgMTJcIiBzdHJva2U9XCIjRjA0NDM4XCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIj57eyBzdG9yZT8uZWRnZWZpcnN0RmlsZURhdGUgPyAoc3RvcmU/LmVkZ2VmaXJzdEZpbGVEYXRlIHwgZGF0ZTogJ2RkIE1NTSB5eXl5JykgOiAn4oCUJyB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGFibGUtdGl0bGVcIiAqbmdGb3I9XCJsZXQgcHJvZHVjdCBvZiBzdG9yZT8ucHJvZHVjdHNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGFsaWduLWl0ZW1zLWNlbnRlciBnYXAtMiBtYi0xXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic21hbGwgdGV4dC1tdXRlZFwiPnt7IGZvcm1hdFByb2R1Y3ROYW1lKHByb2R1Y3Q/LnByb2R1Y3ROYW1lKSB9fTo8L3NwYW4+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBWaWV3IG1vZGUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNFZGl0aW5nKHN0b3JlPy5zdG9yZUlkLCBwcm9kdWN0Py5wcm9kdWN0TmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJvbmc+e3sgcHJvZHVjdD8ud29ya2luZ2RheXMgfHwgMCB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciBlZGl0LWljb25cIiAoY2xpY2spPVwic3RhcnRFZGl0KHN0b3JlLCBwcm9kdWN0KVwiIHRpdGxlPVwiRWRpdFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiIHdpZHRoPVwiMTRcIiBoZWlnaHQ9XCIxNFwiIHZpZXdCb3g9XCIwIDAgMTQgMTRcIiBmaWxsPVwibm9uZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPVwiTTkuOTE2NjcgMS43NTAwNEMxMC4wNjk4IDEuNTk2ODMgMTAuMjUxOCAxLjQ3NTMzIDEwLjQ1MTkgMS4zOTIzOEMxMC42NTIyIDEuMzA5NDYgMTAuODY2NyAxLjI2Njc5IDExLjA4MzMgMS4yNjY3OUMxMS4zIDEuMjY2NzkgMTEuNTE0NSAxLjMwOTQ2IDExLjcxNDggMS4zOTIzOEMxMS45MTQ5IDEuNDc1MzMgMTIuMDk2OSAxLjU5NjgzIDEyLjI1IDEuNzUwMDRDMTIuNDAzMiAxLjkwMzI1IDEyLjUyNDcgMi4wODUyOSAxMi42MDc3IDIuMjg1NDZDMTIuNjkwNiAyLjQ4NTY3IDEyLjczMzMgMi43MDAxMyAxMi43MzMzIDIuOTE2NzFDMTIuNzMzMyAzLjEzMzI5IDEyLjY5MDYgMy4zNDc3NSAxMi42MDc3IDMuNTQ3OTZDMTIuNTI0NyAzLjc0ODEzIDEyLjQwMzIgMy45MzAxNyAxMi4yNSA0LjA4MzM4TDQuMzc1IDExLjk1ODRMMS4xNjY2NyAxMi44MzM0TDIuMDQxNjcgOS42MjUwNEw5LjkxNjY3IDEuNzUwMDRaXCIgc3Ryb2tlPVwiIzY2NzA4NVwiIHN0cm9rZS13aWR0aD1cIjEuMTZcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gRWRpdCBtb2RlIC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNFZGl0aW5nKHN0b3JlPy5zdG9yZUlkLCBwcm9kdWN0Py5wcm9kdWN0TmFtZSlcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgZm9ybS1jb250cm9sLXNtIGVkaXQtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsobmdNb2RlbCldPVwiZWRpdGluZ1Byb2R1Y3RbZ2V0RWRpdEtleShzdG9yZT8uc3RvcmVJZCwgcHJvZHVjdD8ucHJvZHVjdE5hbWUpXVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZW50ZXIpPVwic2F2ZVdvcmtpbmdEYXlzKHN0b3JlLCBwcm9kdWN0KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGtleWRvd24uZXNjYXBlKT1cImNhbmNlbEVkaXQoc3RvcmUsIHByb2R1Y3QpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImN1cnNvci1wb2ludGVyIHRleHQtc3VjY2Vzc1wiIChjbGljayk9XCJzYXZlV29ya2luZ0RheXMoc3RvcmUsIHByb2R1Y3QpXCIgdGl0bGU9XCJTYXZlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTMuMzMzNCA0TDYuMDAwMDggMTEuMzMzM0wyLjY2Njc1IDhcIiBzdHJva2U9XCIjMTJCNzZBXCIgc3Ryb2tlLXdpZHRoPVwiMS41XCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjdXJzb3ItcG9pbnRlciB0ZXh0LWRhbmdlclwiIChjbGljayk9XCJjYW5jZWxFZGl0KHN0b3JlLCBwcm9kdWN0KVwiIHRpdGxlPVwiQ2FuY2VsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIgd2lkdGg9XCIxNlwiIGhlaWdodD1cIjE2XCIgdmlld0JveD1cIjAgMCAxNiAxNlwiIGZpbGw9XCJub25lXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9XCJNMTIgNEw0IDEyTTQgNEwxMiAxMlwiIHN0cm9rZT1cIiNGMDQ0MzhcIiBzdHJva2Utd2lkdGg9XCIxLjVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtdC0zXCIgW25nQ2xhc3NdPVwic3RvcmU/LnN0YXR1cyA9PT0gJ2FjdGl2ZScgPyAnYmFkZ2UgYmFkZ2UtbGlnaHQtc3VjY2VzcycgOiAnYmFkZ2UgYmFkZ2UtbGlnaHQtZGFuZ2VyJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IHN0b3JlPy5zdGF0dXMgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZXh0LWVuZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBQZXItcHJvZHVjdCBicmVha2Rvd24gKFRyYWZmaWM6IOKCuXgsIFpvbmU6IOKCuXkg4oCmKSArIHRvdGFsLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgKm5nRm9yPVwibGV0IGIgb2Ygc3RvcmU/Lmludm9pY2VCcmVha2Rvd25cIiBjbGFzcz1cImludi1icmVha2Rvd24tcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbnYtYnJlYWtkb3duLWxhYmVsXCI+e3sgYi5sYWJlbCB9fTo8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgc3RvcmVDdXJyZW5jeVN5bWJvbChzdG9yZSkgfX17eyAoYi5hbW91bnQgfHwgMCkgfCBudW1iZXI6JzEuMi0yJzonZW4tSU4nIH19XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0YWJsZS10aXRsZSBpbnYtYnJlYWtkb3duLXRvdGFsXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN0cm9uZz57eyBzdG9yZUN1cnJlbmN5U3ltYm9sKHN0b3JlKSB9fXt7IChzdG9yZT8uaW52b2ljZUFtb3VudCB8fCAwKSB8IG51bWJlcjonMS4yLTInOidlbi1JTicgfX08L3N0cm9uZz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICA8L3RhYmxlPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwiIXN0b3JlTG9hZGluZyAmJiAhc3RvcmVOb0RhdGFcIj5cbiAgICAgICAgICAgIDxsaWItcGFnaW5hdGlvbiBjbGFzcz1cInRleHQtc3RhcnRcIiBbaXRlbXNQZXJQYWdlXT1cIml0ZW1zUGVyUGFnZVwiIFtjdXJyZW50UGFnZV09XCJjdXJyZW50UGFnZVwiXG4gICAgICAgICAgICAgICAgW3RvdGFsSXRlbXNdPVwidG90YWxJdGVtc1wiIFtwYWdpbmF0aW9uU2l6ZXNdPVwicGFnaW5hdGlvblNpemVzXCIgW3BhZ2VTaXplXT1cInBhZ2VTaXplXCJcbiAgICAgICAgICAgICAgICAocGFnZUNoYW5nZSk9XCJvblBhZ2VDaGFuZ2UoJGV2ZW50KVwiIChwYWdlU2l6ZUNoYW5nZSk9XCJvblBhZ2VTaXplQ2hhbmdlKCRldmVudClcIj48L2xpYi1wYWdpbmF0aW9uPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
@@ -82,12 +82,12 @@ export class GenerateInvoiceModalComponent {
82
82
  this.destroy$.complete();
83
83
  }
84
84
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GenerateInvoiceModalComponent, deps: [{ token: i1.NgbActiveModal }, { token: i2.BillingService }], target: i0.ɵɵFactoryTarget.Component });
85
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GenerateInvoiceModalComponent, selector: "lib-generate-invoice-modal", inputs: { clientId: "clientId" }, ngImport: i0, template: "<div class=\"modal-content\">\n <div class=\"px-5 pt-5 pb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <div class=\"heading\">Generate Invoice</div>\n <button type=\"button\" class=\"btn-close\" (click)=\"activeModal.dismiss()\"></button>\n </div>\n <div class=\"subheading mt-2\">Select the billing groups to generate invoices for.</div>\n </div>\n\n <div class=\"modal-body px-5 py-2\">\n <div *ngIf=\"loading\" class=\"state-row\">Loading billing groups...</div>\n\n <div *ngIf=\"!loading && loadError\" class=\"state-row text-danger\">\n Failed to load billing groups. Close and try again.\n </div>\n\n <div *ngIf=\"!loading && !loadError && groups.length === 0\" class=\"state-row\">\n No billing groups configured for this client.\n </div>\n\n <ng-container *ngIf=\"!loading && !loadError && groups.length > 0\">\n <div class=\"select-all-row\">\n <label class=\"select-all-label\">\n <input type=\"checkbox\"\n [checked]=\"allSelected\"\n (change)=\"toggleSelectAll($any($event.target).checked)\">\n <span>Select all billable groups</span>\n </label>\n <span class=\"count-pill\">{{ selectionCount }} selected</span>\n </div>\n\n <div class=\"group-list\">\n <label *ngFor=\"let g of groups\"\n class=\"group-row\"\n [class.disabled]=\"isEmpty(g)\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(g)\"\n [disabled]=\"isEmpty(g)\"\n (change)=\"toggle(g)\">\n <div class=\"group-meta\">\n <div class=\"group-name\">\n {{ g.groupName || 'Untitled group' }}\n <span *ngIf=\"g.isPrimary\" class=\"badge-primary\">Primary</span>\n </div>\n <div class=\"group-sub\">\n <span>{{ g.stores?.length || 0 }} store(s)</span>\n <span *ngIf=\"isEmpty(g)\" class=\"empty-note\">\u2014 no stores, cannot generate</span>\n <span *ngIf=\"g.registeredCompanyName\"> &middot; {{ g.registeredCompanyName }}</span>\n </div>\n </div>\n </label>\n </div>\n </ng-container>\n </div>\n\n <div class=\"modal-footer footer-row px-5 pb-5\">\n <button type=\"button\" (click)=\"activeModal.dismiss()\"\n class=\"btn btn-outline cancel me-3 w-50\">Cancel</button>\n <button type=\"button\" (click)=\"confirm()\"\n [disabled]=\"selectionCount === 0\"\n class=\"btn btn-primary w-50\">\n Generate ({{ selectionCount }})\n </button>\n </div>\n</div>", styles: [".heading{color:#101828;font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.subheading{color:#667085;font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.state-row{padding:24px 0;text-align:center;color:#667085;font-size:14px}.select-all-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0 12px;border-bottom:1px solid #EAECF0;margin-bottom:8px}.select-all-label{display:inline-flex;align-items:center;gap:10px;cursor:pointer;color:#344054;font-size:13px;font-weight:500;margin:0}.count-pill{background:#eff8ff;color:#175cd3;font-size:12px;font-weight:600;padding:2px 10px;border-radius:12px}.group-list{max-height:360px;overflow-y:auto;display:flex;flex-direction:column;gap:6px}.group-row{display:flex;align-items:flex-start;gap:12px;padding:10px 12px;border:1px solid #EAECF0;border-radius:8px;cursor:pointer;transition:background .12s ease;margin:0}.group-row:hover:not(.disabled){background:#f9fafb}.group-row.disabled{opacity:.55;cursor:not-allowed;background:#fafafb}.group-row input[type=checkbox]{margin-top:3px}.group-meta{flex:1;min-width:0}.group-name{color:#101828;font-size:14px;font-weight:600;line-height:20px;display:flex;align-items:center;gap:8px}.badge-primary{background:#ecfdf3;color:#027a48;font-size:11px;font-weight:500;padding:2px 8px;border-radius:8px}.group-sub{color:#667085;font-size:12px;line-height:18px;margin-top:2px}.empty-note{color:#b54708;margin-left:4px}.cancel{color:#344054;font-weight:600;border:1px solid #D0D5DD;background:#fff;border-radius:8px}.footer-row{display:flex;flex-wrap:nowrap;justify-content:stretch;border-top:none}.footer-row>.btn{flex:1 1 50%;min-width:0}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
85
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: GenerateInvoiceModalComponent, selector: "lib-generate-invoice-modal", inputs: { clientId: "clientId" }, ngImport: i0, template: "<div class=\"modal-content\">\n <div class=\"px-5 pt-5 pb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <div class=\"heading\">Generate Invoice</div>\n <button type=\"button\" class=\"btn-close\" (click)=\"activeModal.dismiss()\"></button>\n </div>\n <div class=\"subheading mt-2\">Select the billing groups to generate invoices for.</div>\n </div>\n\n <div class=\"modal-body px-5 py-2\">\n <div *ngIf=\"loading\" class=\"state-row\">Loading billing groups...</div>\n\n <div *ngIf=\"!loading && loadError\" class=\"state-row text-danger\">\n Failed to load billing groups. Close and try again.\n </div>\n\n <div *ngIf=\"!loading && !loadError && groups.length === 0\" class=\"state-row\">\n No billing groups configured for this client.\n </div>\n\n <ng-container *ngIf=\"!loading && !loadError && groups.length > 0\">\n <div class=\"select-all-row\">\n <label class=\"select-all-label\">\n <input type=\"checkbox\"\n [checked]=\"allSelected\"\n (change)=\"toggleSelectAll($any($event.target).checked)\">\n <span>Select all billable groups</span>\n </label>\n <span class=\"count-pill\">{{ selectionCount }} selected</span>\n </div>\n\n <div class=\"group-list\">\n <label *ngFor=\"let g of groups\"\n class=\"group-row\"\n [class.disabled]=\"isEmpty(g)\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(g)\"\n [disabled]=\"isEmpty(g)\"\n (change)=\"toggle(g)\">\n <div class=\"group-meta\">\n <div class=\"group-name\">\n {{ g.groupName || 'Untitled group' }}\n <span *ngIf=\"g.isPrimary\" class=\"badge-primary\">Primary</span>\n </div>\n <div class=\"group-sub\">\n <span>{{ g.stores?.length || 0 }} store(s)</span>\n <span *ngIf=\"isEmpty(g)\" class=\"empty-note\">\u2014 no stores, cannot generate</span>\n <span *ngIf=\"g.registeredCompanyName\"> &middot; {{ g.registeredCompanyName }}</span>\n </div>\n <!-- Advance invoice already covers the current month \u2192 a\n normal monthly invoice will be generated instead. -->\n <div class=\"advance-note\" *ngIf=\"g.advanceCoverage\">\n Advance invoice <strong>{{ g.advanceCoverage.invoice }}</strong>\n <span *ngIf=\"g.advanceCoverage.period\"> ({{ g.advanceCoverage.period }})</span>\n already covers this month \u2014 a monthly invoice will be created.\n </div>\n </div>\n </label>\n </div>\n </ng-container>\n </div>\n\n <div class=\"modal-footer footer-row px-5 pb-5\">\n <button type=\"button\" (click)=\"activeModal.dismiss()\"\n class=\"btn btn-outline cancel me-3 w-50\">Cancel</button>\n <button type=\"button\" (click)=\"confirm()\"\n [disabled]=\"selectionCount === 0\"\n class=\"btn btn-primary w-50\">\n Generate ({{ selectionCount }})\n </button>\n </div>\n</div>", styles: [".heading{color:#101828;font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.subheading{color:#667085;font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.state-row{padding:24px 0;text-align:center;color:#667085;font-size:14px}.select-all-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0 12px;border-bottom:1px solid #EAECF0;margin-bottom:8px}.select-all-label{display:inline-flex;align-items:center;gap:10px;cursor:pointer;color:#344054;font-size:13px;font-weight:500;margin:0}.count-pill{background:#eff8ff;color:#175cd3;font-size:12px;font-weight:600;padding:2px 10px;border-radius:12px}.group-list{max-height:360px;overflow-y:auto;display:flex;flex-direction:column;gap:6px}.group-row{display:flex;align-items:flex-start;gap:12px;padding:10px 12px;border:1px solid #EAECF0;border-radius:8px;cursor:pointer;transition:background .12s ease;margin:0}.group-row:hover:not(.disabled){background:#f9fafb}.group-row.disabled{opacity:.55;cursor:not-allowed;background:#fafafb}.group-row input[type=checkbox]{margin-top:3px}.group-meta{flex:1;min-width:0}.group-name{color:#101828;font-size:14px;font-weight:600;line-height:20px;display:flex;align-items:center;gap:8px}.badge-primary{background:#ecfdf3;color:#027a48;font-size:11px;font-weight:500;padding:2px 8px;border-radius:8px}.group-sub{color:#667085;font-size:12px;line-height:18px;margin-top:2px}.empty-note{color:#b54708;margin-left:4px}.cancel{color:#344054;font-weight:600;border:1px solid #D0D5DD;background:#fff;border-radius:8px}.footer-row{display:flex;flex-wrap:nowrap;justify-content:stretch;border-top:none}.footer-row>.btn{flex:1 1 50%;min-width:0}.advance-note{margin-top:4px;font-size:12px;color:#b54708;background:#fffaeb;border:1px solid #FEDF89;border-radius:6px;padding:4px 8px;display:inline-block}\n"], dependencies: [{ kind: "directive", type: i3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
86
86
  }
87
87
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: GenerateInvoiceModalComponent, decorators: [{
88
88
  type: Component,
89
- args: [{ selector: 'lib-generate-invoice-modal', template: "<div class=\"modal-content\">\n <div class=\"px-5 pt-5 pb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <div class=\"heading\">Generate Invoice</div>\n <button type=\"button\" class=\"btn-close\" (click)=\"activeModal.dismiss()\"></button>\n </div>\n <div class=\"subheading mt-2\">Select the billing groups to generate invoices for.</div>\n </div>\n\n <div class=\"modal-body px-5 py-2\">\n <div *ngIf=\"loading\" class=\"state-row\">Loading billing groups...</div>\n\n <div *ngIf=\"!loading && loadError\" class=\"state-row text-danger\">\n Failed to load billing groups. Close and try again.\n </div>\n\n <div *ngIf=\"!loading && !loadError && groups.length === 0\" class=\"state-row\">\n No billing groups configured for this client.\n </div>\n\n <ng-container *ngIf=\"!loading && !loadError && groups.length > 0\">\n <div class=\"select-all-row\">\n <label class=\"select-all-label\">\n <input type=\"checkbox\"\n [checked]=\"allSelected\"\n (change)=\"toggleSelectAll($any($event.target).checked)\">\n <span>Select all billable groups</span>\n </label>\n <span class=\"count-pill\">{{ selectionCount }} selected</span>\n </div>\n\n <div class=\"group-list\">\n <label *ngFor=\"let g of groups\"\n class=\"group-row\"\n [class.disabled]=\"isEmpty(g)\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(g)\"\n [disabled]=\"isEmpty(g)\"\n (change)=\"toggle(g)\">\n <div class=\"group-meta\">\n <div class=\"group-name\">\n {{ g.groupName || 'Untitled group' }}\n <span *ngIf=\"g.isPrimary\" class=\"badge-primary\">Primary</span>\n </div>\n <div class=\"group-sub\">\n <span>{{ g.stores?.length || 0 }} store(s)</span>\n <span *ngIf=\"isEmpty(g)\" class=\"empty-note\">\u2014 no stores, cannot generate</span>\n <span *ngIf=\"g.registeredCompanyName\"> &middot; {{ g.registeredCompanyName }}</span>\n </div>\n </div>\n </label>\n </div>\n </ng-container>\n </div>\n\n <div class=\"modal-footer footer-row px-5 pb-5\">\n <button type=\"button\" (click)=\"activeModal.dismiss()\"\n class=\"btn btn-outline cancel me-3 w-50\">Cancel</button>\n <button type=\"button\" (click)=\"confirm()\"\n [disabled]=\"selectionCount === 0\"\n class=\"btn btn-primary w-50\">\n Generate ({{ selectionCount }})\n </button>\n </div>\n</div>", styles: [".heading{color:#101828;font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.subheading{color:#667085;font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.state-row{padding:24px 0;text-align:center;color:#667085;font-size:14px}.select-all-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0 12px;border-bottom:1px solid #EAECF0;margin-bottom:8px}.select-all-label{display:inline-flex;align-items:center;gap:10px;cursor:pointer;color:#344054;font-size:13px;font-weight:500;margin:0}.count-pill{background:#eff8ff;color:#175cd3;font-size:12px;font-weight:600;padding:2px 10px;border-radius:12px}.group-list{max-height:360px;overflow-y:auto;display:flex;flex-direction:column;gap:6px}.group-row{display:flex;align-items:flex-start;gap:12px;padding:10px 12px;border:1px solid #EAECF0;border-radius:8px;cursor:pointer;transition:background .12s ease;margin:0}.group-row:hover:not(.disabled){background:#f9fafb}.group-row.disabled{opacity:.55;cursor:not-allowed;background:#fafafb}.group-row input[type=checkbox]{margin-top:3px}.group-meta{flex:1;min-width:0}.group-name{color:#101828;font-size:14px;font-weight:600;line-height:20px;display:flex;align-items:center;gap:8px}.badge-primary{background:#ecfdf3;color:#027a48;font-size:11px;font-weight:500;padding:2px 8px;border-radius:8px}.group-sub{color:#667085;font-size:12px;line-height:18px;margin-top:2px}.empty-note{color:#b54708;margin-left:4px}.cancel{color:#344054;font-weight:600;border:1px solid #D0D5DD;background:#fff;border-radius:8px}.footer-row{display:flex;flex-wrap:nowrap;justify-content:stretch;border-top:none}.footer-row>.btn{flex:1 1 50%;min-width:0}\n"] }]
89
+ args: [{ selector: 'lib-generate-invoice-modal', template: "<div class=\"modal-content\">\n <div class=\"px-5 pt-5 pb-3\">\n <div class=\"d-flex justify-content-between align-items-center\">\n <div class=\"heading\">Generate Invoice</div>\n <button type=\"button\" class=\"btn-close\" (click)=\"activeModal.dismiss()\"></button>\n </div>\n <div class=\"subheading mt-2\">Select the billing groups to generate invoices for.</div>\n </div>\n\n <div class=\"modal-body px-5 py-2\">\n <div *ngIf=\"loading\" class=\"state-row\">Loading billing groups...</div>\n\n <div *ngIf=\"!loading && loadError\" class=\"state-row text-danger\">\n Failed to load billing groups. Close and try again.\n </div>\n\n <div *ngIf=\"!loading && !loadError && groups.length === 0\" class=\"state-row\">\n No billing groups configured for this client.\n </div>\n\n <ng-container *ngIf=\"!loading && !loadError && groups.length > 0\">\n <div class=\"select-all-row\">\n <label class=\"select-all-label\">\n <input type=\"checkbox\"\n [checked]=\"allSelected\"\n (change)=\"toggleSelectAll($any($event.target).checked)\">\n <span>Select all billable groups</span>\n </label>\n <span class=\"count-pill\">{{ selectionCount }} selected</span>\n </div>\n\n <div class=\"group-list\">\n <label *ngFor=\"let g of groups\"\n class=\"group-row\"\n [class.disabled]=\"isEmpty(g)\">\n <input type=\"checkbox\"\n [checked]=\"isSelected(g)\"\n [disabled]=\"isEmpty(g)\"\n (change)=\"toggle(g)\">\n <div class=\"group-meta\">\n <div class=\"group-name\">\n {{ g.groupName || 'Untitled group' }}\n <span *ngIf=\"g.isPrimary\" class=\"badge-primary\">Primary</span>\n </div>\n <div class=\"group-sub\">\n <span>{{ g.stores?.length || 0 }} store(s)</span>\n <span *ngIf=\"isEmpty(g)\" class=\"empty-note\">\u2014 no stores, cannot generate</span>\n <span *ngIf=\"g.registeredCompanyName\"> &middot; {{ g.registeredCompanyName }}</span>\n </div>\n <!-- Advance invoice already covers the current month \u2192 a\n normal monthly invoice will be generated instead. -->\n <div class=\"advance-note\" *ngIf=\"g.advanceCoverage\">\n Advance invoice <strong>{{ g.advanceCoverage.invoice }}</strong>\n <span *ngIf=\"g.advanceCoverage.period\"> ({{ g.advanceCoverage.period }})</span>\n already covers this month \u2014 a monthly invoice will be created.\n </div>\n </div>\n </label>\n </div>\n </ng-container>\n </div>\n\n <div class=\"modal-footer footer-row px-5 pb-5\">\n <button type=\"button\" (click)=\"activeModal.dismiss()\"\n class=\"btn btn-outline cancel me-3 w-50\">Cancel</button>\n <button type=\"button\" (click)=\"confirm()\"\n [disabled]=\"selectionCount === 0\"\n class=\"btn btn-primary w-50\">\n Generate ({{ selectionCount }})\n </button>\n </div>\n</div>", styles: [".heading{color:#101828;font-family:Inter;font-size:18px;font-weight:600;line-height:28px}.subheading{color:#667085;font-family:Inter;font-size:14px;font-weight:400;line-height:20px}.state-row{padding:24px 0;text-align:center;color:#667085;font-size:14px}.select-all-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0 12px;border-bottom:1px solid #EAECF0;margin-bottom:8px}.select-all-label{display:inline-flex;align-items:center;gap:10px;cursor:pointer;color:#344054;font-size:13px;font-weight:500;margin:0}.count-pill{background:#eff8ff;color:#175cd3;font-size:12px;font-weight:600;padding:2px 10px;border-radius:12px}.group-list{max-height:360px;overflow-y:auto;display:flex;flex-direction:column;gap:6px}.group-row{display:flex;align-items:flex-start;gap:12px;padding:10px 12px;border:1px solid #EAECF0;border-radius:8px;cursor:pointer;transition:background .12s ease;margin:0}.group-row:hover:not(.disabled){background:#f9fafb}.group-row.disabled{opacity:.55;cursor:not-allowed;background:#fafafb}.group-row input[type=checkbox]{margin-top:3px}.group-meta{flex:1;min-width:0}.group-name{color:#101828;font-size:14px;font-weight:600;line-height:20px;display:flex;align-items:center;gap:8px}.badge-primary{background:#ecfdf3;color:#027a48;font-size:11px;font-weight:500;padding:2px 8px;border-radius:8px}.group-sub{color:#667085;font-size:12px;line-height:18px;margin-top:2px}.empty-note{color:#b54708;margin-left:4px}.cancel{color:#344054;font-weight:600;border:1px solid #D0D5DD;background:#fff;border-radius:8px}.footer-row{display:flex;flex-wrap:nowrap;justify-content:stretch;border-top:none}.footer-row>.btn{flex:1 1 50%;min-width:0}.advance-note{margin-top:4px;font-size:12px;color:#b54708;background:#fffaeb;border:1px solid #FEDF89;border-radius:6px;padding:4px 8px;display:inline-block}\n"] }]
90
90
  }], ctorParameters: () => [{ type: i1.NgbActiveModal }, { type: i2.BillingService }], propDecorators: { clientId: [{
91
91
  type: Input
92
92
  }] } });
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtaW52b2ljZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtYmlsbGluZy9zcmMvbGliL2NvbXBvbmVudHMvZGFpbHktcHJpY2luZy9nZW5lcmF0ZS1pbnZvaWNlLW1vZGFsL2dlbmVyYXRlLWludm9pY2UtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL2RhaWx5LXByaWNpbmcvZ2VuZXJhdGUtaW52b2ljZS1tb2RhbC9nZW5lcmF0ZS1pbnZvaWNlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQVExQyxNQUFNLE9BQU8sNkJBQTZCO0lBVy9CO0lBQ0M7SUFYRCxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBRWQsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFaEQsTUFBTSxHQUFVLEVBQUUsQ0FBQztJQUNuQixXQUFXLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDckMsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBRTNCLFlBQ1MsV0FBMkIsRUFDMUIsY0FBOEI7UUFEL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUNyQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFB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V0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQW5GVSw2QkFBNkI7NEZBQTdCLDZCQUE2QixvR0NWMUMseStGQWdFTTs7NEZEdERPLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSw0QkFBNEI7Z0hBSzdCLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCaWxsaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1nZW5lcmF0ZS1pbnZvaWNlLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyYXRlLWludm9pY2UtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VuZXJhdGUtaW52b2ljZS1tb2RhbC5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJhdGVJbnZvaWNlTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjbGllbnRJZDogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ3JvdXBzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZElkczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBsb2FkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxuICAgIHByaXZhdGUgYmlsbGluZ1NlcnZpY2U6IEJpbGxpbmdTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRHcm91cHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEdyb3VwcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2xpZW50SWQpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmdldEFsbEJpbGxpbmdHcm91cHModGhpcy5jbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5ncm91cHMgPSByZXM/LmRhdGEgfHwgW107XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRFcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBBIGdyb3VwIGlzIHVuYmlsbGFibGUgd2hlbiBpdCBoYXMgbm8gc3RvcmVzIGF0dGFjaGVkIOKAlCB0aGUgYmFja2VuZCdzXG4gIC8vIHN0b3JlLWZpbHRlciB3b3VsZCBwcm9kdWNlIHplcm8gcHJvZHVjdHMsIHNvIGdlbmVyYXRpbmcgd291bGQgYmUgYSBuby1vcC5cbiAgaXNFbXB0eShncm91cDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEoZ3JvdXA/LnN0b3Jlcz8ubGVuZ3RoID4gMCk7XG4gIH1cblxuICB0b2dnbGUoZ3JvdXA6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoZ3JvdXApKSByZXR1cm47XG4gICAgY29uc3QgaWQgPSBncm91cC5faWQ7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJZHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSWRzLmFkZChpZCk7XG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChncm91cDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJZHMuaGFzKGdyb3VwLl9pZCk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLmdyb3Vwc1xuICAgICAgICAuZmlsdGVyKChnKSA9PiAhdGhpcy5pc0VtcHR5KGcpKVxuICAgICAgICAuZm9yRWFjaCgoZykgPT4gdGhpcy5zZWxlY3RlZElkcy5hZGQoZy5faWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBiaWxsYWJsZSA9IHRoaXMuZ3JvdXBzLmZpbHRlcigoZykgPT4gIXRoaXMuaXNFbXB0eShnKSk7XG4gICAgcmV0dXJuIGJpbGxhYmxlLmxlbmd0aCA+IDAgJiYgYmlsbGFibGUuZXZlcnkoKGcpID0+IHRoaXMuc2VsZWN0ZWRJZHMuaGFzKGcuX2lkKSk7XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZElkcy5zaXplO1xuICB9XG5cbiAgY29uZmlybSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Db3VudCA9PT0gMCkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkSWRzKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJweC01IHB0LTUgcGItM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5HZW5lcmF0ZSBJbnZvaWNlPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIChjbGljayk9XCJhY3RpdmVNb2RhbC5kaXNtaXNzKClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJoZWFkaW5nIG10LTJcIj5TZWxlY3QgdGhlIGJpbGxpbmcgZ3JvdXBzIHRvIGdlbmVyYXRlIGludm9pY2VzIGZvci48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHB4LTUgcHktMlwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwic3RhdGUtcm93XCI+TG9hZGluZyBiaWxsaW5nIGdyb3Vwcy4uLjwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiBsb2FkRXJyb3JcIiBjbGFzcz1cInN0YXRlLXJvdyB0ZXh0LWRhbmdlclwiPlxuICAgICAgICAgICAgRmFpbGVkIHRvIGxvYWQgYmlsbGluZyBncm91cHMuIENsb3NlIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiAhbG9hZEVycm9yICYmIGdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInN0YXRlLXJvd1wiPlxuICAgICAgICAgICAgTm8gYmlsbGluZyBncm91cHMgY29uZmlndXJlZCBmb3IgdGhpcyBjbGllbnQuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZyAmJiAhbG9hZEVycm9yICYmIGdyb3Vwcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWFsbC1yb3dcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzZWxlY3QtYWxsLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoJGFueSgkZXZlbnQudGFyZ2V0KS5jaGVja2VkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5TZWxlY3QgYWxsIGJpbGxhYmxlIGdyb3Vwczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnQtcGlsbFwiPnt7IHNlbGVjdGlvbkNvdW50IH19IHNlbGVjdGVkPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsICpuZ0Zvcj1cImxldCBnIG9mIGdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcm93XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRW1wdHkoZylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0VtcHR5KGcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlKGcpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGcuZ3JvdXBOYW1lIHx8ICdVbnRpdGxlZCBncm91cCcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImcuaXNQcmltYXJ5XCIgY2xhc3M9XCJiYWRnZS1wcmltYXJ5XCI+UHJpbWFyeTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLXN1YlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGcuc3RvcmVzPy5sZW5ndGggfHwgMCB9fSBzdG9yZShzKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzRW1wdHkoZylcIiBjbGFzcz1cImVtcHR5LW5vdGVcIj7igJQgbm8gc3RvcmVzLCBjYW5ub3QgZ2VuZXJhdGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnLnJlZ2lzdGVyZWRDb21wYW55TmFtZVwiPiAmbWlkZG90OyB7eyBnLnJlZ2lzdGVyZWRDb21wYW55TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlciBmb290ZXItcm93IHB4LTUgcGItNVwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWN0aXZlTW9kYWwuZGlzbWlzcygpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGNhbmNlbCBtZS0zIHctNTBcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNvbmZpcm0oKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0aW9uQ291bnQgPT09IDBcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy01MFwiPlxuICAgICAgICAgICAgR2VuZXJhdGUgKHt7IHNlbGVjdGlvbkNvdW50IH19KVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGUtaW52b2ljZS1tb2RhbC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90YW5nby1tYW5hZ2UtYmlsbGluZy9zcmMvbGliL2NvbXBvbmVudHMvZGFpbHktcHJpY2luZy9nZW5lcmF0ZS1pbnZvaWNlLW1vZGFsL2dlbmVyYXRlLWludm9pY2UtbW9kYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdGFuZ28tbWFuYWdlLWJpbGxpbmcvc3JjL2xpYi9jb21wb25lbnRzL2RhaWx5LXByaWNpbmcvZ2VuZXJhdGUtaW52b2ljZS1tb2RhbC9nZW5lcmF0ZS1pbnZvaWNlLW1vZGFsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7OztBQVExQyxNQUFNLE9BQU8sNkJBQTZCO0lBVy9CO0lBQ0M7SUFYRCxRQUFRLEdBQVcsRUFBRSxDQUFDO0lBRWQsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFRLENBQUM7SUFFaEQsTUFBTSxHQUFVLEVBQUUsQ0FBQztJQUNuQixXQUFXLEdBQWdCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDckMsT0FBTyxHQUFZLElBQUksQ0FBQztJQUN4QixTQUFTLEdBQVksS0FBSyxDQUFDO0lBRTNCLFlBQ1MsV0FBMkIsRUFDMUIsY0FBOEI7UUFEL0IsZ0JBQVcsR0FBWCxXQUFXLENBQWdCO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtJQUNyQyxDQUFDO0lBRUosUUFBUTtRQUNOLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztJQUNwQixDQUFDO0lBRU8sVUFBVTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLFFB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V0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMzQixDQUFDO3dHQW5GVSw2QkFBNkI7NEZBQTdCLDZCQUE2QixvR0NWMUMscWpIQXVFTTs7NEZEN0RPLDZCQUE2QjtrQkFMekMsU0FBUzsrQkFDRSw0QkFBNEI7Z0hBSzdCLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5nYkFjdGl2ZU1vZGFsIH0gZnJvbSAnQG5nLWJvb3RzdHJhcC9uZy1ib290c3RyYXAnO1xuaW1wb3J0IHsgU3ViamVjdCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBCaWxsaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2JpbGxpbmcuc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2xpYi1nZW5lcmF0ZS1pbnZvaWNlLW1vZGFsJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2dlbmVyYXRlLWludm9pY2UtbW9kYWwuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybDogJy4vZ2VuZXJhdGUtaW52b2ljZS1tb2RhbC5jb21wb25lbnQuc2Nzcydcbn0pXG5leHBvcnQgY2xhc3MgR2VuZXJhdGVJbnZvaWNlTW9kYWxDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBASW5wdXQoKSBjbGllbnRJZDogc3RyaW5nID0gJyc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgZ3JvdXBzOiBhbnlbXSA9IFtdO1xuICBzZWxlY3RlZElkczogU2V0PHN0cmluZz4gPSBuZXcgU2V0KCk7XG4gIGxvYWRpbmc6IGJvb2xlYW4gPSB0cnVlO1xuICBsb2FkRXJyb3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgYWN0aXZlTW9kYWw6IE5nYkFjdGl2ZU1vZGFsLFxuICAgIHByaXZhdGUgYmlsbGluZ1NlcnZpY2U6IEJpbGxpbmdTZXJ2aWNlXG4gICkge31cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICB0aGlzLmxvYWRHcm91cHMoKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9hZEdyb3VwcygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2xpZW50SWQpIHtcbiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmJpbGxpbmdTZXJ2aWNlLmdldEFsbEJpbGxpbmdHcm91cHModGhpcy5jbGllbnRJZCkucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpLnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5ncm91cHMgPSByZXM/LmRhdGEgfHwgW107XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxvYWRFcnJvciA9IHRydWU7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvLyBBIGdyb3VwIGlzIHVuYmlsbGFibGUgd2hlbiBpdCBoYXMgbm8gc3RvcmVzIGF0dGFjaGVkIOKAlCB0aGUgYmFja2VuZCdzXG4gIC8vIHN0b3JlLWZpbHRlciB3b3VsZCBwcm9kdWNlIHplcm8gcHJvZHVjdHMsIHNvIGdlbmVyYXRpbmcgd291bGQgYmUgYSBuby1vcC5cbiAgaXNFbXB0eShncm91cDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEoZ3JvdXA/LnN0b3Jlcz8ubGVuZ3RoID4gMCk7XG4gIH1cblxuICB0b2dnbGUoZ3JvdXA6IGFueSk6IHZvaWQge1xuICAgIGlmICh0aGlzLmlzRW1wdHkoZ3JvdXApKSByZXR1cm47XG4gICAgY29uc3QgaWQgPSBncm91cC5faWQ7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRJZHMuaGFzKGlkKSkge1xuICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUoaWQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkSWRzLmFkZChpZCk7XG4gICAgfVxuICB9XG5cbiAgaXNTZWxlY3RlZChncm91cDogYW55KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJZHMuaGFzKGdyb3VwLl9pZCk7XG4gIH1cblxuICB0b2dnbGVTZWxlY3RBbGwoY2hlY2tlZDogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmIChjaGVja2VkKSB7XG4gICAgICB0aGlzLmdyb3Vwc1xuICAgICAgICAuZmlsdGVyKChnKSA9PiAhdGhpcy5pc0VtcHR5KGcpKVxuICAgICAgICAuZm9yRWFjaCgoZykgPT4gdGhpcy5zZWxlY3RlZElkcy5hZGQoZy5faWQpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpO1xuICAgIH1cbiAgfVxuXG4gIGdldCBhbGxTZWxlY3RlZCgpOiBib29sZWFuIHtcbiAgICBjb25zdCBiaWxsYWJsZSA9IHRoaXMuZ3JvdXBzLmZpbHRlcigoZykgPT4gIXRoaXMuaXNFbXB0eShnKSk7XG4gICAgcmV0dXJuIGJpbGxhYmxlLmxlbmd0aCA+IDAgJiYgYmlsbGFibGUuZXZlcnkoKGcpID0+IHRoaXMuc2VsZWN0ZWRJZHMuaGFzKGcuX2lkKSk7XG4gIH1cblxuICBnZXQgc2VsZWN0aW9uQ291bnQoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZElkcy5zaXplO1xuICB9XG5cbiAgY29uZmlybSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zZWxlY3Rpb25Db3VudCA9PT0gMCkgcmV0dXJuO1xuICAgIHRoaXMuYWN0aXZlTW9kYWwuY2xvc2UoQXJyYXkuZnJvbSh0aGlzLnNlbGVjdGVkSWRzKSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cbn0iLCI8ZGl2IGNsYXNzPVwibW9kYWwtY29udGVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJweC01IHB0LTUgcGItM1wiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1iZXR3ZWVuIGFsaWduLWl0ZW1zLWNlbnRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRpbmdcIj5HZW5lcmF0ZSBJbnZvaWNlPC9kaXY+XG4gICAgICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBjbGFzcz1cImJ0bi1jbG9zZVwiIChjbGljayk9XCJhY3RpdmVNb2RhbC5kaXNtaXNzKClcIj48L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJzdWJoZWFkaW5nIG10LTJcIj5TZWxlY3QgdGhlIGJpbGxpbmcgZ3JvdXBzIHRvIGdlbmVyYXRlIGludm9pY2VzIGZvci48L2Rpdj5cbiAgICA8L2Rpdj5cblxuICAgIDxkaXYgY2xhc3M9XCJtb2RhbC1ib2R5IHB4LTUgcHktMlwiPlxuICAgICAgICA8ZGl2ICpuZ0lmPVwibG9hZGluZ1wiIGNsYXNzPVwic3RhdGUtcm93XCI+TG9hZGluZyBiaWxsaW5nIGdyb3Vwcy4uLjwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiBsb2FkRXJyb3JcIiBjbGFzcz1cInN0YXRlLXJvdyB0ZXh0LWRhbmdlclwiPlxuICAgICAgICAgICAgRmFpbGVkIHRvIGxvYWQgYmlsbGluZyBncm91cHMuIENsb3NlIGFuZCB0cnkgYWdhaW4uXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxkaXYgKm5nSWY9XCIhbG9hZGluZyAmJiAhbG9hZEVycm9yICYmIGdyb3Vwcy5sZW5ndGggPT09IDBcIiBjbGFzcz1cInN0YXRlLXJvd1wiPlxuICAgICAgICAgICAgTm8gYmlsbGluZyBncm91cHMgY29uZmlndXJlZCBmb3IgdGhpcyBjbGllbnQuXG4gICAgICAgIDwvZGl2PlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhbG9hZGluZyAmJiAhbG9hZEVycm9yICYmIGdyb3Vwcy5sZW5ndGggPiAwXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VsZWN0LWFsbC1yb3dcIj5cbiAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9XCJzZWxlY3QtYWxsLWxhYmVsXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NoZWNrZWRdPVwiYWxsU2VsZWN0ZWRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJ0b2dnbGVTZWxlY3RBbGwoJGFueSgkZXZlbnQudGFyZ2V0KS5jaGVja2VkKVwiPlxuICAgICAgICAgICAgICAgICAgICA8c3Bhbj5TZWxlY3QgYWxsIGJpbGxhYmxlIGdyb3Vwczwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY291bnQtcGlsbFwiPnt7IHNlbGVjdGlvbkNvdW50IH19IHNlbGVjdGVkPC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1saXN0XCI+XG4gICAgICAgICAgICAgICAgPGxhYmVsICpuZ0Zvcj1cImxldCBnIG9mIGdyb3Vwc1wiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZ3JvdXAtcm93XCJcbiAgICAgICAgICAgICAgICAgICAgW2NsYXNzLmRpc2FibGVkXT1cImlzRW1wdHkoZylcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2hlY2tlZF09XCJpc1NlbGVjdGVkKGcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpc0VtcHR5KGcpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwidG9nZ2xlKGcpXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJncm91cC1tZXRhXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZ3JvdXAtbmFtZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IGcuZ3JvdXBOYW1lIHx8ICdVbnRpdGxlZCBncm91cCcgfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImcuaXNQcmltYXJ5XCIgY2xhc3M9XCJiYWRnZS1wcmltYXJ5XCI+UHJpbWFyeTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImdyb3VwLXN1YlwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGcuc3RvcmVzPy5sZW5ndGggfHwgMCB9fSBzdG9yZShzKTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqbmdJZj1cImlzRW1wdHkoZylcIiBjbGFzcz1cImVtcHR5LW5vdGVcIj7igJQgbm8gc3RvcmVzLCBjYW5ub3QgZ2VuZXJhdGU8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gKm5nSWY9XCJnLnJlZ2lzdGVyZWRDb21wYW55TmFtZVwiPiAmbWlkZG90OyB7eyBnLnJlZ2lzdGVyZWRDb21wYW55TmFtZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBBZHZhbmNlIGludm9pY2UgYWxyZWFkeSBjb3ZlcnMgdGhlIGN1cnJlbnQgbW9udGgg4oaSIGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybWFsIG1vbnRobHkgaW52b2ljZSB3aWxsIGJlIGdlbmVyYXRlZCBpbnN0ZWFkLiAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhZHZhbmNlLW5vdGVcIiAqbmdJZj1cImcuYWR2YW5jZUNvdmVyYWdlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQWR2YW5jZSBpbnZvaWNlIDxzdHJvbmc+e3sgZy5hZHZhbmNlQ292ZXJhZ2UuaW52b2ljZSB9fTwvc3Ryb25nPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpuZ0lmPVwiZy5hZHZhbmNlQ292ZXJhZ2UucGVyaW9kXCI+ICh7eyBnLmFkdmFuY2VDb3ZlcmFnZS5wZXJpb2QgfX0pPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFscmVhZHkgY292ZXJzIHRoaXMgbW9udGgg4oCUIGEgbW9udGhseSBpbnZvaWNlIHdpbGwgYmUgY3JlYXRlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2xhYmVsPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuXG4gICAgPGRpdiBjbGFzcz1cIm1vZGFsLWZvb3RlciBmb290ZXItcm93IHB4LTUgcGItNVwiPlxuICAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiAoY2xpY2spPVwiYWN0aXZlTW9kYWwuZGlzbWlzcygpXCJcbiAgICAgICAgICAgIGNsYXNzPVwiYnRuIGJ0bi1vdXRsaW5lIGNhbmNlbCBtZS0zIHctNTBcIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiB0eXBlPVwiYnV0dG9uXCIgKGNsaWNrKT1cImNvbmZpcm0oKVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0aW9uQ291bnQgPT09IDBcIlxuICAgICAgICAgICAgY2xhc3M9XCJidG4gYnRuLXByaW1hcnkgdy01MFwiPlxuICAgICAgICAgICAgR2VuZXJhdGUgKHt7IHNlbGVjdGlvbkNvdW50IH19KVxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PiJdfQ==