@tilde-nlp/ngx-translate 2.0.3-deepl-1 → 2.0.3-deepl-2

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.
@@ -49,6 +49,9 @@ export class TldAlertService {
49
49
  warning(text, params) {
50
50
  this.emit(NotificationMessageType.WARNING, text, null, params);
51
51
  }
52
+ deleteMessage(type, text, params) {
53
+ this.emit(type, text, null, params, true);
54
+ }
52
55
  unhandeledError(error, params) {
53
56
  if (error) {
54
57
  const errorKey = this.findErrorKey(error);
@@ -106,7 +109,7 @@ export class TldAlertService {
106
109
  }
107
110
  return this.errorKey + (errorKey ?? this.defaultErrorKey);
108
111
  }
109
- emit(type, text, error, params) {
112
+ emit(type, text, error, params, deleteMsg) {
110
113
  // if there is no title for this text, text will be shown as title
111
114
  const title = this.findPostfix(text, this.titlePostFix) ?? text;
112
115
  const message = {
@@ -114,7 +117,8 @@ export class TldAlertService {
114
117
  title,
115
118
  type,
116
119
  localizationParams: { ...this.defaultParams, ...params },
117
- support: this.config.coreConfig.contactSupport ? this.findPostfix(text, this.supportPostFix) : null
120
+ support: this.config.coreConfig.contactSupport ? this.findPostfix(text, this.supportPostFix) : null,
121
+ delete: deleteMsg
118
122
  };
119
123
  if (error) {
120
124
  message.error = error;
@@ -144,4 +148,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
144
148
  providedIn: 'root'
145
149
  }]
146
150
  }], ctorParameters: function () { return [{ type: i1.TldTranslateConfigService }]; } });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLWFsZXJ0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtY29tbW9uL3NlcnZpY2VzL3RsZC1hbGVydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUF1Qix1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQU12RSxNQUFNLE9BQU8sZUFBZTtJQUUxQixZQUE2QixNQUFpQztRQUFqQyxXQUFNLEdBQU4sTUFBTSxDQUEyQjtRQUV0RCxtQkFBYyxHQUFpQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBU3BELG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxTQUFTLENBQUM7UUFDckIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLDRCQUF1QixHQUFHLENBQUMsNEJBQTRCLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xHLHlFQUF5RTtRQUN4RCxpQkFBWSxHQUFHLFFBQVEsQ0FBQztRQUN6QyxnSEFBZ0g7UUFDL0YsbUJBQWMsR0FBRyxVQUFVLENBQUM7SUFsQnFCLENBQUM7SUFJbkUsSUFBSSxhQUFhO1FBQ2YsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1lBQzFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1NBQ2xELENBQUM7SUFDSixDQUFD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QUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1Qsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqQyxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDdkQsT0FBTyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2xFLENBQUM7OzRHQXJKVSxlQUFlO2dIQUFmLGVBQWUsY0FGZCxNQUFNOzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uTWVzc2FnZSwgTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUgfSBmcm9tICdAdGlsZGUtbmxwL25neC1jb21tb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGF2YWlsYWJsZUxhbmd1YWdlcyB9IGZyb20gJy4uLy4uLy4uL2kxOG4vYXZhaWxhYmxlLWxhbmd1YWdlcyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL3RsZC10cmFuc2xhdGUtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkQWxlcnRTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb25maWc6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UpIHsgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VTdWJqZWN0OiBTdWJqZWN0PE5vdGlmaWNhdGlvbk1lc3NhZ2U+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgZ2V0IGRlZmF1bHRQYXJhbXMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlbWFpbDogdGhpcy5jb25maWcuY29yZUNvbmZpZy5zdXBwb3J0RW1haWwsXHJcbiAgICAgIHJlZ2lzdGVyTGluazogdGhpcy5jb25maWcuY29yZUNvbmZpZy5yZWdpc3RlckxpbmtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRFcnJvcktleSA9IFwiRVJST1JfREVGQVVMVFwiO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JLZXkgPSBcIkVSUk9SUy5cIjtcclxuICBwcml2YXRlIHJlYWRvbmx5IG51bWVyaWNFcnJvcktleVByZWZpeCA9IFwiRV9cIjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yVHJhbnNsYXRpb25TdWJLZXlzID0gW1wiRklMRV9UUkFOU0xBVElPTl9TVUJTVEFUVVNcIiwgXCJGSUxFX1VQTE9BRFwiLCBcIkFVRElPXCJdO1xyXG4gIC8vIGlmIG1lc3NhZ2Uga2V5IGhhcyBrZXkgd2l0aCB0aGlzIHBvc3RmaXgsIG1lc3NhZ2Ugc2hvdWxkIGJlIHdpdGggdGl0bGVcclxuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlUG9zdEZpeCA9IFwiX1RJVExFXCI7XHJcbiAgLy8gaWYgbWVzc2FnZSBrZXkgaGFzIGtleSB3aXRoIHRoaXMgcG9zdGZpeCwgbWVzc2FnZSBzaG91bGQgYmUgd2l0aCBzdXBwb3J0IGluZm8sIGl0IGlzIGNvbmZpZ3VyZWQgYW5kIHR1cm5lZCBvblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3VwcG9ydFBvc3RGaXggPSBcIl9TVVBQT1JUXCI7XHJcblxyXG4gIGRlZmF1bHRFcnJvcihlcnJvcj86IGFueSkge1xyXG5cclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXJyb3IoYCR7dGhpcy5lcnJvcktleX0ke3RoaXMuZGVmYXVsdEVycm9yS2V5fWAsIGVycm9yLCB0aGlzLmRlZmF1bHRQYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWVzc2FnZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGJhc2ljKHRleHQ6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICB0aGlzLmVtaXQoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuQkFTSUMsIHRleHQsIG51bGwsIHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBpbmZvKHRleHQ6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICB0aGlzLmVtaXQoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuSU5GTywgdGV4dCwgbnVsbCwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHN1Y2Nlc3ModGV4dDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIHRoaXMuZW1pdChOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5TVUNDRVNTLCB0ZXh0LCBudWxsLCBwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IodGV4dDogc3RyaW5nLCBlcnJvcjogYW55LCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgdGhpcy5lbWl0KE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLkVSUk9SLCB0ZXh0LCBlcnJvciwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHdhcm5pbmcodGV4dDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIHRoaXMuZW1pdChOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5XQVJOSU5HLCB0ZXh0LCBudWxsLCBwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgdW5oYW5kZWxlZEVycm9yKGVycm9yOiBhbnksIHBhcmFtcz86IGFueSkge1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IGVycm9yS2V5ID0gdGhpcy5maW5kRXJyb3JLZXkoZXJyb3IpO1xyXG5cclxuICAgICAgaWYgKGVycm9yS2V5KSB7XHJcbiAgICAgICAgdGhpcy5lcnJvcihlcnJvcktleSwgZXJyb3IsIHBhcmFtcyA/PyB0aGlzLmRlZmF1bHRQYXJhbXMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kZWZhdWx0RXJyb3IoZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgZmluZEVycm9yVGl0bGVBbmRMb2NhbGl6YXRpb25LZXkoZXJyb3I6IHVua25vd24pOiB7IHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfSB7XHJcbiAgICBjb25zdCBlcnJvckRlc2NyaXB0aW9uS2V5ID0gdGhpcy5maW5kRXJyb3JLZXkoZXJyb3IpO1xyXG4gICAgbGV0IGVycm9yVGl0bGVLZXkgPSBudWxsO1xyXG5cclxuICAgIGlmIChlcnJvckRlc2NyaXB0aW9uS2V5KSB7XHJcbiAgICAgIGVycm9yVGl0bGVLZXkgPSB0aGlzLmZpbmRQb3N0Zml4KGVycm9yRGVzY3JpcHRpb25LZXksIHRoaXMudGl0bGVQb3N0Rml4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkZXNjcmlwdGlvbjogZXJyb3JEZXNjcmlwdGlvbktleSxcclxuICAgICAgdGl0bGU6IGVycm9yVGl0bGVLZXlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZEVycm9yS2V5KGVycm9yOiBhbnkpIHtcclxuICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVycm9yS2V5ID0gbnVsbDtcclxuICAgIGNvbnN0IGVycm9yVHJhbnNsYXRpb25zID0gYXZhaWxhYmxlTGFuZ3VhZ2VzLmVuLkVSUk9SUztcclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIGVycm9yVHJhbnNsYXRpb25zW3RoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3Iuc3RhdHVzXSkge1xyXG4gICAgICBlcnJvcktleSA9IHRoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3Iuc3RhdHVzO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXJyb3JUcmFuc2xhdGlvbnNbZXJyb3IuRXJyb3JDb2RlXSkge1xyXG4gICAgICBlcnJvcktleSA9IGVycm9yLkVycm9yQ29kZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVycm9yVHJhbnNsYXRpb25zW3RoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3IuRXJyb3JDb2RlXSkge1xyXG4gICAgICBlcnJvcktleSA9IHRoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3IuRXJyb3JDb2RlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXJyb3JUcmFuc2xhdGlvbnNbZXJyb3IuZXJyb3I/LkVycm9yQ29kZV0pIHtcclxuICAgICAgZXJyb3JLZXkgPSBlcnJvci5lcnJvcj8uRXJyb3JDb2RlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXJyb3JUcmFuc2xhdGlvbnNbZXJyb3IuZXJyb3JdKSB7XHJcbiAgICAgIGVycm9yS2V5ID0gZXJyb3IuZXJyb3I7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlcnJvclRyYW5zbGF0aW9uc1t0aGlzLm51bWVyaWNFcnJvcktleVByZWZpeCArIGVycm9yLmVycm9yPy5FcnJvckNvZGVdKSB7XHJcbiAgICAgIGVycm9yS2V5ID0gdGhpcy5udW1lcmljRXJyb3JLZXlQcmVmaXggKyBlcnJvci5lcnJvcj8uRXJyb3JDb2RlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFlcnJvcktleSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXJyb3JUcmFuc2xhdGlvblN1YktleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBzdWJLZXkgPSB0aGlzLmVycm9yVHJhbnNsYXRpb25TdWJLZXlzW2ldO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlcnJvclRyYW5zbGF0aW9uc1tzdWJLZXldO1xyXG4gICAgICAgIGlmIChlbGVtZW50W2Vycm9yLkVycm9yQ29kZV0pIHtcclxuICAgICAgICAgIGVycm9yS2V5ID0gYCR7c3ViS2V5fS4ke2Vycm9yLkVycm9yQ29kZX1gO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5lcnJvcktleSArIChlcnJvcktleSA/PyB0aGlzLmRlZmF1bHRFcnJvcktleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXQodHlwZTogTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUsIHRleHQ6IHN0cmluZywgZXJyb3I6IGFueSwgcGFyYW1zPzogYW55KSB7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBubyB0aXRsZSBmb3IgdGhpcyB0ZXh0LCB0ZXh0IHdpbGwgYmUgc2hvd24gYXMgdGl0bGVcclxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5maW5kUG9zdGZpeCh0ZXh0LCB0aGlzLnRpdGxlUG9zdEZpeCkgPz8gdGV4dDtcclxuICAgIGNvbnN0IG1lc3NhZ2U6IE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSB7XHJcbiAgICAgIGJvZHk6IHRleHQgPT09IHRpdGxlID8gbnVsbCA6IHRleHQsXHJcbiAgICAgIHRpdGxlLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICBsb2NhbGl6YXRpb25QYXJhbXM6IHsgLi4udGhpcy5kZWZhdWx0UGFyYW1zLCAuLi5wYXJhbXMgfSxcclxuICAgICAgc3VwcG9ydDogdGhpcy5jb25maWcuY29yZUNvbmZpZy5jb250YWN0U3VwcG9ydCA/IHRoaXMuZmluZFBvc3RmaXgodGV4dCwgdGhpcy5zdXBwb3J0UG9zdEZpeCkgOiBudWxsXHJcbiAgICB9O1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgIG1lc3NhZ2UuZXJyb3IgPSBlcnJvcjtcclxuICAgIH1cclxuICAgIHRoaXMubWVzc2FnZVN1YmplY3QubmV4dChtZXNzYWdlKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFBvc3RmaXgodGV4dDogc3RyaW5nLCBwb3N0Zml4OiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IHBhcnRzID0gdGV4dC5zcGxpdChcIi5cIik7XHJcbiAgICBsZXQgbG9jYWxpemF0aW9uT2JqZWN0ID0gYXZhaWxhYmxlTGFuZ3VhZ2VzLmVuO1xyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXJ0cy5sZW5ndGg7IGkrKykge1xyXG4gICAgICBpZiAoaSA+IDApIHtcclxuICAgICAgICBsb2NhbGl6YXRpb25PYmplY3QgPSBsb2NhbGl6YXRpb25PYmplY3RbcGFydHNbaSAtIDFdXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIWxvY2FsaXphdGlvbk9iamVjdFtwYXJ0c1tpXV0pIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgY29uc3Qga2V5V2l0aFRpdGxlID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV0gKyBwb3N0Zml4O1xyXG4gICAgcmV0dXJuIGxvY2FsaXphdGlvbk9iamVjdFtrZXlXaXRoVGl0bGVdID8gdGV4dCArIHBvc3RmaXggOiBudWxsO1xyXG4gIH1cclxuXHJcblxyXG59XHJcbiJdfQ==
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLWFsZXJ0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtY29tbW9uL3NlcnZpY2VzL3RsZC1hbGVydC5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUF1Qix1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7OztBQU12RSxNQUFNLE9BQU8sZUFBZTtJQUUxQixZQUE2QixNQUFpQztRQUFqQyxXQUFNLEdBQU4sTUFBTSxDQUEyQjtRQUV0RCxtQkFBYyxHQUFpQyxJQUFJLE9BQU8sRUFBRSxDQUFDO1FBU3BELG9CQUFlLEdBQUcsZUFBZSxDQUFDO1FBQ2xDLGFBQVEsR0FBRyxTQUFTLENBQUM7UUFDckIsMEJBQXFCLEdBQUcsSUFBSSxDQUFDO1FBQzdCLDRCQUF1QixHQUFHLENBQUMsNEJBQTRCLEVBQUUsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ2xHLHlFQUF5RTtRQUN4RCxpQkFBWSxHQUFHLFFBQVEsQ0FBQztRQUN6QyxnSEFBZ0g7UUFDL0YsbUJBQWMsR0FBRyxVQUFVLENBQUM7SUFsQnFCLENBQUM7SUFJbkUsSUFBSSxhQUFhO1FBQ2YsT0FBTztZQUNMLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1lBQzFDLFlBQVksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxZQUFZO1NBQ2xELENBQUM7SUFDSixDQUFD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TyxXQUFXLENBQUMsSUFBWSxFQUFFLE9BQWU7UUFDL0MsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM5QixJQUFJLGtCQUFrQixHQUFHLGtCQUFrQixDQUFDLEVBQUUsQ0FBQztRQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ1Qsa0JBQWtCLEdBQUcsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3ZEO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNqQyxPQUFPLElBQUksQ0FBQzthQUNiO1NBQ0Y7UUFDRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDdkQsT0FBTyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ2xFLENBQUM7OzRHQTFKVSxlQUFlO2dIQUFmLGVBQWUsY0FGZCxNQUFNOzJGQUVQLGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uTWVzc2FnZSwgTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUgfSBmcm9tICdAdGlsZGUtbmxwL25neC1jb21tb24nO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGF2YWlsYWJsZUxhbmd1YWdlcyB9IGZyb20gJy4uLy4uLy4uL2kxOG4vYXZhaWxhYmxlLWxhbmd1YWdlcyc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuL3RsZC10cmFuc2xhdGUtY29uZmlnLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkQWxlcnRTZXJ2aWNlIHtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBjb25maWc6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UpIHsgfVxyXG5cclxuICBwcml2YXRlIG1lc3NhZ2VTdWJqZWN0OiBTdWJqZWN0PE5vdGlmaWNhdGlvbk1lc3NhZ2U+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgZ2V0IGRlZmF1bHRQYXJhbXMoKSB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBlbWFpbDogdGhpcy5jb25maWcuY29yZUNvbmZpZy5zdXBwb3J0RW1haWwsXHJcbiAgICAgIHJlZ2lzdGVyTGluazogdGhpcy5jb25maWcuY29yZUNvbmZpZy5yZWdpc3RlckxpbmtcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRFcnJvcktleSA9IFwiRVJST1JfREVGQVVMVFwiO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZXJyb3JLZXkgPSBcIkVSUk9SUy5cIjtcclxuICBwcml2YXRlIHJlYWRvbmx5IG51bWVyaWNFcnJvcktleVByZWZpeCA9IFwiRV9cIjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVycm9yVHJhbnNsYXRpb25TdWJLZXlzID0gW1wiRklMRV9UUkFOU0xBVElPTl9TVUJTVEFUVVNcIiwgXCJGSUxFX1VQTE9BRFwiLCBcIkFVRElPXCJdO1xyXG4gIC8vIGlmIG1lc3NhZ2Uga2V5IGhhcyBrZXkgd2l0aCB0aGlzIHBvc3RmaXgsIG1lc3NhZ2Ugc2hvdWxkIGJlIHdpdGggdGl0bGVcclxuICBwcml2YXRlIHJlYWRvbmx5IHRpdGxlUG9zdEZpeCA9IFwiX1RJVExFXCI7XHJcbiAgLy8gaWYgbWVzc2FnZSBrZXkgaGFzIGtleSB3aXRoIHRoaXMgcG9zdGZpeCwgbWVzc2FnZSBzaG91bGQgYmUgd2l0aCBzdXBwb3J0IGluZm8sIGl0IGlzIGNvbmZpZ3VyZWQgYW5kIHR1cm5lZCBvblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgc3VwcG9ydFBvc3RGaXggPSBcIl9TVVBQT1JUXCI7XHJcblxyXG4gIGRlZmF1bHRFcnJvcihlcnJvcj86IGFueSkge1xyXG5cclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKGVycm9yKTtcclxuICAgIH1cclxuICAgIHRoaXMuZXJyb3IoYCR7dGhpcy5lcnJvcktleX0ke3RoaXMuZGVmYXVsdEVycm9yS2V5fWAsIGVycm9yLCB0aGlzLmRlZmF1bHRQYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgZ2V0TWVzc2FnZXMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5tZXNzYWdlU3ViamVjdC5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIGJhc2ljKHRleHQ6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICB0aGlzLmVtaXQoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuQkFTSUMsIHRleHQsIG51bGwsIHBhcmFtcyk7XHJcbiAgfVxyXG5cclxuICBpbmZvKHRleHQ6IHN0cmluZywgcGFyYW1zPzogYW55KSB7XHJcbiAgICB0aGlzLmVtaXQoTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuSU5GTywgdGV4dCwgbnVsbCwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHN1Y2Nlc3ModGV4dDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIHRoaXMuZW1pdChOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5TVUNDRVNTLCB0ZXh0LCBudWxsLCBwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgZXJyb3IodGV4dDogc3RyaW5nLCBlcnJvcjogYW55LCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG4gICAgdGhpcy5lbWl0KE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLkVSUk9SLCB0ZXh0LCBlcnJvciwgcGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHdhcm5pbmcodGV4dDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpIHtcclxuICAgIHRoaXMuZW1pdChOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5XQVJOSU5HLCB0ZXh0LCBudWxsLCBwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgZGVsZXRlTWVzc2FnZSh0eXBlOiBOb3RpZmljYXRpb25NZXNzYWdlVHlwZSwgdGV4dDogc3RyaW5nLCBwYXJhbXM/OiBhbnkpOiB2b2lkIHtcclxuICAgIHRoaXMuZW1pdCh0eXBlLCB0ZXh0LCBudWxsLCBwYXJhbXMsIHRydWUpO1xyXG4gIH1cclxuXHJcbiAgdW5oYW5kZWxlZEVycm9yKGVycm9yOiBhbnksIHBhcmFtcz86IGFueSkge1xyXG4gICAgaWYgKGVycm9yKSB7XHJcbiAgICAgIGNvbnN0IGVycm9yS2V5ID0gdGhpcy5maW5kRXJyb3JLZXkoZXJyb3IpO1xyXG5cclxuICAgICAgaWYgKGVycm9yS2V5KSB7XHJcbiAgICAgICAgdGhpcy5lcnJvcihlcnJvcktleSwgZXJyb3IsIHBhcmFtcyA/PyB0aGlzLmRlZmF1bHRQYXJhbXMpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5kZWZhdWx0RXJyb3IoZXJyb3IpO1xyXG4gIH1cclxuXHJcbiAgZmluZEVycm9yVGl0bGVBbmRMb2NhbGl6YXRpb25LZXkoZXJyb3I6IHVua25vd24pOiB7IHRpdGxlOiBzdHJpbmcsIGRlc2NyaXB0aW9uOiBzdHJpbmcgfSB7XHJcbiAgICBjb25zdCBlcnJvckRlc2NyaXB0aW9uS2V5ID0gdGhpcy5maW5kRXJyb3JLZXkoZXJyb3IpO1xyXG4gICAgbGV0IGVycm9yVGl0bGVLZXkgPSBudWxsO1xyXG5cclxuICAgIGlmIChlcnJvckRlc2NyaXB0aW9uS2V5KSB7XHJcbiAgICAgIGVycm9yVGl0bGVLZXkgPSB0aGlzLmZpbmRQb3N0Zml4KGVycm9yRGVzY3JpcHRpb25LZXksIHRoaXMudGl0bGVQb3N0Rml4KTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBkZXNjcmlwdGlvbjogZXJyb3JEZXNjcmlwdGlvbktleSxcclxuICAgICAgdGl0bGU6IGVycm9yVGl0bGVLZXlcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZEVycm9yS2V5KGVycm9yOiBhbnkpIHtcclxuICAgIGlmICghZXJyb3IpIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGVycm9yS2V5ID0gbnVsbDtcclxuICAgIGNvbnN0IGVycm9yVHJhbnNsYXRpb25zID0gYXZhaWxhYmxlTGFuZ3VhZ2VzLmVuLkVSUk9SUztcclxuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlICYmIGVycm9yVHJhbnNsYXRpb25zW3RoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3Iuc3RhdHVzXSkge1xyXG4gICAgICBlcnJvcktleSA9IHRoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3Iuc3RhdHVzO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXJyb3JUcmFuc2xhdGlvbnNbZXJyb3IuRXJyb3JDb2RlXSkge1xyXG4gICAgICBlcnJvcktleSA9IGVycm9yLkVycm9yQ29kZTtcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGVycm9yVHJhbnNsYXRpb25zW3RoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3IuRXJyb3JDb2RlXSkge1xyXG4gICAgICBlcnJvcktleSA9IHRoaXMubnVtZXJpY0Vycm9yS2V5UHJlZml4ICsgZXJyb3IuRXJyb3JDb2RlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXJyb3JUcmFuc2xhdGlvbnNbZXJyb3IuZXJyb3I/LkVycm9yQ29kZV0pIHtcclxuICAgICAgZXJyb3JLZXkgPSBlcnJvci5lcnJvcj8uRXJyb3JDb2RlO1xyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZXJyb3JUcmFuc2xhdGlvbnNbZXJyb3IuZXJyb3JdKSB7XHJcbiAgICAgIGVycm9yS2V5ID0gZXJyb3IuZXJyb3I7XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChlcnJvclRyYW5zbGF0aW9uc1t0aGlzLm51bWVyaWNFcnJvcktleVByZWZpeCArIGVycm9yLmVycm9yPy5FcnJvckNvZGVdKSB7XHJcbiAgICAgIGVycm9yS2V5ID0gdGhpcy5udW1lcmljRXJyb3JLZXlQcmVmaXggKyBlcnJvci5lcnJvcj8uRXJyb3JDb2RlXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKCFlcnJvcktleSkge1xyXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuZXJyb3JUcmFuc2xhdGlvblN1YktleXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICBjb25zdCBzdWJLZXkgPSB0aGlzLmVycm9yVHJhbnNsYXRpb25TdWJLZXlzW2ldO1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBlcnJvclRyYW5zbGF0aW9uc1tzdWJLZXldO1xyXG4gICAgICAgIGlmIChlbGVtZW50W2Vycm9yLkVycm9yQ29kZV0pIHtcclxuICAgICAgICAgIGVycm9yS2V5ID0gYCR7c3ViS2V5fS4ke2Vycm9yLkVycm9yQ29kZX1gO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5lcnJvcktleSArIChlcnJvcktleSA/PyB0aGlzLmRlZmF1bHRFcnJvcktleSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGVtaXQodHlwZTogTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUsIHRleHQ6IHN0cmluZywgZXJyb3I6IGFueSwgcGFyYW1zPzogYW55LCBkZWxldGVNc2c/OiBib29sZWFuKSB7XHJcbiAgICAvLyBpZiB0aGVyZSBpcyBubyB0aXRsZSBmb3IgdGhpcyB0ZXh0LCB0ZXh0IHdpbGwgYmUgc2hvd24gYXMgdGl0bGVcclxuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5maW5kUG9zdGZpeCh0ZXh0LCB0aGlzLnRpdGxlUG9zdEZpeCkgPz8gdGV4dDtcclxuICAgIGNvbnN0IG1lc3NhZ2U6IE5vdGlmaWNhdGlvbk1lc3NhZ2UgPSB7XHJcbiAgICAgIGJvZHk6IHRleHQgPT09IHRpdGxlID8gbnVsbCA6IHRleHQsXHJcbiAgICAgIHRpdGxlLFxyXG4gICAgICB0eXBlLFxyXG4gICAgICBsb2NhbGl6YXRpb25QYXJhbXM6IHsgLi4udGhpcy5kZWZhdWx0UGFyYW1zLCAuLi5wYXJhbXMgfSxcclxuICAgICAgc3VwcG9ydDogdGhpcy5jb25maWcuY29yZUNvbmZpZy5jb250YWN0U3VwcG9ydCA/IHRoaXMuZmluZFBvc3RmaXgodGV4dCwgdGhpcy5zdXBwb3J0UG9zdEZpeCkgOiBudWxsLFxyXG4gICAgICBkZWxldGU6IGRlbGV0ZU1zZ1xyXG4gICAgfTtcclxuICAgIGlmIChlcnJvcikge1xyXG4gICAgICBtZXNzYWdlLmVycm9yID0gZXJyb3I7XHJcbiAgICB9XHJcbiAgICB0aGlzLm1lc3NhZ2VTdWJqZWN0Lm5leHQobWVzc2FnZSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbmRQb3N0Zml4KHRleHQ6IHN0cmluZywgcG9zdGZpeDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXJ0cyA9IHRleHQuc3BsaXQoXCIuXCIpO1xyXG4gICAgbGV0IGxvY2FsaXphdGlvbk9iamVjdCA9IGF2YWlsYWJsZUxhbmd1YWdlcy5lbjtcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFydHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaWYgKGkgPiAwKSB7XHJcbiAgICAgICAgbG9jYWxpemF0aW9uT2JqZWN0ID0gbG9jYWxpemF0aW9uT2JqZWN0W3BhcnRzW2kgLSAxXV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKCFsb2NhbGl6YXRpb25PYmplY3RbcGFydHNbaV1dKSB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGNvbnN0IGtleVdpdGhUaXRsZSA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdICsgcG9zdGZpeDtcclxuICAgIHJldHVybiBsb2NhbGl6YXRpb25PYmplY3Rba2V5V2l0aFRpdGxlXSA/IHRleHQgKyBwb3N0Zml4IDogbnVsbDtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
@@ -5,6 +5,7 @@ import { TEXT_API_SERVICE_TOKEN } from '../../../injection-tokens';
5
5
  import { Common, ErrorCode } from '../../tld-common/models';
