ngx-hana-nameserver-history-viewer 1.2.1-2.beta → 1.2.1

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.
@@ -64,6 +64,7 @@ export class NameServerHistoryComponent {
64
64
  }
65
65
  async ngOnChanges(changes) {
66
66
  const fbc = changes.fileBuffer;
67
+ // !isFile(fbc.currentValue) --> only show chart when it's not a file -> it's a file, means the object has already been processed
67
68
  if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue && !isFile(fbc.currentValue)) {
68
69
  // simulate selecting file
69
70
  const simulatedEvent = { target: { files: [blobToFile(fbc.currentValue, this.streamModeFileName)] } };
@@ -553,4 +554,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImpo
553
554
  }], autoDisplay: [{
554
555
  type: Input
555
556
  }] } });
556
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQTRCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUNMLGNBQWMsRUFDZCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLE1BQU0sR0FDUCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFnRSxNQUFNLFVBQVUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkUsT0FBTyxVQUFVLENBQUM7QUFDbEIsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7QUFFL0IsSUFBSyxVQUlKO0FBSkQsV0FBSyxVQUFVO0lBQ2IseURBQTJDLENBQUE7SUFDM0MscUNBQXVCLENBQUE7SUFDdkIsbURBQXFDLENB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Uzt1QkFBQywwQkFBMEIsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUU7Z0JBS2xELG9CQUFvQjtzQkFBNUIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUtHLGVBQWU7c0JBQXZCLEtBQUs7Z0JBS0csUUFBUTtzQkFBaEIsS0FBSztnQkFLRyxVQUFVO3NCQUFsQixLQUFLO2dCQUtHLGtCQUFrQjtzQkFBMUIsS0FBSztnQkFLRyxXQUFXO3NCQUFuQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBZnRlclZpZXdJbml0LCBDb21wb25lbnQsIEVsZW1lbnRSZWYsIElucHV0LCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIFZpZXdDaGlsZH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcclxuaW1wb3J0IHtcclxuICBzZXRDaGFydEhlaWdodCxcclxuICBzbGVlcCxcclxuICBpc0VtcHR5RGF0YSxcclxuICBnZXREaXNwbGF5UG9ydCxcclxuICBnZXRGaWxlRnJvbUlucHV0LFxyXG4gIGlzU2FtZUZpbGUsXHJcbiAgZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSxcclxuICBnZXRGaWxlRnJvbURyb3AsXHJcbiAgZ2V0UmVhbFBvcnRzLFxyXG4gIGdldFRpbWVTdHJpbmcsXHJcbiAgcHJpbnRQcm9jZXNzZWRUaW1lLFxyXG4gIGdldFRpbWVSYW5nZVN0cmluZyxcclxuICBnZW5lcmF0ZVBvcnRzLFxyXG4gIGdldERlZmF1bHRUaW1lem9uZSxcclxuICBibG9iVG9GaWxlLFxyXG4gIGlzRmlsZSxcclxufSBmcm9tICcuLi91dGlscyc7XHJcbmltcG9ydCB7IEFib3J0LCBBbGVydCwgSHRtbEVsZW1lbnQsIEl0ZW0sIENoYXJ0Q29udGVudERhdGEsIENoYXJ0Q29udGVudEhlYWRlciwgQ2hhcnRDb250ZW50VGltZSwgUG9ydCB9IGZyb20gJy4uL3R5cGVzJztcclxuaW1wb3J0IHsgRmlsZVNlcnZpY2UsIENoYXJ0U2VydmljZSwgVUlTZXJ2aWNlIH0gZnJvbSAnLi4vc2VydmljZXMnO1xyXG5cclxuaW1wb3J0ICdoYW1tZXJqcyc7XHJcbmltcG9ydCAnLi4vdXRpbHMvY2hhcnRqcy1kb3duc2FtcGxlJztcclxuaW1wb3J0ICcuLi91dGlscy9jaGFydGpzLXpvb20nO1xyXG5cclxuZW51bSBTZWFyY2hUeXBlIHtcclxuICBzZWFyY2hXaXRoU3ViSGVhZGVyID0gJ3NlYXJjaFdpdGhTdWJIZWFkZXInLFxyXG4gIHNlYXJjaEFsbCA9ICdzZWFyY2hBbGwnLFxyXG4gIHNlYXJjaEluQ2hpbGRyZW4gPSAnc2VhcmNoSW5DaGlsZHJlbidcclxufVxyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICduZ3gtaGFuYS1uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsgJy4vbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5zY3NzJyBdLFxyXG4gIHByb3ZpZGVyczogWyBGaWxlU2VydmljZSwgQ2hhcnRTZXJ2aWNlLCBVSVNlcnZpY2UgXVxyXG59KVxyXG5leHBvcnQgY2xhc3MgTmFtZVNlcnZlckhpc3RvcnlDb21wb25lbnQgaW1wbGVtZW50cyBPbkNoYW5nZXMsIEFmdGVyVmlld0luaXQge1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5QWxsJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIG5hbWVzZXJ2ZXJIaXN0b3J5QWxsUmVmOiBFbGVtZW50UmVmO1xyXG4gIEBWaWV3Q2hpbGQoJ25hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWY6IEVsZW1lbnRSZWY7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbZGVmYXVsdFNlbGVjdGVkSXRlbXNdXHJcbiAgICovXHJcbiAgQElucHV0KCkgZGVmYXVsdFNlbGVjdGVkSXRlbXM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW2hpZGVNZWFzdXJlQ29sdW1uc11cclxuICAgKi9cclxuICBASW5wdXQoKSBoaWRlTWVhc3VyZUNvbHVtbnM6IHN0cmluZ1tdO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW21heFJvd3NMaW1pdGF0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIG1heFJvd3NMaW1pdGF0aW9uOiBudW1iZXI7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbc2hvd0luc3RydWN0aW9uXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHNob3dJbnN0cnVjdGlvbiA9IHRydWU7XHJcblxyXG4gIC8qKlxyXG4gICAqIElucHV0IChvcHRpb25hbCkgYmluZCB0byBbdGltZXpvbmVdXHJcbiAgICovXHJcbiAgQElucHV0KCkgdGltZXpvbmU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogZmlsZSBidWZmZXIsIHVzZSB0aGlzIGZvciBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGZpbGVCdWZmZXI6IEJsb2I7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbGUgbmFtZSBmb3Igc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBzdHJlYW1Nb2RlRmlsZU5hbWU6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYXV0byBkaXNwbGF5IHRoZSBjaGFydCBpbiBzdHJlYW0gbW9kZVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGF1dG9EaXNwbGF5OiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBmaWxlOiBGaWxlO1xyXG5cclxuICAvKipcclxuICAgKiB0aW1lIGluZm8gb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHRpbWU6IENoYXJ0Q29udGVudFRpbWUgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgZGF0YTogQ2hhcnRDb250ZW50RGF0YSA9IHt9O1xyXG5cclxuICAvKipcclxuICAgKiBoZWFkZXIgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGhlYWRlcjogQ2hhcnRDb250ZW50SGVhZGVyW10gPSBbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogaG9zdCBvZiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgaG9zdCA9ICduYW1lc2VydmVyIGhpc3RvcnkgZmlsZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGFsZXJ0IG1lc3NhZ2UgY29udGVudFxyXG4gICAqL1xyXG4gIGFsZXJ0TWVzc2FnZTogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGVydCBtZXNzYWdlIHR5cGVcclxuICAgKi9cclxuICBhbGVydFR5cGU6IEFsZXJ0O1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcG9ydDogc3RyaW5nO1xyXG5cclxuICAvKipcclxuICAgKiBhbGwgdGhlIHBvcnRzIGZyb20gdGhlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcG9ydHM6IFBvcnRbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgdGltZSByYW5nZVxyXG4gICAqL1xyXG4gIGRhdGVUaW1lUmFuZ2U6IERhdGVbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogZGF0YSBzb3VyY2UgZm9yIHRoZSBzZWxlY3Rpb24gdGFibGUgKHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqL1xyXG4gIHRhYmxlU291cmNlOiBhbnlbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogdGhlIHByb2dyZXNzIGZvciByZWFkaW5nIGZpbGVcclxuICAgKi9cclxuICByZWFkUHJvZ3Jlc3MgPSAwO1xyXG5cclxuICAvKipcclxuICAgKiBzZWxlY3RlZC9kcm9wcGVkIGZpbGUgbmFtZSAoYWJicmV2aWF0aW9uKSwgZnVsbCBmaWxlIG5hbWUgd2lsbCBiZSBzaG93biB2aWEgdGhlIHRvb2x0aXBzXHJcbiAgICovXHJcbiAgYWJicmV2aWF0ZWRGaWxlTmFtZSA9ICdvciBEcm9wIEZpbGUgSGVyZSc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZvciB0aGUgaW5zdHJ1Y3Rpb24gc3RlcCA0XHJcbiAgICovXHJcbiAgc3RlcFNob3dDaGFydCA9IGZhbHNlO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgY2hhcnRcclxuICAgKi9cclxuICBzaG93Q2hhcnRGbGFnOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIHNob3dpbmcgdGhlIGZpbGUgcmVhZGluZyBwcm9ncmVzc1xyXG4gICAqL1xyXG4gIHNob3dSZWFkRmlsZVByb2dyZXNzOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIFwiTG9hZFwiIHBvcnRzIGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZUxvYWRQb3J0c0J1dHRvbjogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBlbmFibGluZyBcIlNob3dcIiBjaGFydCBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVTaG93Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgXCJSZXNldFwiIGNoYXJ0IGJ1dHRvblxyXG4gICAqL1xyXG4gIGVuYWJsZVJlc2V0Q2hhcnRCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIHNlYXJjaFR5cGUgPSBTZWFyY2hUeXBlLnNlYXJjaEFsbDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0aW9uIGluZm9ybWF0aW9uIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfc2VsZWN0aW9uOiBTZWxlY3Rpb25Nb2RlbDxhbnk+O1xyXG5cclxuICAvKipcclxuICAgKiBjdXJyZW50IGRpc3BsYXlpbmcgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2N1cnJlbnRDaGFydFBvcnQ6IHN0cmluZztcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBmaWxlU2VydmljZTogRmlsZVNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBjaGFydFNlcnZpY2U6IENoYXJ0U2VydmljZSxcclxuICAgICAgICAgICAgICBwcml2YXRlIHVpU2VydmljZTogVUlTZXJ2aWNlKSB7fVxyXG5cclxuICBhc3luYyBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XHJcbiAgICBjb25zdCBmYmMgPSBjaGFuZ2VzLmZpbGVCdWZmZXI7XHJcbiAgICBpZiAoZmJjICYmIGZiYy5jdXJyZW50VmFsdWUgJiYgZmJjLmN1cnJlbnRWYWx1ZSAhPT0gZmJjLnByZXZpb3VzVmFsdWUgJiYgIWlzRmlsZShmYmMuY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAvLyBzaW11bGF0ZSBzZWxlY3RpbmcgZmlsZVxyXG4gICAgICBjb25zdCBzaW11bGF0ZWRFdmVudCA9IHt0YXJnZXQ6IHtmaWxlczogW2Jsb2JUb0ZpbGUoZmJjLmN1cnJlbnRWYWx1ZSwgdGhpcy5zdHJlYW1Nb2RlRmlsZU5hbWUpXX19O1xyXG4gICAgICBhd2FpdCB0aGlzLmZpbGVTZWxlY3RlZChzaW11bGF0ZWRFdmVudCk7XHJcbiAgICAgIHRoaXMucG9ydCA9IHVuZGVmaW5lZDsgLy8gY2xlYXIgdGhlIHBvcnQgc2VsZWN0aW9uXHJcbiAgICAgIGlmICh0aGlzLmF1dG9EaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZSgpOyAvLyBuZ0FmdGVyVmlld0luaXQvcmVzaXplIHdvbid0IHdvcmsgaW4gZWxlY3Ryb25cclxuICAgICAgICB0aGlzLnNob3dDaGFydCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyBpbml0IGl0ZW1zJyBzdGF0dXNcclxuICAgIC8vIHJlc2V0IGNoYXJ0IGJ1dHRvbiB3aWxsIGJlIGRpc2FibGUgYnkgZGVmYXVsdCBsYXRlciwgb25seSBiZSBlbmFibGVkIGFmdGVyIHpvb21lZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b24sIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgIHRoaXMub25SZXNpemUoKTsgLy8gdXBkYXRlIHRoZSBzaXplLCBvdGhlcndpc2UgdGhlcmUgbWF5IGhhdmUgYSBzY3JvbGxiYXIgKGJlY2F1c2Ugb2YgdGhlIHRvYXN0KSBpZiBhdXRvIGRpc3BsYXkgaXMgc2V0IHRvIHRydWVcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IENoYXJ0IHRvIGluaXRpYWwgc3RhdHVzXHJcbiAgICogSWYgbGVnZW5kIGlzIGFscmVhZHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBmcm9tIHRoZSBsaXN0LCBpdCB3b3VsZG4ndCBiZSByZXN0b3JlZC5cclxuICAgKi9cclxuICByZXNldENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICBpZiAodGhpcy50YWJsZVNvdXJjZSAmJiB0aGlzLl9zZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5jaGFydFNlcnZpY2UucmVzZXRDaGFydCh0aGlzLnRhYmxlU291cmNlLCB0aGlzLl9zZWxlY3Rpb24pXHJcbiAgICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlYWQgdGhlIGZpbGUgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0XHJcbiAgICovXHJcbiAgc2hvd0NoYXJ0KCk6IHZvaWQge1xyXG4gICAgLy8gYWZ0ZXIgY2xpY2ssIHRoaXMgYnV0dG9uIGFuZCByZXNldCBidXR0b24gbmVlZHMgdG8gYmUgZGlzYWJsZWRcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcblxyXG4gICAgdGhpcy5zdGVwU2hvd0NoYXJ0ID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9pbml0Q2hhcnRFbnYoKS50aGVuKCgpID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRUaW1lID0gdGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2U7XHJcbiAgICAgIGlmIChzZWxlY3RlZFRpbWUuc3RhcnRUaW1lID4gc2VsZWN0ZWRUaW1lLmVuZFRpbWUpIHtcclxuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgJ1RpbWUgcmFuZ2UgaXMgbm90IGNvcnJlY3QuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICAvLyBpdCdzIHRpbWUgZm9yIGRpc3BsYXlpbmcgdGhlIHJlYWRpbmcgcHJvZ3Jlc3MgYmFyXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9idWlsZENoYXJ0RnJvbURhdGFGaWxlKHRoaXMuZmlsZSwgc2VsZWN0ZWRUaW1lLnN0YXJ0VGltZSwgc2VsZWN0ZWRUaW1lLmVuZFRpbWUsIHRoaXMucG9ydCk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSk7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9XSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxvYWQgYWxsIHBvcnRzIGZyb20gZmlsZVxyXG4gICAqL1xyXG4gIGxvYWRQb3J0cygpOiB2b2lkIHtcclxuICAgIC8vIGRvIGNvbmZpcm1hdGlvbiBhY3Rpb25zXHJcbiAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgIC8vIGJlZm9yZSBzdGFydCBsb2FkaW5nIHBvcnRzIGZyb20gZmlsZSwgZGlzcGxheSBwcm9ncmVzcyBiYXIgYW5kIGRpc2FibGUgdGhlIHNob3cgY2hhcnQgYnV0dG9uXHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XHJcbiAgICAgIF0pO1xyXG4gICAgICB0aGlzLl9yZWFkUG9ydHNGcm9tRmlsZSh0aGlzLmZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0IG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSwgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBmaWxlLlxyXG4gICAqL1xyXG4gIGFzeW5jIGZpbGVTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEZpbGUgPSBnZXRGaWxlRnJvbUlucHV0KGV2ZW50LnRhcmdldCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIHNlbGVjdGVkRmlsZSkpIHtcclxuICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGUgPSBzZWxlY3RlZEZpbGU7XHJcbiAgICAgICAgdGhpcy5hYmJyZXZpYXRlZEZpbGVOYW1lID0gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSh0aGlzLmZpbGUubmFtZSk7XHJcbiAgICAgICAgLy8gYWZ0ZXIgZmlsZSBoYXMgYmVlbiBzZWxlY3RlZCwgdGhlIHNob3cgY2hhcnQgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWRcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZHJvcCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIDEgZmlsZS5cclxuICAgKi9cclxuICBmaWxlRHJvcHBlZChldmVudDogYW55KSB7XHJcbiAgICBnZXRGaWxlRnJvbURyb3AoZXZlbnQpXHJcbiAgICAgIC50aGVuKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIGZpbGUpKSB7XHJcbiAgICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJicmV2aWF0ZWRGaWxlTmFtZSA9IGdldEFiYnJldmlhdGVkRmlsZU5hbWUodGhpcy5maWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAvLyBhZnRlciBmaWxlIGhhcyBiZWVuIGRyb3BwZWQsIHRoZSBzaG93IGNoYXJ0IGJ1dHRvbiBuZWVkcyB0byBiZSBlbmFibGVkXHJcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH19KVxyXG4gICAgICAudGhlbigoKSA9PiAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgb25lIGl0ZW0gZnJvbSBzZWxlY3Rpb24gdGFibGUsIHJlbGF0aXZlIGRhdGFzZXQgd2lsbCBiZSBzaG93biBvciBoaWRkZW5cclxuICAgKi9cclxuICBzZWxlY3RJdGVtKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC50YWJsZVJvdykge1xyXG4gICAgICBjb25zdCByb3cgPSBldmVudC50YWJsZVJvdztcclxuICAgICAgdGhpcy5fc2VsZWN0aW9uLnRvZ2dsZShyb3cpO1xyXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS50b2dnbGVEYXRhSW5DaGFydChyb3cuS1BJLCAhdGhpcy5fc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVjYWxjdWxhdGluZyBjaGFydCBoZWlnaHQgd2hlbiByZXNpemluZ1xyXG4gICAqL1xyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgbmFtZXNlcnZlckhpc3RvcnlBbGxFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUFsbFJlZiA/IHRoaXMubmFtZXNlcnZlckhpc3RvcnlBbGxSZWYubmF0aXZlRWxlbWVudCA6IG51bGw7XHJcbiAgICBjb25zdCBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWYgPyB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcclxuICAgIHNldENoYXJ0SGVpZ2h0KG5hbWVzZXJ2ZXJIaXN0b3J5QWxsRWxlbWVudCwgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTd2l0Y2ggcG9ydCBhbmQgcmVpbml0aWFsaXplIGNoYXJ0LCB0cmlnZ2VyZWQgYnkgY2hhbmdpbmcgdGhlIHBvcnRcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHN3aXRjaFBvcnRGb3JDaGFydChwb3J0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChwb3J0ID09PSB0aGlzLl9jdXJyZW50Q2hhcnRQb3J0KSB7XHJcbiAgICAgIC8vIG5vdCB0byBzd2l0Y2ggcG9ydCwgYmVjYXVzZSB0aGUgcmVsYXRpdmUgcG9ydCBpcyBkaXNwbGF5aW5nLCBubyBuZWVkIHRvIHJlbmRlciB0d2ljZS5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpbGUgfHwgIXBvcnQgfHwgcG9ydC5sZW5ndGggPT09IDAgfHwgcG9ydC5zbGljZSgxLCAzKSA9PT0gJyoqJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkubGVuZ3RoID4gMSAmJiAhZ2V0UmVhbFBvcnRzKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkpLmluY2x1ZGVzKHBvcnQpKSB7XHJcbiAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmluZm8sIGBEYXRhIG9mIHBvcnQ6JHtwb3J0fSBpcyBub3QgbG9hZGVkLCBwbGVhc2UgbG9hZCB0aGUgZGF0YSBmaXJzdCBieSBjbGlja2luZyB0aGUgXCJTaG93XCIgYnV0dG9uLmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gb25seSBkbyBzd2l0Y2ggcG9ydHMgd2hlbiBhdmFpbGFibGUgcG9ydHMgbnVtYmVyID4gMVxyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkubGVuZ3RoID4gMSkge1xyXG4gICAgICAvLyBkaXNhYmxlIHRoZSBcInNob3cgY2hhcnRcIiBhbmQgXCJyZXNldCBjaGFydFwiIGJ1dHRvbiBmaXJzdFxyXG4gICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgICAgLy8gaW5pdCB0aGUgZW52aXJvbm1lbnQgd2l0aCBzd2l0Y2ggZmxhZ1xyXG4gICAgICB0aGlzLl9pbml0Q2hhcnRFbnYodHJ1ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgIH0pLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgY29sdW1ucyB3aGljaCBuZWVkIHRvIGJlIGhpZGRlbiBmcm9tIHRoZSBzZWxlY3Rpb24gdGFibGVcclxuICAgKi9cclxuICBnZXQgaGlkZGVuQ29sdW1ucygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy51aVNlcnZpY2UuZ2V0SGlkZGVuQ29sdW1ucyh0aGlzLmhpZGVNZWFzdXJlQ29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgZGVmYXVsdCB0aW1lem9uZVxyXG4gICAqL1xyXG4gIGdldCBkZWZhdWx0VGltZXpvbmUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBnZXREZWZhdWx0VGltZXpvbmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUga2V5IGNvbHVtbiAoS1BJKVxyXG4gICAqL1xyXG4gIGdldCBrcGlDb2x1bW4oKTogSXRlbSB7XHJcbiAgICByZXR1cm4gSXRlbS5rcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIGtleSBjb2x1bW4gKEtQSSlcclxuICAgKi9cclxuICBnZXQgZGVzY0NvbHVtbigpOiBJdGVtIHtcclxuICAgIHJldHVybiBJdGVtLmRlc2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzZWxlY3RlZCB0aW1lIHJhbmdlLCBzZXQgc2Vjb25kIGFuZCBtaWxsaXNlY29uZCBwYXJ0IHRvIDBcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfc2VsZWN0ZWRUaW1lUmFuZ2UoKToge3N0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXJ9IHtcclxuICAgIGxldCBzdGFydFRpbWUgPSAwO1xyXG4gICAgbGV0IGVuZFRpbWUgPSA0MTAyMzU4NDAwMDAwOyAvLyAyMDk5LzEyLzMxXHJcbiAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZS5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgIC8vIGdldCBzdGFydCB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZVswXSkge1xyXG4gICAgICAgICAgc3RhcnRUaW1lID0gdGhpcy5kYXRlVGltZVJhbmdlWzBdLnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2VbMV0pIHtcclxuICAgICAgICAgIGVuZFRpbWUgPSB0aGlzLmRhdGVUaW1lUmFuZ2VbMV0uc2V0U2Vjb25kcygwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7c3RhcnRUaW1lOiBzdGFydFRpbWUsIGVuZFRpbWU6IGVuZFRpbWV9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSB0aW1lIHJhbmdlIHN0cmluZywgZWc6IDIwMTgtMTAtMjUgMTA6MjUgfiAyMDE4LTEwLTI2IDEwOjI2XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX3NlbGVjdGVkVGltZVJhbmdlU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFRpbWVSYW5nZVN0cmluZyA9IHRoaXMuX3NlbGVjdGVkVGltZVJhbmdlO1xyXG4gICAgcmV0dXJuIGAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuc3RhcnRUaW1lKX0gfiAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuZW5kVGltZSl9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIga2V5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2hlYWRlcktleSgpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyLm1hcChoZWFkZXJJdGVtID0+IGhlYWRlckl0ZW0ua2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9oZWFkZXJUZXh0KCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRlci5tYXAoaGVhZGVySXRlbSA9PiBoZWFkZXJJdGVtLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZCBwb3J0cyBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVhZFBvcnRzRnJvbUZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5nZXRQb3J0c0Zyb21GaWxlKGZpbGUsIChwcm9ncmVzcykgPT4ge1xyXG4gICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgfSkudGhlbihwb3J0cyA9PiB7XHJcbiAgICAgIHJldHVybiBzbGVlcCgxMDApLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKHBvcnRzKTtcclxuICAgICAgfSk7XHJcbiAgICB9KS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBidWlsZCBjaGFydCBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIHRoZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBzdGFydFRpbWUgc3RhcnQgdGltZVxyXG4gICAqIEBwYXJhbSBlbmRUaW1lIGVuZCB0aW1lXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkUG9ydCBzZWxlY3RlZCBwb3J0IGZvciBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZSAoTURDIHN5c3RlbSlcclxuICAgKi9cclxuICBwcml2YXRlIF9idWlsZENoYXJ0RnJvbURhdGFGaWxlKGZpbGU6IEZpbGUsIHN0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXIsIHNlbGVjdGVkUG9ydDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlLmdldENoYXJ0Q29udGVudEZyb21GaWxlKFxyXG4gICAgICBmaWxlLFxyXG4gICAgICBzdGFydFRpbWUsXHJcbiAgICAgIGVuZFRpbWUsXHJcbiAgICAgIHNlbGVjdGVkUG9ydCxcclxuICAgICAgdGhpcy50aW1lem9uZSxcclxuICAgICAgdGhpcy5tYXhSb3dzTGltaXRhdGlvbiwgcHJvZ3Jlc3MgPT4gdGhpcy5yZWFkUHJvZ3Jlc3MgPSBwcm9ncmVzcylcclxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyBwYXJzaW5nIGRvbmVcclxuICAgICAgICBjb25zdCBiZWdpblRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XHJcbiAgICAgICAgY29uc3QgcG9ydHMgPSBnZXRSZWFsUG9ydHMoT2JqZWN0LmtleXMocmVzdWx0LnRpbWUpLCB0cnVlKTtcclxuICAgICAgICBwb3J0cy5mb3JFYWNoKHBvcnQgPT4ge1xyXG4gICAgICAgICAgLy8gY29udmVydCB0aGUgdW5pdCBhbmQgZ2VuZXJhdGUgY29udHJvbGxpbmcgZGF0YSBmb3IgYWxsIHBvcnRzXHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMudWlTZXJ2aWNlLmNvbnZlcnRVbml0QW5kR2VuZXJhdGVDb250cm9sRGF0YShyZXN1bHQuZGF0YVtwb3J0XSwgcmVzdWx0LmhlYWRlciwgcG9ydCkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXHJcbiAgICAgICAgICAudGhlbigoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBnZXQgYWxsIHBvcnRzIGZyb20gdGhlIGFuYWx5emVkIGRhdGEodGltZSlcclxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBwb3J0IHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgcGFnZVxyXG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gZ2V0RGlzcGxheVBvcnQocG9ydHMsIHNlbGVjdGVkUG9ydCk7XHJcblxyXG4gICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnY29udmVydGluZyBzdGVwJyk7XHJcbiAgICAgICAgICAgIHBvcnRzLmZvckVhY2goIHBvcnRJdGVtID0+IHRoaXMudWlTZXJ2aWNlLmdlbmVyYXRlWVNjYWxlKHBvcnRJdGVtKSk7XHJcbiAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdnZW5lcmF0aW5nIFlTY2FsZSBzdGVwJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUgPSByZXN1bHQudGltZTtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXIgPSB0aGlzLnVpU2VydmljZS5nZXRIZWFkZXIocmVzdWx0LmhlYWRlciwgcG9ydCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdC5ob3N0O1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmFib3J0ZWQgPT09IEFib3J0Lm1heExpbmVOdW1SZWFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICBBbGVydC53YXJuaW5nLCBgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgcmVhY2hlZC4gUHJvY2Vzc2VkIHRpbWUgcmFuZ2UgaXM6ICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZSl9LmApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChpc0VtcHR5RGF0YSh0aGlzLmRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5pbmZvLCBgQ2Fubm90IGZpbmQgYW55IGRhdGEgZm9yIHRoZSBzZWxlY3RlZCB0aW1lIHBlcmlvZDogJHt0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZVN0cmluZ31gKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuc3VjY2VzcywgYFByb2Nlc3NlZCB0aW1lIHJhbmdlIGlzOiAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWUpfS5gKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNsZWVwKDEwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgcG9ydHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlaW5pdGlhbGl6ZSB0aGUgcG9ydCBzZWxlY3RvciB3aXRoIHRoZSBwb3J0c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luaXRQb3J0U2VsZWN0b3IocG9ydHM6IHN0cmluZ1tdID0gbnVsbCwgc2VsZWN0ZWRQb3J0OiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIC8vIGluaXRpYWxpemF0aW9uIGZvciBuZ3gtc2VsZWN0XHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHBvcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAvLyBNREMsIHJlbW92ZSBkZWZhdWx0ICcwMDAwJyBwb3J0XHJcbiAgICAgICAgdGhpcy5wb3J0cyA9IGdlbmVyYXRlUG9ydHMoZ2V0UmVhbFBvcnRzKHBvcnRzKSwgc2VsZWN0ZWRQb3J0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvcnRzID0gZ2VuZXJhdGVQb3J0cyhwb3J0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHNlbGVjdGVkUG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICAgIC8vIHJlc2V0IHN0YXR1cyB3aGVuIGRvaW5nOlxyXG4gICAgICAgIC8vIDEuIGxvYWRpbmcgcG9ydHNcclxuICAgICAgICAvLyAyLiB0aGUgZmlsZSBkb2Vzbid0IGNvbnRhaW4gdGhlIHNlbGVjdGVkIFBvcnRcclxuICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgLy8gaGlkZSB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCBlbmFibGUgdGhlIFwic2hvdyBjaGFydFwiIGJ1dHRvblxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYnVpbGQgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0IG9uIHBhZ2VcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqIEBwYXJhbSBwb3J0cyBhbGwgYXZhaWxhYmxlIHBvcnRzXHJcbiAgICogQHBhcmFtIHN3aXRjaEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBzd2l0Y2hpbmcgcG9ydHMgKG5vIGluaXQgcG9ydCBzZWxlY3RvciBuZWVkZWQpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYnVpbGRDaGFydChwb3J0OiBzdHJpbmcsIHBvcnRzOiBzdHJpbmdbXSwgc3dpdGNoRmxhZyA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAocG9ydCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xvYWRTZXR0aW5nc0ZvclNlbGVjdGlvbnNUYWJsZShwb3J0KSlcclxuICAgICAgICAudGhlbiggKCkgPT4ge1xyXG4gICAgICAgICAgLy8gZ2V0IHRoZSBjb25maWdcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5idWlsZENoYXJ0KFxyXG4gICAgICAgICAgICB0aGlzLnRpbWVbcG9ydF0sXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVtwb3J0XSxcclxuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0WVNjYWxlKHRoaXMuX2hlYWRlcktleSwgcG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlclRleHQsXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlcktleSxcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICB0aGlzLnRhYmxlU291cmNlLFxyXG4gICAgICAgICAgICB0aGlzLl9nZXRIb3N0VGl0bGUocG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldERpc3BsYXlJdGVtcyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpLFxyXG4gICAgICAgICAgICB0aGlzLl9vblpvb20uYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAgICAgICAvLyBhZnRlciBjaGFydCBoYXMgYmVlbiBjcmVhdGVkLCBzaG93IHRoZSBjaGFydCBhcmVhLCBoaWRlIHByb2dyZXNzIGJhciBhbmQgZW5hYmxlIHRoZSBcInNob3cgY2hhcnRcIiBidXR0b25cclxuICAgICAgICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiB0cnVlfSxcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIC8vIHNldCBwb3J0IHRvIGN1cnJlbnQgZGlzcGxheWluZyBwb3J0XHJcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXJ0UG9ydCA9IHBvcnQ7XHJcbiAgICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ3N0ZXBfYnVpbGRfY2hhcnQnKTtcclxuICAgICAgICAgICAgICBpZiAocG9ydHMgJiYgcG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgcG9ydCBzZWxlY3Rvci4gRG8gbm90IG5lZWQgdG8gZG8gaXQgd2hlbiBzd2l0Y2hpbmcgcG9ydC5cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKFxyXG4gICAgICAgICAgQWxlcnQud2FybmluZyxcclxuICAgICAgICAgICdUaGUgc2VsZWN0ZWQgcG9ydCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLiBQbGVhc2UgY2hvb3NlIGEgY29ycmVjdCBwb3J0IGFuZCBoYXZlIGEgdHJ5IGFnYWluLicpO1xyXG4gICAgICAgIGlmICghc3dpdGNoRmxhZykge1xyXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb3J0IHNlbGVjdG9yLiBEbyBub3QgbmVlZCB0byBkbyBpdCB3aGVuIHN3aXRjaGluZyBwb3J0LlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgdGl0bGUgYXJlYSBvZiB0aGUgY2hhcnRcclxuICAgKiBlZzogaG9zdDEgLSAzMDA0MCAoMjAxOC0wOS0wNSAxNTozMjozMiB+IDIwMTgtMDktMDcgMTU6MzI6MTUpXHJcbiAgICogQHBhcmFtIHBvcnQgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEhvc3RUaXRsZShwb3J0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaG9zdCkge1xyXG4gICAgICByZXR1cm4gIGAke3RoaXMuaG9zdH0gLSAke3BvcnR9ICggJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lW3BvcnRdKX0gKWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBhZnRlciB6b29tLCBlbmFibGUgdGhlIHJlc2V0IGJ1dHRvbi5cclxuICAgKi9cclxuICBwcml2YXRlIF9vblpvb20oKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpbml0aWFsaXplIGNoYXJ0LCBpbmNsdWRpbmc6IGRlc3Ryb3kgY3VycmVudCBjaGFydCwgaW5pdGlhbGl6ZSBjb25maWcsIGluaXRpYWxpemUgYWxsIHJlbGF0aXZlIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIF9pbml0Q2hhcnRFbnYoc3dpdGNoRmxhZzogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5kZXN0cm95Q2hhcnQoKS50aGVuKCgpID0+IHtcclxuICAgICAge1xyXG4gICAgICAgIC8vIGNsZWFudXAgb3RoZXIgZGF0YVxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRpbWUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50aW1lW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy50aW1lID0ge307XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0ge307XHJcbiAgICAgICAgICB0aGlzLmhlYWRlci5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgdGhpcy5ob3N0ID0gJ25hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlJztcclxuICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UgPSB2b2lkIDA7XHJcbiAgICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS5jbGVhckxvYWRIaXN0b3J5SW5mb3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBzZXR0aW5ncyBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZSAodGhlIHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbG9hZFNldHRpbmdzRm9yU2VsZWN0aW9uc1RhYmxlKHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZSA9IHRoaXMudWlTZXJ2aWNlLmdldFNlbGVjdGlvblRhYmxlUm93cyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpO1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIFtdKTtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICBpZiAodGhpcy51aVNlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcykuaW5jbHVkZXMocm93LktQSSkpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBtZXNzYWdlc1xyXG4gICAqIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0gbWVzc2FnZSBtZXNzYWdlIHRleHRcclxuICAgKi9cclxuICBwcml2YXRlIF9zaG93TWVzc2FnZSh0eXBlOiBBbGVydCwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZSkge1xyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIEFsZXJ0LnN1Y2Nlc3M6XHJcbiAgICAgICAgY2FzZSBBbGVydC5pbmZvOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC53YXJuaW5nOlxyXG4gICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC5lcnJvcjpcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFsZXJ0TWVzc2FnZSA9PT0gbWVzc2FnZSkge1xyXG4gICAgICAvLyB0cnkgdHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50IG9mIHRoZSBhbGVydC5cclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSB2b2lkIDA7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlLCAxMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbGVydFR5cGUgPSB0eXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdG9nZ2xlIGl0ZW1zIHdpdGggdGhlIHByb3ZpZGVkIHN0YXR1cyAoc2hvdyBvciBoaWRlIHRoZSByZWxhdGl2ZSBlbGVtZW50IG9uIHRoZSBwYWdlKVxyXG4gICAqIEBwYXJhbSBpdGVtcyBpdGVtcyB3aXRoIHRoZSByZWxhdGl2ZSBpZCBhbmQgc3RhdHVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RvZ2dsZUl0ZW1zKGl0ZW1zOiB7aWQ6IEh0bWxFbGVtZW50LCBzdGF0dXM6IGJvb2xlYW59W10pIHtcclxuICAgIGNvbnN0IGdldFZhcmlhYmxlTmFtZUJ5VHlwZUlkID0gKGlkOiBIdG1sRWxlbWVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5jaGFydEFyZWE6IHJldHVybiAnc2hvd0NoYXJ0RmxhZyc7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzOiByZXR1cm4gJ3Nob3dSZWFkRmlsZVByb2dyZXNzJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbjogcmV0dXJuICdlbmFibGVTaG93Q2hhcnRCdXR0b24nO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQubG9hZFBvcnRzQnV0dG9uOiByZXR1cm4gJ2VuYWJsZUxvYWRQb3J0c0J1dHRvbic7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uOiByZXR1cm4gJ2VuYWJsZVJlc2V0Q2hhcnRCdXR0b24nO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKGl0ZW1zKSB7XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgdGhpc1tnZXRWYXJpYWJsZU5hbWVCeVR5cGVJZChpdGVtLmlkKV0gPSBpdGVtLnN0YXR1cztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI25hbWVzZXJ2ZXJIaXN0b3J5QWxsIGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWFsbFwiICh3aW5kb3c6cmVzaXplKT1cIm9uUmVzaXplKClcIj5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhci1jaGFydFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZC1ib3gtY29udGVudFwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dSZWFkRmlsZVByb2dyZXNzXCI+XHJcbiAgICAgICAgPGZpbGUtZHJvcC1pbnB1dCAoZmlsZURyb3ApPVwiZmlsZURyb3BwZWQoJGV2ZW50KVwiIChmaWxlSW5wdXQpPVwiZmlsZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3BBcmVhVGV4dF09IFwiYWJicmV2aWF0ZWRGaWxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRBcmVhVGV4dF09XCInQnJvd3NlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZmlsZT8ubmFtZT8gZmlsZS5uYW1lOidTZWxlY3QgYSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUgZnJvbSB5b3VyIGxvY2FsIGRpc2suJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmaWxlQnVmZmVyXCI+XHJcbiAgICAgICAgPC9maWxlLWRyb3AtaW5wdXQ+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJmaWxlQnVmZmVyXCIgY2xhc3M9XCJib3gtc3RyZWFtLW1vZGUtdGV4dFwiPnt7c3RyZWFtTW9kZUZpbGVOYW1lIHx8ICduYW1lc2VydmVyX2hpc3RvcnkudHJjIChzdHJlYW0gbW9kZSknfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj5cclxuICAgICAgICA8cHJvZ3Jlc3MtYmFyIFtwcm9ncmVzc109XCJyZWFkUHJvZ3Jlc3NcIj48L3Byb2dyZXNzLWJhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10aW1lXCI+XHJcbiAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRpbWUtcmFuZ2VcIj5cclxuICAgICAgIDx0aW1lLXJhbmdlLXNlbGVjdG9yIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiIFsoZGF0ZVRpbWVSYW5nZSldPVwiZGF0ZVRpbWVSYW5nZVwiPjwvdGltZS1yYW5nZS1zZWxlY3Rvcj5cclxuICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRpbWV6b25lLXNlbGVjdG9yXCI+XHJcbiAgICAgICAgPHRpbWV6b25lLXNlbGVjdG9yIFsodGltZXpvbmUpXT1cInRpbWV6b25lXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+PC90aW1lem9uZS1zZWxlY3Rvcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicG9ydC1zZWxlY3Rpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvcnQtc2VsZWN0b3JcIj5cclxuICAgICAgICA8cG9ydC1zZWxlY3RvciAocG9ydENoYW5nZSk9XCJzd2l0Y2hQb3J0Rm9yQ2hhcnQoJGV2ZW50KVwiIFsocG9ydCldPVwicG9ydFwiIFtwb3J0c109XCJwb3J0c1wiIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPjwvcG9ydC1zZWxlY3Rvcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwb3J0LWxvYWQtYnV0dG9uXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZFBvcnRzKClcIiB0aXRsZT1cIkxvYWQgYWxsIHBvcnRzIGZyb20gbmFtZSBzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlLlwiIFtkaXNhYmxlZF09XCIhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uIHx8IHBvcnQgfHwgIWVuYWJsZUxvYWRQb3J0c0J1dHRvblwiPnt7c2hvd1JlYWRGaWxlUHJvZ3Jlc3M/IFwiTG9hZGluZy4uLlwiIDogXCJMb2FkXCJ9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjaGFydC1vcGVyYXRpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzaG93Q2hhcnQoKVwiIHRpdGxlPVwiTG9hZCBhbmQgZGlzcGxheSBhbGwgZGF0YSBmcm9tIG5hbWUgc2VydmVyIGhpc3RvcnkgdHJhY2UgZmlsZS5cIiBbZGlzYWJsZWRdPVwiIWVuYWJsZVNob3dDaGFydEJ1dHRvblwiPnt7c2hvd1JlYWRGaWxlUHJvZ3Jlc3M/IFwiTG9hZGluZy4uLlwiIDogXCJTaG93XCJ9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzZXRDaGFydCgpXCIgdGl0bGU9XCJSZXNldCB6b29tIG9mIGNoYXJ0LlwiIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzcyB8fCAhZW5hYmxlUmVzZXRDaGFydEJ1dHRvblwiPlJlc2V0IENoYXJ0PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAjbmFtZXNlcnZlckhpc3RvcnlDb250ZW50IGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudC1jaGFydFwiPlxyXG4gICAgICA8aW5zdHJ1Y3Rpb24gWyhzaG93KV09XCJzaG93SW5zdHJ1Y3Rpb25cIiAqbmdJZj1cIiFzaG93Q2hhcnRGbGFnICYmIHNob3dJbnN0cnVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDFGaW5pc2hlZF09XCIhIWZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAyRmluaXNoZWRdPVwiZGF0ZVRpbWVSYW5nZSAmJiAoISFkYXRlVGltZVJhbmdlWzBdIHx8ICEhZGF0ZVRpbWVSYW5nZVsxXSkgfHwgdGltZXpvbmUgIT0gZGVmYXVsdFRpbWV6b25lXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwM0ZpbmlzaGVkXT1cIiEhcG9ydFwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDRGaW5pc2hlZF09XCJzdGVwU2hvd0NoYXJ0ICYmICFlbmFibGVTaG93Q2hhcnRCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXA1RmluaXNoZWRdPVwiZmFsc2VcIj5cclxuICAgICAgPC9pbnN0cnVjdGlvbj5cclxuICAgICAgPGNhbnZhcyBpZD1cImNoYXJ0TmFtZVNlcnZlckhpc3RvcnlcIiA+PC9jYW52YXM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudC1jb250cm9sbGVyXCIgPlxyXG4gICAgICA8bmd4LXNlbGVjdGlvbi10YWJsZSAoY2hhbmdlKT1cInNlbGVjdEl0ZW0oJGV2ZW50KVwiICpuZ0lmPVwic2hvd0NoYXJ0RmxhZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2JveF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlU291cmNlXT1cInRhYmxlU291cmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tleUNvbHVtbl09XCJrcGlDb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuQ29sdW1uc109XCJoaWRkZW5Db2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBDb2x1bW5dPVwiZGVzY0NvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hTdHlsZV09XCJzZWFyY2hUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaENvbHVtbl09XCJrcGlDb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlTZWxlY3Rpb25dPVwidHJ1ZVwiPlxyXG4gICAgICA8L25neC1zZWxlY3Rpb24tdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJtZXNzYWdlLWNvbnRhaW5lclwiICpuZ0lmPVwiYWxlcnRNZXNzYWdlXCI+XHJcbiAgPGFsZXJ0IFsoYWxlcnRNZXNzYWdlKV09XCJhbGVydE1lc3NhZ2VcIiBbYWxlcnRUeXBlXT1cImFsZXJ0VHlwZVwiIFthbGVydFRpbWVvdXRdPVwiMzAwMDBcIj48L2FsZXJ0PlxyXG48L2Rpdj5cclxuIl19
557
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3NyYy9uYW1lc2VydmVyLWhpc3Rvcnktdmlld2VyL2NvbXBvbmVudHMvbmFtZXNlcnZlci1oaXN0b3J5LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBZ0IsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQTRCLFNBQVMsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDMUQsT0FBTyxFQUNMLGNBQWMsRUFDZCxLQUFLLEVBQ0wsV0FBVyxFQUNYLGNBQWMsRUFDZCxnQkFBZ0IsRUFDaEIsVUFBVSxFQUNWLHNCQUFzQixFQUN0QixlQUFlLEVBQ2YsWUFBWSxFQUNaLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsa0JBQWtCLEVBQ2xCLGFBQWEsRUFDYixrQkFBa0IsRUFDbEIsVUFBVSxFQUNWLE1BQU0sR0FDUCxNQUFNLFVBQVUsQ0FBQztBQUNsQixPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFnRSxNQUFNLFVBQVUsQ0FBQztBQUN6SCxPQUFPLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxTQUFTLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFbkUsT0FBTyxVQUFVLENBQUM7QUFDbEIsT0FBTyw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLHVCQUF1QixDQUFDOzs7Ozs7Ozs7Ozs7QUFFL0IsSUFBSyxVQUlKO0FBSkQsV0FBSyxVQUFVO0lBQ2IseURBQTJDLENBQUE7SUFDM0MscUNBQXVCLENBQUE7SUFDdkIsbURBQXFDLENB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MkI7c0JBQXZGLFNBQVM7dUJBQUMsMEJBQTBCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO2dCQUtsRCxvQkFBb0I7c0JBQTVCLEtBQUs7Z0JBS0csa0JBQWtCO3NCQUExQixLQUFLO2dCQUtHLGlCQUFpQjtzQkFBekIsS0FBSztnQkFLRyxlQUFlO3NCQUF2QixLQUFLO2dCQUtHLFFBQVE7c0JBQWhCLEtBQUs7Z0JBS0csVUFBVTtzQkFBbEIsS0FBSztnQkFLRyxrQkFBa0I7c0JBQTFCLEtBQUs7Z0JBS0csV0FBVztzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QWZ0ZXJWaWV3SW5pdCwgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25DaGFuZ2VzLCBTaW1wbGVDaGFuZ2VzLCBWaWV3Q2hpbGR9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBTZWxlY3Rpb25Nb2RlbCB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9jb2xsZWN0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgc2V0Q2hhcnRIZWlnaHQsXHJcbiAgc2xlZXAsXHJcbiAgaXNFbXB0eURhdGEsXHJcbiAgZ2V0RGlzcGxheVBvcnQsXHJcbiAgZ2V0RmlsZUZyb21JbnB1dCxcclxuICBpc1NhbWVGaWxlLFxyXG4gIGdldEFiYnJldmlhdGVkRmlsZU5hbWUsXHJcbiAgZ2V0RmlsZUZyb21Ecm9wLFxyXG4gIGdldFJlYWxQb3J0cyxcclxuICBnZXRUaW1lU3RyaW5nLFxyXG4gIHByaW50UHJvY2Vzc2VkVGltZSxcclxuICBnZXRUaW1lUmFuZ2VTdHJpbmcsXHJcbiAgZ2VuZXJhdGVQb3J0cyxcclxuICBnZXREZWZhdWx0VGltZXpvbmUsXHJcbiAgYmxvYlRvRmlsZSxcclxuICBpc0ZpbGUsXHJcbn0gZnJvbSAnLi4vdXRpbHMnO1xyXG5pbXBvcnQgeyBBYm9ydCwgQWxlcnQsIEh0bWxFbGVtZW50LCBJdGVtLCBDaGFydENvbnRlbnREYXRhLCBDaGFydENvbnRlbnRIZWFkZXIsIENoYXJ0Q29udGVudFRpbWUsIFBvcnQgfSBmcm9tICcuLi90eXBlcyc7XHJcbmltcG9ydCB7IEZpbGVTZXJ2aWNlLCBDaGFydFNlcnZpY2UsIFVJU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzJztcclxuXHJcbmltcG9ydCAnaGFtbWVyanMnO1xyXG5pbXBvcnQgJy4uL3V0aWxzL2NoYXJ0anMtZG93bnNhbXBsZSc7XHJcbmltcG9ydCAnLi4vdXRpbHMvY2hhcnRqcy16b29tJztcclxuXHJcbmVudW0gU2VhcmNoVHlwZSB7XHJcbiAgc2VhcmNoV2l0aFN1YkhlYWRlciA9ICdzZWFyY2hXaXRoU3ViSGVhZGVyJyxcclxuICBzZWFyY2hBbGwgPSAnc2VhcmNoQWxsJyxcclxuICBzZWFyY2hJbkNoaWxkcmVuID0gJ3NlYXJjaEluQ2hpbGRyZW4nXHJcbn1cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnbmd4LWhhbmEtbmFtZXNlcnZlci1oaXN0b3J5LXZpZXdlcicsXHJcbiAgdGVtcGxhdGVVcmw6ICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbICcuL25hbWVzZXJ2ZXItaGlzdG9yeS5jb21wb25lbnQuc2NzcycgXSxcclxuICBwcm92aWRlcnM6IFsgRmlsZVNlcnZpY2UsIENoYXJ0U2VydmljZSwgVUlTZXJ2aWNlIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIE5hbWVTZXJ2ZXJIaXN0b3J5Q29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzLCBBZnRlclZpZXdJbml0IHtcclxuICBAVmlld0NoaWxkKCduYW1lc2VydmVySGlzdG9yeUFsbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBuYW1lc2VydmVySGlzdG9yeUFsbFJlZjogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCduYW1lc2VydmVySGlzdG9yeUNvbnRlbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50UmVmOiBFbGVtZW50UmVmO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW2RlZmF1bHRTZWxlY3RlZEl0ZW1zXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIGRlZmF1bHRTZWxlY3RlZEl0ZW1zOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFtoaWRlTWVhc3VyZUNvbHVtbnNdXHJcbiAgICovXHJcbiAgQElucHV0KCkgaGlkZU1lYXN1cmVDb2x1bW5zOiBzdHJpbmdbXTtcclxuXHJcbiAgLyoqXHJcbiAgICogSW5wdXQgKG9wdGlvbmFsKSBiaW5kIHRvIFttYXhSb3dzTGltaXRhdGlvbl1cclxuICAgKi9cclxuICBASW5wdXQoKSBtYXhSb3dzTGltaXRhdGlvbjogbnVtYmVyO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW3Nob3dJbnN0cnVjdGlvbl1cclxuICAgKi9cclxuICBASW5wdXQoKSBzaG93SW5zdHJ1Y3Rpb24gPSB0cnVlO1xyXG5cclxuICAvKipcclxuICAgKiBJbnB1dCAob3B0aW9uYWwpIGJpbmQgdG8gW3RpbWV6b25lXVxyXG4gICAqL1xyXG4gIEBJbnB1dCgpIHRpbWV6b25lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGZpbGUgYnVmZmVyLCB1c2UgdGhpcyBmb3Igc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBmaWxlQnVmZmVyOiBCbG9iO1xyXG5cclxuICAvKipcclxuICAgKiBmaWxlIG5hbWUgZm9yIHN0cmVhbSBtb2RlXHJcbiAgICovXHJcbiAgQElucHV0KCkgc3RyZWFtTW9kZUZpbGVOYW1lOiBzdHJpbmc7XHJcblxyXG4gIC8qKlxyXG4gICAqIGF1dG8gZGlzcGxheSB0aGUgY2hhcnQgaW4gc3RyZWFtIG1vZGVcclxuICAgKi9cclxuICBASW5wdXQoKSBhdXRvRGlzcGxheTogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgZmlsZTogRmlsZTtcclxuXHJcbiAgLyoqXHJcbiAgICogdGltZSBpbmZvIG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICB0aW1lOiBDaGFydENvbnRlbnRUaW1lID0ge307XHJcblxyXG4gIC8qKlxyXG4gICAqIGRhdGEgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGRhdGE6IENoYXJ0Q29udGVudERhdGEgPSB7fTtcclxuXHJcbiAgLyoqXHJcbiAgICogaGVhZGVyIG9mIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGVcclxuICAgKi9cclxuICBoZWFkZXI6IENoYXJ0Q29udGVudEhlYWRlcltdID0gW107XHJcblxyXG4gIC8qKlxyXG4gICAqIGhvc3Qgb2YgdGhlIG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIGhvc3QgPSAnbmFtZXNlcnZlciBoaXN0b3J5IGZpbGUnO1xyXG5cclxuICAvKipcclxuICAgKiBhbGVydCBtZXNzYWdlIGNvbnRlbnRcclxuICAgKi9cclxuICBhbGVydE1lc3NhZ2U6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYWxlcnQgbWVzc2FnZSB0eXBlXHJcbiAgICovXHJcbiAgYWxlcnRUeXBlOiBBbGVydDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHBvcnQ6IHN0cmluZztcclxuXHJcbiAgLyoqXHJcbiAgICogYWxsIHRoZSBwb3J0cyBmcm9tIHRoZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqL1xyXG4gIHBvcnRzOiBQb3J0W107XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGVkIHRpbWUgcmFuZ2VcclxuICAgKi9cclxuICBkYXRlVGltZVJhbmdlOiBEYXRlW107XHJcblxyXG4gIC8qKlxyXG4gICAqIGRhdGEgc291cmNlIGZvciB0aGUgc2VsZWN0aW9uIHRhYmxlIChyaWdodCBwYXJ0IG9mIHRoZSBjaGFydClcclxuICAgKi9cclxuICB0YWJsZVNvdXJjZTogYW55W107XHJcblxyXG4gIC8qKlxyXG4gICAqIHRoZSBwcm9ncmVzcyBmb3IgcmVhZGluZyBmaWxlXHJcbiAgICovXHJcbiAgcmVhZFByb2dyZXNzID0gMDtcclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0ZWQvZHJvcHBlZCBmaWxlIG5hbWUgKGFiYnJldmlhdGlvbiksIGZ1bGwgZmlsZSBuYW1lIHdpbGwgYmUgc2hvd24gdmlhIHRoZSB0b29sdGlwc1xyXG4gICAqL1xyXG4gIGFiYnJldmlhdGVkRmlsZU5hbWUgPSAnb3IgRHJvcCBGaWxlIEhlcmUnO1xyXG5cclxuICAvKipcclxuICAgKiBmb3IgdGhlIGluc3RydWN0aW9uIHN0ZXAgNFxyXG4gICAqL1xyXG4gIHN0ZXBTaG93Q2hhcnQgPSBmYWxzZTtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBzaG93aW5nIHRoZSBuYW1lIHNlcnZlciBoaXN0b3J5IGNoYXJ0XHJcbiAgICovXHJcbiAgc2hvd0NoYXJ0RmxhZzogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBzaG93aW5nIHRoZSBmaWxlIHJlYWRpbmcgcHJvZ3Jlc3NcclxuICAgKi9cclxuICBzaG93UmVhZEZpbGVQcm9ncmVzczogYm9vbGVhbjtcclxuXHJcbiAgLyoqXHJcbiAgICogY29udHJvbCBmbGFnIGZvciBcIkxvYWRcIiBwb3J0cyBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVMb2FkUG9ydHNCdXR0b246IGJvb2xlYW47XHJcblxyXG4gIC8qKlxyXG4gICAqIGNvbnRyb2wgZmxhZyBmb3IgZW5hYmxpbmcgXCJTaG93XCIgY2hhcnQgYnV0dG9uXHJcbiAgICovXHJcbiAgZW5hYmxlU2hvd0NoYXJ0QnV0dG9uOiBib29sZWFuO1xyXG5cclxuICAvKipcclxuICAgKiBjb250cm9sIGZsYWcgZm9yIFwiUmVzZXRcIiBjaGFydCBidXR0b25cclxuICAgKi9cclxuICBlbmFibGVSZXNldENoYXJ0QnV0dG9uOiBib29sZWFuO1xyXG5cclxuICBzZWFyY2hUeXBlID0gU2VhcmNoVHlwZS5zZWFyY2hBbGw7XHJcblxyXG4gIC8qKlxyXG4gICAqIHNlbGVjdGlvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZVxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3NlbGVjdGlvbjogU2VsZWN0aW9uTW9kZWw8YW55PjtcclxuXHJcbiAgLyoqXHJcbiAgICogY3VycmVudCBkaXNwbGF5aW5nIHBvcnRcclxuICAgKi9cclxuICBwcml2YXRlIF9jdXJyZW50Q2hhcnRQb3J0OiBzdHJpbmc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZmlsZVNlcnZpY2U6IEZpbGVTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgY2hhcnRTZXJ2aWNlOiBDaGFydFNlcnZpY2UsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSB1aVNlcnZpY2U6IFVJU2VydmljZSkge31cclxuXHJcbiAgYXN5bmMgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xyXG4gICAgY29uc3QgZmJjID0gY2hhbmdlcy5maWxlQnVmZmVyO1xyXG4gICAgLy8gIWlzRmlsZShmYmMuY3VycmVudFZhbHVlKSAtLT4gb25seSBzaG93IGNoYXJ0IHdoZW4gaXQncyBub3QgYSBmaWxlIC0+IGl0J3MgYSBmaWxlLCBtZWFucyB0aGUgb2JqZWN0IGhhcyBhbHJlYWR5IGJlZW4gcHJvY2Vzc2VkXHJcbiAgICBpZiAoZmJjICYmIGZiYy5jdXJyZW50VmFsdWUgJiYgZmJjLmN1cnJlbnRWYWx1ZSAhPT0gZmJjLnByZXZpb3VzVmFsdWUgJiYgIWlzRmlsZShmYmMuY3VycmVudFZhbHVlKSkge1xyXG4gICAgICAvLyBzaW11bGF0ZSBzZWxlY3RpbmcgZmlsZVxyXG4gICAgICBjb25zdCBzaW11bGF0ZWRFdmVudCA9IHt0YXJnZXQ6IHtmaWxlczogW2Jsb2JUb0ZpbGUoZmJjLmN1cnJlbnRWYWx1ZSwgdGhpcy5zdHJlYW1Nb2RlRmlsZU5hbWUpXX19O1xyXG4gICAgICBhd2FpdCB0aGlzLmZpbGVTZWxlY3RlZChzaW11bGF0ZWRFdmVudCk7XHJcbiAgICAgIHRoaXMucG9ydCA9IHVuZGVmaW5lZDsgLy8gY2xlYXIgdGhlIHBvcnQgc2VsZWN0aW9uXHJcbiAgICAgIGlmICh0aGlzLmF1dG9EaXNwbGF5KSB7XHJcbiAgICAgICAgdGhpcy5vblJlc2l6ZSgpOyAvLyBuZ0FmdGVyVmlld0luaXQvcmVzaXplIHdvbid0IHdvcmsgaW4gZWxlY3Ryb25cclxuICAgICAgICB0aGlzLnNob3dDaGFydCgpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBuZ0FmdGVyVmlld0luaXQoKSB7XHJcbiAgICAvLyBpbml0IGl0ZW1zJyBzdGF0dXNcclxuICAgIC8vIHJlc2V0IGNoYXJ0IGJ1dHRvbiB3aWxsIGJlIGRpc2FibGUgYnkgZGVmYXVsdCBsYXRlciwgb25seSBiZSBlbmFibGVkIGFmdGVyIHpvb21lZFxyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW1xyXG4gICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQuc2hvd0NoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5sb2FkUG9ydHNCdXR0b24sIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgIHRoaXMub25SZXNpemUoKTsgLy8gdXBkYXRlIHRoZSBzaXplLCBvdGhlcndpc2UgdGhlcmUgbWF5IGhhdmUgYSBzY3JvbGxiYXIgKGJlY2F1c2Ugb2YgdGhlIHRvYXN0KSBpZiBhdXRvIGRpc3BsYXkgaXMgc2V0IHRvIHRydWVcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlc2V0IENoYXJ0IHRvIGluaXRpYWwgc3RhdHVzXHJcbiAgICogSWYgbGVnZW5kIGlzIGFscmVhZHkgc2VsZWN0ZWQvdW5zZWxlY3RlZCBmcm9tIHRoZSBsaXN0LCBpdCB3b3VsZG4ndCBiZSByZXN0b3JlZC5cclxuICAgKi9cclxuICByZXNldENoYXJ0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICBpZiAodGhpcy50YWJsZVNvdXJjZSAmJiB0aGlzLl9zZWxlY3Rpb24pIHtcclxuICAgICAgdGhpcy5jaGFydFNlcnZpY2UucmVzZXRDaGFydCh0aGlzLnRhYmxlU291cmNlLCB0aGlzLl9zZWxlY3Rpb24pXHJcbiAgICAgICAgLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlYWQgdGhlIGZpbGUgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0XHJcbiAgICovXHJcbiAgc2hvd0NoYXJ0KCk6IHZvaWQge1xyXG4gICAgLy8gYWZ0ZXIgY2xpY2ssIHRoaXMgYnV0dG9uIGFuZCByZXNldCBidXR0b24gbmVlZHMgdG8gYmUgZGlzYWJsZWRcclxuICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IGZhbHNlfSxcclxuICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XSk7XHJcblxyXG4gICAgdGhpcy5zdGVwU2hvd0NoYXJ0ID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLl9pbml0Q2hhcnRFbnYoKS50aGVuKCgpID0+IHtcclxuICAgICAgY29uc3Qgc2VsZWN0ZWRUaW1lID0gdGhpcy5fc2VsZWN0ZWRUaW1lUmFuZ2U7XHJcbiAgICAgIGlmIChzZWxlY3RlZFRpbWUuc3RhcnRUaW1lID4gc2VsZWN0ZWRUaW1lLmVuZFRpbWUpIHtcclxuICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgJ1RpbWUgcmFuZ2UgaXMgbm90IGNvcnJlY3QuJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh0aGlzLmZpbGUpIHtcclxuICAgICAgICAvLyBpdCdzIHRpbWUgZm9yIGRpc3BsYXlpbmcgdGhlIHJlYWRpbmcgcHJvZ3Jlc3MgYmFyXHJcbiAgICAgICAgdGhpcy5fdG9nZ2xlSXRlbXMoW3tpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9idWlsZENoYXJ0RnJvbURhdGFGaWxlKHRoaXMuZmlsZSwgc2VsZWN0ZWRUaW1lLnN0YXJ0VGltZSwgc2VsZWN0ZWRUaW1lLmVuZFRpbWUsIHRoaXMucG9ydCk7XHJcbiAgICAgIH1cclxuICAgIH0pLmNhdGNoKGUgPT4ge1xyXG4gICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSk7XHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogZmFsc2V9XSk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGxvYWQgYWxsIHBvcnRzIGZyb20gZmlsZVxyXG4gICAqL1xyXG4gIGxvYWRQb3J0cygpOiB2b2lkIHtcclxuICAgIC8vIGRvIGNvbmZpcm1hdGlvbiBhY3Rpb25zXHJcbiAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgIC8vIGJlZm9yZSBzdGFydCBsb2FkaW5nIHBvcnRzIGZyb20gZmlsZSwgZGlzcGxheSBwcm9ncmVzcyBiYXIgYW5kIGRpc2FibGUgdGhlIHNob3cgY2hhcnQgYnV0dG9uXHJcbiAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnJlYWRGaWxlUHJvZ3Jlc3MsIHN0YXR1czogdHJ1ZX0sXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9XHJcbiAgICAgIF0pO1xyXG4gICAgICB0aGlzLl9yZWFkUG9ydHNGcm9tRmlsZSh0aGlzLmZpbGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogc2VsZWN0IG5hbWUgc2VydmVyIGhpc3RvcnkgZmlsZSwgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgMSBmaWxlLlxyXG4gICAqL1xyXG4gIGFzeW5jIGZpbGVTZWxlY3RlZChldmVudDogYW55KSB7XHJcbiAgICBjb25zdCBzZWxlY3RlZEZpbGUgPSBnZXRGaWxlRnJvbUlucHV0KGV2ZW50LnRhcmdldCk7XHJcbiAgICBpZiAoc2VsZWN0ZWRGaWxlKSB7XHJcbiAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIHNlbGVjdGVkRmlsZSkpIHtcclxuICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICBhd2FpdCB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCkuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG5cclxuICAgICAgICB0aGlzLmZpbGUgPSBzZWxlY3RlZEZpbGU7XHJcbiAgICAgICAgdGhpcy5hYmJyZXZpYXRlZEZpbGVOYW1lID0gZ2V0QWJicmV2aWF0ZWRGaWxlTmFtZSh0aGlzLmZpbGUubmFtZSk7XHJcbiAgICAgICAgLy8gYWZ0ZXIgZmlsZSBoYXMgYmVlbiBzZWxlY3RlZCwgdGhlIHNob3cgY2hhcnQgYnV0dG9uIG5lZWRzIHRvIGJlIGVuYWJsZWRcclxuICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogdHJ1ZX1dKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZHJvcCBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUsIGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIDEgZmlsZS5cclxuICAgKi9cclxuICBmaWxlRHJvcHBlZChldmVudDogYW55KSB7XHJcbiAgICBnZXRGaWxlRnJvbURyb3AoZXZlbnQpXHJcbiAgICAgIC50aGVuKGZpbGUgPT4ge1xyXG4gICAgICAgIGlmICghaXNTYW1lRmlsZSh0aGlzLmZpbGUsIGZpbGUpKSB7XHJcbiAgICAgICAgICAvLyBpbml0IHBvcnQgc2VsZWN0b3JcclxuICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XHJcbiAgICAgICAgICBpZiAodGhpcy5maWxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWJicmV2aWF0ZWRGaWxlTmFtZSA9IGdldEFiYnJldmlhdGVkRmlsZU5hbWUodGhpcy5maWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAvLyBhZnRlciBmaWxlIGhhcyBiZWVuIGRyb3BwZWQsIHRoZSBzaG93IGNoYXJ0IGJ1dHRvbiBuZWVkcyB0byBiZSBlbmFibGVkXHJcbiAgICAgICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfV0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH19KVxyXG4gICAgICAudGhlbigoKSA9PiAge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKCk7XHJcbiAgICAgIH0pXHJcbiAgICAgIC5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZWxlY3Qgb25lIGl0ZW0gZnJvbSBzZWxlY3Rpb24gdGFibGUsIHJlbGF0aXZlIGRhdGFzZXQgd2lsbCBiZSBzaG93biBvciBoaWRkZW5cclxuICAgKi9cclxuICBzZWxlY3RJdGVtKGV2ZW50OiBhbnkpIHtcclxuICAgIGlmIChldmVudCAmJiBldmVudC50YWJsZVJvdykge1xyXG4gICAgICBjb25zdCByb3cgPSBldmVudC50YWJsZVJvdztcclxuICAgICAgdGhpcy5fc2VsZWN0aW9uLnRvZ2dsZShyb3cpO1xyXG4gICAgICB0aGlzLmNoYXJ0U2VydmljZS50b2dnbGVEYXRhSW5DaGFydChyb3cuS1BJLCAhdGhpcy5fc2VsZWN0aW9uLmlzU2VsZWN0ZWQocm93KSlcclxuICAgICAgICAuY2F0Y2goZSA9PiB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5lcnJvciwgZSkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVjYWxjdWxhdGluZyBjaGFydCBoZWlnaHQgd2hlbiByZXNpemluZ1xyXG4gICAqL1xyXG4gIG9uUmVzaXplKCkge1xyXG4gICAgY29uc3QgbmFtZXNlcnZlckhpc3RvcnlBbGxFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUFsbFJlZiA/IHRoaXMubmFtZXNlcnZlckhpc3RvcnlBbGxSZWYubmF0aXZlRWxlbWVudCA6IG51bGw7XHJcbiAgICBjb25zdCBuYW1lc2VydmVySGlzdG9yeUNvbnRlbnRFbGVtZW50ID0gdGhpcy5uYW1lc2VydmVySGlzdG9yeUNvbnRlbnRSZWYgPyB0aGlzLm5hbWVzZXJ2ZXJIaXN0b3J5Q29udGVudFJlZi5uYXRpdmVFbGVtZW50IDogbnVsbDtcclxuICAgIHNldENoYXJ0SGVpZ2h0KG5hbWVzZXJ2ZXJIaXN0b3J5QWxsRWxlbWVudCwgbmFtZXNlcnZlckhpc3RvcnlDb250ZW50RWxlbWVudCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTd2l0Y2ggcG9ydCBhbmQgcmVpbml0aWFsaXplIGNoYXJ0LCB0cmlnZ2VyZWQgYnkgY2hhbmdpbmcgdGhlIHBvcnRcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHN3aXRjaFBvcnRGb3JDaGFydChwb3J0OiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGlmIChwb3J0ID09PSB0aGlzLl9jdXJyZW50Q2hhcnRQb3J0KSB7XHJcbiAgICAgIC8vIG5vdCB0byBzd2l0Y2ggcG9ydCwgYmVjYXVzZSB0aGUgcmVsYXRpdmUgcG9ydCBpcyBkaXNwbGF5aW5nLCBubyBuZWVkIHRvIHJlbmRlciB0d2ljZS5cclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmZpbGUgfHwgIXBvcnQgfHwgcG9ydC5sZW5ndGggPT09IDAgfHwgcG9ydC5zbGljZSgxLCAzKSA9PT0gJyoqJykge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9IGVsc2UgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkubGVuZ3RoID4gMSAmJiAhZ2V0UmVhbFBvcnRzKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkpLmluY2x1ZGVzKHBvcnQpKSB7XHJcbiAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmluZm8sIGBEYXRhIG9mIHBvcnQ6JHtwb3J0fSBpcyBub3QgbG9hZGVkLCBwbGVhc2UgbG9hZCB0aGUgZGF0YSBmaXJzdCBieSBjbGlja2luZyB0aGUgXCJTaG93XCIgYnV0dG9uLmApO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgLy8gb25seSBkbyBzd2l0Y2ggcG9ydHMgd2hlbiBhdmFpbGFibGUgcG9ydHMgbnVtYmVyID4gMVxyXG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMudGltZSkuZmlsdGVyKGtleSA9PiB0aGlzLnRpbWVba2V5XSkubGVuZ3RoID4gMSkge1xyXG4gICAgICAvLyBkaXNhYmxlIHRoZSBcInNob3cgY2hhcnRcIiBhbmQgXCJyZXNldCBjaGFydFwiIGJ1dHRvbiBmaXJzdFxyXG4gICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAge2lkOiBIdG1sRWxlbWVudC5zaG93Q2hhcnRCdXR0b24sIHN0YXR1czogZmFsc2V9LFxyXG4gICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVzZXRDaGFydEJ1dHRvbiwgc3RhdHVzOiBmYWxzZX1dKTtcclxuICAgICAgLy8gaW5pdCB0aGUgZW52aXJvbm1lbnQgd2l0aCBzd2l0Y2ggZmxhZ1xyXG4gICAgICB0aGlzLl9pbml0Q2hhcnRFbnYodHJ1ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgbnVsbCwgdHJ1ZSk7XHJcbiAgICAgIH0pLmNhdGNoKGUgPT4gdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuZXJyb3IsIGUpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUgY29sdW1ucyB3aGljaCBuZWVkIHRvIGJlIGhpZGRlbiBmcm9tIHRoZSBzZWxlY3Rpb24gdGFibGVcclxuICAgKi9cclxuICBnZXQgaGlkZGVuQ29sdW1ucygpOiBzdHJpbmdbXSB7XHJcbiAgICByZXR1cm4gdGhpcy51aVNlcnZpY2UuZ2V0SGlkZGVuQ29sdW1ucyh0aGlzLmhpZGVNZWFzdXJlQ29sdW1ucyk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgZGVmYXVsdCB0aW1lem9uZVxyXG4gICAqL1xyXG4gIGdldCBkZWZhdWx0VGltZXpvbmUoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiBnZXREZWZhdWx0VGltZXpvbmUoKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCB0aGUga2V5IGNvbHVtbiAoS1BJKVxyXG4gICAqL1xyXG4gIGdldCBrcGlDb2x1bW4oKTogSXRlbSB7XHJcbiAgICByZXR1cm4gSXRlbS5rcGk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBnZXQgdGhlIGtleSBjb2x1bW4gKEtQSSlcclxuICAgKi9cclxuICBnZXQgZGVzY0NvbHVtbigpOiBJdGVtIHtcclxuICAgIHJldHVybiBJdGVtLmRlc2NyaXB0aW9uO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzZWxlY3RlZCB0aW1lIHJhbmdlLCBzZXQgc2Vjb25kIGFuZCBtaWxsaXNlY29uZCBwYXJ0IHRvIDBcclxuICAgKi9cclxuICBwcml2YXRlIGdldCBfc2VsZWN0ZWRUaW1lUmFuZ2UoKToge3N0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXJ9IHtcclxuICAgIGxldCBzdGFydFRpbWUgPSAwO1xyXG4gICAgbGV0IGVuZFRpbWUgPSA0MTAyMzU4NDAwMDAwOyAvLyAyMDk5LzEyLzMxXHJcbiAgICBpZiAodGhpcy5kYXRlVGltZVJhbmdlICE9IG51bGwpIHtcclxuICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZS5sZW5ndGggPj0gMSkge1xyXG4gICAgICAgIC8vIGdldCBzdGFydCB0aW1lXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0ZVRpbWVSYW5nZVswXSkge1xyXG4gICAgICAgICAgc3RhcnRUaW1lID0gdGhpcy5kYXRlVGltZVJhbmdlWzBdLnNldFNlY29uZHMoMCwgMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGVUaW1lUmFuZ2VbMV0pIHtcclxuICAgICAgICAgIGVuZFRpbWUgPSB0aGlzLmRhdGVUaW1lUmFuZ2VbMV0uc2V0U2Vjb25kcygwLCAwKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7c3RhcnRUaW1lOiBzdGFydFRpbWUsIGVuZFRpbWU6IGVuZFRpbWV9O1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSB0aW1lIHJhbmdlIHN0cmluZywgZWc6IDIwMTgtMTAtMjUgMTA6MjUgfiAyMDE4LTEwLTI2IDEwOjI2XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX3NlbGVjdGVkVGltZVJhbmdlU3RyaW5nKCk6IHN0cmluZyB7XHJcbiAgICBjb25zdCBzZWxlY3RlZFRpbWVSYW5nZVN0cmluZyA9IHRoaXMuX3NlbGVjdGVkVGltZVJhbmdlO1xyXG4gICAgcmV0dXJuIGAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuc3RhcnRUaW1lKX0gfiAke2dldFRpbWVTdHJpbmcoc2VsZWN0ZWRUaW1lUmFuZ2VTdHJpbmcuZW5kVGltZSl9YDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIga2V5XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXQgX2hlYWRlcktleSgpOiBzdHJpbmdbXSB7XHJcbiAgICBpZiAodGhpcy5oZWFkZXIpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuaGVhZGVyLm1hcChoZWFkZXJJdGVtID0+IGhlYWRlckl0ZW0ua2V5KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIGdldCBhcnJheSBvZiBoZWFkZXIgdGV4dFxyXG4gICAqL1xyXG4gIHByaXZhdGUgZ2V0IF9oZWFkZXJUZXh0KCk6IHN0cmluZ1tdIHtcclxuICAgIHJldHVybiB0aGlzLmhlYWRlci5tYXAoaGVhZGVySXRlbSA9PiBoZWFkZXJJdGVtLnRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogcmVhZCBwb3J0cyBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIG5hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfcmVhZFBvcnRzRnJvbUZpbGUoZmlsZTogRmlsZSk6IHZvaWQge1xyXG4gICAgdGhpcy5maWxlU2VydmljZS5nZXRQb3J0c0Zyb21GaWxlKGZpbGUsIChwcm9ncmVzcykgPT4ge1xyXG4gICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IHByb2dyZXNzO1xyXG4gICAgfSkudGhlbihwb3J0cyA9PiB7XHJcbiAgICAgIHJldHVybiBzbGVlcCgxMDApLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9pbml0UG9ydFNlbGVjdG9yKHBvcnRzKTtcclxuICAgICAgfSk7XHJcbiAgICB9KS5jYXRjaChlID0+IHRoaXMuX3Nob3dNZXNzYWdlKEFsZXJ0LmVycm9yLCBlKSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBidWlsZCBjaGFydCBmcm9tIHRoZSBzZWxlY3RlZCBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBmaWxlIHRoZSBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZVxyXG4gICAqIEBwYXJhbSBzdGFydFRpbWUgc3RhcnQgdGltZVxyXG4gICAqIEBwYXJhbSBlbmRUaW1lIGVuZCB0aW1lXHJcbiAgICogQHBhcmFtIHNlbGVjdGVkUG9ydCBzZWxlY3RlZCBwb3J0IGZvciBuYW1lc2VydmVyIGhpc3RvcnkgZmlsZSAoTURDIHN5c3RlbSlcclxuICAgKi9cclxuICBwcml2YXRlIF9idWlsZENoYXJ0RnJvbURhdGFGaWxlKGZpbGU6IEZpbGUsIHN0YXJ0VGltZTogbnVtYmVyLCBlbmRUaW1lOiBudW1iZXIsIHNlbGVjdGVkUG9ydDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmZpbGVTZXJ2aWNlLmdldENoYXJ0Q29udGVudEZyb21GaWxlKFxyXG4gICAgICBmaWxlLFxyXG4gICAgICBzdGFydFRpbWUsXHJcbiAgICAgIGVuZFRpbWUsXHJcbiAgICAgIHNlbGVjdGVkUG9ydCxcclxuICAgICAgdGhpcy50aW1lem9uZSxcclxuICAgICAgdGhpcy5tYXhSb3dzTGltaXRhdGlvbiwgcHJvZ3Jlc3MgPT4gdGhpcy5yZWFkUHJvZ3Jlc3MgPSBwcm9ncmVzcylcclxuICAgICAgLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAvLyBwYXJzaW5nIGRvbmVcclxuICAgICAgICBjb25zdCBiZWdpblRpbWUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgIGNvbnN0IHByb21pc2VzID0gW107XHJcbiAgICAgICAgY29uc3QgcG9ydHMgPSBnZXRSZWFsUG9ydHMoT2JqZWN0LmtleXMocmVzdWx0LnRpbWUpLCB0cnVlKTtcclxuICAgICAgICBwb3J0cy5mb3JFYWNoKHBvcnQgPT4ge1xyXG4gICAgICAgICAgLy8gY29udmVydCB0aGUgdW5pdCBhbmQgZ2VuZXJhdGUgY29udHJvbGxpbmcgZGF0YSBmb3IgYWxsIHBvcnRzXHJcbiAgICAgICAgICBwcm9taXNlcy5wdXNoKHRoaXMudWlTZXJ2aWNlLmNvbnZlcnRVbml0QW5kR2VuZXJhdGVDb250cm9sRGF0YShyZXN1bHQuZGF0YVtwb3J0XSwgcmVzdWx0LmhlYWRlciwgcG9ydCkpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpXHJcbiAgICAgICAgICAudGhlbigoKSA9PiB7XHJcblxyXG4gICAgICAgICAgICAvLyBnZXQgYWxsIHBvcnRzIGZyb20gdGhlIGFuYWx5emVkIGRhdGEodGltZSlcclxuICAgICAgICAgICAgLy8gZ2V0IHRoZSBwb3J0IHRoYXQgd2lsbCBiZSBzaG93biBpbiB0aGUgcGFnZVxyXG4gICAgICAgICAgICBjb25zdCBwb3J0ID0gZ2V0RGlzcGxheVBvcnQocG9ydHMsIHNlbGVjdGVkUG9ydCk7XHJcblxyXG4gICAgICAgICAgICBwcmludFByb2Nlc3NlZFRpbWUoYmVnaW5UaW1lLCAnY29udmVydGluZyBzdGVwJyk7XHJcbiAgICAgICAgICAgIHBvcnRzLmZvckVhY2goIHBvcnRJdGVtID0+IHRoaXMudWlTZXJ2aWNlLmdlbmVyYXRlWVNjYWxlKHBvcnRJdGVtKSk7XHJcbiAgICAgICAgICAgIHByaW50UHJvY2Vzc2VkVGltZShiZWdpblRpbWUsICdnZW5lcmF0aW5nIFlTY2FsZSBzdGVwJyk7XHJcbiAgICAgICAgICAgIHRoaXMuZGF0YSA9IHJlc3VsdC5kYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnRpbWUgPSByZXN1bHQudGltZTtcclxuICAgICAgICAgICAgdGhpcy5oZWFkZXIgPSB0aGlzLnVpU2VydmljZS5nZXRIZWFkZXIocmVzdWx0LmhlYWRlciwgcG9ydCk7XHJcbiAgICAgICAgICAgIHRoaXMuaG9zdCA9IHJlc3VsdC5ob3N0O1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0LmFib3J0ZWQgPT09IEFib3J0Lm1heExpbmVOdW1SZWFjaGVkKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoXHJcbiAgICAgICAgICAgICAgICBBbGVydC53YXJuaW5nLCBgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgcmVhY2hlZC4gUHJvY2Vzc2VkIHRpbWUgcmFuZ2UgaXM6ICR7Z2V0VGltZVJhbmdlU3RyaW5nKHRoaXMudGltZSl9LmApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIGlmIChpc0VtcHR5RGF0YSh0aGlzLmRhdGEpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zaG93TWVzc2FnZShBbGVydC5pbmZvLCBgQ2Fubm90IGZpbmQgYW55IGRhdGEgZm9yIHRoZSBzZWxlY3RlZCB0aW1lIHBlcmlvZDogJHt0aGlzLl9zZWxlY3RlZFRpbWVSYW5nZVN0cmluZ31gKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc2hvd01lc3NhZ2UoQWxlcnQuc3VjY2VzcywgYFByb2Nlc3NlZCB0aW1lIHJhbmdlIGlzOiAke2dldFRpbWVSYW5nZVN0cmluZyh0aGlzLnRpbWUpfS5gKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHNsZWVwKDEwMCkudGhlbigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2J1aWxkQ2hhcnQocG9ydCwgcG9ydHMpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHJlaW5pdGlhbGl6ZSB0aGUgcG9ydCBzZWxlY3RvciB3aXRoIHRoZSBwb3J0c1xyXG4gICAqL1xyXG4gIHByaXZhdGUgX2luaXRQb3J0U2VsZWN0b3IocG9ydHM6IHN0cmluZ1tdID0gbnVsbCwgc2VsZWN0ZWRQb3J0OiBzdHJpbmcgPSBudWxsKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XHJcbiAgICAgIC8vIGluaXRpYWxpemF0aW9uIGZvciBuZ3gtc2VsZWN0XHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHBvcnRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAvLyBNREMsIHJlbW92ZSBkZWZhdWx0ICcwMDAwJyBwb3J0XHJcbiAgICAgICAgdGhpcy5wb3J0cyA9IGdlbmVyYXRlUG9ydHMoZ2V0UmVhbFBvcnRzKHBvcnRzKSwgc2VsZWN0ZWRQb3J0KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLnBvcnRzID0gZ2VuZXJhdGVQb3J0cyhwb3J0cyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChwb3J0cyAhPSBudWxsICYmIHNlbGVjdGVkUG9ydCA9PT0gbnVsbCkge1xyXG4gICAgICAgIC8vIHJlc2V0IHN0YXR1cyB3aGVuIGRvaW5nOlxyXG4gICAgICAgIC8vIDEuIGxvYWRpbmcgcG9ydHNcclxuICAgICAgICAvLyAyLiB0aGUgZmlsZSBkb2Vzbid0IGNvbnRhaW4gdGhlIHNlbGVjdGVkIFBvcnRcclxuICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgLy8gaGlkZSB0aGUgcHJvZ3Jlc3MgYmFyIGFuZCBlbmFibGUgdGhlIFwic2hvdyBjaGFydFwiIGJ1dHRvblxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFtcclxuICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9XHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogYnVpbGQgYW5kIGRpc3BsYXkgdGhlIGNoYXJ0IG9uIHBhZ2VcclxuICAgKiBAcGFyYW0gcG9ydCB0aGUgc2VsZWN0ZWQgcG9ydFxyXG4gICAqIEBwYXJhbSBwb3J0cyBhbGwgYXZhaWxhYmxlIHBvcnRzXHJcbiAgICogQHBhcmFtIHN3aXRjaEZsYWcgaW5kaWNhdGVzIHdoZXRoZXIgdGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgZnJvbSBzd2l0Y2hpbmcgcG9ydHMgKG5vIGluaXQgcG9ydCBzZWxlY3RvciBuZWVkZWQpXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfYnVpbGRDaGFydChwb3J0OiBzdHJpbmcsIHBvcnRzOiBzdHJpbmdbXSwgc3dpdGNoRmxhZyA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIGNvbnN0IGJlZ2luVGltZSA9IG5ldyBEYXRlKCk7XHJcbiAgICBpZiAocG9ydCkge1xyXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2xvYWRTZXR0aW5nc0ZvclNlbGVjdGlvbnNUYWJsZShwb3J0KSlcclxuICAgICAgICAudGhlbiggKCkgPT4ge1xyXG4gICAgICAgICAgLy8gZ2V0IHRoZSBjb25maWdcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5idWlsZENoYXJ0KFxyXG4gICAgICAgICAgICB0aGlzLnRpbWVbcG9ydF0sXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVtwb3J0XSxcclxuICAgICAgICAgICAgdGhpcy51aVNlcnZpY2UuZ2V0WVNjYWxlKHRoaXMuX2hlYWRlcktleSwgcG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlclRleHQsXHJcbiAgICAgICAgICAgIHRoaXMuX2hlYWRlcktleSxcclxuICAgICAgICAgICAgdGhpcy5fc2VsZWN0aW9uLFxyXG4gICAgICAgICAgICB0aGlzLnRhYmxlU291cmNlLFxyXG4gICAgICAgICAgICB0aGlzLl9nZXRIb3N0VGl0bGUocG9ydCksXHJcbiAgICAgICAgICAgIHRoaXMudWlTZXJ2aWNlLmdldERpc3BsYXlJdGVtcyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpLFxyXG4gICAgICAgICAgICB0aGlzLl9vblpvb20uYmluZCh0aGlzKSlcclxuICAgICAgICAgICAgLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMucmVhZFByb2dyZXNzID0gMDtcclxuICAgICAgICAgICAgICAvLyBhZnRlciBjaGFydCBoYXMgYmVlbiBjcmVhdGVkLCBzaG93IHRoZSBjaGFydCBhcmVhLCBoaWRlIHByb2dyZXNzIGJhciBhbmQgZW5hYmxlIHRoZSBcInNob3cgY2hhcnRcIiBidXR0b25cclxuICAgICAgICAgICAgICB0aGlzLl90b2dnbGVJdGVtcyhbXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiB0cnVlfSxcclxuICAgICAgICAgICAgICAgIHtpZDogSHRtbEVsZW1lbnQucmVhZEZpbGVQcm9ncmVzcywgc3RhdHVzOiBmYWxzZX0sXHJcbiAgICAgICAgICAgICAgICB7aWQ6IEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbiwgc3RhdHVzOiB0cnVlfVxyXG4gICAgICAgICAgICAgIF0pO1xyXG4gICAgICAgICAgICAgIC8vIHNldCBwb3J0IHRvIGN1cnJlbnQgZGlzcGxheWluZyBwb3J0XHJcbiAgICAgICAgICAgICAgdGhpcy5fY3VycmVudENoYXJ0UG9ydCA9IHBvcnQ7XHJcbiAgICAgICAgICAgICAgcHJpbnRQcm9jZXNzZWRUaW1lKGJlZ2luVGltZSwgJ3N0ZXBfYnVpbGRfY2hhcnQnKTtcclxuICAgICAgICAgICAgICBpZiAocG9ydHMgJiYgcG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGluaXRpYWxpemUgcG9ydCBzZWxlY3Rvci4gRG8gbm90IG5lZWQgdG8gZG8gaXQgd2hlbiBzd2l0Y2hpbmcgcG9ydC5cclxuICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAocG9ydHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dNZXNzYWdlKFxyXG4gICAgICAgICAgQWxlcnQud2FybmluZyxcclxuICAgICAgICAgICdUaGUgc2VsZWN0ZWQgcG9ydCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbmFtZSBzZXJ2ZXIgaGlzdG9yeSBmaWxlLiBQbGVhc2UgY2hvb3NlIGEgY29ycmVjdCBwb3J0IGFuZCBoYXZlIGEgdHJ5IGFnYWluLicpO1xyXG4gICAgICAgIGlmICghc3dpdGNoRmxhZykge1xyXG4gICAgICAgICAgLy8gaW5pdGlhbGl6ZSBwb3J0IHNlbGVjdG9yLiBEbyBub3QgbmVlZCB0byBkbyBpdCB3aGVuIHN3aXRjaGluZyBwb3J0LlxyXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2luaXRQb3J0U2VsZWN0b3IocG9ydHMsIHBvcnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogZ2V0IHRoZSBzdHJpbmcgdGhhdCB3aWxsIGJlIGRpc3BsYXllZCBvbiB0aGUgdGl0bGUgYXJlYSBvZiB0aGUgY2hhcnRcclxuICAgKiBlZzogaG9zdDEgLSAzMDA0MCAoMjAxOC0wOS0wNSAxNTozMjozMiB+IDIwMTgtMDktMDcgMTU6MzI6MTUpXHJcbiAgICogQHBhcmFtIHBvcnQgc2VsZWN0ZWQgcG9ydFxyXG4gICAqL1xyXG4gIHByaXZhdGUgX2dldEhvc3RUaXRsZShwb3J0OiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgaWYgKHRoaXMuaG9zdCkge1xyXG4gICAgICByZXR1cm4gIGAke3RoaXMuaG9zdH0gLSAke3BvcnR9ICggJHtnZXRUaW1lUmFuZ2VTdHJpbmcodGhpcy50aW1lW3BvcnRdKX0gKWA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBhZnRlciB6b29tLCBlbmFibGUgdGhlIHJlc2V0IGJ1dHRvbi5cclxuICAgKi9cclxuICBwcml2YXRlIF9vblpvb20oKTogdm9pZCB7XHJcbiAgICB0aGlzLl90b2dnbGVJdGVtcyhbe2lkOiBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uLCBzdGF0dXM6IHRydWV9XSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBpbml0aWFsaXplIGNoYXJ0LCBpbmNsdWRpbmc6IGRlc3Ryb3kgY3VycmVudCBjaGFydCwgaW5pdGlhbGl6ZSBjb25maWcsIGluaXRpYWxpemUgYWxsIHJlbGF0aXZlIGRhdGFcclxuICAgKi9cclxuICBwcml2YXRlIF9pbml0Q2hhcnRFbnYoc3dpdGNoRmxhZzogYm9vbGVhbiA9IGZhbHNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLmNoYXJ0U2VydmljZS5kZXN0cm95Q2hhcnQoKS50aGVuKCgpID0+IHtcclxuICAgICAge1xyXG4gICAgICAgIC8vIGNsZWFudXAgb3RoZXIgZGF0YVxyXG4gICAgICAgIHRoaXMuX3RvZ2dsZUl0ZW1zKFt7aWQ6IEh0bWxFbGVtZW50LmNoYXJ0QXJlYSwgc3RhdHVzOiBmYWxzZX1dKTtcclxuXHJcbiAgICAgICAgaWYgKCFzd2l0Y2hGbGFnKSB7XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnRpbWUpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMudGltZVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy50aW1lW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy50aW1lID0ge307XHJcbiAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLmRhdGEpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVtrZXldKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhW2tleV0ubGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgICAgdGhpcy5kYXRhID0ge307XHJcbiAgICAgICAgICB0aGlzLmhlYWRlci5sZW5ndGggPSAwO1xyXG4gICAgICAgICAgdGhpcy5ob3N0ID0gJ25hbWVzZXJ2ZXIgaGlzdG9yeSBmaWxlJztcclxuICAgICAgICAgIHRoaXMudGFibGVTb3VyY2UgPSB2b2lkIDA7XHJcbiAgICAgICAgICB0aGlzLnJlYWRQcm9ncmVzcyA9IDA7XHJcbiAgICAgICAgICB0aGlzLnVpU2VydmljZS5jbGVhckxvYWRIaXN0b3J5SW5mb3MoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTG9hZCBzZXR0aW5ncyBmb3IgdGhlIHNlbGVjdGlvbiB0YWJsZSAodGhlIHJpZ2h0IHBhcnQgb2YgdGhlIGNoYXJ0KVxyXG4gICAqIEBwYXJhbSBwb3J0IHRoZSBzZWxlY3RlZCBwb3J0XHJcbiAgICovXHJcbiAgcHJpdmF0ZSBfbG9hZFNldHRpbmdzRm9yU2VsZWN0aW9uc1RhYmxlKHBvcnQ6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgdGhpcy50YWJsZVNvdXJjZSA9IHRoaXMudWlTZXJ2aWNlLmdldFNlbGVjdGlvblRhYmxlUm93cyh0aGlzLl9oZWFkZXJLZXksIHBvcnQsIHRoaXMuZGVmYXVsdFNlbGVjdGVkSXRlbXMpO1xyXG4gICAgdGhpcy5fc2VsZWN0aW9uID0gbmV3IFNlbGVjdGlvbk1vZGVsKHRydWUsIFtdKTtcclxuICAgIHRoaXMudGFibGVTb3VyY2UuZm9yRWFjaChyb3cgPT4ge1xyXG4gICAgICBpZiAodGhpcy51aVNlcnZpY2UuZ2V0RGlzcGxheUl0ZW1zKHRoaXMuX2hlYWRlcktleSwgcG9ydCwgdGhpcy5kZWZhdWx0U2VsZWN0ZWRJdGVtcykuaW5jbHVkZXMocm93LktQSSkpIHtcclxuICAgICAgICB0aGlzLl9zZWxlY3Rpb24uc2VsZWN0KHJvdyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2hvdyBtZXNzYWdlc1xyXG4gICAqIEBwYXJhbSB0eXBlIHR5cGUgb2YgdGhlIG1lc3NhZ2VcclxuICAgKiBAcGFyYW0gbWVzc2FnZSBtZXNzYWdlIHRleHRcclxuICAgKi9cclxuICBwcml2YXRlIF9zaG93TWVzc2FnZSh0eXBlOiBBbGVydCwgbWVzc2FnZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICBpZiAodHlwZSkge1xyXG4gICAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgICBjYXNlIEFsZXJ0LnN1Y2Nlc3M6XHJcbiAgICAgICAgY2FzZSBBbGVydC5pbmZvOlxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC53YXJuaW5nOlxyXG4gICAgICAgICAgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSBBbGVydC5lcnJvcjpcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IobWVzc2FnZSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0aGlzLmFsZXJ0TWVzc2FnZSA9PT0gbWVzc2FnZSkge1xyXG4gICAgICAvLyB0cnkgdHJpZ2dlciB0aGUgY2hhbmdlIGV2ZW50IG9mIHRoZSBhbGVydC5cclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSB2b2lkIDA7XHJcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlLCAxMDApO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5hbGVydE1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgfVxyXG4gICAgdGhpcy5hbGVydFR5cGUgPSB0eXBlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdG9nZ2xlIGl0ZW1zIHdpdGggdGhlIHByb3ZpZGVkIHN0YXR1cyAoc2hvdyBvciBoaWRlIHRoZSByZWxhdGl2ZSBlbGVtZW50IG9uIHRoZSBwYWdlKVxyXG4gICAqIEBwYXJhbSBpdGVtcyBpdGVtcyB3aXRoIHRoZSByZWxhdGl2ZSBpZCBhbmQgc3RhdHVzLlxyXG4gICAqL1xyXG4gIHByaXZhdGUgX3RvZ2dsZUl0ZW1zKGl0ZW1zOiB7aWQ6IEh0bWxFbGVtZW50LCBzdGF0dXM6IGJvb2xlYW59W10pIHtcclxuICAgIGNvbnN0IGdldFZhcmlhYmxlTmFtZUJ5VHlwZUlkID0gKGlkOiBIdG1sRWxlbWVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKGlkKSB7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5jaGFydEFyZWE6IHJldHVybiAnc2hvd0NoYXJ0RmxhZyc7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZWFkRmlsZVByb2dyZXNzOiByZXR1cm4gJ3Nob3dSZWFkRmlsZVByb2dyZXNzJztcclxuICAgICAgICBjYXNlIEh0bWxFbGVtZW50LnNob3dDaGFydEJ1dHRvbjogcmV0dXJuICdlbmFibGVTaG93Q2hhcnRCdXR0b24nO1xyXG4gICAgICAgIGNhc2UgSHRtbEVsZW1lbnQubG9hZFBvcnRzQnV0dG9uOiByZXR1cm4gJ2VuYWJsZUxvYWRQb3J0c0J1dHRvbic7XHJcbiAgICAgICAgY2FzZSBIdG1sRWxlbWVudC5yZXNldENoYXJ0QnV0dG9uOiByZXR1cm4gJ2VuYWJsZVJlc2V0Q2hhcnRCdXR0b24nO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgaWYgKGl0ZW1zKSB7XHJcbiAgICAgIGl0ZW1zLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgdGhpc1tnZXRWYXJpYWJsZU5hbWVCeVR5cGVJZChpdGVtLmlkKV0gPSBpdGVtLnN0YXR1cztcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI25hbWVzZXJ2ZXJIaXN0b3J5QWxsIGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWFsbFwiICh3aW5kb3c6cmVzaXplKT1cIm9uUmVzaXplKClcIj5cclxuICA8ZGl2IGNsYXNzPVwidG9vbGJhci1jaGFydFwiPlxyXG4gICAgPGRpdiBjbGFzcz1cInVwbG9hZC1ib3gtY29udGVudFwiPlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwiIXNob3dSZWFkRmlsZVByb2dyZXNzXCI+XHJcbiAgICAgICAgPGZpbGUtZHJvcC1pbnB1dCAoZmlsZURyb3ApPVwiZmlsZURyb3BwZWQoJGV2ZW50KVwiIChmaWxlSW5wdXQpPVwiZmlsZVNlbGVjdGVkKCRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgW2Ryb3BBcmVhVGV4dF09IFwiYWJicmV2aWF0ZWRGaWxlTmFtZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbaW5wdXRBcmVhVGV4dF09XCInQnJvd3NlJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICBbdGl0bGVdPVwiZmlsZT8ubmFtZT8gZmlsZS5uYW1lOidTZWxlY3QgYSBuYW1lIHNlcnZlciBoaXN0b3J5IGZpbGUgZnJvbSB5b3VyIGxvY2FsIGRpc2suJ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cIiFmaWxlQnVmZmVyXCI+XHJcbiAgICAgICAgPC9maWxlLWRyb3AtaW5wdXQ+XHJcbiAgICAgICAgPHAgKm5nSWY9XCJmaWxlQnVmZmVyXCIgY2xhc3M9XCJib3gtc3RyZWFtLW1vZGUtdGV4dFwiPnt7c3RyZWFtTW9kZUZpbGVOYW1lIHx8ICduYW1lc2VydmVyX2hpc3RvcnkudHJjIChzdHJlYW0gbW9kZSknfX08L3A+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgICA8ZGl2ICpuZ0lmPVwic2hvd1JlYWRGaWxlUHJvZ3Jlc3NcIj5cclxuICAgICAgICA8cHJvZ3Jlc3MtYmFyIFtwcm9ncmVzc109XCJyZWFkUHJvZ3Jlc3NcIj48L3Byb2dyZXNzLWJhcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJpbnB1dC10aW1lXCI+XHJcbiAgICAgPGRpdiBjbGFzcz1cImlucHV0LXRpbWUtcmFuZ2VcIj5cclxuICAgICAgIDx0aW1lLXJhbmdlLXNlbGVjdG9yIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiIFsoZGF0ZVRpbWVSYW5nZSldPVwiZGF0ZVRpbWVSYW5nZVwiPjwvdGltZS1yYW5nZS1zZWxlY3Rvcj5cclxuICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInRpbWV6b25lLXNlbGVjdG9yXCI+XHJcbiAgICAgICAgPHRpbWV6b25lLXNlbGVjdG9yIFsodGltZXpvbmUpXT1cInRpbWV6b25lXCIgW2Rpc2FibGVkXT1cInNob3dSZWFkRmlsZVByb2dyZXNzXCI+PC90aW1lem9uZS1zZWxlY3Rvcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICA8L2Rpdj5cclxuXHJcbiAgICA8ZGl2IGNsYXNzPVwicG9ydC1zZWxlY3Rpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cInBvcnQtc2VsZWN0b3JcIj5cclxuICAgICAgICA8cG9ydC1zZWxlY3RvciAocG9ydENoYW5nZSk9XCJzd2l0Y2hQb3J0Rm9yQ2hhcnQoJGV2ZW50KVwiIFsocG9ydCldPVwicG9ydFwiIFtwb3J0c109XCJwb3J0c1wiIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzc1wiPjwvcG9ydC1zZWxlY3Rvcj5cclxuICAgICAgPC9kaXY+XHJcbiAgICAgIDxkaXYgY2xhc3M9XCJwb3J0LWxvYWQtYnV0dG9uXCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwibG9hZFBvcnRzKClcIiB0aXRsZT1cIkxvYWQgYWxsIHBvcnRzIGZyb20gbmFtZSBzZXJ2ZXIgaGlzdG9yeSB0cmFjZSBmaWxlLlwiIFtkaXNhYmxlZF09XCIhZW5hYmxlU2hvd0NoYXJ0QnV0dG9uIHx8IHBvcnQgfHwgIWVuYWJsZUxvYWRQb3J0c0J1dHRvblwiPnt7c2hvd1JlYWRGaWxlUHJvZ3Jlc3M/IFwiTG9hZGluZy4uLlwiIDogXCJMb2FkXCJ9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgIDwvZGl2PlxyXG5cclxuICAgIDxkaXYgY2xhc3M9XCJjaGFydC1vcGVyYXRpb25cIj5cclxuICAgICAgPGRpdiBjbGFzcz1cImxlZnRcIj5cclxuICAgICAgICA8YnV0dG9uIChjbGljayk9XCJzaG93Q2hhcnQoKVwiIHRpdGxlPVwiTG9hZCBhbmQgZGlzcGxheSBhbGwgZGF0YSBmcm9tIG5hbWUgc2VydmVyIGhpc3RvcnkgdHJhY2UgZmlsZS5cIiBbZGlzYWJsZWRdPVwiIWVuYWJsZVNob3dDaGFydEJ1dHRvblwiPnt7c2hvd1JlYWRGaWxlUHJvZ3Jlc3M/IFwiTG9hZGluZy4uLlwiIDogXCJTaG93XCJ9fTwvYnV0dG9uPlxyXG4gICAgICA8L2Rpdj5cclxuICAgICAgPGRpdiBjbGFzcz1cInJpZ2h0XCI+XHJcbiAgICAgICAgPGJ1dHRvbiAoY2xpY2spPVwicmVzZXRDaGFydCgpXCIgdGl0bGU9XCJSZXNldCB6b29tIG9mIGNoYXJ0LlwiIFtkaXNhYmxlZF09XCJzaG93UmVhZEZpbGVQcm9ncmVzcyB8fCAhZW5hYmxlUmVzZXRDaGFydEJ1dHRvblwiPlJlc2V0IENoYXJ0PC9idXR0b24+XHJcbiAgICAgIDwvZGl2PlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbiAgPGRpdiAjbmFtZXNlcnZlckhpc3RvcnlDb250ZW50IGNsYXNzPVwibmFtZXNlcnZlci1oaXN0b3J5LWNvbnRlbnRcIj5cclxuICAgIDxkaXYgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudC1jaGFydFwiPlxyXG4gICAgICA8aW5zdHJ1Y3Rpb24gWyhzaG93KV09XCJzaG93SW5zdHJ1Y3Rpb25cIiAqbmdJZj1cIiFzaG93Q2hhcnRGbGFnICYmIHNob3dJbnN0cnVjdGlvblwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDFGaW5pc2hlZF09XCIhIWZpbGVcIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXAyRmluaXNoZWRdPVwiZGF0ZVRpbWVSYW5nZSAmJiAoISFkYXRlVGltZVJhbmdlWzBdIHx8ICEhZGF0ZVRpbWVSYW5nZVsxXSkgfHwgdGltZXpvbmUgIT0gZGVmYXVsdFRpbWV6b25lXCJcclxuICAgICAgICAgICAgICAgICAgIFtzdGVwM0ZpbmlzaGVkXT1cIiEhcG9ydFwiXHJcbiAgICAgICAgICAgICAgICAgICBbc3RlcDRGaW5pc2hlZF09XCJzdGVwU2hvd0NoYXJ0ICYmICFlbmFibGVTaG93Q2hhcnRCdXR0b25cIlxyXG4gICAgICAgICAgICAgICAgICAgW3N0ZXA1RmluaXNoZWRdPVwiZmFsc2VcIj5cclxuICAgICAgPC9pbnN0cnVjdGlvbj5cclxuICAgICAgPGNhbnZhcyBpZD1cImNoYXJ0TmFtZVNlcnZlckhpc3RvcnlcIiA+PC9jYW52YXM+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJuYW1lc2VydmVyLWhpc3RvcnktY29udGVudC1jb250cm9sbGVyXCIgPlxyXG4gICAgICA8bmd4LXNlbGVjdGlvbi10YWJsZSAoY2hhbmdlKT1cInNlbGVjdEl0ZW0oJGV2ZW50KVwiICpuZ0lmPVwic2hvd0NoYXJ0RmxhZ1wiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtmaWx0ZXJdPVwidHJ1ZVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjaGVja2JveF09XCJ0cnVlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RhYmxlU291cmNlXT1cInRhYmxlU291cmNlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW2tleUNvbHVtbl09XCJrcGlDb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbaGlkZGVuQ29sdW1uc109XCJoaWRkZW5Db2x1bW5zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Rvb2x0aXBDb2x1bW5dPVwiZGVzY0NvbHVtblwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzZWFyY2hTdHlsZV09XCJzZWFyY2hUeXBlXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NlYXJjaENvbHVtbl09XCJrcGlDb2x1bW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBbbXVsdGlTZWxlY3Rpb25dPVwidHJ1ZVwiPlxyXG4gICAgICA8L25neC1zZWxlY3Rpb24tdGFibGU+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9kaXY+XHJcbjxkaXYgY2xhc3M9XCJtZXNzYWdlLWNvbnRhaW5lclwiICpuZ0lmPVwiYWxlcnRNZXNzYWdlXCI+XHJcbiAgPGFsZXJ0IFsoYWxlcnRNZXNzYWdlKV09XCJhbGVydE1lc3NhZ2VcIiBbYWxlcnRUeXBlXT1cImFsZXJ0VHlwZVwiIFthbGVydFRpbWVvdXRdPVwiMzAwMDBcIj48L2FsZXJ0PlxyXG48L2Rpdj5cclxuIl19
@@ -3541,6 +3541,7 @@ class NameServerHistoryComponent {
3541
3541
  ngOnChanges(changes) {
3542
3542
  return __awaiter(this, void 0, void 0, function* () {
3543
3543
  const fbc = changes.fileBuffer;
3544
+ // !isFile(fbc.currentValue) --> only show chart when it's not a file -> it's a file, means the object has already been processed
3544
3545
  if (fbc && fbc.currentValue && fbc.currentValue !== fbc.previousValue && !isFile(fbc.currentValue)) {
3545
3546
  // simulate selecting file
3546
3547
  const simulatedEvent = { target: { files: [blobToFile(fbc.currentValue, this.streamModeFileName)] } };