@provoly/hypervisor 2.3.8 → 2.4.0

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.
@@ -743,6 +743,7 @@ export class EventDetailComponent extends SubscriptionnerDirective {
743
743
  event.status === 'IN_PROGRESS';
744
744
  }
745
745
  actionCommented($event) {
746
+ this.modifiedProcedure.next(this.procedure ? [this.procedureModifications, this.procedure] : undefined);
746
747
  this.commented.next($event);
747
748
  }
748
749
  updateComment(event, comment) {
@@ -820,4 +821,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImpor
820
821
  }], cancelModifications: [{
821
822
  type: Input
822
823
  }] } });
823
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvaHlwZXJ2aXNvci9zcmMvbGliL2V2ZW50L2RldGFpbC9ldmVudC1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9oeXBlcnZpc29yL3NyYy9saWIvZXZlbnQvZGV0YWlsL2V2ZW50LWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuRixPQUFPLEVBQ0wseUJBQXlCLEVBTXpCLHdCQUF3QixFQUN6QixNQUFNLG9CQUFvQixDQUFDO0FBRzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0QsT0FBTyxFQUFXLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixLQUFLLEVBRUwsV0FBVyxFQUNYLE9BQU8sRUFDUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFVBQVUsRUFDVixHQUFHLEVBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEQsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFF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QkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQVNFLEtBQUs7c0JBQWIsS0FBSztnQkFFTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBU0csUUFBUTtzQkFBaEIsS0FBSztnQkFDRyxpQkFBaUI7c0JBQXpCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBRTZDLGFBQWE7c0JBQS9ELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRTtnQkFDdkMsbUJBQW1CO3NCQUE1QixNQUFNO2dCQUdnRCxlQUFlO3NCQUFyRSxZQUFZO3VCQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtnQkFJM0MsU0FBUztzQkFBbEIsTUFBTTtnQkFTTSxFQUFFO3NCQUFkLEtBQUs7Z0JBS08sTUFBTTtzQkFBbEIsS0FBSztnQkE0RE8sU0FBUztzQkFBckIsS0FBSztnQkFLTyxtQkFBbUI7c0JBQS9CLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDb21wb25lbnQsXG4gIEVsZW1lbnRSZWYsXG4gIEV2ZW50RW1pdHRlcixcbiAgSW5wdXQsXG4gIE91dHB1dCxcbiAgUXVlcnlMaXN0LFxuICBUZW1wbGF0ZVJlZixcbiAgVmlld0NoaWxkLFxuICBWaWV3Q2hpbGRyZW4sXG4gIFZpZXdDb250YWluZXJSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBIeXBQcm9jZWR1cmUgfSBmcm9tICcuLi8uLi9tb2RlbC9wcm9jZWR1cmUvaHlwLXByb2NlZHVyZS5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSHlwRXZlbnREZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWwvZXZlbnQvaHlwLWV2ZW50LWRldGFpbC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSHlwRXZlbnRDcml0aWNhbGl0eSB9IGZyb20gJy4uLy4uL21vZGVsL2V2ZW50L2h5cC1ldmVudC1jcml0aWNhbGl0eS50eXBlJztcbmltcG9ydCB7XG4gIFByeURpYWxvZ0NvbmZpcm1Db21wb25lbnQsXG4gIFByeURpYWxvZ0NvbmZpcm1EYXRhLFxuICBQcnlEaWFsb2dSZWYsXG4gIFByeURpYWxvZ1NlcnZpY2UsXG4gIFByeUkxOG5TZXJ2aWNlLFxuICBQcnlJY29uQ29tcG9uZW50LFxuICBTdWJzY3JpcHRpb25uZXJEaXJlY3RpdmVcbn0gZnJvbSAnQHByb3ZvbHkvZGFzaGJvYXJkJztcbmltcG9ydCB7RXF1aXBtZW50Rm9yRXZlbnQsIEh5cEVxdWlwbWVudH0gZnJvbSAnLi4vLi4vbW9kZWwvaHlwLWVxdWlwbWVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgRXF1aXBtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3N0b3JlL2VxdWlwbWVudC9lcXVpcG1lbnQuc2VydmljZSc7XG5pbXBvcnQgeyBET01BSU5TIH0gZnJvbSAnLi4vLi4vbW9kZWwvZG9tYWlucy5jb25zdGFudCc7XG5pbXBvcnQgeyBFdmVudEFjdGlvbnMgfSBmcm9tICcuLi8uLi9zdG9yZS9ldmVudC9ldmVudC5hY3Rpb25zJztcbmltcG9ydCB7IFN0b3JlIH0gZnJvbSAnQG5ncngvc3RvcmUnO1xuaW1wb3J0IHsgT3ZlcmxheSwgT3ZlcmxheUNvbmZpZywgT3ZlcmxheVJlZiB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9vdmVybGF5JztcbmltcG9ydCB7IFRlbXBsYXRlUG9ydGFsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3BvcnRhbCc7XG5pbXBvcnQge1xuICBjb21iaW5lTGF0ZXN0LFxuICBkZWJvdW5jZVRpbWUsXG4gIGRlbGF5LCBmb3JrSm9pbiwgbWVyZ2VNYXAsXG4gIE9ic2VydmFibGUsXG4gIHNoYXJlUmVwbGF5LFxuICBTdWJqZWN0LFxuICBzd2l0Y2hNYXAsXG4gIHRha2UsXG4gIHRocm93RXJyb3IsXG4gIHppcFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IHBhZElkIH0gZnJvbSAnLi4vLi4vZ2VuZXJhbC9wYWQtaWQuZnVuY3Rpb24nO1xuaW1wb3J0IGVxdWFsIGZyb20gJ2Zhc3QtZGVlcC1lcXVhbC9lczYnO1xuaW1wb3J0IHsgUHJvY2VkdXJlQXNzb2NpYXRpb25Nb2RhbENvbXBvbmVudCB9IGZyb20gJy4uL3Byb2NlZHVyZS1hc3NvY2lhdGlvbi1tb2RhbC9wcm9jZWR1cmUtYXNzb2NpYXRpb24tbW9kYWwuY29tcG9uZW50JztcbmltcG9ydCB7IFByb2NlZHVyZUFjdGlvbnMgfSBmcm9tICcuLi8uLi9zdG9yZS9wcm9jZWR1cmUvcHJvY2VkdXJlLmFjdGlvbnMnO1xuaW1wb3J0IHsgSHlwRXZlbnRDYXRlZ29yeSwgSHlwRXZlbnRTdWJDYXRlZ29yeSB9IGZyb20gJy4uLy4uL21vZGVsL2V2ZW50L2h5cC1ldmVudC1jYXRlZ29yeS50eXBlJztcbmltcG9ydCB7IEh5cENvbW1lbnRzU2VydmljZSB9IGZyb20gJy4uLy4uL3N0b3JlL2NvbW1lbnRzL2NvbW1lbnRzLnNlcnZpY2UnO1xuaW1wb3J0IHtjYXRjaEVycm9yLCBtYXAsIHN0YXJ0V2l0aH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgSHlwU2VydmljZVRvb2x0aXB9IGZyb20gJy4uLy4uL21vZGVsL2V2ZW50L2h5cC1ldmVudC10b29sdGlwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIdnlFdmVudERldGFpbHNUb29sdGlwQ29tcG9uZW50IH0gZnJvbSAnLi9ldmVudC1kZXRhaWxzLXRvb2x0aXAuY29tcG9uZW50JztcbmltcG9ydCB7IEV2ZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3N0b3JlL2V2ZW50L2V2ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgSHZ5RXZlbnRBZGRFdmVudENvbXBvbmVudCB9IGZyb20gJy4vYWRkLWV2ZW50L2FkZC1ldmVudC5jb21wb25lbnQnO1xuaW1wb3J0IHsgSHlwQWN0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWwvcHJvY2VkdXJlL2h5cC1hY3Rpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IEh5cENvbW1lbnQgfSBmcm9tICcuLi8uLi9tb2RlbC9jb21tZW50LmludGVyZmFjZSc7XG5pbXBvcnQgeyBBY3Rpb25zLCBvZlR5cGUgfSBmcm9tICdAbmdyeC9lZmZlY3RzJztcbmltcG9ydCB7IEV2ZW50U2VsZWN0b3JzIH0gZnJvbSAnLi4vLi4vc3RvcmUvZXZlbnQvZXZlbnQuc2VsZWN0b3JzJztcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUJ1aWxkZXIsIEZvcm1Db250cm9sfSBmcm9tIFwiQGFuZ3VsYXIvZm9ybXNcIjtcbmltcG9ydCB7IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIgfSBmcm9tIFwiQGFuZ3VsYXIvbWF0ZXJpYWwvYXV0b2NvbXBsZXRlXCI7XG5pbXBvcnQge1JlbW92ZUV2ZW50Q29tcG9uZW50fSBmcm9tIFwiLi9yZW1vdmUtZXZlbnQvcmVtb3ZlLWV2ZW50LmNvbXBvbmVudFwiO1xuaW1wb3J0IHtQcm9jZWR1cmVTZXJ2aWNlfSBmcm9tIFwiLi4vLi4vc3RvcmUvcHJvY2VkdXJlL3Byb2NlZHVyZS5zZXJ2aWNlXCI7XG5cbmV4cG9ydCB0eXBlIENoYW5nZVN0YXR1c0NvbnRleHQgPSB7XG4gIGNvbW1lbnQ6IHN0cmluZztcbiAgZXZlbnRzOiBIeXBFdmVudERldGFpbHNbXTtcbiAgc3RhdHVzOiBzdHJpbmc7XG4gIGFsbDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgSHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nIGV4dGVuZHMgSHlwRXZlbnREZXRhaWxzIHtcbiAgaHRtbDogc3RyaW5nO1xuICBkaXNwbGF5TmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgY29uc3QgRVZFTlRfREVUQUlMX0FDQ0VTU19GTiA9IHtcbiAgdmFsdWU6IChldmVudDogSHlwRXZlbnREZXRhaWxzLCBjb21wb25lbnQ6IEV2ZW50RGV0YWlsQ29tcG9uZW50KSA9PiB7XG4gICAgY29uc3QgcmVhZG9ubHkgPVxuICAgICAgY29tcG9uZW50LnJlYWRvbmx5IHx8XG4gICAgICBldmVudC5zdGF0dXMgPT09ICdET05FJyB8fCBldmVudC5zdGF0dXMgPT09ICdBUkNISVZFRCcgfHxcbiAgICAgIChbJ0xJTUlUJywgJ09VVE9GT1JERVInLCAnQU5PTUFMWSddLmluY2x1ZGVzKGV2ZW50LmNhdGVnb3J5KSAmJiBldmVudC5leHRlcm5hbFNvdXJjZVJlZiAhPT0gJ0h5cGVydmlzZXVyJyk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbmFtZTogcmVhZG9ubHksXG4gICAgICBjYXRlZ29yeTogcmVhZG9ubHksXG4gICAgICBzdWJDYXRlZ29yeTogcmVhZG9ubHksXG4gICAgICBjcml0aWNhbGl0eTogcmVhZG9ubHksXG4gICAgICBkZXNjcmlwdGlvbjogcmVhZG9ubHksXG4gICAgICBhZGRyZXNzOiByZWFkb25seSxcbiAgICAgIHNvdXJjZTogdHJ1ZSxcbiAgICAgIGRvbWFpbjogcmVhZG9ubHksXG4gICAgICBlcU5hbWU6IHJlYWRvbmx5LFxuICAgICAgZXFFbnRpdHk6IHJlYWRvbmx5LFxuICAgICAgc3RhcnREYXRlOiByZWFkb25seSxcbiAgICAgIGVuZERhdGU6IHJlYWRvbmx5LFxuICAgICAgcGFyZW50OiBjb21wb25lbnQucmVhZG9ubHkgfHwgZXZlbnQuc3RhdHVzID09PSAnRE9ORScgfHwgZXZlbnQuc3RhdHVzID09PSAnQVJDSElWRUQnXG4gICAgfTtcbiAgfVxufTtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnaHZ5LWV2ZW50LWRldGFpbCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9ldmVudC1kZXRhaWwuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIEV2ZW50RGV0YWlsQ29tcG9uZW50IGV4dGVuZHMgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlIHtcbiAgZXZlbnRGb3JtID0gdGhpcy5mb3JtQnVpbGRlci5ncm91cCh7ZXF1aXBzOiB0aGlzLmZvcm1CdWlsZGVyLmFycmF5KFtdKX0pO1xuICBnZXQgZXF1aXBDb250cm9scygpe1xuICAgIHJldHVybiB0aGlzLmV2ZW50Rm9ybS5nZXQoJ2VxdWlwcycpIGFzIEZvcm1BcnJheTtcbiAgfVxuICBASW5wdXQoKSBwbGFjZXNDaG9pY2VzOiAoe2tleTogc3RyaW5nLCBkaXNwbGF5OiBzdHJpbmd9KVtdID0gW107XG4gIG9wZW5lZDogYm9vbGVhbltdID0gW107XG4gIGNyaXRpY2FsaXRpZXMgPSBIeXBFdmVudENyaXRpY2FsaXR5LnZhbHVlcztcbiAgX2V2ZW50czogSHlwRXZlbnREZXRhaWxzW10gPSBbXTtcbiAgZXZlbnRNb2RpZmljYXRpb25zOiBQYXJ0aWFsPEh5cEV2ZW50RGV0YWlscz5bXSA9IFtdO1xuICBAT3V0cHV0KCkgbW9kaWZpZWRFdmVudHMgPSBuZXcgRXZlbnRFbWl0dGVyPFtQYXJ0aWFsPEh5cEV2ZW50RGV0YWlscz4sIEh5cEV2ZW50RGV0YWlsc11bXT4oKTtcbiAgX3Byb2NlZHVyZT86IEh5cFByb2NlZHVyZTtcbiAgcHJvY2VkdXJlTW9kaWZpY2F0aW9uczogUGFydGlhbDxIeXBQcm9jZWR1cmU+ID0ge307XG4gIEBPdXRwdXQoKSBtb2RpZmllZFByb2NlZHVyZSA9IG5ldyBFdmVudEVtaXR0ZXI8W1BhcnRpYWw8SHlwUHJvY2VkdXJlPiwgSHlwUHJvY2VkdXJlXSB8IHVuZGVmaW5lZD4oKTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IERPTUFJTlMgPSBET01BSU5TLnZhbHVlcztcbiAgQE91dHB1dCgpIGV2ZW50RXJyb3JzID0gbmV3IEV2ZW50RW1pdHRlcjx7IGZpZWxkOiBzdHJpbmc7IGNvZGU6IHN0cmluZyB9W11bXT4oKTtcbiAgQE91dHB1dCgpIGFkZGVkRXZlbnQgPSBuZXcgRXZlbnRFbWl0dGVyPEh5cEV2ZW50RGV0YWlscz4oKTtcbiAgQE91dHB1dCgpIHJlbW92ZWRFdmVudCA9ICBuZXcgRXZlbnRFbWl0dGVyPEh5cEV2ZW50RGV0YWlscz4oKTtcbiAgZXJyb3JzOiB7IGZpZWxkOiBzdHJpbmc7IGNvZGU6IHN0cmluZyB9W11bXSA9IFtdO1xuICBjYW5DbG9zZVNvbWUgPSBmYWxzZTtcbiAgY2hhbmdlU3RhdHVzQ29udGV4dDogQ2hhbmdlU3RhdHVzQ29udGV4dCA9IHtcbiAgICBjb21tZW50OiAnJyxcbiAgICBldmVudHM6IFtdLFxuICAgIHN0YXR1czogJ0RPTkUnLFxuICAgIGFsbDogZmFsc2VcbiAgfTtcbiAgQElucHV0KCkgdGl0bGU/OiBzdHJpbmc7XG5cbiAgQElucHV0KCkgc2V0IGVxdWlwbWVudEZyb21NYXAoXG4gICAgZXF1aXBtZW50RnJvbU1hcDoge2VxdWlwbWVudDogRXF1aXBtZW50Rm9yRXZlbnQgfCBudWxsLCBmYW1pbHk6IHN0cmluZyB8IG51bGx9IHwgbnVsbCkge1xuICAgIGlmKGVxdWlwbWVudEZyb21NYXAgJiYgdGhpcy5lcXVpcENvbnRyb2xzLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmKGVxdWlwbWVudEZyb21NYXAuZXF1aXBtZW50KSB7XG4gICAgICAgIHRoaXMuZXF1aXBDb250cm9scy5hdCgwKS5zZXRWYWx1ZShlcXVpcG1lbnRGcm9tTWFwLmVxdWlwbWVudCk7XG4gICAgICAgIHRoaXMubWFuYWdlRXF1aXBtZW50KDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBASW5wdXQoKSByZWFkb25seTogYm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZG9ubHlQcm9jZWR1cmU6IGJvb2xlYW4gfCBudWxsID0gZmFsc2U7XG4gIEBJbnB1dCgpIGVuYWJsZUVkaXRBY3Rpb25zOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICBASW5wdXQoKSByZWFkT25seUNvbW1lbnQ6IGJvb2xlYW4gfCBudWxsID0gZmFsc2U7XG4gIG92ZXJsYXlSZWY/OiBPdmVybGF5UmVmO1xuICBAVmlld0NoaWxkKCdjb25maXJtRGlhbG9nJywgeyByZWFkOiBUZW1wbGF0ZVJlZiB9KSBjb25maXJtRGlhbG9nITogVGVtcGxhdGVSZWY8YW55PjtcbiAgQE91dHB1dCgpIGNvbWZpcm1EaWFsb2dPcGVuZWQgPSBuZXcgRXZlbnRFbWl0dGVyPENoYW5nZVN0YXR1c0NvbnRleHQ+KCk7XG4gIGVxdWlwbWVudFNlbGVjdFZhbHVlOiAoc3RyaW5nIHwgSHlwRXF1aXBtZW50IHwgdW5kZWZpbmVkKVtdID0gW107XG4gIGVxdWlwbWVudHMkOiBPYnNlcnZhYmxlPEVxdWlwbWVudEZvckV2ZW50W10+W10gPSBbXTtcbiAgQFZpZXdDaGlsZHJlbignZGV0YWlsSG92ZXJJY29uJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRldGFpbEhvdmVySWNvbiE6IFF1ZXJ5TGlzdDxFbGVtZW50UmVmPFByeUljb25Db21wb25lbnQ+PjtcbiAgb25FdmVudFNlYXJjaCQgPSBuZXcgU3ViamVjdDxudW1iZXI+KCk7XG4gIGV2ZW50U2VsZWN0VmFsdWU6IChzdHJpbmcgfCBIeXBFdmVudERldGFpbHMgfCB1bmRlZmluZWQpW10gPSBbXTtcbiAgZXZlbnRzJDogT2JzZXJ2YWJsZTxIeXBFdmVudERldGFpbHNXaXRoTWF0Y2hpbmdbXT47XG4gIEBPdXRwdXQoKSBjb21tZW50ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPFxuICAgIHwgeyBldmVudDogSHlwRXZlbnREZXRhaWxzOyBjb21tZW50czogSHlwQ29tbWVudFtdIH1bXVxuICAgIHwge1xuICAgICAgICBhY3Rpb246IEh5cEFjdGlvbjtcbiAgICAgICAgY29tbWVudHM6IEh5cENvbW1lbnRbXTtcbiAgICAgIH1cbiAgPigpO1xuICBwcm9maWxlOiB7IHN1Yjogc3RyaW5nIHwgdW5kZWZpbmVkOyB1c2VyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfCBudWxsID0gbnVsbDtcblxuICBASW5wdXQoKSBzZXQgbWUobWU6IHsgc3ViOiBzdHJpbmcgfCB1bmRlZmluZWQ7IHVzZXJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQgfSB8IG51bGwpIHtcbiAgICB0aGlzLnByb2ZpbGUgPSBtZTtcbiAgICB0aGlzLnNldENyZWF0b3JGb3JFdmVudHMoKTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBldmVudHMoZXZlbnRzOiBIeXBFdmVudERldGFpbHNbXSkge1xuICAgIHRoaXMuZXF1aXBDb250cm9scy5jbGVhcigpO1xuICAgIHRoaXMuX2V2ZW50cyA9IGV2ZW50cy5maWx0ZXIoKGV2KSA9PiAhIWV2KTtcbiAgICB0aGlzLmV2ZW50TW9kaWZpY2F0aW9ucyA9IG5ldyBBcnJheSh0aGlzLl9ldmVudHMubGVuZ3RoKTtcbiAgICBpZiAodGhpcy5fZXZlbnRzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdGhpcy5vcGVuZWQgPSBbdHJ1ZV07XG4gICAgfVxuICAgIHRoaXMuY2FuQ2xvc2VTb21lID0gdGhpcy5fZXZlbnRzLmZpbHRlcigoZXYpID0+IGV2LnN0YXR1cyAhPT0gJ0RPTkUnICYmIGV2LnN0YXR1cyAhPT0gJ0FSQ0hJVkVEJykubGVuZ3RoID4gMDtcbiAgICB0aGlzLl9ldmVudHMuZm9yRWFjaCgoZXYsIGlkeCkgPT4ge1xuICAgICAgbGV0IGdldEVxdWlwbWVudCA9IHRoaXMuX2V2ZW50c1tpZHhdLmVxdWlwbWVudCBhcyBFcXVpcG1lbnRGb3JFdmVudDtcbiAgICAgIGlmKHRoaXMuX2V2ZW50c1tpZHhdLmFkZHJlc3MgJiYgISFnZXRFcXVpcG1lbnQpe1xuICAgICAgICBnZXRFcXVpcG1lbnQgPSB7Li4uZ2V0RXF1aXBtZW50LCBhZGRyZXNzOiB0aGlzLl9ldmVudHNbaWR4XS5hZGRyZXNzfTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGVxdWlwQ29udHJvbCA9IG5ldyBGb3JtQ29udHJvbDxFcXVpcG1lbnRGb3JFdmVudCB8IHN0cmluZyB8IG51bGw+KGdldEVxdWlwbWVudCk7XG4gICAgICBpZihldi5zdGF0dXMgPT09ICdET05FJyB8fCBldi5zdGF0dXMgPT09ICdBUkNISVZFRCcpIHtcbiAgICAgICAgZXF1aXBDb250cm9sLmRpc2FibGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXF1aXBDb250cm9scy5wdXNoKGVxdWlwQ29udHJvbCk7XG4gICAgICBpZih0eXBlb2YgZ2V0RXF1aXBtZW50ID09PSAnb2JqZWN0JyAmJiAhIWdldEVxdWlwbWVudCl7XG4gICAgICAgIHRoaXMuZ2V0RGF0YUZvclRvb2x0aXAoZ2V0RXF1aXBtZW50IGFzIEh5cEVxdWlwbWVudCwgaWR4KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVxdWlwbWVudFtpZHhdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZHJlc3NEaXNhYmxlZFtpZHhdID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFcXVpcG1lbnRbaWR4XSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFkcmVzc0Rpc2FibGVkW2lkeF0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXF1aXBtZW50U2VsZWN0VmFsdWVbaWR4XSA9IGdldEVxdWlwbWVudDtcbiAgICAgIGlmIChldi5wYXJlbnQgJiYgZXYucGFyZW50LmlkKSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRQYXJlbnRDaGFuZ2UoXG4gICAgICAgICAge1xuICAgICAgICAgICAgLi4uZXYucGFyZW50LFxuICAgICAgICAgICAgZGlzcGxheU5hbWU6IGAke3BhZElkLmZuKGV2LnBhcmVudC5pZCl9IC0gJHtldi5wYXJlbnQubmFtZX1gXG4gICAgICAgICAgfSBhcyB1bmtub3duIGFzIEh5cEV2ZW50RGV0YWlsc1dpdGhNYXRjaGluZyxcbiAgICAgICAgICBpZHhcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIHRoaXMuZXF1aXBDb250cm9scy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleCk9PiB7XG4gICAgICB0aGlzLmVxdWlwbWVudHMkW2luZGV4XSA9IGNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoc3RhcnRXaXRoKGNvbnRyb2wudmFsdWUpLCBkZWJvdW5jZVRpbWUoMjAwKSxcbiAgICAgICAgc3dpdGNoTWFwKGVxdWlwbWVudCA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMudG9vbHRpcFJlZi5kaWFsb2cgJiYgdGhpcy50b29sdGlwUmVmLmluZGV4ID09PSBpbmRleCkge1xuICAgICAgICAgICAgdGhpcy50b29sdGlwUmVmLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgICAgICAgdGhpcy50b29sdGlwUmVmLmRpYWxvZyA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGRvbWFpbiA9IHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XT8uZG9tYWluID8/IHRoaXMuX2V2ZW50c1tpbmRleF0/LmRvbWFpbiA/PyB1bmRlZmluZWQ7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuZXF1aXBtZW50U2VydmljZS5zZWFyY2godHlwZW9mIGVxdWlwbWVudCA9PT0gJ29iamVjdCcgPyBlcXVpcG1lbnQ/Lm5hbWUgOiBlcXVpcG1lbnQsIGRvbWFpbikucGlwZShcbiAgICAgICAgICAgIG1hcCgoZXF1aXBtZW50cykgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gZXF1aXBtZW50cztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKTtcbiAgICAgICAgfSksXG4gICAgICAgIGNhdGNoRXJyb3IoKCkgPT4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ1NlYXJjaCBFcXVpcG1lbnQgcHJvYmxlbScpKSksXG4gICAgICAgIHNoYXJlUmVwbGF5KClcbiAgICAgICk7XG4gICAgfSlcbiAgICB0aGlzLnNldENyZWF0b3JGb3JFdmVudHMoKTtcbiAgICB0aGlzLnNldERpc3RyaWN0Rm9yRXZlbnRzKCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgcHJvY2VkdXJlKHByb2NlZHVyZTogSHlwUHJvY2VkdXJlKSB7XG4gICAgdGhpcy5fcHJvY2VkdXJlID0gcHJvY2VkdXJlO1xuICAgIHRoaXMucHJvY2VkdXJlTW9kaWZpY2F0aW9ucyA9IHt9O1xuICB9XG5cbiAgQElucHV0KCkgc2V0IGNhbmNlbE1vZGlmaWNhdGlvbnMoZXZ0OiBhbnkpIHtcbiAgICB0aGlzLmVxdWlwQ29udHJvbHMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCwgaW5kZXgpPT4ge1xuICAgICAgY29uc3QgaW5pdGlhbEVxdWlwbWVudCA9IHRoaXMuZXF1aXBtZW50U2VsZWN0VmFsdWVbaW5kZXhdO1xuICAgICAgY29udHJvbC5zZXRWYWx1ZShpbml0aWFsRXF1aXBtZW50KTtcbiAgICAgIGlmKHR5cGVvZiBpbml0aWFsRXF1aXBtZW50ID09PSAnb2JqZWN0JyAmJiAhIWluaXRpYWxFcXVpcG1lbnQpIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVxdWlwbWVudFtpbmRleF0gPSB0cnVlO1xuICAgICAgICB0aGlzLmFkcmVzc0Rpc2FibGVkW2luZGV4XSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRXF1aXBtZW50W2luZGV4XSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmFkcmVzc0Rpc2FibGVkW2luZGV4XSA9IGZhbHNlO1xuICAgICAgfVxuICAgIH0pXG4gICAgdGhpcy5ldmVudFNlbGVjdFZhbHVlID0gdGhpcy5ldmVudFNlbGVjdFZhbHVlLm1hcCgoZXZlbnRQYXJlbnQsIGluZGV4KSA9PiB7XG4gICAgICBjb25zdCBpbml0aWFsUGFyZW50ID0gdGhpcy5fZXZlbnRzW2luZGV4XS5wYXJlbnQ7XG4gICAgICBpZiAoaW5pdGlhbFBhcmVudCkge1xuICAgICAgICBjb25zdCByZWdleCA9IHRoaXMuZ2V0Q29tYm9Cb3hSZWdFeHAoaW5pdGlhbFBhcmVudC5uYW1lKTtcbiAgICAgICAgY29uc3QgaHRtbCA9IGAke3BhZElkLmZuKGluaXRpYWxQYXJlbnQuaWQpfSAtICR7aW5pdGlhbFBhcmVudC5uYW1lfWA7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4uaW5pdGlhbFBhcmVudCxcbiAgICAgICAgICBodG1sOiBodG1sLnJlcGxhY2VBbGwocmVnZXgsIChtYXRjaGVkOiBzdHJpbmcsIGNhcHR1cmUxOiBzdHJpbmcpID0+IGA8Yj4ke2NhcHR1cmUxfTwvYj5gKSxcbiAgICAgICAgICBkaXNwbGF5TmFtZTogaHRtbFxuICAgICAgICB9IGFzIEh5cEV2ZW50RGV0YWlsc1dpdGhNYXRjaGluZztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnMgPSBuZXcgQXJyYXkodGhpcy5fZXZlbnRzLmxlbmd0aCk7XG4gICAgdGhpcy5wcm9jZWR1cmVNb2RpZmljYXRpb25zID0ge307XG4gICAgdGhpcy5fb3V0cHV0TW9kaWZpY2F0aW9ucygpO1xuICB9XG5cbiAgc2VsZWN0ZWRFcXVpcG1lbnQgPSBbZmFsc2VdO1xuICBhZHJlc3NEaXNhYmxlZCA9IFtmYWxzZV07XG4gIG9wZW5lZEF1dG9jb21wbGV0ZSA9IFtmYWxzZV07XG4gIHRvb2x0aXBSZWY6IHtkaWFsb2c6IFByeURpYWxvZ1JlZjxIdnlFdmVudERldGFpbHNUb29sdGlwQ29tcG9uZW50PiB8IG51bGwsIGluZGV4OiBudW1iZXJ9ID0ge2RpYWxvZzogbnVsbCwgaW5kZXg6IDB9O1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGVxdWlwbWVudFNlcnZpY2U6IEVxdWlwbWVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBzdG9yZTogU3RvcmUsXG4gICAgcHJpdmF0ZSBvdmVybGF5OiBPdmVybGF5LFxuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICBwdWJsaWMgaTE4blNlcnZpY2U6IFByeUkxOG5TZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJ5RGlhbG9nOiBQcnlEaWFsb2dTZXJ2aWNlLFxuICAgIHByaXZhdGUgY29tbWVudHNTZXJ2aWNlOiBIeXBDb21tZW50c1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGFjdGlvbnMkOiBBY3Rpb25zLFxuICAgIHByaXZhdGUgZm9ybUJ1aWxkZXI6IEZvcm1CdWlsZGVyLFxuICAgIHByaXZhdGUgcHJvY2VkdXJlU2VydmljZTogUHJvY2VkdXJlU2VydmljZVxuICApIHtcbiAgICBzdXBlcigpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5hZGQoXG4gICAgICB0aGlzLmFjdGlvbnMkLnBpcGUob2ZUeXBlKEV2ZW50QWN0aW9ucy5zdGF0dXMpLCBkZWxheSgxMDAwKSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKGFjdGlvbikgPT4ge1xuICAgICAgICAgIGlmIChhY3Rpb24uZXZlbnQgJiYgYWN0aW9uLmV2ZW50LmlkKSB7XG4gICAgICAgICAgICBjb21iaW5lTGF0ZXN0KFxuICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2UuZ2V0KGFjdGlvbi5ldmVudC5pZCksXG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50c1NlcnZpY2UuZ2V0KGFjdGlvbi5ldmVudCEuaWQsICdldmVudHMnKSxcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNlbGVjdChFdmVudFNlbGVjdG9ycy5kZXRhaWxzKVxuICAgICAgICAgICAgICBdXG4gICAgICAgICAgICApLnBpcGUobWFwKChbZXZlbnQsIGNvbW1lbnRzLCBkZXRhaWxzXSk9PiB7XG4gICAgICAgICAgICAgIHRoaXMuY29tbWVudGVkLm5leHQoW3sgZXZlbnQ6IGV2ZW50IGFzIEh5cEV2ZW50RGV0YWlscywgY29tbWVudHM6IGNvbW1lbnRzIGFzIEh5cENvbW1lbnRbXSB9XSk7XG4gICAgICAgICAgICAgIGlmKCEhZGV0YWlscyAmJiAhIWRldGFpbHMucHJvY2VkdXJlICYmICEhZGV0YWlscy5wcm9jZWR1cmUuZXZlbnRzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzID0gZGV0YWlscy5wcm9jZWR1cmUuZXZlbnRzITtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkpLnN1YnNjcmliZSgpO1xuICAgICAgICAgIH0gZWxzZSBpZiAoYWN0aW9uLnByb2NlZHVyZSAmJiBhY3Rpb24udGFyZ2V0U3RhdHVzID09PSAnRE9ORScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmVcbiAgICAgICAgICAgICAgLnNlbGVjdChFdmVudFNlbGVjdG9ycy5kZXRhaWxzKVxuICAgICAgICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAgICAgICAuc3Vic2NyaWJlKChkZXRhaWxzKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGRldGFpbHMucHJvY2VkdXJlICYmIGRldGFpbHMucHJvY2VkdXJlLmV2ZW50cykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5jYW5DbG9zZVNvbWUgPSAhIWRldGFpbHMucHJvY2VkdXJlLmV2ZW50cy5maW5kKChldmVudCkgPT4gZXZlbnQuc3RhdHVzICE9PSAnRE9ORScpO1xuICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmNhbkNsb3NlU29tZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ldmVudHMuZm9yRWFjaCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICBldmVudC5zdGF0dXMgPSAnRE9ORSc7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICk7XG5cbiAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKEV2ZW50QWN0aW9ucy5zZWxlY3QoeyBpZHM6IFtdLCBjdW11bGF0aXZlOiBmYWxzZSB9KSk7XG5cbiAgICB0aGlzLmV2ZW50cyQgPSB0aGlzLm9uRXZlbnRTZWFyY2gkLnBpcGUoc3RhcnRXaXRoKCksIGRlYm91bmNlVGltZSg1MDApKS5waXBlKFxuICAgICAgc3dpdGNoTWFwKChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlYXJjaCA9XG4gICAgICAgICAgdHlwZW9mIHRoaXMuZXZlbnRTZWxlY3RWYWx1ZVtpbmRleF0gPT09ICdzdHJpbmcnICYmICh0aGlzLmV2ZW50U2VsZWN0VmFsdWVbaW5kZXhdIGFzIHN0cmluZykubGVuZ3RoID4gMlxuICAgICAgICAgICAgPyAodGhpcy5ldmVudFNlbGVjdFZhbHVlW2luZGV4XSBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6IC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgdGhpcy5ldmVudFNlbGVjdFZhbHVlW2luZGV4XVxuICAgICAgICAgICAgICA/IHBhZElkLmZuKCh0aGlzLmV2ZW50U2VsZWN0VmFsdWVbaW5kZXhdIGFzIEh5cEV2ZW50RGV0YWlscykuaWQpXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcy5ldmVudFNlcnZpY2Uuc2VhcmNoKHNlYXJjaCwgWyduYW1lJywgJ2lkJ10pLnBpcGUoXG4gICAgICAgICAgbWFwKChldmVudHMpID0+XG4gICAgICAgICAgICBldmVudHMubWFwKChldmVudCkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCByZWdleCA9IHRoaXMuZ2V0Q29tYm9Cb3hSZWdFeHAoc2VhcmNoKTtcbiAgICAgICAgICAgICAgY29uc3QgaHRtbCA9IGAke3BhZElkLmZuKGV2ZW50LmlkKX0gLSAke2V2ZW50Lm5hbWV9YDtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAuLi5ldmVudCxcbiAgICAgICAgICAgICAgICBodG1sOiBodG1sLnJlcGxhY2VBbGwocmVnZXgsIChtYXRjaGVkOiBzdHJpbmcsIGNhcHR1cmUxOiBzdHJpbmcpID0+IGA8Yj4ke2NhcHR1cmUxfTwvYj5gKSxcbiAgICAgICAgICAgICAgICBkaXNwbGF5TmFtZTogaHRtbFxuICAgICAgICAgICAgICB9IGFzIEh5cEV2ZW50RGV0YWlsc1dpdGhNYXRjaGluZztcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfSksXG4gICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdTZWFyY2ggRXF1aXBtZW50IHByb2JsZW0nKSk7XG4gICAgICB9KSxcbiAgICAgIHNoYXJlUmVwbGF5KClcbiAgICApO1xuICB9XG5cbiAgaXNFdmVudE1vZGlmaWVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV2ZW50TW9kaWZpY2F0aW9ucy5zb21lKChtb2RpZiwgaW5kZXgpID0+XG4gICAgICBPYmplY3Qua2V5cyh0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0pLmxlbmd0aCAhPT0gMFxuICAgIClcbiAgfVxuXG4gIHByaXZhdGUgc2V0RGlzdHJpY3RGb3JFdmVudHMoKXtcbiAgICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMubWFwKChldmUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZSxcbiAgICAgICAgZGlzdHJpY3Q6IGV2ZS5kaXN0cmljdCA/IGV2ZS5kaXN0cmljdCA6IGV2ZS5lcXVpcG1lbnQ/LmRpc3RyaWN0ID8gZXZlLmVxdWlwbWVudC5kaXN0cmljdCA6ICcnXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRDcmVhdG9yRm9yRXZlbnRzKCkge1xuICAgIHRoaXMuX2V2ZW50cyA9IHRoaXMuX2V2ZW50cy5tYXAoKGV2ZSkgPT4ge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZXZlLFxuICAgICAgICBjcmVhdG9yOiBldmUuY3JlYXRvclxuICAgICAgICAgID8gZXZlLmNyZWF0b3JcbiAgICAgICAgICA6IGV2ZS5leHRlcm5hbFNvdXJjZVJlZiA9PT0gJ0h5cGVydmlzZXVyJ1xuICAgICAgICAgICAgPyAodGhpcy5wcm9maWxlPy51c2VyTmFtZSBhcyBzdHJpbmcpXG4gICAgICAgICAgICA6ICctLSdcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbWJvQm94UmVnRXhwKHNlYXJjaDogc3RyaW5nIHwgdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIFJlZ0V4cChgKCR7c2VhcmNofSlgID8/ICcoLy0vLS8pJywgJ2dpZCcpO1xuICB9XG5cbiAgZ2V0IG1lKCkge1xuICAgIHJldHVybiB0aGlzLnByb2ZpbGU7XG4gIH1cblxuICBnZXQgZXZlbnRzKCkge1xuICAgIHJldHVybiB0aGlzLl9ldmVudHMubWFwKChldnQsIGlkeCkgPT4gKHsgLi4uZXZ0LCAuLi4odGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaWR4XSA/PyB7fSkgfSkpO1xuICB9XG5cbiAgZ2V0IGNhbkFzc29jaWF0ZVByb2NlZHVyZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRzLmV2ZXJ5KChldnQpID0+IGV2dC5zdGF0dXMgPT09ICdORVcnICYmIGV2dC5pZCAhPT0gLTEpO1xuICB9XG5cbiAgZ2V0IHByb2NlZHVyZSgpOiBIeXBQcm9jZWR1cmUgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLl9wcm9jZWR1cmVcbiAgICAgID8ge1xuICAgICAgICAgIC4uLnRoaXMuX3Byb2NlZHVyZSxcbiAgICAgICAgICAuLi4odGhpcy5wcm9jZWR1cmVNb2RpZmljYXRpb25zID8/IHt9KSxcbiAgICAgICAgICBldmVudHM6IHRoaXMuZXZlbnRzXG4gICAgICAgIH1cbiAgICAgIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGNsb3NlQ29tbWVudCgpOiBzdHJpbmcge1xuICAgIHJldHVybiB0aGlzLnByb2NlZHVyZT8uY2xvc2VDb21tZW50ID8/ICcnO1xuICB9XG5cbiAgdG9nZ2xlKGk6IG51bWJlcikge1xuICAgIHRoaXMub3BlbmVkW2ldID0gIXRoaXMub3BlbmVkW2ldO1xuICAgIGlmICh0aGlzLnRvb2x0aXBSZWYuZGlhbG9nICYmIHRoaXMudG9vbHRpcFJlZi5pbmRleCA9PT0gaSAmJiAhdGhpcy5vcGVuZWRbaV0pIHtcbiAgICAgIHRoaXMudG9vbHRpcFJlZi5kaWFsb2cuY2xvc2UoKTtcbiAgICAgIHRoaXMudG9vbHRpcFJlZi5kaWFsb2cgPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIG1hbmFnZUVxdWlwbWVudChpbmRleDogbnVtYmVyKXtcbiAgICBjb25zdCBnZXRFcXVpcG1lbnQgPSB0aGlzLmVxdWlwQ29udHJvbHMuYXQoaW5kZXgpLnZhbHVlO1xuICAgIGlmICh0eXBlb2YgZ2V0RXF1aXBtZW50ID09PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5zZWxlY3RlZEVxdWlwbWVudFtpbmRleF0gPSB0cnVlO1xuICAgICAgdGhpcy5nZXREYXRhRm9yVG9vbHRpcChnZXRFcXVpcG1lbnQgYXMgSHlwRXF1aXBtZW50LCBpbmRleCk7XG4gICAgICBpZiAoIXRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XSkge1xuICAgICAgICB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5hZGRyZXNzID0gZ2V0RXF1aXBtZW50Py5hZGRyZXNzO1xuICAgICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdLmRpc3RyaWN0ID0gZ2V0RXF1aXBtZW50Py5kaXN0cmljdDtcbiAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5lcXVpcG1lbnQgPSBnZXRFcXVpcG1lbnQgYXMgSHlwRXF1aXBtZW50O1xuICAgICAgdGhpcy5hZHJlc3NEaXNhYmxlZFtpbmRleF0gPSB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNlbGVjdGVkRXF1aXBtZW50W2luZGV4XSA9IGZhbHNlO1xuICAgICAgaWYoIXRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XSl7XG4gICAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XSA9IHt9O1xuICAgICAgfVxuICAgICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdLmFkZHJlc3MgPSAnJztcbiAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5kaXN0cmljdCA9ICcnO1xuICAgICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdLmVxdWlwbWVudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuYWRyZXNzRGlzYWJsZWRbaW5kZXhdID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYodGhpcy5fZXZlbnRzW2luZGV4XS5lcXVpcG1lbnQ/Lm5hbWUgPT09IGdldEVxdWlwbWVudD8ubmFtZSB8fCB0aGlzLl9ldmVudHNbaW5kZXhdLmVxdWlwbWVudCA9PT0gZ2V0RXF1aXBtZW50KXtcbiAgICAgIGlmICghIXRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XSkge1xuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0uZXF1aXBtZW50O1xuICAgICAgICBkZWxldGUgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdLmFkZHJlc3M7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0uZGlzdHJpY3Q7XG4gICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBtb2RpZnlFdmVudChpbmRleDogbnVtYmVyLCBwcm9wOiBzdHJpbmcsICRldmVudDogRXZlbnQgfCBzdHJpbmcpIHtcbiAgICB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0gPSB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0gPz8gKHt9IGFzIFBhcnRpYWw8SHlwRXZlbnREZXRhaWxzPik7XG4gICAgaWYgKHByb3AgPT09ICdjYXRlZ29yeScpIHtcbiAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0uc3ViQ2F0ZWdvcnk7XG4gICAgICBpZiAoJGV2ZW50ID09PSAnQU5PTUFMWScpIHtcbiAgICAgICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdLnN1YkNhdGVnb3J5ID0gJ05PTkUnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChwcm9wID09PSAnZG9tYWluJyAmJiB0aGlzLmVxdWlwQ29udHJvbHMuYXQoaW5kZXgpLnZhbHVlPy5kb21haW4gIT09ICRldmVudCAmJiAhISRldmVudCkge1xuICAgICAgdGhpcy5lcXVpcENvbnRyb2xzLmF0KGluZGV4KS5zZXRWYWx1ZSgnJyk7XG4gICAgICB0aGlzLm1hbmFnZUVxdWlwbWVudChpbmRleCk7XG4gICAgfVxuICAgIGNvbnN0IGlzRGF0ZSA9IHByb3AuaW5kZXhPZignRGF0ZScpID4gLTE7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGNvbnN0IG5ld1ZhbHVlID0gJGV2ZW50IGluc3RhbmNlb2YgRXZlbnQgPyAkZXZlbnQudGFyZ2V0Py52YWx1ZSA6ICRldmVudDtcblxuICAgIGNvbnN0IGNvcnJlY3RlZFZhbHVlID0gIWlzRGF0ZSA/IG5ld1ZhbHVlIDogdGhpcy5jb252ZXJ0RGF0ZShuZXdWYWx1ZSk7XG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIGlmICh0aGlzLl9ldmVudHNbaW5kZXhdW3Byb3BdICE9PSBjb3JyZWN0ZWRWYWx1ZSkge1xuICAgICAgaWYgKCF0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0pIHtcbiAgICAgICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdID0ge307XG4gICAgICB9XG4gICAgICAvLyBAdHMtaWdub3JlXG4gICAgICB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF1bcHJvcF0gPSBjb3JyZWN0ZWRWYWx1ZTtcblxuICAgICAgdGhpcy5fb3V0cHV0TW9kaWZpY2F0aW9ucygpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoISF0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0pIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBkZWxldGUgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdW3Byb3BdO1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX291dHB1dE1vZGlmaWNhdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhY2Nlc3MoZXZlbnQ6IEh5cEV2ZW50RGV0YWlscykge1xuICAgIHJldHVybiBFVkVOVF9ERVRBSUxfQUNDRVNTX0ZOLnZhbHVlKGV2ZW50LCB0aGlzKTtcbiAgfVxuXG4gIF9vdXRwdXRNb2RpZmljYXRpb25zKCkge1xuICAgIHRoaXMudmFsaWRhdGVFdmVudHModGhpcy5ldmVudHMpO1xuICAgIHRoaXMubW9kaWZpZWRFdmVudHMubmV4dCh0aGlzLmV2ZW50cy5tYXAoKGV2LCBpZHgpID0+IFt0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpZHhdLCBldl0pKTtcbiAgICB0aGlzLm1vZGlmaWVkUHJvY2VkdXJlLm5leHQodGhpcy5wcm9jZWR1cmUgPyBbdGhpcy5wcm9jZWR1cmVNb2RpZmljYXRpb25zLCB0aGlzLnByb2NlZHVyZSFdIDogdW5kZWZpbmVkKTtcbiAgfVxuXG4gIHZhbGlkYXRlRXZlbnRzKGV2ZW50czogSHlwRXZlbnREZXRhaWxzW10pIHtcbiAgICB0aGlzLmVycm9ycyA9IFtdO1xuICAgIGV2ZW50cy5mb3JFYWNoKChldmVudCwgaWR4KSA9PiB7XG4gICAgICBjb25zdCBldmVudEVycm9ycyA9IFtdO1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKC9eXFxzKyQvKTtcbiAgICAgIGlmICghZXZlbnQubmFtZSB8fCBldmVudC5uYW1lLmxlbmd0aCA9PT0gMCB8fCByZWdleC50ZXN0KGV2ZW50Lm5hbWUpKSB7XG4gICAgICAgIGV2ZW50RXJyb3JzLnB1c2goeyBmaWVsZDogJ25hbWUnLCBjb2RlOiAncmVxdWlyZWQnIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFldmVudC5jYXRlZ29yeSB8fCBldmVudC5jYXRlZ29yeS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZXZlbnRFcnJvcnMucHVzaCh7IGZpZWxkOiAnY2F0ZWdvcnknLCBjb2RlOiAncmVxdWlyZWQnIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFldmVudC5jcml0aWNhbGl0eSB8fCBldmVudC5jcml0aWNhbGl0eS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgZXZlbnRFcnJvcnMucHVzaCh7IGZpZWxkOiAnY3JpdGljYWxpdHknLCBjb2RlOiAncmVxdWlyZWQnIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFldmVudC5kZXNjcmlwdGlvbiB8fCBldmVudC5kZXNjcmlwdGlvbi5sZW5ndGggPT09IDAgfHwgcmVnZXgudGVzdChldmVudC5kZXNjcmlwdGlvbikpIHtcbiAgICAgICAgZXZlbnRFcnJvcnMucHVzaCh7IGZpZWxkOiAnZGVzY3JpcHRpb24nLCBjb2RlOiAncmVxdWlyZWQnIH0pO1xuICAgICAgfVxuICAgICAgdGhpcy5lcXVpcENvbnRyb2xzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wsIGluZGV4KSA9PiB7XG4gICAgICAgIGlmKCB0eXBlb2YgY29udHJvbC52YWx1ZSA9PT0gJ3N0cmluZycgJiYgY29udHJvbC52YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgZXZlbnRFcnJvcnMucHVzaCh7IGZpZWxkOiAnZXF1aXBtZW50JywgY29kZTogJ25vLWVxdWlwbWVudCcgfSk7XG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICBjb25zdCBwYXJlbnQgPSBldmVudC5wYXJlbnQ7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIGNvbnN0IHBhcmVudE5hbWUgPSBgJHtwYWRJZC5mbihldmVudC5wYXJlbnQ/LmlkID8/ICcnKX0gLSAke2V2ZW50LnBhcmVudD8ubmFtZX1gO1xuICAgICAgICBjb25zdCBzZWxlY3RlZFBhcmVudE5hbWUgPSAodGhpcy5ldmVudFNlbGVjdFZhbHVlW2lkeF0gYXMgSHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nKT8uZGlzcGxheU5hbWVcbiAgICAgICAgICA/ICh0aGlzLmV2ZW50U2VsZWN0VmFsdWVbaWR4XSBhcyBIeXBFdmVudERldGFpbHNXaXRoTWF0Y2hpbmcpLmRpc3BsYXlOYW1lXG4gICAgICAgICAgOiB0aGlzLmV2ZW50U2VsZWN0VmFsdWVbaWR4XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICEhdGhpcy5ldmVudFNlbGVjdFZhbHVlW2lkeF0gJiZcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgcGFyZW50TmFtZSAhPT0gc2VsZWN0ZWRQYXJlbnROYW1lXG4gICAgICAgICkge1xuICAgICAgICAgIGV2ZW50RXJyb3JzLnB1c2goeyBmaWVsZDogJ3BhcmVudCcsIGNvZGU6ICdub3QtZm91bmQnIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09ICdNQU5JRkVTVEFUSU9OJykge1xuICAgICAgICBpZiAoIWV2ZW50LnN0YXJ0RGF0ZSB8fCBldmVudC5zdGFydERhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZXZlbnRFcnJvcnMucHVzaCh7IGZpZWxkOiAnc3RhcnREYXRlJywgY29kZTogJ3JlcXVpcmVkJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWV2ZW50LmVuZERhdGUgfHwgZXZlbnQuZW5kRGF0ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBldmVudEVycm9ycy5wdXNoKHsgZmllbGQ6ICdlbmREYXRlJywgY29kZTogJ3JlcXVpcmVkJyB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoKChldmVudC5zdGFydERhdGUgYXMgc3RyaW5nKT8ubG9jYWxlQ29tcGFyZShldmVudC5lbmREYXRlID8/ICcnKSA/PyAwKSA+IDApIHtcbiAgICAgICAgICBldmVudEVycm9ycy5wdXNoKHsgZmllbGQ6ICdzdGFydERhdGUnLCBjb2RlOiAnYmVmb3JlJyB9KTtcbiAgICAgICAgICBldmVudEVycm9ycy5wdXNoKHsgZmllbGQ6ICdlbmREYXRlJywgY29kZTogJ2FmdGVyJyB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGV2ZW50LnN0YXJ0RGF0ZSAmJiBldmVudC5lbmREYXRlICYmIGV2ZW50LnN0YXJ0RGF0ZS5sb2NhbGVDb21wYXJlKGV2ZW50LmVuZERhdGUpID4gMCkge1xuICAgICAgICAgIGV2ZW50RXJyb3JzLnB1c2goeyBmaWVsZDogJ3N0YXJ0RGF0ZScsIGNvZGU6ICdiZWZvcmUnIH0pO1xuICAgICAgICAgIGV2ZW50RXJyb3JzLnB1c2goeyBmaWVsZDogJ2VuZERhdGUnLCBjb2RlOiAnYWZ0ZXInIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmVycm9ycy5wdXNoKGV2ZW50RXJyb3JzKTtcbiAgICB9KTtcbiAgICB0aGlzLmV2ZW50RXJyb3JzLm5leHQodGhpcy5lcnJvcnMpO1xuICB9XG5cbiAgaGFzRXJyb3IocHJvcDogc3RyaW5nLCBpZHg6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmVycm9yc1tpZHhdPy5maW5kKChlcnIpID0+IGVyci5maWVsZCA9PT0gcHJvcCkgPz8gZmFsc2U7XG4gIH1cblxuICBjYXRlZ29yaWVzKGV2ZW50OiBIeXBFdmVudERldGFpbHMpIHtcbiAgICByZXR1cm4gSHlwRXZlbnRDYXRlZ29yeS52YWx1ZXM7XG4gIH1cblxuICBjaGFuZ2VTdGF0dXMoJGV2ZW50OiBzdHJpbmcsIGV2ZW50OiBIeXBFdmVudERldGFpbHMpIHtcbiAgICB0aGlzLmNoYW5nZVN0YXR1c0NvbnRleHQuZXZlbnRzID0gW2V2ZW50XTtcbiAgICB0aGlzLmNoYW5nZVN0YXR1c0NvbnRleHQuc3RhdHVzID0gJGV2ZW50O1xuICAgIHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5hbGwgPSBmYWxzZTtcbiAgICB0aGlzLnRvZ2dsZUNvbmZpcm0oKTtcbiAgICBpZigkZXZlbnQgPT09ICdET05FJyB8fCAkZXZlbnQgPT09ICdBUkNISVZFRCcpIHtcbiAgICAgIHRoaXMuZXF1aXBDb250cm9scy5jb250cm9scy5mb3JFYWNoKGNvbnRyb2wgPT4ge1xuICAgICAgICBjb250cm9sLmRpc2FibGUoKTtcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY2xvc2VBbGwoKSB7XG4gICAgdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LmFsbCA9IHRydWU7XG4gICAgdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LmV2ZW50cyA9IHRoaXMuZXZlbnRzO1xuICAgIHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5zdGF0dXMgPSAnRE9ORSc7XG4gICAgdGhpcy50b2dnbGVDb25maXJtKCk7XG4gIH1cblxuICBjb25maXJtZWRDbG9zZSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LmFsbCkge1xuICAgICAgaWYgKCF0aGlzLnByb2NlZHVyZSkge1xuICAgICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIEV2ZW50QWN0aW9ucy5zdGF0dXMoe1xuICAgICAgICAgICAgdGFyZ2V0U3RhdHVzOiB0aGlzLmNoYW5nZVN0YXR1c0NvbnRleHQuc3RhdHVzLFxuICAgICAgICAgICAgZXZlbnQ6IHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5ldmVudHNbMF0sXG4gICAgICAgICAgICBwcm9jZWR1cmU6IHRoaXMucHJvY2VkdXJlLFxuICAgICAgICAgICAgY29tbWVudDogdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LmNvbW1lbnRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBFdmVudEFjdGlvbnMuc3RhdHVzKHtcbiAgICAgICAgICAgIHRhcmdldFN0YXR1czogdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LnN0YXR1cyxcbiAgICAgICAgICAgIHByb2NlZHVyZTogdGhpcy5wcm9jZWR1cmUsXG4gICAgICAgICAgICBjb21tZW50OiB0aGlzLmNoYW5nZVN0YXR1c0NvbnRleHQuY29tbWVudFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgIEV2ZW50QWN0aW9ucy5zdGF0dXMoe1xuICAgICAgICAgIHRhcmdldFN0YXR1czogdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LnN0YXR1cyxcbiAgICAgICAgICBldmVudDogdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LmV2ZW50c1swXSxcbiAgICAgICAgICBwcm9jZWR1cmU6IHRoaXMucHJvY2VkdXJlLFxuICAgICAgICAgIGNvbW1lbnQ6IHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5jb21tZW50XG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLnRvZ2dsZUNvbmZpcm0oKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbmZpcm0oKSB7XG4gICAgaWYgKCF0aGlzLm92ZXJsYXlSZWYpIHtcbiAgICAgIHRoaXMuY29tZmlybURpYWxvZ09wZW5lZC5uZXh0KHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dCk7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSB0aGlzLm92ZXJsYXkuY3JlYXRlKFxuICAgICAgICBuZXcgT3ZlcmxheUNvbmZpZyh7XG4gICAgICAgICAgaGFzQmFja2Ryb3A6IHRydWUsXG4gICAgICAgICAgYmFja2Ryb3BDbGFzczogJ2JhY2tkcm9wLWRhcmsnLFxuICAgICAgICAgIHBhbmVsQ2xhc3M6IFsnby1odnktY2xvc2UtY29uZmlybSddXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmJhY2tkcm9wQ2xpY2soKS5zdWJzY3JpYmUoKCkgPT4gdGhpcy50b2dnbGVDb25maXJtKCkpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmF0dGFjaChuZXcgVGVtcGxhdGVQb3J0YWwodGhpcy5jb25maXJtRGlhbG9nLCB0aGlzLnZpZXdDb250YWluZXJSZWYpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vdmVybGF5UmVmLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LmNvbW1lbnQgPSAnJztcbiAgfVxuXG4gIGNvbmZpcm1EaXNhYmxlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LmNvbW1lbnQubGVuZ3RoID09PSAwO1xuICB9XG5cbiAgZ2V0IGNhbGN1bGF0ZWRQcm9ncmVzcygpIHtcbiAgICBpZiAodGhpcy5wcm9jZWR1cmUhLmFjdGlvbnMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGgucm91bmQoXG4gICAgICAodGhpcy5wcm9jZWR1cmUhLmFjdGlvbnMuZmlsdGVyKChhY3Rpb24pID0+IGFjdGlvbi5zdGF0dXMgPT09ICdET05FJyB8fCBhY3Rpb24uc3RhdHVzID09PSAnT1RfQ0xPU0VEJykubGVuZ3RoIC8gdGhpcy5wcm9jZWR1cmUhLmFjdGlvbnMubGVuZ3RoKSAqXG4gICAgICAgIDEwMFxuICAgICk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGFkSWQgPSBwYWRJZDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1YkNhdGVnb3JpZXMgPSBbdW5kZWZpbmVkLCAuLi5IeXBFdmVudFN1YkNhdGVnb3J5LnZhbHVlc1snQU5PTUFMWSddXTtcblxuICBtb2RpZmllZEFjdGlvbnMoJGV2ZW50OiBhbnkpIHtcbiAgICBpZiAoZXF1YWwoJGV2ZW50LCB0aGlzLl9wcm9jZWR1cmUhLmFjdGlvbnMpKSB7XG4gICAgICBkZWxldGUgdGhpcy5wcm9jZWR1cmVNb2RpZmljYXRpb25zLmFjdGlvbnM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucHJvY2VkdXJlTW9kaWZpY2F0aW9ucy5hY3Rpb25zID0gJGV2ZW50O1xuICAgIH1cbiAgICB0aGlzLl9vdXRwdXRNb2RpZmljYXRpb25zKCk7XG4gIH1cblxuICByZWZyZXNoQWN0aW9ucygkZXZlbnQ6IEh5cEFjdGlvbltdKSB7XG4gICAgaWYgKHRoaXMucHJvY2VkdXJlICYmIHRoaXMucHJvY2VkdXJlLmFjdGlvbnMpIHtcbiAgICAgIHRoaXMucHJvY2VkdXJlID0ge1xuICAgICAgICAuLi50aGlzLnByb2NlZHVyZSxcbiAgICAgICAgYWN0aW9uczogJGV2ZW50XG4gICAgICB9O1xuICAgICAgdGhpcy5fb3V0cHV0TW9kaWZpY2F0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIG9wZW5Bc3NvY2lhdGlvbk1vZGFsKHRpdGxlPzogc3RyaW5nLCBwcm9jZWR1cmU/OiBIeXBQcm9jZWR1cmUsIG1vZGlmeT86IGJvb2xlYW4pIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLnByeURpYWxvZy5vcGVuKFByb2NlZHVyZUFzc29jaWF0aW9uTW9kYWxDb21wb25lbnQsIHtcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICdvLWh2eS1hc3NvY2lhdGlvbi1tb2RhbF9fYmFja2Ryb3AnXG4gICAgfSk7XG4gICAgaWYgKCEhcmVmICYmICEhcmVmLmNvbXBvbmVudCkge1xuICAgICAgcmVmLmNvbXBvbmVudC5ldmVudHMgPSB0aGlzLmV2ZW50cztcbiAgICAgIGlmICh0aXRsZSkge1xuICAgICAgICByZWYuY29tcG9uZW50LnRpdGxlID0gdGl0bGU7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2VkdXJlKSB7XG4gICAgICAgIHJlZi5jb21wb25lbnQucHJvY2VkdXJlU2VsZWN0VmFsdWUgPSBwcm9jZWR1cmUubmFtZTtcbiAgICAgICAgcmVmLmNvbXBvbmVudC5wcm9jZWR1cmVEb21haW4gPSBwcm9jZWR1cmUuZG9tYWluO1xuICAgICAgICByZWYuY29tcG9uZW50LnByZXZpb3VzUHJvY2VkdXJlSWQgPSBwcm9jZWR1cmUuaWQ7XG4gICAgICB9XG4gICAgICBpZiAobW9kaWZ5KSB7XG4gICAgICAgIHJlZi5jb21wb25lbnQubW9kaWZ5UHJvY2VkdXJlID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvcGVuRGVsZXRlTW9kYWwoKSB7XG4gICAgY29uc3QgZGF0YTogUHJ5RGlhbG9nQ29uZmlybURhdGEgPSB7XG4gICAgICB0aXRsZTogJ0BjaGguZXZlbnQuZGVsZXRlVCcsXG4gICAgICBtZXNzYWdlOiB0aGlzLmkxOG5TZXJ2aWNlLmluc3RhbnQodGhpcy5ldmVudHMubGVuZ3RoID4gMSA/ICdAY2hoLmV2ZW50LmRlbGV0ZU0rJyA6ICdAY2hoLmV2ZW50LmRlbGV0ZU0xJywge1xuICAgICAgICBuYkV2ZW50czogdGhpcy5ldmVudHMubGVuZ3RoXG4gICAgICB9KSxcbiAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgeyBpZDogMCwgbGFiZWw6ICdAY2hoLmFjdGlvbi5jYW5jZWwnLCBjb2xvcjogJ3NlY29uZGFyeScgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAxLFxuICAgICAgICAgIGxhYmVsOiAnQGNoaC5hY3Rpb24udmFsaWRhdGUnLFxuICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgIFByb2NlZHVyZUFjdGlvbnMuZGVsZXRlSW5zdGFuY2Uoe1xuICAgICAgICAgICAgICBpZDogdGhpcy5wcm9jZWR1cmUhLmlkLFxuICAgICAgICAgICAgICByZXR1cm5Ub0V2ZW50OiB0aGlzLmV2ZW50cy5sZW5ndGggPT09IDEgPyAodGhpcy5ldmVudHNbMF0gYXMgSHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nKS5pZCA6IHVuZGVmaW5lZFxuICAgICAgICAgICAgfSlcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICAgIHRoaXMucHJ5RGlhbG9nLm9wZW4oUHJ5RGlhbG9nQ29uZmlybUNvbXBvbmVudCwge1xuICAgICAgZGF0YSxcbiAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcC1kYXJrJyxcbiAgICAgIHBhbmVsQ2xhc3M6IFsnby1odnktZGVsZXRlLXByb2NlZHVyZSddXG4gICAgfSk7XG4gIH1cblxuICBvcGVuQ2hhbmdlTW9kYWwoKXtcbiAgICB0aGlzLm9wZW5Bc3NvY2lhdGlvbk1vZGFsKCdAaHZ5LmV2ZW50LmxvZy5wcm9jZWR1cmUubW9kaWZ5JywgdGhpcy5wcm9jZWR1cmUsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0RGF0ZShuZXdWYWx1ZT86IHN0cmluZykge1xuICAgIHJldHVybiBuZXdWYWx1ZSA/IG5ldyBEYXRlKG5ld1ZhbHVlKS50b0lTT1N0cmluZygpIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgZGlzcGxheUVxdWlwbWVudChlcXVpcG1lbnQ6IEVxdWlwbWVudEZvckV2ZW50KSB7XG4gICAgaWYoZXF1aXBtZW50ICYmIGVxdWlwbWVudC5uYW1lICYmIGVxdWlwbWVudC5mYW1pbHkpIHtcbiAgICAgIHJldHVybiBlcXVpcG1lbnQubmFtZS5jb25jYXQoXCIgLSBcIiwgdGhpcy5pMThuU2VydmljZS5pbnN0YW50KCdAaHZ5LmV2ZW50LmZhbWlseS4nICsgZXF1aXBtZW50LmZhbWlseSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgZ2V0RXF1aXBDb250cm9sKGluZGV4OiBudW1iZXIpe1xuICAgIHJldHVybiB0aGlzLmVxdWlwQ29udHJvbHMuYXQoaW5kZXgpIGFzIEZvcm1Db250cm9sO1xuICB9XG5cbiAgb3BlbkF1dG9jb21wbGV0ZShpbmRleDogbnVtYmVyKXtcbiAgICB0aGlzLm9wZW5lZEF1dG9jb21wbGV0ZVtpbmRleF0gPSAhdGhpcy5vcGVuZWRBdXRvY29tcGxldGVbaW5kZXhdO1xuICAgIGNvbnN0IGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvdm9seS1ldmVudC1kZXRhaWwtY29udGFpbmVyJyk7XG4gICAgaWYoYil7XG4gICAgICBiLnN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcbiAgICB9XG4gIH1cblxuICBjbG9zZUF1dG9jb21wbGV0ZShpbmRleDogbnVtYmVyKXtcbiAgICB0aGlzLm9wZW5lZEF1dG9jb21wbGV0ZVtpbmRleF0gPSAhdGhpcy5vcGVuZWRBdXRvY29tcGxldGVbaW5kZXhdO1xuICAgIGNvbnN0IGIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncHJvdm9seS1ldmVudC1kZXRhaWwtY29udGFpbmVyJyk7XG4gICAgaWYoYil7XG4gICAgICBiLnN0eWxlLm92ZXJmbG93ID0gXCJhdXRvXCI7XG4gICAgfVxuICAgIHRoaXMubWFuYWdlRXF1aXBtZW50KGluZGV4KTtcbiAgICB0aGlzLl9vdXRwdXRNb2RpZmljYXRpb25zKCk7XG4gIH1cblxuICBvcGVuT3JDbG9zZUF1dG9jb21wbGV0ZShldmVudDogRXZlbnQsIHRyaWdnZXI6IE1hdEF1dG9jb21wbGV0ZVRyaWdnZXIsIGluZGV4OiBudW1iZXIpe1xuICAgIGNvbnN0IGdldEV2ZW50ID0gdGhpcy5ldmVudHMuYXQoaW5kZXgpIGFzIEh5cEV2ZW50RGV0YWlscztcbiAgICBpZihnZXRFdmVudCAmJiAoZ2V0RXZlbnQuc3RhdHVzICE9PSAnRE9ORScgJiYgZ2V0RXZlbnQuc3RhdHVzICE9PSAnQVJDSElWRUQnKSl7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgIHRoaXMub3BlbmVkQXV0b2NvbXBsZXRlW2luZGV4XSA/IHRyaWdnZXIuY2xvc2VQYW5lbCgpIDogdHJpZ2dlci5vcGVuUGFuZWwoKTtcbiAgICB9XG4gIH1cblxuICBlcXVpcG1lbnRFdmVudHNGb3JUb29sdGlwOiB7IGV2ZW50cz86IEh5cEV2ZW50RGV0YWlsc1tdOyBzZXJ2aWNlcz86IEh5cFNlcnZpY2VUb29sdGlwW10gfVtdID0gW107XG5cbiAgcHJpdmF0ZSBnZXREYXRhRm9yVG9vbHRpcCgkZXZlbnQ6IEh5cEVxdWlwbWVudCB8IHVuZGVmaW5lZCwgaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZXF1aXBtZW50RXZlbnRzRm9yVG9vbHRpcFtpbmRleF0gPSB7fTtcbiAgICBpZiAoJGV2ZW50KSB7XG4gICAgICB0aGlzLmVxdWlwbWVudFNlcnZpY2UuZmluZEJ5TmFtZSgkZXZlbnQubmFtZSkuc3Vic2NyaWJlKChlcXVpcCkgPT4ge1xuICAgICAgICB0aGlzLmVxdWlwbWVudEV2ZW50c0ZvclRvb2x0aXBbaW5kZXhdLmV2ZW50cyA9IGVxdWlwLmV2ZW50cy5maWx0ZXIoZXZlbnQgPT4gZXZlbnQuc3RhdHVzICE9PSAnQVJDSElWRUQnKTtcbiAgICAgICAgdGhpcy5lcXVpcG1lbnRFdmVudHNGb3JUb29sdGlwW2luZGV4XS5zZXJ2aWNlcyA9IGVxdWlwLnNlcnZpY2VzO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgdG9nZ2xlRGV0YWlsc1Rvb2x0aXAoaWR4OiBudW1iZXIpIHtcbiAgICAgIC8vb24gZmVybWUgbGEgdG9vbHRpcCBleGlzdGFudGUgc2kgZWxsZSBleGlzdGVcbiAgICAgIGlmKHRoaXMudG9vbHRpcFJlZi5kaWFsb2cgIT09IG51bGwpIHtcbiAgICAgICAgdGhpcy50b29sdGlwUmVmLmRpYWxvZy5jbG9zZSgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSZWYuZGlhbG9nID0gbnVsbDtcbiAgICAgICAgLy8gc2kgaW5kZXggZGlmZsOpcmVudHMsIG9uIG91dnJlIGF1c3NpIHVuZSBub3V2ZWxsZSB0b29sdGlwXG4gICAgICAgIGlmKGlkeCAhPT0gdGhpcy50b29sdGlwUmVmLmluZGV4KSB7XG4gICAgICAgICAgdGhpcy50b29sdGlwUmVmLmRpYWxvZyA9IHRoaXMub3BlblRvb2x0aXAoaWR4KTtcbiAgICAgICAgICB0aGlzLnRvb2x0aXBSZWYuaW5kZXggPSBpZHg7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMudG9vbHRpcFJlZi5kaWFsb2cgPSB0aGlzLm9wZW5Ub29sdGlwKGlkeCk7XG4gICAgICAgIHRoaXMudG9vbHRpcFJlZi5pbmRleCA9IGlkeFxuICAgICAgfVxuICB9XG5cbiAgb3BlblRvb2x0aXAoaW5kZXg6IG51bWJlcikge1xuICAgIGxldCB0b29sdGlwIDogUHJ5RGlhbG9nUmVmPEh2eUV2ZW50RGV0YWlsc1Rvb2x0aXBDb21wb25lbnQ+IHwgbnVsbCA9ICB0aGlzLnByeURpYWxvZy5vcGVuKEh2eUV2ZW50RGV0YWlsc1Rvb2x0aXBDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHRoaXMuZXF1aXBtZW50RXZlbnRzRm9yVG9vbHRpcFtpbmRleF0gPz8geyBldmVudHM6IFtdLCBzZXJ2aWNlczogW10gfSxcbiAgICAgIGluZGV4OiBpbmRleCxcbiAgICAgIG92ZXJsYXlDb25maWc6IHtcbiAgICAgICAgcG9zaXRpb25TdHJhdGVneTogdGhpcy5vdmVybGF5XG4gICAgICAgICAgLnBvc2l0aW9uKClcbiAgICAgICAgICAuZmxleGlibGVDb25uZWN0ZWRUbyh0aGlzLmRldGFpbEhvdmVySWNvbi5nZXQoaW5kZXgpISlcbiAgICAgICAgICAud2l0aFBvc2l0aW9ucyhbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIG9yaWdpblg6ICdlbmQnLFxuICAgICAgICAgICAgICBvcmlnaW5ZOiAnYm90dG9tJyxcbiAgICAgICAgICAgICAgb3ZlcmxheVg6ICdzdGFydCcsXG4gICAgICAgICAgICAgIG92ZXJsYXlZOiAndG9wJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIF0pXG4gICAgICB9XG4gICAgfSk7XG4gICAgdG9vbHRpcC5jbG9zZVZhbHVlLnBpcGUodGFrZSgxKSkuc3Vic2NyaWJlKCh2YWx1ZSkgPT4ge1xuICAgICAgdG9vbHRpcCA9IG51bGw7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRvb2x0aXA7XG4gIH1cblxuICBzZWxlY3RlZFBhcmVudENoYW5nZSgkZXZlbnQ6IHN0cmluZyB8IEh5cEV2ZW50RGV0YWlscywgaW5kZXg6IG51bWJlcikge1xuICAgIHRoaXMuZXZlbnRTZWxlY3RWYWx1ZVtpbmRleF0gPSAkZXZlbnQ7XG4gICAgdGhpcy5vbkV2ZW50U2VhcmNoJC5uZXh0KGluZGV4KTtcbiAgICBpZiAodHlwZW9mICRldmVudCA9PT0gJ29iamVjdCcgfHwgJGV2ZW50ID09PSAnJykge1xuICAgICAgY29uc3QgcGFyZW50Rm9yRXZlbnQgPSAkZXZlbnQgIT09ICcnID8geyBpZDogJGV2ZW50LmlkLCBuYW1lOiAkZXZlbnQubmFtZSB9IDogdW5kZWZpbmVkO1xuICAgICAgaWYgKCFwYXJlbnRGb3JFdmVudCB8fCB0aGlzLl9ldmVudHNbaW5kZXhdLnBhcmVudD8uaWQgIT09IHBhcmVudEZvckV2ZW50LmlkKSB7XG4gICAgICAgIGlmICghdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdKSB7XG4gICAgICAgICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdID0ge307XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdLnBhcmVudCA9IHBhcmVudEZvckV2ZW50O1xuICAgICAgICB0aGlzLl9vdXRwdXRNb2RpZmljYXRpb25zKCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoISF0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0pIHtcbiAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5wYXJlbnQ7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9vdXRwdXRNb2RpZmljYXRpb25zKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3V0cHV0TW9kaWZpY2F0aW9ucygpO1xuICAgIH1cbiAgfVxuXG4gIGFkZE9uZUV2ZW50KCkge1xuICAgIGNvbnN0IHJlZiA9IHRoaXMucHJ5RGlhbG9nLm9wZW4oSHZ5RXZlbnRBZGRFdmVudENvbXBvbmVudCwge1xuICAgICAgZGF0YTogeyBwcm9jZWR1cmU6IHRoaXMucHJvY2VkdXJlIH0sXG4gICAgICBiYWNrZHJvcENsYXNzOiAnYmFja2Ryb3AtZGFyaydcbiAgICB9KTtcblxuICAgIHJlZi5jbG9zZVZhbHVlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHN3aXRjaCAodmFsdWUudmFsdWUpIHtcbiAgICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgICB0aGlzLmFkZGVkRXZlbnQubmV4dCh2YWx1ZS5ldmVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWYuY2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHJlbW92ZU9uZUV2ZW50KGV2ZW50OiBIeXBFdmVudERldGFpbHMpe1xuICAgIGNvbnN0IHJlZiA9IHRoaXMucHJ5RGlhbG9nLm9wZW4oUmVtb3ZlRXZlbnRDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHtldmVudH0sXG4gICAgICBiYWNrZHJvcENsYXNzOiAnYmFja2Ryb3AtZGFyaydcbiAgICB9KTtcblxuICAgIHJlZi5jbG9zZVZhbHVlLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHN3aXRjaCAodmFsdWUudmFsdWUpIHtcbiAgICAgICAgY2FzZSAncmVtb3ZlJzpcbiAgICAgICAgICB0aGlzLnJlbW92ZWRFdmVudC5uZXh0KHZhbHVlLmV2ZW50KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHJlZi5jbG9zZSgpO1xuICAgIH0pO1xuICB9XG5cbiAgc2hvd1JlbW92ZUV2ZUJ1dHRvbihldmVudDogSHlwRXZlbnREZXRhaWxzKSB7XG4gICAgcmV0dXJuIHRoaXMuZXZlbnRzLmxlbmd0aCA+IDEgJiZcbiAgICAgIHRoaXMuZXZlbnRzLmZpbHRlcigoZXZlbnQ6IEh5cEV2ZW50RGV0YWlscykgPT4gZXZlbnQuc3RhdHVzID09PSAnSU5fUFJPR1JFU1MnKS5sZW5ndGggPj0gMSAmJlxuICAgICAgZXZlbnQuc3RhdHVzID09PSAnSU5fUFJPR1JFU1MnO1xuICB9XG5cbiAgYWN0aW9uQ29tbWVudGVkKCRldmVudDogeyBhY3Rpb246IEh5cEFjdGlvbjsgY29tbWVudHM6IEh5cENvbW1lbnRbXSB9KSB7XG4gICAgdGhpcy5jb21tZW50ZWQubmV4dCgkZXZlbnQpO1xuICB9XG5cbiAgdXBkYXRlQ29tbWVudChldmVudDogSHlwRXZlbnREZXRhaWxzLCBjb21tZW50OiB7IGlkOiBzdHJpbmc7IG1lc3NhZ2U6IHN0cmluZyB9KSB7XG4gICAgdGhpcy5jb21tZW50c1NlcnZpY2Uuc2F2ZShldmVudC5pZCwgJ2V2ZW50cycsIGNvbW1lbnQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBsZXQgZXZlbnRzQW5kQ29tbWVudHM6IHsgZXZlbnQ6IEh5cEV2ZW50RGV0YWlsczsgY29tbWVudHM6IEh5cENvbW1lbnRbXSB9W10gPSBbXTtcbiAgICAgIGxldCBjb21tZW50cyQ6IE9ic2VydmFibGU8SHlwQ29tbWVudFtdPltdID0gW107XG4gICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgdGhpcy5fZXZlbnRzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICBjb21tZW50cyQucHVzaCh0aGlzLmNvbW1lbnRzU2VydmljZS5nZXQodGhpcy5fZXZlbnRzW2luZGV4XS5pZCwgJ2V2ZW50cycpKTtcbiAgICAgIH1cbiAgICAgIHppcChjb21tZW50cyQpXG4gICAgICAgIC5waXBlKHRha2UoMSkpXG4gICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgIG5leHQ6IChjb21tZW50c0FycmF5KSA9PiB7XG4gICAgICAgICAgICBjb21tZW50c0FycmF5LmZvckVhY2goKGNvbW1lbnRzLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICBldmVudHNBbmRDb21tZW50cy5wdXNoKHsgZXZlbnQ6IHRoaXMuX2V2ZW50c1tpbmRleF0sIGNvbW1lbnRzOiBjb21tZW50cyBhcyBIeXBDb21tZW50W10gfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmNvbW1lbnRlZC5uZXh0KGV2ZW50c0FuZENvbW1lbnRzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB0aGlzLnRvb2x0aXBSZWYuZGlhbG9nPy5jbG9zZSgpO1xuICAgIHRoaXMudG9vbHRpcFJlZi5kaWFsb2cgPSBudWxsO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbFwiPlxuICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9faGVhZGVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2hlYWRlcl9fc3BsaXRcIj5cbiAgICAgIDxoMT57eyB0aXRsZSA/PyAnQGh2eS5ldmVudC5kZXRhaWwnIHwgaTE4biB9fSB7e2V2ZW50cy5sZW5ndGggPiAxID8gJygnK2V2ZW50cy5sZW5ndGgrJyknOiAnJ319PC9oMT5cbiAgICAgIEBpZiAocHJvY2VkdXJlICYmIGNhbkNsb3NlU29tZSkge1xuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ1dHRvblwiIFtkaXNhYmxlZF09XCJyZWFkb25seVwiIChjbGljayk9XCJhZGRPbmVFdmVudCgpXCI+XG4gICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJhZGRcIiBbd2lkdGhdPVwiMThcIiBbaGVpZ2h0XT1cIjE4XCI+PC9wcnktaWNvbj5cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgICBAaWYgKGV2ZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIEBpZiAoY2FuQ2xvc2VTb21lICYmICFyZWFkb25seSkge1xuICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5IC1maXgtcmlnaHRcIiBbZGlzYWJsZWRdPVwiIWNhbkNsb3NlU29tZSB8fCAoISFwcm9jZWR1cmUgJiYgY2FsY3VsYXRlZFByb2dyZXNzICE9PSAxMDApXCIgKGNsaWNrKT1cImNsb3NlQWxsKClcIj5cbiAgICAgICAgICAgIHt7IChjYW5DbG9zZVNvbWUgPyAnQGh2eS5ldmVudC5sb2cuZXZlbnQuY2xvc2UnIDogJ0BodnkuZXZlbnQubG9nLmV2ZW50LmNsb3NlZCcpIHwgaTE4biB9fVxuICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICB9XG4gICAgICAgIEBpZiAoIWNhbkNsb3NlU29tZSAmJiBjbG9zZUNvbW1lbnQgJiYgY2xvc2VDb21tZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiYS10b29sdGlwXCIgW2F0dHIuZGF0YS10b29sdGlwXT1cImNsb3NlQ29tbWVudFwiIGRhdGEtdG9vbHRpcC1wb3NpdGlvbj1cInJpZ2h0XCI+XG4gICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cImlcIiBbaGVpZ2h0XT1cIjE4XCIgW3dpZHRoXT1cIjE4XCI+aTwvcHJ5LWljb24+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9faGVhZGVyX19zcGxpdCBldmVudC1kZXRhaWwtYnV0dG9ucy1sZWZ0XCI+XG4gICAgICBAaWYgKHByb2NlZHVyZSAmJiAhcmVhZG9ubHkpIHtcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwib3BlbkNoYW5nZU1vZGFsKClcIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlQcm9jZWR1cmVcIj5cbiAgICAgICAgICB7eyAnQGh2eS5ldmVudC5sb2cucHJvY2VkdXJlLm1vZGlmeScgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiIChjbGljayk9XCJvcGVuRGVsZXRlTW9kYWwoKVwiIFtkaXNhYmxlZF09XCJyZWFkb25seVByb2NlZHVyZVwiPlxuICAgICAgICAgIHt7ICdAaHZ5LmV2ZW50LmxvZy5wcm9jZWR1cmUuZGVsZXRlJyB8IGkxOG4gfX1cbiAgICAgICAgPC9idXR0b24+XG4gICAgICB9XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fY29udGFpbmVyXCIgaWQ9XCJwcm92b2x5LWV2ZW50LWRldGFpbC1jb250YWluZXJcIj5cbiAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fY29udGFpbmVyX19zY3JvbGxhYmxlXCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fZXZlbnRzXCI+XG4gICAgICAgIEBmb3IgKGV2ZW50IG9mIGV2ZW50czsgdHJhY2sgZXZlbnQuaWQ7IGxldCBpZHggPSAkaW5kZXgpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fZXZlbnRzX19ldmVudFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2V2ZW50c19fZXZlbnRfX2hlYWRlclwiPlxuICAgICAgICAgICAgICA8cHJ5LWljb25cbiAgICAgICAgICAgICAgICBpY29uU3ZnPVwiYXJyb3dfZG93bl9yb3VuZGVkXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MuLXJvdGF0ZWRdPVwib3BlbmVkW2lkeF1cIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwiLWhhbmRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGUoaWR4KVwiXG4gICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEwXCJcbiAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjEwXCJcbiAgICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgIDxodnktaWNvbi1kaXNwbGF5IFtldmVudF09XCJldmVudFwiPjwvaHZ5LWljb24tZGlzcGxheT5cbiAgICAgICAgICAgICAgPGgyPnt7IGV2ZW50Lm5hbWUgfX08L2gyPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fZXZlbnRzX19ldmVudF9faGVhZGVyX19jb21tZW50XCI+XG4gICAgICAgICAgICAgICAgQGlmIChldmVudC5jb21tZW50Q291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICA8c3Bhbj57e1xuICAgICAgICAgICAgICAgICAgICAoZXZlbnQuY29tbWVudENvdW50ID4gMSA/ICdAaHZ5LmV2ZW50LmNvbW1lbnQuaGVhZHMnIDogJ0BodnkuZXZlbnQuY29tbWVudC5oZWFkJylcbiAgICAgICAgICAgICAgICAgICAgICB8IGkxOG46IHsgbmI6IGV2ZW50LmNvbW1lbnRDb3VudCB9XG4gICAgICAgICAgICAgICAgICB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9faGVhZGVyX19zcGxpdCBkZXRhaWwtcmVtb3ZlLWV2ZVwiPlxuICAgICAgICAgICAgICAgIEBpZiAoc2hvd1JlbW92ZUV2ZUJ1dHRvbihldmVudCkpIHtcbiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhZGQtYnV0dG9uXCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5XCIgKGNsaWNrKT1cInJlbW92ZU9uZUV2ZW50KGV2ZW50KVwiPlxuICAgICAgICAgICAgICAgICAgICA8cHJ5LWljb24gaWNvblN2Zz1cInJlbW92ZVwiIFt3aWR0aF09XCIxOFwiIFtoZWlnaHRdPVwiMThcIj48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGh2eS1zdGF0dXMtZGlzcGxheVxuICAgICAgICAgICAgICAgIFtpdGVtXT1cImV2ZW50XCJcbiAgICAgICAgICAgICAgICBbbW9kaWZpYWJsZV09XCIoISFwcm9jZWR1cmUgJiYgY2FsY3VsYXRlZFByb2dyZXNzID09PSAxMDApIHx8ICFwcm9jZWR1cmVcIlxuICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJyZWFkb25seVwiXG4gICAgICAgICAgICAgICAgKG1vZGlmaWVkKT1cImNoYW5nZVN0YXR1cygkZXZlbnQsIGV2ZW50KVwiXG4gICAgICAgICAgICAgID48L2h2eS1zdGF0dXMtZGlzcGxheT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2V2ZW50c19fZXZlbnRfX2NvbnRlbnRcIj5cbiAgICAgICAgICAgICAgQGlmICghb3BlbmVkW2lkeF0pIHtcbiAgICAgICAgICAgICAgICA8ZGl2PlxuICAgICAgICAgICAgICAgICAge3sgJ0BodnkuZXZlbnQubG9nLmV2ZW50LmNhdGVnb3J5JyB8IGkxOG4gfX0gOiB7eyAnQGh2eS5ldmVudC5jYXRlZ29yeS4nICsgZXZlbnQuY2F0ZWdvcnkgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdj57eyAnQGh2eS5ldmVudC5sb2cuZXZlbnQuZGVzY3JpcHRpb24nIHwgaTE4biB9fSA6IHt7IGV2ZW50LmRlc2NyaXB0aW9uIH19PC9kaXY+XG4gICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgIEBpZiAoYWNjZXNzKGV2ZW50KTsgYXMgYWNjZXNzVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudHMtZGV0YWlsX19ldmVudHNfX2V2ZW50X19jb250ZW50X19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGgzPnt7ICdAaHZ5LmV2ZW50LmxvZy5ldmVudC5kZXRhaWwnIHwgaTE4biB9fTwvaDM+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj57eyAnQGh2eS5ldmVudC5sb2cuZXZlbnQubWFuZGF0b3J5JyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDx0YWJsZT5cbiAgICAgICAgICAgICAgICAgICAgPHRib2R5PlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1pZGVudGlmaWFudC0tPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZXZlbnQuaWQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5sb2cuZXZlbnQuaWQnIHwgaTE4biB9fTxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiA6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCIgW3ZhbHVlXT1cInBhZElkLmZuKGV2ZW50LmlkKVwiIFtyZWFkb25seV09XCJ0cnVlXCIgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tbm9tLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50LmxvZy5ldmVudC5uYW1lJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLi1lcnJvcl09XCJoYXNFcnJvcignbmFtZScsIGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJldmVudC5uYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm1vZGlmeUV2ZW50KGlkeCwgJ25hbWUnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiYWNjZXNzVmFsdWUubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heExlbmd0aF09XCI1MFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tY2F0ZWdvcmllLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50LmxvZy5ldmVudC5jYXRlZ29yeScgfCBpMThuIH19PHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImV2ZW50LmNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiY2F0ZWdvcmllcyhldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZXJyb3JdPVwiaGFzRXJyb3IoJ2NhdGVnb3J5JywgaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibW9kaWZ5RXZlbnQoaWR4LCAnY2F0ZWdvcnknLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQGh2eS5ldmVudC5jYXRlZ29yeS5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY2Nlc3NWYWx1ZS5jYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tc291cyBjYXRlZ29yaWUtLT5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGV2ZW50LmNhdGVnb3J5ID09PSAnQU5PTUFMWScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50LnN1YkNhdGVnb3J5Lm5hbWUnIHwgaTE4biB9fTxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiA6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJldmVudC5zdWJDYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwic3ViQ2F0ZWdvcmllc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdzdWJDYXRlZ29yeScsIGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibW9kaWZ5RXZlbnQoaWR4LCAnc3ViQ2F0ZWdvcnknLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5QcmVmaXg9XCJAaHZ5LmV2ZW50LnN1YkNhdGVnb3J5LlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWNjZXNzVmFsdWUuc3ViQ2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWNyaXRpY2l0ZS0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5jcml0aWNhbGl0eS5uYW1lJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZXZlbnQuY3JpdGljYWxpdHlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJjcml0aWNhbGl0aWVzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdjcml0aWNhbGl0eScsIGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5QcmVmaXg9XCJAaHZ5LmV2ZW50LmNyaXRpY2FsaXR5LlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjY2Vzc1ZhbHVlLmNyaXRpY2FsaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJtb2RpZnlFdmVudChpZHgsICdjcml0aWNhbGl0eScsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLW1ldGllci0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5kb21haW4ubmFtZScgfCBpMThuIH19IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJET01BSU5TXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJldmVudC5kb21haW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5QcmVmaXg9XCJAaHZ5LmV2ZW50LmRvbWFpbi5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZXJyb3JdPVwiaGFzRXJyb3IoJ2RvbWFpbicsIGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm1vZGlmeUV2ZW50KGlkeCwgJ2RvbWFpbicsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY2Nlc3NWYWx1ZS5kb21haW5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWVxdWlwZW1lbnQtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQuZXF1aXBtZW50JyB8IGkxOG4gfX0gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9XCJ0ZC1hdXRvY29tcGxldGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC1hdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAaHZ5LmV2ZW50LmVxdWlwbWVudFBsYWNlaG9sZGVyJyB8IGkxOG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW21hdEF1dG9jb21wbGV0ZV09XCJhdXRvXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJnZXRFcXVpcENvbnRyb2woaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCJ7J2VxdWlwbWVudC1kaXNhYmxlZCc6IGV2ZW50LnN0YXR1cyA9PT0gJ0RPTkUnIHx8IGV2ZW50LnN0YXR1cyA9PT0gJ0FSQ0hJVkVEJ31cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI3RyaWdnZXI9XCJtYXRBdXRvY29tcGxldGVUcmlnZ2VyXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZXJyb3JdPVwiaGFzRXJyb3IoJ2VxdWlwbWVudCcsIGlkeClcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxtYXQtYXV0b2NvbXBsZXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgI2F1dG89XCJtYXRBdXRvY29tcGxldGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNwbGF5V2l0aF09XCJkaXNwbGF5RXF1aXBtZW50LmJpbmQodGhpcylcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcGVuZWQpPVwib3BlbkF1dG9jb21wbGV0ZShpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xvc2VkKT1cImNsb3NlQXV0b2NvbXBsZXRlKGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoZXF1aXBtZW50IG9mIGVxdWlwbWVudHMkW2lkeF0gfCBhc3luYzsgdHJhY2sgZXF1aXBtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZXF1aXBtZW50XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7ZXF1aXBtZW50Lm5hbWV9fSAtIHt7J0BodnkuZXZlbnQuZmFtaWx5LicgKyBlcXVpcG1lbnQuZmFtaWx5IHwgaTE4bn19XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L21hdC1hdXRvY29tcGxldGU+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLXByeS1zZWxlY3RfX3RvZ2dsZSBhdXRvY29tcGxldGUtY2hldnJvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2ljb25TdmddPVwib3BlbmVkQXV0b2NvbXBsZXRlW2lkeF0/ICdjaGV2cm9uX3RvcCcgOiAnY2hldnJvbl9ib3R0b20nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbd2lkdGhdPVwiMTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJvcGVuT3JDbG9zZUF1dG9jb21wbGV0ZSgkZXZlbnQsIHRyaWdnZXIsIGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChzZWxlY3RlZEVxdWlwbWVudFtpZHhdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uU3ZnPVwiaVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIi1oYW5kIGFuY2hvci10b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ0NsYXNzXT1cIidhbmNob3ItdG9vbHRpcC0nKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3N0eWxlLmFuY2hvci1uYW1lXT1cIictLW15LWFuY2hvcicgKyBpZHhcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgI2RldGFpbEhvdmVySWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInRvZ2dsZURldGFpbHNUb29sdGlwKGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtoZWlnaHRdPVwiMThcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWVudGl0ZS0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5lcXVpcG1lbnRFbnRpdHknIHwgaTE4biB9fSA6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdlcXVpcG1lbnQnLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnQuZXF1aXBtZW50Py5lbnRpdHkgPyAnQGh2eS5ldmVudC5lbnRpdHkuJyArIGV2ZW50LmVxdWlwbWVudD8uZW50aXR5IDogJycpIHwgaTE4blxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1hZHJlc3NlLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50LmxvZy5ldmVudC5hZGRyZXNzJyB8IGkxOG4gfX0gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImV2ZW50LmFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdhZGRyZXNzJywgaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImFjY2Vzc1ZhbHVlLmFkZHJlc3NcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm1vZGlmeUV2ZW50KGlkeCwgJ2FkZHJlc3MnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbWF4TGVuZ3RoXT1cIjI1NlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFkcmVzc0Rpc2FibGVkW2lkeF0gfHwgZXZlbnQuc3RhdHVzID09PSAnRE9ORSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC90ZXh0YXJlYT5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS12aWxsZS0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5kaXN0cmljdCcgfCBpMThuIH19IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJwbGFjZXNDaG9pY2VzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJldmVudC5kaXN0cmljdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2JpbmRWYWx1ZV09XCIna2V5J1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwiZGlzcGxheVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBodnkuZXZlbnQucGxhY2VzLlwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibW9kaWZ5RXZlbnQoaWR4LCAnZGlzdHJpY3QnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWRyZXNzRGlzYWJsZWRbaWR4XSB8fCBldmVudC5zdGF0dXMgPT09ICdET05FJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tZXZlbmVtZW50IHBhcmVudC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5wYXJlbnRFdmVudC5uYW1lJyB8IGkxOG4gfX0gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktc2VsZWN0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImV2ZW50cyQgfCBhc3luY1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluZExhYmVsPVwiZGlzcGxheU5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImV2ZW50U2VsZWN0VmFsdWVbaWR4XVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwic2VsZWN0ZWRQYXJlbnRDaGFuZ2UoJGV2ZW50LCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbYXV0b2NvbXBsZXRlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtleHRlcm5hbEF1dG9jb21wbGV0ZVNlcnZpY2VdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3BsYWNlaG9sZGVyXT1cIidAaHZ5LmV2ZW50LnBhcmVudEV2ZW50LnBsYWNlaG9sZGVyJyB8IGkxOG5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkPVwicGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdGVtcGxhdGVdPVwidGVtcGxhdGVQYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY2Nlc3NWYWx1ZS5wYXJlbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZXJyb3JdPVwiaGFzRXJyb3IoJ3BhcmVudCcsIGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fZXZlbnRzX19ldmVudF9fY29udGVudF9fZXF1aXBtZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICN0ZW1wbGF0ZVBhcmVudCBsZXQtaXRlbT1cIml0ZW1cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidS1kaXNwbGF5LWZsZXggLWNvbHVtblwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW2lubmVySFRNTF09XCJpdGVtLmh0bWxcIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tZGVzY3JpcHRpb24tLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQubG9nLmV2ZW50LmRlc2NyaXB0aW9uJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZXh0YXJlYVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImV2ZW50LmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLi1lcnJvcl09XCJoYXNFcnJvcignZGVzY3JpcHRpb24nLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiYWNjZXNzVmFsdWUuZGVzY3JpcHRpb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm1vZGlmeUV2ZW50KGlkeCwgJ2Rlc2NyaXB0aW9uJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heExlbmd0aF09XCIxMDI0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tZGF0ZSBkZWJ1dC0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAge3sgJ0BodnkuZXZlbnQuc3RhcnREYXRlJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChldmVudC5jYXRlZ29yeSA9PT0gJ01BTklGRVNUQVRJT04nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImV2ZW50LnN0YXJ0RGF0ZSB8IGZvckRhdGVUaW1lTG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZXJyb3JdPVwiaGFzRXJyb3IoJ3N0YXJ0RGF0ZScsIGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJhY2Nlc3NWYWx1ZS5zdGFydERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibW9kaWZ5RXZlbnQoaWR4LCAnc3RhcnREYXRlJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tZGF0ZSBmaW4tLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdAaHZ5LmV2ZW50LmVuZERhdGUnIHwgaTE4biB9fVxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGV2ZW50LmNhdGVnb3J5ID09PSAnTUFOSUZFU1RBVElPTicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZXZlbnQuZW5kRGF0ZSB8IGZvckRhdGVUaW1lTG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZXJyb3JdPVwiaGFzRXJyb3IoJ2VuZERhdGUnLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiYWNjZXNzVmFsdWUuZW5kRGF0ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJtb2RpZnlFdmVudChpZHgsICdlbmREYXRlJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoaGFzRXJyb3IoJ2VuZERhdGUnLCBpZHgpICYmIGV2ZW50LmVuZERhdGUgJiYgZXZlbnQuc3RhcnREYXRlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJhLWZvcm0tZmllbGQgLWVycm9yXCI+e3sgJ0BodnkuZXZlbnQuZXJyb3JEYXRlJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1zb3VyY2UtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQuc291cmNlJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImV2ZW50LmV4dGVybmFsU291cmNlUmVmID8/ICgnQGh2eS5ldmVudC5oeXBlcnZpc29yJyB8IGkxOG4pXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdzb3VyY2UnLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiYWNjZXNzVmFsdWUuc291cmNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm1vZGlmeUV2ZW50KGlkeCwgJ3NvdXJjZScsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLXJlZsOpcmVuY2UgZXh0ZXJuZS0tPlxuICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZXZlbnQuZXh0ZXJuYWxTb3VyY2VSZWYgIT09ICdIeXBlcnZpc2V1cicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50LmV4dGVybmFsSWQnIHwgaTE4biB9fTxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiA6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImV2ZW50LmV4dGVybmFsSWQgPz8gJy0nXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1jcmVhdGV1ci0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5jcmVhdG9yJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCIgW3ZhbHVlXT1cImV2ZW50LmNyZWF0b3JcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tZGF0ZSBjcmVhdGlvbi0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5jcmVhdGlvbkRhdGUnIHwgaTE4biB9fTxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiA6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImV2ZW50LmNyZWF0aW9uRGF0ZSB8IGZvckRhdGVUaW1lTG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tZGF0ZSBtb2RpZmljYXRpb24tLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQubGFzdE1vZGlmaWNhdGlvbkRhdGUnIHwgaTE4biB9fTxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiA6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImV2ZW50Lmxhc3RNb2RpZmljYXRpb25EYXRlIHwgZm9yRGF0ZVRpbWVMb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1kYXRlIGNsb3R1cmUtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQuY2xvc2VEYXRlJyB8IGkxOG4gfX0gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJldmVudC5jbG9zZURhdGUgfCBmb3JEYXRlVGltZUxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgIDwvdGJvZHk+XG4gICAgICAgICAgICAgICAgICA8L3RhYmxlPlxuICAgICAgICAgICAgICAgICAgQGlmIChldmVudC5pZCAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgPGh2eS1jb21tZW50c1xuICAgICAgICAgICAgICAgICAgICAgIFtsYXN0Q29tbWVudF09XCJldmVudC5sYXN0Q29tbWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbW1lbnRDb3VudF09XCJldmVudC5jb21tZW50Q291bnRcIlxuICAgICAgICAgICAgICAgICAgICAgIChjb21tZW50ZWQpPVwidXBkYXRlQ29tbWVudChldmVudCwgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImV2ZW50LnN0YXR1cyA9PT0gJ0RPTkUnIHx8IGV2ZW50LnN0YXR1cyA9PT0gJ0FSQ0hJVkVEJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgW3R5cGVdPVwiJ2V2ZW50cydcIlxuICAgICAgICAgICAgICAgICAgICAgIFttZV09XCJtZT8uc3ViXCJcbiAgICAgICAgICAgICAgICAgICAgICBbb2JqZWN0SWRdPVwiZXZlbnQuaWRcIlxuICAgICAgICAgICAgICAgICAgICA+PC9odnktY29tbWVudHM+XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fcHJvY2VkdXJlXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudHMtZGV0YWlsX19wcm9jZWR1cmVfX2hlYWRlclwiPlxuICAgICAgICAgIDxoMj5cbiAgICAgICAgICAgIHt7IChldmVudHMubGVuZ3RoID09PSAxID8gJ0BodnkuZXZlbnQubG9nLnByb2NlZHVyZS5uYW1lMScgOiAnQGh2eS5ldmVudC5sb2cucHJvY2VkdXJlLm5hbWUnKSB8IGkxOG4gfX1cbiAgICAgICAgICA8L2gyPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgQGlmIChwcm9jZWR1cmUpIHtcbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fcHJvY2VkdXJlX19kZXNjcmlwdGlvblwiPlxuICAgICAgICAgICAgPHA+XG4gICAgICAgICAgICAgIDxzcGFuPnt7IHByb2NlZHVyZS5uYW1lIH19Jm5ic3A7Ojwvc3Bhbj5cbiAgICAgICAgICAgICAge3sgcHJvY2VkdXJlLmRlc2NyaXB0aW9uIH19XG4gICAgICAgICAgICA8L3A+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZV9fcHJvZ3Jlc3NcIj5cbiAgICAgICAgICAgIDxwPnt7ICdAaHZ5LmV2ZW50LmxvZy5wcm9jZWR1cmUucHJvZ3Jlc3MnIHwgaTE4biB9fTwvcD5cbiAgICAgICAgICAgIDxodnktcHJvZ3Jlc3MtZGlzcGxheSBbcHJvZ3Jlc3NdPVwiY2FsY3VsYXRlZFByb2dyZXNzXCI+PC9odnktcHJvZ3Jlc3MtZGlzcGxheT5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8aHZ5LXByb2NlZHVyZS1hY3Rpb25zXG4gICAgICAgICAgICBbcHJvY2VkdXJlTW9kaWZpY2F0aW9uc0FjdGlvbnNdPVwicHJvY2VkdXJlTW9kaWZpY2F0aW9ucz8uYWN0aW9uc1wiXG4gICAgICAgICAgICBbaW5pdGlhbEFjdGlvbnNdID0gdGhpcy5fcHJvY2VkdXJlPy5hY3Rpb25zXG4gICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlQcm9jZWR1cmUgfHwgcmVhZG9ubHlcIlxuICAgICAgICAgICAgW3JlYWRPbmx5Q29tbWVudF09XCJyZWFkT25seUNvbW1lbnRcIlxuICAgICAgICAgICAgW2Rpc2FibGVTYXZlRElCdXR0b25dPVwiaXNFdmVudE1vZGlmaWVkKClcIlxuICAgICAgICAgICAgW2VuYWJsZUVkaXRBY3Rpb25zXT1cImVuYWJsZUVkaXRBY3Rpb25zXCJcbiAgICAgICAgICAgIFthY3Rpb25zXT1cInByb2NlZHVyZS5hY3Rpb25zXCJcbiAgICAgICAgICAgIChtb2RpZmllZCk9XCJtb2RpZmllZEFjdGlvbnMoJGV2ZW50KVwiXG4gICAgICAgICAgICAocmVmcmVzaEFjdGlvbnMpPVwicmVmcmVzaEFjdGlvbnMoJGV2ZW50KVwiXG4gICAgICAgICAgICBbbWVdPVwibWU/LnN1YlwiXG4gICAgICAgICAgICBbZXZlbnRzXT1cInRoaXMuZXZlbnRzXCJcbiAgICAgICAgICAgIChjb21tZW50ZWQpPVwiYWN0aW9uQ29tbWVudGVkKCRldmVudClcIlxuICAgICAgICAgID48L2h2eS1wcm9jZWR1cmUtYWN0aW9ucz5cbiAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgQGlmICghcmVhZG9ubHkpIHtcbiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCIgW2Rpc2FibGVkXT1cIiFjYW5Bc3NvY2lhdGVQcm9jZWR1cmVcIiAoY2xpY2spPVwib3BlbkFzc29jaWF0aW9uTW9kYWwoKVwiPlxuICAgICAgICAgICAgICB7eyAnQGh2eS5hY3Rpb24uYXNzb2NpYXRlJyB8IGkxOG4gfX1cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJvLWh2eS1ldmVudHMtZGV0YWlsX19wcm9jZWR1cmVfX2VtcHR5XCI+e3sgJ0BodnkuZXZlbnQubG9nLnByb2NlZHVyZS5ub25lJyB8IGkxOG4gfX08L3NwYW4+XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG48L2Rpdj5cblxuPG5nLXRlbXBsYXRlICNjb25maXJtRGlhbG9nPlxuICA8ZGl2XG4gICAgY2xhc3M9XCJvLWh2eS1jbG9zZS1jb25maXJtX19kaWFsb2dcIlxuICAgIGFyaWEtbGFiZWxsZWRieT1cImNvbmZpcm1cIlxuICAgIHRhYmluZGV4PVwiLTFcIlxuICAgIGlkPVwiY2hvaWNlXCJcbiAgICByb2xlPVwiZGlhbG9nXCJcbiAgICBhcmlhLW1vZGFsPVwidHJ1ZVwiXG4gID5cbiAgICA8aDI+XG4gICAgICB7e1xuICAgICAgICAoY2hhbmdlU3RhdHVzQ29udGV4dC5ldmVudHMubGVuZ3RoID09PSAxID8gJ0BodnkuZXZlbnQuY2xvc2Uub25lVGl0bGUnIDogJ0BodnkuZXZlbnQuY2xvc2UubXVsdGlUaXRsZScpIHwgaTE4blxuICAgICAgfX1cbiAgICA8L2gyPlxuICAgIDxwPnt7IChjaGFuZ2VTdGF0dXNDb250ZXh0LmV2ZW50cy5sZW5ndGggPT09IDEgPyAnQGh2eS5ldmVudC5jbG9zZS5vbmUnIDogJ0BodnkuZXZlbnQuY2xvc2UubXVsdGknKSB8IGkxOG4gfX08L3A+XG4gICAgPHVsIGNsYXNzPVwibGlzdC1ldmUtY2xvc2UtbW9kYWxcIj5cbiAgICAgIEBmb3IgKGV2ZW50IG9mIGNoYW5nZVN0YXR1c0NvbnRleHQuZXZlbnRzOyB0cmFjayBldmVudC5pZCkge1xuICAgICAgICA8bGk+e3sgcGFkSWQuZm4oZXZlbnQuaWQpIH19IC0ge3sgZXZlbnQubmFtZSB9fTwvbGk+XG4gICAgICB9XG4gICAgPC91bD5cbiAgICA8cCBjbGFzcz1cIm8taHZ5LWNsb3NlLWNvbmZpcm1fX2RpYWxvZ19fY29tbWVudC10aXRsZVwiPlxuICAgICAge3sgJ0BodnkuZXZlbnQuY2xvc2UuY29tbWVudCcgfCBpMThuIH19PHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+IDpcbiAgICA8L3A+XG4gICAgPGRpdiBjbGFzcz1cIm8taHZ5LWNsb3NlLWNvbmZpcm1fX2RpYWxvZ19fY29tbWVudFwiPlxuICAgICAgPHRleHRhcmVhIFsobmdNb2RlbCldPVwiY2hhbmdlU3RhdHVzQ29udGV4dC5jb21tZW50XCIgY2xhc3M9XCJhLWZvcm0tZmllbGRcIiBbbWF4TGVuZ3RoXT1cIjI1NVwiPjwvdGV4dGFyZWE+XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm8taHZ5LWNsb3NlLWNvbmZpcm1fX2RpYWxvZ19fYWN0aW9uc1wiPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1wcmltYXJ5XCIgKGNsaWNrKT1cImNvbmZpcm1lZENsb3NlKClcIiBbZGlzYWJsZWRdPVwiY29uZmlybURpc2FibGVkKClcIj5cbiAgICAgICAge3sgJ0BodnkuYWN0aW9uLnZhbGlkYXRlJyB8IGkxOG4gfX1cbiAgICAgIDwvYnV0dG9uPlxuICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwidG9nZ2xlQ29uZmlybSgpXCI+e3sgJ0BodnkuYWN0aW9uLmNhbmNlbCcgfCBpMThuIH19PC9idXR0b24+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
824
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtZGV0YWlsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3Byb3ZvbHkvaHlwZXJ2aXNvci9zcmMvbGliL2V2ZW50L2RldGFpbC9ldmVudC1kZXRhaWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcHJvdm9seS9oeXBlcnZpc29yL3NyYy9saWIvZXZlbnQvZGV0YWlsL2V2ZW50LWRldGFpbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsU0FBUyxFQUNULFVBQVUsRUFDVixZQUFZLEVBQ1osS0FBSyxFQUNMLE1BQU0sRUFFTixXQUFXLEVBQ1gsU0FBUyxFQUNULFlBQVksRUFFYixNQUFNLGVBQWUsQ0FBQztBQUd2QixPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4Q0FBOEMsQ0FBQztBQUNuRixPQUFPLEVBQ0wseUJBQXlCLEVBTXpCLHdCQUF3QixFQUN6QixNQUFNLG9CQUFvQixDQUFDO0FBRzVCLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFL0QsT0FBTyxFQUFXLGFBQWEsRUFBYyxNQUFNLHNCQUFzQixDQUFDO0FBQzFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNyRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLFlBQVksRUFDWixLQUFLLEVBRUwsV0FBVyxFQUNYLE9BQU8sRUFDUCxTQUFTLEVBQ1QsSUFBSSxFQUNKLFVBQVUsRUFDVixHQUFHLEVBQ0osTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdEQsT0FBTyxLQUFLLE1BQU0scUJBQXFCLENBQUM7QUFDeEMsT0FBTyxFQUFF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O2tCQUpoQyxTQUFTOytCQUNFLGtCQUFrQjtxV0FRbkIsYUFBYTtzQkFBckIsS0FBSztnQkFLSSxjQUFjO3NCQUF2QixNQUFNO2dCQUdHLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFTRSxLQUFLO3NCQUFiLEtBQUs7Z0JBRU8sZ0JBQWdCO3NCQUE1QixLQUFLO2dCQVNHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFDRyxlQUFlO3NCQUF2QixLQUFLO2dCQUU2QyxhQUFhO3NCQUEvRCxTQUFTO3VCQUFDLGVBQWUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUU7Z0JBQ3ZDLG1CQUFtQjtzQkFBNUIsTUFBTTtnQkFHZ0QsZUFBZTtzQkFBckUsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBSTNDLFNBQVM7c0JBQWxCLE1BQU07Z0JBU00sRUFBRTtzQkFBZCxLQUFLO2dCQUtPLE1BQU07c0JBQWxCLEtBQUs7Z0JBNERPLFNBQVM7c0JBQXJCLEtBQUs7Z0JBS08sbUJBQW1CO3NCQUEvQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBFbGVtZW50UmVmLFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPdXRwdXQsXG4gIFF1ZXJ5TGlzdCxcbiAgVGVtcGxhdGVSZWYsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NoaWxkcmVuLFxuICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSHlwUHJvY2VkdXJlIH0gZnJvbSAnLi4vLi4vbW9kZWwvcHJvY2VkdXJlL2h5cC1wcm9jZWR1cmUuaW50ZXJmYWNlJztcbmltcG9ydCB7IEh5cEV2ZW50RGV0YWlscyB9IGZyb20gJy4uLy4uL21vZGVsL2V2ZW50L2h5cC1ldmVudC1kZXRhaWwuaW50ZXJmYWNlJztcbmltcG9ydCB7IEh5cEV2ZW50Q3JpdGljYWxpdHkgfSBmcm9tICcuLi8uLi9tb2RlbC9ldmVudC9oeXAtZXZlbnQtY3JpdGljYWxpdHkudHlwZSc7XG5pbXBvcnQge1xuICBQcnlEaWFsb2dDb25maXJtQ29tcG9uZW50LFxuICBQcnlEaWFsb2dDb25maXJtRGF0YSxcbiAgUHJ5RGlhbG9nUmVmLFxuICBQcnlEaWFsb2dTZXJ2aWNlLFxuICBQcnlJMThuU2VydmljZSxcbiAgUHJ5SWNvbkNvbXBvbmVudCxcbiAgU3Vic2NyaXB0aW9ubmVyRGlyZWN0aXZlXG59IGZyb20gJ0Bwcm92b2x5L2Rhc2hib2FyZCc7XG5pbXBvcnQge0VxdWlwbWVudEZvckV2ZW50LCBIeXBFcXVpcG1lbnR9IGZyb20gJy4uLy4uL21vZGVsL2h5cC1lcXVpcG1lbnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IEVxdWlwbWVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdG9yZS9lcXVpcG1lbnQvZXF1aXBtZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgRE9NQUlOUyB9IGZyb20gJy4uLy4uL21vZGVsL2RvbWFpbnMuY29uc3RhbnQnO1xuaW1wb3J0IHsgRXZlbnRBY3Rpb25zIH0gZnJvbSAnLi4vLi4vc3RvcmUvZXZlbnQvZXZlbnQuYWN0aW9ucyc7XG5pbXBvcnQgeyBTdG9yZSB9IGZyb20gJ0BuZ3J4L3N0b3JlJztcbmltcG9ydCB7IE92ZXJsYXksIE92ZXJsYXlDb25maWcsIE92ZXJsYXlSZWYgfSBmcm9tICdAYW5ndWxhci9jZGsvb3ZlcmxheSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVBvcnRhbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHtcbiAgY29tYmluZUxhdGVzdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkZWxheSwgZm9ya0pvaW4sIG1lcmdlTWFwLFxuICBPYnNlcnZhYmxlLFxuICBzaGFyZVJlcGxheSxcbiAgU3ViamVjdCxcbiAgc3dpdGNoTWFwLFxuICB0YWtlLFxuICB0aHJvd0Vycm9yLFxuICB6aXBcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBwYWRJZCB9IGZyb20gJy4uLy4uL2dlbmVyYWwvcGFkLWlkLmZ1bmN0aW9uJztcbmltcG9ydCBlcXVhbCBmcm9tICdmYXN0LWRlZXAtZXF1YWwvZXM2JztcbmltcG9ydCB7IFByb2NlZHVyZUFzc29jaWF0aW9uTW9kYWxDb21wb25lbnQgfSBmcm9tICcuLi9wcm9jZWR1cmUtYXNzb2NpYXRpb24tbW9kYWwvcHJvY2VkdXJlLWFzc29jaWF0aW9uLW1vZGFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQcm9jZWR1cmVBY3Rpb25zIH0gZnJvbSAnLi4vLi4vc3RvcmUvcHJvY2VkdXJlL3Byb2NlZHVyZS5hY3Rpb25zJztcbmltcG9ydCB7IEh5cEV2ZW50Q2F0ZWdvcnksIEh5cEV2ZW50U3ViQ2F0ZWdvcnkgfSBmcm9tICcuLi8uLi9tb2RlbC9ldmVudC9oeXAtZXZlbnQtY2F0ZWdvcnkudHlwZSc7XG5pbXBvcnQgeyBIeXBDb21tZW50c1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zdG9yZS9jb21tZW50cy9jb21tZW50cy5zZXJ2aWNlJztcbmltcG9ydCB7Y2F0Y2hFcnJvciwgbWFwLCBzdGFydFdpdGh9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IEh5cFNlcnZpY2VUb29sdGlwfSBmcm9tICcuLi8uLi9tb2RlbC9ldmVudC9oeXAtZXZlbnQtdG9vbHRpcC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSHZ5RXZlbnREZXRhaWxzVG9vbHRpcENvbXBvbmVudCB9IGZyb20gJy4vZXZlbnQtZGV0YWlscy10b29sdGlwLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBFdmVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zdG9yZS9ldmVudC9ldmVudC5zZXJ2aWNlJztcbmltcG9ydCB7IEh2eUV2ZW50QWRkRXZlbnRDb21wb25lbnQgfSBmcm9tICcuL2FkZC1ldmVudC9hZGQtZXZlbnQuY29tcG9uZW50JztcbmltcG9ydCB7IEh5cEFjdGlvbiB9IGZyb20gJy4uLy4uL21vZGVsL3Byb2NlZHVyZS9oeXAtYWN0aW9uLmludGVyZmFjZSc7XG5pbXBvcnQgeyBIeXBDb21tZW50IH0gZnJvbSAnLi4vLi4vbW9kZWwvY29tbWVudC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgQWN0aW9ucywgb2ZUeXBlIH0gZnJvbSAnQG5ncngvZWZmZWN0cyc7XG5pbXBvcnQgeyBFdmVudFNlbGVjdG9ycyB9IGZyb20gJy4uLy4uL3N0b3JlL2V2ZW50L2V2ZW50LnNlbGVjdG9ycyc7XG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1CdWlsZGVyLCBGb3JtQ29udHJvbH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XG5pbXBvcnQgeyBNYXRBdXRvY29tcGxldGVUcmlnZ2VyIH0gZnJvbSBcIkBhbmd1bGFyL21hdGVyaWFsL2F1dG9jb21wbGV0ZVwiO1xuaW1wb3J0IHtSZW1vdmVFdmVudENvbXBvbmVudH0gZnJvbSBcIi4vcmVtb3ZlLWV2ZW50L3JlbW92ZS1ldmVudC5jb21wb25lbnRcIjtcbmltcG9ydCB7UHJvY2VkdXJlU2VydmljZX0gZnJvbSBcIi4uLy4uL3N0b3JlL3Byb2NlZHVyZS9wcm9jZWR1cmUuc2VydmljZVwiO1xuXG5leHBvcnQgdHlwZSBDaGFuZ2VTdGF0dXNDb250ZXh0ID0ge1xuICBjb21tZW50OiBzdHJpbmc7XG4gIGV2ZW50czogSHlwRXZlbnREZXRhaWxzW107XG4gIHN0YXR1czogc3RyaW5nO1xuICBhbGw6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIEh5cEV2ZW50RGV0YWlsc1dpdGhNYXRjaGluZyBleHRlbmRzIEh5cEV2ZW50RGV0YWlscyB7XG4gIGh0bWw6IHN0cmluZztcbiAgZGlzcGxheU5hbWU6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IEVWRU5UX0RFVEFJTF9BQ0NFU1NfRk4gPSB7XG4gIHZhbHVlOiAoZXZlbnQ6IEh5cEV2ZW50RGV0YWlscywgY29tcG9uZW50OiBFdmVudERldGFpbENvbXBvbmVudCkgPT4ge1xuICAgIGNvbnN0IHJlYWRvbmx5ID1cbiAgICAgIGNvbXBvbmVudC5yZWFkb25seSB8fFxuICAgICAgZXZlbnQuc3RhdHVzID09PSAnRE9ORScgfHwgZXZlbnQuc3RhdHVzID09PSAnQVJDSElWRUQnIHx8XG4gICAgICAoWydMSU1JVCcsICdPVVRPRk9SREVSJywgJ0FOT01BTFknXS5pbmNsdWRlcyhldmVudC5jYXRlZ29yeSkgJiYgZXZlbnQuZXh0ZXJuYWxTb3VyY2VSZWYgIT09ICdIeXBlcnZpc2V1cicpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IHJlYWRvbmx5LFxuICAgICAgY2F0ZWdvcnk6IHJlYWRvbmx5LFxuICAgICAgc3ViQ2F0ZWdvcnk6IHJlYWRvbmx5LFxuICAgICAgY3JpdGljYWxpdHk6IHJlYWRvbmx5LFxuICAgICAgZGVzY3JpcHRpb246IHJlYWRvbmx5LFxuICAgICAgYWRkcmVzczogcmVhZG9ubHksXG4gICAgICBzb3VyY2U6IHRydWUsXG4gICAgICBkb21haW46IHJlYWRvbmx5LFxuICAgICAgZXFOYW1lOiByZWFkb25seSxcbiAgICAgIGVxRW50aXR5OiByZWFkb25seSxcbiAgICAgIHN0YXJ0RGF0ZTogcmVhZG9ubHksXG4gICAgICBlbmREYXRlOiByZWFkb25seSxcbiAgICAgIHBhcmVudDogY29tcG9uZW50LnJlYWRvbmx5IHx8IGV2ZW50LnN0YXR1cyA9PT0gJ0RPTkUnIHx8IGV2ZW50LnN0YXR1cyA9PT0gJ0FSQ0hJVkVEJ1xuICAgIH07XG4gIH1cbn07XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2h2eS1ldmVudC1kZXRhaWwnLFxuICB0ZW1wbGF0ZVVybDogJy4vZXZlbnQtZGV0YWlsLmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBFdmVudERldGFpbENvbXBvbmVudCBleHRlbmRzIFN1YnNjcmlwdGlvbm5lckRpcmVjdGl2ZSB7XG4gIGV2ZW50Rm9ybSA9IHRoaXMuZm9ybUJ1aWxkZXIuZ3JvdXAoe2VxdWlwczogdGhpcy5mb3JtQnVpbGRlci5hcnJheShbXSl9KTtcbiAgZ2V0IGVxdWlwQ29udHJvbHMoKXtcbiAgICByZXR1cm4gdGhpcy5ldmVudEZvcm0uZ2V0KCdlcXVpcHMnKSBhcyBGb3JtQXJyYXk7XG4gIH1cbiAgQElucHV0KCkgcGxhY2VzQ2hvaWNlczogKHtrZXk6IHN0cmluZywgZGlzcGxheTogc3RyaW5nfSlbXSA9IFtdO1xuICBvcGVuZWQ6IGJvb2xlYW5bXSA9IFtdO1xuICBjcml0aWNhbGl0aWVzID0gSHlwRXZlbnRDcml0aWNhbGl0eS52YWx1ZXM7XG4gIF9ldmVudHM6IEh5cEV2ZW50RGV0YWlsc1tdID0gW107XG4gIGV2ZW50TW9kaWZpY2F0aW9uczogUGFydGlhbDxIeXBFdmVudERldGFpbHM+W10gPSBbXTtcbiAgQE91dHB1dCgpIG1vZGlmaWVkRXZlbnRzID0gbmV3IEV2ZW50RW1pdHRlcjxbUGFydGlhbDxIeXBFdmVudERldGFpbHM+LCBIeXBFdmVudERldGFpbHNdW10+KCk7XG4gIF9wcm9jZWR1cmU/OiBIeXBQcm9jZWR1cmU7XG4gIHByb2NlZHVyZU1vZGlmaWNhdGlvbnM6IFBhcnRpYWw8SHlwUHJvY2VkdXJlPiA9IHt9O1xuICBAT3V0cHV0KCkgbW9kaWZpZWRQcm9jZWR1cmUgPSBuZXcgRXZlbnRFbWl0dGVyPFtQYXJ0aWFsPEh5cFByb2NlZHVyZT4sIEh5cFByb2NlZHVyZV0gfCB1bmRlZmluZWQ+KCk7XG4gIHByb3RlY3RlZCByZWFkb25seSBET01BSU5TID0gRE9NQUlOUy52YWx1ZXM7XG4gIEBPdXRwdXQoKSBldmVudEVycm9ycyA9IG5ldyBFdmVudEVtaXR0ZXI8eyBmaWVsZDogc3RyaW5nOyBjb2RlOiBzdHJpbmcgfVtdW10+KCk7XG4gIEBPdXRwdXQoKSBhZGRlZEV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxIeXBFdmVudERldGFpbHM+KCk7XG4gIEBPdXRwdXQoKSByZW1vdmVkRXZlbnQgPSAgbmV3IEV2ZW50RW1pdHRlcjxIeXBFdmVudERldGFpbHM+KCk7XG4gIGVycm9yczogeyBmaWVsZDogc3RyaW5nOyBjb2RlOiBzdHJpbmcgfVtdW10gPSBbXTtcbiAgY2FuQ2xvc2VTb21lID0gZmFsc2U7XG4gIGNoYW5nZVN0YXR1c0NvbnRleHQ6IENoYW5nZVN0YXR1c0NvbnRleHQgPSB7XG4gICAgY29tbWVudDogJycsXG4gICAgZXZlbnRzOiBbXSxcbiAgICBzdGF0dXM6ICdET05FJyxcbiAgICBhbGw6IGZhbHNlXG4gIH07XG4gIEBJbnB1dCgpIHRpdGxlPzogc3RyaW5nO1xuXG4gIEBJbnB1dCgpIHNldCBlcXVpcG1lbnRGcm9tTWFwKFxuICAgIGVxdWlwbWVudEZyb21NYXA6IHtlcXVpcG1lbnQ6IEVxdWlwbWVudEZvckV2ZW50IHwgbnVsbCwgZmFtaWx5OiBzdHJpbmcgfCBudWxsfSB8IG51bGwpIHtcbiAgICBpZihlcXVpcG1lbnRGcm9tTWFwICYmIHRoaXMuZXF1aXBDb250cm9scy5sZW5ndGggPiAwKSB7XG4gICAgICBpZihlcXVpcG1lbnRGcm9tTWFwLmVxdWlwbWVudCkge1xuICAgICAgICB0aGlzLmVxdWlwQ29udHJvbHMuYXQoMCkuc2V0VmFsdWUoZXF1aXBtZW50RnJvbU1hcC5lcXVpcG1lbnQpO1xuICAgICAgICB0aGlzLm1hbmFnZUVxdWlwbWVudCgwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgQElucHV0KCkgcmVhZG9ubHk6IGJvb2xlYW4gfCBudWxsID0gZmFsc2U7XG4gIEBJbnB1dCgpIHJlYWRvbmx5UHJvY2VkdXJlOiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICBASW5wdXQoKSBlbmFibGVFZGl0QWN0aW9uczogYm9vbGVhbiB8IG51bGwgPSBmYWxzZTtcbiAgQElucHV0KCkgcmVhZE9ubHlDb21tZW50OiBib29sZWFuIHwgbnVsbCA9IGZhbHNlO1xuICBvdmVybGF5UmVmPzogT3ZlcmxheVJlZjtcbiAgQFZpZXdDaGlsZCgnY29uZmlybURpYWxvZycsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSkgY29uZmlybURpYWxvZyE6IFRlbXBsYXRlUmVmPGFueT47XG4gIEBPdXRwdXQoKSBjb21maXJtRGlhbG9nT3BlbmVkID0gbmV3IEV2ZW50RW1pdHRlcjxDaGFuZ2VTdGF0dXNDb250ZXh0PigpO1xuICBlcXVpcG1lbnRTZWxlY3RWYWx1ZTogKHN0cmluZyB8IEh5cEVxdWlwbWVudCB8IHVuZGVmaW5lZClbXSA9IFtdO1xuICBlcXVpcG1lbnRzJDogT2JzZXJ2YWJsZTxFcXVpcG1lbnRGb3JFdmVudFtdPltdID0gW107XG4gIEBWaWV3Q2hpbGRyZW4oJ2RldGFpbEhvdmVySWNvbicsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkZXRhaWxIb3Zlckljb24hOiBRdWVyeUxpc3Q8RWxlbWVudFJlZjxQcnlJY29uQ29tcG9uZW50Pj47XG4gIG9uRXZlbnRTZWFyY2gkID0gbmV3IFN1YmplY3Q8bnVtYmVyPigpO1xuICBldmVudFNlbGVjdFZhbHVlOiAoc3RyaW5nIHwgSHlwRXZlbnREZXRhaWxzIHwgdW5kZWZpbmVkKVtdID0gW107XG4gIGV2ZW50cyQ6IE9ic2VydmFibGU8SHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nW10+O1xuICBAT3V0cHV0KCkgY29tbWVudGVkID0gbmV3IEV2ZW50RW1pdHRlcjxcbiAgICB8IHsgZXZlbnQ6IEh5cEV2ZW50RGV0YWlsczsgY29tbWVudHM6IEh5cENvbW1lbnRbXSB9W11cbiAgICB8IHtcbiAgICAgICAgYWN0aW9uOiBIeXBBY3Rpb247XG4gICAgICAgIGNvbW1lbnRzOiBIeXBDb21tZW50W107XG4gICAgICB9XG4gID4oKTtcbiAgcHJvZmlsZTogeyBzdWI6IHN0cmluZyB8IHVuZGVmaW5lZDsgdXNlck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCB9IHwgbnVsbCA9IG51bGw7XG5cbiAgQElucHV0KCkgc2V0IG1lKG1lOiB7IHN1Yjogc3RyaW5nIHwgdW5kZWZpbmVkOyB1c2VyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gfCBudWxsKSB7XG4gICAgdGhpcy5wcm9maWxlID0gbWU7XG4gICAgdGhpcy5zZXRDcmVhdG9yRm9yRXZlbnRzKCk7XG4gIH1cblxuICBASW5wdXQoKSBzZXQgZXZlbnRzKGV2ZW50czogSHlwRXZlbnREZXRhaWxzW10pIHtcbiAgICB0aGlzLmVxdWlwQ29udHJvbHMuY2xlYXIoKTtcbiAgICB0aGlzLl9ldmVudHMgPSBldmVudHMuZmlsdGVyKChldikgPT4gISFldik7XG4gICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnMgPSBuZXcgQXJyYXkodGhpcy5fZXZlbnRzLmxlbmd0aCk7XG4gICAgaWYgKHRoaXMuX2V2ZW50cy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHRoaXMub3BlbmVkID0gW3RydWVdO1xuICAgIH1cbiAgICB0aGlzLmNhbkNsb3NlU29tZSA9IHRoaXMuX2V2ZW50cy5maWx0ZXIoKGV2KSA9PiBldi5zdGF0dXMgIT09ICdET05FJyAmJiBldi5zdGF0dXMgIT09ICdBUkNISVZFRCcpLmxlbmd0aCA+IDA7XG4gICAgdGhpcy5fZXZlbnRzLmZvckVhY2goKGV2LCBpZHgpID0+IHtcbiAgICAgIGxldCBnZXRFcXVpcG1lbnQgPSB0aGlzLl9ldmVudHNbaWR4XS5lcXVpcG1lbnQgYXMgRXF1aXBtZW50Rm9yRXZlbnQ7XG4gICAgICBpZih0aGlzLl9ldmVudHNbaWR4XS5hZGRyZXNzICYmICEhZ2V0RXF1aXBtZW50KXtcbiAgICAgICAgZ2V0RXF1aXBtZW50ID0gey4uLmdldEVxdWlwbWVudCwgYWRkcmVzczogdGhpcy5fZXZlbnRzW2lkeF0uYWRkcmVzc307XG4gICAgICB9XG4gICAgICBjb25zdCBlcXVpcENvbnRyb2wgPSBuZXcgRm9ybUNvbnRyb2w8RXF1aXBtZW50Rm9yRXZlbnQgfCBzdHJpbmcgfCBudWxsPihnZXRFcXVpcG1lbnQpO1xuICAgICAgaWYoZXYuc3RhdHVzID09PSAnRE9ORScgfHwgZXYuc3RhdHVzID09PSAnQVJDSElWRUQnKSB7XG4gICAgICAgIGVxdWlwQ29udHJvbC5kaXNhYmxlKCk7XG4gICAgICB9XG4gICAgICB0aGlzLmVxdWlwQ29udHJvbHMucHVzaChlcXVpcENvbnRyb2wpO1xuICAgICAgaWYodHlwZW9mIGdldEVxdWlwbWVudCA9PT0gJ29iamVjdCcgJiYgISFnZXRFcXVpcG1lbnQpe1xuICAgICAgICB0aGlzLmdldERhdGFGb3JUb29sdGlwKGdldEVxdWlwbWVudCBhcyBIeXBFcXVpcG1lbnQsIGlkeCk7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFcXVpcG1lbnRbaWR4XSA9IHRydWU7XG4gICAgICAgIHRoaXMuYWRyZXNzRGlzYWJsZWRbaWR4XSA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlbGVjdGVkRXF1aXBtZW50W2lkeF0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZHJlc3NEaXNhYmxlZFtpZHhdID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmVxdWlwbWVudFNlbGVjdFZhbHVlW2lkeF0gPSBnZXRFcXVpcG1lbnQ7XG4gICAgICBpZiAoZXYucGFyZW50ICYmIGV2LnBhcmVudC5pZCkge1xuICAgICAgICB0aGlzLnNlbGVjdGVkUGFyZW50Q2hhbmdlKFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIC4uLmV2LnBhcmVudCxcbiAgICAgICAgICAgIGRpc3BsYXlOYW1lOiBgJHtwYWRJZC5mbihldi5wYXJlbnQuaWQpfSAtICR7ZXYucGFyZW50Lm5hbWV9YFxuICAgICAgICAgIH0gYXMgdW5rbm93biBhcyBIeXBFdmVudERldGFpbHNXaXRoTWF0Y2hpbmcsXG4gICAgICAgICAgaWR4XG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICB0aGlzLmVxdWlwQ29udHJvbHMuY29udHJvbHMuZm9yRWFjaCgoY29udHJvbCwgaW5kZXgpPT4ge1xuICAgICAgdGhpcy5lcXVpcG1lbnRzJFtpbmRleF0gPSBjb250cm9sLnZhbHVlQ2hhbmdlcy5waXBlKHN0YXJ0V2l0aChjb250cm9sLnZhbHVlKSwgZGVib3VuY2VUaW1lKDIwMCksXG4gICAgICAgIHN3aXRjaE1hcChlcXVpcG1lbnQgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLnRvb2x0aXBSZWYuZGlhbG9nICYmIHRoaXMudG9vbHRpcFJlZi5pbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcFJlZi5kaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgICAgIHRoaXMudG9vbHRpcFJlZi5kaWFsb2cgPSBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBkb21haW4gPSB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0/LmRvbWFpbiA/PyB0aGlzLl9ldmVudHNbaW5kZXhdPy5kb21haW4gPz8gdW5kZWZpbmVkO1xuICAgICAgICAgIHJldHVybiB0aGlzLmVxdWlwbWVudFNlcnZpY2Uuc2VhcmNoKHR5cGVvZiBlcXVpcG1lbnQgPT09ICdvYmplY3QnID8gZXF1aXBtZW50Py5uYW1lIDogZXF1aXBtZW50LCBkb21haW4pLnBpcGUoXG4gICAgICAgICAgICBtYXAoKGVxdWlwbWVudHMpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIGVxdWlwbWVudHM7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IHRocm93RXJyb3IoKCkgPT4gbmV3IEVycm9yKCdTZWFyY2ggRXF1aXBtZW50IHByb2JsZW0nKSkpLFxuICAgICAgICBzaGFyZVJlcGxheSgpXG4gICAgICApO1xuICAgIH0pXG4gICAgdGhpcy5zZXRDcmVhdG9yRm9yRXZlbnRzKCk7XG4gICAgdGhpcy5zZXREaXN0cmljdEZvckV2ZW50cygpO1xuICB9XG5cbiAgQElucHV0KCkgc2V0IHByb2NlZHVyZShwcm9jZWR1cmU6IEh5cFByb2NlZHVyZSkge1xuICAgIHRoaXMuX3Byb2NlZHVyZSA9IHByb2NlZHVyZTtcbiAgICB0aGlzLnByb2NlZHVyZU1vZGlmaWNhdGlvbnMgPSB7fTtcbiAgfVxuXG4gIEBJbnB1dCgpIHNldCBjYW5jZWxNb2RpZmljYXRpb25zKGV2dDogYW55KSB7XG4gICAgdGhpcy5lcXVpcENvbnRyb2xzLmNvbnRyb2xzLmZvckVhY2goKGNvbnRyb2wsIGluZGV4KT0+IHtcbiAgICAgIGNvbnN0IGluaXRpYWxFcXVpcG1lbnQgPSB0aGlzLmVxdWlwbWVudFNlbGVjdFZhbHVlW2luZGV4XTtcbiAgICAgIGNvbnRyb2wuc2V0VmFsdWUoaW5pdGlhbEVxdWlwbWVudCk7XG4gICAgICBpZih0eXBlb2YgaW5pdGlhbEVxdWlwbWVudCA9PT0gJ29iamVjdCcgJiYgISFpbml0aWFsRXF1aXBtZW50KSB7XG4gICAgICAgIHRoaXMuc2VsZWN0ZWRFcXVpcG1lbnRbaW5kZXhdID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5hZHJlc3NEaXNhYmxlZFtpbmRleF0gPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZWxlY3RlZEVxdWlwbWVudFtpbmRleF0gPSBmYWxzZTtcbiAgICAgICAgdGhpcy5hZHJlc3NEaXNhYmxlZFtpbmRleF0gPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9KVxuICAgIHRoaXMuZXZlbnRTZWxlY3RWYWx1ZSA9IHRoaXMuZXZlbnRTZWxlY3RWYWx1ZS5tYXAoKGV2ZW50UGFyZW50LCBpbmRleCkgPT4ge1xuICAgICAgY29uc3QgaW5pdGlhbFBhcmVudCA9IHRoaXMuX2V2ZW50c1tpbmRleF0ucGFyZW50O1xuICAgICAgaWYgKGluaXRpYWxQYXJlbnQpIHtcbiAgICAgICAgY29uc3QgcmVnZXggPSB0aGlzLmdldENvbWJvQm94UmVnRXhwKGluaXRpYWxQYXJlbnQubmFtZSk7XG4gICAgICAgIGNvbnN0IGh0bWwgPSBgJHtwYWRJZC5mbihpbml0aWFsUGFyZW50LmlkKX0gLSAke2luaXRpYWxQYXJlbnQubmFtZX1gO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLmluaXRpYWxQYXJlbnQsXG4gICAgICAgICAgaHRtbDogaHRtbC5yZXBsYWNlQWxsKHJlZ2V4LCAobWF0Y2hlZDogc3RyaW5nLCBjYXB0dXJlMTogc3RyaW5nKSA9PiBgPGI+JHtjYXB0dXJlMX08L2I+YCksXG4gICAgICAgICAgZGlzcGxheU5hbWU6IGh0bWxcbiAgICAgICAgfSBhcyBIeXBFdmVudERldGFpbHNXaXRoTWF0Y2hpbmc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zID0gbmV3IEFycmF5KHRoaXMuX2V2ZW50cy5sZW5ndGgpO1xuICAgIHRoaXMucHJvY2VkdXJlTW9kaWZpY2F0aW9ucyA9IHt9O1xuICAgIHRoaXMuX291dHB1dE1vZGlmaWNhdGlvbnMoKTtcbiAgfVxuXG4gIHNlbGVjdGVkRXF1aXBtZW50ID0gW2ZhbHNlXTtcbiAgYWRyZXNzRGlzYWJsZWQgPSBbZmFsc2VdO1xuICBvcGVuZWRBdXRvY29tcGxldGUgPSBbZmFsc2VdO1xuICB0b29sdGlwUmVmOiB7ZGlhbG9nOiBQcnlEaWFsb2dSZWY8SHZ5RXZlbnREZXRhaWxzVG9vbHRpcENvbXBvbmVudD4gfCBudWxsLCBpbmRleDogbnVtYmVyfSA9IHtkaWFsb2c6IG51bGwsIGluZGV4OiAwfTtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBlcXVpcG1lbnRTZXJ2aWNlOiBFcXVpcG1lbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgb3ZlcmxheTogT3ZlcmxheSxcbiAgICBwcml2YXRlIHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgcHVibGljIGkxOG5TZXJ2aWNlOiBQcnlJMThuU2VydmljZSxcbiAgICBwcml2YXRlIHByeURpYWxvZzogUHJ5RGlhbG9nU2VydmljZSxcbiAgICBwcml2YXRlIGNvbW1lbnRzU2VydmljZTogSHlwQ29tbWVudHNTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTZXJ2aWNlOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhY3Rpb25zJDogQWN0aW9ucyxcbiAgICBwcml2YXRlIGZvcm1CdWlsZGVyOiBGb3JtQnVpbGRlcixcbiAgICBwcml2YXRlIHByb2NlZHVyZVNlcnZpY2U6IFByb2NlZHVyZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMuYWRkKFxuICAgICAgdGhpcy5hY3Rpb25zJC5waXBlKG9mVHlwZShFdmVudEFjdGlvbnMuc3RhdHVzKSwgZGVsYXkoMTAwMCkpLnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6IChhY3Rpb24pID0+IHtcbiAgICAgICAgICBpZiAoYWN0aW9uLmV2ZW50ICYmIGFjdGlvbi5ldmVudC5pZCkge1xuICAgICAgICAgICAgY29tYmluZUxhdGVzdChcbiAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgIHRoaXMuZXZlbnRTZXJ2aWNlLmdldChhY3Rpb24uZXZlbnQuaWQpLFxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudHNTZXJ2aWNlLmdldChhY3Rpb24uZXZlbnQhLmlkLCAnZXZlbnRzJyksXG4gICAgICAgICAgICAgICAgdGhpcy5zdG9yZS5zZWxlY3QoRXZlbnRTZWxlY3RvcnMuZGV0YWlscylcbiAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgKS5waXBlKG1hcCgoW2V2ZW50LCBjb21tZW50cywgZGV0YWlsc10pPT4ge1xuICAgICAgICAgICAgICB0aGlzLmNvbW1lbnRlZC5uZXh0KFt7IGV2ZW50OiBldmVudCBhcyBIeXBFdmVudERldGFpbHMsIGNvbW1lbnRzOiBjb21tZW50cyBhcyBIeXBDb21tZW50W10gfV0pO1xuICAgICAgICAgICAgICBpZighIWRldGFpbHMgJiYgISFkZXRhaWxzLnByb2NlZHVyZSAmJiAhIWRldGFpbHMucHJvY2VkdXJlLmV2ZW50cykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2V2ZW50cyA9IGRldGFpbHMucHJvY2VkdXJlLmV2ZW50cyE7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pKS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFjdGlvbi5wcm9jZWR1cmUgJiYgYWN0aW9uLnRhcmdldFN0YXR1cyA9PT0gJ0RPTkUnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlXG4gICAgICAgICAgICAgIC5zZWxlY3QoRXZlbnRTZWxlY3RvcnMuZGV0YWlscylcbiAgICAgICAgICAgICAgLnBpcGUodGFrZSgxKSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZGV0YWlscykgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChkZXRhaWxzLnByb2NlZHVyZSAmJiBkZXRhaWxzLnByb2NlZHVyZS5ldmVudHMpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMuY2FuQ2xvc2VTb21lID0gISFkZXRhaWxzLnByb2NlZHVyZS5ldmVudHMuZmluZCgoZXZlbnQpID0+IGV2ZW50LnN0YXR1cyAhPT0gJ0RPTkUnKTtcbiAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jYW5DbG9zZVNvbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXZlbnRzLmZvckVhY2goKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnQuc3RhdHVzID0gJ0RPTkUnO1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSlcbiAgICApO1xuXG4gICAgdGhpcy5zdG9yZS5kaXNwYXRjaChFdmVudEFjdGlvbnMuc2VsZWN0KHsgaWRzOiBbXSwgY3VtdWxhdGl2ZTogZmFsc2UgfSkpO1xuXG4gICAgdGhpcy5ldmVudHMkID0gdGhpcy5vbkV2ZW50U2VhcmNoJC5waXBlKHN0YXJ0V2l0aCgpLCBkZWJvdW5jZVRpbWUoNTAwKSkucGlwZShcbiAgICAgIHN3aXRjaE1hcCgoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgICBjb25zdCBzZWFyY2ggPVxuICAgICAgICAgIHR5cGVvZiB0aGlzLmV2ZW50U2VsZWN0VmFsdWVbaW5kZXhdID09PSAnc3RyaW5nJyAmJiAodGhpcy5ldmVudFNlbGVjdFZhbHVlW2luZGV4XSBhcyBzdHJpbmcpLmxlbmd0aCA+IDJcbiAgICAgICAgICAgID8gKHRoaXMuZXZlbnRTZWxlY3RWYWx1ZVtpbmRleF0gYXMgc3RyaW5nKVxuICAgICAgICAgICAgOiAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgIHRoaXMuZXZlbnRTZWxlY3RWYWx1ZVtpbmRleF1cbiAgICAgICAgICAgICAgPyBwYWRJZC5mbigodGhpcy5ldmVudFNlbGVjdFZhbHVlW2luZGV4XSBhcyBIeXBFdmVudERldGFpbHMpLmlkKVxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXZlbnRTZXJ2aWNlLnNlYXJjaChzZWFyY2gsIFsnbmFtZScsICdpZCddKS5waXBlKFxuICAgICAgICAgIG1hcCgoZXZlbnRzKSA9PlxuICAgICAgICAgICAgZXZlbnRzLm1hcCgoZXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSB0aGlzLmdldENvbWJvQm94UmVnRXhwKHNlYXJjaCk7XG4gICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBgJHtwYWRJZC5mbihldmVudC5pZCl9IC0gJHtldmVudC5uYW1lfWA7XG4gICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgLi4uZXZlbnQsXG4gICAgICAgICAgICAgICAgaHRtbDogaHRtbC5yZXBsYWNlQWxsKHJlZ2V4LCAobWF0Y2hlZDogc3RyaW5nLCBjYXB0dXJlMTogc3RyaW5nKSA9PiBgPGI+JHtjYXB0dXJlMX08L2I+YCksXG4gICAgICAgICAgICAgICAgZGlzcGxheU5hbWU6IGh0bWxcbiAgICAgICAgICAgICAgfSBhcyBIeXBFdmVudERldGFpbHNXaXRoTWF0Y2hpbmc7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignU2VhcmNoIEVxdWlwbWVudCBwcm9ibGVtJykpO1xuICAgICAgfSksXG4gICAgICBzaGFyZVJlcGxheSgpXG4gICAgKTtcbiAgfVxuXG4gIGlzRXZlbnRNb2RpZmllZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5ldmVudE1vZGlmaWNhdGlvbnMuc29tZSgobW9kaWYsIGluZGV4KSA9PlxuICAgICAgT2JqZWN0LmtleXModGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdKS5sZW5ndGggIT09IDBcbiAgICApXG4gIH1cblxuICBwcml2YXRlIHNldERpc3RyaWN0Rm9yRXZlbnRzKCl7XG4gICAgdGhpcy5fZXZlbnRzID0gdGhpcy5fZXZlbnRzLm1hcCgoZXZlKSA9PiB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICAuLi5ldmUsXG4gICAgICAgIGRpc3RyaWN0OiBldmUuZGlzdHJpY3QgPyBldmUuZGlzdHJpY3QgOiBldmUuZXF1aXBtZW50Py5kaXN0cmljdCA/IGV2ZS5lcXVpcG1lbnQuZGlzdHJpY3QgOiAnJ1xuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q3JlYXRvckZvckV2ZW50cygpIHtcbiAgICB0aGlzLl9ldmVudHMgPSB0aGlzLl9ldmVudHMubWFwKChldmUpID0+IHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIC4uLmV2ZSxcbiAgICAgICAgY3JlYXRvcjogZXZlLmNyZWF0b3JcbiAgICAgICAgICA/IGV2ZS5jcmVhdG9yXG4gICAgICAgICAgOiBldmUuZXh0ZXJuYWxTb3VyY2VSZWYgPT09ICdIeXBlcnZpc2V1cidcbiAgICAgICAgICAgID8gKHRoaXMucHJvZmlsZT8udXNlck5hbWUgYXMgc3RyaW5nKVxuICAgICAgICAgICAgOiAnLS0nXG4gICAgICB9O1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb21ib0JveFJlZ0V4cChzZWFyY2g6IHN0cmluZyB8IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBSZWdFeHAoYCgke3NlYXJjaH0pYCA/PyAnKC8tLy0vKScsICdnaWQnKTtcbiAgfVxuXG4gIGdldCBtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5wcm9maWxlO1xuICB9XG5cbiAgZ2V0IGV2ZW50cygpIHtcbiAgICByZXR1cm4gdGhpcy5fZXZlbnRzLm1hcCgoZXZ0LCBpZHgpID0+ICh7IC4uLmV2dCwgLi4uKHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2lkeF0gPz8ge30pIH0pKTtcbiAgfVxuXG4gIGdldCBjYW5Bc3NvY2lhdGVQcm9jZWR1cmUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2V2ZW50cy5ldmVyeSgoZXZ0KSA9PiBldnQuc3RhdHVzID09PSAnTkVXJyAmJiBldnQuaWQgIT09IC0xKTtcbiAgfVxuXG4gIGdldCBwcm9jZWR1cmUoKTogSHlwUHJvY2VkdXJlIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fcHJvY2VkdXJlXG4gICAgICA/IHtcbiAgICAgICAgICAuLi50aGlzLl9wcm9jZWR1cmUsXG4gICAgICAgICAgLi4uKHRoaXMucHJvY2VkdXJlTW9kaWZpY2F0aW9ucyA/PyB7fSksXG4gICAgICAgICAgZXZlbnRzOiB0aGlzLmV2ZW50c1xuICAgICAgICB9XG4gICAgICA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBjbG9zZUNvbW1lbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wcm9jZWR1cmU/LmNsb3NlQ29tbWVudCA/PyAnJztcbiAgfVxuXG4gIHRvZ2dsZShpOiBudW1iZXIpIHtcbiAgICB0aGlzLm9wZW5lZFtpXSA9ICF0aGlzLm9wZW5lZFtpXTtcbiAgICBpZiAodGhpcy50b29sdGlwUmVmLmRpYWxvZyAmJiB0aGlzLnRvb2x0aXBSZWYuaW5kZXggPT09IGkgJiYgIXRoaXMub3BlbmVkW2ldKSB7XG4gICAgICB0aGlzLnRvb2x0aXBSZWYuZGlhbG9nLmNsb3NlKCk7XG4gICAgICB0aGlzLnRvb2x0aXBSZWYuZGlhbG9nID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBtYW5hZ2VFcXVpcG1lbnQoaW5kZXg6IG51bWJlcil7XG4gICAgY29uc3QgZ2V0RXF1aXBtZW50ID0gdGhpcy5lcXVpcENvbnRyb2xzLmF0KGluZGV4KS52YWx1ZTtcbiAgICBpZiAodHlwZW9mIGdldEVxdWlwbWVudCA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRFcXVpcG1lbnRbaW5kZXhdID0gdHJ1ZTtcbiAgICAgIHRoaXMuZ2V0RGF0YUZvclRvb2x0aXAoZ2V0RXF1aXBtZW50IGFzIEh5cEVxdWlwbWVudCwgaW5kZXgpO1xuICAgICAgaWYgKCF0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0pIHtcbiAgICAgICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdID0ge307XG4gICAgICB9XG4gICAgICB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0uYWRkcmVzcyA9IGdldEVxdWlwbWVudD8uYWRkcmVzcztcbiAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5kaXN0cmljdCA9IGdldEVxdWlwbWVudD8uZGlzdHJpY3Q7XG4gICAgICB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0uZXF1aXBtZW50ID0gZ2V0RXF1aXBtZW50IGFzIEh5cEVxdWlwbWVudDtcbiAgICAgIHRoaXMuYWRyZXNzRGlzYWJsZWRbaW5kZXhdID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZEVxdWlwbWVudFtpbmRleF0gPSBmYWxzZTtcbiAgICAgIGlmKCF0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0pe1xuICAgICAgICB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0gPSB7fTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5hZGRyZXNzID0gJyc7XG4gICAgICB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0uZGlzdHJpY3QgPSAnJztcbiAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5lcXVpcG1lbnQgPSB1bmRlZmluZWQ7XG4gICAgICB0aGlzLmFkcmVzc0Rpc2FibGVkW2luZGV4XSA9IGZhbHNlO1xuICAgIH1cblxuICAgIGlmKHRoaXMuX2V2ZW50c1tpbmRleF0uZXF1aXBtZW50Py5uYW1lID09PSBnZXRFcXVpcG1lbnQ/Lm5hbWUgfHwgdGhpcy5fZXZlbnRzW2luZGV4XS5lcXVpcG1lbnQgPT09IGdldEVxdWlwbWVudCl7XG4gICAgICBpZiAoISF0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0pIHtcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICBkZWxldGUgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdLmVxdWlwbWVudDtcbiAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5hZGRyZXNzO1xuICAgICAgICBkZWxldGUgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdLmRpc3RyaWN0O1xuICAgICAgICBpZiAoT2JqZWN0LmtleXModGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICBkZWxldGUgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW9kaWZ5RXZlbnQoaW5kZXg6IG51bWJlciwgcHJvcDogc3RyaW5nLCAkZXZlbnQ6IEV2ZW50IHwgc3RyaW5nKSB7XG4gICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdID0gdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdID8/ICh7fSBhcyBQYXJ0aWFsPEh5cEV2ZW50RGV0YWlscz4pO1xuICAgIGlmIChwcm9wID09PSAnY2F0ZWdvcnknKSB7XG4gICAgICBkZWxldGUgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdLnN1YkNhdGVnb3J5O1xuICAgICAgaWYgKCRldmVudCA9PT0gJ0FOT01BTFknKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5zdWJDYXRlZ29yeSA9ICdOT05FJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocHJvcCA9PT0gJ2RvbWFpbicgJiYgdGhpcy5lcXVpcENvbnRyb2xzLmF0KGluZGV4KS52YWx1ZT8uZG9tYWluICE9PSAkZXZlbnQgJiYgISEkZXZlbnQpIHtcbiAgICAgIHRoaXMuZXF1aXBDb250cm9scy5hdChpbmRleCkuc2V0VmFsdWUoJycpO1xuICAgICAgdGhpcy5tYW5hZ2VFcXVpcG1lbnQoaW5kZXgpO1xuICAgIH1cbiAgICBjb25zdCBpc0RhdGUgPSBwcm9wLmluZGV4T2YoJ0RhdGUnKSA+IC0xO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBjb25zdCBuZXdWYWx1ZSA9ICRldmVudCBpbnN0YW5jZW9mIEV2ZW50ID8gJGV2ZW50LnRhcmdldD8udmFsdWUgOiAkZXZlbnQ7XG5cbiAgICBjb25zdCBjb3JyZWN0ZWRWYWx1ZSA9ICFpc0RhdGUgPyBuZXdWYWx1ZSA6IHRoaXMuY29udmVydERhdGUobmV3VmFsdWUpO1xuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBpZiAodGhpcy5fZXZlbnRzW2luZGV4XVtwcm9wXSAhPT0gY29ycmVjdGVkVmFsdWUpIHtcbiAgICAgIGlmICghdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdKSB7XG4gICAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XSA9IHt9O1xuICAgICAgfVxuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdW3Byb3BdID0gY29ycmVjdGVkVmFsdWU7XG5cbiAgICAgIHRoaXMuX291dHB1dE1vZGlmaWNhdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCEhdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdKSB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XVtwcm9wXTtcbiAgICAgICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XSkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9vdXRwdXRNb2RpZmljYXRpb25zKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYWNjZXNzKGV2ZW50OiBIeXBFdmVudERldGFpbHMpIHtcbiAgICByZXR1cm4gRVZFTlRfREVUQUlMX0FDQ0VTU19GTi52YWx1ZShldmVudCwgdGhpcyk7XG4gIH1cblxuICBfb3V0cHV0TW9kaWZpY2F0aW9ucygpIHtcbiAgICB0aGlzLnZhbGlkYXRlRXZlbnRzKHRoaXMuZXZlbnRzKTtcbiAgICB0aGlzLm1vZGlmaWVkRXZlbnRzLm5leHQodGhpcy5ldmVudHMubWFwKChldiwgaWR4KSA9PiBbdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaWR4XSwgZXZdKSk7XG4gICAgdGhpcy5tb2RpZmllZFByb2NlZHVyZS5uZXh0KHRoaXMucHJvY2VkdXJlID8gW3RoaXMucHJvY2VkdXJlTW9kaWZpY2F0aW9ucywgdGhpcy5wcm9jZWR1cmUhXSA6IHVuZGVmaW5lZCk7XG4gIH1cblxuICB2YWxpZGF0ZUV2ZW50cyhldmVudHM6IEh5cEV2ZW50RGV0YWlsc1tdKSB7XG4gICAgdGhpcy5lcnJvcnMgPSBbXTtcbiAgICBldmVudHMuZm9yRWFjaCgoZXZlbnQsIGlkeCkgPT4ge1xuICAgICAgY29uc3QgZXZlbnRFcnJvcnMgPSBbXTtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgvXlxccyskLyk7XG4gICAgICBpZiAoIWV2ZW50Lm5hbWUgfHwgZXZlbnQubmFtZS5sZW5ndGggPT09IDAgfHwgcmVnZXgudGVzdChldmVudC5uYW1lKSkge1xuICAgICAgICBldmVudEVycm9ycy5wdXNoKHsgZmllbGQ6ICduYW1lJywgY29kZTogJ3JlcXVpcmVkJyB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghZXZlbnQuY2F0ZWdvcnkgfHwgZXZlbnQuY2F0ZWdvcnkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGV2ZW50RXJyb3JzLnB1c2goeyBmaWVsZDogJ2NhdGVnb3J5JywgY29kZTogJ3JlcXVpcmVkJyB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghZXZlbnQuY3JpdGljYWxpdHkgfHwgZXZlbnQuY3JpdGljYWxpdHkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGV2ZW50RXJyb3JzLnB1c2goeyBmaWVsZDogJ2NyaXRpY2FsaXR5JywgY29kZTogJ3JlcXVpcmVkJyB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghZXZlbnQuZGVzY3JpcHRpb24gfHwgZXZlbnQuZGVzY3JpcHRpb24ubGVuZ3RoID09PSAwIHx8IHJlZ2V4LnRlc3QoZXZlbnQuZGVzY3JpcHRpb24pKSB7XG4gICAgICAgIGV2ZW50RXJyb3JzLnB1c2goeyBmaWVsZDogJ2Rlc2NyaXB0aW9uJywgY29kZTogJ3JlcXVpcmVkJyB9KTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXF1aXBDb250cm9scy5jb250cm9scy5mb3JFYWNoKChjb250cm9sLCBpbmRleCkgPT4ge1xuICAgICAgICBpZiggdHlwZW9mIGNvbnRyb2wudmFsdWUgPT09ICdzdHJpbmcnICYmIGNvbnRyb2wudmFsdWUubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGV2ZW50RXJyb3JzLnB1c2goeyBmaWVsZDogJ2VxdWlwbWVudCcsIGNvZGU6ICduby1lcXVpcG1lbnQnIH0pO1xuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgY29uc3QgcGFyZW50ID0gZXZlbnQucGFyZW50O1xuICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICBjb25zdCBwYXJlbnROYW1lID0gYCR7cGFkSWQuZm4oZXZlbnQucGFyZW50Py5pZCA/PyAnJyl9IC0gJHtldmVudC5wYXJlbnQ/Lm5hbWV9YDtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRQYXJlbnROYW1lID0gKHRoaXMuZXZlbnRTZWxlY3RWYWx1ZVtpZHhdIGFzIEh5cEV2ZW50RGV0YWlsc1dpdGhNYXRjaGluZyk/LmRpc3BsYXlOYW1lXG4gICAgICAgICAgPyAodGhpcy5ldmVudFNlbGVjdFZhbHVlW2lkeF0gYXMgSHlwRXZlbnREZXRhaWxzV2l0aE1hdGNoaW5nKS5kaXNwbGF5TmFtZVxuICAgICAgICAgIDogdGhpcy5ldmVudFNlbGVjdFZhbHVlW2lkeF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAhIXRoaXMuZXZlbnRTZWxlY3RWYWx1ZVtpZHhdICYmXG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIHBhcmVudE5hbWUgIT09IHNlbGVjdGVkUGFyZW50TmFtZVxuICAgICAgICApIHtcbiAgICAgICAgICBldmVudEVycm9ycy5wdXNoKHsgZmllbGQ6ICdwYXJlbnQnLCBjb2RlOiAnbm90LWZvdW5kJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGV2ZW50LmNhdGVnb3J5ID09PSAnTUFOSUZFU1RBVElPTicpIHtcbiAgICAgICAgaWYgKCFldmVudC5zdGFydERhdGUgfHwgZXZlbnQuc3RhcnREYXRlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIGV2ZW50RXJyb3JzLnB1c2goeyBmaWVsZDogJ3N0YXJ0RGF0ZScsIGNvZGU6ICdyZXF1aXJlZCcgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFldmVudC5lbmREYXRlIHx8IGV2ZW50LmVuZERhdGUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgZXZlbnRFcnJvcnMucHVzaCh7IGZpZWxkOiAnZW5kRGF0ZScsIGNvZGU6ICdyZXF1aXJlZCcgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCgoZXZlbnQuc3RhcnREYXRlIGFzIHN0cmluZyk/LmxvY2FsZUNvbXBhcmUoZXZlbnQuZW5kRGF0ZSA/PyAnJykgPz8gMCkgPiAwKSB7XG4gICAgICAgICAgZXZlbnRFcnJvcnMucHVzaCh7IGZpZWxkOiAnc3RhcnREYXRlJywgY29kZTogJ2JlZm9yZScgfSk7XG4gICAgICAgICAgZXZlbnRFcnJvcnMucHVzaCh7IGZpZWxkOiAnZW5kRGF0ZScsIGNvZGU6ICdhZnRlcicgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChldmVudC5zdGFydERhdGUgJiYgZXZlbnQuZW5kRGF0ZSAmJiBldmVudC5zdGFydERhdGUubG9jYWxlQ29tcGFyZShldmVudC5lbmREYXRlKSA+IDApIHtcbiAgICAgICAgICBldmVudEVycm9ycy5wdXNoKHsgZmllbGQ6ICdzdGFydERhdGUnLCBjb2RlOiAnYmVmb3JlJyB9KTtcbiAgICAgICAgICBldmVudEVycm9ycy5wdXNoKHsgZmllbGQ6ICdlbmREYXRlJywgY29kZTogJ2FmdGVyJyB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5lcnJvcnMucHVzaChldmVudEVycm9ycyk7XG4gICAgfSk7XG4gICAgdGhpcy5ldmVudEVycm9ycy5uZXh0KHRoaXMuZXJyb3JzKTtcbiAgfVxuXG4gIGhhc0Vycm9yKHByb3A6IHN0cmluZywgaWR4OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdGhpcy5lcnJvcnNbaWR4XT8uZmluZCgoZXJyKSA9PiBlcnIuZmllbGQgPT09IHByb3ApID8/IGZhbHNlO1xuICB9XG5cbiAgY2F0ZWdvcmllcyhldmVudDogSHlwRXZlbnREZXRhaWxzKSB7XG4gICAgcmV0dXJuIEh5cEV2ZW50Q2F0ZWdvcnkudmFsdWVzO1xuICB9XG5cbiAgY2hhbmdlU3RhdHVzKCRldmVudDogc3RyaW5nLCBldmVudDogSHlwRXZlbnREZXRhaWxzKSB7XG4gICAgdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LmV2ZW50cyA9IFtldmVudF07XG4gICAgdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LnN0YXR1cyA9ICRldmVudDtcbiAgICB0aGlzLmNoYW5nZVN0YXR1c0NvbnRleHQuYWxsID0gZmFsc2U7XG4gICAgdGhpcy50b2dnbGVDb25maXJtKCk7XG4gICAgaWYoJGV2ZW50ID09PSAnRE9ORScgfHwgJGV2ZW50ID09PSAnQVJDSElWRUQnKSB7XG4gICAgICB0aGlzLmVxdWlwQ29udHJvbHMuY29udHJvbHMuZm9yRWFjaChjb250cm9sID0+IHtcbiAgICAgICAgY29udHJvbC5kaXNhYmxlKCk7XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIGNsb3NlQWxsKCkge1xuICAgIHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5hbGwgPSB0cnVlO1xuICAgIHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5ldmVudHMgPSB0aGlzLmV2ZW50cztcbiAgICB0aGlzLmNoYW5nZVN0YXR1c0NvbnRleHQuc3RhdHVzID0gJ0RPTkUnO1xuICAgIHRoaXMudG9nZ2xlQ29uZmlybSgpO1xuICB9XG5cbiAgY29uZmlybWVkQ2xvc2UoKSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5hbGwpIHtcbiAgICAgIGlmICghdGhpcy5wcm9jZWR1cmUpIHtcbiAgICAgICAgdGhpcy5zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgICBFdmVudEFjdGlvbnMuc3RhdHVzKHtcbiAgICAgICAgICAgIHRhcmdldFN0YXR1czogdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LnN0YXR1cyxcbiAgICAgICAgICAgIGV2ZW50OiB0aGlzLmNoYW5nZVN0YXR1c0NvbnRleHQuZXZlbnRzWzBdLFxuICAgICAgICAgICAgcHJvY2VkdXJlOiB0aGlzLnByb2NlZHVyZSxcbiAgICAgICAgICAgIGNvbW1lbnQ6IHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5jb21tZW50XG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgRXZlbnRBY3Rpb25zLnN0YXR1cyh7XG4gICAgICAgICAgICB0YXJnZXRTdGF0dXM6IHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5zdGF0dXMsXG4gICAgICAgICAgICBwcm9jZWR1cmU6IHRoaXMucHJvY2VkdXJlLFxuICAgICAgICAgICAgY29tbWVudDogdGhpcy5jaGFuZ2VTdGF0dXNDb250ZXh0LmNvbW1lbnRcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnN0b3JlLmRpc3BhdGNoKFxuICAgICAgICBFdmVudEFjdGlvbnMuc3RhdHVzKHtcbiAgICAgICAgICB0YXJnZXRTdGF0dXM6IHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5zdGF0dXMsXG4gICAgICAgICAgZXZlbnQ6IHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5ldmVudHNbMF0sXG4gICAgICAgICAgcHJvY2VkdXJlOiB0aGlzLnByb2NlZHVyZSxcbiAgICAgICAgICBjb21tZW50OiB0aGlzLmNoYW5nZVN0YXR1c0NvbnRleHQuY29tbWVudFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy50b2dnbGVDb25maXJtKCk7XG4gIH1cblxuICB0b2dnbGVDb25maXJtKCkge1xuICAgIGlmICghdGhpcy5vdmVybGF5UmVmKSB7XG4gICAgICB0aGlzLmNvbWZpcm1EaWFsb2dPcGVuZWQubmV4dCh0aGlzLmNoYW5nZVN0YXR1c0NvbnRleHQpO1xuICAgICAgdGhpcy5vdmVybGF5UmVmID0gdGhpcy5vdmVybGF5LmNyZWF0ZShcbiAgICAgICAgbmV3IE92ZXJsYXlDb25maWcoe1xuICAgICAgICAgIGhhc0JhY2tkcm9wOiB0cnVlLFxuICAgICAgICAgIGJhY2tkcm9wQ2xhc3M6ICdiYWNrZHJvcC1kYXJrJyxcbiAgICAgICAgICBwYW5lbENsYXNzOiBbJ28taHZ5LWNsb3NlLWNvbmZpcm0nXVxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5iYWNrZHJvcENsaWNrKCkuc3Vic2NyaWJlKCgpID0+IHRoaXMudG9nZ2xlQ29uZmlybSgpKTtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5hdHRhY2gobmV3IFRlbXBsYXRlUG9ydGFsKHRoaXMuY29uZmlybURpYWxvZywgdGhpcy52aWV3Q29udGFpbmVyUmVmKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMub3ZlcmxheVJlZi5kaXNwb3NlKCk7XG4gICAgICB0aGlzLm92ZXJsYXlSZWYgPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5jb21tZW50ID0gJyc7XG4gIH1cblxuICBjb25maXJtRGlzYWJsZWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2hhbmdlU3RhdHVzQ29udGV4dC5jb21tZW50Lmxlbmd0aCA9PT0gMDtcbiAgfVxuXG4gIGdldCBjYWxjdWxhdGVkUHJvZ3Jlc3MoKSB7XG4gICAgaWYgKHRoaXMucHJvY2VkdXJlIS5hY3Rpb25zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuICAgIHJldHVybiBNYXRoLnJvdW5kKFxuICAgICAgKHRoaXMucHJvY2VkdXJlIS5hY3Rpb25zLmZpbHRlcigoYWN0aW9uKSA9PiBhY3Rpb24uc3RhdHVzID09PSAnRE9ORScgfHwgYWN0aW9uLnN0YXR1cyA9PT0gJ09UX0NMT1NFRCcpLmxlbmd0aCAvIHRoaXMucHJvY2VkdXJlIS5hY3Rpb25zLmxlbmd0aCkgKlxuICAgICAgICAxMDBcbiAgICApO1xuICB9XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHBhZElkID0gcGFkSWQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBzdWJDYXRlZ29yaWVzID0gW3VuZGVmaW5lZCwgLi4uSHlwRXZlbnRTdWJDYXRlZ29yeS52YWx1ZXNbJ0FOT01BTFknXV07XG5cbiAgbW9kaWZpZWRBY3Rpb25zKCRldmVudDogYW55KSB7XG4gICAgaWYgKGVxdWFsKCRldmVudCwgdGhpcy5fcHJvY2VkdXJlIS5hY3Rpb25zKSkge1xuICAgICAgZGVsZXRlIHRoaXMucHJvY2VkdXJlTW9kaWZpY2F0aW9ucy5hY3Rpb25zO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnByb2NlZHVyZU1vZGlmaWNhdGlvbnMuYWN0aW9ucyA9ICRldmVudDtcbiAgICB9XG4gICAgdGhpcy5fb3V0cHV0TW9kaWZpY2F0aW9ucygpO1xuICB9XG5cbiAgcmVmcmVzaEFjdGlvbnMoJGV2ZW50OiBIeXBBY3Rpb25bXSkge1xuICAgIGlmICh0aGlzLnByb2NlZHVyZSAmJiB0aGlzLnByb2NlZHVyZS5hY3Rpb25zKSB7XG4gICAgICB0aGlzLnByb2NlZHVyZSA9IHtcbiAgICAgICAgLi4udGhpcy5wcm9jZWR1cmUsXG4gICAgICAgIGFjdGlvbnM6ICRldmVudFxuICAgICAgfTtcbiAgICAgIHRoaXMuX291dHB1dE1vZGlmaWNhdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBvcGVuQXNzb2NpYXRpb25Nb2RhbCh0aXRsZT86IHN0cmluZywgcHJvY2VkdXJlPzogSHlwUHJvY2VkdXJlLCBtb2RpZnk/OiBib29sZWFuKSB7XG4gICAgY29uc3QgcmVmID0gdGhpcy5wcnlEaWFsb2cub3BlbihQcm9jZWR1cmVBc3NvY2lhdGlvbk1vZGFsQ29tcG9uZW50LCB7XG4gICAgICBiYWNrZHJvcENsYXNzOiAnby1odnktYXNzb2NpYXRpb24tbW9kYWxfX2JhY2tkcm9wJ1xuICAgIH0pO1xuICAgIGlmICghIXJlZiAmJiAhIXJlZi5jb21wb25lbnQpIHtcbiAgICAgIHJlZi5jb21wb25lbnQuZXZlbnRzID0gdGhpcy5ldmVudHM7XG4gICAgICBpZiAodGl0bGUpIHtcbiAgICAgICAgcmVmLmNvbXBvbmVudC50aXRsZSA9IHRpdGxlO1xuICAgICAgfVxuICAgICAgaWYgKHByb2NlZHVyZSkge1xuICAgICAgICByZWYuY29tcG9uZW50LnByb2NlZHVyZVNlbGVjdFZhbHVlID0gcHJvY2VkdXJlLm5hbWU7XG4gICAgICAgIHJlZi5jb21wb25lbnQucHJvY2VkdXJlRG9tYWluID0gcHJvY2VkdXJlLmRvbWFpbjtcbiAgICAgICAgcmVmLmNvbXBvbmVudC5wcmV2aW91c1Byb2NlZHVyZUlkID0gcHJvY2VkdXJlLmlkO1xuICAgICAgfVxuICAgICAgaWYgKG1vZGlmeSkge1xuICAgICAgICByZWYuY29tcG9uZW50Lm1vZGlmeVByb2NlZHVyZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb3BlbkRlbGV0ZU1vZGFsKCkge1xuICAgIGNvbnN0IGRhdGE6IFByeURpYWxvZ0NvbmZpcm1EYXRhID0ge1xuICAgICAgdGl0bGU6ICdAY2hoLmV2ZW50LmRlbGV0ZVQnLFxuICAgICAgbWVzc2FnZTogdGhpcy5pMThuU2VydmljZS5pbnN0YW50KHRoaXMuZXZlbnRzLmxlbmd0aCA+IDEgPyAnQGNoaC5ldmVudC5kZWxldGVNKycgOiAnQGNoaC5ldmVudC5kZWxldGVNMScsIHtcbiAgICAgICAgbmJFdmVudHM6IHRoaXMuZXZlbnRzLmxlbmd0aFxuICAgICAgfSksXG4gICAgICBhY3Rpb25zOiBbXG4gICAgICAgIHsgaWQ6IDAsIGxhYmVsOiAnQGNoaC5hY3Rpb24uY2FuY2VsJywgY29sb3I6ICdzZWNvbmRhcnknIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogMSxcbiAgICAgICAgICBsYWJlbDogJ0BjaGguYWN0aW9uLnZhbGlkYXRlJyxcbiAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICBQcm9jZWR1cmVBY3Rpb25zLmRlbGV0ZUluc3RhbmNlKHtcbiAgICAgICAgICAgICAgaWQ6IHRoaXMucHJvY2VkdXJlIS5pZCxcbiAgICAgICAgICAgICAgcmV0dXJuVG9FdmVudDogdGhpcy5ldmVudHMubGVuZ3RoID09PSAxID8gKHRoaXMuZXZlbnRzWzBdIGFzIEh5cEV2ZW50RGV0YWlsc1dpdGhNYXRjaGluZykuaWQgOiB1bmRlZmluZWRcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXVxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgICB0aGlzLnByeURpYWxvZy5vcGVuKFByeURpYWxvZ0NvbmZpcm1Db21wb25lbnQsIHtcbiAgICAgIGRhdGEsXG4gICAgICBiYWNrZHJvcENsYXNzOiAnYmFja2Ryb3AtZGFyaycsXG4gICAgICBwYW5lbENsYXNzOiBbJ28taHZ5LWRlbGV0ZS1wcm9jZWR1cmUnXVxuICAgIH0pO1xuICB9XG5cbiAgb3BlbkNoYW5nZU1vZGFsKCl7XG4gICAgdGhpcy5vcGVuQXNzb2NpYXRpb25Nb2RhbCgnQGh2eS5ldmVudC5sb2cucHJvY2VkdXJlLm1vZGlmeScsIHRoaXMucHJvY2VkdXJlLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgY29udmVydERhdGUobmV3VmFsdWU/OiBzdHJpbmcpIHtcbiAgICByZXR1cm4gbmV3VmFsdWUgPyBuZXcgRGF0ZShuZXdWYWx1ZSkudG9JU09TdHJpbmcoKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGRpc3BsYXlFcXVpcG1lbnQoZXF1aXBtZW50OiBFcXVpcG1lbnRGb3JFdmVudCkge1xuICAgIGlmKGVxdWlwbWVudCAmJiBlcXVpcG1lbnQubmFtZSAmJiBlcXVpcG1lbnQuZmFtaWx5KSB7XG4gICAgICByZXR1cm4gZXF1aXBtZW50Lm5hbWUuY29uY2F0KFwiIC0gXCIsIHRoaXMuaTE4blNlcnZpY2UuaW5zdGFudCgnQGh2eS5ldmVudC5mYW1pbHkuJyArIGVxdWlwbWVudC5mYW1pbHkpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGdldEVxdWlwQ29udHJvbChpbmRleDogbnVtYmVyKXtcbiAgICByZXR1cm4gdGhpcy5lcXVpcENvbnRyb2xzLmF0KGluZGV4KSBhcyBGb3JtQ29udHJvbDtcbiAgfVxuXG4gIG9wZW5BdXRvY29tcGxldGUoaW5kZXg6IG51bWJlcil7XG4gICAgdGhpcy5vcGVuZWRBdXRvY29tcGxldGVbaW5kZXhdID0gIXRoaXMub3BlbmVkQXV0b2NvbXBsZXRlW2luZGV4XTtcbiAgICBjb25zdCBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb3ZvbHktZXZlbnQtZGV0YWlsLWNvbnRhaW5lcicpO1xuICAgIGlmKGIpe1xuICAgICAgYi5zdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG4gICAgfVxuICB9XG5cbiAgY2xvc2VBdXRvY29tcGxldGUoaW5kZXg6IG51bWJlcil7XG4gICAgdGhpcy5vcGVuZWRBdXRvY29tcGxldGVbaW5kZXhdID0gIXRoaXMub3BlbmVkQXV0b2NvbXBsZXRlW2luZGV4XTtcbiAgICBjb25zdCBiID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Byb3ZvbHktZXZlbnQtZGV0YWlsLWNvbnRhaW5lcicpO1xuICAgIGlmKGIpe1xuICAgICAgYi5zdHlsZS5vdmVyZmxvdyA9IFwiYXV0b1wiO1xuICAgIH1cbiAgICB0aGlzLm1hbmFnZUVxdWlwbWVudChpbmRleCk7XG4gICAgdGhpcy5fb3V0cHV0TW9kaWZpY2F0aW9ucygpO1xuICB9XG5cbiAgb3Blbk9yQ2xvc2VBdXRvY29tcGxldGUoZXZlbnQ6IEV2ZW50LCB0cmlnZ2VyOiBNYXRBdXRvY29tcGxldGVUcmlnZ2VyLCBpbmRleDogbnVtYmVyKXtcbiAgICBjb25zdCBnZXRFdmVudCA9IHRoaXMuZXZlbnRzLmF0KGluZGV4KSBhcyBIeXBFdmVudERldGFpbHM7XG4gICAgaWYoZ2V0RXZlbnQgJiYgKGdldEV2ZW50LnN0YXR1cyAhPT0gJ0RPTkUnICYmIGdldEV2ZW50LnN0YXR1cyAhPT0gJ0FSQ0hJVkVEJykpe1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICB0aGlzLm9wZW5lZEF1dG9jb21wbGV0ZVtpbmRleF0gPyB0cmlnZ2VyLmNsb3NlUGFuZWwoKSA6IHRyaWdnZXIub3BlblBhbmVsKCk7XG4gICAgfVxuICB9XG5cbiAgZXF1aXBtZW50RXZlbnRzRm9yVG9vbHRpcDogeyBldmVudHM/OiBIeXBFdmVudERldGFpbHNbXTsgc2VydmljZXM/OiBIeXBTZXJ2aWNlVG9vbHRpcFtdIH1bXSA9IFtdO1xuXG4gIHByaXZhdGUgZ2V0RGF0YUZvclRvb2x0aXAoJGV2ZW50OiBIeXBFcXVpcG1lbnQgfCB1bmRlZmluZWQsIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmVxdWlwbWVudEV2ZW50c0ZvclRvb2x0aXBbaW5kZXhdID0ge307XG4gICAgaWYgKCRldmVudCkge1xuICAgICAgdGhpcy5lcXVpcG1lbnRTZXJ2aWNlLmZpbmRCeU5hbWUoJGV2ZW50Lm5hbWUpLnN1YnNjcmliZSgoZXF1aXApID0+IHtcbiAgICAgICAgdGhpcy5lcXVpcG1lbnRFdmVudHNGb3JUb29sdGlwW2luZGV4XS5ldmVudHMgPSBlcXVpcC5ldmVudHMuZmlsdGVyKGV2ZW50ID0+IGV2ZW50LnN0YXR1cyAhPT0gJ0FSQ0hJVkVEJyk7XG4gICAgICAgIHRoaXMuZXF1aXBtZW50RXZlbnRzRm9yVG9vbHRpcFtpbmRleF0uc2VydmljZXMgPSBlcXVpcC5zZXJ2aWNlcztcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHRvZ2dsZURldGFpbHNUb29sdGlwKGlkeDogbnVtYmVyKSB7XG4gICAgICAvL29uIGZlcm1lIGxhIHRvb2x0aXAgZXhpc3RhbnRlIHNpIGVsbGUgZXhpc3RlXG4gICAgICBpZih0aGlzLnRvb2x0aXBSZWYuZGlhbG9nICE9PSBudWxsKSB7XG4gICAgICAgIHRoaXMudG9vbHRpcFJlZi5kaWFsb2cuY2xvc2UoKTtcbiAgICAgICAgdGhpcy50b29sdGlwUmVmLmRpYWxvZyA9IG51bGw7XG4gICAgICAgIC8vIHNpIGluZGV4IGRpZmbDqXJlbnRzLCBvbiBvdXZyZSBhdXNzaSB1bmUgbm91dmVsbGUgdG9vbHRpcFxuICAgICAgICBpZihpZHggIT09IHRoaXMudG9vbHRpcFJlZi5pbmRleCkge1xuICAgICAgICAgIHRoaXMudG9vbHRpcFJlZi5kaWFsb2cgPSB0aGlzLm9wZW5Ub29sdGlwKGlkeCk7XG4gICAgICAgICAgdGhpcy50b29sdGlwUmVmLmluZGV4ID0gaWR4O1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRvb2x0aXBSZWYuZGlhbG9nID0gdGhpcy5vcGVuVG9vbHRpcChpZHgpO1xuICAgICAgICB0aGlzLnRvb2x0aXBSZWYuaW5kZXggPSBpZHhcbiAgICAgIH1cbiAgfVxuXG4gIG9wZW5Ub29sdGlwKGluZGV4OiBudW1iZXIpIHtcbiAgICBsZXQgdG9vbHRpcCA6IFByeURpYWxvZ1JlZjxIdnlFdmVudERldGFpbHNUb29sdGlwQ29tcG9uZW50PiB8IG51bGwgPSAgdGhpcy5wcnlEaWFsb2cub3BlbihIdnlFdmVudERldGFpbHNUb29sdGlwQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB0aGlzLmVxdWlwbWVudEV2ZW50c0ZvclRvb2x0aXBbaW5kZXhdID8/IHsgZXZlbnRzOiBbXSwgc2VydmljZXM6IFtdIH0sXG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBvdmVybGF5Q29uZmlnOiB7XG4gICAgICAgIHBvc2l0aW9uU3RyYXRlZ3k6IHRoaXMub3ZlcmxheVxuICAgICAgICAgIC5wb3NpdGlvbigpXG4gICAgICAgICAgLmZsZXhpYmxlQ29ubmVjdGVkVG8odGhpcy5kZXRhaWxIb3Zlckljb24uZ2V0KGluZGV4KSEpXG4gICAgICAgICAgLndpdGhQb3NpdGlvbnMoW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBvcmlnaW5YOiAnZW5kJyxcbiAgICAgICAgICAgICAgb3JpZ2luWTogJ2JvdHRvbScsXG4gICAgICAgICAgICAgIG92ZXJsYXlYOiAnc3RhcnQnLFxuICAgICAgICAgICAgICBvdmVybGF5WTogJ3RvcCdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICBdKVxuICAgICAgfVxuICAgIH0pO1xuICAgIHRvb2x0aXAuY2xvc2VWYWx1ZS5waXBlKHRha2UoMSkpLnN1YnNjcmliZSgodmFsdWUpID0+IHtcbiAgICAgIHRvb2x0aXAgPSBudWxsO1xuICAgIH0pO1xuICAgIHJldHVybiB0b29sdGlwO1xuICB9XG5cbiAgc2VsZWN0ZWRQYXJlbnRDaGFuZ2UoJGV2ZW50OiBzdHJpbmcgfCBIeXBFdmVudERldGFpbHMsIGluZGV4OiBudW1iZXIpIHtcbiAgICB0aGlzLmV2ZW50U2VsZWN0VmFsdWVbaW5kZXhdID0gJGV2ZW50O1xuICAgIHRoaXMub25FdmVudFNlYXJjaCQubmV4dChpbmRleCk7XG4gICAgaWYgKHR5cGVvZiAkZXZlbnQgPT09ICdvYmplY3QnIHx8ICRldmVudCA9PT0gJycpIHtcbiAgICAgIGNvbnN0IHBhcmVudEZvckV2ZW50ID0gJGV2ZW50ICE9PSAnJyA/IHsgaWQ6ICRldmVudC5pZCwgbmFtZTogJGV2ZW50Lm5hbWUgfSA6IHVuZGVmaW5lZDtcbiAgICAgIGlmICghcGFyZW50Rm9yRXZlbnQgfHwgdGhpcy5fZXZlbnRzW2luZGV4XS5wYXJlbnQ/LmlkICE9PSBwYXJlbnRGb3JFdmVudC5pZCkge1xuICAgICAgICBpZiAoIXRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XSkge1xuICAgICAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XS5wYXJlbnQgPSBwYXJlbnRGb3JFdmVudDtcbiAgICAgICAgdGhpcy5fb3V0cHV0TW9kaWZpY2F0aW9ucygpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCEhdGhpcy5ldmVudE1vZGlmaWNhdGlvbnNbaW5kZXhdKSB7XG4gICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgIGRlbGV0ZSB0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0ucGFyZW50O1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLmV2ZW50TW9kaWZpY2F0aW9uc1tpbmRleF0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgZGVsZXRlIHRoaXMuZXZlbnRNb2RpZmljYXRpb25zW2luZGV4XTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5fb3V0cHV0TW9kaWZpY2F0aW9ucygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX291dHB1dE1vZGlmaWNhdGlvbnMoKTtcbiAgICB9XG4gIH1cblxuICBhZGRPbmVFdmVudCgpIHtcbiAgICBjb25zdCByZWYgPSB0aGlzLnByeURpYWxvZy5vcGVuKEh2eUV2ZW50QWRkRXZlbnRDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHsgcHJvY2VkdXJlOiB0aGlzLnByb2NlZHVyZSB9LFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2JhY2tkcm9wLWRhcmsnXG4gICAgfSk7XG5cbiAgICByZWYuY2xvc2VWYWx1ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBzd2l0Y2ggKHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ2FkZCc6XG4gICAgICAgICAgdGhpcy5hZGRlZEV2ZW50Lm5leHQodmFsdWUuZXZlbnQpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgcmVmLmNsb3NlKCk7XG4gICAgfSk7XG4gIH1cblxuICByZW1vdmVPbmVFdmVudChldmVudDogSHlwRXZlbnREZXRhaWxzKXtcbiAgICBjb25zdCByZWYgPSB0aGlzLnByeURpYWxvZy5vcGVuKFJlbW92ZUV2ZW50Q29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7ZXZlbnR9LFxuICAgICAgYmFja2Ryb3BDbGFzczogJ2JhY2tkcm9wLWRhcmsnXG4gICAgfSk7XG5cbiAgICByZWYuY2xvc2VWYWx1ZS5zdWJzY3JpYmUoKHZhbHVlKSA9PiB7XG4gICAgICBzd2l0Y2ggKHZhbHVlLnZhbHVlKSB7XG4gICAgICAgIGNhc2UgJ3JlbW92ZSc6XG4gICAgICAgICAgdGhpcy5yZW1vdmVkRXZlbnQubmV4dCh2YWx1ZS5ldmVudCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgICByZWYuY2xvc2UoKTtcbiAgICB9KTtcbiAgfVxuXG4gIHNob3dSZW1vdmVFdmVCdXR0b24oZXZlbnQ6IEh5cEV2ZW50RGV0YWlscykge1xuICAgIHJldHVybiB0aGlzLmV2ZW50cy5sZW5ndGggPiAxICYmXG4gICAgICB0aGlzLmV2ZW50cy5maWx0ZXIoKGV2ZW50OiBIeXBFdmVudERldGFpbHMpID0+IGV2ZW50LnN0YXR1cyA9PT0gJ0lOX1BST0dSRVNTJykubGVuZ3RoID49IDEgJiZcbiAgICAgIGV2ZW50LnN0YXR1cyA9PT0gJ0lOX1BST0dSRVNTJztcbiAgfVxuXG4gIGFjdGlvbkNvbW1lbnRlZCgkZXZlbnQ6IHsgYWN0aW9uOiBIeXBBY3Rpb247IGNvbW1lbnRzOiBIeXBDb21tZW50W10gfSkge1xuICAgIHRoaXMubW9kaWZpZWRQcm9jZWR1cmUubmV4dCh0aGlzLnByb2NlZHVyZSA/IFt0aGlzLnByb2NlZHVyZU1vZGlmaWNhdGlvbnMsIHRoaXMucHJvY2VkdXJlIV0gOiB1bmRlZmluZWQpO1xuICAgIHRoaXMuY29tbWVudGVkLm5leHQoJGV2ZW50KTtcbiAgfVxuXG4gIHVwZGF0ZUNvbW1lbnQoZXZlbnQ6IEh5cEV2ZW50RGV0YWlscywgY29tbWVudDogeyBpZDogc3RyaW5nOyBtZXNzYWdlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuY29tbWVudHNTZXJ2aWNlLnNhdmUoZXZlbnQuaWQsICdldmVudHMnLCBjb21tZW50KS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgbGV0IGV2ZW50c0FuZENvbW1lbnRzOiB7IGV2ZW50OiBIeXBFdmVudERldGFpbHM7IGNvbW1lbnRzOiBIeXBDb21tZW50W10gfVtdID0gW107XG4gICAgICBsZXQgY29tbWVudHMkOiBPYnNlcnZhYmxlPEh5cENvbW1lbnRbXT5bXSA9IFtdO1xuICAgICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHRoaXMuX2V2ZW50cy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgY29tbWVudHMkLnB1c2godGhpcy5jb21tZW50c1NlcnZpY2UuZ2V0KHRoaXMuX2V2ZW50c1tpbmRleF0uaWQsICdldmVudHMnKSk7XG4gICAgICB9XG4gICAgICB6aXAoY29tbWVudHMkKVxuICAgICAgICAucGlwZSh0YWtlKDEpKVxuICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICBuZXh0OiAoY29tbWVudHNBcnJheSkgPT4ge1xuICAgICAgICAgICAgY29tbWVudHNBcnJheS5mb3JFYWNoKChjb21tZW50cywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgZXZlbnRzQW5kQ29tbWVudHMucHVzaCh7IGV2ZW50OiB0aGlzLl9ldmVudHNbaW5kZXhdLCBjb21tZW50czogY29tbWVudHMgYXMgSHlwQ29tbWVudFtdIH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb21tZW50ZWQubmV4dChldmVudHNBbmRDb21tZW50cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIG92ZXJyaWRlIG5nT25EZXN0cm95KCkge1xuICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgdGhpcy50b29sdGlwUmVmLmRpYWxvZz8uY2xvc2UoKTtcbiAgICB0aGlzLnRvb2x0aXBSZWYuZGlhbG9nID0gbnVsbDtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxcIj5cbiAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2hlYWRlclwiPlxuICAgIDxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudHMtZGV0YWlsX19oZWFkZXJfX3NwbGl0XCI+XG4gICAgICA8aDE+e3sgdGl0bGUgPz8gJ0BodnkuZXZlbnQuZGV0YWlsJyB8IGkxOG4gfX0ge3tldmVudHMubGVuZ3RoID4gMSA/ICcoJytldmVudHMubGVuZ3RoKycpJzogJyd9fTwvaDE+XG4gICAgICBAaWYgKHByb2NlZHVyZSAmJiBjYW5DbG9zZVNvbWUpIHtcbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImFkZC1idXR0b25cIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlcIiAoY2xpY2spPVwiYWRkT25lRXZlbnQoKVwiPlxuICAgICAgICAgIDxwcnktaWNvbiBpY29uU3ZnPVwiYWRkXCIgW3dpZHRoXT1cIjE4XCIgW2hlaWdodF09XCIxOFwiPjwvcHJ5LWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgICAgQGlmIChldmVudHMubGVuZ3RoID4gMSkge1xuICAgICAgICBAaWYgKGNhbkNsb3NlU29tZSAmJiAhcmVhZG9ubHkpIHtcbiAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeSAtZml4LXJpZ2h0XCIgW2Rpc2FibGVkXT1cIiFjYW5DbG9zZVNvbWUgfHwgKCEhcHJvY2VkdXJlICYmIGNhbGN1bGF0ZWRQcm9ncmVzcyAhPT0gMTAwKVwiIChjbGljayk9XCJjbG9zZUFsbCgpXCI+XG4gICAgICAgICAgICB7eyAoY2FuQ2xvc2VTb21lID8gJ0BodnkuZXZlbnQubG9nLmV2ZW50LmNsb3NlJyA6ICdAaHZ5LmV2ZW50LmxvZy5ldmVudC5jbG9zZWQnKSB8IGkxOG4gfX1cbiAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgfVxuICAgICAgICBAaWYgKCFjYW5DbG9zZVNvbWUgJiYgY2xvc2VDb21tZW50ICYmIGNsb3NlQ29tbWVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImEtdG9vbHRpcFwiIFthdHRyLmRhdGEtdG9vbHRpcF09XCJjbG9zZUNvbW1lbnRcIiBkYXRhLXRvb2x0aXAtcG9zaXRpb249XCJyaWdodFwiPlxuICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJpXCIgW2hlaWdodF09XCIxOFwiIFt3aWR0aF09XCIxOFwiPmk8L3ByeS1pY29uPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG4gICAgICB9XG4gICAgPC9kaXY+XG4gICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2hlYWRlcl9fc3BsaXQgZXZlbnQtZGV0YWlsLWJ1dHRvbnMtbGVmdFwiPlxuICAgICAgQGlmIChwcm9jZWR1cmUgJiYgIXJlYWRvbmx5KSB7XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cIm9wZW5DaGFuZ2VNb2RhbCgpXCIgW2Rpc2FibGVkXT1cInJlYWRvbmx5UHJvY2VkdXJlXCI+XG4gICAgICAgICAge3sgJ0BodnkuZXZlbnQubG9nLnByb2NlZHVyZS5tb2RpZnknIHwgaTE4biB9fVxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImEtYnRuIGEtYnRuLS1zZWNvbmRhcnlcIiAoY2xpY2spPVwib3BlbkRlbGV0ZU1vZGFsKClcIiBbZGlzYWJsZWRdPVwicmVhZG9ubHlQcm9jZWR1cmVcIj5cbiAgICAgICAgICB7eyAnQGh2eS5ldmVudC5sb2cucHJvY2VkdXJlLmRlbGV0ZScgfCBpMThuIH19XG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgfVxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbiAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2NvbnRhaW5lclwiIGlkPVwicHJvdm9seS1ldmVudC1kZXRhaWwtY29udGFpbmVyXCI+XG4gICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2NvbnRhaW5lcl9fc2Nyb2xsYWJsZVwiPlxuICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2V2ZW50c1wiPlxuICAgICAgICBAZm9yIChldmVudCBvZiBldmVudHM7IHRyYWNrIGV2ZW50LmlkOyBsZXQgaWR4ID0gJGluZGV4KSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2V2ZW50c19fZXZlbnRcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudHMtZGV0YWlsX19ldmVudHNfX2V2ZW50X19oZWFkZXJcIj5cbiAgICAgICAgICAgICAgPHByeS1pY29uXG4gICAgICAgICAgICAgICAgaWNvblN2Zz1cImFycm93X2Rvd25fcm91bmRlZFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLi1yb3RhdGVkXT1cIm9wZW5lZFtpZHhdXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIi1oYW5kXCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwidG9nZ2xlKGlkeClcIlxuICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxMFwiXG4gICAgICAgICAgICAgICAgW2hlaWdodF09XCIxMFwiXG4gICAgICAgICAgICAgID48L3ByeS1pY29uPlxuICAgICAgICAgICAgICA8aHZ5LWljb24tZGlzcGxheSBbZXZlbnRdPVwiZXZlbnRcIj48L2h2eS1pY29uLWRpc3BsYXk+XG4gICAgICAgICAgICAgIDxoMj57eyBldmVudC5uYW1lIH19PC9oMj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2V2ZW50c19fZXZlbnRfX2hlYWRlcl9fY29tbWVudFwiPlxuICAgICAgICAgICAgICAgIEBpZiAoZXZlbnQuY29tbWVudENvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgPHNwYW4+e3tcbiAgICAgICAgICAgICAgICAgICAgKGV2ZW50LmNvbW1lbnRDb3VudCA+IDEgPyAnQGh2eS5ldmVudC5jb21tZW50LmhlYWRzJyA6ICdAaHZ5LmV2ZW50LmNvbW1lbnQuaGVhZCcpXG4gICAgICAgICAgICAgICAgICAgICAgfCBpMThuOiB7IG5iOiBldmVudC5jb21tZW50Q291bnQgfVxuICAgICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2hlYWRlcl9fc3BsaXQgZGV0YWlsLXJlbW92ZS1ldmVcIj5cbiAgICAgICAgICAgICAgICBAaWYgKHNob3dSZW1vdmVFdmVCdXR0b24oZXZlbnQpKSB7XG4gICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYWRkLWJ1dHRvblwiIFtkaXNhYmxlZF09XCJyZWFkb25seVwiIChjbGljayk9XCJyZW1vdmVPbmVFdmVudChldmVudClcIj5cbiAgICAgICAgICAgICAgICAgICAgPHByeS1pY29uIGljb25Tdmc9XCJyZW1vdmVcIiBbd2lkdGhdPVwiMThcIiBbaGVpZ2h0XT1cIjE4XCI+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxodnktc3RhdHVzLWRpc3BsYXlcbiAgICAgICAgICAgICAgICBbaXRlbV09XCJldmVudFwiXG4gICAgICAgICAgICAgICAgW21vZGlmaWFibGVdPVwiKCEhcHJvY2VkdXJlICYmIGNhbGN1bGF0ZWRQcm9ncmVzcyA9PT0gMTAwKSB8fCAhcHJvY2VkdXJlXCJcbiAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwicmVhZG9ubHlcIlxuICAgICAgICAgICAgICAgIChtb2RpZmllZCk9XCJjaGFuZ2VTdGF0dXMoJGV2ZW50LCBldmVudClcIlxuICAgICAgICAgICAgICA+PC9odnktc3RhdHVzLWRpc3BsYXk+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudHMtZGV0YWlsX19ldmVudHNfX2V2ZW50X19jb250ZW50XCI+XG4gICAgICAgICAgICAgIEBpZiAoIW9wZW5lZFtpZHhdKSB7XG4gICAgICAgICAgICAgICAgPGRpdj5cbiAgICAgICAgICAgICAgICAgIHt7ICdAaHZ5LmV2ZW50LmxvZy5ldmVudC5jYXRlZ29yeScgfCBpMThuIH19IDoge3sgJ0BodnkuZXZlbnQuY2F0ZWdvcnkuJyArIGV2ZW50LmNhdGVnb3J5IHwgaTE4biB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXY+e3sgJ0BodnkuZXZlbnQubG9nLmV2ZW50LmRlc2NyaXB0aW9uJyB8IGkxOG4gfX0gOiB7eyBldmVudC5kZXNjcmlwdGlvbiB9fTwvZGl2PlxuICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICBAaWYgKGFjY2VzcyhldmVudCk7IGFzIGFjY2Vzc1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fZXZlbnRzX19ldmVudF9fY29udGVudF9faGVhZGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxoMz57eyAnQGh2eS5ldmVudC5sb2cuZXZlbnQuZGV0YWlsJyB8IGkxOG4gfX08L2gzPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+e3sgJ0BodnkuZXZlbnQubG9nLmV2ZW50Lm1hbmRhdG9yeScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8dGFibGU+XG4gICAgICAgICAgICAgICAgICAgIDx0Ym9keT5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0taWRlbnRpZmlhbnQtLT5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGV2ZW50LmlkID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQubG9nLmV2ZW50LmlkJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImEtZm9ybS1maWVsZFwiIFt2YWx1ZV09XCJwYWRJZC5mbihldmVudC5pZClcIiBbcmVhZG9ubHldPVwidHJ1ZVwiIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLW5vbS0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5sb2cuZXZlbnQubmFtZScgfCBpMThuIH19PHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZXJyb3JdPVwiaGFzRXJyb3IoJ25hbWUnLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZXZlbnQubmFtZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJtb2RpZnlFdmVudChpZHgsICduYW1lJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImFjY2Vzc1ZhbHVlLm5hbWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiNTBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWNhdGVnb3JpZS0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5sb2cuZXZlbnQuY2F0ZWdvcnknIHwgaTE4biB9fTxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiA6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJldmVudC5jYXRlZ29yeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cImNhdGVnb3JpZXMoZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdjYXRlZ29yeScsIGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm1vZGlmeUV2ZW50KGlkeCwgJ2NhdGVnb3J5JywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaTE4blByZWZpeD1cIkBodnkuZXZlbnQuY2F0ZWdvcnkuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWNjZXNzVmFsdWUuY2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLXNvdXMgY2F0ZWdvcmllLS0+XG4gICAgICAgICAgICAgICAgICAgICAgQGlmIChldmVudC5jYXRlZ29yeSA9PT0gJ0FOT01BTFknKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5zdWJDYXRlZ29yeS5uYW1lJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZXZlbnQuc3ViQ2F0ZWdvcnlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2l0ZW1zXT1cInN1YkNhdGVnb3JpZXNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLi1lcnJvcl09XCJoYXNFcnJvcignc3ViQ2F0ZWdvcnknLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm1vZGlmeUV2ZW50KGlkeCwgJ3N1YkNhdGVnb3J5JywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQGh2eS5ldmVudC5zdWJDYXRlZ29yeS5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFjY2Vzc1ZhbHVlLnN1YkNhdGVnb3J5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1jcml0aWNpdGUtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQuY3JpdGljYWxpdHkubmFtZScgfCBpMThuIH19PHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImV2ZW50LmNyaXRpY2FsaXR5XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiY3JpdGljYWxpdGllc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLi1lcnJvcl09XCJoYXNFcnJvcignY3JpdGljYWxpdHknLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQGh2eS5ldmVudC5jcml0aWNhbGl0eS5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhY2Nlc3NWYWx1ZS5jcml0aWNhbGl0eVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5nTW9kZWxDaGFuZ2UpPVwibW9kaWZ5RXZlbnQoaWR4LCAnY3JpdGljYWxpdHknLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1tZXRpZXItLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQuZG9tYWluLm5hbWUnIHwgaTE4biB9fSA6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwiRE9NQUlOU1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZXZlbnQuZG9tYWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpMThuUHJlZml4PVwiQGh2eS5ldmVudC5kb21haW4uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdkb21haW4nLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJtb2RpZnlFdmVudChpZHgsICdkb21haW4nLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWNjZXNzVmFsdWUuZG9tYWluXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1lcXVpcGVtZW50LS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50LmVxdWlwbWVudCcgfCBpMThuIH19IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGQtYXV0b2NvbXBsZXRlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtYXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQGh2eS5ldmVudC5lcXVpcG1lbnRQbGFjZWhvbGRlcicgfCBpMThuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXRBdXRvY29tcGxldGVdPVwiYXV0b1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiZ2V0RXF1aXBDb250cm9sKGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nQ2xhc3NdPVwieydlcXVpcG1lbnQtZGlzYWJsZWQnOiBldmVudC5zdGF0dXMgPT09ICdET05FJyB8fCBldmVudC5zdGF0dXMgPT09ICdBUkNISVZFRCd9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICN0cmlnZ2VyPVwibWF0QXV0b2NvbXBsZXRlVHJpZ2dlclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdlcXVpcG1lbnQnLCBpZHgpXCIvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8bWF0LWF1dG9jb21wbGV0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICNhdXRvPVwibWF0QXV0b2NvbXBsZXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzcGxheVdpdGhdPVwiZGlzcGxheUVxdWlwbWVudC5iaW5kKHRoaXMpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3BlbmVkKT1cIm9wZW5BdXRvY29tcGxldGUoaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsb3NlZCk9XCJjbG9zZUF1dG9jb21wbGV0ZShpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGVxdWlwbWVudCBvZiBlcXVpcG1lbnRzJFtpZHhdIHwgYXN5bmM7IHRyYWNrIGVxdWlwbWVudCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImVxdWlwbWVudFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e2VxdWlwbWVudC5uYW1lfX0gLSB7eydAaHZ5LmV2ZW50LmZhbWlseS4nICsgZXF1aXBtZW50LmZhbWlseSB8IGkxOG59fVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC9tYXQtYXV0b2NvbXBsZXRlPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1wcnktc2VsZWN0X190b2dnbGUgYXV0b2NvbXBsZXRlLWNoZXZyb25cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpY29uU3ZnXT1cIm9wZW5lZEF1dG9jb21wbGV0ZVtpZHhdPyAnY2hldnJvbl90b3AnIDogJ2NoZXZyb25fYm90dG9tJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3dpZHRoXT1cIjEwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE2XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwib3Blbk9yQ2xvc2VBdXRvY29tcGxldGUoJGV2ZW50LCB0cmlnZ2VyLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcHJ5LWljb24+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuXG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0ZWRFcXVpcG1lbnRbaWR4XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxwcnktaWNvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN2Zz1cImlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCItaGFuZCBhbmNob3ItdG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdDbGFzc109XCInYW5jaG9yLXRvb2x0aXAtJysgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzdHlsZS5hbmNob3ItbmFtZV09XCInLS1teS1hbmNob3InICsgaWR4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICNkZXRhaWxIb3Zlckljb25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJ0b2dnbGVEZXRhaWxzVG9vbHRpcChpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt3aWR0aF09XCIxOFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaGVpZ2h0XT1cIjE4XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktaWNvbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1lbnRpdGUtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQuZXF1aXBtZW50RW50aXR5JyB8IGkxOG4gfX0gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLi1lcnJvcl09XCJoYXNFcnJvcignZXF1aXBtZW50JywgaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LmVxdWlwbWVudD8uZW50aXR5ID8gJ0BodnkuZXZlbnQuZW50aXR5LicgKyBldmVudC5lcXVpcG1lbnQ/LmVudGl0eSA6ICcnKSB8IGkxOG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tYWRyZXNzZS0tPlxuICAgICAgICAgICAgICAgICAgICAgIDx0cj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5sb2cuZXZlbnQuYWRkcmVzcycgfCBpMThuIH19IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJldmVudC5hZGRyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLi1lcnJvcl09XCJoYXNFcnJvcignYWRkcmVzcycsIGlkeClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJhY2Nlc3NWYWx1ZS5hZGRyZXNzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJtb2RpZnlFdmVudChpZHgsICdhZGRyZXNzJywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW21heExlbmd0aF09XCIyNTZcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhZHJlc3NEaXNhYmxlZFtpZHhdIHx8IGV2ZW50LnN0YXR1cyA9PT0gJ0RPTkUnXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tdmlsbGUtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQuZGlzdHJpY3QnIHwgaTE4biB9fSA6PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHByeS1zZWxlY3RcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbaXRlbXNdPVwicGxhY2VzQ2hvaWNlc1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW25nTW9kZWxdPVwiZXZlbnQuZGlzdHJpY3RcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiaW5kVmFsdWVdPVwiJ2tleSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImRpc3BsYXlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkxOG5QcmVmaXg9XCJAaHZ5LmV2ZW50LnBsYWNlcy5cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cIm1vZGlmeUV2ZW50KGlkeCwgJ2Rpc3RyaWN0JywgJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cImFkcmVzc0Rpc2FibGVkW2lkeF0gfHwgZXZlbnQuc3RhdHVzID09PSAnRE9ORSdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9wcnktc2VsZWN0PlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWV2ZW5lbWVudCBwYXJlbnQtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQucGFyZW50RXZlbnQubmFtZScgfCBpMThuIH19IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8cHJ5LXNlbGVjdFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtpdGVtc109XCJldmVudHMkIHwgYXN5bmNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRMYWJlbD1cImRpc3BsYXlOYW1lXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJldmVudFNlbGVjdFZhbHVlW2lkeF1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZ01vZGVsQ2hhbmdlKT1cInNlbGVjdGVkUGFyZW50Q2hhbmdlKCRldmVudCwgaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2F1dG9jb21wbGV0ZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXh0ZXJuYWxBdXRvY29tcGxldGVTZXJ2aWNlXT1cInRydWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGFjZWhvbGRlcl09XCInQGh2eS5ldmVudC5wYXJlbnRFdmVudC5wbGFjZWhvbGRlcicgfCBpMThuXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZD1cInBhcmVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RlbXBsYXRlXT1cInRlbXBsYXRlUGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiYWNjZXNzVmFsdWUucGFyZW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdwYXJlbnQnLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX2V2ZW50c19fZXZlbnRfX2NvbnRlbnRfX2VxdWlwbWVudFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3ByeS1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjdGVtcGxhdGVQYXJlbnQgbGV0LWl0ZW09XCJpdGVtXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInUtZGlzcGxheS1mbGV4IC1jb2x1bW5cIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIFtpbm5lckhUTUxdPVwiaXRlbS5odG1sXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWRlc2NyaXB0aW9uLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50LmxvZy5ldmVudC5kZXNjcmlwdGlvbicgfCBpMThuIH19PHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8dGV4dGFyZWFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJldmVudC5kZXNjcmlwdGlvblwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjbGFzcy4tZXJyb3JdPVwiaGFzRXJyb3IoJ2Rlc2NyaXB0aW9uJywgaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImFjY2Vzc1ZhbHVlLmRlc2NyaXB0aW9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmdNb2RlbENoYW5nZSk9XCJtb2RpZnlFdmVudChpZHgsICdkZXNjcmlwdGlvbicsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFttYXhMZW5ndGhdPVwiMTAyNFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgID48L3RleHRhcmVhPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWRhdGUgZGVidXQtLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdAaHZ5LmV2ZW50LnN0YXJ0RGF0ZScgfCBpMThuIH19XG4gICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoZXZlbnQuY2F0ZWdvcnkgPT09ICdNQU5JRkVTVEFUSU9OJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDpcbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJldmVudC5zdGFydERhdGUgfCBmb3JEYXRlVGltZUxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdzdGFydERhdGUnLCBpZHgpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwiYWNjZXNzVmFsdWUuc3RhcnREYXRlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhbmdlKT1cIm1vZGlmeUV2ZW50KGlkeCwgJ3N0YXJ0RGF0ZScsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWRhdGUgZmluLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB7eyAnQGh2eS5ldmVudC5lbmREYXRlJyB8IGkxOG4gfX1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChldmVudC5jYXRlZ29yeSA9PT0gJ01BTklGRVNUQVRJT04nKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgOlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImRhdGV0aW1lLWxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImEtZm9ybS1maWVsZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZhbHVlXT1cImV2ZW50LmVuZERhdGUgfCBmb3JEYXRlVGltZUxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY2xhc3MuLWVycm9yXT1cImhhc0Vycm9yKCdlbmREYXRlJywgaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImFjY2Vzc1ZhbHVlLmVuZERhdGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFuZ2UpPVwibW9kaWZ5RXZlbnQoaWR4LCAnZW5kRGF0ZScsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGhhc0Vycm9yKCdlbmREYXRlJywgaWR4KSAmJiBldmVudC5lbmREYXRlICYmIGV2ZW50LnN0YXJ0RGF0ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYS1mb3JtLWZpZWxkIC1lcnJvclwiPnt7ICdAaHZ5LmV2ZW50LmVycm9yRGF0ZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tc291cmNlLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50LnNvdXJjZScgfCBpMThuIH19PHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJldmVudC5leHRlcm5hbFNvdXJjZVJlZiA/PyAoJ0BodnkuZXZlbnQuaHlwZXJ2aXNvcicgfCBpMThuKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NsYXNzLi1lcnJvcl09XCJoYXNFcnJvcignc291cmNlJywgaWR4KVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3JlYWRvbmx5XT1cImFjY2Vzc1ZhbHVlLnNvdXJjZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJtb2RpZnlFdmVudChpZHgsICdzb3VyY2UnLCAkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIDwhLS1yZWbDqXJlbmNlIGV4dGVybmUtLT5cbiAgICAgICAgICAgICAgICAgICAgICBAaWYgKGV2ZW50LmV4dGVybmFsU291cmNlUmVmICE9PSAnSHlwZXJ2aXNldXInKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD57eyAnQGh2eS5ldmVudC5leHRlcm5hbElkJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJldmVudC5leHRlcm5hbElkID8/ICctJ1wiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcmVhZG9ubHldPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tY3JlYXRldXItLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQuY3JlYXRvcicgfCBpMThuIH19PHNwYW4gY2xhc3M9XCJyZXF1aXJlZFwiPio8L3NwYW4+IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImEtZm9ybS1maWVsZFwiIFt2YWx1ZV09XCJldmVudC5jcmVhdG9yXCIgW3JlYWRvbmx5XT1cInRydWVcIiAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWRhdGUgY3JlYXRpb24tLT5cbiAgICAgICAgICAgICAgICAgICAgICA8dHI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+e3sgJ0BodnkuZXZlbnQuY3JlYXRpb25EYXRlJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJldmVudC5jcmVhdGlvbkRhdGUgfCBmb3JEYXRlVGltZUxvY2FsXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkb25seVxuICAgICAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48L3RkPlxuICAgICAgICAgICAgICAgICAgICAgIDwvdHI+XG4gICAgICAgICAgICAgICAgICAgICAgPCEtLWRhdGUgbW9kaWZpY2F0aW9uLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50Lmxhc3RNb2RpZmljYXRpb25EYXRlJyB8IGkxOG4gfX08c3BhbiBjbGFzcz1cInJlcXVpcmVkXCI+Kjwvc3Bhbj4gOjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJkYXRldGltZS1sb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJhLWZvcm0tZmllbGRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2YWx1ZV09XCJldmVudC5sYXN0TW9kaWZpY2F0aW9uRGF0ZSB8IGZvckRhdGVUaW1lTG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRvbmx5XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgPC90cj5cbiAgICAgICAgICAgICAgICAgICAgICA8IS0tZGF0ZSBjbG90dXJlLS0+XG4gICAgICAgICAgICAgICAgICAgICAgPHRyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPnt7ICdAaHZ5LmV2ZW50LmNsb3NlRGF0ZScgfCBpMThuIH19IDo8L3RkPlxuICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiZGF0ZXRpbWUtbG9jYWxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdmFsdWVdPVwiZXZlbnQuY2xvc2VEYXRlIHwgZm9yRGF0ZVRpbWVMb2NhbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZG9ubHlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XG4gICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PC90ZD5cbiAgICAgICAgICAgICAgICAgICAgICA8L3RyPlxuICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PlxuICAgICAgICAgICAgICAgICAgPC90YWJsZT5cbiAgICAgICAgICAgICAgICAgIEBpZiAoZXZlbnQuaWQgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIDxodnktY29tbWVudHNcbiAgICAgICAgICAgICAgICAgICAgICBbbGFzdENvbW1lbnRdPVwiZXZlbnQubGFzdENvbW1lbnRcIlxuICAgICAgICAgICAgICAgICAgICAgIFtjb21tZW50Q291bnRdPVwiZXZlbnQuY29tbWVudENvdW50XCJcbiAgICAgICAgICAgICAgICAgICAgICAoY29tbWVudGVkKT1cInVwZGF0ZUNvbW1lbnQoZXZlbnQsICRldmVudClcIlxuICAgICAgICAgICAgICAgICAgICAgIFtyZWFkb25seV09XCJldmVudC5zdGF0dXMgPT09ICdET05FJyB8fCBldmVudC5zdGF0dXMgPT09ICdBUkNISVZFRCdcIlxuICAgICAgICAgICAgICAgICAgICAgIFt0eXBlXT1cIidldmVudHMnXCJcbiAgICAgICAgICAgICAgICAgICAgICBbbWVdPVwibWU/LnN1YlwiXG4gICAgICAgICAgICAgICAgICAgICAgW29iamVjdElkXT1cImV2ZW50LmlkXCJcbiAgICAgICAgICAgICAgICAgICAgPjwvaHZ5LWNvbW1lbnRzPlxuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICAgIDwvZGl2PlxuICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZVwiPlxuICAgICAgICA8ZGl2IGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fcHJvY2VkdXJlX19oZWFkZXJcIj5cbiAgICAgICAgICA8aDI+XG4gICAgICAgICAgICB7eyAoZXZlbnRzLmxlbmd0aCA9PT0gMSA/ICdAaHZ5LmV2ZW50LmxvZy5wcm9jZWR1cmUubmFtZTEnIDogJ0BodnkuZXZlbnQubG9nLnByb2NlZHVyZS5uYW1lJykgfCBpMThuIH19XG4gICAgICAgICAgPC9oMj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIEBpZiAocHJvY2VkdXJlKSB7XG4gICAgICAgICAgPGRpdiBjbGFzcz1cIm8taHZ5LWV2ZW50cy1kZXRhaWxfX3Byb2NlZHVyZV9fZGVzY3JpcHRpb25cIj5cbiAgICAgICAgICAgIDxwPlxuICAgICAgICAgICAgICA8c3Bhbj57eyBwcm9jZWR1cmUubmFtZSB9fSZuYnNwOzo8L3NwYW4+XG4gICAgICAgICAgICAgIHt7IHByb2NlZHVyZS5kZXNjcmlwdGlvbiB9fVxuICAgICAgICAgICAgPC9wPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJvLWh2eS1ldmVudHMtZGV0YWlsX19wcm9jZWR1cmVfX3Byb2dyZXNzXCI+XG4gICAgICAgICAgICA8cD57eyAnQGh2eS5ldmVudC5sb2cucHJvY2VkdXJlLnByb2dyZXNzJyB8IGkxOG4gfX08L3A+XG4gICAgICAgICAgICA8aHZ5LXByb2dyZXNzLWRpc3BsYXkgW3Byb2dyZXNzXT1cImNhbGN1bGF0ZWRQcm9ncmVzc1wiPjwvaHZ5LXByb2dyZXNzLWRpc3BsYXk+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGh2eS1wcm9jZWR1cmUtYWN0aW9uc1xuICAgICAgICAgICAgW3Byb2NlZHVyZU1vZGlmaWNhdGlvbnNBY3Rpb25zXT1cInByb2NlZHVyZU1vZGlmaWNhdGlvbnM/LmFjdGlvbnNcIlxuICAgICAgICAgICAgW2luaXRpYWxBY3Rpb25zXSA9IHRoaXMuX3Byb2NlZHVyZT8uYWN0aW9uc1xuICAgICAgICAgICAgW3JlYWRvbmx5XT1cInJlYWRvbmx5UHJvY2VkdXJlIHx8IHJlYWRvbmx5XCJcbiAgICAgICAgICAgIFtyZWFkT25seUNvbW1lbnRdPVwicmVhZE9ubHlDb21tZW50XCJcbiAgICAgICAgICAgIFtkaXNhYmxlU2F2ZURJQnV0dG9uXT1cImlzRXZlbnRNb2RpZmllZCgpXCJcbiAgICAgICAgICAgIFtlbmFibGVFZGl0QWN0aW9uc109XCJlbmFibGVFZGl0QWN0aW9uc1wiXG4gICAgICAgICAgICBbYWN0aW9uc109XCJwcm9jZWR1cmUuYWN0aW9uc1wiXG4gICAgICAgICAgICAobW9kaWZpZWQpPVwibW9kaWZpZWRBY3Rpb25zKCRldmVudClcIlxuICAgICAgICAgICAgKHJlZnJlc2hBY3Rpb25zKT1cInJlZnJlc2hBY3Rpb25zKCRldmVudClcIlxuICAgICAgICAgICAgW21lXT1cIm1lPy5zdWJcIlxuICAgICAgICAgICAgW2V2ZW50c109XCJ0aGlzLmV2ZW50c1wiXG4gICAgICAgICAgICAoY29tbWVudGVkKT1cImFjdGlvbkNvbW1lbnRlZCgkZXZlbnQpXCJcbiAgICAgICAgICA+PC9odnktcHJvY2VkdXJlLWFjdGlvbnM+XG4gICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgIEBpZiAoIXJlYWRvbmx5KSB7XG4gICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwiYS1idG4gYS1idG4tLXNlY29uZGFyeVwiIFtkaXNhYmxlZF09XCIhY2FuQXNzb2NpYXRlUHJvY2VkdXJlXCIgKGNsaWNrKT1cIm9wZW5Bc3NvY2lhdGlvbk1vZGFsKClcIj5cbiAgICAgICAgICAgICAge3sgJ0BodnkuYWN0aW9uLmFzc29jaWF0ZScgfCBpMThuIH19XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiby1odnktZXZlbnRzLWRldGFpbF9fcHJvY2VkdXJlX19lbXB0eVwiPnt7ICdAaHZ5LmV2ZW50LmxvZy5wcm9jZWR1cmUubm9uZScgfCBpMThuIH19PC9zcGFuPlxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuPC9kaXY+XG5cbjxuZy10ZW1wbGF0ZSAjY29uZmlybURpYWxvZz5cbiAgPGRpdlxuICAgIGNsYXNzPVwiby1odnktY2xvc2UtY29uZmlybV9fZGlhbG9nXCJcbiAgICBhcmlhLWxhYmVsbGVkYnk9XCJjb25maXJtXCJcbiAgICB0YWJpbmRleD1cIi0xXCJcbiAgICBpZD1cImNob2ljZVwiXG4gICAgcm9sZT1cImRpYWxvZ1wiXG4gICAgYXJpYS1tb2RhbD1cInRydWVcIlxuICA+XG4gICAgPGgyPlxuICAgICAge3tcbiAgICAgICAgKGNoYW5nZVN0YXR1c0NvbnRleHQuZXZlbnRzLmxlbmd0aCA9PT0gMSA/ICdAaHZ5LmV2ZW50LmNsb3NlLm9uZVRpdGxlJyA6ICdAaHZ5LmV2ZW50LmNsb3NlLm11bHRpVGl0bGUnKSB8IGkxOG5cbiAgICAgIH19XG4gICAgPC9oMj5cbiAgICA8cD57eyAoY2hhbmdlU3RhdHVzQ29udGV4dC5ldmVudHMubGVuZ3RoID09PSAxID8gJ0BodnkuZXZlbnQuY2xvc2Uub25lJyA6ICdAaHZ5LmV2ZW50LmNsb3NlLm11bHRpJykgfCBpMThuIH19PC9wPlxuICAgIDx1bCBjbGFzcz1cImxpc3QtZXZlLWNsb3NlLW1vZGFsXCI+XG4gICAgICBAZm9yIChldmVudCBvZiBjaGFuZ2VTdGF0dXNDb250ZXh0LmV2ZW50czsgdHJhY2sgZXZlbnQuaWQpIHtcbiAgICAgICAgPGxpPnt7IHBhZElkLmZuKGV2ZW50LmlkKSB9fSAtIHt7IGV2ZW50Lm5hbWUgfX08L2xpPlxuICAgICAgfVxuICAgIDwvdWw+XG4gICAgPHAgY2xhc3M9XCJvLWh2eS1jbG9zZS1jb25maXJtX19kaWFsb2dfX2NvbW1lbnQtdGl0bGVcIj5cbiAgICAgIHt7ICdAaHZ5LmV2ZW50LmNsb3NlLmNvbW1lbnQnIHwgaTE4biB9fTxzcGFuIGNsYXNzPVwicmVxdWlyZWRcIj4qPC9zcGFuPiA6XG4gICAgPC9wPlxuICAgIDxkaXYgY2xhc3M9XCJvLWh2eS1jbG9zZS1jb25maXJtX19kaWFsb2dfX2NvbW1lbnRcIj5cbiAgICAgIDx0ZXh0YXJlYSBbKG5nTW9kZWwpXT1cImNoYW5nZVN0YXR1c0NvbnRleHQuY29tbWVudFwiIGNsYXNzPVwiYS1mb3JtLWZpZWxkXCIgW21heExlbmd0aF09XCIyNTVcIj48L3RleHRhcmVhPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJvLWh2eS1jbG9zZS1jb25maXJtX19kaWFsb2dfX2FjdGlvbnNcIj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tcHJpbWFyeVwiIChjbGljayk9XCJjb25maXJtZWRDbG9zZSgpXCIgW2Rpc2FibGVkXT1cImNvbmZpcm1EaXNhYmxlZCgpXCI+XG4gICAgICAgIHt7ICdAaHZ5LmFjdGlvbi52YWxpZGF0ZScgfCBpMThuIH19XG4gICAgICA8L2J1dHRvbj5cbiAgICAgIDxidXR0b24gY2xhc3M9XCJhLWJ0biBhLWJ0bi0tc2Vjb25kYXJ5XCIgKGNsaWNrKT1cInRvZ2dsZUNvbmZpcm0oKVwiPnt7ICdAaHZ5LmFjdGlvbi5jYW5jZWwnIHwgaTE4biB9fTwvYnV0dG9uPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
@@ -0,0 +1,19 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class DiRefPipe {
4
+ transform(value) {
5
+ const indexOfAt = value.indexOf('@');
6
+ const indexOfD = value.indexOf('D');
7
+ return (indexOfAt !== -1 && indexOfD !== -1) ? value.substring(indexOfAt + 1, value.length) : value;
8
+ }
9
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DiRefPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
10
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.6", ngImport: i0, type: DiRefPipe, isStandalone: true, name: "diRef" }); }
11
+ }
12
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.6", ngImport: i0, type: DiRefPipe, decorators: [{
13
+ type: Pipe,
14
+ args: [{
15
+ standalone: true,
16
+ name: 'diRef'
17
+ }]
18
+ }] });
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGktcmVmLXBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9wcm92b2x5L2h5cGVydmlzb3Ivc3JjL2xpYi9nZW5lcmFsL2RpLXJlZi1waXBlL2RpLXJlZi1waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU1wRCxNQUFNLE9BQU8sU0FBUztJQUNwQixTQUFTLENBQUMsS0FBYTtRQUNyQixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDcEMsT0FBTyxDQUFDLFNBQVMsS0FBSyxDQUFDLENBQUMsSUFBSSxRQUFRLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ3RHLENBQUM7OEdBTFUsU0FBUzs0R0FBVCxTQUFTOzsyRkFBVCxTQUFTO2tCQUpyQixJQUFJO21CQUFDO29CQUNKLFVBQVUsRUFBRSxJQUFJO29CQUNoQixJQUFJLEVBQUUsT0FBTztpQkFDZCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBuYW1lOiAnZGlSZWYnXG59KVxuZXhwb3J0IGNsYXNzIERpUmVmUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICB0cmFuc2Zvcm0odmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgaW5kZXhPZkF0ID0gdmFsdWUuaW5kZXhPZignQCcpO1xuICAgIGNvbnN0IGluZGV4T2ZEID0gdmFsdWUuaW5kZXhPZignRCcpO1xuICAgIHJldHVybiAoaW5kZXhPZkF0ICE9PSAtMSAmJiBpbmRleE9mRCAhPT0gLTEpID8gdmFsdWUuc3Vic3RyaW5nKGluZGV4T2ZBdCArIDEsIHZhbHVlLmxlbmd0aCkgOiB2YWx1ZTtcbiAgfVxufVxuIl19