6
6
  import { HighlightTreeType } from '../models/highlight-tree-type.model';
7
7
  import { TldTranslateTextUtils } from '../utils/tld-translate-text.utils';
8
+ import { NotificationMessageType } from '@tilde-nlp/ngx-common';
8
9
  import * as i0 from "@angular/core";
9
10
  import * as i1 from "../../tld-tooltip/services";
10
11
  import * as i2 from "../../tld-common/services/scroll/tld-scroll.service";
@@ -32,6 +33,7 @@ export class TldTranslateTextService {
32
33
  this.CONCURRENT_UPLOADS = 5;
33
34
  this.DEBOUNCE_TIME = 1000;
34
35
  this.standbyEngineNotificationErrorKey = '21';
36
+ this.standbySystemRetranslationTimeout = 3000;
35
37
  /** Whether progress indicator should be shown. This value must be set to true only if configured time has passed. */
36
38
  this._shouldShowProgressIndicator = false;
37
39
  this._untranslatedParagraphCount = 0;
@@ -75,7 +77,7 @@ export class TldTranslateTextService {
75
77
  this.hideProgressIndicator();
76
78
  }
77
79
  }
78
- get isTranslating() { return this.untranslatedParagraphCount > 0; }
80
+ get isTranslating() { return this.untranslatedParagraphCount > 0 || this.isSystemWakingUp; }
79
81
  // getters from config service.
80
82
  get allowWebsiteTranslation() { return this.configService.textConfig.allowWebsiteTranslation; }
81
83
  ;
@@ -206,6 +208,10 @@ export class TldTranslateTextService {
206
208
  this.handleTranslatedParagraph(response);
207
209
  this.updateParagraphs(untranslatedParagraph.ix, response);
208
210
  this.untranslatedParagraphCount -= 1;
211
+ if (this.untranslatedParagraphCount === 0 && this.isSystemWakingUp) {
212
+ this.isSystemWakingUp = false;
213
+ this.alertsService.deleteMessage(NotificationMessageType.INFO, 'ERRORS.E_21');
214
+ }
209
215
  }), catchError(err => {
210
216
  this.untranslatedParagraphCount -= 1;
211
217
  if (err.status === 500) {
@@ -213,6 +219,11 @@ export class TldTranslateTextService {
213
219
  }
214
220
  else if (err.error.ErrorCode === this.standbyEngineNotificationErrorKey) {
215
221
  this.alertsService.info('ERRORS.E_21');
222
+ this.isSystemWakingUp = true;
223
+ setTimeout(() => {
224
+ this.retranslate();
225
+ }, this.standbySystemRetranslationTimeout);
226
+ throw err;
216
227
  }
217
228
  else {
218
229
  this.alertsService.unhandeledError(err);
@@ -382,4 +393,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
382
393
  type: Inject,
383
394
  args: [TEXT_API_SERVICE_TOKEN]
384
395
  }] }, { type: i1.TldSystemService }, { type: i2.TldScrollService }, { type: i3.TldTranslateConfigService }, { type: i4.TranslateService }, { type: i3.TldHighlightService }, { type: i3.TldAlertService }]; } });
