gamma-app-controller 3.0.2 → 3.0.4

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.
@@ -26,6 +26,7 @@ export class GammaTableWithPercentageComponent {
26
26
  return;
27
27
  }
28
28
  else {
29
+ debugger;
29
30
  this.isLoader = true;
30
31
  this.page_config = value;
31
32
  this.page_parms = value.titleParams;
@@ -184,4 +185,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
184
185
  type: Input,
185
186
  args: ['chartDataSource']
186
187
  }] } });
187
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxNQUFNLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7Ozs7O0FBUW5FLE1BQU0sT0FBTyxpQ0FBaUM7SUE2RTVDLFlBQ1MsYUFBNEIsRUFDM0IsTUFBcUIsRUFDckIsU0FBdUI7UUFGeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBcEVoQix5QkFBb0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCxjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEQsaUNBQTRCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0UscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBNkQxQyxvQkFBZSxHQUFRLEVBQUUsQ0FBQztJQUt0QixDQUFDO0lBakVMLElBQ0ksZUFBZSxDQUFDLEtBQUs7UUFFdkIs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QVcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRTtZQUM1QyxPQUFPLFlBQVksQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBRTVCLElBQUksY0FBYyxHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbEMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUM5QixDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQzs7OEhBN09VLGlDQUFpQztrSEFBakMsaUNBQWlDLDhTQ1Y5QywyN0tBMkZtRDsyRkRqRnRDLGlDQUFpQztrQkFKN0MsU0FBUzsrQkFDRSxpQ0FBaUM7MkpBZTFCLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUYsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGF0YUNvbmZpZzogYW55O1xuICBhcmd1bWVudFZhbHVlOiBhbnk7XG4gIHBlcmNlbnRhZ2VEYXRhU291cmNlOiBhbnk7XG4gIHRhYmxlQ29uZmlnOiBhbnk7XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgdGFibGVIZWlnaHQ6IGFueTtcbiAgdGFibGVTaG9ydEJ5OiBhbnk7XG5cbiAgaXNMb2FkZXI6IGJvb2xlYW5cbiAgY3VycmVudERhdGVEYXRhXG4gIEBPdXRwdXQoKSBwdWJsaWMgZ2V0VGFibGVDb25maWdPdXRQdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHJpZ2h0Q2xpY2tFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoJ2NoYXJ0RGF0YVNvdXJjZScpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlX2NvbmZpZyA9IHZhbHVlO1xuICAgICAgdGhpcy5wYWdlX3Bhcm1zID0gdmFsdWUudGl0bGVQYXJhbXM7XG4gICAgICB0aGlzLnRhYmxlSGVpZ2h0ID0gKHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnRhYmxlSGVpZ2h0ICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnRhYmxlSGVpZ2h0ICE9PSBcIlwiKSA/IHRoaXMuc2V0VGFibGVIZWlnaHQodmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcudGFibGVIZWlnaHQpIDogJ2F1dG8nO1xuICAgICAgdGhpcy50YWJsZVNob3J0QnkgPSAodmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcudGFibGVTb3J0QnkpID8gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ3RhYmxlU29ydEJ5J10gOiBbXTtcblxuICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICB0aGlzLnRhYmxlQ29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG4gICAgICAgIGNvbnN0IGNvbHVtbnMgPSB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2x1bW5zO1xuICAgICAgICBsZXQgbWFpbkRhdGFzb3VyY2U6IGFueTtcblxuICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJkYWlseVwiKSB7XG4gICAgICAgICAgbGV0IHRhYmxlQ29sdW1ucyA9ICh2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2x1bW5zKSA/IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbHVtbnMgOiBbXTtcbiAgICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5yZWNvcmREYXRlKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG1vbWVudChiLnJlY29yZERhdGUpLmRpZmYobW9tZW50KGEucmVjb3JkRGF0ZSkpKTtcbiAgICAgICAgICBjb25zdCBtb3N0UmVjZW50UmVjb3JkID0gc29ydGVkRGF0YVswXTtcbiAgICAgICAgICBsZXQgZmlsdGVyZWRPYmplY3RzOiBhbnk7XG4gICAgICAgICAgaWYgKHZhbHVlLmVuZERhdGUpIHtcbiAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5yZWNvcmREYXRlID09PSB2YWx1ZS5lbmREYXRlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLnJlY29yZERhdGUgPT09IG1vc3RSZWNlbnRSZWNvcmQucmVjb3JkRGF0ZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMucGVyY2VudGFnZURhdGFTb3VyY2UgPSB0aGlzLmxvYWREYWlseU1zY1ZvaWNlVGFibGUoZmlsdGVyZWRPYmplY3RzLCBjb2x1bW5zKVxuICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZS5rcGlDb25maWcuZm9ybWF0ZSA9PSBcIm1vbnRobHlcIikge1xuICAgICAgICAgIGxldCB0YWJsZUNvbHVtbnMgPSAodmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sdW1ucykgPyB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2x1bW5zIDogW107XG4gICAgICAgICAgaWYgKHRhYmxlQ29sdW1ucyAmJiB0YWJsZUNvbHVtbnMubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBkYXRhU291cmNlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubWFwKG9iaiA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IG5ld09iaiA9IHsgLi4ub2JqIH07XG4gICAgICAgICAgICAgIE9iamVjdC5rZXlzKG5ld09iaikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcygnZGF0ZScpICYmIG5ld09ialtrZXldKSB7XG4gICAgICAgICAgICAgICAgICBuZXdPYmpba2V5XSA9IG1vbWVudChuZXdPYmpba2V5XSkuZm9ybWF0KFwiWVlZWS1NTS1ERFwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICByZXR1cm4gbmV3T2JqO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBlcmNlbnRhZ2VEYXRhU291cmNlID0gdGhpcy5sb2FkRGFpbHlNc2NWb2ljZVRhYmxlKGRhdGFTb3VyY2UsIGNvbHVtbnMpXG4gICAgICAgICAgfVxuXG5cblxuICAgICAgICB9XG5cblxuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuXG4gICAgICB9XG5cbiAgICB9XG4gIH1cblxuXG4gIHRhYmxlRGF0YVNvdXJjZTogYW55ID0gW107XG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUgc2FuaXRpemVyOiBEb21TYW5pdGl6ZXJcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpOiB2b2lkIHtcblxuICB9XG5cblxuXG4gIC8vIGxvYWREYWlseU1zY1ZvaWNlVGFibGUoZGF0YTogYW55W10sIGRhdGFjb2x1bW5zOiBzdHJpbmdbXSkge1xuICAvLyAgIHRoaXMuYXJndW1lbnRWYWx1ZSA9IGRhdGFjb2x1bW5zLmZpbHRlcihcbiAgLy8gICAgIChjb2x1bW46IGFueSkgPT4gY29sdW1uLmlzU2hvd0JhciA9PSBmYWxzZVxuICAvLyAgICk7XG4gIC8vICAgdGhpcy5kYXRhQ29uZmlnID0gZGF0YWNvbHVtbnMuZmlsdGVyKChjb2x1bW46IGFueSkgPT4gY29sdW1uLmlzU2hvd0JhciA9PSB0cnVlKTtcbiAgLy8gICBsZXQga2V5cyA9IHRoaXMuZGF0YUNvbmZpZztcbiAgLy8gICBjb25zdCByZXN1bHQgPSB7fTtcbiAgLy8gICBsZXQgZmluYWxEYXRhc291cmNlID0gW107XG4gIC8vICAgZGF0YS5mb3JFYWNoKChlbGVtZW50T25lKSA9PiB7XG4gIC8vICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAvLyAgICAgICBjb25zdCB2YWx1ZXMgPSBkYXRhLm1hcCgoaXRlbSkgPT4gcGFyc2VGbG9hdChpdGVtW2tleVsnZGF0YUZpZWxkJ11dKSB8fCAwKTtcbiAgLy8gICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heCguLi52YWx1ZXMpO1xuICAvLyAgICAgICBjb25zdCBtaW5WYWx1ZSA9IE1hdGgubWluKC4uLnZhbHVlcyk7XG4gIC8vICAgICAgIHJlc3VsdFtrZXlbJ2RhdGFGaWVsZCddXSA9IHsgbWF4VmFsdWUsIG1pblZhbHVlIH07XG4gIC8vICAgICB9KTtcbiAgLy8gICAgIGxldCBvYmogPSB7fTtcbiAgLy8gICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gIC8vICAgICAgIGxldCB3aWR0aFZhbCA9IHRoaXMuY29tbW9uU2VydmljZS5zY2FsZU51bWJlcihwYXJzZUZsb2F0KGVsZW1lbnRPbmVba2V5WydkYXRhRmllbGQnXV0pLCByZXN1bHRba2V5WydkYXRhRmllbGQnXV1bJ21pblZhbHVlJ10sIHJlc3VsdFtrZXlbJ2RhdGFGaWVsZCddXVsnbWF4VmFsdWUnXSwgMTAsIDc1KTtcbiAgLy8gICAgICAgbGV0IEJhciA9IHRoaXMuY29tbW9uU2VydmljZS5jcmVhdGVIdG1sKHdpZHRoVmFsLCB0aGlzLmNvbW1vblNlcnZpY2UucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3IoZWxlbWVudE9uZVtrZXlbJ2RhdGFGaWVsZCddXSksIGtleVsnY29sb3InXSk7XG4gIC8vICAgICAgIG9ialtrZXlbJ2RhdGFGaWVsZCddXSA9IEJhcjtcbiAgLy8gICAgIH0pO1xuICAvLyAgICAgdGhpcy5hcmd1bWVudFZhbHVlLmZvckVhY2goKGVsZW1lbnQpID0+IHtcbiAgLy8gICAgICAgb2JqW2VsZW1lbnQuZGF0YUZpZWxkXSA9IGVsZW1lbnRPbmVbZWxlbWVudC5kYXRhRmllbGRdO1xuICAvLyAgICAgfSk7XG4gIC8vICAgICBmaW5hbERhdGFzb3VyY2UucHVzaChvYmopO1xuICAvLyAgIH0pO1xuICAvLyAgIHJldHVybiBmaW5hbERhdGFzb3VyY2U7XG4gIC8vIH1cblxuICBsb2FkRGFpbHlNc2NWb2ljZVRhYmxlKGRhdGE6IGFueVtdLCBkYXRhY29sdW1uczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmFyZ3VtZW50VmFsdWUgPSBkYXRhY29sdW1ucy5maWx0ZXIoXG4gICAgICAoY29sdW1uOiBhbnkpID0+IGNvbHVtbi5pc1Nob3dCYXIgPT0gZmFsc2VcbiAgICApO1xuICAgIHRoaXMuZGF0YUNvbmZpZyA9IGRhdGFjb2x1bW5zLmZpbHRlcigoY29sdW1uOiBhbnkpID0+IGNvbHVtbi5pc1Nob3dCYXIgPT0gdHJ1ZSk7XG4gICAgbGV0IGtleXMgPSB0aGlzLmRhdGFDb25maWc7XG4gICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgbGV0IGZpbmFsRGF0YXNvdXJjZSA9IFtdO1xuICAgIFxuICAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudE9uZSkgPT4ge1xuICAgICAgLy8gUHJlLWNvbXB1dGUgbWF4IGFuZCBtaW4gdmFsdWVzIGZvciBlYWNoIGNvbHVtblxuICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWVzID0gZGF0YS5tYXAoKGl0ZW0pID0+IHBhcnNlRmxvYXQoaXRlbVtrZXlbJ2RhdGFGaWVsZCddXSkgfHwgMCk7XG4gICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4udmFsdWVzKTtcbiAgICAgICAgY29uc3QgbWluVmFsdWUgPSBNYXRoLm1pbiguLi52YWx1ZXMpO1xuICAgICAgICByZXN1bHRba2V5WydkYXRhRmllbGQnXV0gPSB7IG1heFZhbHVlLCBtaW5WYWx1ZSB9O1xuICAgICAgfSk7XG4gIFxuICAgICAgbGV0IG9iaiA9IHt9O1xuICAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgY29uc3QgcmF3VmFsdWUgPSBwYXJzZUZsb2F0KGVsZW1lbnRPbmVba2V5WydkYXRhRmllbGQnXV0pIHx8IDA7XG4gICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yKHJhd1ZhbHVlKTtcbiAgXG4gICAgICAgIC8vIENhbGN1bGF0ZSB0aGUgd2lkdGggZm9yIHRoZSBiYXJcbiAgICAgICAgY29uc3QgYmFzZVdpZHRoID0gdGhpcy5jb21tb25TZXJ2aWNlLnNjYWxlTnVtYmVyKFxuICAgICAgICAgIHJhd1ZhbHVlLCBcbiAgICAgICAgICByZXN1bHRba2V5WydkYXRhRmllbGQnXV1bJ21pblZhbHVlJ10sIFxuICAgICAgICAgIHJlc3VsdFtrZXlbJ2RhdGFGaWVsZCddXVsnbWF4VmFsdWUnXSwgXG4gICAgICAgICAgMTAsIFxuICAgICAgICAgIDc1XG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IG1pbldpZHRoID0gZm9ybWF0dGVkVmFsdWUubGVuZ3RoICogNztcbiAgICAgICAgY29uc3QgZmluYWxXaWR0aCA9IE1hdGgubWF4KGJhc2VXaWR0aCwgbWluV2lkdGgpO1xuICAgICAgICBjb25zdCBCYXIgPSB0aGlzLmNvbW1vblNlcnZpY2UuY3JlYXRlSHRtbChmaW5hbFdpZHRoLCBmb3JtYXR0ZWRWYWx1ZSwga2V5Wydjb2xvciddKTtcbiAgICAgICAgb2JqW2tleVsnZGF0YUZpZWxkJ11dID0gQmFyO1xuICAgICAgfSk7XG4gIFxuICAgICAgLy8gQWRkIG90aGVyIGFyZ3VtZW50IHZhbHVlcyB0byB0aGUgb2JqZWN0XG4gICAgICB0aGlzLmFyZ3VtZW50VmFsdWUuZm9yRWFjaCgoZWxlbWVudCkgPT4ge1xuICAgICAgICBvYmpbZWxlbWVudC5kYXRhRmllbGRdID0gZWxlbWVudE9uZVtlbGVtZW50LmRhdGFGaWVsZF07XG4gICAgICB9KTtcbiAgXG4gICAgICBmaW5hbERhdGFzb3VyY2UucHVzaChvYmopO1xuICAgIH0pO1xuICBcbiAgICByZXR1cm4gZmluYWxEYXRhc291cmNlO1xuICB9XG4gIFxuXG5cbiAgb25Sb3dDbGljayhlKSB7XG5cbiAgICBjb25zdCB0aXRsZV9wYXJhbXMgPSBlLmRhdGFbdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jb21tb25Db25maWdbJ2RhdGFGaWVsZCddXVxuICAgIGxldCB0aXRsZSA9IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnWyd0aXRsZSddICsgdGl0bGVfcGFyYW1zO1xuICAgIGxldCBvYmogPSB7XG4gICAgICBkYXRhOiBlLmRhdGEsXG4gICAgICBrZXlUb1Bhc3M6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmtleVRvUGFzcyxcbiAgICAgIHRhYmxlVGl0bGU6ICh0aGlzLnBhZ2VfcGFybXMpID8gdGhpcy5wYWdlX3Bhcm1zICsgdGl0bGUgOiB0aXRsZSxcbiAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICBkcmlsbERvd25UeXBlOiBcIm5hdHVyYWxcIixcbiAgICAgIGRyaWxsZG93bkZyb206IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxkb3duVG86IFwiXCIsXG4gICAgfVxuICAgIHRoaXMub1Jvd0NsaWNrLmVtaXQob2JqKTtcbiAgfVxuXG4gIGFkZE1lbnVJdGVtcyhlKSB7XG5cbiAgICBjb25zdCB0aXRsZV9wYXJhbXMgPSBlLnJvdy5kYXRhW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnWydkYXRhRmllbGQnXV1cbiAgICBsZXQgdGl0bGUgPSB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1sndGl0bGUnXSArIHRpdGxlX3BhcmFtcztcblxuICAgIGlmICh0aGlzLnJpZ2h0Q2xpY2tFbmFibGUgJiYgZS5jb2x1bW5JbmRleCA9PSAwKSB7XG4gICAgICBpZiAoZS50YXJnZXQgPT0gJ2NvbnRlbnQnKSB7XG4gICAgICAgIGlmICghZS5pdGVtcykgZS5pdGVtcyA9IFtdO1xuXG4gICAgICAgIHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmNvbnRleHRNZW51LmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgaWYgKCF0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3Muc29tZShrZXkgPT4gZWxlbWVudC5kaXNwbGF5S2V5LmluY2x1ZGVzKGtleSkpKSB7XG4gICAgICAgICAgICBlLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICB0ZXh0OiBlbGVtZW50LmRpc3BsYXlLZXksXG4gICAgICAgICAgICAgIG9uSXRlbUNsaWNrOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJpZ2h0Y2xpY2tEYXRhID0ge1xuICAgICAgICAgICAgICAgICAgZGF0YTogZS5yb3cuZGF0YSxcbiAgICAgICAgICAgICAgICAgIGtleVRvUGFzczogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLFxuICAgICAgICAgICAgICAgICAgdGFibGVUaXRsZTogKHRoaXMucGFnZV9wYXJtcykgPyB0aGlzLnBhZ2VfcGFybXMgKyB0aXRsZSA6IHRpdGxlLFxuICAgICAgICAgICAgICAgICAgdmlld0lkOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgICAgICAgICAgICAgIGRyaWxsRG93blR5cGU6IFwiY29udGV4dFwiLFxuICAgICAgICAgICAgICAgICAgZHJpbGxkb3duRnJvbTogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICAgICAgICAgICAgICBkcmlsbGRvd25UbzogZWxlbWVudC52aWV3SWQsXG5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5vbnJpZ2h0Q2xpY2tDb250ZXh0U2VsZWN0aW9uLmVtaXQocmlnaHRjbGlja0RhdGEpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHNldFRhYmxlSGVpZ2h0KHZhbHVlOiBhbnkpOiBhbnkge1xuXG4gICAgY29uc3QgdGFibGVIZWlnaHQgPSB2YWx1ZTtcbiAgICBpZiAodGFibGVIZWlnaHQgPT09ICdhdXRvJykge1xuICAgICAgcmV0dXJuICdhdXRvJztcbiAgICB9XG4gICAgY29uc3QgcGFyc2VkSGVpZ2h0ID0gTnVtYmVyKHRhYmxlSGVpZ2h0KTtcbiAgICBpZiAoIWlzTmFOKHBhcnNlZEhlaWdodCkgJiYgcGFyc2VkSGVpZ2h0ID4gMCkge1xuICAgICAgcmV0dXJuIHBhcnNlZEhlaWdodDtcbiAgICB9XG4gIH1cblxuICBzaG91bGRTaG93Q29sdW1uKGZpZWxkOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBcbiAgICBsZXQgZXhjbHVkZWRGaWVsZHMgPSBbJ3JlY29yZERhdGUnLCAncmVjb3JkX2RhdGUnLCAnZXZlbnREYXRlJywgJ2V2ZW50X2RhdGUnXTtcbiAgICBpZiAodGhpcy50YWJsZVNob3J0QnkgJiYgdGhpcy50YWJsZVNob3J0QnkubGVuZ3RoICE9PSAwKSB7XG4gICAgICB0aGlzLnRhYmxlU2hvcnRCeS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBleGNsdWRlZEZpZWxkcy5wdXNoKGVsZW1lbnQpXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuICFleGNsdWRlZEZpZWxkcy5pbmNsdWRlcyhmaWVsZCk7XG4gIH1cblxufSIsIjwhLS0gPGRpdiBjbGFzcz1cIm14LTIgYmctZ3JheS04MDBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgYmctZ3JheS04MDAgcC0yXCI+XG4gICAgICAgICAgICA8YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcGItMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGVyXCI+XG4gICAgICAgICAgICA8ZHgtZGF0YS1ncmlkIChvbkZpbGVTYXZpbmcpPVwiZG93bmxvYWRUYWJsZURhdGEoJGV2ZW50KVwiIFtkYXRhU291cmNlXT1cInBlcmNlbnRhZ2VEYXRhU291cmNlXCJcbiAgICAgICAgICAgICAgICAob25Sb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIiBbcm93QWx0ZXJuYXRpb25FbmFibGVkXT1cInRydWVcIiBbaG92ZXJTdGF0ZUVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCIgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBpZD1cImdyaWRDb250YWluZXJcIiAob25Db250ZXh0TWVudVByZXBhcmluZyk9XCJhZGRNZW51SXRlbXMoJGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgIDxkeG8tc2VhcmNoLXBhbmVsIFtoaWdobGlnaHRDYXNlU2Vuc2l0aXZlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdmlzaWJsZV09XCJ0YWJsZUNvbmZpZy5zZWFyY2hQYW5lbFwiPjwvZHhvLXNlYXJjaC1wYW5lbD5cbiAgICAgICAgICAgICAgICA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJ0cnVlXCIgZmlsZU5hbWU9XCJ7e3RhYmxlQ29uZmlnLmZpbGVfbmFtZX19XCI+PC9keG8tZXhwb3J0PlxuICAgICAgICAgICAgICAgIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCJ0YWJsZUNvbmZpZy5udW1iZXJPZlJvd1wiPjwvZHhvLXBhZ2luZz5cbiAgICAgICAgICAgICAgICA8ZHhvLXBhZ2VyIFtzaG93SW5mb109XCJ0YWJsZUNvbmZpZy5wYWdlSW5mb1wiIFtzaG93UGFnZVNpemVTZWxlY3Rvcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93ZWRQYWdlU2l6ZXNdPVwidGFibGVDb25maWcuYWxsb3dlZFBhZ2VTaXplc1wiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXBhZ2VyPlxuICAgICAgICAgICAgICAgIDxkeG8tbG9hZC1wYW5lbCBbZW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPC9keG8tbG9hZC1wYW5lbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFyZ3VtZW50VmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJpdGVtLmRhdGFGaWVsZCA9PSAncmVjb3JkRGF0ZSdcIiBkYXRhRmllbGQ9XCJ7eyBpdGVtLmRhdGFGaWVsZCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCJpdGVtLmNhcHRpb25cIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIiBzb3J0T3JkZXI9XCJkZXNjXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiAqbmdJZj1cIml0ZW0uZGF0YUZpZWxkICE9PSAncmVjb3JkRGF0ZSdcIiBmb3JtYXQ9XCIjLCMjMC4jI1wiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyXCIgW2NhcHRpb25dPVwiaXRlbS5jYXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCIgYWxpZ25tZW50PVwibGVmdFwiIFt2aXNpYmxlXT1cIml0ZW0udmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGNlbGxUZW1wbGF0ZT1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIiBhbGlnbm1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyRm9yQmFyXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YUNvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgIGl0ZW0uZGF0YUZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZGF0YS52YWx1ZSB8IGNvbnRlbnRTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZHgtZGF0YS1ncmlkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvZGl2PlxuPC9kaXY+IC0tPlxuXG48ZGl2IGNsYXNzPVwibXgtMiBiZy1ncmF5LTgwMFwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpc0xvYWRlclwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1zdGFydCBiZy1ncmF5LTgwMCBwLTJcIj5cbiAgICAgICAgICAgIDxhcHAtbG9hZGVyPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8ZGl2IGNsYXNzPVwibXgtMiBwYi0yXCI+XG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXNMb2FkZXJcIj5cbiAgICAgICAgICAgIDxkeC1kYXRhLWdyaWQgKG9uUm93Q2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQpXCIgW2RhdGFTb3VyY2VdPVwicGVyY2VudGFnZURhdGFTb3VyY2VcIiBbaGVpZ2h0XT1cInRhYmxlSGVpZ2h0XCJcbiAgICAgICAgICAgICAgICAob25Db250ZXh0TWVudVByZXBhcmluZyk9XCJhZGRNZW51SXRlbXMoJGV2ZW50KVwiIFtyb3dBbHRlcm5hdGlvbkVuYWJsZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIiBbc2VsZWN0ZWRSb3dLZXlzXT1cIltdXCIgW3Nob3dCb3JkZXJzXT1cInRydWVcIiBbc2hvd0NvbHVtbkxpbmVzXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiIGlkPVwiZ3JpZENvbnRhaW5lclwiXG4gICAgICAgICAgICAgICAgW2N1c3RvbWl6ZUV4cG9ydERhdGFdPVwiY29tbW9uU2VydmljZS5yZW1vdmVIdG1sQ29udGVudEZyb21EYXRhXCI+XG4gICAgICAgICAgICAgICAgPGR4by1zZWFyY2gtcGFuZWwgW2hpZ2hsaWdodENhc2VTZW5zaXRpdmVdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFt2aXNpYmxlXT1cInRhYmxlQ29uZmlnLnNlYXJjaFBhbmVsXCI+PC9keG8tc2VhcmNoLXBhbmVsPlxuICAgICAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cInRydWVcIiBmaWxlTmFtZT1cInt7dGFibGVDb25maWcuZmlsZV9uYW1lfX1cIj48L2R4by1leHBvcnQ+XG4gICAgICAgICAgICAgICAgPGR4by1wYWdpbmcgW3BhZ2VTaXplXT1cInRhYmxlQ29uZmlnLm51bWJlck9mUm93XCI+PC9keG8tcGFnaW5nPlxuICAgICAgICAgICAgICAgIDxkeG8tcGFnZXIgW3Nob3dJbmZvXT1cInRhYmxlQ29uZmlnLnBhZ2VJbmZvXCIgW3Nob3dQYWdlU2l6ZVNlbGVjdG9yXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbYWxsb3dlZFBhZ2VTaXplc109XCJ0YWJsZUNvbmZpZy5hbGxvd2VkUGFnZVNpemVzXCI+XG4gICAgICAgICAgICAgICAgPC9keG8tcGFnZXI+XG4gICAgICAgICAgICAgICAgPGR4by1sb2FkLXBhbmVsIFtlbmFibGVkXT1cInRydWVcIj5cbiAgICAgICAgICAgICAgICA8L2R4by1sb2FkLXBhbmVsPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgYXJndW1lbnRWYWx1ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiAqbmdJZj1cIiFzaG91bGRTaG93Q29sdW1uKGl0ZW0uZGF0YUZpZWxkKVwiIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiIFt2aXNpYmxlXT1cIml0ZW0udmlzaWJsZVwiIHNvcnRPcmRlcj1cImRlc2NcIj48L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwic2hvdWxkU2hvd0NvbHVtbihpdGVtLmRhdGFGaWVsZClcIiBmb3JtYXQ9XCIjLCMjMC4jI1wiIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyXCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgYWxpZ25tZW50PVwibGVmdFwiIFt2aXNpYmxlXT1cIml0ZW0udmlzaWJsZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4aS1jb2x1bW4+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBkYXRhQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uIGNlbGxUZW1wbGF0ZT1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIiBhbGlnbm1lbnQ9XCJyaWdodFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbc29ydGluZ01ldGhvZF09XCJjb21tb25TZXJ2aWNlLmN1c3RvbVZhbHVlU29ydGVyRm9yQmFyXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YUNvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2ICpkeFRlbXBsYXRlPVwibGV0IGRhdGEgb2YgIGl0ZW0uZGF0YUZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IFtpbm5lckhUTUxdPVwiZGF0YS52YWx1ZSB8IGNvbnRlbnRTYWZlSHRtbFwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZHgtZGF0YS1ncmlkPlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDwvZGl2PlxuPC9kaXY+XG5cbjwhLS0gKG9uRmlsZVNhdmluZyk9XCJkb3dubG9hZFRhYmxlRGF0YSgkZXZlbnQpXCIgLS0+Il19
188
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UvZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFL0UsT0FBTyxNQUFNLE1BQU0sK0NBQStDLENBQUM7Ozs7Ozs7Ozs7O0FBUW5FLE1BQU0sT0FBTyxpQ0FBaUM7SUE4RTVDLFlBQ1MsYUFBNEIsRUFDM0IsTUFBcUIsRUFDckIsU0FBdUI7UUFGeEIsa0JBQWEsR0FBYixhQUFhLENBQWU7UUFDM0IsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNyQixjQUFTLEdBQVQsU0FBUyxDQUFjO1FBckVoQix5QkFBb0IsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUM3RCxjQUFTLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDbEQsaUNBQTRCLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFDN0UscUJBQWdCLEdBQVksSUFBSSxDQUFDO1FBOEQxQyxvQkFBZSxHQUFRLEVBQUUsQ0FBQztJQUt0QixDQUFDO0lBbEVMLElBQ0ksZUFBZSxDQUFDLEtBQUs7UUFFdkIs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QUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksWUFBWSxHQUFHLENBQUMsRUFBRTtZQUM1QyxPQUFPLFlBQVksQ0FBQztTQUNyQjtJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFhO1FBRTVCLElBQUksY0FBYyxHQUFHLENBQUMsWUFBWSxFQUFFLGFBQWEsRUFBRSxXQUFXLEVBQUUsWUFBWSxDQUFDLENBQUM7UUFDOUUsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDbEMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUM5QixDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDekMsQ0FBQzs7OEhBN09VLGlDQUFpQztrSEFBakMsaUNBQWlDLDhTQ1Y5QywyN0tBMkZtRDsyRkRqRnRDLGlDQUFpQztrQkFKN0MsU0FBUzsrQkFDRSxpQ0FBaUM7MkpBZTFCLG9CQUFvQjtzQkFBcEMsTUFBTTtnQkFDVSxTQUFTO3NCQUF6QixNQUFNO2dCQUNVLDRCQUE0QjtzQkFBNUMsTUFBTTtnQkFDRSxnQkFBZ0I7c0JBQXhCLEtBQUs7Z0JBRUYsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9jb21tb24nO1xuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1nYW1tYS10YWJsZS13aXRoLXBlcmNlbnRhZ2UnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FtbWEtdGFibGUtd2l0aC1wZXJjZW50YWdlLmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFUYWJsZVdpdGhQZXJjZW50YWdlQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgZGF0YUNvbmZpZzogYW55O1xuICBhcmd1bWVudFZhbHVlOiBhbnk7XG4gIHBlcmNlbnRhZ2VEYXRhU291cmNlOiBhbnk7XG4gIHRhYmxlQ29uZmlnOiBhbnk7XG4gIHBhZ2VfY29uZmlnOiBhbnk7XG4gIHBhZ2VfcGFybXM6IGFueTtcbiAgdGFibGVIZWlnaHQ6IGFueTtcbiAgdGFibGVTaG9ydEJ5OiBhbnk7XG5cbiAgaXNMb2FkZXI6IGJvb2xlYW5cbiAgY3VycmVudERhdGVEYXRhXG4gIEBPdXRwdXQoKSBwdWJsaWMgZ2V0VGFibGVDb25maWdPdXRQdXQ6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9Sb3dDbGljazogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBPdXRwdXQoKSBwdWJsaWMgb25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gIEBJbnB1dCgpIHJpZ2h0Q2xpY2tFbmFibGU6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoJ2NoYXJ0RGF0YVNvdXJjZScpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfSBlbHNlIHtcbiAgICAgIGRlYnVnZ2VyXG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGFnZV9wYXJtcyA9IHZhbHVlLnRpdGxlUGFyYW1zO1xuICAgICAgdGhpcy50YWJsZUhlaWdodCA9ICh2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy50YWJsZUhlaWdodCAmJiB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy50YWJsZUhlaWdodCAhPT0gXCJcIikgPyB0aGlzLnNldFRhYmxlSGVpZ2h0KHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnRhYmxlSGVpZ2h0KSA6ICdhdXRvJztcbiAgICAgIHRoaXMudGFibGVTaG9ydEJ5ID0gKHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLnRhYmxlU29ydEJ5KSA/IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnWyd0YWJsZVNvcnRCeSddIDogW107XG5cbiAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSAmJiB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgdGhpcy50YWJsZUNvbmZpZyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnO1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sdW1ucztcbiAgICAgICAgbGV0IG1haW5EYXRhc291cmNlOiBhbnk7XG5cbiAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5mb3JtYXRlID09IFwiZGFpbHlcIikge1xuICAgICAgICAgIGxldCB0YWJsZUNvbHVtbnMgPSAodmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sdW1ucykgPyB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZy5jb2x1bW5zIDogW107XG4gICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQucmVjb3JkRGF0ZSlcbiAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYi5yZWNvcmREYXRlKS5kaWZmKG1vbWVudChhLnJlY29yZERhdGUpKSk7XG4gICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG4gICAgICAgICAgbGV0IGZpbHRlcmVkT2JqZWN0czogYW55O1xuICAgICAgICAgIGlmICh2YWx1ZS5lbmREYXRlKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGEucmVjb3JkRGF0ZSA9PT0gdmFsdWUuZW5kRGF0ZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5yZWNvcmREYXRlID09PSBtb3N0UmVjZW50UmVjb3JkLnJlY29yZERhdGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLnBlcmNlbnRhZ2VEYXRhU291cmNlID0gdGhpcy5sb2FkRGFpbHlNc2NWb2ljZVRhYmxlKGZpbHRlcmVkT2JqZWN0cywgY29sdW1ucylcbiAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJtb250aGx5XCIpIHtcbiAgICAgICAgICBsZXQgdGFibGVDb2x1bW5zID0gKHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbHVtbnMpID8gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcuY29sdW1ucyA6IFtdO1xuICAgICAgICAgIGlmICh0YWJsZUNvbHVtbnMgJiYgdGFibGVDb2x1bW5zLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLm1hcChvYmogPT4ge1xuICAgICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgICAgICBPYmplY3Qua2V5cyhuZXdPYmopLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2RhdGUnKSAmJiBuZXdPYmpba2V5XSkge1xuICAgICAgICAgICAgICAgICAgbmV3T2JqW2tleV0gPSBtb21lbnQobmV3T2JqW2tleV0pLmZvcm1hdChcIllZWVktTU0tRERcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgcmV0dXJuIG5ld09iajtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5wZXJjZW50YWdlRGF0YVNvdXJjZSA9IHRoaXMubG9hZERhaWx5TXNjVm9pY2VUYWJsZShkYXRhU291cmNlLCBjb2x1bW5zKVxuICAgICAgICAgIH1cblxuXG5cbiAgICAgICAgfVxuXG5cbiAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcblxuICAgICAgfVxuXG4gICAgfVxuICB9XG5cblxuICB0YWJsZURhdGFTb3VyY2U6IGFueSA9IFtdO1xuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICBwcml2YXRlIHNhbml0aXplcjogRG9tU2FuaXRpemVyXG4gICkgeyB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuXG5cblxuICAvLyBsb2FkRGFpbHlNc2NWb2ljZVRhYmxlKGRhdGE6IGFueVtdLCBkYXRhY29sdW1uczogc3RyaW5nW10pIHtcbiAgLy8gICB0aGlzLmFyZ3VtZW50VmFsdWUgPSBkYXRhY29sdW1ucy5maWx0ZXIoXG4gIC8vICAgICAoY29sdW1uOiBhbnkpID0+IGNvbHVtbi5pc1Nob3dCYXIgPT0gZmFsc2VcbiAgLy8gICApO1xuICAvLyAgIHRoaXMuZGF0YUNvbmZpZyA9IGRhdGFjb2x1bW5zLmZpbHRlcigoY29sdW1uOiBhbnkpID0+IGNvbHVtbi5pc1Nob3dCYXIgPT0gdHJ1ZSk7XG4gIC8vICAgbGV0IGtleXMgPSB0aGlzLmRhdGFDb25maWc7XG4gIC8vICAgY29uc3QgcmVzdWx0ID0ge307XG4gIC8vICAgbGV0IGZpbmFsRGF0YXNvdXJjZSA9IFtdO1xuICAvLyAgIGRhdGEuZm9yRWFjaCgoZWxlbWVudE9uZSkgPT4ge1xuICAvLyAgICAga2V5cy5mb3JFYWNoKChrZXkpID0+IHtcbiAgLy8gICAgICAgY29uc3QgdmFsdWVzID0gZGF0YS5tYXAoKGl0ZW0pID0+IHBhcnNlRmxvYXQoaXRlbVtrZXlbJ2RhdGFGaWVsZCddXSkgfHwgMCk7XG4gIC8vICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4udmFsdWVzKTtcbiAgLy8gICAgICAgY29uc3QgbWluVmFsdWUgPSBNYXRoLm1pbiguLi52YWx1ZXMpO1xuICAvLyAgICAgICByZXN1bHRba2V5WydkYXRhRmllbGQnXV0gPSB7IG1heFZhbHVlLCBtaW5WYWx1ZSB9O1xuICAvLyAgICAgfSk7XG4gIC8vICAgICBsZXQgb2JqID0ge307XG4gIC8vICAgICBrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuICAvLyAgICAgICBsZXQgd2lkdGhWYWwgPSB0aGlzLmNvbW1vblNlcnZpY2Uuc2NhbGVOdW1iZXIocGFyc2VGbG9hdChlbGVtZW50T25lW2tleVsnZGF0YUZpZWxkJ11dKSwgcmVzdWx0W2tleVsnZGF0YUZpZWxkJ11dWydtaW5WYWx1ZSddLCByZXN1bHRba2V5WydkYXRhRmllbGQnXV1bJ21heFZhbHVlJ10sIDEwLCA3NSk7XG4gIC8vICAgICAgIGxldCBCYXIgPSB0aGlzLmNvbW1vblNlcnZpY2UuY3JlYXRlSHRtbCh3aWR0aFZhbCwgdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yKGVsZW1lbnRPbmVba2V5WydkYXRhRmllbGQnXV0pLCBrZXlbJ2NvbG9yJ10pO1xuICAvLyAgICAgICBvYmpba2V5WydkYXRhRmllbGQnXV0gPSBCYXI7XG4gIC8vICAgICB9KTtcbiAgLy8gICAgIHRoaXMuYXJndW1lbnRWYWx1ZS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gIC8vICAgICAgIG9ialtlbGVtZW50LmRhdGFGaWVsZF0gPSBlbGVtZW50T25lW2VsZW1lbnQuZGF0YUZpZWxkXTtcbiAgLy8gICAgIH0pO1xuICAvLyAgICAgZmluYWxEYXRhc291cmNlLnB1c2gob2JqKTtcbiAgLy8gICB9KTtcbiAgLy8gICByZXR1cm4gZmluYWxEYXRhc291cmNlO1xuICAvLyB9XG5cbiAgbG9hZERhaWx5TXNjVm9pY2VUYWJsZShkYXRhOiBhbnlbXSwgZGF0YWNvbHVtbnM6IHN0cmluZ1tdKSB7XG4gICAgdGhpcy5hcmd1bWVudFZhbHVlID0gZGF0YWNvbHVtbnMuZmlsdGVyKFxuICAgICAgKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uaXNTaG93QmFyID09IGZhbHNlXG4gICAgKTtcbiAgICB0aGlzLmRhdGFDb25maWcgPSBkYXRhY29sdW1ucy5maWx0ZXIoKGNvbHVtbjogYW55KSA9PiBjb2x1bW4uaXNTaG93QmFyID09IHRydWUpO1xuICAgIGxldCBrZXlzID0gdGhpcy5kYXRhQ29uZmlnO1xuICAgIGNvbnN0IHJlc3VsdCA9IHt9O1xuICAgIGxldCBmaW5hbERhdGFzb3VyY2UgPSBbXTtcbiAgICBcbiAgICBkYXRhLmZvckVhY2goKGVsZW1lbnRPbmUpID0+IHtcbiAgICAgIC8vIFByZS1jb21wdXRlIG1heCBhbmQgbWluIHZhbHVlcyBmb3IgZWFjaCBjb2x1bW5cbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IGRhdGEubWFwKChpdGVtKSA9PiBwYXJzZUZsb2F0KGl0ZW1ba2V5WydkYXRhRmllbGQnXV0pIHx8IDApO1xuICAgICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KC4uLnZhbHVlcyk7XG4gICAgICAgIGNvbnN0IG1pblZhbHVlID0gTWF0aC5taW4oLi4udmFsdWVzKTtcbiAgICAgICAgcmVzdWx0W2tleVsnZGF0YUZpZWxkJ11dID0geyBtYXhWYWx1ZSwgbWluVmFsdWUgfTtcbiAgICAgIH0pO1xuICBcbiAgICAgIGxldCBvYmogPSB7fTtcbiAgICAgIGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHJhd1ZhbHVlID0gcGFyc2VGbG9hdChlbGVtZW50T25lW2tleVsnZGF0YUZpZWxkJ11dKSB8fCAwO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRWYWx1ZSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvcihyYXdWYWx1ZSk7XG4gIFxuICAgICAgICAvLyBDYWxjdWxhdGUgdGhlIHdpZHRoIGZvciB0aGUgYmFyXG4gICAgICAgIGNvbnN0IGJhc2VXaWR0aCA9IHRoaXMuY29tbW9uU2VydmljZS5zY2FsZU51bWJlcihcbiAgICAgICAgICByYXdWYWx1ZSwgXG4gICAgICAgICAgcmVzdWx0W2tleVsnZGF0YUZpZWxkJ11dWydtaW5WYWx1ZSddLCBcbiAgICAgICAgICByZXN1bHRba2V5WydkYXRhRmllbGQnXV1bJ21heFZhbHVlJ10sIFxuICAgICAgICAgIDEwLCBcbiAgICAgICAgICA3NVxuICAgICAgICApO1xuICAgICAgICBjb25zdCBtaW5XaWR0aCA9IGZvcm1hdHRlZFZhbHVlLmxlbmd0aCAqIDc7XG4gICAgICAgIGNvbnN0IGZpbmFsV2lkdGggPSBNYXRoLm1heChiYXNlV2lkdGgsIG1pbldpZHRoKTtcbiAgICAgICAgY29uc3QgQmFyID0gdGhpcy5jb21tb25TZXJ2aWNlLmNyZWF0ZUh0bWwoZmluYWxXaWR0aCwgZm9ybWF0dGVkVmFsdWUsIGtleVsnY29sb3InXSk7XG4gICAgICAgIG9ialtrZXlbJ2RhdGFGaWVsZCddXSA9IEJhcjtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgb3RoZXIgYXJndW1lbnQgdmFsdWVzIHRvIHRoZSBvYmplY3RcbiAgICAgIHRoaXMuYXJndW1lbnRWYWx1ZS5mb3JFYWNoKChlbGVtZW50KSA9PiB7XG4gICAgICAgIG9ialtlbGVtZW50LmRhdGFGaWVsZF0gPSBlbGVtZW50T25lW2VsZW1lbnQuZGF0YUZpZWxkXTtcbiAgICAgIH0pO1xuICBcbiAgICAgIGZpbmFsRGF0YXNvdXJjZS5wdXNoKG9iaik7XG4gICAgfSk7XG4gICAgcmV0dXJuIGZpbmFsRGF0YXNvdXJjZTtcbiAgfVxuICBcblxuXG4gIG9uUm93Q2xpY2soZSkge1xuXG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZS5kYXRhW3RoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmRhdGFDb25maWcuY29tbW9uQ29uZmlnWydkYXRhRmllbGQnXV1cbiAgICBsZXQgdGl0bGUgPSB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1sndGl0bGUnXSArIHRpdGxlX3BhcmFtcztcbiAgICBsZXQgb2JqID0ge1xuICAgICAgZGF0YTogZS5kYXRhLFxuICAgICAga2V5VG9QYXNzOiB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5rZXlUb1Bhc3MsXG4gICAgICB0YWJsZVRpdGxlOiAodGhpcy5wYWdlX3Bhcm1zKSA/IHRoaXMucGFnZV9wYXJtcyArIHRpdGxlIDogdGl0bGUsXG4gICAgICB2aWV3SWQ6IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxEb3duVHlwZTogXCJuYXR1cmFsXCIsXG4gICAgICBkcmlsbGRvd25Gcm9tOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgIGRyaWxsZG93blRvOiBcIlwiLFxuICAgIH1cbiAgICB0aGlzLm9Sb3dDbGljay5lbWl0KG9iaik7XG4gIH1cblxuICBhZGRNZW51SXRlbXMoZSkge1xuXG4gICAgY29uc3QgdGl0bGVfcGFyYW1zID0gZS5yb3cuZGF0YVt0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5kYXRhQ29uZmlnLmNvbW1vbkNvbmZpZ1snZGF0YUZpZWxkJ11dXG4gICAgbGV0IHRpdGxlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuZGF0YUNvbmZpZy5jb21tb25Db25maWdbJ3RpdGxlJ10gKyB0aXRsZV9wYXJhbXM7XG5cbiAgICBpZiAodGhpcy5yaWdodENsaWNrRW5hYmxlICYmIGUuY29sdW1uSW5kZXggPT0gMCkge1xuICAgICAgaWYgKGUudGFyZ2V0ID09ICdjb250ZW50Jykge1xuICAgICAgICBpZiAoIWUuaXRlbXMpIGUuaXRlbXMgPSBbXTtcblxuICAgICAgICB0aGlzLnBhZ2VfY29uZmlnLmtwaUNvbmZpZy5jb250ZXh0TWVudS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgIGlmICghdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLnNvbWUoa2V5ID0+IGVsZW1lbnQuZGlzcGxheUtleS5pbmNsdWRlcyhrZXkpKSkge1xuICAgICAgICAgICAgZS5pdGVtcy5wdXNoKHtcbiAgICAgICAgICAgICAgdGV4dDogZWxlbWVudC5kaXNwbGF5S2V5LFxuICAgICAgICAgICAgICBvbkl0ZW1DbGljazogKCkgPT4ge1xuICAgICAgICAgICAgICAgIGxldCByaWdodGNsaWNrRGF0YSA9IHtcbiAgICAgICAgICAgICAgICAgIGRhdGE6IGUucm93LmRhdGEsXG4gICAgICAgICAgICAgICAgICBrZXlUb1Bhc3M6IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmtleVRvUGFzcyxcbiAgICAgICAgICAgICAgICAgIHRhYmxlVGl0bGU6ICh0aGlzLnBhZ2VfcGFybXMpID8gdGhpcy5wYWdlX3Bhcm1zICsgdGl0bGUgOiB0aXRsZSxcbiAgICAgICAgICAgICAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICAgICAgICAgICAgICBkcmlsbERvd25UeXBlOiBcImNvbnRleHRcIixcbiAgICAgICAgICAgICAgICAgIGRyaWxsZG93bkZyb206IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgICAgICAgICAgICAgZHJpbGxkb3duVG86IGVsZW1lbnQudmlld0lkLFxuXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMub25yaWdodENsaWNrQ29udGV4dFNlbGVjdGlvbi5lbWl0KHJpZ2h0Y2xpY2tEYXRhKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzZXRUYWJsZUhlaWdodCh2YWx1ZTogYW55KTogYW55IHtcblxuICAgIGNvbnN0IHRhYmxlSGVpZ2h0ID0gdmFsdWU7XG4gICAgaWYgKHRhYmxlSGVpZ2h0ID09PSAnYXV0bycpIHtcbiAgICAgIHJldHVybiAnYXV0byc7XG4gICAgfVxuICAgIGNvbnN0IHBhcnNlZEhlaWdodCA9IE51bWJlcih0YWJsZUhlaWdodCk7XG4gICAgaWYgKCFpc05hTihwYXJzZWRIZWlnaHQpICYmIHBhcnNlZEhlaWdodCA+IDApIHtcbiAgICAgIHJldHVybiBwYXJzZWRIZWlnaHQ7XG4gICAgfVxuICB9XG5cbiAgc2hvdWxkU2hvd0NvbHVtbihmaWVsZDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgXG4gICAgbGV0IGV4Y2x1ZGVkRmllbGRzID0gWydyZWNvcmREYXRlJywgJ3JlY29yZF9kYXRlJywgJ2V2ZW50RGF0ZScsICdldmVudF9kYXRlJ107XG4gICAgaWYgKHRoaXMudGFibGVTaG9ydEJ5ICYmIHRoaXMudGFibGVTaG9ydEJ5Lmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy50YWJsZVNob3J0QnkuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgZXhjbHVkZWRGaWVsZHMucHVzaChlbGVtZW50KVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiAhZXhjbHVkZWRGaWVsZHMuaW5jbHVkZXMoZmllbGQpO1xuICB9XG5cbn0iLCI8IS0tIDxkaXYgY2xhc3M9XCJteC0yIGJnLWdyYXktODAwXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImlzTG9hZGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLXN0YXJ0IGJnLWdyYXktODAwIHAtMlwiPlxuICAgICAgICAgICAgPGFwcC1sb2FkZXI+PC9hcHAtbG9hZGVyPlxuICAgICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgIDxkaXYgY2xhc3M9XCJteC0yIHBiLTJcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIiFpc0xvYWRlclwiPlxuICAgICAgICAgICAgPGR4LWRhdGEtZ3JpZCAob25GaWxlU2F2aW5nKT1cImRvd25sb2FkVGFibGVEYXRhKCRldmVudClcIiBbZGF0YVNvdXJjZV09XCJwZXJjZW50YWdlRGF0YVNvdXJjZVwiXG4gICAgICAgICAgICAgICAgKG9uUm93Q2xpY2spPVwib25Sb3dDbGljaygkZXZlbnQpXCIgW3Jvd0FsdGVybmF0aW9uRW5hYmxlZF09XCJ0cnVlXCIgW2hvdmVyU3RhdGVFbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtzZWxlY3RlZFJvd0tleXNdPVwiW11cIiBbc2hvd0JvcmRlcnNdPVwidHJ1ZVwiIFtzaG93Q29sdW1uTGluZXNdPVwidHJ1ZVwiIFtzaG93Um93TGluZXNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3Nob3dSb3dMaW5lc109XCJ0cnVlXCIgaWQ9XCJncmlkQ29udGFpbmVyXCIgKG9uQ29udGV4dE1lbnVQcmVwYXJpbmcpPVwiYWRkTWVudUl0ZW1zKCRldmVudClcIj5cbiAgICAgICAgICAgICAgICA8ZHhvLXNlYXJjaC1wYW5lbCBbaGlnaGxpZ2h0Q2FzZVNlbnNpdGl2ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW3Zpc2libGVdPVwidGFibGVDb25maWcuc2VhcmNoUGFuZWxcIj48L2R4by1zZWFyY2gtcGFuZWw+XG4gICAgICAgICAgICAgICAgPGR4by1leHBvcnQgW2VuYWJsZWRdPVwidHJ1ZVwiIGZpbGVOYW1lPVwie3t0YWJsZUNvbmZpZy5maWxlX25hbWV9fVwiPjwvZHhvLWV4cG9ydD5cbiAgICAgICAgICAgICAgICA8ZHhvLXBhZ2luZyBbcGFnZVNpemVdPVwidGFibGVDb25maWcubnVtYmVyT2ZSb3dcIj48L2R4by1wYWdpbmc+XG4gICAgICAgICAgICAgICAgPGR4by1wYWdlciBbc2hvd0luZm9dPVwidGFibGVDb25maWcucGFnZUluZm9cIiBbc2hvd1BhZ2VTaXplU2VsZWN0b3JdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgIFthbGxvd2VkUGFnZVNpemVzXT1cInRhYmxlQ29uZmlnLmFsbG93ZWRQYWdlU2l6ZXNcIj5cbiAgICAgICAgICAgICAgICA8L2R4by1wYWdlcj5cbiAgICAgICAgICAgICAgICA8ZHhvLWxvYWQtcGFuZWwgW2VuYWJsZWRdPVwidHJ1ZVwiPlxuICAgICAgICAgICAgICAgIDwvZHhvLWxvYWQtcGFuZWw+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBhcmd1bWVudFZhbHVlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeGktY29sdW1uICpuZ0lmPVwiaXRlbS5kYXRhRmllbGQgPT0gJ3JlY29yZERhdGUnXCIgZGF0YUZpZWxkPVwie3sgaXRlbS5kYXRhRmllbGQgfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW2NhcHRpb25dPVwiaXRlbS5jYXB0aW9uXCIgW3Zpc2libGVdPVwiaXRlbS52aXNpYmxlXCIgc29ydE9yZGVyPVwiZGVzY1wiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCJpdGVtLmRhdGFGaWVsZCAhPT0gJ3JlY29yZERhdGUnXCIgZm9ybWF0PVwiIywjIzAuIyNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmdNZXRob2RdPVwiY29tbW9uU2VydmljZS5jdXN0b21WYWx1ZVNvcnRlclwiIFtjYXB0aW9uXT1cIml0ZW0uY2FwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhRmllbGQ9XCJ7eyBpdGVtLmRhdGFGaWVsZCB9fVwiIGFsaWdubWVudD1cImxlZnRcIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YUNvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBjZWxsVGVtcGxhdGU9XCJ7eyBpdGVtLmRhdGFGaWVsZCB9fVwiIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCIgYWxpZ25tZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmdNZXRob2RdPVwiY29tbW9uU2VydmljZS5jdXN0b21WYWx1ZVNvcnRlckZvckJhclwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFDb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICBpdGVtLmRhdGFGaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImRhdGEudmFsdWUgfCBjb250ZW50U2FmZUh0bWxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L2Rpdj5cbjwvZGl2PiAtLT5cblxuPGRpdiBjbGFzcz1cIm14LTIgYmctZ3JheS04MDBcIj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXNMb2FkZXJcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtc3RhcnQgYmctZ3JheS04MDAgcC0yXCI+XG4gICAgICAgICAgICA8YXBwLWxvYWRlcj48L2FwcC1sb2FkZXI+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcGItMlwiPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWlzTG9hZGVyXCI+XG4gICAgICAgICAgICA8ZHgtZGF0YS1ncmlkIChvblJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiIFtkYXRhU291cmNlXT1cInBlcmNlbnRhZ2VEYXRhU291cmNlXCIgW2hlaWdodF09XCJ0YWJsZUhlaWdodFwiXG4gICAgICAgICAgICAgICAgKG9uQ29udGV4dE1lbnVQcmVwYXJpbmcpPVwiYWRkTWVudUl0ZW1zKCRldmVudClcIiBbcm93QWx0ZXJuYXRpb25FbmFibGVkXT1cInRydWVcIlxuICAgICAgICAgICAgICAgIFtob3ZlclN0YXRlRW5hYmxlZF09XCJ0cnVlXCIgW3NlbGVjdGVkUm93S2V5c109XCJbXVwiIFtzaG93Qm9yZGVyc109XCJ0cnVlXCIgW3Nob3dDb2x1bW5MaW5lc109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBbc2hvd1Jvd0xpbmVzXT1cInRydWVcIiBpZD1cImdyaWRDb250YWluZXJcIlxuICAgICAgICAgICAgICAgIFtjdXN0b21pemVFeHBvcnREYXRhXT1cImNvbW1vblNlcnZpY2UucmVtb3ZlSHRtbENvbnRlbnRGcm9tRGF0YVwiPlxuICAgICAgICAgICAgICAgIDxkeG8tc2VhcmNoLXBhbmVsIFtoaWdobGlnaHRDYXNlU2Vuc2l0aXZlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICBbdmlzaWJsZV09XCJ0YWJsZUNvbmZpZy5zZWFyY2hQYW5lbFwiPjwvZHhvLXNlYXJjaC1wYW5lbD5cbiAgICAgICAgICAgICAgICA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJ0cnVlXCIgZmlsZU5hbWU9XCJ7e3RhYmxlQ29uZmlnLmZpbGVfbmFtZX19XCI+PC9keG8tZXhwb3J0PlxuICAgICAgICAgICAgICAgIDxkeG8tcGFnaW5nIFtwYWdlU2l6ZV09XCJ0YWJsZUNvbmZpZy5udW1iZXJPZlJvd1wiPjwvZHhvLXBhZ2luZz5cbiAgICAgICAgICAgICAgICA8ZHhvLXBhZ2VyIFtzaG93SW5mb109XCJ0YWJsZUNvbmZpZy5wYWdlSW5mb1wiIFtzaG93UGFnZVNpemVTZWxlY3Rvcl09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgW2FsbG93ZWRQYWdlU2l6ZXNdPVwidGFibGVDb25maWcuYWxsb3dlZFBhZ2VTaXplc1wiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXBhZ2VyPlxuICAgICAgICAgICAgICAgIDxkeG8tbG9hZC1wYW5lbCBbZW5hYmxlZF09XCJ0cnVlXCI+XG4gICAgICAgICAgICAgICAgPC9keG8tbG9hZC1wYW5lbD5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGFyZ3VtZW50VmFsdWVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4aS1jb2x1bW4gKm5nSWY9XCIhc2hvdWxkU2hvd0NvbHVtbihpdGVtLmRhdGFGaWVsZClcIiBkYXRhRmllbGQ9XCJ7eyBpdGVtLmRhdGFGaWVsZCB9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbY2FwdGlvbl09XCJpdGVtLmNhcHRpb25cIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIiBzb3J0T3JkZXI9XCJkZXNjXCI+PC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiAqbmdJZj1cInNob3VsZFNob3dDb2x1bW4oaXRlbS5kYXRhRmllbGQpXCIgZm9ybWF0PVwiIywjIzAuIyNcIiBbY2FwdGlvbl09XCJpdGVtLmNhcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmdNZXRob2RdPVwiY29tbW9uU2VydmljZS5jdXN0b21WYWx1ZVNvcnRlclwiIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFsaWdubWVudD1cImxlZnRcIiBbdmlzaWJsZV09XCJpdGVtLnZpc2libGVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9keGktY29sdW1uPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgZGF0YUNvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhpLWNvbHVtbiBjZWxsVGVtcGxhdGU9XCJ7eyBpdGVtLmRhdGFGaWVsZCB9fVwiIGRhdGFGaWVsZD1cInt7IGl0ZW0uZGF0YUZpZWxkIH19XCIgYWxpZ25tZW50PVwicmlnaHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgW3NvcnRpbmdNZXRob2RdPVwiY29tbW9uU2VydmljZS5jdXN0b21WYWx1ZVNvcnRlckZvckJhclwiPjwvZHhpLWNvbHVtbj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGRhdGFDb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiAqZHhUZW1wbGF0ZT1cImxldCBkYXRhIG9mICBpdGVtLmRhdGFGaWVsZFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBbaW5uZXJIVE1MXT1cImRhdGEudmFsdWUgfCBjb250ZW50U2FmZUh0bWxcIj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8L2R4LWRhdGEtZ3JpZD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuXG48IS0tIChvbkZpbGVTYXZpbmcpPVwiZG93bmxvYWRUYWJsZURhdGEoJGV2ZW50KVwiIC0tPiJdfQ==
@@ -262,8 +262,15 @@ export class TemplateDatasetCallService {
262
262
  const tenantIds = dataset.config.queryConfig.mapedFilters
263
263
  .filter(f => f.serverColumn === "tenant_id")
264
264
  .map(f => f.defaultValue);
265
- const associatedTenants = this.securityPrincipal.getTargetTenantIds();
266
- const isMatch = (associatedTenants) ? tenantIds.some(t => associatedTenants.includes(t)) : true;
265
+ let isMatch;
266
+ const username = this.securityPrincipal.getPrincipalName();
267
+ if (username == "admin" || this.securityPrincipal.groupDetails?.includes('pronto-admin-group')) {
268
+ isMatch = true;
269
+ }
270
+ else {
271
+ const associatedTenants = this.securityPrincipal.getTargetTenantIds();
272
+ isMatch = (tenantIds) ? (associatedTenants) ? tenantIds.some(t => associatedTenants.includes(t)) : false : true;
273
+ }
267
274
  if (!isMatch) {
268
275
  this.toastr.error("Unauthorized Access");
269
276
  this.uniqueDataSetObject[datasetId] = [];
@@ -370,4 +377,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
370
377
  type: Inject,
371
378
  args: [APP_SECURITY_PRINCIPAL]
372
379
  }] }]; } });
