gamma-app-controller 1.2.17 → 1.2.18

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.
@@ -31,9 +31,9 @@ export class GammaAdvanceChartComponent {
31
31
  this.isFullScreen = false;
32
32
  this.onChartPointClick = new EventEmitter();
33
33
  this.customizeTooltip = (info) => ({
34
- html: `<table width=100% height=30 border=0 style=\'font-size: 13px\'>
35
- <tr><td style=\'text-align: left; color: white\'> ${this.commonService.convertToTitleCase(this.chartConfig.argumentField)} : ${info.argumentText} </td></tr>
36
- <tr><td style=\'text-align: left; color: white; padding-top: 5px\'> ${info.seriesName} :
34
+ html: `<table style = width=100% height=30 border=0 style=\'font-size: 13px\'>
35
+ <tr><td class="text-gray-800 dark:text-gray-200 " style=\'text-align: left\'> ${this.commonService.convertToTitleCase(this.chartConfig.argumentField)} : ${info.argumentText} </td></tr>
36
+ <tr><td class="text-gray-800 dark:text-gray-200 " style=\'text-align: left; padding-top: 5px\'> ${info.seriesName} :
37
37
  ${this.getValue(info.seriesName, info.value)} </td></tr>
38
38
  </table>`,
39
39
  });
@@ -409,4 +409,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
409
409
  type: Input,
410
410
  args: ['chartDataSource']
411
411
  }] } });
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLWNoYXJ0L2dhbW1hLWFkdmFuY2UtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR2hKLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNOUUsTUFBTSxPQUFPLDBCQUEwQjtJQWtCcEMsWUFDVSxhQUE0QixFQUM1QixNQUFxQixFQUNyQixVQUE0QixFQUM1QixRQUFtQixFQUFVLEVBQWMsRUFDM0MsR0FBc0IsRUFDSSxXQUFnQjtRQUwxQyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQzNDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ0ksZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUF2QnJELGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3JCLGdCQUFXLEdBQVEsRUFB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O1lBQzNELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDM0M7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUMzQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTTtRQUMxQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUUsQ0FBQzs7dUhBM2NTLDBCQUEwQixnTUF3QnpCLGVBQWU7MkdBeEJoQiwwQkFBMEIsc05DWnZDLHd2VEF5S007MkZEN0pPLDBCQUEwQjtrQkFKdEMsU0FBUzsrQkFDRSx5QkFBeUI7OzBCQTJCOUIsTUFBTTsyQkFBQyxlQUFlOzRDQXBCakIsV0FBVztzQkFBbkIsS0FBSztnQkFFRyxRQUFRO3NCQUFoQixLQUFLO2dCQTBCVyxpQkFBaUI7c0JBQWpDLE1BQU07Z0JBR0gsZUFBZTtzQkFEbEIsS0FBSzt1QkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENoYW5nZURldGVjdG9yUmVmLCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIEV2ZW50RW1pdHRlciwgSW5qZWN0LCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFJlbmRlcmVyMiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVG9hc3RyU2VydmljZSB9IGZyb20gJ25neC10b2FzdHInO1xuaW1wb3J0IHsga3BpY29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uL2twaS1jb21vbi1zZXJ2aWNlJztcbmltcG9ydCBtb21lbnQgZnJvbSAnLi4vLi4vLi4vYXBwbGljYXRpb24tY29udHJvbGxlci9tb21lbnQtaGVscGVyJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2NvbW1vbic7XG5pbXBvcnQgeyBBUFBfRU5WSVJPTk1FTlQgfSBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL2Vudmlyb25tZW50JztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXBwLWdhbW1hLWFkdmFuY2UtY2hhcnQnLFxuICB0ZW1wbGF0ZVVybDogJy4vZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQuaHRtbCcsXG59KVxuZXhwb3J0IGNsYXNzIEdhbW1hQWR2YW5jZUNoYXJ0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgY2hhcnRDb25maWc6IGFueSA9IHt9O1xuICAgcGFnZV9jb25maWc6IGFueSA9IHt9O1xuICAgaXNMb2FkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICAgQElucHV0KCkgY29tcG9uZW50SWQ6IGFueTtcbiAgIC8vIEBJbnB1dCgpIGNhcHRpb246IGFueTtcbiAgIEBJbnB1dCgpIGtwaV9uYW1lOiBhbnk7XG4gICAvLyBASW5wdXQoKSBjaGFydERhdGFTb3VyY2U6YW55O1xuICAgY2FwdGlvbjogYW55O1xuICAgaXNDaGFydHZpc2libGU6IGJvb2xlYW47XG4gICBjcmVhdENoYXJ0RGF0YVNvdXJjZSA9IHVuZGVmaW5lZDtcbiAgIGZpbmFsQ2hhcnREYXRhU291cmNlOiBhbnkgPSBbXTtcbiAgIGNoYXJ0SGVpZ2h0OiBhbnk7XG4gXG4gICBpc0Z1bGxTY3JlZW46IGJvb2xlYW4gPSBmYWxzZTtcbiBcbiAgIGhlYXRDaGFydERhdGFTb3VyY2U6IGFueTtcbiAgIGJ1YmJsZUNoYXJ0RGF0YTogYW55O1xuICAgY29uc3RydWN0b3IoXG4gICAgIHByaXZhdGUgY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZSxcbiAgICAgcHJpdmF0ZSB0b2FzdHI6IFRvYXN0clNlcnZpY2UsXG4gICAgIHByaXZhdGUga3BpU2VydmljZToga3BpY29tbW9uU2VydmljZSxcbiAgICAgcHJpdmF0ZSByZW5kZXJlcjogUmVuZGVyZXIyLCBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgICBwcml2YXRlIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgICBASW5qZWN0KEFQUF9FTlZJUk9OTUVOVCkgcHJpdmF0ZSBlbnZpcm9ubWVudDogYW55XG4gICApIHtcbiBcbiAgIH1cbiAgIHBhZ2VfcGFybXM6IGFueTtcbiAgIC8vIGNoYXJ0X2F0dHIubGVnZW5kWzBdXG4gICBjaGFydE9yZGVyQnk6IGJvb2xlYW47XG4gICBjaGFydERpc3BsYXlEYXRlRm9ybWF0OiBhbnk7XG4gICBAT3V0cHV0KCkgcHVibGljIG9uQ2hhcnRQb2ludENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiBcbiAgIEBJbnB1dCgnY2hhcnREYXRhU291cmNlJylcbiAgIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICAgdGhpcy5jcmVhdENoYXJ0RGF0YVNvdXJjZSA9IHZhbHVlO1xuICAgICAvLyBjb25zb2xlLmxvZyh2YWx1ZSk7XG4gICAgIGlmICh0aGlzLmNyZWF0Q2hhcnREYXRhU291cmNlID09PSB1bmRlZmluZWQgfHwgdGhpcy5jcmVhdENoYXJ0RGF0YVNvdXJjZS5sZW5ndGggPT09IDApIHtcbiAgICAgICB0aGlzLmlzQ2hhcnR2aXNpYmxlID0gZmFsc2U7XG4gICAgICAgcmV0dXJuO1xuICAgICB9IGVsc2Uge1xuIFxuICAgICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgICB0aGlzLnBhZ2VfcGFybXMgPSB2YWx1ZS50aXRsZVBhcmFtcztcbiAgICAgICB0aGlzLmNoYXJ0T3JkZXJCeSA9ICh2YWx1ZS5rcGlDb25maWcuZGVzY2VuZGluZ09yZGVyKSA/IHZhbHVlLmtwaUNvbmZpZy5kZXNjZW5kaW5nT3JkZXIgOiBmYWxzZTtcbiAgICAgICB0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQgPSAodmFsdWUua3BpQ29uZmlnLmRpc3BsYXlEYXRlRm9ybWF0KSA/IHZhbHVlLmtwaUNvbmZpZy5kaXNwbGF5RGF0ZUZvcm1hdCA6IFwiTU0tRERcIjtcbiAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICB0aGlzLmNoYXJ0Q29uZmlnID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWc7XG4gICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJkYWlseVwiKSB7XG4gXG4gICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVxuICAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5yZWNvcmREYXRlKVxuICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYi5yZWNvcmREYXRlKS5kaWZmKG1vbWVudChhLnJlY29yZERhdGUpKSk7XG4gXG4gICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnRSZWNvcmQgPSBzb3J0ZWREYXRhWzBdO1xuICAgICAgICAgICBjb25zdCBmaWx0ZXJlZE9iamVjdHMgPSBzb3J0ZWREYXRhLmZpbHRlcihkYXRhID0+IGRhdGEucmVjb3JkRGF0ZSA9PT0gdmFsdWUuZW5kRGF0ZSk7XG4gICAgICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnZnVubmVsJykge1xuICAgICAgICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBPYmplY3Qua2V5cyhtb3N0UmVjZW50UmVjb3JkKS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ3JlY29yZERhdGUnKS5tYXAoa2V5ID0+ICh7XG4gICAgICAgICAgICAgICBhcmd1bWVudDoga2V5LFxuICAgICAgICAgICAgICAgdmFsdWU6IE1hdGguYWJzKHBhcnNlSW50KG1vc3RSZWNlbnRSZWNvcmRba2V5XSkpXG4gICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgIGNvbnNvbGUubG9nKHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UpXG4gICAgICAgICAgIH0gZWxzZSB7XG4gXG4gICAgICAgICAgICAgdGhpcy5nZXREYWlseUNoYXJ0KGZpbHRlcmVkT2JqZWN0cywgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcpO1xuIFxuICAgICAgICAgICB9XG4gXG4gICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJtb250aGx5XCIpIHtcbiAgICAgICAgICAgaWYgKHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlICYmIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLmxlbmd0aCAhPT0gMCkge1xuIFxuICAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnYnViYmxlJykge1xuICAgICAgICAgICAgICAgdGhpcy5idWJibGVDaGFydERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZTtcbiAgICAgICAgICAgICAgIHRoaXMuZ2V0QnViYmxlQ2hhcnREYXRhKCk7XG4gICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0T3JkZXJCeSkge1xuICAgICAgICAgICAgICAgICBsZXQgc2hvcnROYW1lID0gdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICBpZiAoc2hvcnROYW1lLmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgICAgICAgICAgICAgICB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmRbdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXV0pXG4gICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGJbdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXV0pLmRpZmYobW9tZW50KGFbdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXV0pKSk7XG4gXG4gICAgICAgICAgICAgICAgIH1cbiBcbiAgICAgICAgICAgICAgIH1cbiBcbiAgICAgICAgICAgICAgIHRoaXMuZ2V0TW9udGhseUNoYXJ0KHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZylcbiAgICAgICAgICAgICAgIHRoaXMuaXNDaGFydHZpc2libGUgPT0gdHJ1ZTtcbiAgICAgICAgICAgICB9XG4gXG4gICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICB9XG4gXG4gICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgIH0gZWxzZSBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJob3VybHlcIikge1xuICAgICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgY29uc3Qgc29ydGVkRGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlXG4gICAgICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQuaG91cilcbiAgICAgICAgICAgICAgIC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYS5ob3VyLCAnaGgnKS5kaWZmKG1vbWVudChiLmhvdXIsICdoaCcpKSk7XG4gICAgICAgICAgICAgY29uc3QgbW9zdFJlY2VudFJlY29yZCA9IHNvcnRlZERhdGFbMF07XG4gICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLnJlY29yZERhdGUgPT09IG1vc3RSZWNlbnRSZWNvcmQucmVjb3JkRGF0ZSk7XG4gXG4gICAgICAgICAgICAgdGhpcy5nZXRIb3VyQ2hhcnQoZmlsdGVyZWRPYmplY3RzLCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZylcbiAgICAgICAgICAgICB0aGlzLmlzQ2hhcnR2aXNpYmxlID09IHRydWU7XG4gICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgdGhpcy5jZHIuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgICAgICB9XG4gXG4gICAgICAgICAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgIH1cbiBcbiAgICAgICB9XG4gICAgICAgLy8gZWxzZSB7XG4gICAgICAgLy8gICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgLy8gfVxuIFxuICAgICB9XG4gXG4gXG4gXG4gICB9XG4gXG4gXG4gICBuZ09uSW5pdCgpOiB2b2lkIHtcbiBcbiAgIH1cbiBcbiAgIGdldEhvdXJDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG4gICAgIC8vIGNvbnN0IHZhbHVlRmllbGRzID0gZGF0YUNvbmZpZy5jaGFydF9jb25maWcubWFwKGNvbmZpZyA9PiBjb25maWcudmFsdWVGaWVsZCk7XG4gICAgIGlmIChkYXRhKSB7XG4gICAgICAgZGF0YS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgICBpZiAodmFsW2RhdGFDb25maWcuYXJndW1lbnRGaWVsZF0udG9TdHJpbmcoKS5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXSA9ICcwJyArIHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdO1xuICAgICAgICAgfVxuICAgICAgICAgbGV0IGxhYmVsID0gdmFsW2RhdGFDb25maWcuYXJndW1lbnRGaWVsZF0udG9TdHJpbmcoKTtcbiAgICAgICAgIHZhbFtkYXRhQ29uZmlnLmFyZ3VtZW50RmllbGRdID0gbGFiZWxcbiAgICAgICB9KTtcbiAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgIH0sIDUwMCk7XG4gICAgIH0gZWxzZSB7XG4gICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICdDaGFydCBFcnJvcicpO1xuIFxuICAgICB9XG4gICB9XG4gICBnZXRNb250aGx5Q2hhcnQoZGF0YSwgZGF0YUNvbmZpZykge1xuICAgICBjb25zdCB2YWx1ZUZpZWxkcyA9IGRhdGFDb25maWcuY2hhcnRfY29uZmlnLm1hcChjb25maWcgPT4gY29uZmlnLnZhbHVlRmllbGQpO1xuICAgICBkYXRhLmZvckVhY2goKGVudHJ5OiBhbnkpID0+IHtcbiAgICAgICB2YWx1ZUZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgICBpZiAoZW50cnkuaGFzT3duUHJvcGVydHkoZmllbGQpKSB7XG4gICAgICAgICAgIGlmICh0eXBlb2YgZW50cnlbZmllbGRdID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICAgZW50cnlbZmllbGRdID0gTnVtYmVyKGVudHJ5W2ZpZWxkXSk7XG4gICAgICAgICAgIH1cbiAgICAgICAgIH1cbiAgICAgICB9KTtcbiAgICAgfSk7XG4gICAgIGlmIChkYXRhKSB7XG4gICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQudG9Mb3dlckNhc2UoKTtcbiAgICAgICBpZiAoY29udGVudC5pbmNsdWRlcygnZGF0ZScpKSB7XG4gICAgICAgICBjb25zdCBkYXRhU291cmNlID0gZGF0YS5tYXAob2JqID0+IHtcbiAgICAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfTtcbiAgICAgICAgICAgaWYgKG5ld09iai5oYXNPd25Qcm9wZXJ0eSh0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQpKSB7XG4gICAgICAgICAgICAgbmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0gPSBtb21lbnQobmV3T2JqW3RoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZF0pLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpO1xuICAgICAgICAgICB9XG4gICAgICAgICAgIHJldHVybiBuZXdPYmo7XG4gICAgICAgICB9KTtcbiAgICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgICB9XG4gICAgIH0gZWxzZSB7XG4gICAgICAgdGhpcy50b2FzdHIuZXJyb3IodGhpcy5rcGlfbmFtZSArICdDaGFydCBFcnJvcicpO1xuICAgICB9XG4gICB9XG4gICBnZXREYWlseUNoYXJ0KGRhdGEsIGRhdGFDb25maWcpIHtcbiAgICAgY29uc3QgdmFsdWVGaWVsZHMgPSBkYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52YWx1ZUZpZWxkKTtcbiAgICAgaWYgKGRhdGEpIHtcbiAgICAgICBsZXQgY29udGVudCA9IHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZC50b0xvd2VyQ2FzZSgpO1xuICAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgICAgIGNvbnN0IGRhdGFTb3VyY2UgPSBkYXRhLm1hcChvYmogPT4ge1xuICAgICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICAgICAgICAgICBpZiAobmV3T2JqLmhhc093blByb3BlcnR5KHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZCkpIHtcbiAgICAgICAgICAgICBuZXdPYmpbdGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkXSA9IG1vbWVudChuZXdPYmpbdGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkXSkuZm9ybWF0KHRoaXMuY2hhcnREaXNwbGF5RGF0ZUZvcm1hdCk7XG4gICAgICAgICAgIH1cbiAgICAgICAgICAgcmV0dXJuIG5ld09iajtcbiAgICAgICAgIH0pO1xuICAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgfSBlbHNlIHtcbiAgICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhO1xuICAgICAgIH1cbiAgICAgfSBlbHNlIHtcbiAgICAgICB0aGlzLnRvYXN0ci5lcnJvcih0aGlzLmtwaV9uYW1lICsgJyBDaGFydCBFcnJvcicpO1xuICAgICB9XG4gICB9XG4gXG4gXG4gICBnZXRSZWNvbkRhaWx5Q2hhcnQoZGF0YSwgZGF0YUNvbmZpZykge1xuIFxuICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gW107XG4gICAgIGNvbnN0IHJlY29uX2tleSA9IGRhdGFDb25maWcucmVjb25LZXk7XG4gICAgIGNvbnN0IHJlY29uX2NvbHVtbiA9IGRhdGFDb25maWcucmVjb25Db2x1bW5zO1xuICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gdGhpcy5nZXRGaW5hbERhdGEoZGF0YSwgcmVjb25fY29sdW1uKTtcbiBcbiAgIH1cbiBcbiAgIGdldEZpbmFsRGF0YShtYWluRGF0YTogYW55W10sIHJlY29uQ29sdW1uOiBhbnlbXSk6IGFueVtdIHtcbiAgICAgbWFpbkRhdGEuZm9yRWFjaChkYXRhID0+IHtcbiAgICAgICByZWNvbkNvbHVtbi5mb3JFYWNoKGNvbHVtbiA9PiB7XG4gICAgICAgICBjb25zdCBmaXJzdEtleVZhbHVlID0gZGF0YVtjb2x1bW4uZmlyc3RLZXldO1xuICAgICAgICAgY29uc3Qgc2Vjb25kS2V5VmFsdWUgPSBkYXRhW2NvbHVtbi5zZWNvbmRLZXldO1xuICAgICAgICAgY29uc3QgbW91RGlmZiA9IE1hdGguYWJzKGZpcnN0S2V5VmFsdWUgLSBzZWNvbmRLZXlWYWx1ZSk7XG4gICAgICAgICBkYXRhW2NvbHVtbi5maW5hbEtleV0gPSBtb3VEaWZmO1xuICAgICAgIH0pO1xuICAgICB9KTtcbiBcbiAgICAgcmV0dXJuIG1haW5EYXRhO1xuICAgfVxuIFxuICAgY3VzdG9taXplVG9vbHRpcCA9IChpbmZvOiBhbnkpID0+IChcbiAgICAge1xuIFxuICAgICAgIGh0bWw6IGA8dGFibGUgd2lkdGg9MTAwJSBoZWlnaHQ9MzAgYm9yZGVyPTAgIHN0eWxlPVxcJ2ZvbnQtc2l6ZTogMTNweFxcJz5cbiAgICAgPHRyPjx0ZCBzdHlsZT1cXCd0ZXh0LWFsaWduOiBsZWZ0OyBjb2xvcjogd2hpdGVcXCc+ICR7dGhpcy5jb21tb25TZXJ2aWNlLmNvbnZlcnRUb1RpdGxlQ2FzZSh0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQpfSA6ICAke2luZm8uYXJndW1lbnRUZXh0fSA8L3RkPjwvdHI+XG4gICAgIDx0cj48dGQgc3R5bGU9XFwndGV4dC1hbGlnbjogbGVmdDsgY29sb3I6IHdoaXRlOyBwYWRkaW5nLXRvcDogNXB4XFwnPiAke2luZm8uc2VyaWVzTmFtZX0gOlxuICAgICAke3RoaXMuZ2V0VmFsdWUoaW5mby5zZXJpZXNOYW1lLCBpbmZvLnZhbHVlKX0gIDwvdGQ+PC90cj5cbiAgICAgPC90YWJsZT5gLFxuICAgICB9KTtcbiBcbiAgIC8vIGN1c3RvbWl6ZVRvb2x0aXAoYXJnKSB7XG4gICAvLyAgIHJldHVybiB7IHRleHQ6IGAke2FyZy5hcmd1bWVudFRleHR9PGJyPiR7YXJnLnNlcmllc05hbWV9OiAke2FyZy52YWx1ZVRleHR9QmAgfTtcbiAgIC8vIH1cbiBcbiAgIGNhbGN1bGF0ZVRvdGFsKHBpZUNoYXJ0KSB7XG4gICAgIGNvbnN0IHRvdGFsVmFsdWUgPSBwaWVDaGFydC5nZXRBbGxTZXJpZXMoKVswXS5nZXRWaXNpYmxlUG9pbnRzKCkucmVkdWNlKChzLCBwKSA9PiBzICsgcC5vcmlnaW5hbFZhbHVlLCAwKTtcbiAgICAgcmV0dXJuIHRoaXMuZm9ybWF0TnVtYmVyKHRvdGFsVmFsdWUpO1xuICAgfVxuIFxuICAgZm9ybWF0TnVtYmVyKHZhbHVlKSB7XG4gICAgIGlmICh2YWx1ZSA+PSAxZTkpIHtcbiAgICAgICByZXR1cm4gKHZhbHVlIC8gMWU5KS50b0ZpeGVkKDIpICsgJ0InO1xuICAgICB9IGVsc2UgaWYgKHZhbHVlID49IDFlNikge1xuICAgICAgIHJldHVybiAodmFsdWUgLyAxZTYpLnRvRml4ZWQoMikgKyAnTSc7XG4gICAgIH0gZWxzZSBpZiAodmFsdWUgPj0gMWUzKSB7XG4gICAgICAgcmV0dXJuICh2YWx1ZSAvIDFlMykudG9GaXhlZCgyKSArICdLJztcbiAgICAgfSBlbHNlIHtcbiAgICAgICByZXR1cm4gdmFsdWUudG9GaXhlZCgyKTtcbiAgICAgfVxuICAgfVxuIFxuICAgcG9pbnRDbGlja0hhbmRsZXIoYXJnKSB7XG4gICAgIGFyZy50YXJnZXQuc2VsZWN0KCk7XG4gICB9XG4gICBnZXRBbGxDaGFydFBvaW50Q2xpY2soZXZlbnQpIHtcbiBcbiAgICAgbGV0IHRpdGxlID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuY29tbW9uQ29uZmlnWyd0aXRsZSddO1xuICAgICBsZXQgdGl0bGVfZGF0YWZpZWxkID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuY29tbW9uQ29uZmlnWydkYXRhRmllbGQnXTtcbiBcbiAgICAgY29uc3QgdGl0bGVfcGFyYW1zID0gKHRpdGxlX2RhdGFmaWVsZCkgPyBldmVudC50YXJnZXQuZGF0YVt0aXRsZV9kYXRhZmllbGRdIDogXCJcIjtcbiAgICAgbGV0IHdpZGdldF90aXRsZSA9ICh0aXRsZSkgPyB0aXRsZSArIHRpdGxlX3BhcmFtcyA6IHRpdGxlX3BhcmFtcztcbiBcbiAgICAgaWYgKCdyZWNvcmREYXRlJyBpbiBldmVudC50YXJnZXQuZGF0YSkge1xuICAgICAgIGNvbnN0IHJlY29yZERhdGUgPSBldmVudC50YXJnZXQuZGF0YS5yZWNvcmREYXRlO1xuICAgICAgIGlmICh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQgPT0gXCJNTS1ERFwiKSB7XG4gICAgICAgICBjb25zdCBmdWxsRGF0ZSA9IG1vbWVudChyZWNvcmREYXRlLCBcIk1NLUREXCIpXG4gICAgICAgICAgIC55ZWFyKG1vbWVudCgpLnllYXIoKSlcbiAgICAgICAgICAgLmZvcm1hdCh0aGlzLmVudmlyb25tZW50LmRhdGFGb3JtYXQpO1xuICAgICAgICAgZXZlbnQudGFyZ2V0LmRhdGEucmVjb3JkRGF0ZSA9IGZ1bGxEYXRlO1xuICAgICAgIH1cbiBcbiAgICAgfVxuIFxuICAgICBsZXQgb2JqID0ge1xuICAgICAgIGRhdGE6IGV2ZW50LnRhcmdldC5kYXRhLFxuICAgICAgIGtleVRvUGFzczogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLFxuICAgICAgIHRhYmxlVGl0bGU6ICh0aGlzLnBhZ2VfcGFybXMpID8gdGhpcy5wYWdlX3Bhcm1zICsgd2lkZ2V0X3RpdGxlIDogd2lkZ2V0X3RpdGxlLFxuICAgICAgIHZpZXdJZDogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICAgZHJpbGxEb3duVHlwZTogXCJuYXR1cmFsXCIsXG4gICAgICAgZHJpbGxkb3duRnJvbTogdGhpcy5wYWdlX2NvbmZpZy52aWV3SWQsXG4gICAgICAgZHJpbGxkb3duVG86IFwiXCIsXG4gICAgIH1cbiAgICAgdGhpcy5vbkNoYXJ0UG9pbnRDbGljay5lbWl0KG9iaik7XG4gXG4gICAgIGNvbnNvbGUubG9nKFwib25jaGFydCBjbGlja1wiLCBvYmopO1xuIFxuICAgfVxuIFxuICAgZ2V0VmFsdWUoY29udGV4dEtleSwgdmFsdWUpIHtcbiBcbiAgICAgbGV0IGNvbnRleHRfZGF0YTogYW55O1xuICAgICBjb25zdCBzbWxfa2V5ID0gY29udGV4dEtleS50b0xvd2VyQ2FzZSgpO1xuIFxuICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgaWYgKHNtbF9rZXkgPT09IFwiY291bnRcIiB8fCBzbWxfa2V5ID09PSBcImhvdXJcIiB8fCBzbWxfa2V5ID09PSBcImRlbm9taW5hdGlvblwiIHx8IHNtbF9rZXkuaW5jbHVkZXMoXCJjb3VudFwiKSkge1xuICAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDApO1xuICAgICAgIH0gZWxzZSBpZiAoc21sX2tleS5pbmNsdWRlcygndm9sdW1lJykgfHwgc21sX2tleS5pbmNsdWRlcygndXBsb2FkJykgfHwgc21sX2tleS5pbmNsdWRlcygnZG93bmxvYWQnKSkge1xuICAgICAgICAgaWYgKHNtbF9rZXkgPT0gJ2JpbGxhYmxldm9sdW1lJykge1xuICAgICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UuZm9ybWF0Qnl0c1RvR2IodmFsdWUgKiAxMDI0LCAyKVxuICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLmZvcm1hdEJ5dHNUb0diKHZhbHVlICogMTAyNCwgMik7XG4gICAgICAgICB9XG4gICAgICAgfSBlbHNlIGlmIChzbWxfa2V5ID09IFwidXBsaW5rXCIgfHwgc21sX2tleSA9PSBcImRvd25saW5rXCIpIHtcbiAgICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5mb3JtYXRCeXRzVG9HYih2YWx1ZSwgMik7XG4gICAgICAgfSBlbHNlIGlmICh0aGlzLmhhc0RlY2ltYWwodmFsdWUpKSB7XG4gICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3JWMyh2YWx1ZSwgMik7XG4gICAgICAgfSBlbHNlIGlmICghdGhpcy5oYXNEZWNpbWFsKHZhbHVlKSkge1xuICAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLnJlZm9ybWF0TnVtYmVyV2l0aFRob3VzYW5kU2VwYXJhdG9yVjModmFsdWUsIDApO1xuICAgICAgIH0gZWxzZSB7XG4gICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3JWMyh2YWx1ZSwgMik7XG4gICAgICAgfVxuICAgICB9IGVsc2Uge1xuICAgICAgIGNvbnRleHRfZGF0YSA9IHZhbHVlO1xuICAgICB9XG4gXG4gICAgIHJldHVybiBjb250ZXh0X2RhdGE7XG4gICB9XG4gXG4gXG4gICBoYXNEZWNpbWFsKG51bWJlcikge1xuICAgICByZXR1cm4gbnVtYmVyICUgMSAhPT0gMDtcbiAgIH1cbiBcbiAgIHRvZ2dsZUZ1bGxTY3JlZW4oKSB7XG4gICAgIHRoaXMuaXNMb2FkZXIgPSB0cnVlO1xuICAgICB0aGlzLmlzRnVsbFNjcmVlbiA9ICF0aGlzLmlzRnVsbFNjcmVlbjtcbiAgICAgY29uc3QgZGl2ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ub3QtZnVsbC1zY3JlZW4nKTtcbiAgICAgaWYgKHRoaXMuaXNGdWxsU2NyZWVuKSB7XG4gICAgICAgdGhpcy5yZW5kZXJlci5hZGRDbGFzcyhkaXYsICdmdWxsLXNjcmVlbicpO1xuICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgdGhpcy5pc0xvYWRlciA9IGZhbHNlO1xuICAgICAgIH0sIDEwKTtcbiAgICAgfSBlbHNlIHtcbiAgICAgICB0aGlzLnJlbmRlcmVyLnJlbW92ZUNsYXNzKGRpdiwgJ2Z1bGwtc2NyZWVuJyk7XG4gICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgfSwgMTApO1xuICAgICB9XG4gICB9XG4gXG4gXG4gXG4gXG4gXG4gICBjdXN0b21pemVUZXh0ID0gKHsgcGVyY2VudFRleHQsIGl0ZW06IHsgYXJndW1lbnQgfSB9KSA9PiBgPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZTogMjhweCc+JHtwZXJjZW50VGV4dH08L3NwYW4+PGJyLz4ke2FyZ3VtZW50fWA7XG4gXG4gXG4gICAvLyBidWJibGUgY2hhcnRcbiBcbiAgIGdldEJ1YmJsZUNoYXJ0RGF0YSgpIHtcbiAgICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlID0ge307XG4gICAgIGNvbnN0IHsgcmVzdWx0LCB1bmlxdWVEYXRlcyB9ID0gdGhpcy5nZW5lcmF0ZURhdGEodGhpcy5idWJibGVDaGFydERhdGEsIHRoaXMuY2hhcnRDb25maWcpXG4gICAgIC8vIHJlc3VsdC5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAvLyAgIGVsZW1lbnQuZGF0YXNldC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYS5yZWNvcmREYXRlLCAnWVlZWU1NREQnKS5kaWZmKG1vbWVudChiLnJlY29yZERhdGUsICdZWVlZTU1ERCcpKSk7XG4gICAgIC8vIH0pO1xuICAgICAvLyB1bmlxdWVEYXRlcy5zb3J0KCk7XG4gICAgIHRoaXMuaGVhdENoYXJ0RGF0YVNvdXJjZVtcImRhdGFTZXRcIl0gPSByZXN1bHQ7XG4gICAgIHRoaXMuaGVhdENoYXJ0RGF0YVNvdXJjZVtcImFyZ3VtZW50VmFsdWVcIl0gPSB1bmlxdWVEYXRlcztcbiAgIH1cbiBcbiAgIGdlbmVyYXRlRGF0YShkYXRhLCBjaGFydENvbmZpZykge1xuICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgY29uc3QgdW5pcXVlRGF0ZXMgPSBuZXcgU2V0KCk7XG4gICAgIGNvbnN0IGRhdGFTb3VyY2VNYXAgPSB7fTtcbiBcbiAgICAgY29uc3Qgc291cmNlRmllbGQgPSBjaGFydENvbmZpZy5zb3VyY2VGaWVsZDtcbiAgICAgY29uc3QgYXJndW1lbnRGaWVsZCA9IGNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQ7XG4gICAgIGNvbnN0IHZhbHVlRmllbGQgPSBjaGFydENvbmZpZy5jaGFydF9jb25maWdbMF0udmFsdWVGaWVsZDtcbiAgICAgY29uc3QgbWluQnViYmxlU2l6ZSA9ICh0aGlzLmNoYXJ0Q29uZmlnLm1pbkJ1YmJsZVNpemUpID8gcGFyc2VJbnQodGhpcy5jaGFydENvbmZpZy5taW5CdWJibGVTaXplKSA6IDg7XG4gICAgIGNvbnN0IG1heEJ1YmJsZVNpemUgPSAodGhpcy5jaGFydENvbmZpZy5tYXhCdWJibGVTaXplKSA/IHBhcnNlSW50KHRoaXMuY2hhcnRDb25maWcubWF4QnViYmxlU2l6ZSkgOiAyMDtcbiBcbiAgICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgIGNvbnN0IHNvdXJjZUZpZWxkVmFsdWUgPSBpdGVtW3NvdXJjZUZpZWxkXTtcbiAgICAgICBjb25zdCBhcmd1bWVudEZpZWxkVmFsdWUgPSBpdGVtW2FyZ3VtZW50RmllbGRdO1xuICAgICAgIGNvbnN0IHsgW3NvdXJjZUZpZWxkXTogXywgW2FyZ3VtZW50RmllbGRdOiBfXywgLi4ucmVzdCB9ID0gaXRlbTtcbiBcbiAgICAgICBpZiAoIWRhdGFTb3VyY2VNYXBbc291cmNlRmllbGRWYWx1ZV0pIHtcbiAgICAgICAgIGRhdGFTb3VyY2VNYXBbc291cmNlRmllbGRWYWx1ZV0gPSB7XG4gICAgICAgICAgIGRhdGFzb3VyY2U6IHNvdXJjZUZpZWxkVmFsdWUsXG4gICAgICAgICAgIGRhdGFzZXQ6IFtdXG4gICAgICAgICB9O1xuICAgICAgIH1cbiAgICAgICBkYXRhU291cmNlTWFwW3NvdXJjZUZpZWxkVmFsdWVdLmRhdGFzZXQucHVzaCh7XG4gICAgICAgICAuLi5yZXN0LFxuICAgICAgICAgW2FyZ3VtZW50RmllbGRdOiBtb21lbnQoYXJndW1lbnRGaWVsZFZhbHVlKS5mb3JtYXQodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0KVxuICAgICAgIH0pO1xuICAgICAgIHVuaXF1ZURhdGVzLmFkZChtb21lbnQoYXJndW1lbnRGaWVsZFZhbHVlKS5mb3JtYXQodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0KSk7XG4gICAgIH0pO1xuIFxuICAgICBjb25zdCB1bmlxdWVEYXRlc0FycmF5ID0gQXJyYXkuZnJvbSh1bmlxdWVEYXRlcyk7XG4gXG4gICAgIGZvciAoY29uc3Qga2V5IGluIGRhdGFTb3VyY2VNYXApIHtcbiAgICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YVNvdXJjZU1hcFtrZXldLmRhdGFzZXQ7XG4gICAgICAgY29uc3QgZm9ybWF0dGVkRGF0YXNldCA9IHRoaXMuZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZShkYXRhc2V0LCB2YWx1ZUZpZWxkLCBtaW5CdWJibGVTaXplLCBtYXhCdWJibGVTaXplKTtcbiBcbiAgICAgICBjb25zdCBkYXRlVG9JdGVtTWFwID0ge307XG4gICAgICAgZm9ybWF0dGVkRGF0YXNldC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICAgZGF0ZVRvSXRlbU1hcFtpdGVtW2FyZ3VtZW50RmllbGRdXSA9IGl0ZW07XG4gICAgICAgfSk7XG4gXG4gICAgICAgY29uc3QgY29tcGxldGVEYXRhc2V0ID0gdW5pcXVlRGF0ZXNBcnJheS5tYXAoKGRhdGU6IGFueSkgPT4ge1xuIFxuICAgICAgICAgaWYgKGRhdGVUb0l0ZW1NYXBbZGF0ZV0pIHtcbiAgICAgICAgICAgcmV0dXJuIGRhdGVUb0l0ZW1NYXBbZGF0ZV07XG4gICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgIGZpbGVDb3VudDogMCxcbiAgICAgICAgICAgICBbYXJndW1lbnRGaWVsZF06IGRhdGUsXG4gICAgICAgICAgICAgW3ZhbHVlRmllbGRdOiAwLFxuICAgICAgICAgICAgIGNvbG9yOiBcInJnYigyNDIsIDExOCwgMTA5KVwiXG4gICAgICAgICAgIH07XG4gICAgICAgICB9XG4gICAgICAgfSk7XG4gXG4gICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgZGF0YXNvdXJjZToga2V5LFxuICAgICAgICAgZGF0YXNldDogY29tcGxldGVEYXRhc2V0XG4gICAgICAgfSk7XG4gICAgIH1cbiBcbiAgICAgcmV0dXJuIHtcbiAgICAgICByZXN1bHQ6IHJlc3VsdCxcbiAgICAgICB1bmlxdWVEYXRlczogdW5pcXVlRGF0ZXNBcnJheVxuICAgICB9O1xuICAgfVxuIFxuIFxuIFxuICAgZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZShmaWxlZGF0YSwgdmFsdWVGaWVsZCwgbWluQnViYmxlU2l6ZSwgbWF4QnViYmxlU2l6ZSkge1xuICAgICBmaWxlZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgIGl0ZW1bdmFsdWVGaWVsZF0gPSBwYXJzZUZsb2F0KGl0ZW1bdmFsdWVGaWVsZF0pO1xuICAgICB9KTtcbiBcbiAgICAgbGV0IG1heFJlY2hhcmdlQ291bnQgPSBNYXRoLm1heCguLi5maWxlZGF0YS5tYXAoaXRlbSA9PiBpdGVtW3ZhbHVlRmllbGRdKSk7XG4gICAgIGxldCBtaW5SZWNoYXJnZUNvdW50ID0gTWF0aC5taW4oLi4uZmlsZWRhdGEubWFwKGl0ZW0gPT4gaXRlbVt2YWx1ZUZpZWxkXSkpO1xuIFxuICAgICBsZXQgbWluQ29sb3IgPSBbNDMsIDIyNCwgOTFdO1xuICAgICBsZXQgbWF4Q29sb3IgPSBbNjUsIDEzNSwgMjRdO1xuICAgICBsZXQgaG92ZXIgPSBbMTM1LCAxODQsIDEwNl07XG4gXG4gICAgIGZpbGVkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgbGV0IHNpemUgPSB0aGlzLm1hcFJhbmdlKGl0ZW1bdmFsdWVGaWVsZF0sIG1pblJlY2hhcmdlQ291bnQsIG1heFJlY2hhcmdlQ291bnQsIG1pbkJ1YmJsZVNpemUsIG1heEJ1YmJsZVNpemUpO1xuICAgICAgIGl0ZW0uc2l6ZSA9IHNpemU7XG4gICAgICAgaXRlbS50b29sVGlwID0gKGl0ZW1bdmFsdWVGaWVsZF0pID8gaXRlbVt2YWx1ZUZpZWxkXSA6ICcwJztcbiAgICAgICBpdGVtLmhvdmVyID0gYHJnYigke2hvdmVyLmpvaW4oJywnKX0pYDtcbiAgICAgICBpZiAoaXRlbVt2YWx1ZUZpZWxkXSA9PSAwIHx8IGl0ZW1bdmFsdWVGaWVsZF0gPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICBpdGVtLmNvbG9yID0gYHJnYigke21pbkNvbG9yLmpvaW4oJywnKX0pYDtcbiAgICAgICB9IGVsc2Uge1xuICAgICAgICAgaXRlbS5jb2xvciA9IGByZ2IoJHttYXhDb2xvci5qb2luKCcsJyl9KWA7XG4gICAgICAgfVxuICAgICB9KTtcbiBcbiAgICAgcmV0dXJuIGZpbGVkYXRhO1xuICAgfVxuIFxuICAgbWFwUmFuZ2UodmFsdWUsIGluTWluLCBpbk1heCwgb3V0TWluLCBvdXRNYXgpIHtcbiAgICAgcmV0dXJuICgodmFsdWUgLSBpbk1pbikgKiAob3V0TWF4IC0gb3V0TWluKSkgLyAoaW5NYXggLSBpbk1pbikgKyBvdXRNaW47XG4gICB9XG4gXG4gXG5cbiAgLy8gY3VzdG9taXplTGFiZWxUZXh0ID0gKGluZm86IGFueSkgPT4gYCR7aW5mby52YWx1ZVRleHR9YDtcblxuXG59XG4iLCI8ZGl2IGNsYXNzPVwibm90LWZ1bGwtc2NyZWVuXCIgKGRibGNsaWNrKT1cInRvZ2dsZUZ1bGxTY3JlZW4oKVwiPlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJwYWdlX2NvbmZpZz8ud2lkR2V0Q29uZmlnPy5kaXNwbGF5XCI+XG4gICAgICAgIDxhcHAtdGl0bGUgW3RpdGxlXT1cInBhZ2VfY29uZmlnLndpZEdldENvbmZpZy53aWRnZXRUaXRsZVwiIFtvcGVyYXRvcnNdPVwicGFnZV9jb25maWcub3BlcmF0aW9uc1wiXG4gICAgICAgICAgICBbZGlzcGxheVR5cGVdPVwiJ2NoYXJ0J1wiPjwvYXBwLXRpdGxlPlxuICAgIDwvbmctY29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJteC0yIHAtMiBiZy1ncmF5LTIwMCBkYXJrOmJnLWdyYXktODAwIHRleHQtZ3JheS05MDAgZGFyazp0ZXh0LWdyYXktMTAwXCI+XG4gICAgICAgIDxhcHAtbG9hZGVyICpuZ0lmPVwiaXNMb2FkZXJcIj48L2FwcC1sb2FkZXI+XG4gICAgICAgIDxuZy1jb250YWluZXJcbiAgICAgICAgICAgICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnZG91Z2hudXQnICYmIGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gJ3BpZScgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAnZnVubmVsJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdidWJibGUnXCI+XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIDxkeC1jaGFydCBpZD1cImNoYXJ0XCIgIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCIgKG9uUG9pbnRDbGljayk9XCJnZXRBbGxDaGFydFBvaW50Q2xpY2soJGV2ZW50KVwiIFtwYWxldHRlXT1cImNoYXJ0Q29uZmlnLnBhbGV0dGVcIlxuICAgICAgICAgICAgICAgIFt0aXRsZV09XCJ7IHRleHQ6IGNoYXJ0Q29uZmlnLmNhcHRpb24sIGZvbnQ6IHsgc2l6ZTogMTQgfSB9XCIgKm5nSWY9XCIhaXNMb2FkZXJcIlxuICAgICAgICAgICAgICAgIFt2YWx1ZUF4aXNdPVwiY2hhcnRDb25maWcudmFsdWVBeGlzQ29uZmlnXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1zaXplIFtoZWlnaHRdPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4by1zaXplPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydENvbmZpZy5jaGFydF9jb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0gJiYgaXRlbS5heGlzXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXZhbHVlLWF4aXMgbmFtZT1cInt7aXRlbS5heGlzfX1cIiBwb3NpdGlvbj1cInt7aXRlbS5wb3NpdGlvbn19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by10aXRsZSB0ZXh0PVwie3tpdGVtLm5hbWV9fVwiPjwvZHhvLXRpdGxlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktdmFsdWUtYXhpcz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZHhvLWFyZ3VtZW50LWF4aXM+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tbGFiZWwgb3ZlcmxhcHBpbmdCZWhhdmlvcj1cInJvdGF0ZVwiIFtyb3RhdGlvbkFuZ2xlXT1cIjI3MFwiPjwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgICAgIDwvZHhvLWFyZ3VtZW50LWF4aXM+XG4gICAgICAgICAgICAgICAgPGR4by10b29sdGlwIFtlbmFibGVkXT1cInRydWVcIiBbc2hhcmVkXT1cInRydWVcIiBbY3VzdG9taXplVG9vbHRpcF09XCJjdXN0b21pemVUb29sdGlwXCI+XG4gICAgICAgICAgICAgICAgPC9keG8tdG9vbHRpcD5cbiAgICAgICAgICAgICAgICA8ZHhvLWNvbW1vbi1zZXJpZXMtc2V0dGluZ3MgYXJndW1lbnRGaWVsZD1cInt7Y2hhcnRDb25maWcuYXJndW1lbnRGaWVsZH19XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tY29tbW9uLXNlcmllcy1zZXR0aW5ncz5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbSAmJiBpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyB0eXBlPVwie3tpdGVtLnR5cGV9fVwiIHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCIgYXhpcz1cInt7aXRlbS5heGlzfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7e2l0ZW0ubmFtZX19XCIgY29sb3I9XCJ7e2l0ZW0uY29sb3J9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0gJiYgIWl0ZW0uY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktc2VyaWVzIHR5cGU9XCJ7e2l0ZW0udHlwZX19XCIgdmFsdWVGaWVsZD1cInt7aXRlbS52YWx1ZUZpZWxkfX1cIiBheGlzPVwie3tpdGVtLmF4aXN9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXNlcmllcz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydEhlaWdodFwiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPGR4by1sZWdlbmQgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGVnZW5kRGlzcGxheVwiIHZlcnRpY2FsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy52ZXJ0aWNhbEFsaWdubWVudH19XCJcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcuaG9yaXpvbnRhbEFsaWdubWVudH19XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tbGVnZW5kPlxuICAgICAgICAgICAgPC9keC1jaGFydD5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG5cblxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ2RvdWdobnV0JyB8fCBjaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ3BpZSdcIj5cblxuICAgICAgICAgICAgPGR4LXBpZS1jaGFydCBpZD1cInBpZVwiIFt0eXBlXT1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZVwiIFt0aXRsZV09XCJ7IHRleHQ6IGNoYXJ0Q29uZmlnLmNhcHRpb24sIGZvbnQ6IHsgc2l6ZTogMTQgfSB9XCJcbiAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJmaW5hbENoYXJ0RGF0YVNvdXJjZVwiIGNlbnRlclRlbXBsYXRlPVwiY2VudGVyVGVtcGxhdGVcIlxuICAgICAgICAgICAgICAgIChvblBvaW50Q2xpY2spPVwicG9pbnRDbGlja0hhbmRsZXIoJGV2ZW50KVwiIFtwYWxldHRlXT1cImNoYXJ0Q29uZmlnLnBhbGV0dGVcIj5cblxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtLmNvbG9yXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZHhpLXNlcmllcyBhcmd1bWVudEZpZWxkPXt7Y2hhcnRDb25maWcuYXJndW1lbnRGaWVsZH19IHZhbHVlRmllbGQ9XCJ7e2l0ZW0udmFsdWVGaWVsZH19XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiIGNvbG9yPVwie3tpdGVtLmNvbG9yfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWxhYmVsIFt2aXNpYmxlXT1cImNoYXJ0Q29uZmlnLmxhYmVsRGlzcGxheVwiIGZvcm1hdD1cImN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tY29ubmVjdG9yIFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1jb25uZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIWl0ZW0uY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktc2VyaWVzIGFyZ3VtZW50RmllbGQ9e3tjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkfX0gdmFsdWVGaWVsZD1cInt7aXRlbS52YWx1ZUZpZWxkfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7e2l0ZW0ubmFtZX19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBbdmlzaWJsZV09XCJjaGFydENvbmZpZy5sYWJlbERpc3BsYXlcIiBmb3JtYXQ9XCJjdXJyZW5jeVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWNvbm5lY3RvciBbdmlzaWJsZV09XCJ0cnVlXCI+PC9keG8tY29ubmVjdG9yPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhvLWxhYmVsPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgPGR4by1sZWdlbmQgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGVnZW5kRGlzcGxheVwiXG4gICAgICAgICAgICAgICAgICAgIGhvcml6b250YWxBbGlnbm1lbnQ9XCJ7e2NoYXJ0Q29uZmlnLmhvcml6b250YWxBbGlnbm1lbnR9fVwiXG4gICAgICAgICAgICAgICAgICAgIHZlcnRpY2FsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy52ZXJ0aWNhbEFsaWdubWVudH19XCI+PC9keG8tbGVnZW5kPlxuICAgICAgICAgICAgICAgIDwhLS0gPGR4by1leHBvcnQgW2VuYWJsZWRdPVwidHJ1ZVwiPjwvZHhvLWV4cG9ydD4gLS0+XG4gICAgICAgICAgICAgICAgPGR4by10b29sdGlwIFtlbmFibGVkXT1cInRydWVcIiBbY3VzdG9taXplVG9vbHRpcF09XCJjdXN0b21pemVUb29sdGlwXCIgZm9ybWF0PVwiY3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICA8L2R4by10b29sdGlwPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ2RvdWdobnV0J1wiPlxuICAgICAgICAgICAgICAgICAgICA8c3ZnICpkeFRlbXBsYXRlPVwibGV0IHBpZUNoYXJ0IG9mICdjZW50ZXJUZW1wbGF0ZSdcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgY3g9XCIxMDBcIiBjeT1cIjEwMFwiIFthdHRyLnJdPVwicGllQ2hhcnQuZ2V0SW5uZXJSYWRpdXMoKSAtIDZcIiBmaWxsPVwiZ3JheVwiIG9wYWNpdHk9XCIwLjAwMDFcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvY2lyY2xlPlxuICAgIFxuICAgICAgICAgICAgICAgICAgICAgICAgPHRleHQgdGV4dC1hbmNob3I9XCJtaWRkbGVcIiBzdHlsZT1cImZvbnQtc2l6ZTogMTVweFwiIHg9XCIxMDBcIiB5PVwiMTAwXCIgZmlsbD1cIiNlZWVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dHNwYW4geD1cIjEwMFwiPnt7IGNhbGN1bGF0ZVRvdGFsKHBpZUNoYXJ0KSB9fTwvdHNwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkaXNwbGF5OiBpbmxpbmUgLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSA8dHNwYW4geD1cIjEwMFwiIGR5PVwiMjBweFwiIHN0eWxlPVwiZm9udC13ZWlnaHQ6IDYwMFwiPjwvdHNwYW4+IC0tPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZXh0PlxuICAgICAgICAgICAgICAgICAgICA8L3N2Zz5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgIDwvZHgtcGllLWNoYXJ0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09ICdmdW5uZWwnXCI+XG4gICAgICAgICAgICA8ZHgtZnVubmVsIGlkPVwiZnVubmVsXCIgW2RhdGFTb3VyY2VdPVwiZmluYWxDaGFydERhdGFTb3VyY2VcIiBhcmd1bWVudEZpZWxkPVwiYXJndW1lbnRcIiB2YWx1ZUZpZWxkPVwidmFsdWVcIlxuICAgICAgICAgICAgICAgIHBhbGV0dGU9XCJTb2Z0IFBhc3RlbFwiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tc2l6ZSBbaGVpZ2h0XT1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9keG8tc2l6ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJmYWxzZVwiPjwvZHhvLWV4cG9ydD5cbiAgICAgICAgICAgICAgICA8ZHhvLXRvb2x0aXAgW2VuYWJsZWRdPVwidHJ1ZVwiPiA8L2R4by10b29sdGlwPlxuICAgICAgICAgICAgICAgIDxkeG8taXRlbT5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1ib3JkZXIgW3Zpc2libGVdPVwidHJ1ZVwiPiA8L2R4by1ib3JkZXI+XG4gICAgICAgICAgICAgICAgPC9keG8taXRlbT5cbiAgICAgICAgICAgICAgICA8ZHhvLWxhYmVsIFt2aXNpYmxlXT1cInRydWVcIiBwb3NpdGlvbj1cImluc2lkZVwiIGJhY2tncm91bmRDb2xvcj1cIm5vbmVcIlxuICAgICAgICAgICAgICAgICAgICBbY3VzdG9taXplVGV4dF09XCJjdXN0b21pemVUZXh0XCI+PC9keG8tbGFiZWw+XG4gICAgICAgICAgICA8L2R4LWZ1bm5lbD5cblxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlID09ICdidWJibGUnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwibXgtNSBvdmVyZmxvdy14LWF1dG9cIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYXRDaGFydERhdGFTb3VyY2UuZGF0YVNldFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImgtMTAgdGV4dC1zbSBpdGVtcy1jZW50ZXIgbWluLXctMTIgbWF4LXctWzMwJV0ganVzdGlmeS1jZW50ZXIgZmxleFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbS5kYXRhc291cmNlfX1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImlubGluZS1ibG9jayBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LW5vd3JhcCBqdXN0aWZ5LWNlbnRlciBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgYm94IG9mIGl0ZW0uZGF0YXNldFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtc2hyaW5rLTAgbWluLXctMTAgbWF4LXctWzIwJV0gaC0xMCB0ZXh0LXNtIGN1cnNvci1wb2ludGVyIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyIHRleHQtZ3JheS04MDBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRUb29sdGlwXT1cIidSZWNvcmQgRGF0ZTogJyArIGJveC5yZWNvcmREYXRlICsgJ1xcblJlY2hhcmdlIENvdW50OiAnICsgYm94LnRvb2xUaXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdFRvb2x0aXBDbGFzcz1cImN1c3RvbS10b29sdGlwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJvdW5kZWQtZnVsbFwiIFtuZ1N0eWxlXT1cIntcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdiYWNrZ3JvdW5kLWNvbG9yJzogYm94LmlzSG92ZXJlZCA/ICdyZ2IoMTM1LCAxODQsIDEwNiknIDogYm94LmNvbG9yLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3dpZHRoLnB4JzogYm94LnNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaG92ZXInOiBib3guaG92ZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaGVpZ2h0LnB4JzogYm94LnNpemVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCIgKG1vdXNlZW50ZXIpPVwiYm94LmlzSG92ZXJlZCA9IHRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobW91c2VsZWF2ZSk9XCJib3guaXNIb3ZlcmVkID0gZmFsc2VcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWJsb2NrXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGp1c3RpZnktY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCB3LTEyIG1heC13LVsyMCVdIGgtZnVsbCBmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlclwiPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiAqbmdGb3I9XCJsZXQgaXRlbSBvZiBoZWF0Q2hhcnREYXRhU291cmNlLmFyZ3VtZW50VmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiZmxleC1zaHJpbmstMCB3LTEwIG1heC13LVsyMCVdIG1pbi1oLTE0IGZsZXggdGV4dC1zbSBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgbXktMVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieydoZWlnaHQnOiAnYXV0byd9XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LXJvdGF0ZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2l0ZW19fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG4gICAgPC9kaXY+XG5cbiAgICA8YnV0dG9uICpuZ0lmPVwiaXNGdWxsU2NyZWVuXCIgY2xhc3M9XCJjbG9zZS1idXR0b25cIiAoY2xpY2spPVwidG9nZ2xlRnVsbFNjcmVlbigpXCI+Q2xvc2U8L2J1dHRvbj5cbjwvZGl2PiJdfQ==
412
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FtbWEtYWR2YW5jZS1jaGFydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9nYW1tYS1hcHAtY29udHJvbGxlci9zcmMvbGliL3NoYXJlZC9hZHZhbmNlZC1jb21wb25lbnQvZ2FtbWEtYWR2YW5jZS1jaGFydC9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dhbW1hLWFwcC1jb250cm9sbGVyL3NyYy9saWIvc2hhcmVkL2FkdmFuY2VkLWNvbXBvbmVudC9nYW1tYS1hZHZhbmNlLWNoYXJ0L2dhbW1hLWFkdmFuY2UtY2hhcnQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFvQyxTQUFTLEVBQWMsWUFBWSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBR2hKLE9BQU8sTUFBTSxNQUFNLCtDQUErQyxDQUFDO0FBRW5FLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFNOUUsTUFBTSxPQUFPLDBCQUEwQjtJQWtCckMsWUFDVSxhQUE0QixFQUM1QixNQUFxQixFQUNyQixVQUE0QixFQUM1QixRQUFtQixFQUFVLEVBQWMsRUFDM0MsR0FBc0IsRUFDRyxXQUFnQjtRQUx6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBZTtRQUM1QixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQ3JCLGVBQVUsR0FBVixVQUFVLENBQWtCO1FBQzVCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFBVSxPQUFFLEdBQUYsRUFBRSxDQUFZO1FBQzNDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQ0csZ0JBQVcsR0FBWCxXQUFXLENBQUs7UUF2Qm5ELGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGdCQUFXLEdBQVEsRUFBRSxDQUFDO1FBQ3RCLGFBQVEsR0FBWSxJQUFJLENBQUM7UUFPekIseUJBQW9CLEdBQUcsU0FBUyxDQUFDO1FBQ2pDLHlCQUFvQixHQUFRLEVBQUUsQ0FBQztRQUcvQixpQkFBWSxHQUFZLEtBQUssQ0FBQztRQWtCYixzQkFBaUIsR0FBc0IsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQThMM0UscUJBQWdCLEdBQUcsQ0FBQyxJQUFTLEVBQUUsRUFBRSxDQUFDLENBQ2hDO1lBRUUsSUFBSSxFQUFFO29GQUN3RSxJQUFJLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLE9BQU8sSUFBSSxDQUFDLFlBQVk7dUdBQzFFLElBQUksQ0FBQyxVQUFVO09BQy9HLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDO2NBQ25DO1NBQ1QsQ0FBQyxDQUFDO1FBbUlMLGtCQUFhLEdBQUcsQ0FBQyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxpQ0FBaUMsV0FBVyxlQUFlLFFBQVEsRUFBRSxDQUFDO0lBOVUvSCxDQUFDO0lBT0QsSUFDSSxlQUFlLENBQUMsS0FBSztRQUN2QixJQUFJLENBQUMsb0JBQW9CLEdBQUcsS0FBSyxDQUFDO1FBRWxDLElBQUksSUFBSSxDQUFDLG9CQUFvQixLQUFLLFNBQVMsSUFBSSxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtZQUNyRixJQUFJLENBQUMsY0FBYyxHQUFHLEtBQUssQ0FBQztZQUM1QixPQUFPO1NBQ1I7YUFBTTtZQUVMLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO1lBQ3pCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQztZQUNwQyxJQUFJLENBQUMsWUFBWSxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNoRyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztZQUNoSCxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3pFLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUM7Z0JBQzlDLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksT0FBTyxFQUFFO29CQUV0QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVU7eUJBQzFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUM7eUJBQ25DLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUVuRSxNQUFNLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdkMsTUFBTSxlQUFlLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLEtBQUssS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNyRixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLFFBQVEsRUFBRTt3QkFDMUMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQzs0QkFDeEcsUUFBUSxFQUFFLEdBQUc7NEJBQ2IsS0FBSyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7eUJBQ2pELENBQUMsQ0FBQyxDQUFDO3dCQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7cUJBQ3ZDO3lCQUFNO3dCQUVMLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxFQUFFLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7cUJBRWpFO29CQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO2lCQUN2QjtxQkFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLFNBQVMsRUFBRTtvQkFDL0MsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsSUFBSSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUV6RSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxJQUFJLFFBQVEsRUFBRTs0QkFDMUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQzs0QkFDbEQsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7eUJBQzNCOzZCQUFNOzRCQUNMLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQ0FDckIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7Z0NBQzFFLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtvQ0FDOUIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVO3lDQUNwRCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQzt5Q0FDckUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztpQ0FFeEk7NkJBRUY7NEJBRUQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBOzRCQUM1RSxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQzt5QkFDN0I7cUJBRUY7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDMUI7b0JBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7aUJBQ3ZCO3FCQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsQ0FBQyxPQUFPLElBQUksUUFBUSxFQUFFO29CQUM5QyxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxJQUFJLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7d0JBQ3pFLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsVUFBVTs2QkFDMUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQzs2QkFDN0IsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkUsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3ZDLE1BQU0sZUFBZSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxLQUFLLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO3dCQUVuRyxJQUFJLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFBO3dCQUM5RCxJQUFJLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQztxQkFDN0I7eUJBQU07d0JBQ0wsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztxQkFDMUI7b0JBRUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7aUJBQ3ZCO2FBRUY7U0FLRjtJQUlILENBQUM7SUFHRCxRQUFRO0lBRVIsQ0FBQztJQUVELFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVTtRQUUzQixJQUFJLElBQUksRUFBRTtZQUNSLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO29CQUN4RCxHQUFHLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUNyRTtnQkFDRCxJQUFJLEtBQUssR0FBRyxHQUFHLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNyRCxHQUFHLENBQUMsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQTtZQUN2QyxDQUFDLENBQUMsQ0FBQztZQUNILFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQztZQUNuQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7U0FDVDthQUFNO1lBQ0wsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxhQUFhLENBQUMsQ0FBQztTQUVsRDtJQUNILENBQUM7SUFDRCxlQUFlLENBQUMsSUFBSSxFQUFFLFVBQVU7UUFDOUIsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQVUsRUFBRSxFQUFFO1lBQzFCLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFVLEVBQUUsRUFBRTtnQkFDakMsSUFBSSxLQUFLLENBQUMsY0FBYyxDQUFDLEtBQUssQ0FBQyxFQUFFO29CQUMvQixJQUFJLE9BQU8sS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLFFBQVEsRUFBRTt3QkFDcEMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDckM7aUJBQ0Y7WUFDSCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLEVBQUU7WUFDUixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMzRCxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7Z0JBQzVCLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7b0JBQ2hDLE1BQU0sTUFBTSxHQUFHLEVBQUUsR0FBRyxHQUFHLEVBQUUsQ0FBQztvQkFDMUIsSUFBSSxNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEVBQUU7d0JBQ3pELE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQztxQkFDN0g7b0JBQ0QsT0FBTyxNQUFNLENBQUM7Z0JBQ2hCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxvQkFBb0IsR0FBRyxVQUFVLENBQUM7YUFDeEM7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQzthQUNsQztTQUNGO2FBQU07WUFDTCxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDO1NBQ2xEO0lBQ0gsQ0FBQztJQUNELGFBQWEsQ0FBQyxJQUFJLEVBQUUsVUFBVTtRQUM1QixNQUFNLFdBQVcsR0FBRyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3RSxJQUFJLElBQUksRUFBRTtZQUNSLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQzNELElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDNUIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDaEMsTUFBTSxNQUFNLEdBQUcsRUFBRSxHQUFHLEdBQUcsRUFBRSxDQUFDO29CQUMxQixJQUFJLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsRUFBRTt3QkFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO3FCQUM3SDtvQkFDRCxPQUFPLE1BQU0sQ0FBQztnQkFDaEIsQ0FBQyxDQUFDLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLG9CQUFvQixHQUFHLFVBQVUsQ0FBQzthQUN4QztpQkFBTTtnQkFDTCxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDO2FBQ2xDO1NBQ0Y7YUFBTTtZQUNMLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsY0FBYyxDQUFDLENBQUM7U0FDbkQ7SUFDSCxDQUFDO0lBR0Qsa0JBQWtCLENBQUMsSUFBSSxFQUFFLFVBQVU7UUFFakMsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEVBQUUsQ0FBQztRQUMvQixNQUFNLFNBQVMsR0FBRyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ3RDLE1BQU0sWUFBWSxHQUFHLFVBQVUsQ0FBQyxZQUFZLENBQUM7UUFDN0MsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBRXBFLENBQUM7SUFFRCxZQUFZLENBQUMsUUFBZSxFQUFFLFdBQWtCO1FBQzlDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDdEIsV0FBVyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtnQkFDM0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDOUMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsY0FBYyxDQUFDLENBQUM7Z0JBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDO1lBQ2xDLENBQUMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBK0JELGNBQWMsQ0FBQyxRQUFRO1FBQ3JCLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFHLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsWUFBWSxDQUFDLEtBQUs7UUFDaEIsSUFBSSxLQUFLLElBQUksR0FBRyxFQUFFO1lBQ2hCLE9BQU8sQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztTQUN2QzthQUFNLElBQUksS0FBSyxJQUFJLEdBQUcsRUFBRTtZQUN2QixPQUFPLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7U0FDdkM7YUFBTSxJQUFJLEtBQUssSUFBSSxHQUFHLEVBQUU7WUFDdkIsT0FBTyxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1NBQ3ZDO2FBQU07WUFDTCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBRUQsaUJBQWlCLENBQUMsR0FBRztRQUNuQixHQUFHLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxxQkFBcUIsQ0FBQyxLQUFLO1FBRXpCLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUM3RCxJQUFJLGVBQWUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFM0UsTUFBTSxZQUFZLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUNqRixJQUFJLFlBQVksR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUM7UUFFakUsSUFBSSxZQUFZLElBQUksS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDckMsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDO1lBQ2hELElBQUksSUFBSSxDQUFDLHNCQUFzQixJQUFJLE9BQU8sRUFBRTtnQkFDMUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFVBQVUsRUFBRSxPQUFPLENBQUM7cUJBQ3pDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztxQkFDckIsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3ZDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7YUFDekM7U0FFRjtRQUVELElBQUksR0FBRyxHQUFHO1lBQ1IsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSTtZQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsU0FBUztZQUMvQyxVQUFVLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZO1lBQzdFLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU07WUFDL0IsYUFBYSxFQUFFLFNBQVM7WUFDeEIsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTTtZQUN0QyxXQUFXLEVBQUUsRUFBRTtTQUNoQixDQUFBO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVqQyxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUVwQyxDQUFDO0lBRUQsUUFBUSxDQUFDLFVBQVUsRUFBRSxLQUFLO1FBRXhCLElBQUksWUFBaUIsQ0FBQztRQUN0QixNQUFNLE9BQU8sR0FBRyxVQUFVLENBQUMsV0FBVyxFQUFFLENBQUM7UUFFekMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsSUFBSSxPQUFPLEtBQUssT0FBTyxJQUFJLE9BQU8sS0FBSyxNQUFNLElBQUksT0FBTyxLQUFLLGNBQWMsSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUN4RyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxxQ0FBcUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7YUFDbkY7aUJBQU0sSUFBSSxPQUFPLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsRUFBRTtnQkFDbkcsSUFBSSxPQUFPLElBQUksZ0JBQWdCLEVBQUU7b0JBQy9CLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFBO2lCQUNsRTtxQkFBTTtvQkFDTCxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsS0FBSyxHQUFHLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDbkU7YUFDRjtpQkFBTSxJQUFJLE9BQU8sSUFBSSxRQUFRLElBQUksT0FBTyxJQUFJLFVBQVUsRUFBRTtnQkFDdkQsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsY0FBYyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUM1RDtpQkFBTSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2pDLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHFDQUFxQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNuRjtpQkFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDbEMsWUFBWSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMscUNBQXFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ25GO2lCQUFNO2dCQUNMLFlBQVksR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLHFDQUFxQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQzthQUNuRjtTQUNGO2FBQU07WUFDTCxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO1FBRUQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUdELFVBQVUsQ0FBQyxNQUFNO1FBQ2YsT0FBTyxNQUFNLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUM7UUFDdkMsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFDcEUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUMzQyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUNkLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1lBQ3hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztTQUNSO2FBQU07WUFDTCxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEVBQUUsYUFBYSxDQUFDLENBQUM7WUFDOUMsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN4QixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7U0FDUjtJQUNILENBQUM7SUFXRCxrQkFBa0I7UUFDaEIsSUFBSSxDQUFDLG1CQUFtQixHQUFHLEVBQUUsQ0FBQztRQUM5QixNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUE7UUFLekYsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUM3QyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxDQUFDLEdBQUcsV0FBVyxDQUFDO0lBQzFELENBQUM7SUFFRCxZQUFZLENBQUMsSUFBSSxFQUFFLFdBQVc7UUFDNUIsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDOUIsTUFBTSxhQUFhLEdBQUcsRUFBRSxDQUFDO1FBRXpCLE1BQU0sV0FBVyxHQUFHLFdBQVcsQ0FBQyxXQUFXLENBQUM7UUFDNUMsTUFBTSxhQUFhLEdBQUcsV0FBVyxDQUFDLGFBQWEsQ0FBQztRQUNoRCxNQUFNLFVBQVUsR0FBRyxXQUFXLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUMxRCxNQUFNLGFBQWEsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEcsTUFBTSxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXZHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDL0MsTUFBTSxFQUFFLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsSUFBSSxDQUFDO1lBRWhFLElBQUksQ0FBQyxhQUFhLENBQUMsZ0JBQWdCLENBQUMsRUFBRTtnQkFDcEMsYUFBYSxDQUFDLGdCQUFnQixDQUFDLEdBQUc7b0JBQ2hDLFVBQVUsRUFBRSxnQkFBZ0I7b0JBQzVCLE9BQU8sRUFBRSxFQUFFO2lCQUNaLENBQUM7YUFDSDtZQUNELGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQzNDLEdBQUcsSUFBSTtnQkFDUCxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUM7YUFDaEYsQ0FBQyxDQUFDO1lBQ0gsV0FBVyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUMsQ0FBQztRQUNsRixDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUVqRCxLQUFLLE1BQU0sR0FBRyxJQUFJLGFBQWEsRUFBRTtZQUMvQixNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO1lBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLHlCQUF5QixDQUFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBRTNHLE1BQU0sYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUN6QixnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLGFBQWEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDNUMsQ0FBQyxDQUFDLENBQUM7WUFFSCxNQUFNLGVBQWUsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFTLEVBQUUsRUFBRTtnQkFFekQsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3ZCLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO2lCQUM1QjtxQkFBTTtvQkFDTCxPQUFPO3dCQUNMLFNBQVMsRUFBRSxDQUFDO3dCQUNaLENBQUMsYUFBYSxDQUFDLEVBQUUsSUFBSTt3QkFDckIsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO3dCQUNmLEtBQUssRUFBRSxvQkFBb0I7cUJBQzVCLENBQUM7aUJBQ0g7WUFDSCxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0JBQ1YsVUFBVSxFQUFFLEdBQUc7Z0JBQ2YsT0FBTyxFQUFFLGVBQWU7YUFDekIsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxPQUFPO1lBQ0wsTUFBTSxFQUFFLE1BQU07WUFDZCxXQUFXLEVBQUUsZ0JBQWdCO1NBQzlCLENBQUM7SUFDSixDQUFDO0lBSUQseUJBQXlCLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsYUFBYTtRQUMxRSxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzRSxJQUFJLGdCQUFnQixHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUUzRSxJQUFJLFFBQVEsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDN0IsSUFBSSxRQUFRLEdBQUcsQ0FBQyxFQUFFLEVBQUUsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdCLElBQUksS0FBSyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUU1QixRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQ3RCLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUM3RyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztZQUNqQixJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO1lBQzNELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7WUFDdkMsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxTQUFTLEVBQUU7Z0JBQzFELElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUM7YUFDM0M7aUJBQU07Z0JBQ0wsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQzthQUMzQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTTtRQUMxQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUM7SUFDMUUsQ0FBQzs7dUhBMWRVLDBCQUEwQixnTUF3QjNCLGVBQWU7MkdBeEJkLDBCQUEwQixzTkNadkMsd3ZUQXlLTTsyRkQ3Sk8sMEJBQTBCO2tCQUp0QyxTQUFTOytCQUNFLHlCQUF5Qjs7MEJBMkJoQyxNQUFNOzJCQUFDLGVBQWU7NENBcEJoQixXQUFXO3NCQUFuQixLQUFLO2dCQUVHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBMEJXLGlCQUFpQjtzQkFBakMsTUFBTTtnQkFHSCxlQUFlO3NCQURsQixLQUFLO3VCQUFDLGlCQUFpQiIsInNvdXJjZXNDb250ZW50IjpbIlxuaW1wb3J0IHsgQWZ0ZXJWaWV3SW5pdCwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgRWxlbWVudFJlZiwgRXZlbnRFbWl0dGVyLCBJbmplY3QsIElucHV0LCBPbkluaXQsIE91dHB1dCwgUmVuZGVyZXIyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUb2FzdHJTZXJ2aWNlIH0gZnJvbSAnbmd4LXRvYXN0cic7XG5pbXBvcnQgeyBrcGljb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4va3BpLWNvbW9uLXNlcnZpY2UnO1xuaW1wb3J0IG1vbWVudCBmcm9tICcuLi8uLi8uLi9hcHBsaWNhdGlvbi1jb250cm9sbGVyL21vbWVudC1oZWxwZXInO1xuaW1wb3J0IHsgQ29tbW9uU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvY29tbW9uJztcbmltcG9ydCB7IEFQUF9FTlZJUk9OTUVOVCB9IGZyb20gJy4uLy4uLy4uL2FwcGxpY2F0aW9uLWNvbnRyb2xsZXIvZW52aXJvbm1lbnQnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtZ2FtbWEtYWR2YW5jZS1jaGFydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9nYW1tYS1hZHZhbmNlLWNoYXJ0LmNvbXBvbmVudC5odG1sJyxcbn0pXG5leHBvcnQgY2xhc3MgR2FtbWFBZHZhbmNlQ2hhcnRDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBjaGFydENvbmZpZzogYW55ID0ge307XG4gIHBhZ2VfY29uZmlnOiBhbnkgPSB7fTtcbiAgaXNMb2FkZXI6IGJvb2xlYW4gPSB0cnVlO1xuICBASW5wdXQoKSBjb21wb25lbnRJZDogYW55O1xuICAvLyBASW5wdXQoKSBjYXB0aW9uOiBhbnk7XG4gIEBJbnB1dCgpIGtwaV9uYW1lOiBhbnk7XG4gIC8vIEBJbnB1dCgpIGNoYXJ0RGF0YVNvdXJjZTphbnk7XG4gIGNhcHRpb246IGFueTtcbiAgaXNDaGFydHZpc2libGU6IGJvb2xlYW47XG4gIGNyZWF0Q2hhcnREYXRhU291cmNlID0gdW5kZWZpbmVkO1xuICBmaW5hbENoYXJ0RGF0YVNvdXJjZTogYW55ID0gW107XG4gIGNoYXJ0SGVpZ2h0OiBhbnk7XG5cbiAgaXNGdWxsU2NyZWVuOiBib29sZWFuID0gZmFsc2U7XG5cbiAgaGVhdENoYXJ0RGF0YVNvdXJjZTogYW55O1xuICBidWJibGVDaGFydERhdGE6IGFueTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBjb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgdG9hc3RyOiBUb2FzdHJTZXJ2aWNlLFxuICAgIHByaXZhdGUga3BpU2VydmljZToga3BpY29tbW9uU2VydmljZSxcbiAgICBwcml2YXRlIHJlbmRlcmVyOiBSZW5kZXJlcjIsIHByaXZhdGUgZWw6IEVsZW1lbnRSZWYsXG4gICAgcHJpdmF0ZSBjZHI6IENoYW5nZURldGVjdG9yUmVmLFxuICAgIEBJbmplY3QoQVBQX0VOVklST05NRU5UKSBwcml2YXRlIGVudmlyb25tZW50OiBhbnlcbiAgKSB7XG5cbiAgfVxuICBwYWdlX3Bhcm1zOiBhbnk7XG4gIC8vIGNoYXJ0X2F0dHIubGVnZW5kWzBdXG4gIGNoYXJ0T3JkZXJCeTogYm9vbGVhbjtcbiAgY2hhcnREaXNwbGF5RGF0ZUZvcm1hdDogYW55O1xuICBAT3V0cHV0KCkgcHVibGljIG9uQ2hhcnRQb2ludENsaWNrOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICBASW5wdXQoJ2NoYXJ0RGF0YVNvdXJjZScpXG4gIHNldCBjaGFydERhdGFTb3VyY2UodmFsdWUpIHtcbiAgICB0aGlzLmNyZWF0Q2hhcnREYXRhU291cmNlID0gdmFsdWU7XG4gICAgLy8gY29uc29sZS5sb2codmFsdWUpO1xuICAgIGlmICh0aGlzLmNyZWF0Q2hhcnREYXRhU291cmNlID09PSB1bmRlZmluZWQgfHwgdGhpcy5jcmVhdENoYXJ0RGF0YVNvdXJjZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuaXNDaGFydHZpc2libGUgPSBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9IGVsc2Uge1xuXG4gICAgICB0aGlzLmlzTG9hZGVyID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZV9jb25maWcgPSB2YWx1ZTtcbiAgICAgIHRoaXMucGFnZV9wYXJtcyA9IHZhbHVlLnRpdGxlUGFyYW1zO1xuICAgICAgdGhpcy5jaGFydE9yZGVyQnkgPSAodmFsdWUua3BpQ29uZmlnLmRlc2NlbmRpbmdPcmRlcikgPyB2YWx1ZS5rcGlDb25maWcuZGVzY2VuZGluZ09yZGVyIDogZmFsc2U7XG4gICAgICB0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQgPSAodmFsdWUua3BpQ29uZmlnLmRpc3BsYXlEYXRlRm9ybWF0KSA/IHZhbHVlLmtwaUNvbmZpZy5kaXNwbGF5RGF0ZUZvcm1hdCA6IFwiTU0tRERcIjtcbiAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSAmJiB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgdGhpcy5jaGFydENvbmZpZyA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnO1xuICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJkYWlseVwiKSB7XG5cbiAgICAgICAgICBjb25zdCBzb3J0ZWREYXRhID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgIC5maWx0ZXIocmVjb3JkID0+IHJlY29yZC5yZWNvcmREYXRlKVxuICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG1vbWVudChiLnJlY29yZERhdGUpLmRpZmYobW9tZW50KGEucmVjb3JkRGF0ZSkpKTtcblxuICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnRSZWNvcmQgPSBzb3J0ZWREYXRhWzBdO1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkT2JqZWN0cyA9IHNvcnRlZERhdGEuZmlsdGVyKGRhdGEgPT4gZGF0YS5yZWNvcmREYXRlID09PSB2YWx1ZS5lbmREYXRlKTtcbiAgICAgICAgICBpZiAodGhpcy5jaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ2Z1bm5lbCcpIHtcbiAgICAgICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBPYmplY3Qua2V5cyhtb3N0UmVjZW50UmVjb3JkKS5maWx0ZXIoa2V5ID0+IGtleSAhPT0gJ3JlY29yZERhdGUnKS5tYXAoa2V5ID0+ICh7XG4gICAgICAgICAgICAgIGFyZ3VtZW50OiBrZXksXG4gICAgICAgICAgICAgIHZhbHVlOiBNYXRoLmFicyhwYXJzZUludChtb3N0UmVjZW50UmVjb3JkW2tleV0pKVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgY29uc29sZS5sb2codGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSlcbiAgICAgICAgICB9IGVsc2Uge1xuXG4gICAgICAgICAgICB0aGlzLmdldERhaWx5Q2hhcnQoZmlsdGVyZWRPYmplY3RzLCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZyk7XG5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJtb250aGx5XCIpIHtcbiAgICAgICAgICBpZiAodmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UgJiYgdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2UubGVuZ3RoICE9PSAwKSB7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnYnViYmxlJykge1xuICAgICAgICAgICAgICB0aGlzLmJ1YmJsZUNoYXJ0RGF0YSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlO1xuICAgICAgICAgICAgICB0aGlzLmdldEJ1YmJsZUNoYXJ0RGF0YSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgaWYgKHRoaXMuY2hhcnRPcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbGV0IHNob3J0TmFtZSA9IHZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnWydhcmd1bWVudEZpZWxkJ10udG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvcnROYW1lLmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgICAgICAgICAgICAgIHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlID0gdmFsdWUua3BpQ29uZmlnLmRhdGFTb3VyY2VcbiAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihyZWNvcmQgPT4gcmVjb3JkW3ZhbHVlLmtwaUNvbmZpZy5kYXRhQ29uZmlnWydhcmd1bWVudEZpZWxkJ11dKVxuICAgICAgICAgICAgICAgICAgICAuc29ydCgoYSwgYikgPT4gbW9tZW50KGJbdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXV0pLmRpZmYobW9tZW50KGFbdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWdbJ2FyZ3VtZW50RmllbGQnXV0pKSk7XG5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIHRoaXMuZ2V0TW9udGhseUNoYXJ0KHZhbHVlLmtwaUNvbmZpZy5kYXRhU291cmNlLCB2YWx1ZS5rcGlDb25maWcuZGF0YUNvbmZpZylcbiAgICAgICAgICAgICAgdGhpcy5pc0NoYXJ0dmlzaWJsZSA9PSB0cnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUua3BpQ29uZmlnLmZvcm1hdGUgPT0gXCJob3VybHlcIikge1xuICAgICAgICAgIGlmICh2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZSAmJiB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHNvcnRlZERhdGEgPSB2YWx1ZS5rcGlDb25maWcuZGF0YVNvdXJjZVxuICAgICAgICAgICAgICAuZmlsdGVyKHJlY29yZCA9PiByZWNvcmQuaG91cilcbiAgICAgICAgICAgICAgLnNvcnQoKGEsIGIpID0+IG1vbWVudChhLmhvdXIsICdoaCcpLmRpZmYobW9tZW50KGIuaG91ciwgJ2hoJykpKTtcbiAgICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnRSZWNvcmQgPSBzb3J0ZWREYXRhWzBdO1xuICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gc29ydGVkRGF0YS5maWx0ZXIoZGF0YSA9PiBkYXRhLnJlY29yZERhdGUgPT09IG1vc3RSZWNlbnRSZWNvcmQucmVjb3JkRGF0ZSk7XG5cbiAgICAgICAgICAgIHRoaXMuZ2V0SG91ckNoYXJ0KGZpbHRlcmVkT2JqZWN0cywgdmFsdWUua3BpQ29uZmlnLmRhdGFDb25maWcpXG4gICAgICAgICAgICB0aGlzLmlzQ2hhcnR2aXNpYmxlID09IHRydWU7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgfVxuICAgICAgLy8gZWxzZSB7XG4gICAgICAvLyAgIHRoaXMuaXNMb2FkZXIgPSBmYWxzZTtcbiAgICAgIC8vIH1cblxuICAgIH1cblxuXG5cbiAgfVxuXG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG5cbiAgfVxuXG4gIGdldEhvdXJDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG4gICAgLy8gY29uc3QgdmFsdWVGaWVsZHMgPSBkYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52YWx1ZUZpZWxkKTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgZGF0YS5mb3JFYWNoKHZhbCA9PiB7XG4gICAgICAgIGlmICh2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXS50b1N0cmluZygpLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgdmFsW2RhdGFDb25maWcuYXJndW1lbnRGaWVsZF0gPSAnMCcgKyB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbGFiZWwgPSB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXS50b1N0cmluZygpO1xuICAgICAgICB2YWxbZGF0YUNvbmZpZy5hcmd1bWVudEZpZWxkXSA9IGxhYmVsXG4gICAgICB9KTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmZpbmFsQ2hhcnREYXRhU291cmNlID0gZGF0YTtcbiAgICAgIH0sIDUwMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMua3BpX25hbWUgKyAnQ2hhcnQgRXJyb3InKTtcblxuICAgIH1cbiAgfVxuICBnZXRNb250aGx5Q2hhcnQoZGF0YSwgZGF0YUNvbmZpZykge1xuICAgIGNvbnN0IHZhbHVlRmllbGRzID0gZGF0YUNvbmZpZy5jaGFydF9jb25maWcubWFwKGNvbmZpZyA9PiBjb25maWcudmFsdWVGaWVsZCk7XG4gICAgZGF0YS5mb3JFYWNoKChlbnRyeTogYW55KSA9PiB7XG4gICAgICB2YWx1ZUZpZWxkcy5mb3JFYWNoKChmaWVsZDogYW55KSA9PiB7XG4gICAgICAgIGlmIChlbnRyeS5oYXNPd25Qcm9wZXJ0eShmaWVsZCkpIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGVudHJ5W2ZpZWxkXSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgZW50cnlbZmllbGRdID0gTnVtYmVyKGVudHJ5W2ZpZWxkXSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGEubWFwKG9iaiA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfTtcbiAgICAgICAgICBpZiAobmV3T2JqLmhhc093blByb3BlcnR5KHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZCkpIHtcbiAgICAgICAgICAgIG5ld09ialt0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGRdID0gbW9tZW50KG5ld09ialt0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGRdKS5mb3JtYXQodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ld09iajtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMua3BpX25hbWUgKyAnQ2hhcnQgRXJyb3InKTtcbiAgICB9XG4gIH1cbiAgZ2V0RGFpbHlDaGFydChkYXRhLCBkYXRhQ29uZmlnKSB7XG4gICAgY29uc3QgdmFsdWVGaWVsZHMgPSBkYXRhQ29uZmlnLmNoYXJ0X2NvbmZpZy5tYXAoY29uZmlnID0+IGNvbmZpZy52YWx1ZUZpZWxkKTtcbiAgICBpZiAoZGF0YSkge1xuICAgICAgbGV0IGNvbnRlbnQgPSB0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQudG9Mb3dlckNhc2UoKTtcbiAgICAgIGlmIChjb250ZW50LmluY2x1ZGVzKCdkYXRlJykpIHtcbiAgICAgICAgY29uc3QgZGF0YVNvdXJjZSA9IGRhdGEubWFwKG9iaiA9PiB7XG4gICAgICAgICAgY29uc3QgbmV3T2JqID0geyAuLi5vYmogfTtcbiAgICAgICAgICBpZiAobmV3T2JqLmhhc093blByb3BlcnR5KHRoaXMuY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZCkpIHtcbiAgICAgICAgICAgIG5ld09ialt0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGRdID0gbW9tZW50KG5ld09ialt0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGRdKS5mb3JtYXQodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIG5ld09iajtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuZmluYWxDaGFydERhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudG9hc3RyLmVycm9yKHRoaXMua3BpX25hbWUgKyAnIENoYXJ0IEVycm9yJyk7XG4gICAgfVxuICB9XG5cblxuICBnZXRSZWNvbkRhaWx5Q2hhcnQoZGF0YSwgZGF0YUNvbmZpZykge1xuXG4gICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IFtdO1xuICAgIGNvbnN0IHJlY29uX2tleSA9IGRhdGFDb25maWcucmVjb25LZXk7XG4gICAgY29uc3QgcmVjb25fY29sdW1uID0gZGF0YUNvbmZpZy5yZWNvbkNvbHVtbnM7XG4gICAgdGhpcy5maW5hbENoYXJ0RGF0YVNvdXJjZSA9IHRoaXMuZ2V0RmluYWxEYXRhKGRhdGEsIHJlY29uX2NvbHVtbik7XG5cbiAgfVxuXG4gIGdldEZpbmFsRGF0YShtYWluRGF0YTogYW55W10sIHJlY29uQ29sdW1uOiBhbnlbXSk6IGFueVtdIHtcbiAgICBtYWluRGF0YS5mb3JFYWNoKGRhdGEgPT4ge1xuICAgICAgcmVjb25Db2x1bW4uZm9yRWFjaChjb2x1bW4gPT4ge1xuICAgICAgICBjb25zdCBmaXJzdEtleVZhbHVlID0gZGF0YVtjb2x1bW4uZmlyc3RLZXldO1xuICAgICAgICBjb25zdCBzZWNvbmRLZXlWYWx1ZSA9IGRhdGFbY29sdW1uLnNlY29uZEtleV07XG4gICAgICAgIGNvbnN0IG1vdURpZmYgPSBNYXRoLmFicyhmaXJzdEtleVZhbHVlIC0gc2Vjb25kS2V5VmFsdWUpO1xuICAgICAgICBkYXRhW2NvbHVtbi5maW5hbEtleV0gPSBtb3VEaWZmO1xuICAgICAgfSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gbWFpbkRhdGE7XG4gIH1cblxuICBjdXN0b21pemVUb29sdGlwID0gKGluZm86IGFueSkgPT4gKFxuICAgIHtcblxuICAgICAgaHRtbDogYDx0YWJsZSBzdHlsZSA9IHdpZHRoPTEwMCUgaGVpZ2h0PTMwIGJvcmRlcj0wICBzdHlsZT1cXCdmb250LXNpemU6IDEzcHhcXCc+XG4gICAgPHRyPjx0ZCBjbGFzcz1cInRleHQtZ3JheS04MDAgZGFyazp0ZXh0LWdyYXktMjAwIFwiIHN0eWxlPVxcJ3RleHQtYWxpZ246IGxlZnRcXCc+ICR7dGhpcy5jb21tb25TZXJ2aWNlLmNvbnZlcnRUb1RpdGxlQ2FzZSh0aGlzLmNoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGQpfSA6ICAke2luZm8uYXJndW1lbnRUZXh0fSA8L3RkPjwvdHI+XG4gICAgIDx0cj48dGQgY2xhc3M9XCJ0ZXh0LWdyYXktODAwIGRhcms6dGV4dC1ncmF5LTIwMCBcIiBzdHlsZT1cXCd0ZXh0LWFsaWduOiBsZWZ0OyBwYWRkaW5nLXRvcDogNXB4XFwnPiAke2luZm8uc2VyaWVzTmFtZX0gOlxuICAgICAke3RoaXMuZ2V0VmFsdWUoaW5mby5zZXJpZXNOYW1lLCBpbmZvLnZhbHVlKX0gIDwvdGQ+PC90cj5cbiAgICAgPC90YWJsZT5gLFxuICAgIH0pO1xuXG4gIC8vIGN1c3RvbWl6ZVRvb2x0aXAgPSAoaW5mbzogYW55KSA9PiAoe1xuICAvLyAgIGh0bWw6IGBcbiAgLy8gICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1pbi13LVsyMDBweF0gcC0zIHJvdW5kZWQtbGcgc2hhZG93LWxnIFxuICAvLyAgICAgICAgICAgICAgIGJnLXdoaXRlIGRhcms6YmctZ3JheS04MDAgYm9yZGVyIGJvcmRlci1ncmF5LTIwMCBkYXJrOmJvcmRlci1ncmF5LTcwMFxuICAvLyAgICAgICAgICAgICAgIHRleHQtc20gZm9udC1zYW5zXCI+XG4gIC8vICAgICA8ZGl2IGNsYXNzPVwidGV4dC1ncmF5LTgwMCBkYXJrOnRleHQtZ3JheS0yMDAgZm9udC1tZWRpdW0gbWItMlwiPlxuICAvLyAgICAgICAke3RoaXMuY29tbW9uU2VydmljZS5jb252ZXJ0VG9UaXRsZUNhc2UodGhpcy5jaGFydENvbmZpZy5hcmd1bWVudEZpZWxkKX06ICR7aW5mby5hcmd1bWVudFRleHR9XG4gIC8vICAgICA8L2Rpdj5cbiAgLy8gICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWdyYXktNjAwIGRhcms6dGV4dC1ncmF5LTMwMFwiPlxuICAvLyAgICAgICAke2luZm8uc2VyaWVzTmFtZX06ICR7dGhpcy5nZXRWYWx1ZShpbmZvLnNlcmllc05hbWUsIGluZm8udmFsdWUpfVxuICAvLyAgICAgPC9kaXY+XG4gIC8vICAgPC9kaXY+XG4gIC8vIGAsXG4gIC8vIH0pO1xuXG4gIC8vIGN1c3RvbWl6ZVRvb2x0aXAoYXJnKSB7XG4gIC8vICAgcmV0dXJuIHsgdGV4dDogYCR7YXJnLmFyZ3VtZW50VGV4dH08YnI+JHthcmcuc2VyaWVzTmFtZX06ICR7YXJnLnZhbHVlVGV4dH1CYCB9O1xuICAvLyB9XG5cbiAgY2FsY3VsYXRlVG90YWwocGllQ2hhcnQpIHtcbiAgICBjb25zdCB0b3RhbFZhbHVlID0gcGllQ2hhcnQuZ2V0QWxsU2VyaWVzKClbMF0uZ2V0VmlzaWJsZVBvaW50cygpLnJlZHVjZSgocywgcCkgPT4gcyArIHAub3JpZ2luYWxWYWx1ZSwgMCk7XG4gICAgcmV0dXJuIHRoaXMuZm9ybWF0TnVtYmVyKHRvdGFsVmFsdWUpO1xuICB9XG5cbiAgZm9ybWF0TnVtYmVyKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID49IDFlOSkge1xuICAgICAgcmV0dXJuICh2YWx1ZSAvIDFlOSkudG9GaXhlZCgyKSArICdCJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDFlNikge1xuICAgICAgcmV0dXJuICh2YWx1ZSAvIDFlNikudG9GaXhlZCgyKSArICdNJztcbiAgICB9IGVsc2UgaWYgKHZhbHVlID49IDFlMykge1xuICAgICAgcmV0dXJuICh2YWx1ZSAvIDFlMykudG9GaXhlZCgyKSArICdLJztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvRml4ZWQoMik7XG4gICAgfVxuICB9XG5cbiAgcG9pbnRDbGlja0hhbmRsZXIoYXJnKSB7XG4gICAgYXJnLnRhcmdldC5zZWxlY3QoKTtcbiAgfVxuICBnZXRBbGxDaGFydFBvaW50Q2xpY2soZXZlbnQpIHtcblxuICAgIGxldCB0aXRsZSA9IHRoaXMucGFnZV9jb25maWcua3BpQ29uZmlnLmNvbW1vbkNvbmZpZ1sndGl0bGUnXTtcbiAgICBsZXQgdGl0bGVfZGF0YWZpZWxkID0gdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcuY29tbW9uQ29uZmlnWydkYXRhRmllbGQnXTtcblxuICAgIGNvbnN0IHRpdGxlX3BhcmFtcyA9ICh0aXRsZV9kYXRhZmllbGQpID8gZXZlbnQudGFyZ2V0LmRhdGFbdGl0bGVfZGF0YWZpZWxkXSA6IFwiXCI7XG4gICAgbGV0IHdpZGdldF90aXRsZSA9ICh0aXRsZSkgPyB0aXRsZSArIHRpdGxlX3BhcmFtcyA6IHRpdGxlX3BhcmFtcztcblxuICAgIGlmICgncmVjb3JkRGF0ZScgaW4gZXZlbnQudGFyZ2V0LmRhdGEpIHtcbiAgICAgIGNvbnN0IHJlY29yZERhdGUgPSBldmVudC50YXJnZXQuZGF0YS5yZWNvcmREYXRlO1xuICAgICAgaWYgKHRoaXMuY2hhcnREaXNwbGF5RGF0ZUZvcm1hdCA9PSBcIk1NLUREXCIpIHtcbiAgICAgICAgY29uc3QgZnVsbERhdGUgPSBtb21lbnQocmVjb3JkRGF0ZSwgXCJNTS1ERFwiKVxuICAgICAgICAgIC55ZWFyKG1vbWVudCgpLnllYXIoKSlcbiAgICAgICAgICAuZm9ybWF0KHRoaXMuZW52aXJvbm1lbnQuZGF0YUZvcm1hdCk7XG4gICAgICAgIGV2ZW50LnRhcmdldC5kYXRhLnJlY29yZERhdGUgPSBmdWxsRGF0ZTtcbiAgICAgIH1cblxuICAgIH1cblxuICAgIGxldCBvYmogPSB7XG4gICAgICBkYXRhOiBldmVudC50YXJnZXQuZGF0YSxcbiAgICAgIGtleVRvUGFzczogdGhpcy5wYWdlX2NvbmZpZy5rcGlDb25maWcua2V5VG9QYXNzLFxuICAgICAgdGFibGVUaXRsZTogKHRoaXMucGFnZV9wYXJtcykgPyB0aGlzLnBhZ2VfcGFybXMgKyB3aWRnZXRfdGl0bGUgOiB3aWRnZXRfdGl0bGUsXG4gICAgICB2aWV3SWQ6IHRoaXMucGFnZV9jb25maWcudmlld0lkLFxuICAgICAgZHJpbGxEb3duVHlwZTogXCJuYXR1cmFsXCIsXG4gICAgICBkcmlsbGRvd25Gcm9tOiB0aGlzLnBhZ2VfY29uZmlnLnZpZXdJZCxcbiAgICAgIGRyaWxsZG93blRvOiBcIlwiLFxuICAgIH1cbiAgICB0aGlzLm9uQ2hhcnRQb2ludENsaWNrLmVtaXQob2JqKTtcblxuICAgIGNvbnNvbGUubG9nKFwib25jaGFydCBjbGlja1wiLCBvYmopO1xuXG4gIH1cblxuICBnZXRWYWx1ZShjb250ZXh0S2V5LCB2YWx1ZSkge1xuXG4gICAgbGV0IGNvbnRleHRfZGF0YTogYW55O1xuICAgIGNvbnN0IHNtbF9rZXkgPSBjb250ZXh0S2V5LnRvTG93ZXJDYXNlKCk7XG5cbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICBpZiAoc21sX2tleSA9PT0gXCJjb3VudFwiIHx8IHNtbF9rZXkgPT09IFwiaG91clwiIHx8IHNtbF9rZXkgPT09IFwiZGVub21pbmF0aW9uXCIgfHwgc21sX2tleS5pbmNsdWRlcyhcImNvdW50XCIpKSB7XG4gICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCAwKTtcbiAgICAgIH0gZWxzZSBpZiAoc21sX2tleS5pbmNsdWRlcygndm9sdW1lJykgfHwgc21sX2tleS5pbmNsdWRlcygndXBsb2FkJykgfHwgc21sX2tleS5pbmNsdWRlcygnZG93bmxvYWQnKSkge1xuICAgICAgICBpZiAoc21sX2tleSA9PSAnYmlsbGFibGV2b2x1bWUnKSB7XG4gICAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLmZvcm1hdEJ5dHNUb0diKHZhbHVlICogMTAyNCwgMilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UuZm9ybWF0Qnl0c1RvR2IodmFsdWUgKiAxMDI0LCAyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzbWxfa2V5ID09IFwidXBsaW5rXCIgfHwgc21sX2tleSA9PSBcImRvd25saW5rXCIpIHtcbiAgICAgICAgY29udGV4dF9kYXRhID0gdGhpcy5jb21tb25TZXJ2aWNlLmZvcm1hdEJ5dHNUb0diKHZhbHVlLCAyKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5oYXNEZWNpbWFsKHZhbHVlKSkge1xuICAgICAgICBjb250ZXh0X2RhdGEgPSB0aGlzLmNvbW1vblNlcnZpY2UucmVmb3JtYXROdW1iZXJXaXRoVGhvdXNhbmRTZXBhcmF0b3JWMyh2YWx1ZSwgMik7XG4gICAgICB9IGVsc2UgaWYgKCF0aGlzLmhhc0RlY2ltYWwodmFsdWUpKSB7XG4gICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHRfZGF0YSA9IHRoaXMuY29tbW9uU2VydmljZS5yZWZvcm1hdE51bWJlcldpdGhUaG91c2FuZFNlcGFyYXRvclYzKHZhbHVlLCAyKTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29udGV4dF9kYXRhID0gdmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnRleHRfZGF0YTtcbiAgfVxuXG5cbiAgaGFzRGVjaW1hbChudW1iZXIpIHtcbiAgICByZXR1cm4gbnVtYmVyICUgMSAhPT0gMDtcbiAgfVxuXG4gIHRvZ2dsZUZ1bGxTY3JlZW4oKSB7XG4gICAgdGhpcy5pc0xvYWRlciA9IHRydWU7XG4gICAgdGhpcy5pc0Z1bGxTY3JlZW4gPSAhdGhpcy5pc0Z1bGxTY3JlZW47XG4gICAgY29uc3QgZGl2ID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5ub3QtZnVsbC1zY3JlZW4nKTtcbiAgICBpZiAodGhpcy5pc0Z1bGxTY3JlZW4pIHtcbiAgICAgIHRoaXMucmVuZGVyZXIuYWRkQ2xhc3MoZGl2LCAnZnVsbC1zY3JlZW4nKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB9LCAxMCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3MoZGl2LCAnZnVsbC1zY3JlZW4nKTtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGVyID0gZmFsc2U7XG4gICAgICB9LCAxMCk7XG4gICAgfVxuICB9XG5cblxuXG5cblxuICBjdXN0b21pemVUZXh0ID0gKHsgcGVyY2VudFRleHQsIGl0ZW06IHsgYXJndW1lbnQgfSB9KSA9PiBgPHNwYW4gc3R5bGU9J2ZvbnQtc2l6ZTogMjhweCc+JHtwZXJjZW50VGV4dH08L3NwYW4+PGJyLz4ke2FyZ3VtZW50fWA7XG5cblxuICAvLyBidWJibGUgY2hhcnRcblxuICBnZXRCdWJibGVDaGFydERhdGEoKSB7XG4gICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlID0ge307XG4gICAgY29uc3QgeyByZXN1bHQsIHVuaXF1ZURhdGVzIH0gPSB0aGlzLmdlbmVyYXRlRGF0YSh0aGlzLmJ1YmJsZUNoYXJ0RGF0YSwgdGhpcy5jaGFydENvbmZpZylcbiAgICAvLyByZXN1bHQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAvLyAgIGVsZW1lbnQuZGF0YXNldC5zb3J0KChhLCBiKSA9PiBtb21lbnQoYS5yZWNvcmREYXRlLCAnWVlZWU1NREQnKS5kaWZmKG1vbWVudChiLnJlY29yZERhdGUsICdZWVlZTU1ERCcpKSk7XG4gICAgLy8gfSk7XG4gICAgLy8gdW5pcXVlRGF0ZXMuc29ydCgpO1xuICAgIHRoaXMuaGVhdENoYXJ0RGF0YVNvdXJjZVtcImRhdGFTZXRcIl0gPSByZXN1bHQ7XG4gICAgdGhpcy5oZWF0Q2hhcnREYXRhU291cmNlW1wiYXJndW1lbnRWYWx1ZVwiXSA9IHVuaXF1ZURhdGVzO1xuICB9XG5cbiAgZ2VuZXJhdGVEYXRhKGRhdGEsIGNoYXJ0Q29uZmlnKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgY29uc3QgdW5pcXVlRGF0ZXMgPSBuZXcgU2V0KCk7XG4gICAgY29uc3QgZGF0YVNvdXJjZU1hcCA9IHt9O1xuXG4gICAgY29uc3Qgc291cmNlRmllbGQgPSBjaGFydENvbmZpZy5zb3VyY2VGaWVsZDtcbiAgICBjb25zdCBhcmd1bWVudEZpZWxkID0gY2hhcnRDb25maWcuYXJndW1lbnRGaWVsZDtcbiAgICBjb25zdCB2YWx1ZUZpZWxkID0gY2hhcnRDb25maWcuY2hhcnRfY29uZmlnWzBdLnZhbHVlRmllbGQ7XG4gICAgY29uc3QgbWluQnViYmxlU2l6ZSA9ICh0aGlzLmNoYXJ0Q29uZmlnLm1pbkJ1YmJsZVNpemUpID8gcGFyc2VJbnQodGhpcy5jaGFydENvbmZpZy5taW5CdWJibGVTaXplKSA6IDg7XG4gICAgY29uc3QgbWF4QnViYmxlU2l6ZSA9ICh0aGlzLmNoYXJ0Q29uZmlnLm1heEJ1YmJsZVNpemUpID8gcGFyc2VJbnQodGhpcy5jaGFydENvbmZpZy5tYXhCdWJibGVTaXplKSA6IDIwO1xuXG4gICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgY29uc3Qgc291cmNlRmllbGRWYWx1ZSA9IGl0ZW1bc291cmNlRmllbGRdO1xuICAgICAgY29uc3QgYXJndW1lbnRGaWVsZFZhbHVlID0gaXRlbVthcmd1bWVudEZpZWxkXTtcbiAgICAgIGNvbnN0IHsgW3NvdXJjZUZpZWxkXTogXywgW2FyZ3VtZW50RmllbGRdOiBfXywgLi4ucmVzdCB9ID0gaXRlbTtcblxuICAgICAgaWYgKCFkYXRhU291cmNlTWFwW3NvdXJjZUZpZWxkVmFsdWVdKSB7XG4gICAgICAgIGRhdGFTb3VyY2VNYXBbc291cmNlRmllbGRWYWx1ZV0gPSB7XG4gICAgICAgICAgZGF0YXNvdXJjZTogc291cmNlRmllbGRWYWx1ZSxcbiAgICAgICAgICBkYXRhc2V0OiBbXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGF0YVNvdXJjZU1hcFtzb3VyY2VGaWVsZFZhbHVlXS5kYXRhc2V0LnB1c2goe1xuICAgICAgICAuLi5yZXN0LFxuICAgICAgICBbYXJndW1lbnRGaWVsZF06IG1vbWVudChhcmd1bWVudEZpZWxkVmFsdWUpLmZvcm1hdCh0aGlzLmNoYXJ0RGlzcGxheURhdGVGb3JtYXQpXG4gICAgICB9KTtcbiAgICAgIHVuaXF1ZURhdGVzLmFkZChtb21lbnQoYXJndW1lbnRGaWVsZFZhbHVlKS5mb3JtYXQodGhpcy5jaGFydERpc3BsYXlEYXRlRm9ybWF0KSk7XG4gICAgfSk7XG5cbiAgICBjb25zdCB1bmlxdWVEYXRlc0FycmF5ID0gQXJyYXkuZnJvbSh1bmlxdWVEYXRlcyk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBkYXRhU291cmNlTWFwKSB7XG4gICAgICBjb25zdCBkYXRhc2V0ID0gZGF0YVNvdXJjZU1hcFtrZXldLmRhdGFzZXQ7XG4gICAgICBjb25zdCBmb3JtYXR0ZWREYXRhc2V0ID0gdGhpcy5nZXRGb3JtYXRlRGF0YUJ5Q29sb3JDb2RlKGRhdGFzZXQsIHZhbHVlRmllbGQsIG1pbkJ1YmJsZVNpemUsIG1heEJ1YmJsZVNpemUpO1xuXG4gICAgICBjb25zdCBkYXRlVG9JdGVtTWFwID0ge307XG4gICAgICBmb3JtYXR0ZWREYXRhc2V0LmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgIGRhdGVUb0l0ZW1NYXBbaXRlbVthcmd1bWVudEZpZWxkXV0gPSBpdGVtO1xuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNvbXBsZXRlRGF0YXNldCA9IHVuaXF1ZURhdGVzQXJyYXkubWFwKChkYXRlOiBhbnkpID0+IHtcblxuICAgICAgICBpZiAoZGF0ZVRvSXRlbU1hcFtkYXRlXSkge1xuICAgICAgICAgIHJldHVybiBkYXRlVG9JdGVtTWFwW2RhdGVdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBmaWxlQ291bnQ6IDAsXG4gICAgICAgICAgICBbYXJndW1lbnRGaWVsZF06IGRhdGUsXG4gICAgICAgICAgICBbdmFsdWVGaWVsZF06IDAsXG4gICAgICAgICAgICBjb2xvcjogXCJyZ2IoMjQyLCAxMTgsIDEwOSlcIlxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgIGRhdGFzb3VyY2U6IGtleSxcbiAgICAgICAgZGF0YXNldDogY29tcGxldGVEYXRhc2V0XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgcmVzdWx0OiByZXN1bHQsXG4gICAgICB1bmlxdWVEYXRlczogdW5pcXVlRGF0ZXNBcnJheVxuICAgIH07XG4gIH1cblxuXG5cbiAgZ2V0Rm9ybWF0ZURhdGFCeUNvbG9yQ29kZShmaWxlZGF0YSwgdmFsdWVGaWVsZCwgbWluQnViYmxlU2l6ZSwgbWF4QnViYmxlU2l6ZSkge1xuICAgIGZpbGVkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBpdGVtW3ZhbHVlRmllbGRdID0gcGFyc2VGbG9hdChpdGVtW3ZhbHVlRmllbGRdKTtcbiAgICB9KTtcblxuICAgIGxldCBtYXhSZWNoYXJnZUNvdW50ID0gTWF0aC5tYXgoLi4uZmlsZWRhdGEubWFwKGl0ZW0gPT4gaXRlbVt2YWx1ZUZpZWxkXSkpO1xuICAgIGxldCBtaW5SZWNoYXJnZUNvdW50ID0gTWF0aC5taW4oLi4uZmlsZWRhdGEubWFwKGl0ZW0gPT4gaXRlbVt2YWx1ZUZpZWxkXSkpO1xuXG4gICAgbGV0IG1pbkNvbG9yID0gWzQzLCAyMjQsIDkxXTtcbiAgICBsZXQgbWF4Q29sb3IgPSBbNjUsIDEzNSwgMjRdO1xuICAgIGxldCBob3ZlciA9IFsxMzUsIDE4NCwgMTA2XTtcblxuICAgIGZpbGVkYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBsZXQgc2l6ZSA9IHRoaXMubWFwUmFuZ2UoaXRlbVt2YWx1ZUZpZWxkXSwgbWluUmVjaGFyZ2VDb3VudCwgbWF4UmVjaGFyZ2VDb3VudCwgbWluQnViYmxlU2l6ZSwgbWF4QnViYmxlU2l6ZSk7XG4gICAgICBpdGVtLnNpemUgPSBzaXplO1xuICAgICAgaXRlbS50b29sVGlwID0gKGl0ZW1bdmFsdWVGaWVsZF0pID8gaXRlbVt2YWx1ZUZpZWxkXSA6ICcwJztcbiAgICAgIGl0ZW0uaG92ZXIgPSBgcmdiKCR7aG92ZXIuam9pbignLCcpfSlgO1xuICAgICAgaWYgKGl0ZW1bdmFsdWVGaWVsZF0gPT0gMCB8fCBpdGVtW3ZhbHVlRmllbGRdID09IHVuZGVmaW5lZCkge1xuICAgICAgICBpdGVtLmNvbG9yID0gYHJnYigke21pbkNvbG9yLmpvaW4oJywnKX0pYDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0uY29sb3IgPSBgcmdiKCR7bWF4Q29sb3Iuam9pbignLCcpfSlgO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbGVkYXRhO1xuICB9XG5cbiAgbWFwUmFuZ2UodmFsdWUsIGluTWluLCBpbk1heCwgb3V0TWluLCBvdXRNYXgpIHtcbiAgICByZXR1cm4gKCh2YWx1ZSAtIGluTWluKSAqIChvdXRNYXggLSBvdXRNaW4pKSAvIChpbk1heCAtIGluTWluKSArIG91dE1pbjtcbiAgfVxuXG5cblxuICAvLyBjdXN0b21pemVMYWJlbFRleHQgPSAoaW5mbzogYW55KSA9PiBgJHtpbmZvLnZhbHVlVGV4dH1gO1xuXG5cbn1cbiIsIjxkaXYgY2xhc3M9XCJub3QtZnVsbC1zY3JlZW5cIiAoZGJsY2xpY2spPVwidG9nZ2xlRnVsbFNjcmVlbigpXCI+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInBhZ2VfY29uZmlnPy53aWRHZXRDb25maWc/LmRpc3BsYXlcIj5cbiAgICAgICAgPGFwcC10aXRsZSBbdGl0bGVdPVwicGFnZV9jb25maWcud2lkR2V0Q29uZmlnLndpZGdldFRpdGxlXCIgW29wZXJhdG9yc109XCJwYWdlX2NvbmZpZy5vcGVyYXRpb25zXCJcbiAgICAgICAgICAgIFtkaXNwbGF5VHlwZV09XCInY2hhcnQnXCI+PC9hcHAtdGl0bGU+XG4gICAgPC9uZy1jb250YWluZXI+XG4gICAgPGRpdiBjbGFzcz1cIm14LTIgcC0yIGJnLWdyYXktMjAwIGRhcms6YmctZ3JheS04MDAgdGV4dC1ncmF5LTkwMCBkYXJrOnRleHQtZ3JheS0xMDBcIj5cbiAgICAgICAgPGFwcC1sb2FkZXIgKm5nSWY9XCJpc0xvYWRlclwiPjwvYXBwLWxvYWRlcj5cbiAgICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICAgICAgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdkb3VnaG51dCcgJiYgY2hhcnRDb25maWcuY2hhcnRUeXBlICE9PSAncGllJyAmJiBjaGFydENvbmZpZy5jaGFydFR5cGUgIT09ICdmdW5uZWwnICYmIGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSAhPT0gJ2J1YmJsZSdcIj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGR4LWNoYXJ0IGlkPVwiY2hhcnRcIiAgW2RhdGFTb3VyY2VdPVwiZmluYWxDaGFydERhdGFTb3VyY2VcIiAob25Qb2ludENsaWNrKT1cImdldEFsbENoYXJ0UG9pbnRDbGljaygkZXZlbnQpXCIgW3BhbGV0dGVdPVwiY2hhcnRDb25maWcucGFsZXR0ZVwiXG4gICAgICAgICAgICAgICAgW3RpdGxlXT1cInsgdGV4dDogY2hhcnRDb25maWcuY2FwdGlvbiwgZm9udDogeyBzaXplOiAxNCB9IH1cIiAqbmdJZj1cIiFpc0xvYWRlclwiXG4gICAgICAgICAgICAgICAgW3ZhbHVlQXhpc109XCJjaGFydENvbmZpZy52YWx1ZUF4aXNDb25maWdcIj5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLXNpemUgW2hlaWdodF09XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDwvZHhvLXNpemU+XG4gICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGNoYXJ0Q29uZmlnLmNoYXJ0X2NvbmZpZ1wiPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbSAmJiBpdGVtLmF4aXNcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktdmFsdWUtYXhpcyBuYW1lPVwie3tpdGVtLmF4aXN9fVwiIHBvc2l0aW9uPVwie3tpdGVtLnBvc2l0aW9ufX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLXRpdGxlIHRleHQ9XCJ7e2l0ZW0ubmFtZX19XCI+PC9keG8tdGl0bGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS12YWx1ZS1heGlzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkeG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1sYWJlbCBvdmVybGFwcGluZ0JlaGF2aW9yPVwicm90YXRlXCIgW3JvdGF0aW9uQW5nbGVdPVwiMjcwXCI+PC9keG8tbGFiZWw+XG4gICAgICAgICAgICAgICAgPC9keG8tYXJndW1lbnQtYXhpcz5cbiAgICAgICAgICAgICAgICA8ZHhvLXRvb2x0aXAgW2VuYWJsZWRdPVwidHJ1ZVwiIFtzaGFyZWRdPVwidHJ1ZVwiIFtjdXN0b21pemVUb29sdGlwXT1cImN1c3RvbWl6ZVRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICA8L2R4by10b29sdGlwPlxuICAgICAgICAgICAgICAgIDxkeG8tY29tbW9uLXNlcmllcy1zZXR0aW5ncyBhcmd1bWVudEZpZWxkPVwie3tjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkfX1cIj5cbiAgICAgICAgICAgICAgICA8L2R4by1jb21tb24tc2VyaWVzLXNldHRpbmdzPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgY2hhcnRDb25maWcuY2hhcnRfY29uZmlnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJpdGVtICYmIGl0ZW0uY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktc2VyaWVzIHR5cGU9XCJ7e2l0ZW0udHlwZX19XCIgdmFsdWVGaWVsZD1cInt7aXRlbS52YWx1ZUZpZWxkfX1cIiBheGlzPVwie3tpdGVtLmF4aXN9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIiBjb2xvcj1cInt7aXRlbS5jb2xvcn19XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiaXRlbSAmJiAhaXRlbS5jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgdHlwZT1cInt7aXRlbS50eXBlfX1cIiB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiIGF4aXM9XCJ7e2l0ZW0uYXhpc319XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lPVwie3tpdGVtLm5hbWV9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9keGktc2VyaWVzPlxuICAgICAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkeG8tc2l6ZSBbaGVpZ2h0XT1cImNoYXJ0SGVpZ2h0XCI+XG4gICAgICAgICAgICAgICAgPC9keG8tc2l6ZT5cbiAgICAgICAgICAgICAgICA8ZHhvLWxlZ2VuZCBbdmlzaWJsZV09XCJjaGFydENvbmZpZy5sZWdlbmREaXNwbGF5XCIgdmVydGljYWxBbGlnbm1lbnQ9XCJ7e2NoYXJ0Q29uZmlnLnZlcnRpY2FsQWxpZ25tZW50fX1cIlxuICAgICAgICAgICAgICAgICAgICBob3Jpem9udGFsQWxpZ25tZW50PVwie3tjaGFydENvbmZpZy5ob3Jpem9udGFsQWxpZ25tZW50fX1cIj5cbiAgICAgICAgICAgICAgICA8L2R4by1sZWdlbmQ+XG4gICAgICAgICAgICA8L2R4LWNoYXJ0PlxuICAgICAgICA8L25nLWNvbnRhaW5lcj5cblxuXG5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnZG91Z2hudXQnIHx8IGNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAncGllJ1wiPlxuXG4gICAgICAgICAgICA8ZHgtcGllLWNoYXJ0IGlkPVwicGllXCIgW3R5cGVdPVwiY2hhcnRDb25maWcuY2hhcnRUeXBlXCIgW3RpdGxlXT1cInsgdGV4dDogY2hhcnRDb25maWcuY2FwdGlvbiwgZm9udDogeyBzaXplOiAxNCB9IH1cIlxuICAgICAgICAgICAgICAgIFtkYXRhU291cmNlXT1cImZpbmFsQ2hhcnREYXRhU291cmNlXCIgY2VudGVyVGVtcGxhdGU9XCJjZW50ZXJUZW1wbGF0ZVwiXG4gICAgICAgICAgICAgICAgKG9uUG9pbnRDbGljayk9XCJwb2ludENsaWNrSGFuZGxlcigkZXZlbnQpXCIgW3BhbGV0dGVdPVwiY2hhcnRDb25maWcucGFsZXR0ZVwiPlxuXG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgaXRlbSBvZiBjaGFydENvbmZpZy5jaGFydF9jb25maWdcIj5cbiAgICAgICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cIml0ZW0uY29sb3JcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkeGktc2VyaWVzIGFyZ3VtZW50RmllbGQ9e3tjaGFydENvbmZpZy5hcmd1bWVudEZpZWxkfX0gdmFsdWVGaWVsZD1cInt7aXRlbS52YWx1ZUZpZWxkfX1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU9XCJ7e2l0ZW0ubmFtZX19XCIgY29sb3I9XCJ7e2l0ZW0uY29sb3J9fVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tbGFiZWwgW3Zpc2libGVdPVwiY2hhcnRDb25maWcubGFiZWxEaXNwbGF5XCIgZm9ybWF0PVwiY3VycmVuY3lcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGR4by1jb25uZWN0b3IgW3Zpc2libGVdPVwidHJ1ZVwiPjwvZHhvLWNvbm5lY3Rvcj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2R4by1sYWJlbD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvZHhpLXNlcmllcz5cbiAgICAgICAgICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhaXRlbS5jb2xvclwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGR4aS1zZXJpZXMgYXJndW1lbnRGaWVsZD17e2NoYXJ0Q29uZmlnLmFyZ3VtZW50RmllbGR9fSB2YWx1ZUZpZWxkPVwie3tpdGVtLnZhbHVlRmllbGR9fVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZT1cInt7aXRlbS5uYW1lfX1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZHhvLWxhYmVsIFt2aXNpYmxlXT1cImNoYXJ0Q29uZmlnLmxhYmVsRGlzcGxheVwiIGZvcm1hdD1cImN1cnJlbmN5XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkeG8tY29ubmVjdG9yIFt2aXNpYmxlXT1cInRydWVcIj48L2R4by1jb25uZWN0b3I+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9keG8tbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2R4aS1zZXJpZXM+XG4gICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5zaXplXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkeG8tc2l6ZSBbaGVpZ2h0XT1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPC9keG8tc2l6ZT5cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgICA8ZHhvLWxlZ2VuZCBbdmlzaWJsZV09XCJjaGFydENvbmZpZy5sZWdlbmREaXNwbGF5XCJcbiAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbEFsaWdubWVudD1cInt7Y2hhcnRDb25maWcuaG9yaXpvbnRhbEFsaWdubWVudH19XCJcbiAgICAgICAgICAgICAgICAgICAgdmVydGljYWxBbGlnbm1lbnQ9XCJ7e2NoYXJ0Q29uZmlnLnZlcnRpY2FsQWxpZ25tZW50fX1cIj48L2R4by1sZWdlbmQ+XG4gICAgICAgICAgICAgICAgPCEtLSA8ZHhvLWV4cG9ydCBbZW5hYmxlZF09XCJ0cnVlXCI+PC9keG8tZXhwb3J0PiAtLT5cbiAgICAgICAgICAgICAgICA8ZHhvLXRvb2x0aXAgW2VuYWJsZWRdPVwidHJ1ZVwiIFtjdXN0b21pemVUb29sdGlwXT1cImN1c3RvbWl6ZVRvb2x0aXBcIiBmb3JtYXQ9XCJjdXJyZW5jeVwiPlxuICAgICAgICAgICAgICAgIDwvZHhvLXRvb2x0aXA+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLmNoYXJ0VHlwZSA9PSAnZG91Z2hudXQnXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzdmcgKmR4VGVtcGxhdGU9XCJsZXQgcGllQ2hhcnQgb2YgJ2NlbnRlclRlbXBsYXRlJ1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBjeD1cIjEwMFwiIGN5PVwiMTAwXCIgW2F0dHIucl09XCJwaWVDaGFydC5nZXRJbm5lclJhZGl1cygpIC0gNlwiIGZpbGw9XCJncmF5XCIgb3BhY2l0eT1cIjAuMDAwMVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9jaXJjbGU+XG4gICAgXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGV4dCB0ZXh0LWFuY2hvcj1cIm1pZGRsZVwiIHN0eWxlPVwiZm9udC1zaXplOiAxNXB4XCIgeD1cIjEwMFwiIHk9XCIxMDBcIiBmaWxsPVwiI2VlZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0c3BhbiB4PVwiMTAwXCI+e3sgY2FsY3VsYXRlVG90YWwocGllQ2hhcnQpIH19PC90c3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGRpc3BsYXk6IGlubGluZSAtLT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIDx0c3BhbiB4PVwiMTAwXCIgZHk9XCIyMHB4XCIgc3R5bGU9XCJmb250LXdlaWdodDogNjAwXCI+PC90c3Bhbj4gLS0+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RleHQ+XG4gICAgICAgICAgICAgICAgICAgIDwvc3ZnPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgPC9keC1waWUtY2hhcnQ+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ2Z1bm5lbCdcIj5cbiAgICAgICAgICAgIDxkeC1mdW5uZWwgaWQ9XCJmdW5uZWxcIiBbZGF0YVNvdXJjZV09XCJmaW5hbENoYXJ0RGF0YVNvdXJjZVwiIGFyZ3VtZW50RmllbGQ9XCJhcmd1bWVudFwiIHZhbHVlRmllbGQ9XCJ2YWx1ZVwiXG4gICAgICAgICAgICAgICAgcGFsZXR0ZT1cIlNvZnQgUGFzdGVsXCI+XG4gICAgICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNoYXJ0Q29uZmlnLnNpemVcIj5cbiAgICAgICAgICAgICAgICAgICAgPGR4by1zaXplIFtoZWlnaHRdPVwiY2hhcnRDb25maWcuc2l6ZVwiPlxuICAgICAgICAgICAgICAgICAgICA8L2R4by1zaXplPlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkeG8tZXhwb3J0IFtlbmFibGVkXT1cImZhbHNlXCI+PC9keG8tZXhwb3J0PlxuICAgICAgICAgICAgICAgIDxkeG8tdG9vbHRpcCBbZW5hYmxlZF09XCJ0cnVlXCI+IDwvZHhvLXRvb2x0aXA+XG4gICAgICAgICAgICAgICAgPGR4by1pdGVtPlxuICAgICAgICAgICAgICAgICAgICA8ZHhvLWJvcmRlciBbdmlzaWJsZV09XCJ0cnVlXCI+IDwvZHhvLWJvcmRlcj5cbiAgICAgICAgICAgICAgICA8L2R4by1pdGVtPlxuICAgICAgICAgICAgICAgIDxkeG8tbGFiZWwgW3Zpc2libGVdPVwidHJ1ZVwiIHBvc2l0aW9uPVwiaW5zaWRlXCIgYmFja2dyb3VuZENvbG9yPVwibm9uZVwiXG4gICAgICAgICAgICAgICAgICAgIFtjdXN0b21pemVUZXh0XT1cImN1c3RvbWl6ZVRleHRcIj48L2R4by1sYWJlbD5cbiAgICAgICAgICAgIDwvZHgtZnVubmVsPlxuXG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG4gICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJjaGFydENvbmZpZy5jaGFydFR5cGUgPT0gJ2J1YmJsZSdcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJteC01IG92ZXJmbG93LXgtYXV0b1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nRm9yPVwibGV0IGl0ZW0gb2YgaGVhdENoYXJ0RGF0YVNvdXJjZS5kYXRhU2V0XCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaC0xMCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBtaW4tdy0xMiBtYXgtdy1bMzAlXSBqdXN0aWZ5LWNlbnRlciBmbGV4XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3tpdGVtLmRhdGFzb3VyY2V9fVxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiaW5saW5lLWJsb2NrIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtbm93cmFwIGp1c3RpZnktY2VudGVyIFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBib3ggb2YgaXRlbS5kYXRhc2V0XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC1zaHJpbmstMCBtaW4tdy0xMCBtYXgtdy1bMjAlXSBoLTEwIHRleHQtc20gY3Vyc29yLXBvaW50ZXIgZmxleCBpdGVtcy1jZW50ZXIganVzdGlmeS1jZW50ZXIgdGV4dC1ncmF5LTgwMFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdFRvb2x0aXBdPVwiJ1JlY29yZCBEYXRlOiAnICsgYm94LnJlY29yZERhdGUgKyAnXFxuUmVjaGFyZ2UgQ291bnQ6ICcgKyBib3gudG9vbFRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0VG9vbHRpcENsYXNzPVwiY3VzdG9tLXRvb2x0aXBcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicm91bmRlZC1mdWxsXCIgW25nU3R5bGVdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2JhY2tncm91bmQtY29sb3InOiBib3guaXNIb3ZlcmVkID8gJ3JnYigxMzUsIDE4NCwgMTA2KScgOiBib3guY29sb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnd2lkdGgucHgnOiBib3guc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdob3Zlcic6IGJveC5ob3ZlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWlnaHQucHgnOiBib3guc2l6ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIiAobW91c2VlbnRlcik9XCJib3guaXNIb3ZlcmVkID0gdHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtb3VzZWxlYXZlKT1cImJveC5pc0hvdmVyZWQgPSBmYWxzZVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1ub3dyYXAganVzdGlmeS1jZW50ZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTIgbWF4LXctWzIwJV0gaC1mdWxsIGZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktY2VudGVyXCI+PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0Zvcj1cImxldCBpdGVtIG9mIGhlYXRDaGFydERhdGFTb3VyY2UuYXJndW1lbnRWYWx1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJmbGV4LXNocmluay0wIHctMTAgbWF4LXctWzIwJV0gbWluLWgtMTQgZmxleCB0ZXh0LXNtIGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWNlbnRlciBteS0xXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdTdHlsZV09XCJ7J2hlaWdodCc6ICdhdXRvJ31cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtcm90YXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7aXRlbX19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuXG5cbiAgICA8L2Rpdj5cblxuICAgIDxidXR0b24gKm5nSWY9XCJpc0Z1bGxTY3JlZW5cIiBjbGFzcz1cImNsb3NlLWJ1dHRvblwiIChjbGljayk9XCJ0b2dnbGVGdWxsU2NyZWVuKClcIj5DbG9zZTwvYnV0dG9uPlxuPC9kaXY+Il19
@@ -9037,9 +9037,9 @@ class GammaAdvanceChartComponent {
9037
9037
  this.isFullScreen = false;
9038
9038
  this.onChartPointClick = new EventEmitter();
9039
9039
  this.customizeTooltip = (info) => ({
9040
- html: `<table width=100% height=30 border=0 style=\'font-size: 13px\'>
9041
- <tr><td style=\'text-align: left; color: white\'> ${this.commonService.convertToTitleCase(this.chartConfig.argumentField)} : ${info.argumentText} </td></tr>
9042
- <tr><td style=\'text-align: left; color: white; padding-top: 5px\'> ${info.seriesName} :
9040
+ html: `<table style = width=100% height=30 border=0 style=\'font-size: 13px\'>
9041
+ <tr><td class="text-gray-800 dark:text-gray-200 " style=\'text-align: left\'> ${this.commonService.convertToTitleCase(this.chartConfig.argumentField)} : ${info.argumentText} </td></tr>
9042
+ <tr><td class="text-gray-800 dark:text-gray-200 " style=\'text-align: left; padding-top: 5px\'> ${info.seriesName} :
9043
9043
  ${this.getValue(info.seriesName, info.value)} </td></tr>
9044
9044
  </table>`,
9045
9045
  });