385
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBaUUsTUFBTSx5QkFBeUIsQ0FBQztBQUszSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU14RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQzs7Ozs7O0FBSzFFLE1BQU0sT0FBTyx1QkFBdUI7SUFnSGxDLFlBQTZELEdBQWdDLEVBQzFFLGFBQStCLEVBQy9CLGdCQUFrQyxFQUNsQyxhQUF3QyxFQUN4QyxTQUEyQixFQUMzQixnQkFBcUMsRUFDckMsYUFBOEI7UUFOWSxRQUFHLEdBQUgsR0FBRyxDQUE2QjtRQUMxRSxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBMkI7UUFDeEMsY0FBUyxHQUFULFNBQVMsQ0FBa0I7UUFDM0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFxQjtRQUNyQyxr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SW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGV4dFRvU3BlZWNoU2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3NoYXJlZC90ZXh0LXRvLXNwZWVjaC9tb2RlbHMvdGV4dC10by1zcGVlY2gtc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyBURVhUX0FQSV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnLi4vLi4vLi4vaW5qZWN0aW9uLXRva2Vucyc7XHJcbmltcG9ydCB7IENvbW1vbiwgRXJyb3JDb2RlLCBJVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UsIElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBUbGRBbGVydFNlcnZpY2UsIFRsZEhpZ2hsaWdodFNlcnZpY2UsIFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkU2Nyb2xsU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvc2Nyb2xsL3RsZC1zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFN5c3RlbVNlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtdG9vbHRpcC9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IElEaWN0aW9uYXJ5RW50cnksIElTb3VyY2VDaGFuZ2VFdmVudCB9IGZyb20gJy4uL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgSGlnaGxpZ2h0VHJlZVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IElIaWdobGlnaHRUcmVlIH0gZnJvbSAnLi4vbW9kZWxzL2hpZ2hsaWdodC10cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgSVBhcmFncmFwaEluZm8gfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0Lm1vZGVsJztcclxuaW1wb3J0IHsgSVJldHJhbnNsYXRlUGFyYW1zIH0gZnJvbSAnLi4vbW9kZWxzL3JldHJhbnNsYXRlLXBhcmFtcy5tb2RlbCc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy90cmFuc2xhdGUtcGFyYWdyYXBoLXJlc3BvbnNlLm1vZGVsJztcclxuaW1wb3J0IHsgSVVudHJhbnNsYXRlZFBhcmFncmFwaCB9IGZyb20gJy4uL21vZGVscy91bnRyYW5zbGF0ZWQtcGFyYWdyYXBoLm1vZGVsJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlVGV4dFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdGxkLXRyYW5zbGF0ZS10ZXh0LnV0aWxzJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIHtcclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlVGV4dDogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zb3VyY2VUZXh0SHlwb3RoZXNpczogc3RyaW5nO1xyXG4gIGdldCBzb3VyY2VUZXh0SHlwb3RoZXNpcygpIHtcclxuICAgIHJldHVybiB0aGlzLl9zb3VyY2VUZXh0SHlwb3RoZXNpcztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZUNoYW5nZTogU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgc291cmNlQ2hhbmdlKCkgeyByZXR1cm4gdGhpcy5fc291cmNlQ2hhbmdlLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZVNjcm9sbDogU3ViamVjdDxudW1iZXI+ID0gbmV3IFN1YmplY3QoKTtcclxuICBnZXQgc291cmNlU2Nyb2xsKCkgeyByZXR1cm4gdGhpcy5fc291cmNlU2Nyb2xsLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrOiBTdWJqZWN0PGFueT4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCB0cmFuc2xhdGVCdXR0b25DbGljaygpIHsgcmV0dXJuIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLmFzT2JzZXJ2YWJsZSgpOyB9XHJcblxyXG4gIHByaXZhdGUgX2hhc0RpY3Rpb25hcnk6IGJvb2xlYW47XHJcbiAgZ2V0IGhhc0RpY3Rpb25hcnkoKSB7IHJldHVybiB0aGlzLl9oYXNEaWN0aW9uYXJ5OyB9XHJcbiAgc2V0IGhhc0RpY3Rpb25hcnkodmFsKSB7XHJcbiAgICB0aGlzLl9oYXNEaWN0aW9uYXJ5ID0gdmFsO1xyXG4gICAgaWYgKCF2YWwpIHtcclxuICAgICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2RpY3Rpb25hcnlFbnRyeTogSURpY3Rpb25hcnlFbnRyeVtdO1xyXG4gIGdldCBkaWN0aW9uYXJ5RW50cnkoKSB7IHJldHVybiB0aGlzLl9kaWN0aW9uYXJ5RW50cnk7IH1cclxuICBzZXQgZGljdGlvbmFyeUVudHJ5KHZhbCkge1xyXG4gICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gdmFsO1xyXG4gICAgaWYgKHRoaXMuZGljdGlvbmFyeUVudHJ5KSB7XHJcbiAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIGdldCB0cmFuc2xhdGVkVGV4dCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMudGFyZ2V0UGFyYWdyYXBocy5tYXAobGluZSA9PiBsaW5lLm9yaWdpbmFsVGV4dCkuam9pbihcIlxcblwiKVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfb25DbGVhciA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuXHJcbiAgdXJsVG9UcmFuc2xhdGU6IHN0cmluZztcclxuICBwYXJhZ3JhcGhzOiBJUGFyYWdyYXBoSW5mb1tdID0gW107XHJcbiAgc291cmNlUGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG4gIHRhcmdldFBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuXHJcbiAgLy8gU2V0IHRoaXMgb2JqZWN0IHdpdGggbmVjZXNzYXJ5IHZhbHVlcyB0byBkaXNwbGF5IFRUUyBjb21wb25lbnRcclxuICB0ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5nczogVGV4dFRvU3BlZWNoU2V0dGluZ3M7XHJcbiAgdGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3M6IFRleHRUb1NwZWVjaFNldHRpbmdzO1xyXG5cclxuICBwcml2YXRlIF9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ6IGJvb2xlYW47XHJcbiAgZ2V0IGZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCgpIHtcclxuICAgIHJldHVybiB0aGlzLl9maXJzdFBhcmFncmFwaFRyYW5zbGF0ZWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGRpY3Rpb25hcnlTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QgPSBuZXcgU3ViamVjdDxJVW50cmFuc2xhdGVkUGFyYWdyYXBoPigpO1xyXG4gIHByaXZhdGUgcGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICBwcml2YXRlIHJlYWRvbmx5IGRlYm91bmNlcjogU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+ID0gbmV3IFN1YmplY3Q8SVNvdXJjZUNoYW5nZUV2ZW50PigpO1xyXG4gIHByaXZhdGUgZGVib3VuY2VyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XHJcbiAgLyoqIEhvdyBtYW55IHBhcmFncmFwaHMgY2FuIGJlIHRyYW5zbGF0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi9cclxuICBwcml2YXRlIHJlYWRvbmx5IENPTkNVUlJFTlRfVVBMT0FEUyA9IDU7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBERUJPVU5DRV9USU1FID0gMTAwMDtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkgPSAnMjEnO1xyXG5cclxuICAvKiogV2hldGhlciBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIGJlIHNob3duLiBUaGlzIHZhbHVlIG11c3QgYmUgc2V0IHRvIHRydWUgb25seSBpZiBjb25maWd1cmVkIHRpbWUgaGFzIHBhc3NlZC4gKi9cclxuICBwcml2YXRlIF9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICBnZXQgc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yKCkgeyByZXR1cm4gdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yOyB9XHJcbiAgLy9Ob2RlSlMuVGltZW91dFxyXG4gIHByaXZhdGUgcHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICBnZXQgdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQoKSB7IHJldHVybiB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudDsgfVxyXG4gIHNldCB1bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IHZhbHVlO1xyXG4gICAgLy8gV2hlbiB0cmFuc2xhdGlvbiBmaW5pc2hlZCwgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3VsZCBub3QgYmUgc2hvd24uXHJcbiAgICBpZiAodmFsdWUgPT09IDApIHtcclxuICAgICAgdGhpcy50b2dnbGVUZXh0VG9TcGVlY2goKTtcclxuICAgICAgdGhpcy5oaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc1RyYW5zbGF0aW5nKCkgeyByZXR1cm4gdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA+IDA7IH1cclxuXHJcbiAgLy8gZ2V0dGVycyBmcm9tIGNvbmZpZyBzZXJ2aWNlLlxyXG4gIGdldCBhbGxvd1dlYnNpdGVUcmFuc2xhdGlvbigpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uOyB9O1xyXG4gIGdldCBhdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlOyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXg7IH07XHJcbiAgZ2V0IHdlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4KCk6IHN0cmluZyB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeDsgfTtcclxuICBnZXQgdXNlRGljdGlvbmFyeSgpOiBib29sZWFuIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLnVzZURpY3Rpb25hcnk7IH07XHJcbiAgZ2V0IHByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzKCk6IG51bWJlciB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kczsgfVxyXG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblxyXG4gIGdldCBhY3RpdmVEYXRhKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3lzdGVtU2VydmljZS5nZXRBY3RpdmVTeXN0ZW1PYmooKTtcclxuICB9XHJcblxyXG4gIGdldCB0cmFuc2xhdGVVcmxSZWRpcmVjdCgpIHtcclxuICAgIGlmICh0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4ID09PSAnJykge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeH0ke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXh9JHtlbmNvZGVVUklDb21wb25lbnQodGhpcy51cmxUb1RyYW5zbGF0ZSl9YDtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHJldHVybiBgJHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4fSR7dGhpcy50cmFuc2xhdGUuY3VycmVudExhbmd9JHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4fSR7dGhpcy51cmxUb1RyYW5zbGF0ZX1gO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIElmIGRpY3RhdHRpb24gaXMgYWN0aXZlLiBCYXNlZCBvbiB0aGlzLCBleHRlbnNpb25zIGFyZSBoaWRkZW4uICovXHJcbiAgaXNEaWN0YXRpbmc6IGJvb2xlYW47XHJcblxyXG4gIGNvbnN0cnVjdG9yKEBJbmplY3QoVEVYVF9BUElfU0VSVklDRV9UT0tFTikgcHJpdmF0ZSByZWFkb25seSBhcGk6IElUbGRUcmFuc2xhdGVUZXh0QXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtU2VydmljZTogVGxkU3lzdGVtU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGxkU2Nyb2xsU2VydmljZTogVGxkU2Nyb2xsU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnU2VydmljZTogVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBoaWdobGlnaHRTZXJ2aWNlOiBUbGRIaWdobGlnaHRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGVydHNTZXJ2aWNlOiBUbGRBbGVydFNlcnZpY2UpIHsgfVxyXG5cclxuICBkaWN0aW9uYXJ5VHJhbnNsYXRpb24odGV4dDogc3RyaW5nLCBzcmNDb2RlOiBzdHJpbmcsIHRyZ0NvZGU6IHN0cmluZykge1xyXG4gICAgcmV0dXJuIHRoaXMuYXBpLmRpY3Rpb25hcnlUcmFuc2xhdGlvbih0ZXh0LCBzcmNDb2RlLCB0cmdDb2RlKTtcclxuICB9XHJcblxyXG4gIGNoYW5nZVNvdXJjZShldmVudDogSVNvdXJjZUNoYW5nZUV2ZW50KSB7XHJcbiAgICB0aGlzLl9zb3VyY2VUZXh0ID0gZXZlbnQucGhyYXNlO1xyXG4gICAgdGhpcy5fc291cmNlQ2hhbmdlLm5leHQoZXZlbnQpO1xyXG4gICAgdGhpcy5kZWJvdW5jZXIubmV4dChldmVudCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTb3VyY2VIeXBvdGhlc2lzKHRleHQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5fc291cmNlVGV4dEh5cG90aGVzaXMgPSB0ZXh0O1xyXG4gIH1cclxuXHJcbiAgb25Tb3VyY2VTY3JvbGwob2Zmc2V0VG9wOiBudW1iZXIpIHtcclxuICAgIHRoaXMuX3NvdXJjZVNjcm9sbC5uZXh0KG9mZnNldFRvcCk7XHJcbiAgfVxyXG5cclxuICBvblRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCkge1xyXG4gICAgdGhpcy5fdHJhbnNsYXRlQnV0dG9uQ2xpY2submV4dChudWxsKVxyXG4gICAgdGhpcy5yZXRyYW5zbGF0ZSh7IGJ1dHRvbkNsaWNrZWQ6IHRydWUgfSk7XHJcbiAgfVxyXG5cclxuICBjbGVhclNvdXJjZSgpIHtcclxuICAgIHRoaXMuX29uQ2xlYXIubmV4dChudWxsKVxyXG4gICAgdGhpcy5jaGFuZ2VTb3VyY2UoeyBwaHJhc2U6IFwiXCIgfSlcclxuICB9XHJcblxyXG4gIG9uQ2xlYXIoKTogT2JzZXJ2YWJsZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLl9vbkNsZWFyLmFzT2JzZXJ2YWJsZSgpO1xyXG4gIH1cclxuXHJcbiAgdXBkYXRlVHJhbnNsYXRpb24ob3B0aW9uczogc3RyaW5nLCBzeXN0ZW1JRDogc3RyaW5nLCB0ZXh0OiBzdHJpbmcsIHRyYW5zbGF0aW9uOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaS51cGRhdGVUcmFuc2xhdGlvbihvcHRpb25zLCBzeXN0ZW1JRCwgdGV4dCwgdHJhbnNsYXRpb24pO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuT25DaGFuZ2VzKCkge1xyXG4gICAgaWYgKHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbiA9IHRoaXMuZGVib3VuY2VyLnBpcGUoXHJcbiAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2aW91cykgPT4ge1xyXG4gICAgICAgIHJldHVybiBwcmV2aW91cy5waHJhc2UgPT0gdGhpcy5zb3VyY2VUZXh0O1xyXG4gICAgICB9KSxcclxuICAgICAgZGVib3VuY2UoZXYgPT4gZXYucGhyYXNlPy5sZW5ndGggPiAwID8gdGltZXIodGhpcy5ERUJPVU5DRV9USU1FKSA6IHRpbWVyKDApKVxyXG4gICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKChldmVudCkgPT4ge1xyXG4gICAgICAgIHRoaXMuaGlnaGxpZ2h0U2VydmljZS5jaGFuZ2VTZWxlY3RlZFRhcmdldFNlbnRlbmNlKG51bGwpO1xyXG5cclxuICAgICAgICBpZiAoIWV2ZW50LmRpc2FibGVBdXRvbWF0aWNUcmFuc2xhdGlvbikge1xyXG4gICAgICAgICAgdGhpcy5yZXRyYW5zbGF0ZSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBzdG9wTGlzdGVuaW5nVG9DaGFuZ2VzKCkge1xyXG4gICAgaWYgKCF0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy8gaWYgbWV0aG9kIGdldHMgY2FsbGVkIGJlY2F1c2Ugb2YgYnV0dG9uIGNsaWNrIGFuZCB1cmwgZW50ZXJlZCAtIGdvIHRvIHdlYiB0cmFuc2xhdGlvblxyXG4gIHJldHJhbnNsYXRlKHBhcmFtcz86IElSZXRyYW5zbGF0ZVBhcmFtcykge1xyXG4gICAgaWYgKCF0aGlzLnNvdXJjZVRleHQgfHwgdGhpcy5zb3VyY2VUZXh0ID09IFwiXCIpIHtcclxuICAgICAgdGhpcy5jbGVhclNvdXJjZVBhcmFtcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHBhcmFtcz8uYnV0dG9uQ2xpY2tlZCB8fCBwYXJhbXM/LnN5c3RlbUNoYW5nZWQpIHtcclxuICAgICAgdGhpcy5jbGVhclNvdXJjZVBhcmFtcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG1heFNvdXJjZUNoYXJhY3RlckRpY3Rpb25hcnkgPSAyMDA7XHJcbiAgICBjb25zdCBtYXhEaWN0aW9uYXJ5V29yZHMgPSAxMjtcclxuXHJcbiAgICBjb25zdCB3b3Jkc0luU291cmNlID0gQ29tbW9uLmdldFdvcmRDb3VudCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IENvbW1vbi5pc1RleHRVcmwodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgIGlmICh0aGlzLmFsbG93V2Vic2l0ZVRyYW5zbGF0aW9uICYmIHRoaXMudXJsVG9UcmFuc2xhdGUpIHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhzID0gW107XHJcbiAgICAgIHRoaXMuc291cmNlUGFyYWdyYXBocyA9IFtdO1xyXG4gICAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBbXTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmF1dG9SZWRpcmVjdFRvV2ViVHJhbnNsYXRlIHx8IHBhcmFtcz8uYnV0dG9uQ2xpY2tlZCkge1xyXG4gICAgICAgIHdpbmRvdy5vcGVuKHRoaXMudHJhbnNsYXRlVXJsUmVkaXJlY3QsIFwiX2JsYW5rXCIpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gbnVsbDtcclxuICAgIH1cclxuICAgIC8vIFRPRE8uIExldG9uaWthIGRpY3Rpb25hcnk/XHJcbiAgICBpZiAodGhpcy51c2VEaWN0aW9uYXJ5ICYmIHRoaXMuc291cmNlVGV4dC5sZW5ndGggPCBtYXhTb3VyY2VDaGFyYWN0ZXJEaWN0aW9uYXJ5ICYmIHdvcmRzSW5Tb3VyY2UgPD0gbWF4RGljdGlvbmFyeVdvcmRzKSB7XHJcbiAgICAgIHRoaXMucHJlcGFyZUFuZFRyYW5zbGF0ZVdvcmRzKCk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMudHJhbnNsYXRlVGV4dCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gIH1cclxuXHJcbiAgLyoqIFN0b3BzIHRleHQgdHJhbnNsYXRpb24gaWYgaXQgaXMgYWN0aXZlLiAqL1xyXG4gIHN0b3BUcmFuc2xhdGlvbigpIHtcclxuICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSAwO1xyXG4gICAgaWYgKHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24pIHtcclxuICAgICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlY3JlYXRlUGFyYWdyYXBoVHJhbnNsYXRpb25TdWJqZWN0KCkge1xyXG4gICAgdGhpcy5fZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QgPSBuZXcgU3ViamVjdDxJVW50cmFuc2xhdGVkUGFyYWdyYXBoPigpO1xyXG5cclxuICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuc291cmNlVGV4dDtcclxuICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgPSAwO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbiA9IHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdC5hc09ic2VydmFibGUoKS5waXBlKFxyXG4gICAgICBtZXJnZU1hcCgodW50cmFuc2xhdGVkUGFyYWdyYXBoKSA9PiB7XHJcbiAgICAgICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCArPSAxO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0ZVBhcmFncmFwaCh1bnRyYW5zbGF0ZWRQYXJhZ3JhcGgpLnBpcGUoXHJcbiAgICAgICAgICB0YXAoKHJlc3BvbnNlOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgICAgLy8gTm8gbmVlZCB0byBoYW5kbGUgcmVzcG9uc2UgaWYgc291cmNlIHRleHQgaGFzIGNoYW5nZWQuXHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UgIT0gdGhpcy5zb3VyY2VUZXh0KSB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlVHJhbnNsYXRlZFBhcmFncmFwaChyZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUGFyYWdyYXBocyh1bnRyYW5zbGF0ZWRQYXJhZ3JhcGguaXgsIHJlc3BvbnNlKTtcclxuICAgICAgICAgICAgdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCAtPSAxO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgLT0gMTtcclxuICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS51bmhhbmRlbGVkRXJyb3IoeyBFcnJvckNvZGU6IEVycm9yQ29kZS5UUkFOU0xBVElPTl9GQUlMRUQgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyLmVycm9yLkVycm9yQ29kZSA9PT0gdGhpcy5zdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuaW5mbygnRVJST1JTLkVfMjEnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UudW5oYW5kZWxlZEVycm9yKGVycik7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGFmdGVyIGNhbGxpbmcgdGhpcyBtZXRob2QsIHN1YmplY3QgaXMgZGVzdHJveWVkIGFuZCB1bnN1YnNjcmliZWQsIHNvIHRocm93biBlcnJvciB3b250IGhhdmUgYW55IGVmZmVjdC5cclxuICAgICAgICAgICAgdGhpcy5zdG9wVHJhbnNsYXRpb24oKTtcclxuICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgfSkpXHJcbiAgICAgIH0sIHRoaXMuQ09OQ1VSUkVOVF9VUExPQURTKSxcclxuICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYW5zbGF0ZVBhcmFncmFwaChwYXJhZ3JhcGg6IElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGgpOiBPYnNlcnZhYmxlPElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZT4ge1xyXG4gICAgY29uc3QgcGFyYW1zOiBJVHJhbnNsYXRlUGFyYWdyYXBoUmVxdWVzdFBhcmFtcyA9IHtcclxuICAgICAgcGFyYWdyYXBoSXg6IHBhcmFncmFwaC5peCxcclxuICAgICAgdGV4dDogcGFyYWdyYXBoLmxpbmUsXHJcbiAgICAgIHN5c3RlbTogdGhpcy5hY3RpdmVEYXRhXHJcbiAgICB9O1xyXG4gICAgaWYgKCFwYXJhbXMudGV4dCB8fCBwYXJhbXMudGV4dC5sZW5ndGggPT09IDApIHtcclxuICAgICAgcmV0dXJuIG9mKHtcclxuICAgICAgICBzb3VyY2VUcmVlOiB7IHRleHQ6IFwiXCIsIHBhcmFncmFwaEl4OiBwYXJhbXMucGFyYWdyYXBoSXgsIHR5cGU6IEhpZ2hsaWdodFRyZWVUeXBlLlBBUkFHUkFQSCwgcm9vdDogbnVsbCwgb3JpZ2luYWxUZXh0OiBcIlwiIH0sXHJcbiAgICAgICAgdGFyZ2V0VHJlZTogeyB0ZXh0OiBcIlwiLCBwYXJhZ3JhcGhJeDogcGFyYW1zLnBhcmFncmFwaEl4LCB0eXBlOiBIaWdobGlnaHRUcmVlVHlwZS5QQVJBR1JBUEgsIHJvb3Q6IG51bGwsIG9yaWdpbmFsVGV4dDogXCJcIiB9XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiB0aGlzLmFwaS50cmFuc2xhdGVQYXJhZ3JhcGgocGFyYW1zKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaGFuZGxlVHJhbnNsYXRlZFBhcmFncmFwaChwYXJhZ3JhcGg6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkge1xyXG4gICAgLy9pZiBhdXRvIGRvbWFpbiBkZXRlY3Rpb24gaXMgb24sIHN5c3RlbSBhcGkgc2VydmljZSBzZXRzIHN5c3RlbSBpZCB0byBgJHtzcmNMYW5nfS0ke3RhcmdldExhbmd9YCBzbyB3ZSBuZWVkIHRvIHZhbGlkYXRlIGlmIHRoYXQgaXMgdGhlIGNhc2VcclxuICAgIGlmIChwYXJhZ3JhcGguc3lzdGVtSWQgJiYgdGhpcy5hY3RpdmVEYXRhLmlkICE9PSBwYXJhZ3JhcGguc3lzdGVtSWRcclxuICAgICAgJiYgdGhpcy5hY3RpdmVEYXRhLmlkID09PSBgJHt0aGlzLmFjdGl2ZURhdGEuc291cmNlTGFuZ3VhZ2V9LSR7dGhpcy5hY3RpdmVEYXRhLnRhcmdldExhbmd1YWdlfWApIHtcclxuICAgICAgdGhpcy5zeXN0ZW1TZXJ2aWNlLmNoYW5nZVN5c3RlbShwYXJhZ3JhcGguc3lzdGVtSWQpO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIE5lZWRzIHRvIHNjcm9sbCB0byB0b3AgYWZ0ZXIgZmlyc3QgcGFyYWdyYXBoIGlzIHRyYW5zbGF0ZWQuXHJcbiAgICBpZiAoIXRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCkge1xyXG4gICAgICAvLyBpZiBlbXB0eSBwYXJhZ3JhcGggaXMgJ3RyYW5zbGF0ZWQnIGZpcnN0LCBubyBuZWVkIHRvIGRvIGFueSBzY3JvbGxpbmcuIFdhaXQgZm9yIHJlYWwgdGV4dCB0byBiZSB0cmFuc2xhdGVkLlxyXG4gICAgICBpZiAocGFyYWdyYXBoLnRhcmdldFRyZWUudGV4dC50cmltKCkubGVuZ3RoID4gMCkge1xyXG4gICAgICAgIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy50bGRTY3JvbGxTZXJ2aWNlLnN5bmNTY3JvbGxiYXJzKG51bGwsIDApO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZVBhcmFncmFwaHMocGFyYWdyYXBoSXg6IG51bWJlciwgcmVzcG9uc2U6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSkge1xyXG4gICAgbGV0IHBhcmFncmFwaDogSVBhcmFncmFwaEluZm8gPSB7XHJcbiAgICAgIGl4OiBwYXJhZ3JhcGhJeCxcclxuICAgICAgdGFyZ2V0OiByZXNwb25zZS50YXJnZXRUcmVlLFxyXG4gICAgICBzb3VyY2U6IHJlc3BvbnNlLnNvdXJjZVRyZWVcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzLnNwbGljZShwYXJhZ3JhcGhJeCwgMSwgcGFyYWdyYXBoKTtcclxuICAgIHRoaXMuc291cmNlUGFyYWdyYXBocy5zcGxpY2UocGFyYWdyYXBoSXgsIDEsIHJlc3BvbnNlLnNvdXJjZVRyZWUpO1xyXG4gICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzLnNwbGljZShwYXJhZ3JhcGhJeCwgMSwgcmVzcG9uc2UudGFyZ2V0VHJlZSk7XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzLnNvcnQoKGEsIGIpID0+IChhLml4ID4gYi5peCkgPyAxIDogLTEpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjbGVhclNvdXJjZVBhcmFtcygpIHtcclxuICAgIHRoaXMuX2RpY3Rpb25hcnlFbnRyeSA9IG51bGw7XHJcbiAgICB0aGlzLl9oYXNEaWN0aW9uYXJ5ID0gZmFsc2U7XHJcbiAgICB0aGlzLnBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy5zb3VyY2VQYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnVybFRvVHJhbnNsYXRlID0gbnVsbDtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MgPSBudWxsO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncyA9IG51bGw7XHJcbiAgICB0aGlzLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gIH1cclxuXHJcblxyXG4gIHByaXZhdGUgcHJlcGFyZUFuZFRyYW5zbGF0ZVdvcmRzKCkge1xyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtT2JqZWN0ID0gdGhpcy5hY3RpdmVEYXRhO1xyXG4gICAgdGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uID0gdGhpcy5kaWN0aW9uYXJ5VHJhbnNsYXRpb24odGhpcy5zb3VyY2VUZXh0LnRyaW0oKSxcclxuICAgICAgYWN0aXZlU3lzdGVtT2JqZWN0LnNvdXJjZUxhbmd1YWdlLCBhY3RpdmVTeXN0ZW1PYmplY3QudGFyZ2V0TGFuZ3VhZ2UpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHJlc3BvbnNlOiBJRGljdGlvbmFyeUVudHJ5W10pID0+IHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24gPSBudWxsO1xyXG4gICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlWzBdIHx8ICFyZXNwb25zZVswXS50cmFuc2xhdGlvbnMgfHwgcmVzcG9uc2VbMF0udHJhbnNsYXRpb25zLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgICAgICAgIHRoaXMuaGFzRGljdGlvbmFyeSA9IGZhbHNlO1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRpY3Rpb25hcnlFbnRyeSA9IHJlc3BvbnNlO1xyXG4gICAgICB9LCAoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVUZXh0KHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gZmFsc2U7XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSB0cmFuc2xhdGVUZXh0KHRleHQ6IHN0cmluZykge1xyXG4gICAgY29uc3QgcGFyYWdyYXBocyA9IENvbW1vbi5zcGxpdEluUGFyYWdyYXBocyh0ZXh0KTtcclxuICAgIGNvbnN0IG5ld1BhcmFncmFwaHM6IElQYXJhZ3JhcGhJbmZvW10gPSBbXTtcclxuICAgIGNvbnN0IG5ld1NvdXJjZVBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuICAgIGNvbnN0IG5ld1RhcmdldFBhcmFncmFwaHM6IElIaWdobGlnaHRUcmVlW10gPSBbXTtcclxuXHJcbiAgICAvLyBzb3VyY2UgdGV4dCBjaGFuZ2VkLiBQcmV2aW91c2x5IG1hZGUgb2JzZXJ2YWJsZXMgYXJlbid0IG5lY2Vzc2FyeSBhbnltb3JlO1xyXG4gICAgdGhpcy5yZWNyZWF0ZVBhcmFncmFwaFRyYW5zbGF0aW9uU3ViamVjdCgpO1xyXG5cclxuICAgIHBhcmFncmFwaHMuZm9yRWFjaCgocGFyYWdyYXBoLCBpeCkgPT4ge1xyXG4gICAgICAvLyBDaGVjayBpZiBwYXJhZ3JhcGggd2l0aCBzYW1lIHRleHQgZXhpc3RzIChzbyB5b3UgZG9uJ3QgaGF2ZSB0byB0cmFuc2xhdGUgaXQgYWdhaW4pLlxyXG4gICAgICAvLyBJZiBpdCBkb2VzLCB5b3UgY2FuIGNsb25lIGl0LlxyXG4gICAgICBjb25zdCBleGlzdGluZ1BhcmFncmFwaEluZm8gPSBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuZmluZEV4aXN0aW5nUGFyYWdyYXBoKHBhcmFncmFwaCwgaXgsIHRoaXMucGFyYWdyYXBocyk7XHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWdyYXBoID0gZXhpc3RpbmdQYXJhZ3JhcGhJbmZvLmV4aXN0aW5nUGFyYWdyYXBoO1xyXG4gICAgICBpZiAoZXhpc3RpbmdQYXJhZ3JhcGhJbmZvLmV4aXN0aW5nUGFyYWdyYXBoKSB7XHJcbiAgICAgICAgaWYgKCFleGlzdGluZ1BhcmFncmFwaEluZm8uaGFzU2FtZUl4KSB7XHJcbiAgICAgICAgICBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuY2hhbmdlUm9vdEFuZFBhcmFncmFwaEl4KGV4aXN0aW5nUGFyYWdyYXBoLnNvdXJjZSwgZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlLCBleGlzdGluZ1BhcmFncmFwaC5peCk7XHJcbiAgICAgICAgICBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuY2hhbmdlUm9vdEFuZFBhcmFncmFwaEl4KGV4aXN0aW5nUGFyYWdyYXBoLnRhcmdldCwgZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0LCBleGlzdGluZ1BhcmFncmFwaC5peCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld1BhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBleGlzdGluZ1BhcmFncmFwaCk7XHJcbiAgICAgICAgbmV3VGFyZ2V0UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIGV4aXN0aW5nUGFyYWdyYXBoLnRhcmdldCk7XHJcbiAgICAgICAgbmV3U291cmNlUGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIGV4aXN0aW5nUGFyYWdyYXBoLnNvdXJjZSk7XHJcbiAgICAgIH1cclxuICAgICAgZWxzZSB7XHJcbiAgICAgICAgY29uc3QgbmV3UGFyYWdyYXBoID0gVGxkVHJhbnNsYXRlVGV4dFV0aWxzLmNyZWF0ZUVtcHR5UGFyYWdyYXBoSW5mbyhpeCk7XHJcblxyXG4gICAgICAgIG5ld1BhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBuZXdQYXJhZ3JhcGgpO1xyXG4gICAgICAgIG5ld1NvdXJjZVBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBuZXdQYXJhZ3JhcGguc291cmNlKTtcclxuICAgICAgICBuZXdUYXJnZXRQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgbmV3UGFyYWdyYXBoLnRhcmdldCk7XHJcbiAgICAgICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0Lm5leHQoeyBpeDogaXgsIGxpbmU6IHBhcmFncmFwaCB9KTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuaXNUcmFuc2xhdGluZykge1xyXG4gICAgICB0aGlzLnNldFByb2dyZXNzSW5kaWNhdG9yVGltZW91dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMucGFyYWdyYXBocyA9IG5ld1BhcmFncmFwaHM7XHJcbiAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMgPSBuZXdUYXJnZXRQYXJhZ3JhcGhzO1xyXG4gICAgdGhpcy5zb3VyY2VQYXJhZ3JhcGhzID0gbmV3U291cmNlUGFyYWdyYXBocztcclxuICB9XHJcblxyXG4gIC8qKiBDcmVhdGVzIHRpbWVvdXQgd2hpY2ggZW5hYmxlcyBwcm9ncmVzcyBpbmRpY2F0b3IgYWZ0ZXIgZ2l2ZW4gbWlsaXNlY29uZHMgKi9cclxuICBwcml2YXRlIHNldFByb2dyZXNzSW5kaWNhdG9yVGltZW91dCgpIHtcclxuICAgIGlmICh0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dE1pbGlTZWNvbmRzID09PSBudWxsIHx8IHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLnByb2dyZXNzSW5kaWNhdG9yVmlzaWJsZSkge1xyXG4gICAgICB0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMuc2hvd1Byb2dyZXNzSW5kaWNhdG9yKCk7XHJcbiAgICAgIH0sIHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIE1ldGhvZCBmb3Igc2V0dGluZyBuZWNlc3NhcnkgcHJvcGVydGllcyB0byBtYWtlIHByb2dyZXNzIGluZGljYXRvciB2aXNpYmxlLiAqL1xyXG4gIHByaXZhdGUgc2hvd1Byb2dyZXNzSW5kaWNhdG9yKCkge1xyXG4gICAgdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIC8qKiBNZXRob2QgZm9yIHNldHRpbmcgbmVjZXNzYXJ5IHByb3BlcnRpZXMgdG8gbWFrZSBwcm9ncmVzcyBpbmRpY2F0b3IgaGlkZGVuLiAqL1xyXG4gIGhpZGVQcm9ncmVzc0luZGljYXRvcigpIHtcclxuICAgIGlmICh0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dCkge1xyXG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXQpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yID0gZmFsc2U7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRvZ2dsZVRleHRUb1NwZWVjaCgpIHtcclxuICAgIC8vIGlmIG5vdGhpbmcgdHJhbnNsYXRlZCwgdHRzIHNob3VsZCBub3QgYmUgYXZhaWxhYmxlXHJcbiAgICBpZiAoIXRoaXMudGFyZ2V0UGFyYWdyYXBocy5sZW5ndGgpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGFjdGl2ZVN5c3RlbSA9IHRoaXMuYWN0aXZlRGF0YTtcclxuICAgIHRoaXMudGV4dFRvU3BlZWNoVGFyZ2V0U2V0dGluZ3MgPSB0aGlzLmZpbmRUZXh0VG9TcGVlY2hTZXR0aW5ncyhhY3RpdmVTeXN0ZW0udGFyZ2V0TGFuZ3VhZ2UsIHRoaXMudHJhbnNsYXRlZFRleHQpO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hTb3VyY2VTZXR0aW5ncyA9IHRoaXMuZmluZFRleHRUb1NwZWVjaFNldHRpbmdzKGFjdGl2ZVN5c3RlbS5zb3VyY2VMYW5ndWFnZSwgdGhpcy5zb3VyY2VUZXh0KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZmluZFRleHRUb1NwZWVjaFNldHRpbmdzKGxhbmd1YWdlQ29kZTogc3RyaW5nLCB0ZXh0OiBzdHJpbmcpOiBUZXh0VG9TcGVlY2hTZXR0aW5ncyB7XHJcbiAgICBjb25zdCBzZXR0aW5ncyA9IHRoaXMuY29uZmlnU2VydmljZS50ZXh0VG9TcGVlY2hDb25maWcubGFuZ3VhZ2VzW2xhbmd1YWdlQ29kZV07XHJcbiAgICBpZiAoc2V0dGluZ3MpIHtcclxuICAgICAgcmV0dXJuIHtcclxuICAgICAgICB0ZXh0LFxyXG4gICAgICAgIHVybDogc2V0dGluZ3MudXJsLFxyXG4gICAgICAgIHZvaWNlOiBzZXR0aW5ncy52b2ljZSxcclxuICAgICAgICBsYW5nQnBjNDc6IHNldHRpbmdzLmxhbmdCcGM0NyxcclxuICAgICAgICBtYXhDaGFyc0luVGV4dDogdGhpcy5jb25maWdTZXJ2aWNlLnRleHRUb1NwZWVjaENvbmZpZy5tYXhDaGFyc0luVGV4dFxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcbn1cclxuIl19
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS10ZXh0LnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvbW9kdWxlcy90bGQtdGV4dC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLXRleHQuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQWMsRUFBRSxFQUFFLE9BQU8sRUFBZ0IsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLG9CQUFvQixFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUUzRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBaUUsTUFBTSx5QkFBeUIsQ0FBQztBQUszSCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQU14RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7Ozs7O0FBS2hFLE1BQU0sT0FBTyx1QkFBdUI7SUFtSGxDLFlBQTZELEdBQWdDLEVBQzFFLGFBQStCLEVBQy9CLGdCQUFrQyxFQUNsQyxhQUF3QyxFQUN4QyxTQUEyQixFQUMzQixnQkFBcUMsRUFDckMsYUFBOEI7UUFOWSxRQUFHLEdBQUgsR0FBRyxDQUE2QjtRQUMxRSxrQkFBYSxHQUFiLGFBQWEsQ0FBa0I7UUFDL0IscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxrQkFBYSxHQUFiLGFBQWEsQ0FBMkI7UUFDeEMsY0FBUyxHQUFULFNBQVMs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Q0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7UUFDL0UsSUFBSSxRQUFRLEVBQUU7WUFDWixPQUFPO2dCQUNMLElBQUk7Z0JBQ0osR0FBRyxFQUFFLFFBQVEsQ0FBQyxHQUFHO2dCQUNqQixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7Z0JBQ3JCLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztnQkFDN0IsY0FBYyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsa0JBQWtCLENBQUMsY0FBYzthQUNyRSxDQUFBO1NBQ0Y7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7O29IQXZjVSx1QkFBdUIsa0JBbUhkLHNCQUFzQjt3SEFuSC9CLHVCQUF1QixjQUZ0QixNQUFNOzJGQUVQLHVCQUF1QjtrQkFIbkMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQW9IYyxNQUFNOzJCQUFDLHNCQUFzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mLCBTdWJqZWN0LCBTdWJzY3JpcHRpb24sIHRpbWVyIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGRlYm91bmNlLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgbWVyZ2VNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHsgVGV4dFRvU3BlZWNoU2V0dGluZ3MgfSBmcm9tICcuLi8uLi8uLi9jb21wb25lbnRzL3NoYXJlZC90ZXh0LXRvLXNwZWVjaC9tb2RlbHMvdGV4dC10by1zcGVlY2gtc2V0dGluZ3MubW9kZWwnO1xyXG5pbXBvcnQgeyBURVhUX0FQSV9TRVJWSUNFX1RPS0VOIH0gZnJvbSAnLi4vLi4vLi4vaW5qZWN0aW9uLXRva2Vucyc7XHJcbmltcG9ydCB7IENvbW1vbiwgRXJyb3JDb2RlLCBJVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UsIElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zIH0gZnJvbSAnLi4vLi4vdGxkLWNvbW1vbi9tb2RlbHMnO1xyXG5pbXBvcnQgeyBUbGRBbGVydFNlcnZpY2UsIFRsZEhpZ2hsaWdodFNlcnZpY2UsIFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkU2Nyb2xsU2VydmljZSB9IGZyb20gJy4uLy4uL3RsZC1jb21tb24vc2VydmljZXMvc2Nyb2xsL3RsZC1zY3JvbGwuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFN5c3RlbVNlcnZpY2UgfSBmcm9tICcuLi8uLi90bGQtdG9vbHRpcC9zZXJ2aWNlcyc7XHJcbmltcG9ydCB7IElEaWN0aW9uYXJ5RW50cnksIElTb3VyY2VDaGFuZ2VFdmVudCB9IGZyb20gJy4uL21vZGVscy9kaWN0aW9uYXJ5Lm1vZGVsJztcclxuaW1wb3J0IHsgSGlnaGxpZ2h0VHJlZVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0LXRyZWUtdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IElIaWdobGlnaHRUcmVlIH0gZnJvbSAnLi4vbW9kZWxzL2hpZ2hsaWdodC10cmVlLm1vZGVsJztcclxuaW1wb3J0IHsgSVBhcmFncmFwaEluZm8gfSBmcm9tICcuLi9tb2RlbHMvaGlnaGxpZ2h0Lm1vZGVsJztcclxuaW1wb3J0IHsgSVJldHJhbnNsYXRlUGFyYW1zIH0gZnJvbSAnLi4vbW9kZWxzL3JldHJhbnNsYXRlLXBhcmFtcy5tb2RlbCc7XHJcbmltcG9ydCB7IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXNwb25zZSB9IGZyb20gJy4uL21vZGVscy90cmFuc2xhdGUtcGFyYWdyYXBoLXJlc3BvbnNlLm1vZGVsJztcclxuaW1wb3J0IHsgSVVudHJhbnNsYXRlZFBhcmFncmFwaCB9IGZyb20gJy4uL21vZGVscy91bnRyYW5zbGF0ZWQtcGFyYWdyYXBoLm1vZGVsJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlVGV4dFV0aWxzIH0gZnJvbSAnLi4vdXRpbHMvdGxkLXRyYW5zbGF0ZS10ZXh0LnV0aWxzJztcclxuaW1wb3J0IHsgTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUgfSBmcm9tICdAdGlsZGUtbmxwL25neC1jb21tb24nO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIF9zb3VyY2VUZXh0OiBzdHJpbmc7XHJcbiAgZ2V0IHNvdXJjZVRleHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc291cmNlVGV4dDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3NvdXJjZVRleHRIeXBvdGhlc2lzOiBzdHJpbmc7XHJcbiAgZ2V0IHNvdXJjZVRleHRIeXBvdGhlc2lzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NvdXJjZVRleHRIeXBvdGhlc2lzO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlQ2hhbmdlOiBTdWJqZWN0PElTb3VyY2VDaGFuZ2VFdmVudD4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VDaGFuZ2UoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfc291cmNlU2Nyb2xsOiBTdWJqZWN0PG51bWJlcj4gPSBuZXcgU3ViamVjdCgpO1xyXG4gIGdldCBzb3VyY2VTY3JvbGwoKSB7IHJldHVybiB0aGlzLl9zb3VyY2VTY3JvbGwuYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfdHJhbnNsYXRlQnV0dG9uQ2xpY2s6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcbiAgZ2V0IHRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCkgeyByZXR1cm4gdGhpcy5fdHJhbnNsYXRlQnV0dG9uQ2xpY2suYXNPYnNlcnZhYmxlKCk7IH1cclxuXHJcbiAgcHJpdmF0ZSBfaGFzRGljdGlvbmFyeTogYm9vbGVhbjtcclxuICBnZXQgaGFzRGljdGlvbmFyeSgpIHsgcmV0dXJuIHRoaXMuX2hhc0RpY3Rpb25hcnk7IH1cclxuICBzZXQgaGFzRGljdGlvbmFyeSh2YWwpIHtcclxuICAgIHRoaXMuX2hhc0RpY3Rpb25hcnkgPSB2YWw7XHJcbiAgICBpZiAoIXZhbCkge1xyXG4gICAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZGljdGlvbmFyeUVudHJ5OiBJRGljdGlvbmFyeUVudHJ5W107XHJcbiAgZ2V0IGRpY3Rpb25hcnlFbnRyeSgpIHsgcmV0dXJuIHRoaXMuX2RpY3Rpb25hcnlFbnRyeTsgfVxyXG4gIHNldCBkaWN0aW9uYXJ5RW50cnkodmFsKSB7XHJcbiAgICB0aGlzLl9kaWN0aW9uYXJ5RW50cnkgPSB2YWw7XHJcbiAgICBpZiAodGhpcy5kaWN0aW9uYXJ5RW50cnkpIHtcclxuICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gdHJ1ZTtcclxuICAgIH1cclxuICB9XHJcbiAgZ2V0IHRyYW5zbGF0ZWRUZXh0KCk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gdGhpcy50YXJnZXRQYXJhZ3JhcGhzLm1hcChsaW5lID0+IGxpbmUub3JpZ2luYWxUZXh0KS5qb2luKFwiXFxuXCIpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9vbkNsZWFyID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG5cclxuICB1cmxUb1RyYW5zbGF0ZTogc3RyaW5nO1xyXG4gIHBhcmFncmFwaHM6IElQYXJhZ3JhcGhJbmZvW10gPSBbXTtcclxuICBzb3VyY2VQYXJhZ3JhcGhzOiBJSGlnaGxpZ2h0VHJlZVtdID0gW107XHJcbiAgdGFyZ2V0UGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG4gIFxyXG4gIGlzU3lzdGVtV2FraW5nVXAhOiBib29sZWFuO1xyXG5cclxuICAvLyBTZXQgdGhpcyBvYmplY3Qgd2l0aCBuZWNlc3NhcnkgdmFsdWVzIHRvIGRpc3BsYXkgVFRTIGNvbXBvbmVudFxyXG4gIHRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzOiBUZXh0VG9TcGVlY2hTZXR0aW5ncztcclxuICB0ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5nczogVGV4dFRvU3BlZWNoU2V0dGluZ3M7XHJcblxyXG4gIHByaXZhdGUgX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDogYm9vbGVhbjtcclxuICBnZXQgZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZDtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZGljdGlvbmFyeVN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcGFyYWdyYXBoVHJhbnNsYXRpb25zU3ViamVjdCA9IG5ldyBTdWJqZWN0PElVbnRyYW5zbGF0ZWRQYXJhZ3JhcGg+KCk7XHJcbiAgcHJpdmF0ZSBwYXJhZ3JhcGhUcmFuc2xhdGlvblN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVib3VuY2VyOiBTdWJqZWN0PElTb3VyY2VDaGFuZ2VFdmVudD4gPSBuZXcgU3ViamVjdDxJU291cmNlQ2hhbmdlRXZlbnQ+KCk7XHJcbiAgcHJpdmF0ZSBkZWJvdW5jZXJTdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbjtcclxuICAvKiogSG93IG1hbnkgcGFyYWdyYXBocyBjYW4gYmUgdHJhbnNsYXRlZCBhdCB0aGUgc2FtZSB0aW1lLiAqL1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgQ09OQ1VSUkVOVF9VUExPQURTID0gNTtcclxuICBwcml2YXRlIHJlYWRvbmx5IERFQk9VTkNFX1RJTUUgPSAxMDAwO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YW5kYnlFbmdpbmVOb3RpZmljYXRpb25FcnJvcktleSA9ICcyMSc7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBzdGFuZGJ5U3lzdGVtUmV0cmFuc2xhdGlvblRpbWVvdXQgPSAzMDAwO1xyXG5cclxuICAvKiogV2hldGhlciBwcm9ncmVzcyBpbmRpY2F0b3Igc2hvdWxkIGJlIHNob3duLiBUaGlzIHZhbHVlIG11c3QgYmUgc2V0IHRvIHRydWUgb25seSBpZiBjb25maWd1cmVkIHRpbWUgaGFzIHBhc3NlZC4gKi9cclxuICBwcml2YXRlIF9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICBnZXQgc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yKCkgeyByZXR1cm4gdGhpcy5fc2hvdWxkU2hvd1Byb2dyZXNzSW5kaWNhdG9yOyB9XHJcbiAgLy9Ob2RlSlMuVGltZW91dFxyXG4gIHByaXZhdGUgcHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0OiBhbnk7XHJcblxyXG4gIHByaXZhdGUgX3VudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICBnZXQgdW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQoKSB7IHJldHVybiB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudDsgfVxyXG4gIHNldCB1bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCh2YWx1ZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl91bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA9IHZhbHVlO1xyXG4gICAgLy8gV2hlbiB0cmFuc2xhdGlvbiBmaW5pc2hlZCwgcHJvZ3Jlc3MgaW5kaWNhdG9yIHNob3VsZCBub3QgYmUgc2hvd24uXHJcbiAgICBpZiAodmFsdWUgPT09IDApIHtcclxuICAgICAgdGhpcy50b2dnbGVUZXh0VG9TcGVlY2goKTtcclxuICAgICAgdGhpcy5oaWRlUHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBpc1RyYW5zbGF0aW5nKCkgeyByZXR1cm4gdGhpcy51bnRyYW5zbGF0ZWRQYXJhZ3JhcGhDb3VudCA+IDAgfHwgdGhpcy5pc1N5c3RlbVdha2luZ1VwOyB9XHJcblxyXG4gIC8vIGdldHRlcnMgZnJvbSBjb25maWcgc2VydmljZS5cclxuICBnZXQgYWxsb3dXZWJzaXRlVHJhbnNsYXRpb24oKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5hbGxvd1dlYnNpdGVUcmFuc2xhdGlvbjsgfTtcclxuICBnZXQgYXV0b1JlZGlyZWN0VG9XZWJUcmFuc2xhdGUoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy5hdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZTsgfTtcclxuICBnZXQgd2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXgoKTogc3RyaW5nIHsgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS50ZXh0Q29uZmlnLndlYldpZGdldFJlZGlyZWN0VXJsUHJlZml4OyB9O1xyXG4gIGdldCB3ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeCgpOiBzdHJpbmcgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcud2ViV2lkZ2V0UmVkaXJlY3RVcmxQb3NmaXg7IH07XHJcbiAgZ2V0IHVzZURpY3Rpb25hcnkoKTogYm9vbGVhbiB7IHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dENvbmZpZy51c2VEaWN0aW9uYXJ5OyB9O1xyXG4gIGdldCBwcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcygpOiBudW1iZXIgeyByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHM7IH1cclxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cclxuICBnZXQgYWN0aXZlRGF0YSgpIHtcclxuICAgIHJldHVybiB0aGlzLnN5c3RlbVNlcnZpY2UuZ2V0QWN0aXZlU3lzdGVtT2JqKCk7XHJcbiAgfVxyXG5cclxuICBnZXQgdHJhbnNsYXRlVXJsUmVkaXJlY3QoKSB7XHJcbiAgICBpZiAodGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeCA9PT0gJycpIHtcclxuICAgICAgcmV0dXJuIGAke3RoaXMud2ViV2lkZ2V0UmVkaXJlY3RVcmxQcmVmaXh9JHt0aGlzLndlYldpZGdldFJlZGlyZWN0VXJsUG9zZml4fSR7ZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMudXJsVG9UcmFuc2xhdGUpfWA7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gYCR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFByZWZpeH0ke3RoaXMudHJhbnNsYXRlLmN1cnJlbnRMYW5nfSR7dGhpcy53ZWJXaWRnZXRSZWRpcmVjdFVybFBvc2ZpeH0ke3RoaXMudXJsVG9UcmFuc2xhdGV9YDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKiBJZiBkaWN0YXR0aW9uIGlzIGFjdGl2ZS4gQmFzZWQgb24gdGhpcywgZXh0ZW5zaW9ucyBhcmUgaGlkZGVuLiAqL1xyXG4gIGlzRGljdGF0aW5nOiBib29sZWFuO1xyXG5cclxuICBjb25zdHJ1Y3RvcihASW5qZWN0KFRFWFRfQVBJX1NFUlZJQ0VfVE9LRU4pIHByaXZhdGUgcmVhZG9ubHkgYXBpOiBJVGxkVHJhbnNsYXRlVGV4dEFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN5c3RlbVNlcnZpY2U6IFRsZFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRsZFNjcm9sbFNlcnZpY2U6IFRsZFNjcm9sbFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGlnaGxpZ2h0U2VydmljZTogVGxkSGlnaGxpZ2h0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgYWxlcnRzU2VydmljZTogVGxkQWxlcnRTZXJ2aWNlKSB7IH1cclxuXHJcbiAgZGljdGlvbmFyeVRyYW5zbGF0aW9uKHRleHQ6IHN0cmluZywgc3JjQ29kZTogc3RyaW5nLCB0cmdDb2RlOiBzdHJpbmcpIHtcclxuICAgIHJldHVybiB0aGlzLmFwaS5kaWN0aW9uYXJ5VHJhbnNsYXRpb24odGV4dCwgc3JjQ29kZSwgdHJnQ29kZSk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VTb3VyY2UoZXZlbnQ6IElTb3VyY2VDaGFuZ2VFdmVudCkge1xyXG4gICAgdGhpcy5fc291cmNlVGV4dCA9IGV2ZW50LnBocmFzZTtcclxuICAgIHRoaXMuX3NvdXJjZUNoYW5nZS5uZXh0KGV2ZW50KTtcclxuICAgIHRoaXMuZGVib3VuY2VyLm5leHQoZXZlbnQpO1xyXG4gIH1cclxuXHJcbiAgY2hhbmdlU291cmNlSHlwb3RoZXNpcyh0ZXh0OiBzdHJpbmcpIHtcclxuICAgIHRoaXMuX3NvdXJjZVRleHRIeXBvdGhlc2lzID0gdGV4dDtcclxuICB9XHJcblxyXG4gIG9uU291cmNlU2Nyb2xsKG9mZnNldFRvcDogbnVtYmVyKSB7XHJcbiAgICB0aGlzLl9zb3VyY2VTY3JvbGwubmV4dChvZmZzZXRUb3ApO1xyXG4gIH1cclxuXHJcbiAgb25UcmFuc2xhdGVCdXR0b25DbGljaygpIHtcclxuICAgIHRoaXMuX3RyYW5zbGF0ZUJ1dHRvbkNsaWNrLm5leHQobnVsbClcclxuICAgIHRoaXMucmV0cmFuc2xhdGUoeyBidXR0b25DbGlja2VkOiB0cnVlIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xlYXJTb3VyY2UoKSB7XHJcbiAgICB0aGlzLl9vbkNsZWFyLm5leHQobnVsbClcclxuICAgIHRoaXMuY2hhbmdlU291cmNlKHsgcGhyYXNlOiBcIlwiIH0pXHJcbiAgfVxyXG5cclxuICBvbkNsZWFyKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5fb25DbGVhci5hc09ic2VydmFibGUoKTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZVRyYW5zbGF0aW9uKG9wdGlvbnM6IHN0cmluZywgc3lzdGVtSUQ6IHN0cmluZywgdGV4dDogc3RyaW5nLCB0cmFuc2xhdGlvbjogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5hcGkudXBkYXRlVHJhbnNsYXRpb24ob3B0aW9ucywgc3lzdGVtSUQsIHRleHQsIHRyYW5zbGF0aW9uKTtcclxuICB9XHJcblxyXG4gIGxpc3Rlbk9uQ2hhbmdlcygpIHtcclxuICAgIGlmICh0aGlzLmRlYm91bmNlclN1YnNjcmlwdGlvbikge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24gPSB0aGlzLmRlYm91bmNlci5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldmlvdXMpID0+IHtcclxuICAgICAgICByZXR1cm4gcHJldmlvdXMucGhyYXNlID09IHRoaXMuc291cmNlVGV4dDtcclxuICAgICAgfSksXHJcbiAgICAgIGRlYm91bmNlKGV2ID0+IGV2LnBocmFzZT8ubGVuZ3RoID4gMCA/IHRpbWVyKHRoaXMuREVCT1VOQ0VfVElNRSkgOiB0aW1lcigwKSlcclxuICAgIClcclxuICAgICAgLnN1YnNjcmliZSgoZXZlbnQpID0+IHtcclxuICAgICAgICB0aGlzLmhpZ2hsaWdodFNlcnZpY2UuY2hhbmdlU2VsZWN0ZWRUYXJnZXRTZW50ZW5jZShudWxsKTtcclxuXHJcbiAgICAgICAgaWYgKCFldmVudC5kaXNhYmxlQXV0b21hdGljVHJhbnNsYXRpb24pIHtcclxuICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc3RvcExpc3RlbmluZ1RvQ2hhbmdlcygpIHtcclxuICAgIGlmICghdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgdGhpcy5kZWJvdW5jZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIHRoaXMuZGVib3VuY2VyU3Vic2NyaXB0aW9uID0gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vIGlmIG1ldGhvZCBnZXRzIGNhbGxlZCBiZWNhdXNlIG9mIGJ1dHRvbiBjbGljayBhbmQgdXJsIGVudGVyZWQgLSBnbyB0byB3ZWIgdHJhbnNsYXRpb25cclxuICByZXRyYW5zbGF0ZShwYXJhbXM/OiBJUmV0cmFuc2xhdGVQYXJhbXMpIHtcclxuICAgIGlmICghdGhpcy5zb3VyY2VUZXh0IHx8IHRoaXMuc291cmNlVGV4dCA9PSBcIlwiKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTb3VyY2VQYXJhbXMoKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChwYXJhbXM/LmJ1dHRvbkNsaWNrZWQgfHwgcGFyYW1zPy5zeXN0ZW1DaGFuZ2VkKSB7XHJcbiAgICAgIHRoaXMuY2xlYXJTb3VyY2VQYXJhbXMoKTtcclxuICAgIH1cclxuXHJcbiAgICBjb25zdCBtYXhTb3VyY2VDaGFyYWN0ZXJEaWN0aW9uYXJ5ID0gMjAwO1xyXG4gICAgY29uc3QgbWF4RGljdGlvbmFyeVdvcmRzID0gMTI7XHJcblxyXG4gICAgY29uc3Qgd29yZHNJblNvdXJjZSA9IENvbW1vbi5nZXRXb3JkQ291bnQodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgIHRoaXMudXJsVG9UcmFuc2xhdGUgPSBDb21tb24uaXNUZXh0VXJsKHRoaXMuc291cmNlVGV4dCk7XHJcbiAgICBpZiAodGhpcy5hbGxvd1dlYnNpdGVUcmFuc2xhdGlvbiAmJiB0aGlzLnVybFRvVHJhbnNsYXRlKSB7XHJcbiAgICAgIHRoaXMucGFyYWdyYXBocyA9IFtdO1xyXG4gICAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMgPSBbXTtcclxuICAgICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzID0gW107XHJcblxyXG4gICAgICBpZiAodGhpcy5hdXRvUmVkaXJlY3RUb1dlYlRyYW5zbGF0ZSB8fCBwYXJhbXM/LmJ1dHRvbkNsaWNrZWQpIHtcclxuICAgICAgICB3aW5kb3cub3Blbih0aGlzLnRyYW5zbGF0ZVVybFJlZGlyZWN0LCBcIl9ibGFua1wiKTtcclxuICAgICAgfVxyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy51cmxUb1RyYW5zbGF0ZSA9IG51bGw7XHJcbiAgICB9XHJcbiAgICAvLyBUT0RPLiBMZXRvbmlrYSBkaWN0aW9uYXJ5P1xyXG4gICAgaWYgKHRoaXMudXNlRGljdGlvbmFyeSAmJiB0aGlzLnNvdXJjZVRleHQubGVuZ3RoIDwgbWF4U291cmNlQ2hhcmFjdGVyRGljdGlvbmFyeSAmJiB3b3Jkc0luU291cmNlIDw9IG1heERpY3Rpb25hcnlXb3Jkcykge1xyXG4gICAgICB0aGlzLnByZXBhcmVBbmRUcmFuc2xhdGVXb3JkcygpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0KTtcclxuICB9XHJcblxyXG4gIC8qKiBTdG9wcyB0ZXh0IHRyYW5zbGF0aW9uIGlmIGl0IGlzIGFjdGl2ZS4gKi9cclxuICBzdG9wVHJhbnNsYXRpb24oKSB7XHJcbiAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICAgIGlmICh0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uU3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kaWN0aW9uYXJ5U3Vic2NyaXB0aW9uKSB7XHJcbiAgICAgIHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWNyZWF0ZVBhcmFncmFwaFRyYW5zbGF0aW9uU3ViamVjdCgpIHtcclxuICAgIHRoaXMuX2ZpcnN0UGFyYWdyYXBoVHJhbnNsYXRlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5wYXJhZ3JhcGhUcmFuc2xhdGlvbnNTdWJqZWN0ID0gbmV3IFN1YmplY3Q8SVVudHJhbnNsYXRlZFBhcmFncmFwaD4oKTtcclxuXHJcbiAgICBjb25zdCBzb3VyY2UgPSB0aGlzLnNvdXJjZVRleHQ7XHJcbiAgICB0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID0gMDtcclxuICAgIHRoaXMucGFyYWdyYXBoVHJhbnNsYXRpb25TdWJzY3JpcHRpb24gPSB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QuYXNPYnNlcnZhYmxlKCkucGlwZShcclxuICAgICAgbWVyZ2VNYXAoKHVudHJhbnNsYXRlZFBhcmFncmFwaCkgPT4ge1xyXG4gICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgKz0gMTtcclxuICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVQYXJhZ3JhcGgodW50cmFuc2xhdGVkUGFyYWdyYXBoKS5waXBlKFxyXG4gICAgICAgICAgdGFwKChyZXNwb25zZTogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIE5vIG5lZWQgdG8gaGFuZGxlIHJlc3BvbnNlIGlmIHNvdXJjZSB0ZXh0IGhhcyBjaGFuZ2VkLlxyXG4gICAgICAgICAgICBpZiAoc291cmNlICE9IHRoaXMuc291cmNlVGV4dCkge1xyXG4gICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZVRyYW5zbGF0ZWRQYXJhZ3JhcGgocmVzcG9uc2UpO1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBhcmFncmFwaHModW50cmFuc2xhdGVkUGFyYWdyYXBoLml4LCByZXNwb25zZSk7XHJcbiAgICAgICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgLT0gMTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnVudHJhbnNsYXRlZFBhcmFncmFwaENvdW50ID09PSAwICYmIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuaXNTeXN0ZW1XYWtpbmdVcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS5kZWxldGVNZXNzYWdlKE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLklORk8sICdFUlJPUlMuRV8yMScpO1xyXG4gICAgICAgICAgICB9IFxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBjYXRjaEVycm9yKGVyciA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMudW50cmFuc2xhdGVkUGFyYWdyYXBoQ291bnQgLT0gMTtcclxuICAgICAgICAgICAgaWYgKGVyci5zdGF0dXMgPT09IDUwMCkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS51bmhhbmRlbGVkRXJyb3IoeyBFcnJvckNvZGU6IEVycm9yQ29kZS5UUkFOU0xBVElPTl9GQUlMRUQgfSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyLmVycm9yLkVycm9yQ29kZSA9PT0gdGhpcy5zdGFuZGJ5RW5naW5lTm90aWZpY2F0aW9uRXJyb3JLZXkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0c1NlcnZpY2UuaW5mbygnRVJST1JTLkVfMjEnKTtcclxuICAgICAgICAgICAgICB0aGlzLmlzU3lzdGVtV2FraW5nVXAgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMucmV0cmFuc2xhdGUoKTtcclxuICAgICAgICAgICAgICB9LCB0aGlzLnN0YW5kYnlTeXN0ZW1SZXRyYW5zbGF0aW9uVGltZW91dClcclxuXHJcbiAgICAgICAgICAgICAgdGhyb3cgZXJyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRzU2VydmljZS51bmhhbmRlbGVkRXJyb3IoZXJyKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCwgc3ViamVjdCBpcyBkZXN0cm95ZWQgYW5kIHVuc3Vic2NyaWJlZCwgc28gdGhyb3duIGVycm9yIHdvbnQgaGF2ZSBhbnkgZWZmZWN0LlxyXG4gICAgICAgICAgICB0aGlzLnN0b3BUcmFuc2xhdGlvbigpO1xyXG4gICAgICAgICAgICB0aHJvdyBlcnI7XHJcbiAgICAgICAgICB9KSlcclxuICAgICAgfSwgdGhpcy5DT05DVVJSRU5UX1VQTE9BRFMpLFxyXG4gICAgKS5zdWJzY3JpYmUoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdHJhbnNsYXRlUGFyYWdyYXBoKHBhcmFncmFwaDogSVVudHJhbnNsYXRlZFBhcmFncmFwaCk6IE9ic2VydmFibGU8SVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlPiB7XHJcbiAgICBjb25zdCBwYXJhbXM6IElUcmFuc2xhdGVQYXJhZ3JhcGhSZXF1ZXN0UGFyYW1zID0ge1xyXG4gICAgICBwYXJhZ3JhcGhJeDogcGFyYWdyYXBoLml4LFxyXG4gICAgICB0ZXh0OiBwYXJhZ3JhcGgubGluZSxcclxuICAgICAgc3lzdGVtOiB0aGlzLmFjdGl2ZURhdGFcclxuICAgIH07XHJcbiAgICBpZiAoIXBhcmFtcy50ZXh0IHx8IHBhcmFtcy50ZXh0Lmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICByZXR1cm4gb2Yoe1xyXG4gICAgICAgIHNvdXJjZVRyZWU6IHsgdGV4dDogXCJcIiwgcGFyYWdyYXBoSXg6IHBhcmFtcy5wYXJhZ3JhcGhJeCwgdHlwZTogSGlnaGxpZ2h0VHJlZVR5cGUuUEFSQUdSQVBILCByb290OiBudWxsLCBvcmlnaW5hbFRleHQ6IFwiXCIgfSxcclxuICAgICAgICB0YXJnZXRUcmVlOiB7IHRleHQ6IFwiXCIsIHBhcmFncmFwaEl4OiBwYXJhbXMucGFyYWdyYXBoSXgsIHR5cGU6IEhpZ2hsaWdodFRyZWVUeXBlLlBBUkFHUkFQSCwgcm9vdDogbnVsbCwgb3JpZ2luYWxUZXh0OiBcIlwiIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIHRoaXMuYXBpLnRyYW5zbGF0ZVBhcmFncmFwaChwYXJhbXMpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBoYW5kbGVUcmFuc2xhdGVkUGFyYWdyYXBoKHBhcmFncmFwaDogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlKSB7XHJcbiAgICAvL2lmIGF1dG8gZG9tYWluIGRldGVjdGlvbiBpcyBvbiwgc3lzdGVtIGFwaSBzZXJ2aWNlIHNldHMgc3lzdGVtIGlkIHRvIGAke3NyY0xhbmd9LSR7dGFyZ2V0TGFuZ31gIHNvIHdlIG5lZWQgdG8gdmFsaWRhdGUgaWYgdGhhdCBpcyB0aGUgY2FzZVxyXG4gICAgaWYgKHBhcmFncmFwaC5zeXN0ZW1JZCAmJiB0aGlzLmFjdGl2ZURhdGEuaWQgIT09IHBhcmFncmFwaC5zeXN0ZW1JZFxyXG4gICAgICAmJiB0aGlzLmFjdGl2ZURhdGEuaWQgPT09IGAke3RoaXMuYWN0aXZlRGF0YS5zb3VyY2VMYW5ndWFnZX0tJHt0aGlzLmFjdGl2ZURhdGEudGFyZ2V0TGFuZ3VhZ2V9YCkge1xyXG4gICAgICB0aGlzLnN5c3RlbVNlcnZpY2UuY2hhbmdlU3lzdGVtKHBhcmFncmFwaC5zeXN0ZW1JZCk7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gTmVlZHMgdG8gc2Nyb2xsIHRvIHRvcCBhZnRlciBmaXJzdCBwYXJhZ3JhcGggaXMgdHJhbnNsYXRlZC5cclxuICAgIGlmICghdGhpcy5fZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkKSB7XHJcbiAgICAgIC8vIGlmIGVtcHR5IHBhcmFncmFwaCBpcyAndHJhbnNsYXRlZCcgZmlyc3QsIG5vIG5lZWQgdG8gZG8gYW55IHNjcm9sbGluZy4gV2FpdCBmb3IgcmVhbCB0ZXh0IHRvIGJlIHRyYW5zbGF0ZWQuXHJcbiAgICAgIGlmIChwYXJhZ3JhcGgudGFyZ2V0VHJlZS50ZXh0LnRyaW0oKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgdGhpcy5fZmlyc3RQYXJhZ3JhcGhUcmFuc2xhdGVkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnRsZFNjcm9sbFNlcnZpY2Uuc3luY1Njcm9sbGJhcnMobnVsbCwgMCk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUGFyYWdyYXBocyhwYXJhZ3JhcGhJeDogbnVtYmVyLCByZXNwb25zZTogSVRyYW5zbGF0ZVBhcmFncmFwaFJlc3BvbnNlKSB7XHJcbiAgICBsZXQgcGFyYWdyYXBoOiBJUGFyYWdyYXBoSW5mbyA9IHtcclxuICAgICAgaXg6IHBhcmFncmFwaEl4LFxyXG4gICAgICB0YXJnZXQ6IHJlc3BvbnNlLnRhcmdldFRyZWUsXHJcbiAgICAgIHNvdXJjZTogcmVzcG9uc2Uuc291cmNlVHJlZVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLnBhcmFncmFwaHMuc3BsaWNlKHBhcmFncmFwaEl4LCAxLCBwYXJhZ3JhcGgpO1xyXG4gICAgdGhpcy5zb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShwYXJhZ3JhcGhJeCwgMSwgcmVzcG9uc2Uuc291cmNlVHJlZSk7XHJcbiAgICB0aGlzLnRhcmdldFBhcmFncmFwaHMuc3BsaWNlKHBhcmFncmFwaEl4LCAxLCByZXNwb25zZS50YXJnZXRUcmVlKTtcclxuXHJcbiAgICB0aGlzLnBhcmFncmFwaHMuc29ydCgoYSwgYikgPT4gKGEuaXggPiBiLml4KSA/IDEgOiAtMSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNsZWFyU291cmNlUGFyYW1zKCkge1xyXG4gICAgdGhpcy5fZGljdGlvbmFyeUVudHJ5ID0gbnVsbDtcclxuICAgIHRoaXMuX2hhc0RpY3Rpb25hcnkgPSBmYWxzZTtcclxuICAgIHRoaXMucGFyYWdyYXBocyA9IFtdO1xyXG4gICAgdGhpcy50YXJnZXRQYXJhZ3JhcGhzID0gW107XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMgPSBbXTtcclxuICAgIHRoaXMudXJsVG9UcmFuc2xhdGUgPSBudWxsO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyA9IG51bGw7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzID0gbnVsbDtcclxuICAgIHRoaXMuc3RvcFRyYW5zbGF0aW9uKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgcHJpdmF0ZSBwcmVwYXJlQW5kVHJhbnNsYXRlV29yZHMoKSB7XHJcbiAgICBjb25zdCBhY3RpdmVTeXN0ZW1PYmplY3QgPSB0aGlzLmFjdGl2ZURhdGE7XHJcbiAgICB0aGlzLmRpY3Rpb25hcnlTdWJzY3JpcHRpb24gPSB0aGlzLmRpY3Rpb25hcnlUcmFuc2xhdGlvbih0aGlzLnNvdXJjZVRleHQudHJpbSgpLFxyXG4gICAgICBhY3RpdmVTeXN0ZW1PYmplY3Quc291cmNlTGFuZ3VhZ2UsIGFjdGl2ZVN5c3RlbU9iamVjdC50YXJnZXRMYW5ndWFnZSlcclxuICAgICAgLnN1YnNjcmliZSgocmVzcG9uc2U6IElEaWN0aW9uYXJ5RW50cnlbXSkgPT4ge1xyXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeVN1YnNjcmlwdGlvbiA9IG51bGw7XHJcbiAgICAgICAgaWYgKCFyZXNwb25zZSB8fCAhcmVzcG9uc2VbMF0gfHwgIXJlc3BvbnNlWzBdLnRyYW5zbGF0aW9ucyB8fCByZXNwb25zZVswXS50cmFuc2xhdGlvbnMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgIHRoaXMudHJhbnNsYXRlVGV4dCh0aGlzLnNvdXJjZVRleHQpO1xyXG4gICAgICAgICAgdGhpcy5oYXNEaWN0aW9uYXJ5ID0gZmFsc2U7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZGljdGlvbmFyeUVudHJ5ID0gcmVzcG9uc2U7XHJcbiAgICAgIH0sICgpID0+IHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVRleHQodGhpcy5zb3VyY2VUZXh0KTtcclxuICAgICAgICB0aGlzLmhhc0RpY3Rpb25hcnkgPSBmYWxzZTtcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHRyYW5zbGF0ZVRleHQodGV4dDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBwYXJhZ3JhcGhzID0gQ29tbW9uLnNwbGl0SW5QYXJhZ3JhcGhzKHRleHQpO1xyXG4gICAgY29uc3QgbmV3UGFyYWdyYXBoczogSVBhcmFncmFwaEluZm9bXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3U291cmNlUGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG4gICAgY29uc3QgbmV3VGFyZ2V0UGFyYWdyYXBoczogSUhpZ2hsaWdodFRyZWVbXSA9IFtdO1xyXG5cclxuICAgIC8vIHNvdXJjZSB0ZXh0IGNoYW5nZWQuIFByZXZpb3VzbHkgbWFkZSBvYnNlcnZhYmxlcyBhcmVuJ3QgbmVjZXNzYXJ5IGFueW1vcmU7XHJcbiAgICB0aGlzLnJlY3JlYXRlUGFyYWdyYXBoVHJhbnNsYXRpb25TdWJqZWN0KCk7XHJcblxyXG4gICAgcGFyYWdyYXBocy5mb3JFYWNoKChwYXJhZ3JhcGgsIGl4KSA9PiB7XHJcbiAgICAgIC8vIENoZWNrIGlmIHBhcmFncmFwaCB3aXRoIHNhbWUgdGV4dCBleGlzdHMgKHNvIHlvdSBkb24ndCBoYXZlIHRvIHRyYW5zbGF0ZSBpdCBhZ2FpbikuXHJcbiAgICAgIC8vIElmIGl0IGRvZXMsIHlvdSBjYW4gY2xvbmUgaXQuXHJcbiAgICAgIGNvbnN0IGV4aXN0aW5nUGFyYWdyYXBoSW5mbyA9IFRsZFRyYW5zbGF0ZVRleHRVdGlscy5maW5kRXhpc3RpbmdQYXJhZ3JhcGgocGFyYWdyYXBoLCBpeCwgdGhpcy5wYXJhZ3JhcGhzKTtcclxuICAgICAgY29uc3QgZXhpc3RpbmdQYXJhZ3JhcGggPSBleGlzdGluZ1BhcmFncmFwaEluZm8uZXhpc3RpbmdQYXJhZ3JhcGg7XHJcbiAgICAgIGlmIChleGlzdGluZ1BhcmFncmFwaEluZm8uZXhpc3RpbmdQYXJhZ3JhcGgpIHtcclxuICAgICAgICBpZiAoIWV4aXN0aW5nUGFyYWdyYXBoSW5mby5oYXNTYW1lSXgpIHtcclxuICAgICAgICAgIFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jaGFuZ2VSb290QW5kUGFyYWdyYXBoSXgoZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlLCBleGlzdGluZ1BhcmFncmFwaC5zb3VyY2UsIGV4aXN0aW5nUGFyYWdyYXBoLml4KTtcclxuICAgICAgICAgIFRsZFRyYW5zbGF0ZVRleHRVdGlscy5jaGFuZ2VSb290QW5kUGFyYWdyYXBoSXgoZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0LCBleGlzdGluZ1BhcmFncmFwaC50YXJnZXQsIGV4aXN0aW5nUGFyYWdyYXBoLml4KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIGV4aXN0aW5nUGFyYWdyYXBoKTtcclxuICAgICAgICBuZXdUYXJnZXRQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGgudGFyZ2V0KTtcclxuICAgICAgICBuZXdTb3VyY2VQYXJhZ3JhcGhzLnNwbGljZShpeCwgMCwgZXhpc3RpbmdQYXJhZ3JhcGguc291cmNlKTtcclxuICAgICAgfVxyXG4gICAgICBlbHNlIHtcclxuICAgICAgICBjb25zdCBuZXdQYXJhZ3JhcGggPSBUbGRUcmFuc2xhdGVUZXh0VXRpbHMuY3JlYXRlRW1wdHlQYXJhZ3JhcGhJbmZvKGl4KTtcclxuXHJcbiAgICAgICAgbmV3UGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaCk7XHJcbiAgICAgICAgbmV3U291cmNlUGFyYWdyYXBocy5zcGxpY2UoaXgsIDAsIG5ld1BhcmFncmFwaC5zb3VyY2UpO1xyXG4gICAgICAgIG5ld1RhcmdldFBhcmFncmFwaHMuc3BsaWNlKGl4LCAwLCBuZXdQYXJhZ3JhcGgudGFyZ2V0KTtcclxuICAgICAgICB0aGlzLnBhcmFncmFwaFRyYW5zbGF0aW9uc1N1YmplY3QubmV4dCh7IGl4OiBpeCwgbGluZTogcGFyYWdyYXBoIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuXHJcbiAgICBpZiAodGhpcy5pc1RyYW5zbGF0aW5nKSB7XHJcbiAgICAgIHRoaXMuc2V0UHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5wYXJhZ3JhcGhzID0gbmV3UGFyYWdyYXBocztcclxuICAgIHRoaXMudGFyZ2V0UGFyYWdyYXBocyA9IG5ld1RhcmdldFBhcmFncmFwaHM7XHJcbiAgICB0aGlzLnNvdXJjZVBhcmFncmFwaHMgPSBuZXdTb3VyY2VQYXJhZ3JhcGhzO1xyXG4gIH1cclxuXHJcbiAgLyoqIENyZWF0ZXMgdGltZW91dCB3aGljaCBlbmFibGVzIHByb2dyZXNzIGluZGljYXRvciBhZnRlciBnaXZlbiBtaWxpc2Vjb25kcyAqL1xyXG4gIHByaXZhdGUgc2V0UHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KCkge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0TWlsaVNlY29uZHMgPT09IG51bGwgfHwgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5jb25maWdTZXJ2aWNlLnRleHRDb25maWcucHJvZ3Jlc3NJbmRpY2F0b3JWaXNpYmxlKSB7XHJcbiAgICAgIHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy5zaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKTtcclxuICAgICAgfSwgdGhpcy5wcm9ncmVzc0luZGljYXRvclRpbWVvdXRNaWxpU2Vjb25kcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKiogTWV0aG9kIGZvciBzZXR0aW5nIG5lY2Vzc2FyeSBwcm9wZXJ0aWVzIHRvIG1ha2UgcHJvZ3Jlc3MgaW5kaWNhdG9yIHZpc2libGUuICovXHJcbiAgcHJpdmF0ZSBzaG93UHJvZ3Jlc3NJbmRpY2F0b3IoKSB7XHJcbiAgICB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgLyoqIE1ldGhvZCBmb3Igc2V0dGluZyBuZWNlc3NhcnkgcHJvcGVydGllcyB0byBtYWtlIHByb2dyZXNzIGluZGljYXRvciBoaWRkZW4uICovXHJcbiAgaGlkZVByb2dyZXNzSW5kaWNhdG9yKCkge1xyXG4gICAgaWYgKHRoaXMucHJvZ3Jlc3NJbmRpY2F0b3JUaW1lb3V0KSB7XHJcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnByb2dyZXNzSW5kaWNhdG9yVGltZW91dCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLl9zaG91bGRTaG93UHJvZ3Jlc3NJbmRpY2F0b3IgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdG9nZ2xlVGV4dFRvU3BlZWNoKCkge1xyXG4gICAgLy8gaWYgbm90aGluZyB0cmFuc2xhdGVkLCB0dHMgc2hvdWxkIG5vdCBiZSBhdmFpbGFibGVcclxuICAgIGlmICghdGhpcy50YXJnZXRQYXJhZ3JhcGhzLmxlbmd0aCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgYWN0aXZlU3lzdGVtID0gdGhpcy5hY3RpdmVEYXRhO1xyXG4gICAgdGhpcy50ZXh0VG9TcGVlY2hUYXJnZXRTZXR0aW5ncyA9IHRoaXMuZmluZFRleHRUb1NwZWVjaFNldHRpbmdzKGFjdGl2ZVN5c3RlbS50YXJnZXRMYW5ndWFnZSwgdGhpcy50cmFuc2xhdGVkVGV4dCk7XHJcbiAgICB0aGlzLnRleHRUb1NwZWVjaFNvdXJjZVNldHRpbmdzID0gdGhpcy5maW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MoYWN0aXZlU3lzdGVtLnNvdXJjZUxhbmd1YWdlLCB0aGlzLnNvdXJjZVRleHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaW5kVGV4dFRvU3BlZWNoU2V0dGluZ3MobGFuZ3VhZ2VDb2RlOiBzdHJpbmcsIHRleHQ6IHN0cmluZyk6IFRleHRUb1NwZWVjaFNldHRpbmdzIHtcclxuICAgIGNvbnN0IHNldHRpbmdzID0gdGhpcy5jb25maWdTZXJ2aWNlLnRleHRUb1NwZWVjaENvbmZpZy5sYW5ndWFnZXNbbGFuZ3VhZ2VDb2RlXTtcclxuICAgIGlmIChzZXR0aW5ncykge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgIHRleHQsXHJcbiAgICAgICAgdXJsOiBzZXR0aW5ncy51cmwsXHJcbiAgICAgICAgdm9pY2U6IHNldHRpbmdzLnZvaWNlLFxyXG4gICAgICAgIGxhbmdCcGM0Nzogc2V0dGluZ3MubGFuZ0JwYzQ3LFxyXG4gICAgICAgIG1heENoYXJzSW5UZXh0OiB0aGlzLmNvbmZpZ1NlcnZpY2UudGV4dFRvU3BlZWNoQ29uZmlnLm1heENoYXJzSW5UZXh0XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxufVxyXG4iXX0=
@@ -142,17 +142,14 @@ export class TldTranslateComponent {
142
142
  this.alerts.getMessages().pipe(takeUntil(this.destroy$))
143
143
  .subscribe((message) => {
144
144
  message.localizationParams.queryString = this.wtwQueryService.defaultQueryString;
145
+ if (message?.delete) {
146
+ this.removeExistingMessage(message);
147
+ return;
148
+ }
145
149
  if (message.type === NotificationMessageType.ERROR) {
146
150
  this.onError.emit(message.error);
147
151
  }
148
- // pushing only "one of" message in array, so screen is not spammed with messages
149
- const existingMessage = this.messages.find(msg => msg.title === message.title
150
- && msg.type === message.type
151
- && message.body === msg.body
152
- && JSON.stringify(msg.localizationParams) === JSON.stringify(message.localizationParams));
153
- if (!existingMessage) {
154
- this.messages.push(message);
155
- }
152
+ this.addMessage(message);
156
153
  });
157
154
  if (this.configService.coreConfig.translateAppName) {
158
155
  this.translate.get("APP_NAME").pipe(takeUntil(this.destroy$))
@@ -200,6 +197,27 @@ export class TldTranslateComponent {
200
197
  this.destroy$.next(null);
201
198
  this.destroy$.complete();
202
199
  }
200
+ removeExistingMessage(message) {
201
+ delete message.delete;
202
+ const deleteMsgString = JSON.stringify(message);
203
+ const msg = this.messages.find((existingMsg) => JSON.stringify(existingMsg) === deleteMsgString);
204
+ const index = this.messages.indexOf(msg);
205
+ if (index < 0) {
206
+ return;
207
+ }
208
+ this.removeMessage(index);
209
+ }
210
+ addMessage(message) {
211
+ // pushing only "one of" message in array, so screen is not spammed with messages
212
+ const deleteMsgString = JSON.stringify(message.localizationParams);
213
+ const existingMessage = this.messages.find(msg => msg.title === message.title
214
+ && msg.type === message.type
215
+ && message.body === msg.body
216
+ && JSON.stringify(msg.localizationParams) === deleteMsgString);
217
+ if (!existingMessage) {
218
+ this.messages.push(message);
219
+ }
220
+ }
203
221
  }
204
222
  TldTranslateComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TldTranslateComponent, deps: [{ token: i1.TranslateService }, { token: i2.TldTranslateFileService }, { token: i3.TldTranslateTextService }, { token: i4.TldTranslateConfigService }, { token: i4.TldAlertService }, { token: i5.TldTranslateButtonService }, { token: i6.TldSystemService }, { token: i7.AudioRecordService }, { token: i7.TldVoiceInputService }, { token: i8.WtwLinkParamsService }, { token: i9.TranslationSystemPickerService }, { token: i4.IconService }], target: i0.ɵɵFactoryTarget.Component });