373
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGF0YXNldC1jYWxsLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC90ZW1wbGF0ZS1kYXRhc2V0LWNhbGwtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLE1BQU0sTUFBTSx5Q0FBeUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7QUFHOUQsTUFBTSxPQUFPLDBCQUEwQjtJQUduQyxZQUNZLFVBQTRCLEVBQzVCLE1BQXFCLEVBQ0ksV0FBZ0IsRUFDVCxpQkFBc0I7UUFIdEQsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNJLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBQ1Qsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFLO1FBTmxFLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztJQVE5QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsY0FBbUIsRUFBRSxPQUFZLEVBQUUsU0FBaUIsRUFBRSxPQUFZO1FBQ2pGLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0RTthQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxjQUFjLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEY7YUFBTSxJQUFJ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LENBQUM7b0JBQzFCLFNBQVMsQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztpQkFDakQ7cUJBQU07b0JBQ0gsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3ZDO2dCQUVELElBQUksU0FBUyxJQUFJLGNBQWMsRUFBRTtvQkFDN0IsU0FBUyxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7aUJBQzdCO2dCQUNELE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDMUI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUVILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxzQkFBc0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUM7SUFDcEMsQ0FBQzs7dUhBbFhRLDBCQUEwQiwrRUFNdkIsZUFBZSxhQUNmLHNCQUFzQjsySEFQekIsMEJBQTBCLGNBRGIsTUFBTTsyRkFDbkIsMEJBQTBCO2tCQUR0QyxVQUFVO21CQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRTs7MEJBT3pCLE1BQU07MkJBQUMsZUFBZTs7MEJBQ3RCLE1BQU07MkJBQUMsc0JBQXNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgbW9tZW50IGZyb20gJy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvbW9tZW50LWhlbHBlcic7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2Vudmlyb25tZW50JztcbmltcG9ydCB7IGtwaWNvbW1vblNlcnZpY2UgfSBmcm9tICcuLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2twaS1zZXJ2aWNlJztcbmltcG9ydCB7IEFQUF9TRUNVUklUWV9QUklOQ0lQQUwgfSBmcm9tICcuL3NlY3VyaXR5X3ByaW5jaXBhbCc7XG5cbkBJbmplY3RhYmxlKHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH0pXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVEYXRhc2V0Q2FsbFNlcnZpY2Uge1xuICAgIHVuaXF1ZURhdGFTZXRPYmplY3Q6IGFueSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIHByaXZhdGUga3BpU2VydmljZToga3BpY29tbW9uU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgICAgIEBJbmplY3QoQVBQX0VOVklST05NRU5UKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnksXG4gICAgICAgIEBJbmplY3QoQVBQX1NFQ1VSSVRZX1BSSU5DSVBBTCkgcHJpdmF0ZSBzZWN1cml0eVByaW5jaXBhbDogYW55XG4gICAgKSB7XG4gICAgfVxuXG4gICAgZ2V0RGF0YUZyb21EYXRhU2V0KGJhY2tlbmRTZXJ2aWNlOiBhbnksIGRhdGFzZXQ6IGFueSwgZGF0YXNldElkOiBzdHJpbmcsIGZpbHRlcnM6IGFueSkge1xuICAgICAgICBpZiAoZGF0YXNldC5kYXRhc2V0VHlwZSA9PT0gJ21vbmdvJykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YVNldEZvck1vbmdvKGJhY2tlbmRTZXJ2aWNlLCBkYXRhc2V0LCBkYXRhc2V0SWQpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT09ICdxdWVyeWJ1aWxkZXInKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhc2V0Rm9ySW1wYWxhKGJhY2tlbmRTZXJ2aWNlLCBkYXRhc2V0LCBkYXRhc2V0SWQsIGZpbHRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT09ICdzaW1wbGVBcGknKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhc2V0Rm9yU2ltcGxlQXBpSW1wYWxhKGJhY2tlbmRTZXJ2aWNlLCBkYXRhc2V0LCBkYXRhc2V0SWQsIGZpbHRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT09ICdwbGFpbmpzb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhc2V0Rm9yUGxhaW5Kc29uKGJhY2tlbmRTZXJ2aWNlLCBkYXRhc2V0LCBkYXRhc2V0SWQsIGZpbHRlcnMpO1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFzZXQuZGF0YXNldFR5cGUgPT09ICdzcWxRdWVyeScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFzZXRGb3JTcWxUZW1wbGF0ZShiYWNrZW5kU2VydmljZSwgZGF0YXNldCwgZGF0YXNldElkLCBmaWx0ZXJzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YVNldEZvck1vbmdvKGJhY2tlbmRTZXJ2aWNlOiBhbnksIGRhdGFzZXQ6IGFueSwgZGF0YXNldElkOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCBhcGlKc29uT2JqZWN0ID0ge1xuICAgICAgICAgICAgICAgIHJlcXVlc3RJZDogZGF0YXNldC5jb25maWcuc2VydmljZUlkXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcyAmJiBkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMubGVuZ3RoICE9IDApIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzKSB7XG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oYXBpSnNvbk9iamVjdCwgaXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgbW9uX2NvbmZpZyA9IHRoaXMua3BpU2VydmljZS5nZXRBbGxTZXZpY2VBcGlKc29uKGFwaUpzb25PYmplY3QpO1xuICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2V0RGF0YShtb25fY29uZmlnLCBkYXRhc2V0LmNvbmZpZy5hcGkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVsnUGF5bG9hZCddIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhc2V0Rm9ySW1wYWxhKGJhY2tlbmRTZXJ2aWNlOiBhbnksIGRhdGFzZXQ6IGFueSwgZGF0YXNldElkOiBzdHJpbmcsIGZpbHRlcnM6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IHJlcXVlc3QgPSBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZztcbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZE9iamVjdDogYW55ID0ge307XG4gICAgICAgICAgICBmb3IgKGxldCBpdGVtIG9mIHJlcXVlc3QucmVxRmllbGRzKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMoaXRlbSlbMF07XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBPYmplY3QudmFsdWVzKGl0ZW0pWzBdO1xuICAgICAgICAgICAgICAgIGlmIChrZXkgPT09ICdzdGFydERhdGUnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0LnJlY29yZERhdGUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFtrZXldID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSAoZmlsdGVycyAmJiBmaWx0ZXJzLmxlbmd0aCAhPT0gMCkgPyBPYmplY3Qua2V5cyhmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcikubWFwKGtleSA9PiAoeyBba2V5XTogZmlsdGVycy5vcGVyYXRpb25GaWx0ZXJba2V5XSB9KSkgOiBbXTtcblxuICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ2ZpbHRlcnMnXSA9IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXIob3BlcmF0b3IsIHJlcXVlc3QubWFwZWRGaWx0ZXJzKTtcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0Wydzb3J0ZXJzJ10gPSByZXF1ZXN0LnNvcnRlcnM7XG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFsncGFnaW5hdGlvblJlcXVpcmVkJ10gPSBmYWxzZTtcblxuICAgICAgICAgICAgaWYgKGRhdGFzZXQuY29uZmlnLmFwaSA9PSBcIi9rcGkvZ2VuZXJpY0FnZ3JlZ2F0ZVBhZ2luYXRlZEtwaVNlcnZpY2VSZXNwb25zZVwiKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ21lYXN1cmVzJ10gPSByZXF1ZXN0Lm1lYXN1cmVzO1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydkaW1lbnNpb25zJ10gPSByZXF1ZXN0LmRpbWVuc2lvbnM7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0Wydjb2x1bW5zJ10gPSB0aGlzLmdldEZvcm1hdE9iamVjdEZvckNvbHVtbihyZXF1ZXN0LmNvbHVtbnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcXVlc3QuaGF2aW5ncyAmJiByZXF1ZXN0LmhhdmluZ3MubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ2hhdmluZ3MnXSA9IHJlcXVlc3QuaGF2aW5ncztcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2V0RGF0YSh0cmFuc2Zvcm1lZE9iamVjdCwgZGF0YXNldC5jb25maWcuYXBpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbJ2RhdGFzZXQnXTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRGb3JtYXRPYmplY3RGb3JDb2x1bW4oY29sdW1uczogYW55W10pIHtcbiAgICAgICAgbGV0IGNvbHVtbkRhdGE6IGFueVtdID0gW107XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgYWR2YW5jZWRDb2x1bW4sIGNvbHVtbk5hbWUsIGVucmljaEZ1bmN0aW9uLCBkYXRhRmllbGQgfSA9IGVsZW1lbnQ7XG4gICAgICAgICAgICBjb2x1bW5EYXRhLnB1c2goe1xuICAgICAgICAgICAgICAgIGFkdmFuY2VkQ29sdW1uLFxuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWUsXG4gICAgICAgICAgICAgICAgZW5yaWNoRnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgYWxpYXNOYW1lOiBkYXRhRmllbGRcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGNvbHVtbkRhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1EYXRhRm9yTUZpbHRlcihmaWx0ZXJkYXRhOiBhbnlbXSwgbWFwRGF0YTogYW55W10pIHtcbiAgICAgICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgICAgbWFwRGF0YS5mb3JFYWNoKG1hcHBpbmcgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdE9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IG1hcHBpbmcuc2VydmVyQ29sdW1uLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBtYXBwaW5nLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWFwcGluZy5kZWZhdWx0VmFsdWVcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAobWFwcGluZy5zZXJ2ZXJDb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgcmVzdWx0T2JqLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgZmlsdGVyID0gZmlsdGVyZGF0YS5maW5kKGYgPT4gZi5oYXNPd25Qcm9wZXJ0eShtYXBwaW5nLmxvY2FsQ29sdW1uKSk7XG4gICAgICAgICAgICBpZiAoZmlsdGVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuZGVmYXVsdFZhbHVlID09PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gZmlsdGVyW21hcHBpbmcubG9jYWxDb2x1bW5dO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLm9wZXJhdG9yID0gXCJpblwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWUuam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZy5zZXJ2ZXJDb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgcmVzdWx0T2JqLnZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuZm9ybWF0dGVyICYmIG1hcHBpbmcuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdChtYXBwaW5nLmZvcm1hdHRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBmaWx0ZXJkYXRhID0gZmlsdGVyZGF0YS5maWx0ZXIob2JqID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG9iailbMF07XG4gICAgICAgICAgICByZXR1cm4ga2V5ICE9PSAnc3RhcnREYXRlJyAmJiBrZXkgIT09ICdlbmREYXRlJztcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbHRlcmRhdGEuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTWFwcGluZyA9IG1hcERhdGEuZmluZChtYXBwaW5nID0+IG1hcHBpbmcubG9jYWxDb2x1bW4gPT09IGZpbHRlcktleSk7XG5cbiAgICAgICAgICAgIGlmICghZXhpc3RpbmdNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdE9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBmaWx0ZXJLZXksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJlcVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyW2ZpbHRlcktleV1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW2ZpbHRlcktleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gZmlsdGVyW2ZpbHRlcktleV0uam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gZmlsdGVyW2ZpbHRlcktleV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSA9PSAnb3BlcmF0b3Jfa2V5Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImVxXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIob2JqID0+IG9iai52YWx1ZSAhPT0gbnVsbCAmJiBvYmoudmFsdWUgIT09IFwiXCIpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YXNldEZvclNpbXBsZUFwaUltcGFsYShiYWNrZW5kU2VydmljZTogYW55LCBkYXRhc2V0OiBhbnksIGRhdGFzZXRJZDogc3RyaW5nLCBmaWx0ZXJzOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyLmhhc093blByb3BlcnR5KGZpbHRlci5sb2NhbENvbHVtbikpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyLmRlZmF1bHRWYWx1ZSA9IGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyW2ZpbHRlci5sb2NhbENvbHVtbl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5jb25maWcuYXBpVHlwZSA9PT0gXCJwb3N0XCIpIHtcbiAgICAgICAgICAgICAgICBsZXQgc2VydmljZUpzb246IGFueSA9IHt9O1xuICAgICAgICAgICAgICAgIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5mb3JFYWNoKChmaWx0ZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBsZXQgZGF0ZWNvbHVtbiA9IGZpbHRlci5zZXJ2ZXJDb2x1bW4udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGVjb2x1bW4uaW5jbHVkZXMoJ2RhdGUnKSAmJiB0eXBlb2YgZmlsdGVyLmRhdGFUeXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBtb21lbnQoZmlsdGVyLmRlZmF1bHRWYWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VydmljZUpzb25bZmlsdGVyLnNlcnZlckNvbHVtbl0gPSBmaWx0ZXIuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBiYWNrZW5kU2VydmljZS5nZXRTaW1wbGVBcGlQb3N0UmVxdWVzdChkYXRhc2V0LmNvbmZpZy5hcGksIHNlcnZpY2VKc29uKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudG9hc3RyLmVycm9yKGVyci5tZXNzYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGF0YXNldC5jb25maWcuYXBpVHlwZSA9PT0gXCJnZXRcIikge1xuICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0VXJsID0gZGF0YXNldC5jb25maWcuYXBpICsgXCI/XCI7XG4gICAgICAgICAgICAgICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmZvckVhY2goKGZpbHRlcjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmwgKz0gYCR7ZmlsdGVyLnNlcnZlckNvbHVtbn09JHtmaWx0ZXIuZGVmYXVsdFZhbHVlfWA7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA8IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0VXJsICs9IFwiJlwiO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICBiYWNrZW5kU2VydmljZS5nZXRTaW1wbGVBcGlHZXRSZXF1ZXN0KHJlcXVlc3RVcmwpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFzZXRGb3JQbGFpbkpzb24oYmFja2VuZFNlcnZpY2U6IGFueSwgZGF0YXNldDogYW55LCBkYXRhc2V0SWQ6IHN0cmluZywgX2ZpbHRlcjogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdGFwaSA9IGRhdGFzZXQuY29uZmlnLmFwaSArICc/ZGF0YXNldElkPScgKyBkYXRhc2V0LmRhdGFzZXRJZDtcbiAgICAgICAgICAgIGJhY2tlbmRTZXJ2aWNlLmdldEpzb25EYXRhc2V0UGF5bG9hZChyZXF1ZXN0YXBpKS5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gcGF5bG9hZDtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgZXJyb3I6IChlcnI6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhc2V0Rm9yU3FsVGVtcGxhdGUoYmFja2VuZFNlcnZpY2U6IGFueSwgZGF0YXNldDogYW55LCBkYXRhc2V0SWQ6IHN0cmluZywgZmlsdGVyczogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IChmaWx0ZXJzICYmIGZpbHRlcnMubGVuZ3RoICE9PSAwKSA/IE9iamVjdC5rZXlzKGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyKS5tYXAoa2V5ID0+ICh7IFtrZXldOiBmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltrZXldIH0pKSA6IFtdO1xuICAgICAgICAgICAgbGV0IHJlcXVlc3RBcCA9IGRhdGFzZXQuY29uZmlnLmFwaTtcblxuICAgICAgICAgICAgY29uc3QgdGVuYW50SWRzID0gZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmID0+IGYuc2VydmVyQ29sdW1uID09PSBcInRlbmFudF9pZFwiKVxuICAgICAgICAgICAgICAgIC5tYXAoZiA9PiBmLmRlZmF1bHRWYWx1ZSk7XG5cbiAgICAgICAgICAgIGNvbnN0IGFzc29jaWF0ZWRUZW5hbnRzID0gdGhpcy5zZWN1cml0eVByaW5jaXBhbC5nZXRUYXJnZXRUZW5hbnRJZHMoKTtcbiAgICAgICAgICAgIGNvbnN0IGlzTWF0Y2ggPSAoYXNzb2NpYXRlZFRlbmFudHMpID8gdGVuYW50SWRzLnNvbWUodCA9PiBhc3NvY2lhdGVkVGVuYW50cy5pbmNsdWRlcyh0KSkgOiB0cnVlO1xuICAgICAgICAgICAgaWYgKCFpc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJVbmF1dGhvcml6ZWQgQWNjZXNzXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gW107XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0X3BhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldElkOiBkYXRhc2V0SWQsXG4gICAgICAgICAgICAgICAgICAgIC8vIGRiQ29uZmlnOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5kYkNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgLy8gZGF0YWJhc2VOYW1lOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXJGb3JTUWwob3BlcmF0b3IsIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycyksXG4gICAgICAgICAgICAgICAgICAgIC8vIHRlbXBsYXRlUXVlcnk6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLnRlbXBsYXRlUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIC8vIGVucmljaG1lbnRzOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5lbnJpY2htZW50c1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2VuZXJpY1NxbFF1ZXJ5UmVzcG9uc2UocmVxdWVzdEFwLCByZXF1ZXN0X3BhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRGF0YUZvck1GaWx0ZXJGb3JTUWwoZmlsdGVyZGF0YTogYW55W10sIG1hcERhdGE6IGFueVtdKSB7XG4gICAgICAgIFxuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgICAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0T2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZTogbWFwcGluZy5zZXJ2ZXJDb2x1bW4sXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IG1hcHBpbmcub3BlcmF0b3JOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAgICAgICBhbGlhc0NvbHVtbk5hbWU6IG1hcHBpbmcubG9jYWxDb2x1bW5cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGZpbHRlcmRhdGEuZmluZChmID0+IGYuaGFzT3duUHJvcGVydHkobWFwcGluZy5sb2NhbENvbHVtbikpO1xuICAgICAgICAgICAgaWYgKGZpbHRlcikge1xuICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGZpbHRlclttYXBwaW5nLmxvY2FsQ29sdW1uXTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlLmpvaW4oXCIsXCIpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gdmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuc2VydmVyQ29sdW1uLmluY2x1ZGVzKCdkYXRlJykgJiYgdHlwZW9mIHJlc3VsdE9iai52YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLmZvcm1hdHRlciAmJiBtYXBwaW5nLmZvcm1hdHRlciAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCkuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpbHRlcmRhdGEgPSBmaWx0ZXJkYXRhLmZpbHRlcihvYmogPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMob2JqKVswXTtcbiAgICAgICAgICAgIHJldHVybiBrZXkgIT09ICdzdGFydERhdGUnICYmIGtleSAhPT0gJ2VuZERhdGUnO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVyZGF0YS5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJLZXkgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdNYXBwaW5nID0gbWFwRGF0YS5maW5kKG1hcHBpbmcgPT4gbWFwcGluZy5sb2NhbENvbHVtbiA9PT0gZmlsdGVyS2V5KTtcblxuICAgICAgICAgICAgaWYgKCFleGlzdGluZ01hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0T2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGZpbHRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJbZmlsdGVyS2V5XVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbZmlsdGVyS2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLm9wZXJhdG9yID0gXCJpblwiO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyS2V5ID09ICdvcGVyYXRvcl9rZXknKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiZXFcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocmVzdWx0T2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRVbmlxdWVEYXRhU2V0T2JqZWN0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0O1xuICAgIH1cbn0iXX0=
380
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUtZGF0YXNldC1jYWxsLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC90ZW1wbGF0ZS1kYXRhc2V0LWNhbGwtc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLE1BQU0sTUFBTSx5Q0FBeUMsQ0FBQztBQUU3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFFeEUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7QUFHOUQsTUFBTSxPQUFPLDBCQUEwQjtJQUduQyxZQUNZLFVBQTRCLEVBQzVCLE1BQXFCLEVBQ0ksV0FBZ0IsRUFDVCxpQkFBc0I7UUFIdEQsZUFBVSxHQUFWLFVBQVUsQ0FBa0I7UUFDNUIsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUNJLGdCQUFXLEdBQVgsV0FBVyxDQUFLO1FBQ1Qsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFLO1FBTmxFLHdCQUFtQixHQUFRLEVBQUUsQ0FBQztJQVE5QixDQUFDO0lBRUQsa0JBQWtCLENBQUMsY0FBbUIsRUFBRSxPQUFZLEVBQUUsU0FBaUIsRUFBRSxPQUFZO1FBQ2pGLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxPQUFPLEVBQUU7WUFDakMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztTQUN0RTthQUFNLElBQUksT0FBTyxDQUFDLFdBQVcsS0FBSyxjQUFjLEVBQUU7WUFDL0MsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDaEY7YUFBTSxJQUFJ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LENBQUM7WUFFbkYsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDbEIsSUFBSSxTQUFTLEdBQVE7b0JBQ2pCLFVBQVUsRUFBRSxTQUFTO29CQUNyQixRQUFRLEVBQUUsUUFBUTtvQkFDbEIsUUFBUSxFQUFFLElBQUk7b0JBQ2QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxTQUFTLENBQUM7aUJBQzNCLENBQUM7Z0JBRUYsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFO29CQUNsQyxTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztvQkFDMUIsU0FBUyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2lCQUNqRDtxQkFBTTtvQkFDSCxTQUFTLENBQUMsS0FBSyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDdkM7Z0JBRUQsSUFBSSxTQUFTLElBQUksY0FBYyxFQUFFO29CQUM3QixTQUFTLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztpQkFDN0I7Z0JBQ0QsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUMxQjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVELHNCQUFzQjtRQUNsQixPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQztJQUNwQyxDQUFDOzt1SEExWFEsMEJBQTBCLCtFQU12QixlQUFlLGFBQ2Ysc0JBQXNCOzJIQVB6QiwwQkFBMEIsY0FEYixNQUFNOzJGQUNuQiwwQkFBMEI7a0JBRHRDLFVBQVU7bUJBQUMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFOzswQkFPekIsTUFBTTsyQkFBQyxlQUFlOzswQkFDdEIsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IFRvYXN0clNlcnZpY2UgfSBmcm9tICduZ3gtdG9hc3RyJztcbmltcG9ydCB7IEFQUF9FTlZJUk9OTUVOVCB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvZW52aXJvbm1lbnQnO1xuaW1wb3J0IHsga3BpY29tbW9uU2VydmljZSB9IGZyb20gJy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIva3BpLXNlcnZpY2UnO1xuaW1wb3J0IHsgQVBQX1NFQ1VSSVRZX1BSSU5DSVBBTCB9IGZyb20gJy4vc2VjdXJpdHlfcHJpbmNpcGFsJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBUZW1wbGF0ZURhdGFzZXRDYWxsU2VydmljZSB7XG4gICAgdW5pcXVlRGF0YVNldE9iamVjdDogYW55ID0ge307XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSBrcGlTZXJ2aWNlOiBrcGljb21tb25TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRvYXN0cjogVG9hc3RyU2VydmljZSxcbiAgICAgICAgQEluamVjdChBUFBfRU5WSVJPTk1FTlQpIHByaXZhdGUgZW52aXJvbm1lbnQ6IGFueSxcbiAgICAgICAgQEluamVjdChBUFBfU0VDVVJJVFlfUFJJTkNJUEFMKSBwcml2YXRlIHNlY3VyaXR5UHJpbmNpcGFsOiBhbnlcbiAgICApIHtcbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbURhdGFTZXQoYmFja2VuZFNlcnZpY2U6IGFueSwgZGF0YXNldDogYW55LCBkYXRhc2V0SWQ6IHN0cmluZywgZmlsdGVyczogYW55KSB7XG4gICAgICAgIGlmIChkYXRhc2V0LmRhdGFzZXRUeXBlID09PSAnbW9uZ28nKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRhU2V0Rm9yTW9uZ28oYmFja2VuZFNlcnZpY2UsIGRhdGFzZXQsIGRhdGFzZXRJZCk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YXNldC5kYXRhc2V0VHlwZSA9PT0gJ3F1ZXJ5YnVpbGRlcicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFzZXRGb3JJbXBhbGEoYmFja2VuZFNlcnZpY2UsIGRhdGFzZXQsIGRhdGFzZXRJZCwgZmlsdGVycyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YXNldC5kYXRhc2V0VHlwZSA9PT0gJ3NpbXBsZUFwaScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFzZXRGb3JTaW1wbGVBcGlJbXBhbGEoYmFja2VuZFNlcnZpY2UsIGRhdGFzZXQsIGRhdGFzZXRJZCwgZmlsdGVycyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YXNldC5kYXRhc2V0VHlwZSA9PT0gJ3BsYWluanNvbicpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdldERhdGFzZXRGb3JQbGFpbkpzb24oYmFja2VuZFNlcnZpY2UsIGRhdGFzZXQsIGRhdGFzZXRJZCwgZmlsdGVycyk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGF0YXNldC5kYXRhc2V0VHlwZSA9PT0gJ3NxbFF1ZXJ5Jykge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0RGF0YXNldEZvclNxbFRlbXBsYXRlKGJhY2tlbmRTZXJ2aWNlLCBkYXRhc2V0LCBkYXRhc2V0SWQsIGZpbHRlcnMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhU2V0Rm9yTW9uZ28oYmFja2VuZFNlcnZpY2U6IGFueSwgZGF0YXNldDogYW55LCBkYXRhc2V0SWQ6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgbGV0IGFwaUpzb25PYmplY3QgPSB7XG4gICAgICAgICAgICAgICAgcmVxdWVzdElkOiBkYXRhc2V0LmNvbmZpZy5zZXJ2aWNlSWRcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoZGF0YXNldC5jb25maWcuZml4T3BlcmF0aW9uTGV2bGVzICYmIGRhdGFzZXQuY29uZmlnLmZpeE9wZXJhdGlvbkxldmxlcy5sZW5ndGggIT0gMCkge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhc2V0LmNvbmZpZy5maXhPcGVyYXRpb25MZXZsZXMpIHtcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihhcGlKc29uT2JqZWN0LCBpdGVtKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtb25fY29uZmlnID0gdGhpcy5rcGlTZXJ2aWNlLmdldEFsbFNldmljZUFwaUpzb24oYXBpSnNvbk9iamVjdCk7XG4gICAgICAgICAgICBiYWNrZW5kU2VydmljZS5nZXREYXRhKG1vbl9jb25maWcsIGRhdGFzZXQuY29uZmlnLmFwaSkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBuZXh0OiAoZGF0YTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhWydQYXlsb2FkJ10gfHwgZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFzZXRGb3JJbXBhbGEoYmFja2VuZFNlcnZpY2U6IGFueSwgZGF0YXNldDogYW55LCBkYXRhc2V0SWQ6IHN0cmluZywgZmlsdGVyczogYW55KSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBsZXQgcmVxdWVzdCA9IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnO1xuICAgICAgICAgICAgbGV0IHRyYW5zZm9ybWVkT2JqZWN0OiBhbnkgPSB7fTtcbiAgICAgICAgICAgIGZvciAobGV0IGl0ZW0gb2YgcmVxdWVzdC5yZXFGaWVsZHMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBPYmplY3Qua2V5cyhpdGVtKVswXTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IE9iamVjdC52YWx1ZXMoaXRlbSlbMF07XG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PT0gJ3N0YXJ0RGF0ZScpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3QucmVjb3JkRGF0ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBvcGVyYXRvciA9IChmaWx0ZXJzICYmIGZpbHRlcnMubGVuZ3RoICE9PSAwKSA/IE9iamVjdC5rZXlzKGZpbHRlcnMub3BlcmF0aW9uRmlsdGVyKS5tYXAoa2V5ID0+ICh7IFtrZXldOiBmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcltrZXldIH0pKSA6IFtdO1xuXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFsnZmlsdGVycyddID0gdGhpcy50cmFuc2Zvcm1EYXRhRm9yTUZpbHRlcihvcGVyYXRvciwgcmVxdWVzdC5tYXBlZEZpbHRlcnMpO1xuICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ3NvcnRlcnMnXSA9IHJlcXVlc3Quc29ydGVycztcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkT2JqZWN0WydwYWdpbmF0aW9uUmVxdWlyZWQnXSA9IGZhbHNlO1xuXG4gICAgICAgICAgICBpZiAoZGF0YXNldC5jb25maWcuYXBpID09IFwiL2twaS9nZW5lcmljQWdncmVnYXRlUGFnaW5hdGVkS3BpU2VydmljZVJlc3BvbnNlXCIpIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFsnbWVhc3VyZXMnXSA9IHJlcXVlc3QubWVhc3VyZXM7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ2RpbWVuc2lvbnMnXSA9IHJlcXVlc3QuZGltZW5zaW9ucztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRPYmplY3RbJ2NvbHVtbnMnXSA9IHRoaXMuZ2V0Rm9ybWF0T2JqZWN0Rm9yQ29sdW1uKHJlcXVlc3QuY29sdW1ucyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVxdWVzdC5oYXZpbmdzICYmIHJlcXVlc3QuaGF2aW5ncy5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZE9iamVjdFsnaGF2aW5ncyddID0gcmVxdWVzdC5oYXZpbmdzO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBiYWNrZW5kU2VydmljZS5nZXREYXRhKHRyYW5zZm9ybWVkT2JqZWN0LCBkYXRhc2V0LmNvbmZpZy5hcGkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVsnZGF0YXNldCddO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm1hdE9iamVjdEZvckNvbHVtbihjb2x1bW5zOiBhbnlbXSkge1xuICAgICAgICBsZXQgY29sdW1uRGF0YTogYW55W10gPSBbXTtcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBhZHZhbmNlZENvbHVtbiwgY29sdW1uTmFtZSwgZW5yaWNoRnVuY3Rpb24sIGRhdGFGaWVsZCB9ID0gZWxlbWVudDtcbiAgICAgICAgICAgIGNvbHVtbkRhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgYWR2YW5jZWRDb2x1bW4sXG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZSxcbiAgICAgICAgICAgICAgICBlbnJpY2hGdW5jdGlvbixcbiAgICAgICAgICAgICAgICBhbGlhc05hbWU6IGRhdGFGaWVsZFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gY29sdW1uRGF0YTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRyYW5zZm9ybURhdGFGb3JNRmlsdGVyKGZpbHRlcmRhdGE6IGFueVtdLCBtYXBEYXRhOiBhbnlbXSkge1xuICAgICAgICBsZXQgcmVzdWx0OiBhbnlbXSA9IFtdO1xuICAgICAgICBtYXBEYXRhLmZvckVhY2gobWFwcGluZyA9PiB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0T2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgY29sdW1uTmFtZTogbWFwcGluZy5zZXJ2ZXJDb2x1bW4sXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IG1hcHBpbmcuZGF0YVR5cGUsXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IG1hcHBpbmcub3BlcmF0b3JOYW1lLFxuICAgICAgICAgICAgICAgIHZhbHVlOiBtYXBwaW5nLmRlZmF1bHRWYWx1ZVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hcHBpbmcuZm9ybWF0dGVyICYmIG1hcHBpbmcuZm9ybWF0dGVyICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQobWFwcGluZy5mb3JtYXR0ZXIpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJkYXRhLmZpbmQoZiA9PiBmLmhhc093blByb3BlcnR5KG1hcHBpbmcubG9jYWxDb2x1bW4pKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJbbWFwcGluZy5sb2NhbENvbHVtbl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImluXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZy5mb3JtYXR0ZXIgJiYgbWFwcGluZy5mb3JtYXR0ZXIgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KG1hcHBpbmcuZm9ybWF0dGVyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gbW9tZW50KHJlc3VsdE9iai52YWx1ZSwgXCJZWVlZLU1NLUREXCIpLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmIChtYXBwaW5nLmRlZmF1bHRWYWx1ZSA9PT0gXCJcIikge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGZpbHRlcmRhdGEgPSBmaWx0ZXJkYXRhLmZpbHRlcihvYmogPT4ge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gT2JqZWN0LmtleXMob2JqKVswXTtcbiAgICAgICAgICAgIHJldHVybiBrZXkgIT09ICdzdGFydERhdGUnICYmIGtleSAhPT0gJ2VuZERhdGUnO1xuICAgICAgICB9KTtcbiAgICAgICAgZmlsdGVyZGF0YS5mb3JFYWNoKGZpbHRlciA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJLZXkgPSBPYmplY3Qua2V5cyhmaWx0ZXIpWzBdO1xuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdNYXBwaW5nID0gbWFwRGF0YS5maW5kKG1hcHBpbmcgPT4gbWFwcGluZy5sb2NhbENvbHVtbiA9PT0gZmlsdGVyS2V5KTtcblxuICAgICAgICAgICAgaWYgKCFleGlzdGluZ01hcHBpbmcpIHtcbiAgICAgICAgICAgICAgICBsZXQgcmVzdWx0T2JqOiBhbnkgPSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IGZpbHRlcktleSxcbiAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBcImVxXCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBmaWx0ZXJbZmlsdGVyS2V5XVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXJbZmlsdGVyS2V5XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLm9wZXJhdG9yID0gXCJpblwiO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBmaWx0ZXJbZmlsdGVyS2V5XTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVyS2V5ID09ICdvcGVyYXRvcl9rZXknKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiZXFcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmVzdWx0LnB1c2gocmVzdWx0T2JqKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LmZpbHRlcihvYmogPT4gb2JqLnZhbHVlICE9PSBudWxsICYmIG9iai52YWx1ZSAhPT0gXCJcIik7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXREYXRhc2V0Rm9yU2ltcGxlQXBpSW1wYWxhKGJhY2tlbmRTZXJ2aWNlOiBhbnksIGRhdGFzZXQ6IGFueSwgZGF0YXNldElkOiBzdHJpbmcsIGZpbHRlcnM6IGFueSkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2U8dm9pZD4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmZvckVhY2goZmlsdGVyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZmlsdGVycy5vcGVyYXRpb25GaWx0ZXIuaGFzT3duUHJvcGVydHkoZmlsdGVyLmxvY2FsQ29sdW1uKSkge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIuZGVmYXVsdFZhbHVlID0gZmlsdGVycy5vcGVyYXRpb25GaWx0ZXJbZmlsdGVyLmxvY2FsQ29sdW1uXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChkYXRhc2V0LmNvbmZpZy5hcGlUeXBlID09PSBcInBvc3RcIikge1xuICAgICAgICAgICAgICAgIGxldCBzZXJ2aWNlSnNvbjogYW55ID0ge307XG4gICAgICAgICAgICAgICAgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmZvckVhY2goKGZpbHRlcjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBkYXRlY29sdW1uID0gZmlsdGVyLnNlcnZlckNvbHVtbi50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZGF0ZWNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiBmaWx0ZXIuZGF0YVR5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlSnNvbltmaWx0ZXIuc2VydmVyQ29sdW1uXSA9IG1vbWVudChmaWx0ZXIuZGVmYXVsdFZhbHVlLCBcIllZWVktTU0tRERcIikuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlSnNvbltmaWx0ZXIuc2VydmVyQ29sdW1uXSA9IGZpbHRlci5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGJhY2tlbmRTZXJ2aWNlLmdldFNpbXBsZUFwaVBvc3RSZXF1ZXN0KGRhdGFzZXQuY29uZmlnLmFwaSwgc2VydmljZUpzb24pLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgICAgIG5leHQ6IChkYXRhOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBheWxvYWQgPSBkYXRhW1wiUGF5bG9hZFwiXSB8fCBkYXRhO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoZXJyLm1lc3NhZ2UpXG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhc2V0LmNvbmZpZy5hcGlUeXBlID09PSBcImdldFwiKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlcXVlc3RVcmwgPSBkYXRhc2V0LmNvbmZpZy5hcGkgKyBcIj9cIjtcbiAgICAgICAgICAgICAgICBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5tYXBlZEZpbHRlcnMuZm9yRWFjaCgoZmlsdGVyOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFVybCArPSBgJHtmaWx0ZXIuc2VydmVyQ29sdW1ufT0ke2ZpbHRlci5kZWZhdWx0VmFsdWV9YDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4IDwgZGF0YXNldC5jb25maWcucXVlcnlDb25maWcubWFwZWRGaWx0ZXJzLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RVcmwgKz0gXCImXCI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGJhY2tlbmRTZXJ2aWNlLmdldFNpbXBsZUFwaUdldFJlcXVlc3QocmVxdWVzdFVybCkuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0YXNldEZvclBsYWluSnNvbihiYWNrZW5kU2VydmljZTogYW55LCBkYXRhc2V0OiBhbnksIGRhdGFzZXRJZDogc3RyaW5nLCBfZmlsdGVyOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0YXBpID0gZGF0YXNldC5jb25maWcuYXBpICsgJz9kYXRhc2V0SWQ9JyArIGRhdGFzZXQuZGF0YXNldElkO1xuICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2V0SnNvbkRhdGFzZXRQYXlsb2FkKHJlcXVlc3RhcGkpLnN1YnNjcmliZSh7XG4gICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gZGF0YVtcIlBheWxvYWRcIl0gfHwgZGF0YTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51bmlxdWVEYXRhU2V0T2JqZWN0W2RhdGFzZXRJZF0gPSBwYXlsb2FkO1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICBlcnJvcjogKGVycjogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGFzZXRGb3JTcWxUZW1wbGF0ZShiYWNrZW5kU2VydmljZTogYW55LCBkYXRhc2V0OiBhbnksIGRhdGFzZXRJZDogc3RyaW5nLCBmaWx0ZXJzOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPHZvaWQ+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgY29uc3Qgb3BlcmF0b3IgPSAoZmlsdGVycyAmJiBmaWx0ZXJzLmxlbmd0aCAhPT0gMCkgPyBPYmplY3Qua2V5cyhmaWx0ZXJzLm9wZXJhdGlvbkZpbHRlcikubWFwKGtleSA9PiAoeyBba2V5XTogZmlsdGVycy5vcGVyYXRpb25GaWx0ZXJba2V5XSB9KSkgOiBbXTtcbiAgICAgICAgICAgIGxldCByZXF1ZXN0QXAgPSBkYXRhc2V0LmNvbmZpZy5hcGk7XG5cbiAgICAgICAgICAgIGNvbnN0IHRlbmFudElkcyA9IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVyc1xuICAgICAgICAgICAgICAgIC5maWx0ZXIoZiA9PiBmLnNlcnZlckNvbHVtbiA9PT0gXCJ0ZW5hbnRfaWRcIilcbiAgICAgICAgICAgICAgICAubWFwKGYgPT4gZi5kZWZhdWx0VmFsdWUpO1xuXG4gICAgICAgICAgICBsZXQgaXNNYXRjaDtcbiAgICAgICAgICAgIGNvbnN0IHVzZXJuYW1lID0gdGhpcy5zZWN1cml0eVByaW5jaXBhbC5nZXRQcmluY2lwYWxOYW1lKCk7XG4gICAgICAgICAgICBpZiAodXNlcm5hbWUgPT0gXCJhZG1pblwiIHx8IHRoaXMuc2VjdXJpdHlQcmluY2lwYWwuZ3JvdXBEZXRhaWxzPy5pbmNsdWRlcygncHJvbnRvLWFkbWluLWdyb3VwJykpIHtcbiAgICAgICAgICAgICAgICBpc01hdGNoID0gdHJ1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29uc3QgYXNzb2NpYXRlZFRlbmFudHMgPSB0aGlzLnNlY3VyaXR5UHJpbmNpcGFsLmdldFRhcmdldFRlbmFudElkcygpO1xuICAgICAgICAgICAgICAgIGlzTWF0Y2ggPSAodGVuYW50SWRzKSA/IChhc3NvY2lhdGVkVGVuYW50cykgPyB0ZW5hbnRJZHMuc29tZSh0ID0+IGFzc29jaWF0ZWRUZW5hbnRzLmluY2x1ZGVzKHQpKSA6IGZhbHNlIDogdHJ1ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFpc01hdGNoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2FzdHIuZXJyb3IoXCJVbmF1dGhvcml6ZWQgQWNjZXNzXCIpO1xuICAgICAgICAgICAgICAgIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdFtkYXRhc2V0SWRdID0gW107XG4gICAgICAgICAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcblxuICAgICAgICAgICAgICAgIGxldCByZXF1ZXN0X3BhcmFtcyA9IHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YXNldElkOiBkYXRhc2V0SWQsXG4gICAgICAgICAgICAgICAgICAgIC8vIGRiQ29uZmlnOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5kYkNvbmZpZyxcbiAgICAgICAgICAgICAgICAgICAgLy8gZGF0YWJhc2VOYW1lOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5kYXRhYmFzZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMudHJhbnNmb3JtRGF0YUZvck1GaWx0ZXJGb3JTUWwob3BlcmF0b3IsIGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLm1hcGVkRmlsdGVycyksXG4gICAgICAgICAgICAgICAgICAgIC8vIHRlbXBsYXRlUXVlcnk6IGRhdGFzZXQuY29uZmlnLnF1ZXJ5Q29uZmlnLnRlbXBsYXRlUXVlcnksXG4gICAgICAgICAgICAgICAgICAgIC8vIGVucmljaG1lbnRzOiBkYXRhc2V0LmNvbmZpZy5xdWVyeUNvbmZpZy5lbnJpY2htZW50c1xuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgYmFja2VuZFNlcnZpY2UuZ2VuZXJpY1NxbFF1ZXJ5UmVzcG9uc2UocmVxdWVzdEFwLCByZXF1ZXN0X3BhcmFtcykuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dDogKGRhdGE6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IGRhdGFbXCJQYXlsb2FkXCJdIHx8IGRhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVuaXF1ZURhdGFTZXRPYmplY3RbZGF0YXNldElkXSA9IHBheWxvYWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycik7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvYXN0ci5lcnJvcihlcnIubWVzc2FnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgdHJhbnNmb3JtRGF0YUZvck1GaWx0ZXJGb3JTUWwoZmlsdGVyZGF0YTogYW55W10sIG1hcERhdGE6IGFueVtdKSB7XG5cbiAgICAgICAgbGV0IHJlc3VsdDogYW55W10gPSBbXTtcbiAgICAgICAgbWFwRGF0YS5mb3JFYWNoKG1hcHBpbmcgPT4ge1xuICAgICAgICAgICAgbGV0IHJlc3VsdE9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgIGNvbHVtbk5hbWU6IG1hcHBpbmcuc2VydmVyQ29sdW1uLFxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBtYXBwaW5nLmRhdGFUeXBlLFxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBtYXBwaW5nLm9wZXJhdG9yTmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogbWFwcGluZy5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgICAgICAgYWxpYXNDb2x1bW5OYW1lOiBtYXBwaW5nLmxvY2FsQ29sdW1uXG4gICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBmaWx0ZXJkYXRhLmZpbmQoZiA9PiBmLmhhc093blByb3BlcnR5KG1hcHBpbmcubG9jYWxDb2x1bW4pKTtcbiAgICAgICAgICAgIGlmIChmaWx0ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBmaWx0ZXJbbWFwcGluZy5sb2NhbENvbHVtbl07XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImluXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSB2YWx1ZS5qb2luKFwiLFwiKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IHZhbHVlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChtYXBwaW5nLnNlcnZlckNvbHVtbi5pbmNsdWRlcygnZGF0ZScpICYmIHR5cGVvZiByZXN1bHRPYmoudmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobWFwcGluZy5mb3JtYXR0ZXIgJiYgbWFwcGluZy5mb3JtYXR0ZXIgIT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoudmFsdWUgPSBtb21lbnQocmVzdWx0T2JqLnZhbHVlLCB0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpLmZvcm1hdChtYXBwaW5nLmZvcm1hdHRlcik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai52YWx1ZSA9IG1vbWVudChyZXN1bHRPYmoudmFsdWUsIFwiWVlZWS1NTS1ERFwiKS5mb3JtYXQodGhpcy5lbnZpcm9ubWVudC5kYXRhRm9ybWF0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAobWFwcGluZy5kZWZhdWx0VmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXN1bHQucHVzaChyZXN1bHRPYmopO1xuICAgICAgICB9KTtcblxuICAgICAgICBmaWx0ZXJkYXRhID0gZmlsdGVyZGF0YS5maWx0ZXIob2JqID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IE9iamVjdC5rZXlzKG9iailbMF07XG4gICAgICAgICAgICByZXR1cm4ga2V5ICE9PSAnc3RhcnREYXRlJyAmJiBrZXkgIT09ICdlbmREYXRlJztcbiAgICAgICAgfSk7XG4gICAgICAgIGZpbHRlcmRhdGEuZm9yRWFjaChmaWx0ZXIgPT4ge1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyS2V5ID0gT2JqZWN0LmtleXMoZmlsdGVyKVswXTtcbiAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nTWFwcGluZyA9IG1hcERhdGEuZmluZChtYXBwaW5nID0+IG1hcHBpbmcubG9jYWxDb2x1bW4gPT09IGZpbHRlcktleSk7XG5cbiAgICAgICAgICAgIGlmICghZXhpc3RpbmdNYXBwaW5nKSB7XG4gICAgICAgICAgICAgICAgbGV0IHJlc3VsdE9iajogYW55ID0ge1xuICAgICAgICAgICAgICAgICAgICBjb2x1bW5OYW1lOiBmaWx0ZXJLZXksXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogXCJlcVwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyW2ZpbHRlcktleV1cbiAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZmlsdGVyW2ZpbHRlcktleV0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdE9iai5vcGVyYXRvciA9IFwiaW5cIjtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gZmlsdGVyW2ZpbHRlcktleV0uam9pbihcIixcIik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0T2JqLnZhbHVlID0gZmlsdGVyW2ZpbHRlcktleV07XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGZpbHRlcktleSA9PSAnb3BlcmF0b3Jfa2V5Jykge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHRPYmoub3BlcmF0b3IgPSBcImVxXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHJlc3VsdE9iaik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgZ2V0VW5pcXVlRGF0YVNldE9iamVjdCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMudW5pcXVlRGF0YVNldE9iamVjdDtcbiAgICB9XG59Il19
@@ -9376,7 +9376,10 @@ class CreateCompViewComponent {
9376
9376
  this.createViewConfig(data);
9377
9377
  }
9378
9378
  createViewConfig(data) {
9379
- debugger;
9379
+ var _a;
9380
+ if ((_a = data === null || data === void 0 ? void 0 : data.kpiConfig) === null || _a === void 0 ? void 0 : _a.dataSource) {
9381
+ delete data.kpiConfig.dataSource;
9382
+ }
9380
9383
  this.creatCompViewObject['datasetId'] = data['datasetId'];
9381
9384
  this.creatCompViewObject['viewType'] = this.selectedViewType;
9382
9385
  this.isLoader = true;
@@ -10377,6 +10380,7 @@ class GammaTableWithPercentageComponent {
10377
10380
  return;
10378
10381
  }
10379
10382
  else {
10383
+ debugger;
10380
10384
  this.isLoader = true;
10381
10385
  this.page_config = value;
10382
10386
  this.page_parms = value.titleParams;
@@ -12085,7 +12089,7 @@ class CreateDatasetComponent {
12085
12089
  "datasetName": "",
12086
12090
  "datasetType": ""
12087
12091
  };
12088
- this.dataSetTypeContainer = [{ name: "Query Builder", value: "querybuilder" }, { name: "Service JSON", value: "mongo" },
12092
+ this.dataSetTypeContainer = [{ name: "Query Builder", value: "querybuilder" },
12089
12093
  { name: "Rest API", value: "simpleApi" }, { name: "SQL Builder", value: "sqlQuery" }, { name: "Plain JSON", value: "plainjson" }];
12090
12094
  this.mongoDataset = {
12091
12095
  "api": "/kpi/trends/network/get-metric-data",
@@ -12933,30 +12937,6 @@ class PageConfigComponent {
12933
12937
  let index = this.dashBoardWidgetConfig.widgets.findIndex(object => object.widgetId === div.widgetId);
12934
12938
  this.insertNewWiget(index);
12935
12939
  });
12936
- const p_del_button = document.createElement('div');
12937
- p_del_button.innerText = 'Detete layout';
12938
- p_del_button.classList.add('bg-red-700', "p-1", "w-fit", "cursor-pointer", 'text-xs');
12939
- p_del_button.addEventListener('click', () => {
12940
- let result = confirm("<i>Are You Sure?</i>", "Delete Views");
12941
- result.then((dialogResult) => {
12942
- if (dialogResult) {
12943
- this.loadingModal = true;
12944
- this.dashBoardWidgetConfig.widgets = this.dashBoardWidgetConfig.widgets.map(config => config.widgetId);
12945
- rowDiv.remove();
12946
- this.service.editAppPageConfig(this.dashBoardWidgetConfig).subscribe({
12947
- next: (data) => {
12948
- this.getAppPageDetailConfigByPageId();
12949
- }, error: (err) => {
12950
- this.loadingModal = false;
12951
- this.toastr.error('Unexpected Server Exception. Please contact System Admin.', 'Widget Creation');
12952
- }
12953
- });
12954
- this.newWidgetIndex = undefined;
12955
- this.isWidgetCreationContent = false;
12956
- this.isDefaultView = true;
12957
- }
12958
- });
12959
- });
12960
12940
  const advance_button = document.createElement('div');
12961
12941
  advance_button.innerText = 'Add Multiple View';
12962
12942
  advance_button.classList.add('bg-yellow-700', "p-1", "w-fit", "cursor-pointer", 'text-xs');
@@ -12967,7 +12947,6 @@ class PageConfigComponent {
12967
12947
  });
12968
12948
  p_innerDiv.appendChild(advance_button);
12969
12949
  p_innerDiv.appendChild(p_button_widget);
12970
- p_innerDiv.appendChild(p_del_button);
12971
12950
  if (!this.isDashBoardContentTypeView) {
12972
12951
  rowDiv.appendChild(p_innerDiv);
12973
12952
  }
@@ -18789,13 +18768,21 @@ class TemplateDatasetCallService {
18789
18768
  }
18790
18769
  getDatasetForSqlTemplate(backendService, dataset, datasetId, filters) {
18791
18770
  return new Promise((resolve, reject) => {
18771
+ var _a;
18792
18772
  const operator = (filters && filters.length !== 0) ? Object.keys(filters.operationFilter).map(key => ({ [key]: filters.operationFilter[key] })) : [];
18793
18773
  let requestAp = dataset.config.api;
18794
18774
  const tenantIds = dataset.config.queryConfig.mapedFilters
18795
18775
  .filter(f => f.serverColumn === "tenant_id")
18796
18776
  .map(f => f.defaultValue);
18797
- const associatedTenants = this.securityPrincipal.getTargetTenantIds();
18798
- const isMatch = (associatedTenants) ? tenantIds.some(t => associatedTenants.includes(t)) : true;
18777
+ let isMatch;
18778
+ const username = this.securityPrincipal.getPrincipalName();
18779
+ if (username == "admin" || ((_a = this.securityPrincipal.groupDetails) === null || _a === void 0 ? void 0 : _a.includes('pronto-admin-group'))) {
18780
+ isMatch = true;
18781
+ }
18782
+ else {
18783
+ const associatedTenants = this.securityPrincipal.getTargetTenantIds();
18784
+ isMatch = (tenantIds) ? (associatedTenants) ? tenantIds.some(t => associatedTenants.includes(t)) : false : true;
18785
+ }
18799
18786
  if (!isMatch) {
18800
18787
  this.toastr.error("Unauthorized Access");
18801
18788
  this.uniqueDataSetObject[datasetId] = [];