205
223
  TldTranslateComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TldTranslateComponent, selector: "tld-translate", outputs: { onError: "onError", onSystemChange: "onSystemChange" }, viewQueries: [{ propertyName: "tldTranslateBody", first: true, predicate: TldTranslateBodyComponent, descendants: true }], ngImport: i0, template: "<div fxLayout=\"column\" class=\"h-100 tld-translate\" *ngIf=\"!showNoSystemsError\"\r\n [ngClass.lt-md]=\"'tld-translate-tablet tld-default-border-bottom'\"\r\n [ngClass.lt-sm]=\"'tld-translate-mobile tld-default-border-bottom'\"\r\n [class.tld-translate-multiple-files-active]=\"isMultipleFilesActive\">\r\n <div class=\"tld-translate-wrapper tld-default-border\" fxLayout=\"column\" fxFlex>\r\n <div class=\"tld-translate-switcher-wrapper tld-default-border-bottom\">\r\n <tld-translate-switcher *ngIf=\"switcherOptions && languageMenuVersion === languageMenuV1\"\r\n [disabled]=\"actionButtonDisabled\" [isCollectionsActivated]=\"isCollectionsActivated\" [settings]=\"switcherOptions\"\r\n [maxDisplayedLanguages]=\"maxDisplayedLanguages\" [showDomainsWithLanguageName]=\"showDomainsWithLanguageName\"\r\n [buttonDisabled]=\"actionButtonDisabled\" [hideLangMenuLabels]=\"hideLangMenuLabels\"\r\n (onDomainChange)=\"systemChange($event)\" (onActionClick)=\"translateButtonClick()\"\r\n (onLanguageSwap)=\"swapLanguages()\" (onSourceLanguageChange)=\"sourceLanguageChange($event)\"\r\n (onTargetLanguageChange)=\"targetLanguageChange($event)\" [loader]=\"actionButtonLoader\" [showTranslateButton]=\"showTranslateButton\">\r\n </tld-translate-switcher>\r\n <tld-translation-system-picker *ngIf=\"languageMenuVersion===languageMenuV2\"\r\n [isCollectionsActivated]=\"isCollectionsActivated\"></tld-translation-system-picker>\r\n </div>\r\n <div *ngIf=\"messages.length\" class=\"message-wrapper\">\r\n <lib-tld-notification-message [inline]=\"true\" *ngFor=\"let message of messages; let ix = index\" [message]=\"message\"\r\n (closeClicked)=\"removeMessage(ix)\">\r\n </lib-tld-notification-message>\r\n </div>\r\n <div fxFlex style=\"position: relative;\">\r\n <tld-translate-body fxFlex fxLayoutAlign=\"column\" [attr.source-language]=\"sourceLanguage\"\r\n [attr.target-language]=\"targetLanguage\"></tld-translate-body>\r\n <tld-translation-system-picker-dropdown [ngClass.xs]=\"'mobile'\" *ngIf=\"systemPickerDropdownVisible\">\r\n </tld-translation-system-picker-dropdown>\r\n </div>\r\n </div>\r\n</div>\r\n\r\n<lib-tld-notification-message *ngIf=\"showNoSystemsError\" [message]=\"noSystemsError\">\r\n</lib-tld-notification-message>\r\n", styles: [".tld-translate-wrapper{overflow:hidden;background:#ffffff;box-shadow:0 3.2px 7.2px #00000021}.tld-translate-switcher-wrapper{padding:.5em 1em}.h-100{height:100%}tld-translation-system-picker-dropdown{z-index:2}tld-translation-system-picker-dropdown:not(.mobile){position:absolute;width:100%;height:100%}tld-translation-system-picker-dropdown.mobile{position:fixed;top:0;left:0;width:100vw;height:100vh}.tld-translate-tablet .message-wrapper,.tld-translate-mobile .message-wrapper{padding:0}.message-wrapper{padding:16px 32px 0}lib-tld-notification-message:not(:first-child){margin-top:4px}\n"], dependencies: [{ kind: "directive", type: i10.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i10.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i11.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { kind: "directive", type: i11.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { kind: "directive", type: i11.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { kind: "directive", type: i12.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { kind: "component", type: i13.TldTranslateSwitcherComponent, selector: "tld-translate-switcher", inputs: ["buttonDisabled", "showTranslateButton", "hideOnSmallScreens", "disabled", "hideLangMenuLabels", "maxDisplayedLanguages", "collections", "showDomainsWithLanguageName", "isCollectionsActivated", "useParentWidth", "loader", "settings"], outputs: ["onDomainChange", "onActionClick", "onSourceLanguageChange", "onTargetLanguageChange", "onLanguageSwap", "onVendorChange"] }, { kind: "component", type: i14.TranslationSystemPickerComponent, selector: "tld-translation-system-picker", inputs: ["isCollectionsActivated"] }, { kind: "component", type: i15.TranslationSystemPickerDropdownComponent, selector: "tld-translation-system-picker-dropdown" }, { kind: "component", type: i16.NotificationMessageComponent, selector: "lib-tld-notification-message", inputs: ["message", "inline"], outputs: ["buttonClicked", "closeClicked", "linkClicked"] }, { kind: "component", type: i17.TldTranslateBodyComponent, selector: "tld-translate-body" }], animations: [
@@ -230,4 +248,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
230
248
  type: ViewChild,
231
249
  args: [TldTranslateBodyComponent]
232
250
  }] } });
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvdGxkLXRyYW5zbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvdGxkLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUYsT0FBTyxFQUF1Qix1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR2hFLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVFoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFFaEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQjlGLE1BQU0sT0FBTyxxQkFBcUI7SUFzRWhDLFlBQTZCLFNBQTJCLEVBQ3JDLG9CQUE2QyxFQUM3QyxvQkFBNkMsRUFDN0MsYUFBd0MsRUFDeEMsTUFBdUIsRUFDdkIsc0JBQWlELEVBQ2pELFNBQTJCLEVBQzNCLFlBQWdDLEVBQ2hDLHNCQUE0QyxFQUM1QyxlQUFxQyxFQUNyQyxtQkFBbUQsRUFD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QUFDO0tBQ0g7MkZBRVUscUJBQXFCO2tCQWpCakMsU0FBUzsrQkFDRSxlQUFlLGNBR2I7d0JBQ1YsT0FBTyxDQUFDLG9CQUFvQixFQUFFOzRCQUU1QixVQUFVLENBQUMsUUFBUSxFQUFFO2dDQUNuQixLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUM7Z0NBQ3BCLE9BQU8sQ0FBQyxHQUFHLENBQUM7NkJBQ2IsQ0FBQzs0QkFFRixVQUFVLENBQUMsUUFBUSxFQUNqQixPQUFPLENBQUMsR0FBRyxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7eUJBQ3RDLENBQUM7cUJBQ0g7OGVBR1MsT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUUrQixnQkFBZ0I7c0JBQXJELFNBQVM7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBhdmFpbGFibGVMYW5ndWFnZXMgfSBmcm9tICcuL2kxOG4vYXZhaWxhYmxlLWxhbmd1YWdlcyc7XHJcbmltcG9ydCB7IEF1ZGlvUmVjb3JkU2VydmljZSwgVGxkVm9pY2VJbnB1dFNlcnZpY2UgfSBmcm9tICcuL21vZHVsZXMvdGxkLWF1ZGlvL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlQnV0dG9uU2VydmljZSB9IGZyb20gJy4vbW9kdWxlcy90bGQtY29tbW9uL2NvbXBvbmVudHMvdHJhbnNsYXRlLWJ1dHRvbi90bGQtdHJhbnNsYXRlLWJ1dHRvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUF1dGhPcHRpb25zLCBsYW5ndWFnZU1lbnVWZXJzaW9uIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC1jb21tb24vbW9kZWxzJztcclxuaW1wb3J0IHsgSWNvblNlcnZpY2UsIFRsZEFsZXJ0U2VydmljZSwgVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlcy90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgV3R3TGlua1BhcmFtc1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZXMvdGxkLWNvbW1vbi9zZXJ2aWNlcy93dHctbGluay1wYXJhbXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZUZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC1kb2N1bWVudC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLWZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC10ZXh0L3NlcnZpY2VzL3RsZC10cmFuc2xhdGUtdGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUFjdGl2ZURhdGEgfSBmcm9tICcuL21vZHVsZXMvdGxkLXRvb2x0aXAvbW9kZWxzL2FjdGl2ZS1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgSVN3aXRjaGVyVHJhbnNsYXRpb25PcHRpb25zIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC10b29sdGlwL21vZGVscy9zd2l0Y2hlci1vcHRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgVGxkU3lzdGVtU2VydmljZSB9IGZyb20gJy4vbW9kdWxlcy90bGQtdG9vbHRpcC9zZXJ2aWNlcy90bGQtc3lzdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPcGVuZWRNZW51IH0gZnJvbSAnLi9tb2R1bGVzL3RsZC10b29sdGlwL3RyYW5zbGF0aW9uLXN5c3RlbS1waWNrZXIvbW9kZWxzL29wZW5lZC1tZW51JztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TeXN0ZW1QaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC10b29sdGlwL3RyYW5zbGF0aW9uLXN5c3RlbS1waWNrZXIvc2VydmljZXMvdHJhbnNsYXRpb24tc3lzdGVtLXBpY2tlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlQm9keUNvbXBvbmVudCB9IGZyb20gJy4vdGxkLXRyYW5zbGF0ZS1ib2R5L3RsZC10cmFuc2xhdGUtYm9keS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bGQtdHJhbnNsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGxkLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGxkLXRyYW5zbGF0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ29wZW5DbG9zZUFuaW1hdGlvbicsIFtcclxuXHJcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICBzdHlsZSh7IGhlaWdodDogMCB9KSxcclxuICAgICAgICBhbmltYXRlKDUwMClcclxuICAgICAgXSksXHJcblxyXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLFxyXG4gICAgICAgIGFuaW1hdGUoNTAwLCBzdHlsZSh7IGhlaWdodDogMCB9KSkpXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCkgb25FcnJvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25TeXN0ZW1DaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQWN0aXZlRGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyPElBY3RpdmVEYXRhPigpO1xyXG5cclxuICBAVmlld0NoaWxkKFRsZFRyYW5zbGF0ZUJvZHlDb21wb25lbnQpIHRsZFRyYW5zbGF0ZUJvZHk6IFRsZFRyYW5zbGF0ZUJvZHlDb21wb25lbnQ7XHJcblxyXG4gIGFjdGl2ZVN5c3RlbU9iajogSUFjdGl2ZURhdGE7XHJcbiAgbWVzc2FnZXM6IE5vdGlmaWNhdGlvbk1lc3NhZ2VbXSA9IFtdO1xyXG5cclxuICBzd2l0Y2hlck9wdGlvbnM6IElTd2l0Y2hlclRyYW5zbGF0aW9uT3B0aW9ucztcclxuXHJcbiAgZ2V0IGFjdGlvbkJ1dHRvbkxvYWRlcigpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuaXNUcmFuc2xhdGluZzsgfVxyXG5cclxuICBnZXQgc2hvd0RvbWFpbnNXaXRoTGFuZ3VhZ2VOYW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS5jb3JlQ29uZmlnLnNob3dEb21haW5zV2l0aExhbmd1YWdlTmFtZTtcclxuICB9XHJcblxyXG4gIGdldCBtYXhEaXNwbGF5ZWRMYW5ndWFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5tYXhEaXNwbGF5ZWRMYW5ndWFnZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvd05vU3lzdGVtc0Vycm9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yO1xyXG4gIH1cclxuICByZWFkb25seSBub1N5c3RlbXNFcnJvcjogTm90aWZpY2F0aW9uTWVzc2FnZSA9IHsgYm9keTogXCJUTERfVFJBTlNMQVRFLkVSUk9SX05PX1NZU1RFTVNfTE9BREVEXCIsIHR5cGU6IE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLkVSUk9SLCBoaWRlQ2xvc2U6IHRydWUgfTtcclxuICBnZXQgYWN0aW9uQnV0dG9uRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVGaWxlU2VydmljZS5kaXNhYmxlVHJhbnNsYXRlQnV0dG9uXHJcbiAgICAgIHx8IHRoaXMuYXVkaW9TZXJ2aWNlLmlzUmVjb3JkaW5nXHJcbiAgICAgIHx8IHRoaXMudm9pY2VQcm9jZXNzaW5nU2VydmljZS5pc1Byb2Nlc3NpbmdcclxuICAgICAgfHwgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc0RpY3RhdGluZ1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dUcmFuc2xhdGVCdXR0b24oKSB7XHJcbiAgICByZXR1cm4gIXRoaXMudHJhbnNsYXRlRmlsZVNlcnZpY2UubXVsdGlwbGVGaWxlVXBsb2FkQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgLy8gdGhpcyBwYXJhbSBpcyBuZWNlc3NhcnkgdG8gcmVtb3ZlIG1heCBoZWlnaHQgaWYgbXVsdGlwbGUgZmlsZSBjb21wb25lbnQgaXMgYWN0aXZlLCBzaW5jZSB0aGVyZSBzaG91bGRuJ3QgYmUgbWF4IGhlaWdodCBpbiB0aGF0IGNhc2UuXHJcbiAgZ2V0IGlzTXVsdGlwbGVGaWxlc0FjdGl2ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRsZFRyYW5zbGF0ZUJvZHk/Lm11bHRpcGxlRmlsZXNVcGxvYWRlZDtcclxuICB9XHJcblxyXG4gIGdldCBoaWRlTGFuZ01lbnVMYWJlbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlPy5jb3JlQ29uZmlnLmhpZGVMYW5nTWVudUxhYmVscztcclxuICB9XHJcblxyXG4gIGdldCBpc0NvbGxlY3Rpb25zQWN0aXZhdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZT8udGVybUNvbmZpZz8uaXNDb2xsZWN0aW9uc0FjdGl2YXRlZDtcclxuICB9XHJcblxyXG4gIGdldCBzb3VyY2VMYW5ndWFnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZVN5c3RlbU9iaj8uc291cmNlTGFuZy5sYW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhcmdldExhbmd1YWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlU3lzdGVtT2JqPy50YXJnZXRMYW5nLmxhbmc7XHJcbiAgfVxyXG5cclxuICBnZXQgc3lzdGVtUGlja2VyRHJvcGRvd25WaXNpYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3lzdGVtUGlja2VyU2VydmljZS5vcGVuZWRNZW51ICE9PSBPcGVuZWRNZW51Lk5PTkU7XHJcbiAgfVxyXG5cclxuICBnZXQgbGFuZ3VhZ2VNZW51VmVyc2lvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZz8ubGFuZ3VhZ2VNZW51VmVyc2lvbjtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGxhbmd1YWdlTWVudVYxID0gbGFuZ3VhZ2VNZW51VmVyc2lvbi5WMTtcclxuICByZWFkb25seSBsYW5ndWFnZU1lbnVWMiA9IGxhbmd1YWdlTWVudVZlcnNpb24uVjI7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlRmlsZVNlcnZpY2U6IFRsZFRyYW5zbGF0ZUZpbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVUZXh0U2VydmljZTogVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0czogVGxkQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVCdXR0b25TZXJ2aWNlOiBUbGRUcmFuc2xhdGVCdXR0b25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0bGRTeXN0ZW06IFRsZFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1ZGlvU2VydmljZTogQXVkaW9SZWNvcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB2b2ljZVByb2Nlc3NpbmdTZXJ2aWNlOiBUbGRWb2ljZUlucHV0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgd3R3UXVlcnlTZXJ2aWNlOiBXdHdMaW5rUGFyYW1zU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtUGlja2VyU2VydmljZTogVHJhbnNsYXRpb25TeXN0ZW1QaWNrZXJTZXJ2aWNlLFxyXG4gICAgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBpY29uU2VydmljZS5yZWdpc3Rlckljb25zKCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VBdXRoKGF1dGhPcHRpb25zOiBJQXV0aE9wdGlvbnMpIHtcclxuICAgIHRoaXMuY29uZmlnU2VydmljZS5jb3JlQ29uZmlnLmlzQXV0aCA9IGF1dGhPcHRpb25zLmlzQXV0aDtcclxuICAgIHRoaXMuY29uZmlnU2VydmljZS50ZXJtQ29uZmlnLmNhbkNyZWF0ZUNvbGxlY3Rpb24gPSBhdXRoT3B0aW9ucy5jYW5DcmVhdGVUZXJtQ29sbGVjdGlvbjtcclxuICAgIHRoaXMudHJhbnNsYXRlRmlsZVNlcnZpY2UuY2xlYXIoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVdpZGdldCgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVdpZGdldCgpOiB2b2lkIHtcclxuICAgIHRoaXMudGxkU3lzdGVtLmluaXQodGhpcy50bGRTeXN0ZW0uZ2V0TGFzdFVzZWRTeXN0ZW0oKSA/PyB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5kZWZhdWx0U3lzdGVtSWQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnJlbW92ZU1lc3NhZ2VzT25DbGVhcigpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5kZWJ1Zykge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBhdmFpbGFibGVMYW5ndWFnZXMpIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5zZXRUcmFuc2xhdGlvbihrZXksIGF2YWlsYWJsZUxhbmd1YWdlc1trZXldLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZVdpZGdldCgpO1xyXG5cclxuICAgIHRoaXMudGxkU3lzdGVtLmdldEFjdGl2ZURhdGEoKS5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbDogSUFjdGl2ZURhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVN5c3RlbU9iaiA9IHZhbDtcclxuICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vblN5c3RlbUNoYW5nZS5lbWl0KHZhbCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3dpdGNoZXJPcHRpb25zID0ge1xyXG4gICAgICAgICAgZG9tYWluczogdmFsLmRvbWFpbnMsXHJcbiAgICAgICAgICBzb3VyY2U6IHsgY29kZTogdmFsLnNvdXJjZUxhbmcubGFuZywgc3lzdGVtSWQ6IHZhbC5zeXN0ZW1JZCB9LFxyXG4gICAgICAgICAgc291cmNlTGFuZ3VhZ2VMaXN0OiB2YWwuc291cmNlTGFuZ0xpc3QsXHJcbiAgICAgICAgICBzeXN0ZW1JZDogdmFsLnN5c3RlbUlkLFxyXG4gICAgICAgICAgc3dhcEFjdGl2ZTogdmFsLnN3YXBMYW5nQWN0aXZlLFxyXG4gICAgICAgICAgdGFyZ2V0OiB7IGNvZGU6IHZhbC50YXJnZXRMYW5nLmxhbmcsIHN5c3RlbUlkOiB2YWwuc3lzdGVtSWQgfSxcclxuICAgICAgICAgIHRhcmdldExhbmd1YWdlTGlzdDogdmFsLnRhcmdldExhbmdMaXN0LFxyXG4gICAgICAgICAgdmVuZG9yczogdmFsLnZlbmRvcnNcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZUNoYW5nZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnN3YXBTeXN0ZW1zKSB7XHJcbiAgICAgICAgICB0aGlzLnN3YXBMYW5ndWFnZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMudHJhbnNsYXRlQnV0dG9uU2VydmljZS5nZXRBY3Rpb25DbGljaygpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVCdXR0b25DbGljaygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnd0d1F1ZXJ5U2VydmljZS5xdWVyeSgpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocXVlcnk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMuZm9yRWFjaChtc2cgPT4ge1xyXG4gICAgICAgICAgbXNnLmxvY2FsaXphdGlvblBhcmFtcy5xdWVyeVN0cmluZyA9IHF1ZXJ5XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWxlcnRzLmdldE1lc3NhZ2VzKCkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChtZXNzYWdlOiBOb3RpZmljYXRpb25NZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgbWVzc2FnZS5sb2NhbGl6YXRpb25QYXJhbXMucXVlcnlTdHJpbmcgPSB0aGlzLnd0d1F1ZXJ5U2VydmljZS5kZWZhdWx0UXVlcnlTdHJpbmc7XHJcbiAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gTm90aWZpY2F0aW9uTWVzc2FnZVR5cGUuRVJST1IpIHtcclxuICAgICAgICAgIHRoaXMub25FcnJvci5lbWl0KG1lc3NhZ2UuZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBwdXNoaW5nIG9ubHkgXCJvbmUgb2ZcIiBtZXNzYWdlIGluIGFycmF5LCBzbyBzY3JlZW4gaXMgbm90IHNwYW1tZWQgd2l0aCBtZXNzYWdlc1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nTWVzc2FnZSA9IHRoaXMubWVzc2FnZXMuZmluZChtc2cgPT4gbXNnLnRpdGxlID09PSBtZXNzYWdlLnRpdGxlXHJcbiAgICAgICAgICAmJiBtc2cudHlwZSA9PT0gbWVzc2FnZS50eXBlXHJcbiAgICAgICAgICAmJiBtZXNzYWdlLmJvZHkgPT09IG1zZy5ib2R5XHJcbiAgICAgICAgICAmJiBKU09OLnN0cmluZ2lmeShtc2cubG9jYWxpemF0aW9uUGFyYW1zKSA9PT0gSlNPTi5zdHJpbmdpZnkobWVzc2FnZS5sb2NhbGl6YXRpb25QYXJhbXMpKTtcclxuICAgICAgICBpZiAoIWV4aXN0aW5nTWVzc2FnZSkge1xyXG4gICAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5jb3JlQ29uZmlnLnRyYW5zbGF0ZUFwcE5hbWUpIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KFwiQVBQX05BTUVcIikucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgodGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5hcHBOYW1lID0gdGV4dDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZU1lc3NhZ2UoaXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5tZXNzYWdlcy5zcGxpY2UoaXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgc3dhcExhbmd1YWdlcygpIHtcclxuICAgIHRoaXMudGxkU3lzdGVtLnN3YXBTeXN0ZW1MYW5ndWFnZXMoKTtcclxuICB9XHJcblxyXG4gIHNvdXJjZUxhbmd1YWdlQ2hhbmdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGxkU3lzdGVtLmNoYW5nZUxhbmd1YWdlKGxhbmd1YWdlLCB0aGlzLnN3aXRjaGVyT3B0aW9ucy50YXJnZXQuY29kZSk7XHJcbiAgfVxyXG5cclxuICBzeXN0ZW1DaGFuZ2Uoc3lzdGVtSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50bGRTeXN0ZW0uY2hhbmdlU3lzdGVtKHN5c3RlbUlkKTtcclxuICB9XHJcblxyXG4gIHRhcmdldExhbmd1YWdlQ2hhbmdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGxkU3lzdGVtLmNoYW5nZUxhbmd1YWdlKHRoaXMuc3dpdGNoZXJPcHRpb25zLnNvdXJjZS5jb2RlLCBsYW5ndWFnZSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGVCdXR0b25DbGljaygpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZUZpbGVTZXJ2aWNlLnRyYW5zbGF0aW9uRmlsZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVGaWxlU2VydmljZS50cmFuc2xhdGVCdXR0b25DbGljayh0aGlzLmFjdGl2ZVN5c3RlbU9iaik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5vblRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVNZXNzYWdlc09uQ2xlYXIoKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZUZpbGVTZXJ2aWNlLm9uQ2xlYXIoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcclxuICAgICAgfSlcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLm9uQ2xlYXIoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KG51bGwpXHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxufVxyXG4iLCI8ZGl2IGZ4TGF5b3V0PVwiY29sdW1uXCIgY2xhc3M9XCJoLTEwMCB0bGQtdHJhbnNsYXRlXCIgKm5nSWY9XCIhc2hvd05vU3lzdGVtc0Vycm9yXCJcclxuICBbbmdDbGFzcy5sdC1tZF09XCIndGxkLXRyYW5zbGF0ZS10YWJsZXQgdGxkLWRlZmF1bHQtYm9yZGVyLWJvdHRvbSdcIlxyXG4gIFtuZ0NsYXNzLmx0LXNtXT1cIid0bGQtdHJhbnNsYXRlLW1vYmlsZSB0bGQtZGVmYXVsdC1ib3JkZXItYm90dG9tJ1wiXHJcbiAgW2NsYXNzLnRsZC10cmFuc2xhdGUtbXVsdGlwbGUtZmlsZXMtYWN0aXZlXT1cImlzTXVsdGlwbGVGaWxlc0FjdGl2ZVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJ0bGQtdHJhbnNsYXRlLXdyYXBwZXIgdGxkLWRlZmF1bHQtYm9yZGVyXCIgZnhMYXlvdXQ9XCJjb2x1bW5cIiBmeEZsZXg+XHJcbiAgICA8ZGl2IGNsYXNzPVwidGxkLXRyYW5zbGF0ZS1zd2l0Y2hlci13cmFwcGVyIHRsZC1kZWZhdWx0LWJvcmRlci1ib3R0b21cIj5cclxuICAgICAgPHRsZC10cmFuc2xhdGUtc3dpdGNoZXIgKm5nSWY9XCJzd2l0Y2hlck9wdGlvbnMgJiYgbGFuZ3VhZ2VNZW51VmVyc2lvbiA9PT0gbGFuZ3VhZ2VNZW51VjFcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJhY3Rpb25CdXR0b25EaXNhYmxlZFwiIFtpc0NvbGxlY3Rpb25zQWN0aXZhdGVkXT1cImlzQ29sbGVjdGlvbnNBY3RpdmF0ZWRcIiBbc2V0dGluZ3NdPVwic3dpdGNoZXJPcHRpb25zXCJcclxuICAgICAgICBbbWF4RGlzcGxheWVkTGFuZ3VhZ2VzXT1cIm1heERpc3BsYXllZExhbmd1YWdlc1wiIFtzaG93RG9tYWluc1dpdGhMYW5ndWFnZU5hbWVdPVwic2hvd0RvbWFpbnNXaXRoTGFuZ3VhZ2VOYW1lXCJcclxuICAgICAgICBbYnV0dG9uRGlzYWJsZWRdPVwiYWN0aW9uQnV0dG9uRGlzYWJsZWRcIiBbaGlkZUxhbmdNZW51TGFiZWxzXT1cImhpZGVMYW5nTWVudUxhYmVsc1wiXHJcbiAgICAgICAgKG9uRG9tYWluQ2hhbmdlKT1cInN5c3RlbUNoYW5nZSgkZXZlbnQpXCIgKG9uQWN0aW9uQ2xpY2spPVwidHJhbnNsYXRlQnV0dG9uQ2xpY2soKVwiXHJcbiAgICAgICAgKG9uTGFuZ3VhZ2VTd2FwKT1cInN3YXBMYW5ndWFnZXMoKVwiIChvblNvdXJjZUxhbmd1YWdlQ2hhbmdlKT1cInNvdXJjZUxhbmd1YWdlQ2hhbmdlKCRldmVudClcIlxyXG4gICAgICAgIChvblRhcmdldExhbmd1YWdlQ2hhbmdlKT1cInRhcmdldExhbmd1YWdlQ2hhbmdlKCRldmVudClcIiBbbG9hZGVyXT1cImFjdGlvbkJ1dHRvbkxvYWRlclwiIFtzaG93VHJhbnNsYXRlQnV0dG9uXT1cInNob3dUcmFuc2xhdGVCdXR0b25cIj5cclxuICAgICAgPC90bGQtdHJhbnNsYXRlLXN3aXRjaGVyPlxyXG4gICAgICA8dGxkLXRyYW5zbGF0aW9uLXN5c3RlbS1waWNrZXIgKm5nSWY9XCJsYW5ndWFnZU1lbnVWZXJzaW9uPT09bGFuZ3VhZ2VNZW51VjJcIlxyXG4gICAgICAgIFtpc0NvbGxlY3Rpb25zQWN0aXZhdGVkXT1cImlzQ29sbGVjdGlvbnNBY3RpdmF0ZWRcIj48L3RsZC10cmFuc2xhdGlvbi1zeXN0ZW0tcGlja2VyPlxyXG4gICAgPC9kaXY+XHJcbiAgICA8ZGl2ICpuZ0lmPVwibWVzc2FnZXMubGVuZ3RoXCIgY2xhc3M9XCJtZXNzYWdlLXdyYXBwZXJcIj5cclxuICAgICAgPGxpYi10bGQtbm90aWZpY2F0aW9uLW1lc3NhZ2UgW2lubGluZV09XCJ0cnVlXCIgKm5nRm9yPVwibGV0IG1lc3NhZ2Ugb2YgbWVzc2FnZXM7IGxldCBpeCA9IGluZGV4XCIgW21lc3NhZ2VdPVwibWVzc2FnZVwiXHJcbiAgICAgICAgKGNsb3NlQ2xpY2tlZCk9XCJyZW1vdmVNZXNzYWdlKGl4KVwiPlxyXG4gICAgICA8L2xpYi10bGQtbm90aWZpY2F0aW9uLW1lc3NhZ2U+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgZnhGbGV4IHN0eWxlPVwicG9zaXRpb246IHJlbGF0aXZlO1wiPlxyXG4gICAgICA8dGxkLXRyYW5zbGF0ZS1ib2R5IGZ4RmxleCBmeExheW91dEFsaWduPVwiY29sdW1uXCIgW2F0dHIuc291cmNlLWxhbmd1YWdlXT1cInNvdXJjZUxhbmd1YWdlXCJcclxuICAgICAgICBbYXR0ci50YXJnZXQtbGFuZ3VhZ2VdPVwidGFyZ2V0TGFuZ3VhZ2VcIj48L3RsZC10cmFuc2xhdGUtYm9keT5cclxuICAgICAgPHRsZC10cmFuc2xhdGlvbi1zeXN0ZW0tcGlja2VyLWRyb3Bkb3duIFtuZ0NsYXNzLnhzXT1cIidtb2JpbGUnXCIgKm5nSWY9XCJzeXN0ZW1QaWNrZXJEcm9wZG93blZpc2libGVcIj5cclxuICAgICAgPC90bGQtdHJhbnNsYXRpb24tc3lzdGVtLXBpY2tlci1kcm9wZG93bj5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2Rpdj5cclxuXHJcbjxsaWItdGxkLW5vdGlmaWNhdGlvbi1tZXNzYWdlICpuZ0lmPVwic2hvd05vU3lzdGVtc0Vycm9yXCIgW21lc3NhZ2VdPVwibm9TeXN0ZW1zRXJyb3JcIj5cclxuPC9saWItdGxkLW5vdGlmaWNhdGlvbi1tZXNzYWdlPlxyXG4iXX0=
251
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGxkLXRyYW5zbGF0ZS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvdGxkLXRyYW5zbGF0ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bGQtdHJhbnNsYXRlL3NyYy9saWIvdGxkLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDMUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQXFCLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFOUYsT0FBTyxFQUF1Qix1QkFBdUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLG9CQUFvQixFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBR2hFLE9BQU8sRUFBZ0IsbUJBQW1CLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQVFoRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0VBQW9FLENBQUM7QUFFaEcsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sbURBQW1ELENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFtQjlGLE1BQU0sT0FBTyxxQkFBcUI7SUFzRWhDLFlBQTZCLFNBQTJCLEVBQ3JDLG9CQUE2QyxFQUM3QyxvQkFBNkMsRUFDN0MsYUFBd0MsRUFDeEMsTUFBdUIsRUFDdkIsc0JBQWlELEVBQ2pELFNBQTJCLEVBQzNCLFlBQWdDLEVBQ2hDLHNCQUE0QyxFQUM1QyxlQUFxQyxFQUNyQyxtQkFBbUQsRUFD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R1MsT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxjQUFjO3NCQUF2QixNQUFNO2dCQUUrQixnQkFBZ0I7c0JBQXJELFNBQVM7dUJBQUMseUJBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYW5pbWF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcclxuaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIE9uRGVzdHJveSwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IE5vdGlmaWNhdGlvbk1lc3NhZ2UsIE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlIH0gZnJvbSAnQHRpbGRlLW5scC9uZ3gtY29tbW9uJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5pbXBvcnQgeyBhdmFpbGFibGVMYW5ndWFnZXMgfSBmcm9tICcuL2kxOG4vYXZhaWxhYmxlLWxhbmd1YWdlcyc7XHJcbmltcG9ydCB7IEF1ZGlvUmVjb3JkU2VydmljZSwgVGxkVm9pY2VJbnB1dFNlcnZpY2UgfSBmcm9tICcuL21vZHVsZXMvdGxkLWF1ZGlvL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlQnV0dG9uU2VydmljZSB9IGZyb20gJy4vbW9kdWxlcy90bGQtY29tbW9uL2NvbXBvbmVudHMvdHJhbnNsYXRlLWJ1dHRvbi90bGQtdHJhbnNsYXRlLWJ1dHRvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUF1dGhPcHRpb25zLCBsYW5ndWFnZU1lbnVWZXJzaW9uIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC1jb21tb24vbW9kZWxzJztcclxuaW1wb3J0IHsgSWNvblNlcnZpY2UsIFRsZEFsZXJ0U2VydmljZSwgVGxkVHJhbnNsYXRlQ29uZmlnU2VydmljZSB9IGZyb20gJy4vbW9kdWxlcy90bGQtY29tbW9uL3NlcnZpY2VzJztcclxuaW1wb3J0IHsgV3R3TGlua1BhcmFtc1NlcnZpY2UgfSBmcm9tICcuL21vZHVsZXMvdGxkLWNvbW1vbi9zZXJ2aWNlcy93dHctbGluay1wYXJhbXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZUZpbGVTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC1kb2N1bWVudC9zZXJ2aWNlcy90bGQtdHJhbnNsYXRlLWZpbGUuc2VydmljZSc7XHJcbmltcG9ydCB7IFRsZFRyYW5zbGF0ZVRleHRTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC10ZXh0L3NlcnZpY2VzL3RsZC10cmFuc2xhdGUtdGV4dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSUFjdGl2ZURhdGEgfSBmcm9tICcuL21vZHVsZXMvdGxkLXRvb2x0aXAvbW9kZWxzL2FjdGl2ZS1kYXRhLm1vZGVsJztcclxuaW1wb3J0IHsgSVN3aXRjaGVyVHJhbnNsYXRpb25PcHRpb25zIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC10b29sdGlwL21vZGVscy9zd2l0Y2hlci1vcHRpb25zLm1vZGVsJztcclxuaW1wb3J0IHsgVGxkU3lzdGVtU2VydmljZSB9IGZyb20gJy4vbW9kdWxlcy90bGQtdG9vbHRpcC9zZXJ2aWNlcy90bGQtc3lzdGVtLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBPcGVuZWRNZW51IH0gZnJvbSAnLi9tb2R1bGVzL3RsZC10b29sdGlwL3RyYW5zbGF0aW9uLXN5c3RlbS1waWNrZXIvbW9kZWxzL29wZW5lZC1tZW51JztcclxuaW1wb3J0IHsgVHJhbnNsYXRpb25TeXN0ZW1QaWNrZXJTZXJ2aWNlIH0gZnJvbSAnLi9tb2R1bGVzL3RsZC10b29sdGlwL3RyYW5zbGF0aW9uLXN5c3RlbS1waWNrZXIvc2VydmljZXMvdHJhbnNsYXRpb24tc3lzdGVtLXBpY2tlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVGxkVHJhbnNsYXRlQm9keUNvbXBvbmVudCB9IGZyb20gJy4vdGxkLXRyYW5zbGF0ZS1ib2R5L3RsZC10cmFuc2xhdGUtYm9keS5jb21wb25lbnQnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICd0bGQtdHJhbnNsYXRlJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vdGxkLXRyYW5zbGF0ZS5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vdGxkLXRyYW5zbGF0ZS5jb21wb25lbnQuc2NzcyddLFxyXG4gIGFuaW1hdGlvbnM6IFtcclxuICAgIHRyaWdnZXIoJ29wZW5DbG9zZUFuaW1hdGlvbicsIFtcclxuXHJcbiAgICAgIHRyYW5zaXRpb24oJzplbnRlcicsIFtcclxuICAgICAgICBzdHlsZSh7IGhlaWdodDogMCB9KSxcclxuICAgICAgICBhbmltYXRlKDUwMClcclxuICAgICAgXSksXHJcblxyXG4gICAgICB0cmFuc2l0aW9uKCc6bGVhdmUnLFxyXG4gICAgICAgIGFuaW1hdGUoNTAwLCBzdHlsZSh7IGhlaWdodDogMCB9KSkpXHJcbiAgICBdKVxyXG4gIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIFRsZFRyYW5zbGF0ZUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBAT3V0cHV0KCkgb25FcnJvcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICBAT3V0cHV0KCkgb25TeXN0ZW1DaGFuZ2U6IEV2ZW50RW1pdHRlcjxJQWN0aXZlRGF0YT4gPSBuZXcgRXZlbnRFbWl0dGVyPElBY3RpdmVEYXRhPigpO1xyXG5cclxuICBAVmlld0NoaWxkKFRsZFRyYW5zbGF0ZUJvZHlDb21wb25lbnQpIHRsZFRyYW5zbGF0ZUJvZHk6IFRsZFRyYW5zbGF0ZUJvZHlDb21wb25lbnQ7XHJcblxyXG4gIGFjdGl2ZVN5c3RlbU9iajogSUFjdGl2ZURhdGE7XHJcbiAgbWVzc2FnZXM6IE5vdGlmaWNhdGlvbk1lc3NhZ2VbXSA9IFtdO1xyXG5cclxuICBzd2l0Y2hlck9wdGlvbnM6IElTd2l0Y2hlclRyYW5zbGF0aW9uT3B0aW9ucztcclxuXHJcbiAgZ2V0IGFjdGlvbkJ1dHRvbkxvYWRlcigpIHsgcmV0dXJuIHRoaXMudHJhbnNsYXRlVGV4dFNlcnZpY2UuaXNUcmFuc2xhdGluZzsgfVxyXG5cclxuICBnZXQgc2hvd0RvbWFpbnNXaXRoTGFuZ3VhZ2VOYW1lKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZS5jb3JlQ29uZmlnLnNob3dEb21haW5zV2l0aExhbmd1YWdlTmFtZTtcclxuICB9XHJcblxyXG4gIGdldCBtYXhEaXNwbGF5ZWRMYW5ndWFnZXMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5tYXhEaXNwbGF5ZWRMYW5ndWFnZXM7XHJcbiAgfVxyXG5cclxuICBnZXQgc2hvd05vU3lzdGVtc0Vycm9yKCkge1xyXG4gICAgcmV0dXJuIHRoaXMudGxkU3lzdGVtLm5vU3lzdGVtc0Vycm9yO1xyXG4gIH1cclxuICByZWFkb25seSBub1N5c3RlbXNFcnJvcjogTm90aWZpY2F0aW9uTWVzc2FnZSA9IHsgYm9keTogXCJUTERfVFJBTlNMQVRFLkVSUk9SX05PX1NZU1RFTVNfTE9BREVEXCIsIHR5cGU6IE5vdGlmaWNhdGlvbk1lc3NhZ2VUeXBlLkVSUk9SLCBoaWRlQ2xvc2U6IHRydWUgfTtcclxuICBnZXQgYWN0aW9uQnV0dG9uRGlzYWJsZWQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy50cmFuc2xhdGVGaWxlU2VydmljZS5kaXNhYmxlVHJhbnNsYXRlQnV0dG9uXHJcbiAgICAgIHx8IHRoaXMuYXVkaW9TZXJ2aWNlLmlzUmVjb3JkaW5nXHJcbiAgICAgIHx8IHRoaXMudm9pY2VQcm9jZXNzaW5nU2VydmljZS5pc1Byb2Nlc3NpbmdcclxuICAgICAgfHwgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5pc0RpY3RhdGluZ1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNob3dUcmFuc2xhdGVCdXR0b24oKSB7XHJcbiAgICByZXR1cm4gIXRoaXMudHJhbnNsYXRlRmlsZVNlcnZpY2UubXVsdGlwbGVGaWxlVXBsb2FkQWN0aXZlO1xyXG4gIH1cclxuXHJcbiAgLy8gdGhpcyBwYXJhbSBpcyBuZWNlc3NhcnkgdG8gcmVtb3ZlIG1heCBoZWlnaHQgaWYgbXVsdGlwbGUgZmlsZSBjb21wb25lbnQgaXMgYWN0aXZlLCBzaW5jZSB0aGVyZSBzaG91bGRuJ3QgYmUgbWF4IGhlaWdodCBpbiB0aGF0IGNhc2UuXHJcbiAgZ2V0IGlzTXVsdGlwbGVGaWxlc0FjdGl2ZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnRsZFRyYW5zbGF0ZUJvZHk/Lm11bHRpcGxlRmlsZXNVcGxvYWRlZDtcclxuICB9XHJcblxyXG4gIGdldCBoaWRlTGFuZ01lbnVMYWJlbHMoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5jb25maWdTZXJ2aWNlPy5jb3JlQ29uZmlnLmhpZGVMYW5nTWVudUxhYmVscztcclxuICB9XHJcblxyXG4gIGdldCBpc0NvbGxlY3Rpb25zQWN0aXZhdGVkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuY29uZmlnU2VydmljZT8udGVybUNvbmZpZz8uaXNDb2xsZWN0aW9uc0FjdGl2YXRlZDtcclxuICB9XHJcblxyXG4gIGdldCBzb3VyY2VMYW5ndWFnZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmFjdGl2ZVN5c3RlbU9iaj8uc291cmNlTGFuZy5sYW5nO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHRhcmdldExhbmd1YWdlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuYWN0aXZlU3lzdGVtT2JqPy50YXJnZXRMYW5nLmxhbmc7XHJcbiAgfVxyXG5cclxuICBnZXQgc3lzdGVtUGlja2VyRHJvcGRvd25WaXNpYmxlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3lzdGVtUGlja2VyU2VydmljZS5vcGVuZWRNZW51ICE9PSBPcGVuZWRNZW51Lk5PTkU7XHJcbiAgfVxyXG5cclxuICBnZXQgbGFuZ3VhZ2VNZW51VmVyc2lvbigpIHtcclxuICAgIHJldHVybiB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZz8ubGFuZ3VhZ2VNZW51VmVyc2lvbjtcclxuICB9XHJcblxyXG4gIHJlYWRvbmx5IGxhbmd1YWdlTWVudVYxID0gbGFuZ3VhZ2VNZW51VmVyc2lvbi5WMTtcclxuICByZWFkb25seSBsYW5ndWFnZU1lbnVWMiA9IGxhbmd1YWdlTWVudVZlcnNpb24uVjI7XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlRmlsZVNlcnZpY2U6IFRsZFRyYW5zbGF0ZUZpbGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVUZXh0U2VydmljZTogVGxkVHJhbnNsYXRlVGV4dFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbmZpZ1NlcnZpY2U6IFRsZFRyYW5zbGF0ZUNvbmZpZ1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0czogVGxkQWxlcnRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGVCdXR0b25TZXJ2aWNlOiBUbGRUcmFuc2xhdGVCdXR0b25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB0bGRTeXN0ZW06IFRsZFN5c3RlbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlYWRvbmx5IGF1ZGlvU2VydmljZTogQXVkaW9SZWNvcmRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZWFkb25seSB2b2ljZVByb2Nlc3NpbmdTZXJ2aWNlOiBUbGRWb2ljZUlucHV0U2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgd3R3UXVlcnlTZXJ2aWNlOiBXdHdMaW5rUGFyYW1zU2VydmljZSxcclxuICAgIHByaXZhdGUgcmVhZG9ubHkgc3lzdGVtUGlja2VyU2VydmljZTogVHJhbnNsYXRpb25TeXN0ZW1QaWNrZXJTZXJ2aWNlLFxyXG4gICAgaWNvblNlcnZpY2U6IEljb25TZXJ2aWNlXHJcbiAgKSB7XHJcbiAgICBpY29uU2VydmljZS5yZWdpc3Rlckljb25zKCk7XHJcbiAgfVxyXG5cclxuICBjaGFuZ2VBdXRoKGF1dGhPcHRpb25zOiBJQXV0aE9wdGlvbnMpIHtcclxuICAgIHRoaXMuY29uZmlnU2VydmljZS5jb3JlQ29uZmlnLmlzQXV0aCA9IGF1dGhPcHRpb25zLmlzQXV0aDtcclxuICAgIHRoaXMuY29uZmlnU2VydmljZS50ZXJtQ29uZmlnLmNhbkNyZWF0ZUNvbGxlY3Rpb24gPSBhdXRoT3B0aW9ucy5jYW5DcmVhdGVUZXJtQ29sbGVjdGlvbjtcclxuICAgIHRoaXMudHJhbnNsYXRlRmlsZVNlcnZpY2UuY2xlYXIoKTtcclxuICAgIHRoaXMuaW5pdGlhbGl6ZVdpZGdldCgpO1xyXG4gIH1cclxuXHJcbiAgaW5pdGlhbGl6ZVdpZGdldCgpOiB2b2lkIHtcclxuICAgIHRoaXMudGxkU3lzdGVtLmluaXQodGhpcy50bGRTeXN0ZW0uZ2V0TGFzdFVzZWRTeXN0ZW0oKSA/PyB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5kZWZhdWx0U3lzdGVtSWQpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLnJlbW92ZU1lc3NhZ2VzT25DbGVhcigpO1xyXG5cclxuICAgIGlmICh0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5kZWJ1Zykge1xyXG4gICAgICBmb3IgKGNvbnN0IGtleSBpbiBhdmFpbGFibGVMYW5ndWFnZXMpIHtcclxuICAgICAgICB0aGlzLnRyYW5zbGF0ZS5zZXRUcmFuc2xhdGlvbihrZXksIGF2YWlsYWJsZUxhbmd1YWdlc1trZXldLCB0cnVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuaW5pdGlhbGl6ZVdpZGdldCgpO1xyXG5cclxuICAgIHRoaXMudGxkU3lzdGVtLmdldEFjdGl2ZURhdGEoKS5waXBlKFxyXG4gICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKHZhbDogSUFjdGl2ZURhdGEpID0+IHtcclxuICAgICAgICB0aGlzLmFjdGl2ZVN5c3RlbU9iaiA9IHZhbDtcclxuICAgICAgICBpZiAoIXZhbCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5vblN5c3RlbUNoYW5nZS5lbWl0KHZhbCk7XHJcblxyXG4gICAgICAgIHRoaXMuc3dpdGNoZXJPcHRpb25zID0ge1xyXG4gICAgICAgICAgZG9tYWluczogdmFsLmRvbWFpbnMsXHJcbiAgICAgICAgICBzb3VyY2U6IHsgY29kZTogdmFsLnNvdXJjZUxhbmcubGFuZywgc3lzdGVtSWQ6IHZhbC5zeXN0ZW1JZCB9LFxyXG4gICAgICAgICAgc291cmNlTGFuZ3VhZ2VMaXN0OiB2YWwuc291cmNlTGFuZ0xpc3QsXHJcbiAgICAgICAgICBzeXN0ZW1JZDogdmFsLnN5c3RlbUlkLFxyXG4gICAgICAgICAgc3dhcEFjdGl2ZTogdmFsLnN3YXBMYW5nQWN0aXZlLFxyXG4gICAgICAgICAgdGFyZ2V0OiB7IGNvZGU6IHZhbC50YXJnZXRMYW5nLmxhbmcsIHN5c3RlbUlkOiB2YWwuc3lzdGVtSWQgfSxcclxuICAgICAgICAgIHRhcmdldExhbmd1YWdlTGlzdDogdmFsLnRhcmdldExhbmdMaXN0LFxyXG4gICAgICAgICAgdmVuZG9yczogdmFsLnZlbmRvcnNcclxuICAgICAgICB9O1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLnNvdXJjZUNoYW5nZS5waXBlKFxyXG4gICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKGV2ZW50KSA9PiB7XHJcbiAgICAgICAgaWYgKGV2ZW50LnN3YXBTeXN0ZW1zKSB7XHJcbiAgICAgICAgICB0aGlzLnN3YXBMYW5ndWFnZXMoKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMudHJhbnNsYXRlQnV0dG9uU2VydmljZS5nZXRBY3Rpb25DbGljaygpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGVCdXR0b25DbGljaygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLnd0d1F1ZXJ5U2VydmljZS5xdWVyeSgpLnBpcGUoXHJcbiAgICAgIHRha2VVbnRpbCh0aGlzLmRlc3Ryb3kkKSlcclxuICAgICAgLnN1YnNjcmliZSgocXVlcnk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMuZm9yRWFjaChtc2cgPT4ge1xyXG4gICAgICAgICAgbXNnLmxvY2FsaXphdGlvblBhcmFtcy5xdWVyeVN0cmluZyA9IHF1ZXJ5XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pO1xyXG5cclxuICAgIHRoaXMuYWxlcnRzLmdldE1lc3NhZ2VzKCkucGlwZShcclxuICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKChtZXNzYWdlOiBOb3RpZmljYXRpb25NZXNzYWdlKSA9PiB7XHJcbiAgICAgICAgbWVzc2FnZS5sb2NhbGl6YXRpb25QYXJhbXMucXVlcnlTdHJpbmcgPSB0aGlzLnd0d1F1ZXJ5U2VydmljZS5kZWZhdWx0UXVlcnlTdHJpbmc7XHJcblxyXG4gICAgICAgIGlmIChtZXNzYWdlPy5kZWxldGUpIHtcclxuICAgICAgICAgICAgdGhpcy5yZW1vdmVFeGlzdGluZ01lc3NhZ2UobWVzc2FnZSk7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAobWVzc2FnZS50eXBlID09PSBOb3RpZmljYXRpb25NZXNzYWdlVHlwZS5FUlJPUikge1xyXG4gICAgICAgICAgdGhpcy5vbkVycm9yLmVtaXQobWVzc2FnZS5lcnJvcik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgIHRoaXMuYWRkTWVzc2FnZShtZXNzYWdlKTtcclxuICAgICAgfSk7XHJcblxyXG4gICAgaWYgKHRoaXMuY29uZmlnU2VydmljZS5jb3JlQ29uZmlnLnRyYW5zbGF0ZUFwcE5hbWUpIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGUuZ2V0KFwiQVBQX05BTUVcIikucGlwZShcclxuICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSgodGV4dDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbmZpZ1NlcnZpY2UuY29yZUNvbmZpZy5hcHBOYW1lID0gdGV4dDtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZU1lc3NhZ2UoaXg6IG51bWJlcikge1xyXG4gICAgdGhpcy5tZXNzYWdlcy5zcGxpY2UoaXgsIDEpO1xyXG4gIH1cclxuXHJcbiAgc3dhcExhbmd1YWdlcygpIHtcclxuICAgIHRoaXMudGxkU3lzdGVtLnN3YXBTeXN0ZW1MYW5ndWFnZXMoKTtcclxuICB9XHJcblxyXG4gIHNvdXJjZUxhbmd1YWdlQ2hhbmdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGxkU3lzdGVtLmNoYW5nZUxhbmd1YWdlKGxhbmd1YWdlLCB0aGlzLnN3aXRjaGVyT3B0aW9ucy50YXJnZXQuY29kZSk7XHJcbiAgfVxyXG5cclxuICBzeXN0ZW1DaGFuZ2Uoc3lzdGVtSWQ6IHN0cmluZykge1xyXG4gICAgdGhpcy50bGRTeXN0ZW0uY2hhbmdlU3lzdGVtKHN5c3RlbUlkKTtcclxuICB9XHJcblxyXG4gIHRhcmdldExhbmd1YWdlQ2hhbmdlKGxhbmd1YWdlOiBzdHJpbmcpIHtcclxuICAgIHRoaXMudGxkU3lzdGVtLmNoYW5nZUxhbmd1YWdlKHRoaXMuc3dpdGNoZXJPcHRpb25zLnNvdXJjZS5jb2RlLCBsYW5ndWFnZSk7XHJcbiAgfVxyXG5cclxuICB0cmFuc2xhdGVCdXR0b25DbGljaygpIHtcclxuICAgIGlmICh0aGlzLnRyYW5zbGF0ZUZpbGVTZXJ2aWNlLnRyYW5zbGF0aW9uRmlsZXM/Lmxlbmd0aCA+IDApIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVGaWxlU2VydmljZS50cmFuc2xhdGVCdXR0b25DbGljayh0aGlzLmFjdGl2ZVN5c3RlbU9iaik7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy50cmFuc2xhdGVUZXh0U2VydmljZS5vblRyYW5zbGF0ZUJ1dHRvbkNsaWNrKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICByZW1vdmVNZXNzYWdlc09uQ2xlYXIoKSB7XHJcbiAgICB0aGlzLnRyYW5zbGF0ZUZpbGVTZXJ2aWNlLm9uQ2xlYXIoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcclxuICAgICAgfSlcclxuXHJcbiAgICB0aGlzLnRyYW5zbGF0ZVRleHRTZXJ2aWNlLm9uQ2xlYXIoKVxyXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubWVzc2FnZXMgPSBbXTtcclxuICAgICAgfSlcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KG51bGwpXHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlbW92ZUV4aXN0aW5nTWVzc2FnZShtZXNzYWdlOiBOb3RpZmljYXRpb25NZXNzYWdlKTogdm9pZCB7XHJcbiAgICBkZWxldGUgbWVzc2FnZS5kZWxldGU7XHJcbiAgICBjb25zdCBkZWxldGVNc2dTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcclxuICAgIGNvbnN0IG1zZyA9IHRoaXMubWVzc2FnZXMuZmluZCgoZXhpc3RpbmdNc2cpID0+IFxyXG4gICAgICBKU09OLnN0cmluZ2lmeShleGlzdGluZ01zZykgPT09IGRlbGV0ZU1zZ1N0cmluZyk7XHJcbiAgICAgIFxyXG4gICAgY29uc3QgaW5kZXggPSB0aGlzLm1lc3NhZ2VzLmluZGV4T2YobXNnKTtcclxuXHJcbiAgICBpZiAoaW5kZXggPCAwKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnJlbW92ZU1lc3NhZ2UoaW5kZXgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhZGRNZXNzYWdlKG1lc3NhZ2U6IE5vdGlmaWNhdGlvbk1lc3NhZ2UpOiB2b2lkIHtcclxuICAgIC8vIHB1c2hpbmcgb25seSBcIm9uZSBvZlwiIG1lc3NhZ2UgaW4gYXJyYXksIHNvIHNjcmVlbiBpcyBub3Qgc3BhbW1lZCB3aXRoIG1lc3NhZ2VzXHJcbiAgICBjb25zdCBkZWxldGVNc2dTdHJpbmcgPSBKU09OLnN0cmluZ2lmeShtZXNzYWdlLmxvY2FsaXphdGlvblBhcmFtcyk7XHJcbiAgICBjb25zdCBleGlzdGluZ01lc3NhZ2UgPSB0aGlzLm1lc3NhZ2VzLmZpbmQobXNnID0+IG1zZy50aXRsZSA9PT0gbWVzc2FnZS50aXRsZVxyXG4gICAgICAmJiBtc2cudHlwZSA9PT0gbWVzc2FnZS50eXBlXHJcbiAgICAgICYmIG1lc3NhZ2UuYm9keSA9PT0gbXNnLmJvZHlcclxuICAgICAgJiYgSlNPTi5zdHJpbmdpZnkobXNnLmxvY2FsaXphdGlvblBhcmFtcykgPT09IGRlbGV0ZU1zZ1N0cmluZyk7XHJcbiAgICBpZiAoIWV4aXN0aW5nTWVzc2FnZSkge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgZnhMYXlvdXQ9XCJjb2x1bW5cIiBjbGFzcz1cImgtMTAwIHRsZC10cmFuc2xhdGVcIiAqbmdJZj1cIiFzaG93Tm9TeXN0ZW1zRXJyb3JcIlxyXG4gIFtuZ0NsYXNzLmx0LW1kXT1cIid0bGQtdHJhbnNsYXRlLXRhYmxldCB0bGQtZGVmYXVsdC1ib3JkZXItYm90dG9tJ1wiXHJcbiAgW25nQ2xhc3MubHQtc21dPVwiJ3RsZC10cmFuc2xhdGUtbW9iaWxlIHRsZC1kZWZhdWx0LWJvcmRlci1ib3R0b20nXCJcclxuICBbY2xhc3MudGxkLXRyYW5zbGF0ZS1tdWx0aXBsZS1maWxlcy1hY3RpdmVdPVwiaXNNdWx0aXBsZUZpbGVzQWN0aXZlXCI+XHJcbiAgPGRpdiBjbGFzcz1cInRsZC10cmFuc2xhdGUtd3JhcHBlciB0bGQtZGVmYXVsdC1ib3JkZXJcIiBmeExheW91dD1cImNvbHVtblwiIGZ4RmxleD5cclxuICAgIDxkaXYgY2xhc3M9XCJ0bGQtdHJhbnNsYXRlLXN3aXRjaGVyLXdyYXBwZXIgdGxkLWRlZmF1bHQtYm9yZGVyLWJvdHRvbVwiPlxyXG4gICAgICA8dGxkLXRyYW5zbGF0ZS1zd2l0Y2hlciAqbmdJZj1cInN3aXRjaGVyT3B0aW9ucyAmJiBsYW5ndWFnZU1lbnVWZXJzaW9uID09PSBsYW5ndWFnZU1lbnVWMVwiXHJcbiAgICAgICAgW2Rpc2FibGVkXT1cImFjdGlvbkJ1dHRvbkRpc2FibGVkXCIgW2lzQ29sbGVjdGlvbnNBY3RpdmF0ZWRdPVwiaXNDb2xsZWN0aW9uc0FjdGl2YXRlZFwiIFtzZXR0aW5nc109XCJzd2l0Y2hlck9wdGlvbnNcIlxyXG4gICAgICAgIFttYXhEaXNwbGF5ZWRMYW5ndWFnZXNdPVwibWF4RGlzcGxheWVkTGFuZ3VhZ2VzXCIgW3Nob3dEb21haW5zV2l0aExhbmd1YWdlTmFtZV09XCJzaG93RG9tYWluc1dpdGhMYW5ndWFnZU5hbWVcIlxyXG4gICAgICAgIFtidXR0b25EaXNhYmxlZF09XCJhY3Rpb25CdXR0b25EaXNhYmxlZFwiIFtoaWRlTGFuZ01lbnVMYWJlbHNdPVwiaGlkZUxhbmdNZW51TGFiZWxzXCJcclxuICAgICAgICAob25Eb21haW5DaGFuZ2UpPVwic3lzdGVtQ2hhbmdlKCRldmVudClcIiAob25BY3Rpb25DbGljayk9XCJ0cmFuc2xhdGVCdXR0b25DbGljaygpXCJcclxuICAgICAgICAob25MYW5ndWFnZVN3YXApPVwic3dhcExhbmd1YWdlcygpXCIgKG9uU291cmNlTGFuZ3VhZ2VDaGFuZ2UpPVwic291cmNlTGFuZ3VhZ2VDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgKG9uVGFyZ2V0TGFuZ3VhZ2VDaGFuZ2UpPVwidGFyZ2V0TGFuZ3VhZ2VDaGFuZ2UoJGV2ZW50KVwiIFtsb2FkZXJdPVwiYWN0aW9uQnV0dG9uTG9hZGVyXCIgW3Nob3dUcmFuc2xhdGVCdXR0b25dPVwic2hvd1RyYW5zbGF0ZUJ1dHRvblwiPlxyXG4gICAgICA8L3RsZC10cmFuc2xhdGUtc3dpdGNoZXI+XHJcbiAgICAgIDx0bGQtdHJhbnNsYXRpb24tc3lzdGVtLXBpY2tlciAqbmdJZj1cImxhbmd1YWdlTWVudVZlcnNpb249PT1sYW5ndWFnZU1lbnVWMlwiXHJcbiAgICAgICAgW2lzQ29sbGVjdGlvbnNBY3RpdmF0ZWRdPVwiaXNDb2xsZWN0aW9uc0FjdGl2YXRlZFwiPjwvdGxkLXRyYW5zbGF0aW9uLXN5c3RlbS1waWNrZXI+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgKm5nSWY9XCJtZXNzYWdlcy5sZW5ndGhcIiBjbGFzcz1cIm1lc3NhZ2Utd3JhcHBlclwiPlxyXG4gICAgICA8bGliLXRsZC1ub3RpZmljYXRpb24tbWVzc2FnZSBbaW5saW5lXT1cInRydWVcIiAqbmdGb3I9XCJsZXQgbWVzc2FnZSBvZiBtZXNzYWdlczsgbGV0IGl4ID0gaW5kZXhcIiBbbWVzc2FnZV09XCJtZXNzYWdlXCJcclxuICAgICAgICAoY2xvc2VDbGlja2VkKT1cInJlbW92ZU1lc3NhZ2UoaXgpXCI+XHJcbiAgICAgIDwvbGliLXRsZC1ub3RpZmljYXRpb24tbWVzc2FnZT5cclxuICAgIDwvZGl2PlxyXG4gICAgPGRpdiBmeEZsZXggc3R5bGU9XCJwb3NpdGlvbjogcmVsYXRpdmU7XCI+XHJcbiAgICAgIDx0bGQtdHJhbnNsYXRlLWJvZHkgZnhGbGV4IGZ4TGF5b3V0QWxpZ249XCJjb2x1bW5cIiBbYXR0ci5zb3VyY2UtbGFuZ3VhZ2VdPVwic291cmNlTGFuZ3VhZ2VcIlxyXG4gICAgICAgIFthdHRyLnRhcmdldC1sYW5ndWFnZV09XCJ0YXJnZXRMYW5ndWFnZVwiPjwvdGxkLXRyYW5zbGF0ZS1ib2R5PlxyXG4gICAgICA8dGxkLXRyYW5zbGF0aW9uLXN5c3RlbS1waWNrZXItZHJvcGRvd24gW25nQ2xhc3MueHNdPVwiJ21vYmlsZSdcIiAqbmdJZj1cInN5c3RlbVBpY2tlckRyb3Bkb3duVmlzaWJsZVwiPlxyXG4gICAgICA8L3RsZC10cmFuc2xhdGlvbi1zeXN0ZW0tcGlja2VyLWRyb3Bkb3duPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG5cclxuPGxpYi10bGQtbm90aWZpY2F0aW9uLW1lc3NhZ2UgKm5nSWY9XCJzaG93Tm9TeXN0ZW1zRXJyb3JcIiBbbWVzc2FnZV09XCJub1N5c3RlbXNFcnJvclwiPlxyXG48L2xpYi10bGQtbm90aWZpY2F0aW9uLW1lc3NhZ2U+XHJcbiJdfQ==