tuain-ng-forms-lib 12.0.1 → 12.0.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.
@@ -203,7 +203,7 @@ export class BasicFormComponent {
203
203
  subscribeAppEvent(eventName, callback) {
204
204
  this._eventEmiter.subscribe(eventName, callback);
205
205
  }
206
- openForm(name, data, backData = null, cleanStack = false) {
206
+ openForm(name, data = null, backData = null, cleanStack = false) {
207
207
  var _a, _b, _c, _d, _e, _f, _g, _h;
208
208
  let origin = null;
209
209
  if (!cleanStack) {
@@ -283,13 +283,13 @@ export class BasicFormComponent {
283
283
  getSubject() { return this.formSubject; }
284
284
  getformSubject() { return this.getSubject(); }
285
285
  preocessInputParams(params) {
286
- var _a, _b;
287
- this.controlToken = (_a = params === null || params === void 0 ? void 0 : params[TOKEN].toString()) !== null && _a !== void 0 ? _a : null;
286
+ var _a, _b, _c;
287
+ this.controlToken = (_a = params === null || params === void 0 ? void 0 : params[TOKEN]) !== null && _a !== void 0 ? _a : null;
288
288
  const { token, subject, state, fields, extra, originToken } = this.formManagerService.getFormInfo(this.controlToken);
289
289
  if (!this.controlToken || this.controlToken !== token) {
290
290
  console.log(`No se obtuvo un token válido para abrir el formulario ${this.controlToken}->${token}`);
291
291
  }
292
- this.formSubject = (_b = params === null || params === void 0 ? void 0 : params[SUBJECT].toString()) !== null && _b !== void 0 ? _b : subject;
292
+ this.formSubject = (_c = (_b = params === null || params === void 0 ? void 0 : params[SUBJECT]) !== null && _b !== void 0 ? _b : subject) !== null && _c !== void 0 ? _c : null;
293
293
  this.inputDataFields = fields;
294
294
  this.extraData = extra;
295
295
  this.originToken = originToken;
@@ -1347,4 +1347,4 @@ BasicFormComponent.ctorParameters = () => [
1347
1347
  { type: LibEventManagerService },
1348
1348
  { type: LibFileManagementService }
1349
1349
  ];
1350
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFakUsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7QUFDNUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFFbEMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUt0QixNQUFNLE9BQU8sa0JBQWtCO0lBcUM3QixZQUNZLGtCQUF5QyxFQUN6QyxhQUFxQyxFQUNyQyxnQkFBMEM7UUFGMUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtRQUN6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQWxDdEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLGtCQUFhLEdBQXlCLElBQUksQ0FBQztRQUMzQyxp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QUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkYsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLElBQUksRUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNyRDtRQUNELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVGLElBQUkscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUM1RztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7OztZQTd5Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7YUFDdEM7OztZQWZRLHFCQUFxQjtZQUNyQixzQkFBc0I7WUFDdEIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU3RydWN0dXJlQW5kRGF0YSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvZm9ybSc7XG5pbXBvcnQgeyBMaWJGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkZpbGVNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IGZvcm1BY3Rpb25zIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9mb3JtLmNvbnN0YW50cyc7XG5cbmNvbnN0IFBBWUxPQURfVkVSU0lPTiA9ICdUVUFJTkVYQ0hBTkdFXzEuMCc7XG5jb25zdCBJTkxJTkVfQUNUSU9OID0gJ0lOTElORSc7XG5jb25zdCBHTE9CQUxfQUNUSU9OID0gJ0dMT0JBTCc7XG5jb25zdCBHRVRfREFUQV9BQ1RJT04gPSAnR0VUREFUQSc7XG5cbmNvbnN0IFNVQkpFQ1QgPSAnc3ViamVjdCc7XG5jb25zdCBUT0tFTiA9ICd0b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRm9ybUNvbXBvbmVudCB7XG4gIGZvcm1Db25maWc6IGFueTtcbiAgbmFtZTogc3RyaW5nO1xuICBfZm9ybVJvdXRlOiBzdHJpbmc7XG4gIGZvcm1TdWJqZWN0OiBzdHJpbmc7XG4gIF9lcnJvclR5cGU6ICcnO1xuICBlcnJvckNvZGUgPSAnJztcbiAgZXJyb3JNZXNzYWdlID0gJyc7XG4gIGVycm9yRGV0YWlsID0gJyc7XG5cbiAgZm9ybVN0cnVjdHVyZTogRm9ybVN0cnVjdHVyZUFuZERhdGEgPSBudWxsO1xuICBjb250cm9sVG9rZW4gPSBudWxsO1xuICBvcmlnaW5Ub2tlbjogc3RyaW5nO1xuICBpbnB1dERhdGFGaWVsZHMgPSB7fTtcbiAgZXh0cmFEYXRhOiBhbnkgPSB7fTtcblxuICBkZWZpbml0aW9uT2J0YWluZWQgPSBmYWxzZTtcbiAgZm9ybVZpc2libGUgPSBmYWxzZTtcbiAgaW5TZXJ2ZXJQcm9jZXNzID0gZmFsc2U7XG5cbiAgZm9ybVNlY3Rpb25zQWN0aXZhdGUgPSB7fTtcbiAgZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZSA9IHt9O1xuICBmb3JtQWN0aW9uc1N0YXJ0ID0ge307XG4gIGZvcm1BY3Rpb25zRmluaXNoID0ge307XG4gIGZpZWxkSW5wdXRWYWxpZGF0aW9uID0ge307XG4gIGZpZWxkVmFsaWRhdGlvbnNTdGFydCA9IHt9O1xuICBmaWVsZFZhbGlkYXRpb25zRmluaXNoID0ge307XG4gIC8vIENhbGxiYWNrIGRlIGFjY2lvbmVzIGRlIHRhYmxhc1xuICB0YWJsZVNlbGVjdGlvbnNTdGFydCA9IHt9O1xuICB0YWJsZVNlbGVjdGlvbnNGaW5pc2ggPSB7fTtcbiAgdGFibGVBY3Rpb25zU3RhcnQgPSB7fTtcbiAgdGFibGVBY3Rpb25zRmluaXNoID0ge307XG4gIHRhYmxlR2V0RGF0YVN0YXJ0ID0ge307XG4gIHRhYmxlR2V0RGF0YUZpbmlzaCA9IHt9O1xuXG4gIHByb3RlY3RlZCBfZXZlbnRFbWl0ZXI6IExpYkV2ZW50TWFuYWdlclNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGZvcm1NYW5hZ2VyU2VydmljZTogTGliRm9ybU1hbmFnZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBfZXZlbnRNYW5hZ2VyOiBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBmaWxlTWdtdFNlcnZpY2VzOiBMaWJGaWxlTWFuYWdlbWVudFNlcnZpY2UpIHtcbiAgICB0aGlzLl9ldmVudEVtaXRlciA9IHRoaXMuX2V2ZW50TWFuYWdlcjtcbiAgICB0aGlzLmNsZWFuU3RhcnQoKTtcbiAgICB0aGlzLmN1c3RvbVByZVByb2Nlc3NpbmcoKTtcbiAgfVxuXG4gIHNldENvbmZpZyhmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcbiAgfVxuXG4gIGNsZWFuU3RhcnQoKSB7XG4gICAgdGhpcy5fZXJyb3JUeXBlID0gJyc7XG4gICAgdGhpcy5lcnJvckNvZGUgPSAnJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSAnJztcbiAgICB0aGlzLmZvcm1TdHJ1Y3R1cmUgPSBudWxsO1xuICAgIHRoaXMuY29udHJvbFRva2VuID0gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IHt9O1xuICAgIHRoaXMuZGVmaW5pdGlvbk9idGFpbmVkID0gZmFsc2U7XG4gICAgLy8gU2UgbGltcGlhbiBsb3MgbWFuZWphZG9yZXMgZGUgZXZlbnRvc1xuICAgIHRoaXMuZm9ybVZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmluU2VydmVyUHJvY2VzcyA9IGZhbHNlO1xuICAgIHRoaXMuZm9ybVNlY3Rpb25zQWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLmZvcm1TZWN0aW9uc0luYWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLmZvcm1BY3Rpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLmZvcm1BY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbiA9IHt9O1xuICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5maWVsZFZhbGlkYXRpb25zRmluaXNoID0ge307XG4gICAgdGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMudGFibGVTZWxlY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy50YWJsZUFjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMudGFibGVBY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy50YWJsZUdldERhdGFTdGFydCA9IHt9O1xuICAgIHRoaXMudGFibGVHZXREYXRhRmluaXNoID0ge307XG4gIH1cblxuICBnZXQgY3VycmVudFN0YXRlKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnN0YXRlOyB9XG4gIHNldCBjdXJyZW50U3RhdGUoc3RhdGUpIHsgdGhpcy5mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuICBnZXQgY3VycmVudE1vZGUoKSB7IHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZTsgfVxuICBnZXQgaW1tdXRhYmxlRGF0YSgpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhIH1cbiAgZ2V0IGV4dHJhSW5mbygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5leHRyYUluZm8gfVxuXG4gIC8vIE3DqXRvZG9zIFBhc3MtdGhyb3VnaCBoYWNpYSBlbCBjb250ZW5pZG8geSBlc3RydWN0dXJhIGRlbCBmb3JtdWxhcmlvXG4gIHN1cHBvcnRTdGF0ZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnN1cHBvcnRTdGF0ZShzdGF0ZSk7IH1cbiAgc3VwcG9ydE1vZGUoc3RhdGUpIHsgcmV0dXJuIHRoaXMuc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuICBnZXRUaXRsZSgpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS50aXRsZTsgfVxuICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKSB7IHRoaXMuZm9ybVN0cnVjdHVyZS50aXRsZSA9IHRpdGxlOyB9XG4gIGdldEltbXV0YWJsZUVsZW1lbnQobmFtZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEltbXV0YWJsZUVsZW1lbnQobmFtZSk7IH1cbiAgZ2V0RXh0cmFJbmZvKG5hbWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRFeHRyYUluZm8obmFtZSk7IH1cbiAgY2xlYW5EYXRhKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmNsZWFuRGF0YSgpOyB9XG4gIGdldEZpZWxkcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHMoKTsgfVxuICBnZXRGaWVsZE5hbWVzKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkTmFtZXMoKTsgfVxuICBnZXRGaWVsZE9iamVjdChlbGVtZW50SWQpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZE9iamVjdChlbGVtZW50SWQpOyB9XG4gIGdldEZpZWxkKGZpZWxkQ29kZSkgeyByZXR1cm4gdGhpcy5nZXRGaWVsZE9iamVjdChmaWVsZENvZGUpOyB9XG4gIGVuYWJsZUZpZWxkKGZpZWxkQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUZpZWxkKGZpZWxkQ29kZSk7IH1cbiAgZGlzYWJsZUZpZWxkKGZpZWxkQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVGaWVsZChmaWVsZENvZGUpOyB9XG4gIGdldEZpZWxkVmFsdWUoZmllbGRDb2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0RmllbGRWYWx1ZShmaWVsZENvZGUpOyB9XG4gIGdldEZpZWxkc1ZhbHVlcyhmaWVsZENvZGVzQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHNWYWx1ZXMoZmllbGRDb2Rlc0FycmF5KTsgfVxuICBnZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0RmllbGRPcHRpb25zKGZpZWxkQ29kZSk7IH1cbiAgc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGZpZWxkVmFsdWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zZXRGaWVsZFZhbHVlKGZpZWxkQ29kZSwgZmllbGRWYWx1ZSk7IH1cbiAgc2V0RmllbGRSZXF1aXJlZChmaWVsZENvZGUsIHJlcXVpcmVkOiBib29sZWFuKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRSZXF1aXJlZChmaWVsZENvZGUsIHJlcXVpcmVkKTsgfVxuICBzZXRGaWVsZEVycm9yTWVzc2FnZShmaWVsZENvZGUsIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNldEZpZWxkRXJyb3JNZXNzYWdlKGZpZWxkQ29kZSwgZXJyb3JNZXNzYWdlKTsgfVxuICBzZXRGaWVsZEVycm9yKGNvZGUsIG1lc3NhZ2UsIHR5cGUgPSAnZXJyb3InKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRFcnJvcihjb2RlLCBtZXNzYWdlLCB0eXBlKTsgfVxuICBzZXRGaWVsZEludHJpbnNpY0Vycm9yTWVzc2FnZShjb2RlLCBtZXNzYWdlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRJbnRyaW5zaWNFcnJvck1lc3NhZ2UoY29kZSwgbWVzc2FnZSk7IH1cblxuICBzZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKTtcbiAgfVxuICBnZXRGaWVsZFNldChmaWx0ZXJGdW5jPywgZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZFNldChmaWx0ZXJGdW5jLCBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGFwcGx5UHJvY2Vzc1RvRmllbGRTZXQocHJvY2Vzc0Z1bmMsIGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChwcm9jZXNzRnVuYywgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBhcHBseVByb2Nlc3NUb0FsbEZpZWxkcyhwcm9jZXNzRnVuYykgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmFwcGx5UHJvY2Vzc1RvRmllbGRTZXQocHJvY2Vzc0Z1bmMpOyB9XG4gIGNsZWFuRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5GaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBnZXRSZXF1aXJlZEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0UmVxdWlyZWRGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBnZXRSZXF1aXJlZEVtcHR5RmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGdldENoYW5nZWRGaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRDaGFuZ2VkRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3VlcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIHRhZ0ZpZWxkc1dpdGhFcnJvcihlcnJvck1lc3NhZ2UsIGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUudGFnRmllbGRzV2l0aEVycm9yKGVycm9yTWVzc2FnZSwgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBjbGVhbkVycm9yRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5FcnJvckZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIHNob3dMYWJlbEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dMYWJlbEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGhpZGVMYWJlbEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVMYWJlbEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGVuYWJsZUZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGRpc2FibGVGaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5kaXNhYmxlRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgZW5hYmxlRWRpdEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUVkaXRGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBkaXNhYmxlRWRpdEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVFZGl0RmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgc2hvd0ZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBoaWRlRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgZ2V0SGVhZGVyQWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRIZWFkZXJBY3Rpb25zKCk7IH1cbiAgZ2V0QWN0aW9uT2JqZWN0KGVsZW1lbnRJZCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEFjdGlvbk9iamVjdChlbGVtZW50SWQpOyB9XG4gIGdldEFjdGlvbihhY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmdldEFjdGlvbk9iamVjdChhY3Rpb25Db2RlKTsgfVxuICBnZXRBY3Rpb25EZWZpbml0aW9uKGFjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpOyB9XG4gIHNob3dBY3Rpb24oYWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dBY3Rpb24oYWN0aW9uQ29kZSk7IH1cbiAgaGlkZUFjdGlvbihhY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZUFjdGlvbihhY3Rpb25Db2RlKTsgfVxuICBzaG93QWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuICBoaWRlQWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuICBlbmFibGVBY3Rpb24oYWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUFjdGlvbihhY3Rpb25Db2RlKTsgfVxuICBkaXNhYmxlQWN0aW9uKGFjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5kaXNhYmxlQWN0aW9uKGFjdGlvbkNvZGUpOyB9XG4gIGVuYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5lbmFibGVBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuICBkaXNhYmxlQWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuXG4gIGdldFN0YXRlcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTdGF0ZXMoKTsgfVxuICBnZXRTZWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9ucygpOyB9XG4gIGdldFNlY3Rpb24oc2VjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9uKHNlY3Rpb25Db2RlKTsgfVxuICBhY3RpdmF0ZVNlY3Rpb24oc2VjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5hY3RpdmF0ZVNlY3Rpb24oc2VjdGlvbkNvZGUpOyB9XG4gIGdldFN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YnNlY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U3ViU2VjdGlvbihzZWN0aW9uQ29kZSwgc3Vic2VjdGlvbkNvZGUpOyB9XG4gIG51bVNlY3Rpb25zKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLm51bVNlY3Rpb25zKCk7IH1cbiAgZ2V0U2VjdGlvbnNUaXRsZXMoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbnNUaXRsZXMoKTsgfVxuICBnZXRTZWN0aW9uT2JqZWN0KGVsZW1lbnRJZCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldFNlY3Rpb25PYmplY3QoZWxlbWVudElkKTsgfVxuICBzaG93U2VjdGlvbihzZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dTZWN0aW9uKHNlY3Rpb25Db2RlKTsgfVxuICBoaWRlU2VjdGlvbihzZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVTZWN0aW9uKHNlY3Rpb25Db2RlKTsgfVxuICBzaG93U2VjdGlvbnMoc2VjdGlvbkFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd1NlY3Rpb25zKHNlY3Rpb25BcnJheSk7IH1cbiAgaGlkZVNlY3Rpb25zKHNlY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVTZWN0aW9ucyhzZWN0aW9uQXJyYXkpOyB9XG4gIHNob3dTdWJTZWN0aW9uKHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dTdWJTZWN0aW9uKHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7IH1cbiAgaGlkZVN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZVN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTsgfVxuICBzaG93U3ViU2VjdGlvbnMoc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dTdWJTZWN0aW9ucyhzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkFycmF5KTsgfVxuICBoaWRlU3ViU2VjdGlvbnMoc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVTdWJTZWN0aW9ucyhzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkFycmF5KTsgfVxuXG4gIGdldFRhYmxlcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZXMoKTsgfVxuICBnZXRUYWJsZU9iamVjdChlbGVtZW50SWQpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZU9iamVjdChlbGVtZW50SWQpOyB9XG4gIGdldFRhYmxlKHRhYmxlTmFtZSkgeyByZXR1cm4gdGhpcy5nZXRUYWJsZU9iamVjdCh0YWJsZU5hbWUpOyB9XG4gIHNob3dUYWJsZSh0YWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zaG93VGFibGUodGFibGVOYW1lKTsgfVxuICBoaWRlVGFibGUodGFibGVOYW1lKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZVRhYmxlKHRhYmxlTmFtZSk7IH1cbiAgc2hvd1RhYmxlcyh0YWJsZUFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd1RhYmxlcyh0YWJsZUFycmF5KTsgfVxuICBoaWRlVGFibGVzKHRhYmxlQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5oaWRlVGFibGVzKHRhYmxlQXJyYXkpOyB9XG4gIGNsZWFuVGFibGUodGFibGVOYW1lKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5UYWJsZSh0YWJsZU5hbWUpOyB9XG4gIGdldFRhYmxlUmVjb3JkKHRhYmxlTmFtZSwgcmVjb3JkSWQpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZVJlY29yZCh0YWJsZU5hbWUsIHJlY29yZElkKTsgfVxuXG4gIGN1c3RvbVByZVByb2Nlc3NpbmcoKSB7IH1cbiAgY3VzdG9tRm9ybVN0YXJ0KCkgeyB9XG4gIGRpc3BsYXlBY3Rpb25TZXJ2ZXJFcnJvcigpIHsgfVxuICBkaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCkgeyB9XG4gIHNob3dGaWVsZEluZm8oZmllbGRDb2RlOiBzdHJpbmcpIHsgfVxuICBzaG93TW9kYWxEaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG4gIG9wZW5VcGxvYWREaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG5cbiAgc3Vic2NyaWJlQXBwRXZlbnQoZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX2V2ZW50RW1pdGVyLnN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIG9wZW5Gb3JtKG5hbWUsIGRhdGEsIGJhY2tEYXRhID0gbnVsbCwgY2xlYW5TdGFjayA9IGZhbHNlKSB7XG4gICAgbGV0IG9yaWdpbiA9IG51bGw7XG4gICAgaWYgKCFjbGVhblN0YWNrKSB7XG4gICAgICBvcmlnaW4gPSB7IC4uLmJhY2tEYXRhLCBuYW1lOiB0aGlzLm5hbWUsIHVybDogdGhpcy5fZm9ybVJvdXRlLCB0b2tlbjogdGhpcy5jb250cm9sVG9rZW4gfTtcbiAgICAgIG9yaWdpbi5zdWJqZWN0ID0gb3JpZ2luPy5zdWJqZWN0ID8/IHRoaXMuZm9ybVN1YmplY3Q7XG4gICAgICBvcmlnaW4uc3RhdGUgPSBvcmlnaW4/LnN0YXRlID8/IHRoaXMuY3VycmVudFN0YXRlO1xuICAgICAgb3JpZ2luLmZpZWxkcyA9IG9yaWdpbj8uZmllbGRzID8/IHt9O1xuICAgICAgb3JpZ2luLmV4dHJhID0gb3JpZ2luPy5leHRyYSA/PyB7fTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0geyAuLi5kYXRhLCBuYW1lIH07XG4gICAgdGFyZ2V0LnN1YmplY3QgPSB0YXJnZXQ/LnN1YmplY3QgPz8gbnVsbDtcbiAgICB0YXJnZXQuc3RhdGUgPSB0YXJnZXQ/LnN0YXRlID8/IG51bGw7XG4gICAgdGFyZ2V0LmZpZWxkcyA9IHRhcmdldD8uZmllbGRzID8/IHt9O1xuICAgIHRhcmdldC5leHRyYSA9IHRhcmdldD8uZXh0cmEgPz8ge307XG4gICAgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2Uub3BlbkZvcm0ob3JpZ2luLCB0YXJnZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIEVzdGUgbcOpdG9kbyB5YSBubyBkZWJlcsOtYSBzZXIgdXRpbGl6YWRvLiBVc2Ugb3BlbkZvcm0gY29uIGVsIG5vbWJyZSBkZWwgZm9ybXVsYXJpb1xuICAgKi9cbiAgZ29Ub1BhZ2UobmF2aWdhdGlvbkFycmF5LCBwcmVkZWZpbmVkRmllbGRzLCBvcHRpb25zID0gbnVsbCkge1xuICAgIGxldCBvcmlnaW4gPSBudWxsO1xuICAgIGNvbnN0IGNsZWFuU3RhY2sgPSBvcHRpb25zPy5jbGVhblN0YWNrID8/IGZhbHNlO1xuICAgIGlmICghY2xlYW5TdGFjaykge1xuICAgICAgb3JpZ2luID0ge1xuICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgIHVybDogdGhpcy5fZm9ybVJvdXRlLFxuICAgICAgICB0b2tlbjogdGhpcy5jb250cm9sVG9rZW4sXG4gICAgICAgIGZpZWxkczogdGhpcy5pbnB1dERhdGFGaWVsZHMsXG4gICAgICAgIGV4dHJhOiB0aGlzLmV4dHJhRGF0YVxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3QgdGFyZ2V0ID0ge1xuICAgICAgbmFtZTogdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZ2V0Um91dGVGb3JtKG5hdmlnYXRpb25BcnJheT8uWzBdKSxcbiAgICAgIHVybDogbmF2aWdhdGlvbkFycmF5Py5bMF0sXG4gICAgICBzdGF0ZTogbmF2aWdhdGlvbkFycmF5Py5bMV0sXG4gICAgICBzdWJqZWN0OiBuYXZpZ2F0aW9uQXJyYXk/LlsyXSxcbiAgICAgIGZpZWxkczogcHJlZGVmaW5lZEZpZWxkcyxcbiAgICAgIGV4dHJhOiBudWxsLFxuICAgIH07XG4gICAgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2Uub3BlbkZvcm0ob3JpZ2luLCB0YXJnZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIEVzdGUgbcOpdG9kbyB5YSBubyBkZWJlcsOtYSBzZXIgdXRpbGl6YWRvLiBVc2Ugb3BlbkZvcm0gY29uIGVsIG5vbWJyZSBkZWwgZm9ybXVsYXJpb1xuICAgKi9cbiAgZ29Ub05ld1BhZ2UobmF2LCBmbGRzKSB7IHJldHVybiB0aGlzLmdvVG9QYWdlKG5hdiwgZmxkcywgeyBjbGVhblN0YWNrOiB0cnVlIH0pOyB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkIEVzdGUgbcOpdG9kbyB5YSBubyBkZWJlcsOtYSBzZXIgdXRpbGl6YWRvLiBVc2Ugb3BlbkZvcm0gY29uIGVsIG5vbWJyZSBkZWwgZm9ybXVsYXJpb1xuICAgKi9cbiAgZ29Ub1N1YlBhZ2UobmF2LCBmbGRzKSB7IHJldHVybiB0aGlzLmdvVG9QYWdlKG5hdiwgZmxkcywgeyBjbGVhblN0YWNrOiBmYWxzZSB9KTsgfVxuXG4gIGNhbkdvQmFjaygpIHsgcmV0dXJuIHRoaXMub3JpZ2luVG9rZW4gIT09IG51bGwgfVxuICBnb0JhY2soKSB7IHJldHVybiB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5iYWNrVG8oKTsgfVxuICBnb0JhY2tGb3JtKCkgeyByZXR1cm4gdGhpcy5nb0JhY2soKTsgfVxuICBnZXRPcmlnaW5EZXRhaWwoKSB7IHJldHVybiB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtSW5mbyh0aGlzLm9yaWdpblRva2VuKTsgfVxuXG4gIHNldEVycm9yKGVycm9yVHlwZSwgZXJyb3JNZXNzYWdlLCBlcnJvckRldGFpbCkge1xuICAgIHRoaXMuX2Vycm9yVHlwZSA9IGVycm9yVHlwZSB8fCAnJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yTWVzc2FnZSB8fCAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gZXJyb3JEZXRhaWwgfHwgJyc7XG4gIH1cblxuICBnZXQgZm9ybU1hbmFnZXIoKSB7IHJldHVybiB0aGlzOyB9XG4gIHJlc2V0RXJyb3IoKSB7IHRoaXMuc2V0RXJyb3IobnVsbCwgbnVsbCwgbnVsbCk7IH1cbiAgZ2V0RXJyb3JUeXBlKCkgeyByZXR1cm4gdGhpcy5fZXJyb3JUeXBlOyB9XG4gIGdldEVycm9yTWVzc2FnZSgpIHsgcmV0dXJuIHRoaXMuZXJyb3JNZXNzYWdlOyB9XG4gIGdldEVycm9yRGV0YWlsKCkgeyByZXR1cm4gdGhpcy5lcnJvckRldGFpbDsgfVxuICBnZXRFcnJvckNvZGUoKSB7IHJldHVybiB0aGlzLl9lcnJvclR5cGU7IH1cblxuICBnZXQgZm9ybVJvdXRlKCkgeyByZXR1cm4gdGhpcy5fZm9ybVJvdXRlOyB9XG4gIHNldCBmb3JtUm91dGUocm91dGUpIHsgdGhpcy5fZm9ybVJvdXRlID0gcm91dGU7IH1cbiAgZGVmaW5lRm9ybUNvZGUobmFtZSkgeyB0aGlzLm5hbWUgPSBuYW1lOyB9XG4gIGdldEN1cnJlbnRTdGF0ZSgpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zdGF0ZTsgfVxuICBnZXRDdXJyZW50TW9kZSgpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zdGF0ZTsgfVxuXG4gIGdldCBmb3JtQ29kZSgpIHsgcmV0dXJuIHRoaXMubmFtZTsgfVxuICBzZXQgZm9ybUNvZGUobmFtZSkgeyB0aGlzLm5hbWUgPSBuYW1lOyB9XG5cbiAgZ2V0Rm9ybVBhcmFtZXRlcihuYW1lKSB7XG4gICAgcmV0dXJuIChuYW1lKSA/ICh0aGlzLmV4dHJhRGF0YT8uW25hbWVdID8/IG51bGwpIDogbnVsbDtcbiAgfVxuXG4gIGdldFN1YmplY3QoKSB7IHJldHVybiB0aGlzLmZvcm1TdWJqZWN0OyB9XG4gIGdldGZvcm1TdWJqZWN0KCkgeyByZXR1cm4gdGhpcy5nZXRTdWJqZWN0KCk7IH1cblxuICBwcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtcykge1xuICAgIHRoaXMuY29udHJvbFRva2VuID0gcGFyYW1zPy5bVE9LRU5dLnRvU3RyaW5nKCkgPz8gbnVsbDtcbiAgICBjb25zdCB7IHRva2VuLCBzdWJqZWN0LCBzdGF0ZSwgZmllbGRzLCBleHRyYSwgb3JpZ2luVG9rZW4gfSA9IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldEZvcm1JbmZvKHRoaXMuY29udHJvbFRva2VuKTtcbiAgICBpZiAoIXRoaXMuY29udHJvbFRva2VuIHx8IHRoaXMuY29udHJvbFRva2VuICE9PSB0b2tlbikge1xuICAgICAgY29uc29sZS5sb2coYE5vIHNlIG9idHV2byB1biB0b2tlbiB2w6FsaWRvIHBhcmEgYWJyaXIgZWwgZm9ybXVsYXJpbyAke3RoaXMuY29udHJvbFRva2VufS0+JHt0b2tlbn1gKTtcbiAgICB9XG4gICAgdGhpcy5mb3JtU3ViamVjdCA9IHBhcmFtcz8uW1NVQkpFQ1RdLnRvU3RyaW5nKCkgPz8gc3ViamVjdDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IGZpZWxkcztcbiAgICB0aGlzLmV4dHJhRGF0YSA9IGV4dHJhO1xuICAgIHRoaXMub3JpZ2luVG9rZW4gPSBvcmlnaW5Ub2tlbjtcbiAgICByZXR1cm4gc3RhdGU7XG4gIH1cblxuICBzdWJzY3JpYmVTZWN0aW9uQWN0aXZhdGlvbigpIHtcbiAgICBjb25zdCBmb3JtU2VjdGlvbnMgPSB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbnMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtU2VjdGlvbnMpKSB7XG4gICAgICBmb3JtU2VjdGlvbnMuZm9yRWFjaChzZWN0aW9uID0+IHtcbiAgICAgICAgc2VjdGlvbi5hY3RpdmF0aW9uLnN1YnNjcmliZShjb2RlID0+IHRoaXMubGF1bmNoU2VjdGlvbkFjdGl2YXRpb24oY29kZSkpO1xuICAgICAgICBzZWN0aW9uLmluYWN0aXZhdGlvbi5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLmxhdW5jaFNlY3Rpb25JbmFjdGl2YXRpb24oY29kZSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgc3Vic2NyaWJlRmllbGRzU3ViamVjdHMoKSB7XG4gICAgY29uc3QgZm9ybUZpZWxkcyA9IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtRmllbGRzKSkge1xuICAgICAgZm9ybUZpZWxkcy5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgZmllbGQuZWRpdGlvbkZpbmlzaC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICAgIGNvbnN0IHsgY29kZSwgaW50cmluc2ljVmFsaWRhdGlvbiB9ID0gZXZlbnQ7XG4gICAgICAgICAgdGhpcy5zdGFydEZpZWxkVmFsaWRhdGlvbihjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkLmVkaXRpb25QYXJ0aWFsLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgeyBjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uIH0gPSBldmVudDtcbiAgICAgICAgICB0aGlzLnN0YXJ0RmllbGRJbnB1dFZhbGlkYXRpb24oY29kZSwgaW50cmluc2ljVmFsaWRhdGlvbik7XG4gICAgICAgIH0pO1xuICAgICAgICBmaWVsZC5kZXRhaWxSZXF1ZXN0LnN1YnNjcmliZShjb2RlID0+IHRoaXMuc2hvd0ZpZWxkSW5mbyhjb2RlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVBY3Rpb25TdWJqZWN0cygpIHtcbiAgICBjb25zdCBmb3JtQWN0aW9ucyA9IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRBY3Rpb25zKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybUFjdGlvbnMpKSB7XG4gICAgICBmb3JtQWN0aW9ucy5mb3JFYWNoKGFjdGlvbiA9PiB7XG4gICAgICAgIGFjdGlvbi5hY3Rpb25BY3RpdmF0ZWQuc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5zdGFydEFjdGlvbihjb2RlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVUYWJsZVN1YmplY3RzKCkge1xuICAgIGNvbnN0IGZvcm1UYWJsZXMgPSB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0VGFibGVzKCk7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoZm9ybVRhYmxlcykpIHtcbiAgICAgIGZvcm1UYWJsZXMuZm9yRWFjaCh0YWJsZSA9PiB7XG4gICAgICAgIHRhYmxlLmlubGluZUFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5nbG9iYWxBY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVHbG9iYWxBY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUucmVjb3JkU2VsZWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlUmVjb3JkU2VsZWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLnNlbGVjdGlvbkFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZVNlbGVjdGlvbkFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5nZXREYXRhVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlR2V0RGF0YShldmVudCkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZm9ybUluaXQocGFyYW1zKSB7XG4gICAgbGV0IGluaXRpYWxTdGF0ZSA9IHRoaXMucHJlb2Nlc3NJbnB1dFBhcmFtcyhwYXJhbXMpO1xuICAgIGlmICghdGhpcy5uYW1lKSB7IHJldHVybjsgfVxuICAgIGlmICghdGhpcy5kZWZpbml0aW9uT2J0YWluZWQpIHtcbiAgICAgIHRoaXMuaW5TZXJ2ZXJQcm9jZXNzID0gdHJ1ZTtcbiAgICAgIGNvbnN0IGZvcm1EZWZpbml0aW9uID0gYXdhaXQgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZ2V0Rm9ybURlZmluaXRpb24odGhpcy5uYW1lKTtcbiAgICAgIHRoaXMuaW5TZXJ2ZXJQcm9jZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmZvcm1TdHJ1Y3R1cmUgPSBuZXcgRm9ybVN0cnVjdHVyZUFuZERhdGEoZm9ybURlZmluaXRpb24sIHRoaXMuZm9ybUNvbmZpZyk7XG4gICAgICB0aGlzLmRlZmluaXRpb25PYnRhaW5lZCA9IHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2xlYW5EYXRhKCk7XG4gICAgfVxuICAgIGlmICghdGhpcy5zdXBwb3J0U3RhdGUoaW5pdGlhbFN0YXRlKSkge1xuICAgICAgaW5pdGlhbFN0YXRlID0gdGhpcy5mb3JtU3RydWN0dXJlLmRlZmF1bHRTdGF0ZTtcbiAgICB9XG4gICAgdGhpcy5mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKGluaXRpYWxTdGF0ZSB8fCB0aGlzLmZvcm1TdHJ1Y3R1cmUuZGVmYXVsdFN0YXRlKTtcbiAgICBjb25zdCBpbnB1dEZpZWxkTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmlucHV0RGF0YUZpZWxkcyk7XG4gICAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGlucHV0RmllbGROYW1lcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IGlucHV0RmllbGROYW1lc1tpbmRleF07XG4gICAgICBjb25zdCBmaWVsZFZhbHVlID0gdGhpcy5pbnB1dERhdGFGaWVsZHNbZmllbGRDb2RlXTtcbiAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGZpZWxkVmFsdWUpO1xuICAgIH1cbiAgICBjb25zdCByZWNvcmRSZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMuZ2V0RGF0YSk7XG4gICAgdGhpcy5jaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2UpO1xuICAgIHRoaXMuZm9ybVZpc2libGUgPSB0cnVlO1xuICAgIHRoaXMuc3Vic2NyaWJlU2VjdGlvbkFjdGl2YXRpb24oKTtcbiAgICB0aGlzLnN1YnNjcmliZUZpZWxkc1N1YmplY3RzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVBY3Rpb25TdWJqZWN0cygpO1xuICAgIHRoaXMuc3Vic2NyaWJlVGFibGVTdWJqZWN0cygpO1xuICAgIHRoaXMuY3VzdG9tRm9ybVN0YXJ0KCk7XG4gIH1cblxuICBjaGVja0Vycm9yUmVjb3JkUmVjZWl2ZWQocmVjb3JkUmVzcG9uc2UpIHtcbiAgICBjb25zdCB7IGVycm9yIH0gPSByZWNvcmRSZXNwb25zZTtcbiAgICBpZiAoIWVycm9yKSB7IHJldHVybiBmYWxzZTsgfVxuICAgIHRoaXMuZXJyb3JDb2RlID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JDb2RlO1xuICAgIHRoaXMuZXJyb3JNZXNzYWdlID0gcmVjb3JkUmVzcG9uc2UuZXJyb3JNZXNzYWdlO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSByZWNvcmRSZXNwb25zZS5lcnJvckRldGFpbDtcbiAgfVxuXG4gIGVycm9yT2NjdXJlZCgpIHtcbiAgICByZXR1cm4gKHRoaXMuZXJyb3JDb2RlICE9PSAnMDAnKTtcbiAgfVxuXG4gIGNoYW5nZVN0YXRlKHN0YXRlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2hhbmdlU3RhdGUoc3RhdGUpOyB9XG4gIGNoYW5nZUZvcm1Nb2RlKHN0YXRlKSB7IHJldHVybiB0aGlzLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuXG4gIGFzeW5jIHJlcXVlc3RGb3JtQWN0aW9uKGFjdGlvbkNvZGUsIGFjdGlvblN1YmplY3QgPSB7fSkge1xuICAgIGNvbnN0IGFjdGlvbkRldGFpbCA9IHtcbiAgICAgIGZvcm1Db2RlOiB0aGlzLm5hbWUsXG4gICAgICBmb3JtU3ViamVjdDogdGhpcy5mb3JtU3ViamVjdCxcbiAgICAgIGN1cnJlbnRNb2RlOiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc3RhdGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgYWN0aW9uU3ViamVjdCxcbiAgICAgIHZlcnNpb246IFBBWUxPQURfVkVSU0lPTixcbiAgICAgIGZvcm1EYXRhOiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0UGF5bG9hZCgpLFxuICAgICAgaW1tdXRhYmxlRGF0YTogdGhpcy5mb3JtU3RydWN0dXJlLmltbXV0YWJsZURhdGEsXG4gICAgfTtcbiAgICB0aGlzLmVycm9yQ29kZSA9ICcwMCc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJztcbiAgICB0aGlzLmVycm9yRGV0YWlsID0gJyc7XG4gICAgdGhpcy5pblNlcnZlclByb2Nlc3MgPSB0cnVlO1xuICAgIGNvbnN0IGZvcm1BY3Rpb25SZXNwb25zZTogYW55ID0gYXdhaXQgdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZXhlY1NlcnZlckFjdGlvbihhY3Rpb25EZXRhaWwpO1xuICAgIHRoaXMuaW5TZXJ2ZXJQcm9jZXNzID0gZmFsc2U7XG4gICAgaWYgKGZvcm1BY3Rpb25SZXNwb25zZSAmJiBmb3JtQWN0aW9uUmVzcG9uc2UuZXJyb3IuZXJyb3JUeXBlKSB7XG4gICAgICBjb25zb2xlLmxvZygnRXhjZXBjacOzbiBubyBzb3BvcnRhZGEnKTtcbiAgICB9XG4gICAgaWYgKGZvcm1BY3Rpb25SZXNwb25zZS5oYXNFcnJvcigpKSB7XG4gICAgICBjb25zdCBlcnJvciA9IGZvcm1BY3Rpb25SZXNwb25zZS5lcnJvcjtcbiAgICAgIHRoaXMuZXJyb3JDb2RlID0gZXJyb3IuZXJyb3JDb2RlO1xuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvci5lcnJvck1lc3NhZ2U7XG4gICAgICB0aGlzLmVycm9yRGV0YWlsID0gZXJyb3IuZXJyb3JEZXRhaWw7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1SZXNwb25zZURhdGEgPSBmb3JtQWN0aW9uUmVzcG9uc2UuZ2V0RGF0YSgpO1xuICAgIHRoaXMudXBkYXRlRm9ybVdpdGhTZXJ2ZXJEYXRhKGZvcm1SZXNwb25zZURhdGEpO1xuICAgIHJldHVybiBmb3JtUmVzcG9uc2VEYXRhO1xuICB9XG5cbiAgdXBkYXRlRm9ybVdpdGhTZXJ2ZXJEYXRhKGZvcm1Db250ZW50KSB7XG4gICAgY29uc3Qge1xuICAgICAgY3VycmVudE1vZGUsIGZvcm1TdWJqZWN0LCBhY3Rpb25zLCBmaWVsZHMsIHJlY29yZFRhYmxlcyxcbiAgICAgIHJldHVybmVkRmlsZSwgaW1tdXRhYmxlRGF0YSwgZXh0cmFJbmZvLFxuICAgIH0gPSBmb3JtQ29udGVudDtcbiAgICB0aGlzLmNoYW5nZVN0YXRlKGN1cnJlbnRNb2RlID8/IHRoaXMuZm9ybVN0cnVjdHVyZS5zdGF0ZSk7XG4gICAgaWYgKGZvcm1TdWJqZWN0KSB7IHRoaXMuZm9ybVN1YmplY3QgPSBmb3JtU3ViamVjdDsgfVxuICAgIGlmIChhY3Rpb25zICYmIGFjdGlvbnMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkQWN0aW9uIG9mIGFjdGlvbnMpIHtcbiAgICAgICAgY29uc3QgYWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRBY3Rpb25PYmplY3QoY2hhbmdlZEFjdGlvbi5hY3Rpb25Db2RlKTtcbiAgICAgICAgaWYgKGFjdGlvbk9iamVjdCkgeyBhY3Rpb25PYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkQWN0aW9uKTsgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZmllbGRzICYmIGZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRGaWVsZCBvZiBmaWVsZHMpIHtcbiAgICAgICAgY29uc3QgZmllbGRPYmplY3QgPSB0aGlzLmdldEZpZWxkT2JqZWN0KGNoYW5nZWRGaWVsZC5maWVsZENvZGUpO1xuICAgICAgICBpZiAoZmllbGRPYmplY3QpIHtcbiAgICAgICAgICBmaWVsZE9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRGaWVsZCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJlY29yZFRhYmxlcyAmJiByZWNvcmRUYWJsZXMubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBjaGFuZ2VkVGFibGUgb2YgcmVjb3JkVGFibGVzKSB7XG4gICAgICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZU9iamVjdChjaGFuZ2VkVGFibGUudGFibGVDb2RlKTtcbiAgICAgICAgaWYgKHRhYmxlT2JqZWN0KSB7XG4gICAgICAgICAgdGFibGVPYmplY3QudXBkYXRlRnJvbVNlcnZlcihjaGFuZ2VkVGFibGUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChyZXR1cm5lZEZpbGUgJiYgcmV0dXJuZWRGaWxlLmZpbGUpIHtcbiAgICAgIHRoaXMuZmlsZU1nbXRTZXJ2aWNlcy5zYXZlRmlsZShyZXR1cm5lZEZpbGUuZmlsZSwgcmV0dXJuZWRGaWxlLm5hbWUsIHJldHVybmVkRmlsZS50eXBlKTtcbiAgICB9XG4gICAgdGhpcy5mb3JtU3RydWN0dXJlLmltbXV0YWJsZURhdGEgPSBpbW11dGFibGVEYXRhO1xuICAgIHRoaXMuZm9ybVN0cnVjdHVyZS5leHRyYUluZm8gPSBleHRyYUluZm87XG4gIH1cblxuICAvKipcbiAgICogTWFuZWpvIGRlIGV2ZW50IGhhbmRsZXJzIHBhcmEgYWNjaW9uZXMgc29icmUgZWwgZm9ybXVsYXJpb1xuICAgKi9cblxuICBhZGRTZWN0aW9uQWN0aXZhdGlvbihzZWN0aW9ucywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBzZWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoc2VjdGlvbnMpKSA/IHNlY3Rpb25zIDogW3NlY3Rpb25zXTtcbiAgICBzZWN0aW9uU2V0LmZvckVhY2goKHNlY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25OYW1lXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZFNlY3Rpb25JbmFjdGl2YXRpb24oc2VjdGlvbnMsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3Qgc2VjdGlvblNldCA9IChBcnJheS5pc0FycmF5KHNlY3Rpb25zKSkgPyBzZWN0aW9ucyA6IFtzZWN0aW9uc107XG4gICAgc2VjdGlvblNldC5mb3JFYWNoKChzZWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBY3Rpb25NZXRob2RTdGFydChhY3Rpb25zLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGFjdGlvblNldCA9IChBcnJheS5pc0FycmF5KGFjdGlvbnMpKSA/IGFjdGlvbnMgOiBbYWN0aW9uc107XG4gICAgYWN0aW9uU2V0LmZvckVhY2goKGFjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuZm9ybUFjdGlvbnNTdGFydFthY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkQWN0aW9uTWV0aG9kRmluaXNoKGFjdGlvbnMsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgYWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoYWN0aW9ucykpID8gYWN0aW9ucyA6IFthY3Rpb25zXTtcbiAgICBhY3Rpb25TZXQuZm9yRWFjaCgoYWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk5hbWVdKSB7XG4gICAgICAgIHRoaXMuZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uTmFtZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBsYXVuY2hTZWN0aW9uQWN0aXZhdGlvbihzZWN0aW9uQ29kZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9uT2JqZWN0KHNlY3Rpb25Db2RlKTtcbiAgICBpZiAoIXNlY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZHMgPSB0aGlzLmZvcm1TZWN0aW9uc0FjdGl2YXRlW3NlY3Rpb25Db2RlXTtcbiAgICBpZiAoY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZCBvZiBjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRTZWN0aW9uTWV0aG9kKHNlY3Rpb25PYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGxhdW5jaFNlY3Rpb25JbmFjdGl2YXRpb24oc2VjdGlvbkNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IHNlY3Rpb25PYmplY3QgPSB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbk9iamVjdChzZWN0aW9uQ29kZSk7XG4gICAgaWYgKCFzZWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIGNvbnN0IGNsaWVudFNlY3Rpb25NZXRob2RzID0gdGhpcy5mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25Db2RlXTtcbiAgICBpZiAoY2xpZW50U2VjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZCBvZiBjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRTZWN0aW9uTWV0aG9kKHNlY3Rpb25PYmplY3QpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0QWN0aW9uKGFjdGlvbkNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGFjdGlvbk9iamVjdCA9IHRoaXMuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uT2JqZWN0KSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGFjdGlvbk9iamVjdC5zdGFydCgpO1xuICAgIGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZHMgPSB0aGlzLmZvcm1BY3Rpb25zU3RhcnRbYWN0aW9uQ29kZV07XG4gICAgaWYgKGNsaWVudEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZCBvZiBjbGllbnRBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uUHJvbWlzZSA9IGNsaWVudEFjdGlvbk1ldGhvZChhY3Rpb25PYmplY3QpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNvbnRpbnVlQWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIGFjdGlvbk9iamVjdC5zdG9wKCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFNlcnZlckFjdGlvbihhY3Rpb25PYmplY3QpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXJ2ZXJBY3Rpb24oYWN0aW9uSW5wdXQpIHtcbiAgICBjb25zdCBhY3Rpb24gPSAodHlwZW9mIGFjdGlvbklucHV0ID09PSAnc3RyaW5nJylcbiAgICAgID8gdGhpcy5nZXRBY3Rpb24oYWN0aW9uSW5wdXQpIDogYWN0aW9uSW5wdXQ7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3RGb3JtQWN0aW9uKGFjdGlvbi5hY3Rpb25Db2RlKTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaEFjdGlvbihhY3Rpb24sIGFjdGlvblJlc3VsdCk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheUFjdGlvblNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIGFjdGlvbi5zdG9wKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hBY3Rpb24oYWN0aW9uT2JqZWN0LCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCBmaW5pc2hBY3Rpb25NZXRob2RzID0gdGhpcy5mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb25PYmplY3QuYWN0aW9uQ29kZV07XG4gICAgaWYgKGZpbmlzaEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IGNsaWVudEFjdGlvbk1ldGhvZCBvZiBmaW5pc2hBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uTWV0aG9kKGFjdGlvbk9iamVjdCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgY29tcGxldGVHbG9iYWxBY3Rpb24oYWN0aW9uT2JqZWN0KSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRTZXJ2ZXJBY3Rpb24oYWN0aW9uT2JqZWN0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lamFkb3JlcyBkZSBldmVudG9zIHBhcmEgdmFsaWRhY2lvbmVzIHNvYnJlIGNhbXBvc1xuICAgKi9cblxuICBhZGRGaWVsZElucHV0VmFsaWRhdGlvbihmaWVsZHMsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgZmllbGRTZXQgPSAoQXJyYXkuaXNBcnJheShmaWVsZHMpKSA/IGZpZWxkcyA6IFtmaWVsZHNdO1xuICAgIGZpZWxkU2V0LmZvckVhY2goKGZpZWxkQ29kZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZpZWxkSW5wdXRWYWxpZGF0aW9uW2ZpZWxkQ29kZV0pIHtcbiAgICAgICAgdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZpZWxkSW5wdXRWYWxpZGF0aW9uW2ZpZWxkQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRGaWVsZFZhbGlkYXRpb25TdGFydChmaWVsZHMsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgZmllbGRTZXQgPSAoQXJyYXkuaXNBcnJheShmaWVsZHMpKSA/IGZpZWxkcyA6IFtmaWVsZHNdO1xuICAgIGZpZWxkU2V0LmZvckVhY2goKGZpZWxkQ29kZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdKSB7XG4gICAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRGaWVsZFZhbGlkYXRpb25GaW5pc2goZmllbGRzLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IGZpZWxkU2V0ID0gKEFycmF5LmlzQXJyYXkoZmllbGRzKSkgPyBmaWVsZHMgOiBbZmllbGRzXTtcbiAgICBmaWVsZFNldC5mb3JFYWNoKChmaWVsZENvZGUpID0+IHtcbiAgICAgIGlmICghdGhpcy5maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkQ29kZV0pIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkQ29kZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZENvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRGaWVsZElucHV0VmFsaWRhdGlvbihmaWVsZENvZGU6IHN0cmluZywgaW50cmluc2ljVmFsaWRhdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBmaWVsZFRvVmFsaWRhdGUgPSB0aGlzLmdldEZpZWxkT2JqZWN0KGZpZWxkQ29kZSk7XG4gICAgaWYgKCFmaWVsZFRvVmFsaWRhdGUpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgZmllbGRUb1ZhbGlkYXRlLnNldEVycm9yTWVzc2FnZSgnJyk7XG4gICAgZmllbGRUb1ZhbGlkYXRlLnNldEVycm9yQ29kZSgnMDAnKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbltmaWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNvbnN0IGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UgPSB2YWxpZGF0aW9uTWV0aG9kKGZpZWxkVG9WYWxpZGF0ZSk7XG4gICAgICAgIGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcy5wdXNoKGNvbnRpbnVlVmFsaWRhdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50VmFsaWRhdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydEZpZWxkVmFsaWRhdGlvbihmaWVsZENvZGU6IHN0cmluZywgaW50cmluc2ljVmFsaWRhdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBmaWVsZFRvVmFsaWRhdGUgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgaWYgKCFmaWVsZFRvVmFsaWRhdGUgfHwgIWludHJpbnNpY1ZhbGlkYXRpb24pIHsgcmV0dXJuOyB9XG4gICAgZmllbGRUb1ZhbGlkYXRlLnNldEVycm9yTWVzc2FnZSgnJyk7XG4gICAgZmllbGRUb1ZhbGlkYXRlLnNldEVycm9yQ29kZSgnMDAnKTtcbiAgICBjb25zdCB2YWxpZGF0aW9uQ2FsbGJhY2tzID0gdGhpcy5maWVsZFZhbGlkYXRpb25zU3RhcnRbZmllbGRDb2RlXTtcbiAgICBpZiAodmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHZhbGlkYXRpb25NZXRob2Qgb2YgdmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZSA9IHZhbGlkYXRpb25NZXRob2QoZmllbGRUb1ZhbGlkYXRlKTtcbiAgICAgICAgY2xpZW50VmFsaWRhdGlvblByb21pc2VzLnB1c2goY2xpZW50VmFsaWRhdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50VmFsaWRhdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVWYWxpZGF0aW9uID0gY2xpZW50VmFsaWRhdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVWYWxpZGF0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFNlcnZlckZpZWxkVmFsaWRhdGlvbihmaWVsZFRvVmFsaWRhdGUpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oaW5wdXRGaWVsZCkge1xuICAgIGNvbnN0IGZpZWxkT2JqID0gKHR5cGVvZiBpbnB1dEZpZWxkID09PSAnc3RyaW5nJylcbiAgICAgID8gdGhpcy5nZXRGaWVsZChpbnB1dEZpZWxkKSA6IGlucHV0RmllbGQ7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IHZhbGlkYXRpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChmaWVsZE9iai5iYWNrZW5kKSB7XG4gICAgICBmaWVsZE9iai52YWxpZGF0aW5nID0gdHJ1ZTtcbiAgICAgIHZhbGlkYXRpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy52YWxpZGF0ZSwgZmllbGRPYmouZmllbGRDb2RlKTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLmZpbmlzaEZpZWxkVmFsaWRhdGlvbihmaWVsZE9iaiwgdmFsaWRhdGlvblJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGZpZWxkT2JqLnNldEVycm9yQ29kZSh0aGlzLmVycm9yQ29kZSk7XG4gICAgICBmaWVsZE9iai5zZXRFcnJvck1lc3NhZ2UodGhpcy5lcnJvck1lc3NhZ2UpO1xuICAgICAgdGhpcy5kaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIGZpZWxkT2JqLnZhbGlkYXRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaEZpZWxkVmFsaWRhdGlvbihmaWVsZE9iamVjdCwgdmFsaWRhdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLmZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRPYmplY3QuZmllbGRDb2RlXTtcbiAgICBpZiAodmFsaWRhdGlvbkNhbGxiYWNrcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godmFsaWRhdGlvbk1ldGhvZChmaWVsZE9iamVjdCwgdmFsaWRhdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNvbnRpbnVlRmllbGRWYWxpZGF0aW9uKGZpZWxkQ29kZSkge1xuICAgIHJldHVybiB0aGlzLnN0YXJ0U2VydmVyRmllbGRWYWxpZGF0aW9uKGZpZWxkQ29kZSk7XG4gIH1cblxuICAvKipcbiAgICogTWFuZWphZG9yZXMgZGUgZXZlbnRvcyBwYXJhIGFjY2lvbmVzIHNvYnJlIFRhYmxhc1xuICAgKi9cblxuICBhZGRUYWJsZUFjdGlvblN0YXJ0KHRhYmxlTmFtZSwgYWN0aW9uQ29kZSwgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVOYW1lKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlubGluZUFjdGlvbk9iamVjdCA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbk9iamVjdChhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWlubGluZUFjdGlvbk9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy50YWJsZUFjdGlvbnNTdGFydFt0YWJsZU5hbWVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy50YWJsZUFjdGlvbnNTdGFydFt0YWJsZU5hbWVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICBpZiAoIXRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdID0gW107XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgfVxuXG4gIGFkZFRhYmxlQWN0aW9uRmluaXNoKHRhYmxlTmFtZSwgYWN0aW9uQ29kZSwgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVOYW1lKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGlubGluZUFjdGlvbk9iamVjdCA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbk9iamVjdChhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWlubGluZUFjdGlvbk9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy50YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVOYW1lXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZU5hbWVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICBpZiAoIXRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdID0gW107XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgfVxuXG4gIGFkZFRhYmxlU2VsZWN0aW9uU3RhcnQodGFibGVOYW1lLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMudGFibGVTZWxlY3Rpb25zU3RhcnRbdGFibGVOYW1lXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydFt0YWJsZU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMudGFibGVTZWxlY3Rpb25zU3RhcnRbdGFibGVOYW1lXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVTZWxlY3Rpb25GaW5pc2godGFibGVOYW1lLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMudGFibGVTZWxlY3Rpb25zRmluaXNoW3RhYmxlTmFtZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVTZWxlY3Rpb25zRmluaXNoW3RhYmxlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbnNGaW5pc2hbdGFibGVOYW1lXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVHZXREYXRhU3RhcnQodGFibGVOYW1lLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMudGFibGVHZXREYXRhU3RhcnRbdGFibGVOYW1lXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUdldERhdGFTdGFydFt0YWJsZU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSBbXTtcbiAgICAgIHRoaXMudGFibGVHZXREYXRhU3RhcnRbdGFibGVOYW1lXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVHZXREYXRhRmluaXNoKHRhYmxlTmFtZSwgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVOYW1lKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLnRhYmxlR2V0RGF0YUZpbmlzaFt0YWJsZU5hbWVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlR2V0RGF0YUZpbmlzaFt0YWJsZU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgIHRoaXMudGFibGVHZXREYXRhRmluaXNoW3RhYmxlTmFtZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIHRhYmxlRXZlbnRIYW5kbGVyc1tHRVRfREFUQV9BQ1RJT05dID0gY2FsbGJhY2tNZXRob2Q7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRXZlbnQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgYWN0aW9uLFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCBhY3Rpb24sIHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiBHTE9CQUxfQUNUSU9OLFxuICAgICAgICBhY3Rpb25Db2RlXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudGFibGVBY3Rpb24sIGFjdGlvblN1YmplY3QpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmluaXNoVGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlR2xvYmFsQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVBY3Rpb24odGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCBhY3Rpb25EZXRhaWwgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uQ29kZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB7IHJlY29yZElkLCByZWNvcmREYXRhIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgcmVjb3JkSWQsXG4gICAgICByZWNvcmREYXRhXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlckFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIHJlY29yZElkLCByZWNvcmREYXRhIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IHRoaXMuZm9ybUNvbmZpZy50YWJsZUFjdGlvbnMuaW5saW5lLFxuICAgICAgICBhY3Rpb25Db2RlLFxuICAgICAgICB0YWJsZVJlY29yZElkOiByZWNvcmRJZCxcbiAgICAgICAgdGFibGVSZWNvcmREYXRhOiByZWNvcmREYXRhXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudGFibGVBY3Rpb24sIGFjdGlvblN1YmplY3QpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGNvbXBsZXRlSW5saW5lQWN0aW9uKHRhYmxlQWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRUYWJsZVNlcnZlckFjdGlvbih0YWJsZUFjdGlvbik7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlUmVjb3JkU2VsZWN0aW9uKHRhYmxlQWN0aW9uRXZlbnQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uRGV0YWlsIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgeyByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlU2VsZWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICByZWNvcmRJZCxcbiAgICAgIHJlY29yZERhdGFcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVTZWxlY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBpZiAodGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZVNlbGVjdGlvbk1ldGhvZCBvZiB0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlU2VsZWN0aW9uTWV0aG9kKHRhYmxlU2VsZWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlclJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIHRhYmxlQ29kZSwgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IHRhYmxlU2VsZWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKHRhYmxlT2JqZWN0LnNlbGVjdGlvbkJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3Q6IGFueSA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLmZvcm1Db25maWcudGFibGVBY3Rpb25zLnJvd1NlbGVjdGlvbixcbiAgICAgICAgYWN0aW9uQ29kZTogbnVsbCxcbiAgICAgICAgdGFibGVSZWNvcmRJZDogcmVjb3JkSWQsXG4gICAgICAgIHRhYmxlUmVjb3JkRGF0YTogcmVjb3JkRGF0YVxuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZVJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUgfSA9IHRhYmxlU2VsZWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVTZWxlY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVTZWxlY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVTZWxlY3Rpb25NZXRob2QodGFibGVTZWxlY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCBhY3Rpb25EZXRhaWwgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uQ29kZSkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB7IHNlbGVjdGVkUmVjb3JkcyB9ID0gYWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IGFjdGlvbiA9IHRhYmxlT2JqZWN0LmdldEFjdGlvbihhY3Rpb25Db2RlKTtcbiAgICBpZiAoIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgYWN0aW9uLFxuICAgICAgdGFibGVDb2RlLFxuICAgICAgYWN0aW9uQ29kZSxcbiAgICAgIHNlbGVjdGVkUmVjb3Jkc1xuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlclNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlLCBzZWxlY3RlZFJlY29yZHMgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnLnRhYmxlQWN0aW9ucy5zZWxlY3Rpb24sXG4gICAgICAgIGFjdGlvbkNvZGUsXG4gICAgICAgIHNlbGVjdGVkUmVjb3Jkc1xuICAgICAgfTtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnRhYmxlQWN0aW9uLCBhY3Rpb25TdWJqZWN0KTtcbiAgICAgIGZpbmlzaCA9ICF0aGlzLmVycm9yT2NjdXJlZCgpO1xuICAgIH1cbiAgICBpZiAoZmluaXNoKSB7XG4gICAgICB0aGlzLmZpbmlzaFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgICAgdGhpcy5jaGFuZ2VTdGF0ZShhY3Rpb24ubmV3U3RhdGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZVNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlR2V0RGF0YSh0YWJsZUFjdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIHRhYmxlQ29kZVxuICAgIH07XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUdldERhdGFTdGFydFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlckdldERhdGEodGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckdldERhdGEodGFibGVBY3Rpb25EZXRhaWwpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCB0YWJsZUNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7IHRhYmxlQ29kZSB9O1xuICAgIGNvbnN0IGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy5nZXRUYWJsZURhdGEsIGFjdGlvblN1YmplY3QpO1xuICAgIGlmICh0aGlzLmVycm9yT2NjdXJlZCgpKSB7XG4gICAgICB0aGlzLmRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVHZXREYXRhKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgdGFibGVBY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW3RhYmxlQWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBjaGVja1NlY3Rpb25SZXF1aXJlZEZpZWxkcyhzZWN0aW9uQ29kZSwgcmVxRmllbGRNZXNzYWdlPykge1xuICAgIHRoaXMuY2xlYW5FcnJvckZpZWxkcyhudWxsLCBzZWN0aW9uQ29kZSk7XG4gICAgY29uc3QgcmVxdWlyZWRGaWVsZE1lc3NhZ2UgPSByZXFGaWVsZE1lc3NhZ2UgPz8gdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkXG4gICAgY29uc3QgbnVtRXJyb3JzID0gdGhpcy50YWdGaWVsZHNXaXRoRXJyb3IodGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKG51bGwsXG4gICAgICBzZWN0aW9uQ29kZSksIG51bGwsIHJlcXVpcmVkRmllbGRNZXNzYWdlKTtcbiAgICByZXR1cm4gKG51bUVycm9ycyA9PT0gMCk7XG4gIH1cblxuICB2YWxpZGF0ZVNlY3Rpb25Db25zaXN0ZW5jeShzZWN0aW9uQ29kZSwgcmVxRmllbGRNZXNzYWdlPykge1xuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IGNvbXBsZXRlRmllbGRzID0gdGhpcy5jaGVja1NlY3Rpb25SZXF1aXJlZEZpZWxkcyhzZWN0aW9uQ29kZSwgcmVxRmllbGRNZXNzYWdlKTtcbiAgICBpZiAoIWNvbXBsZXRlRmllbGRzKSB7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRzKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHZhbGlkYXRpb25FcnJvciA9IGZhbHNlO1xuICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZHMgPSB0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMobnVsbCwgc2VjdGlvbkNvZGUpO1xuICAgIGlmIChyZXF1aXJlZEVtcHR5RmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRzKTtcbiAgICAgIHRoaXMudGFnRmllbGRzV2l0aEVycm9yKHJlcXVpcmVkRW1wdHlGaWVsZHMsIG51bGwsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZCk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkQ29kZSBvZiByZXF1aXJlZEVtcHR5RmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHJlcXVpcmVkRW1wdHlGaWVsZCA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICAgICAgaWYgKHJlcXVpcmVkRW1wdHlGaWVsZCAmJiByZXF1aXJlZEVtcHR5RmllbGQud2lkZ2V0XG4gICAgICAgICAgJiYgcmVxdWlyZWRFbXB0eUZpZWxkLndpZGdldC5mb2N1cykge1xuICAgICAgICAgIHJlcXVpcmVkRW1wdHlGaWVsZC53aWRnZXQuZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0aW9uSXNzdWVGaWVsZHMgPSB0aGlzLmdldEZpZWxkc1dpdGhWYWxpZGF0aW9uSXNzdWVzKG51bGwsXG4gICAgICBzZWN0aW9uQ29kZSk7XG4gICAgaWYgKCF2YWxpZGF0aW9uRXJyb3IgJiYgdmFsaWRhdGlvbklzc3VlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25FcnJvciA9IHRydWU7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25GaWVsZHMpO1xuICAgICAgZm9yIChjb25zdCBmaWVsZENvZGUgb2YgdmFsaWRhdGlvbklzc3VlRmllbGRzKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRpb25Jc3N1ZUZpZWxkID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgICAgICBpZiAodmFsaWRhdGlvbklzc3VlRmllbGQgJiYgdmFsaWRhdGlvbklzc3VlRmllbGQud2lkZ2V0XG4gICAgICAgICAgJiYgdmFsaWRhdGlvbklzc3VlRmllbGQud2lkZ2V0LmZvY3VzKSB7XG4gICAgICAgICAgdmFsaWRhdGlvbklzc3VlRmllbGQud2lkZ2V0LmZvY3VzKCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRpb25FcnJvcjtcbiAgfVxuXG4gIGNvcHlUYWJsZVJlY29yZFRvRmllbGRzKHRhYmxlT2JqLCBtYXBwaW5nVGFibGUgPSBudWxsKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlT2JqLnRhYmxlQ29kZSk7XG4gICAgY29uc3QgdGFibGVSZWNvcmQgPSB0YWJsZU9iamVjdC5nZXRUYWJsZVJlY29yZCh0YWJsZU9iai5yZWNvcmRJZCk7XG4gICAgY29uc3QgY29sdW1uTmFtZXMgPSB0YWJsZU9iamVjdC5jb2x1bW5OYW1lcztcbiAgICBmb3IgKGNvbnN0IGNvbHVtbk5hbWUgb2YgY29sdW1uTmFtZXMpIHtcbiAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gdGFibGVSZWNvcmQuZ2V0RmllbGRWYWx1ZShjb2x1bW5OYW1lKSA/PyAnJztcbiAgICAgIGNvbnN0IGZpZWxkQ29kZSA9IG1hcHBpbmdUYWJsZT8uW2NvbHVtbk5hbWVdID8/IGNvbHVtbk5hbWU7XG4gICAgICB0aGlzLnNldEZpZWxkVmFsdWUoZmllbGRDb2RlLCBjb2x1bW5WYWx1ZSk7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgLyoqXG4gICAqIFNvcG9ydGUgcmVnaXN0cm9zIGVuIHRhYmxhcyBxdWUgc2UgZWRpdGFuIGVuIGNhbXBvcyBkZWwgZm9ybXVsYXJpb1xuICAgKi9cblxuICBkZWZpbmVFZGl0aW9uVGFibGUodGFibGVFZGl0aW9uRGVmKSB7XG4gICAgY29uc3QgeyBjb2x1bW5GaWVsZE1hcHBpbmcsIHJlY29yZENhcHR1cmVGaWVsZHMsIHN0YXJ0Q29sbGFwc2VkIH0gPSB0YWJsZUVkaXRpb25EZWY7XG4gICAgdGFibGVFZGl0aW9uRGVmLnN0YXJ0Q29sbGFwc2VkID0gKHR5cGVvZiBzdGFydENvbGxhcHNlZCAhPT0gJ3VuZGVmaW5lZCcpXG4gICAgICA/IHN0YXJ0Q29sbGFwc2VkIDogdHJ1ZTtcblxuICAgIGNvbnN0IGZpZWxkc01hcHBpbmdUYWJsZSA9IHt9O1xuICAgIGNvbnN0IGZpZWxkc1RvQ2xlYXIgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbHVtbk1hcCBvZiBjb2x1bW5GaWVsZE1hcHBpbmcpIHtcbiAgICAgIGNvbnN0IFtjb2x1bW5OYW1lLCBmb3JtRmllbGRdID0gY29sdW1uTWFwO1xuICAgICAgZmllbGRzTWFwcGluZ1RhYmxlW2NvbHVtbk5hbWVdID0gZm9ybUZpZWxkO1xuICAgICAgZmllbGRzVG9DbGVhci5wdXNoKGZvcm1GaWVsZCk7XG4gICAgfVxuICAgIHRhYmxlRWRpdGlvbkRlZi5maWVsZHNNYXBwaW5nVGFibGUgPSBmaWVsZHNNYXBwaW5nVGFibGU7XG4gICAgdGFibGVFZGl0aW9uRGVmLmZpZWxkc1RvQ2xlYXIgPSBmaWVsZHNUb0NsZWFyO1xuXG4gICAgY29uc3QgeyB0YWJsZU5hbWUsIG5ld1JlY29yZEFjdGlvbk5hbWUsIHNhdmVSZWNvcmRBY3Rpb25OYW1lLFxuICAgICAgY2FuY2VsU2F2ZVJlY29yZEFjdGlvbk5hbWUsIHRhYmxlRWRpdFJlY29yZEFjdGlvbk5hbWUsIGVuYWJsZVJlY29yZEVkaXRpb25cbiAgICB9ID0gdGFibGVFZGl0aW9uRGVmO1xuXG4gICAgdGhpcy5hZGRBY3Rpb25NZXRob2RTdGFydChuZXdSZWNvcmRBY3Rpb25OYW1lLCAoKSA9PiB7XG4gICAgICB0aGlzLmNsZWFuRmllbGRzKGZpZWxkc1RvQ2xlYXIsIG51bGwpO1xuICAgICAgdGhpcy5zaG93RmllbGRzKHJlY29yZENhcHR1cmVGaWVsZHMpO1xuICAgICAgaWYgKCFlbmFibGVSZWNvcmRFZGl0aW9uKSB7XG4gICAgICAgIHRoaXMuZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpO1xuICAgICAgfVxuICAgICAgdGhpcy5oaWRlQWN0aW9uKG5ld1JlY29yZEFjdGlvbk5hbWUpO1xuICAgICAgdGhpcy5zaG93QWN0aW9uKGNhbmNlbFNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICAgIHRoaXMuc2hvd0FjdGlvbihzYXZlUmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgICBjb25zdCB7IHJlY29yZEVkaXRpb25WYWxpZGF0ZSwgZGlzYWJsZVJlY29yZEVkaXRpb24gfSA9IHRhYmxlRWRpdGlvbkRlZjtcbiAgICB0aGlzLmFkZEFjdGlvbk1ldGhvZFN0YXJ0KHNhdmVSZWNvcmRBY3Rpb25OYW1lLCAoKSA9PiB7XG4gICAgICByZXR1cm4gKCFyZWNvcmRFZGl0aW9uVmFsaWRhdGUpID8gdGhpcy5yZWNvcmRFZGl0aW9uVmFsaWRhdGUodGFibGVFZGl0aW9uRGVmKVxuICAgICAgICA6IHJlY29yZEVkaXRpb25WYWxpZGF0ZSh0YWJsZUVkaXRpb25EZWYpO1xuICAgIH0pO1xuICAgIHRoaXMuYWRkQWN0aW9uTWV0aG9kRmluaXNoKHNhdmVSZWNvcmRBY3Rpb25OYW1lLCAoKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZXJyb3JPY2N1cmVkKCkpIHtcbiAgICAgICAgcmV0dXJuICghZGlzYWJsZVJlY29yZEVkaXRpb24pID8gdGhpcy5kaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgICAgOiBkaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHRoaXMuYWRkQWN0aW9uTWV0aG9kU3RhcnQoY2FuY2VsU2F2ZVJlY29yZEFjdGlvbk5hbWUsICgpID0+IHtcbiAgICAgIHJldHVybiAoIWRpc2FibGVSZWNvcmRFZGl0aW9uKSA/IHRoaXMuZGlzYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmKVxuICAgICAgICA6IGRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRUYWJsZUFjdGlvblN0YXJ0KHRhYmxlTmFtZSwgdGFibGVFZGl0UmVjb3JkQWN0aW9uTmFtZSxcbiAgICAgICh0YmxBY3RPYmopID0+IHtcbiAgICAgICAgcmV0dXJuICghZW5hYmxlUmVjb3JkRWRpdGlvbilcbiAgICAgICAgICA/IHRoaXMuZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYsIHRibEFjdE9iailcbiAgICAgICAgICA6IGVuYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmLCB0YmxBY3RPYmopO1xuICAgICAgfSk7XG4gICAgaWYgKHRhYmxlRWRpdGlvbkRlZi5zdGFydENvbGxhcHNlZCkge1xuICAgICAgcmV0dXJuICghdGFibGVFZGl0aW9uRGVmLmRpc2FibGVSZWNvcmRFZGl0aW9uKVxuICAgICAgICA/IHRoaXMuZGlzYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmKVxuICAgICAgICA6IHRhYmxlRWRpdGlvbkRlZi5kaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gKCF0YWJsZUVkaXRpb25EZWYuZW5hYmxlUmVjb3JkRWRpdGlvbilcbiAgICAgICAgPyB0aGlzLmVuYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmKVxuICAgICAgICA6IHRhYmxlRWRpdGlvbkRlZi5lbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZiwgbnVsbCk7XG4gICAgfVxuICB9XG5cbiAgZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYsIHRhYmxlQWN0aW9uT2JqZWN0ID0gbnVsbCkge1xuICAgIGlmICh0YWJsZUFjdGlvbk9iamVjdCkge1xuICAgICAgdGhpcy5jb3B5VGFibGVSZWNvcmRUb0ZpZWxkcyh0YWJsZUFjdGlvbk9iamVjdCwgdGFibGVFZGl0aW9uRGVmLmZpZWxkc01hcHBpbmdUYWJsZSk7XG4gICAgfVxuICAgIHRoaXMuc2hvd0ZpZWxkcyh0YWJsZUVkaXRpb25EZWYucmVjb3JkQ2FwdHVyZUZpZWxkcyk7XG4gICAgdGhpcy5oaWRlQWN0aW9uKHRhYmxlRWRpdGlvbkRlZi5uZXdSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICB0aGlzLnNob3dBY3Rpb24odGFibGVFZGl0aW9uRGVmLmNhbmNlbFNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICB0aGlzLnNob3dBY3Rpb24odGFibGVFZGl0aW9uRGVmLnNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICBpZiAodGFibGVFZGl0aW9uRGVmLmZpZWxkc1RvVHJpZ2dlclZhbGlkYXRpb25cbiAgICAgICYmIHRhYmxlRWRpdGlvbkRlZi5maWVsZHNUb1RyaWdnZXJWYWxpZGF0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgZmllbGROYW1lIG9mIHRhYmxlRWRpdGlvbkRlZi5maWVsZHNUb1RyaWdnZXJWYWxpZGF0aW9uKSB7XG4gICAgICAgIHRoaXMuc3RhcnRGaWVsZFZhbGlkYXRpb24oZmllbGROYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBkaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZURlZmluaXRpb24pIHtcbiAgICB0aGlzLmNsZWFuRmllbGRzKHRhYmxlRGVmaW5pdGlvbi5maWVsZHNUb0NsZWFyLCBudWxsKTtcbiAgICB0aGlzLmhpZGVGaWVsZHModGFibGVEZWZpbml0aW9uLnJlY29yZENhcHR1cmVGaWVsZHMpO1xuICAgIHRoaXMuc2hvd0FjdGlvbih0YWJsZURlZmluaXRpb24ubmV3UmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgdGhpcy5oaWRlQWN0aW9uKHRhYmxlRGVmaW5pdGlvbi5jYW5jZWxTYXZlUmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgdGhpcy5oaWRlQWN0aW9uKHRhYmxlRGVmaW5pdGlvbi5zYXZlUmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZWNvcmRFZGl0aW9uVmFsaWRhdGUodGFibGVFZGl0aW9uRGVmKSB7XG4gICAgY29uc3QgeyByZWNvcmRDYXB0dXJlRmllbGRzIH0gPSB0YWJsZUVkaXRpb25EZWY7XG4gICAgbGV0IHZhbGlkYXRpb25PayA9IHRydWU7XG4gICAgY29uc3QgcmVxdWlyZWRFbXB0eUZpZWxkcyA9IHRoaXMuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhyZWNvcmRDYXB0dXJlRmllbGRzLCBudWxsKTtcbiAgICBpZiAocmVxdWlyZWRFbXB0eUZpZWxkcy5sZW5ndGggPiAwKSB7XG4gICAgICB2YWxpZGF0aW9uT2sgPSBmYWxzZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IodGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy50eXBlV2FybmluZyxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uVGl0bGUsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZHMpO1xuICAgICAgdGhpcy50YWdGaWVsZHNXaXRoRXJyb3IocmVxdWlyZWRFbXB0eUZpZWxkcywgbnVsbCxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkKTtcbiAgICB9XG4gICAgY29uc3QgdmFsaWRhdGlvbklzc3VlRmllbGRzID0gdGhpcy5nZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3VlcyhyZWNvcmRDYXB0dXJlRmllbGRzLCBudWxsKTtcbiAgICBpZiAodmFsaWRhdGlvbklzc3VlRmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25PayA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSwgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uRmllbGRzKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRpb25PaztcbiAgfVxufVxuIl19
1350
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzaWMtZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3R1YWluLW5nLWZvcm1zLWxpYi9zcmMvbGliL2NvbXBvbmVudHMvZm9ybXMvYmFzaWMtZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUM5RSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFFakUsTUFBTSxlQUFlLEdBQUcsbUJBQW1CLENBQUM7QUFDNUMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBQy9CLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQztBQUMvQixNQUFNLGVBQWUsR0FBRyxTQUFTLENBQUM7QUFFbEMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO0FBQzFCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUt0QixNQUFNLE9BQU8sa0JBQWtCO0lBcUM3QixZQUNZLGtCQUF5QyxFQUN6QyxhQUFxQyxFQUNyQyxnQkFBMEM7UUFGMUMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUF1QjtRQUN6QyxrQkFBYSxHQUFiLGFBQWEsQ0FBd0I7UUFDckMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUEwQjtRQWxDdEQsY0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNmLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsRUFBRSxDQUFDO1FBRWpCLGtCQUFhLEdBQXlCLElBQUksQ0FBQztRQUMzQyxp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QXNCLENBQUMsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDbkYsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xDLFlBQVksR0FBRyxLQUFLLENBQUM7WUFDckIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsRUFDMUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLEVBQ2xELElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDckQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixFQUFFLElBQUksRUFDL0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUNyRDtRQUNELE1BQU0scUJBQXFCLEdBQUcsSUFBSSxDQUFDLDZCQUE2QixDQUFDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzVGLElBQUkscUJBQXFCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUNwQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3JCLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLEVBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsa0JBQWtCLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztTQUM1RztRQUNELE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7OztZQTd5Q0YsU0FBUyxTQUFDO2dCQUNULFFBQVEsRUFBRSwyQkFBMkI7YUFDdEM7OztZQWZRLHFCQUFxQjtZQUNyQixzQkFBc0I7WUFDdEIsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtU3RydWN0dXJlQW5kRGF0YSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybXMvZm9ybSc7XG5pbXBvcnQgeyBMaWJGb3JtTWFuYWdlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9mb3JtLW1hbmFnZXIuc2VydmljZSc7XG5pbXBvcnQgeyBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvZXZlbnQtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IExpYkZpbGVNYW5hZ2VtZW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2ZpbGUtbWFuYWdlci5zZXJ2aWNlJztcbmltcG9ydCB7IGZvcm1BY3Rpb25zIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3Jtcy9mb3JtLmNvbnN0YW50cyc7XG5cbmNvbnN0IFBBWUxPQURfVkVSU0lPTiA9ICdUVUFJTkVYQ0hBTkdFXzEuMCc7XG5jb25zdCBJTkxJTkVfQUNUSU9OID0gJ0lOTElORSc7XG5jb25zdCBHTE9CQUxfQUNUSU9OID0gJ0dMT0JBTCc7XG5jb25zdCBHRVRfREFUQV9BQ1RJT04gPSAnR0VUREFUQSc7XG5cbmNvbnN0IFNVQkpFQ1QgPSAnc3ViamVjdCc7XG5jb25zdCBUT0tFTiA9ICd0b2tlbic7XG5cbkBDb21wb25lbnQoe1xuICB0ZW1wbGF0ZTogYDxuZy1jb250ZW50PjwvbmctY29udGVudD5gXG59KVxuZXhwb3J0IGNsYXNzIEJhc2ljRm9ybUNvbXBvbmVudCB7XG4gIGZvcm1Db25maWc6IGFueTtcbiAgbmFtZTogc3RyaW5nO1xuICBfZm9ybVJvdXRlOiBzdHJpbmc7XG4gIGZvcm1TdWJqZWN0OiBzdHJpbmc7XG4gIF9lcnJvclR5cGU6ICcnO1xuICBlcnJvckNvZGUgPSAnJztcbiAgZXJyb3JNZXNzYWdlID0gJyc7XG4gIGVycm9yRGV0YWlsID0gJyc7XG5cbiAgZm9ybVN0cnVjdHVyZTogRm9ybVN0cnVjdHVyZUFuZERhdGEgPSBudWxsO1xuICBjb250cm9sVG9rZW4gPSBudWxsO1xuICBvcmlnaW5Ub2tlbjogc3RyaW5nO1xuICBpbnB1dERhdGFGaWVsZHMgPSB7fTtcbiAgZXh0cmFEYXRhOiBhbnkgPSB7fTtcblxuICBkZWZpbml0aW9uT2J0YWluZWQgPSBmYWxzZTtcbiAgZm9ybVZpc2libGUgPSBmYWxzZTtcbiAgaW5TZXJ2ZXJQcm9jZXNzID0gZmFsc2U7XG5cbiAgZm9ybVNlY3Rpb25zQWN0aXZhdGUgPSB7fTtcbiAgZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZSA9IHt9O1xuICBmb3JtQWN0aW9uc1N0YXJ0ID0ge307XG4gIGZvcm1BY3Rpb25zRmluaXNoID0ge307XG4gIGZpZWxkSW5wdXRWYWxpZGF0aW9uID0ge307XG4gIGZpZWxkVmFsaWRhdGlvbnNTdGFydCA9IHt9O1xuICBmaWVsZFZhbGlkYXRpb25zRmluaXNoID0ge307XG4gIC8vIENhbGxiYWNrIGRlIGFjY2lvbmVzIGRlIHRhYmxhc1xuICB0YWJsZVNlbGVjdGlvbnNTdGFydCA9IHt9O1xuICB0YWJsZVNlbGVjdGlvbnNGaW5pc2ggPSB7fTtcbiAgdGFibGVBY3Rpb25zU3RhcnQgPSB7fTtcbiAgdGFibGVBY3Rpb25zRmluaXNoID0ge307XG4gIHRhYmxlR2V0RGF0YVN0YXJ0ID0ge307XG4gIHRhYmxlR2V0RGF0YUZpbmlzaCA9IHt9O1xuXG4gIHByb3RlY3RlZCBfZXZlbnRFbWl0ZXI6IExpYkV2ZW50TWFuYWdlclNlcnZpY2U7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJvdGVjdGVkIGZvcm1NYW5hZ2VyU2VydmljZTogTGliRm9ybU1hbmFnZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBfZXZlbnRNYW5hZ2VyOiBMaWJFdmVudE1hbmFnZXJTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBmaWxlTWdtdFNlcnZpY2VzOiBMaWJGaWxlTWFuYWdlbWVudFNlcnZpY2UpIHtcbiAgICB0aGlzLl9ldmVudEVtaXRlciA9IHRoaXMuX2V2ZW50TWFuYWdlcjtcbiAgICB0aGlzLmNsZWFuU3RhcnQoKTtcbiAgICB0aGlzLmN1c3RvbVByZVByb2Nlc3NpbmcoKTtcbiAgfVxuXG4gIHNldENvbmZpZyhmb3JtQ29uZmlnKSB7XG4gICAgdGhpcy5mb3JtQ29uZmlnID0gZm9ybUNvbmZpZztcbiAgfVxuXG4gIGNsZWFuU3RhcnQoKSB7XG4gICAgdGhpcy5fZXJyb3JUeXBlID0gJyc7XG4gICAgdGhpcy5lcnJvckNvZGUgPSAnJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSAnJztcbiAgICB0aGlzLmZvcm1TdHJ1Y3R1cmUgPSBudWxsO1xuICAgIHRoaXMuY29udHJvbFRva2VuID0gbnVsbDtcbiAgICB0aGlzLmlucHV0RGF0YUZpZWxkcyA9IHt9O1xuICAgIHRoaXMuZGVmaW5pdGlvbk9idGFpbmVkID0gZmFsc2U7XG4gICAgLy8gU2UgbGltcGlhbiBsb3MgbWFuZWphZG9yZXMgZGUgZXZlbnRvc1xuICAgIHRoaXMuZm9ybVZpc2libGUgPSBmYWxzZTtcbiAgICB0aGlzLmluU2VydmVyUHJvY2VzcyA9IGZhbHNlO1xuICAgIHRoaXMuZm9ybVNlY3Rpb25zQWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLmZvcm1TZWN0aW9uc0luYWN0aXZhdGUgPSB7fTtcbiAgICB0aGlzLmZvcm1BY3Rpb25zU3RhcnQgPSB7fTtcbiAgICB0aGlzLmZvcm1BY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy5maWVsZElucHV0VmFsaWRhdGlvbiA9IHt9O1xuICAgIHRoaXMuZmllbGRWYWxpZGF0aW9uc1N0YXJ0ID0ge307XG4gICAgdGhpcy5maWVsZFZhbGlkYXRpb25zRmluaXNoID0ge307XG4gICAgdGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMudGFibGVTZWxlY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy50YWJsZUFjdGlvbnNTdGFydCA9IHt9O1xuICAgIHRoaXMudGFibGVBY3Rpb25zRmluaXNoID0ge307XG4gICAgdGhpcy50YWJsZUdldERhdGFTdGFydCA9IHt9O1xuICAgIHRoaXMudGFibGVHZXREYXRhRmluaXNoID0ge307XG4gIH1cblxuICBnZXQgY3VycmVudFN0YXRlKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnN0YXRlOyB9XG4gIHNldCBjdXJyZW50U3RhdGUoc3RhdGUpIHsgdGhpcy5mb3JtU3RydWN0dXJlLmNoYW5nZVN0YXRlKHN0YXRlKTsgfVxuICBnZXQgY3VycmVudE1vZGUoKSB7IHJldHVybiB0aGlzLmN1cnJlbnRTdGF0ZTsgfVxuICBnZXQgaW1tdXRhYmxlRGF0YSgpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5pbW11dGFibGVEYXRhIH1cbiAgZ2V0IGV4dHJhSW5mbygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5leHRyYUluZm8gfVxuXG4gIC8vIE3DqXRvZG9zIFBhc3MtdGhyb3VnaCBoYWNpYSBlbCBjb250ZW5pZG8geSBlc3RydWN0dXJhIGRlbCBmb3JtdWxhcmlvXG4gIHN1cHBvcnRTdGF0ZShzdGF0ZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnN1cHBvcnRTdGF0ZShzdGF0ZSk7IH1cbiAgc3VwcG9ydE1vZGUoc3RhdGUpIHsgcmV0dXJuIHRoaXMuc3VwcG9ydFN0YXRlKHN0YXRlKTsgfVxuICBnZXRUaXRsZSgpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS50aXRsZTsgfVxuICBzZXRUaXRsZSh0aXRsZTogc3RyaW5nKSB7IHRoaXMuZm9ybVN0cnVjdHVyZS50aXRsZSA9IHRpdGxlOyB9XG4gIGdldEltbXV0YWJsZUVsZW1lbnQobmFtZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEltbXV0YWJsZUVsZW1lbnQobmFtZSk7IH1cbiAgZ2V0RXh0cmFJbmZvKG5hbWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRFeHRyYUluZm8obmFtZSk7IH1cbiAgY2xlYW5EYXRhKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmNsZWFuRGF0YSgpOyB9XG4gIGdldEZpZWxkcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHMoKTsgfVxuICBnZXRGaWVsZE5hbWVzKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkTmFtZXMoKTsgfVxuICBnZXRGaWVsZE9iamVjdChlbGVtZW50SWQpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZE9iamVjdChlbGVtZW50SWQpOyB9XG4gIGdldEZpZWxkKGZpZWxkQ29kZSkgeyByZXR1cm4gdGhpcy5nZXRGaWVsZE9iamVjdChmaWVsZENvZGUpOyB9XG4gIGVuYWJsZUZpZWxkKGZpZWxkQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUZpZWxkKGZpZWxkQ29kZSk7IH1cbiAgZGlzYWJsZUZpZWxkKGZpZWxkQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVGaWVsZChmaWVsZENvZGUpOyB9XG4gIGdldEZpZWxkVmFsdWUoZmllbGRDb2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0RmllbGRWYWx1ZShmaWVsZENvZGUpOyB9XG4gIGdldEZpZWxkc1ZhbHVlcyhmaWVsZENvZGVzQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHNWYWx1ZXMoZmllbGRDb2Rlc0FycmF5KTsgfVxuICBnZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0RmllbGRPcHRpb25zKGZpZWxkQ29kZSk7IH1cbiAgc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGZpZWxkVmFsdWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zZXRGaWVsZFZhbHVlKGZpZWxkQ29kZSwgZmllbGRWYWx1ZSk7IH1cbiAgc2V0RmllbGRSZXF1aXJlZChmaWVsZENvZGUsIHJlcXVpcmVkOiBib29sZWFuKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRSZXF1aXJlZChmaWVsZENvZGUsIHJlcXVpcmVkKTsgfVxuICBzZXRGaWVsZEVycm9yTWVzc2FnZShmaWVsZENvZGUsIGVycm9yTWVzc2FnZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNldEZpZWxkRXJyb3JNZXNzYWdlKGZpZWxkQ29kZSwgZXJyb3JNZXNzYWdlKTsgfVxuICBzZXRGaWVsZEVycm9yKGNvZGUsIG1lc3NhZ2UsIHR5cGUgPSAnZXJyb3InKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRFcnJvcihjb2RlLCBtZXNzYWdlLCB0eXBlKTsgfVxuICBzZXRGaWVsZEludHJpbnNpY0Vycm9yTWVzc2FnZShjb2RlLCBtZXNzYWdlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2V0RmllbGRJbnRyaW5zaWNFcnJvck1lc3NhZ2UoY29kZSwgbWVzc2FnZSk7IH1cblxuICBzZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zZXRGaWVsZE9wdGlvbnMoZmllbGRDb2RlLCBvcHRpb25zQXJyYXksIGlkQXR0cmlidXRlLCBuYW1lQXR0cmlidXRlKTtcbiAgfVxuICBnZXRGaWVsZFNldChmaWx0ZXJGdW5jPywgZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZFNldChmaWx0ZXJGdW5jLCBmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGFwcGx5UHJvY2Vzc1RvRmllbGRTZXQocHJvY2Vzc0Z1bmMsIGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuYXBwbHlQcm9jZXNzVG9GaWVsZFNldChwcm9jZXNzRnVuYywgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBhcHBseVByb2Nlc3NUb0FsbEZpZWxkcyhwcm9jZXNzRnVuYykgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmFwcGx5UHJvY2Vzc1RvRmllbGRTZXQocHJvY2Vzc0Z1bmMpOyB9XG4gIGNsZWFuRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5GaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBnZXRSZXF1aXJlZEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0UmVxdWlyZWRGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBnZXRSZXF1aXJlZEVtcHR5RmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGdldENoYW5nZWRGaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRDaGFuZ2VkRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRGaWVsZHNXaXRoVmFsaWRhdGlvbklzc3VlcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIHRhZ0ZpZWxkc1dpdGhFcnJvcihlcnJvck1lc3NhZ2UsIGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUudGFnRmllbGRzV2l0aEVycm9yKGVycm9yTWVzc2FnZSwgZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBjbGVhbkVycm9yRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5FcnJvckZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIHNob3dMYWJlbEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dMYWJlbEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGhpZGVMYWJlbEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVMYWJlbEZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGVuYWJsZUZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG4gIGRpc2FibGVGaWVsZHMoZmllbGRBcnJheT8sIHNlY3Rpb25Db2RlPywgc3ViU2VjdGlvbkNvZGU/KSB7XG4gICAgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5kaXNhYmxlRmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgZW5hYmxlRWRpdEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUVkaXRGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBkaXNhYmxlRWRpdEZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVFZGl0RmllbGRzKGZpZWxkQXJyYXksIHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7XG4gIH1cbiAgc2hvd0ZpZWxkcyhmaWVsZEFycmF5Pywgc2VjdGlvbkNvZGU/LCBzdWJTZWN0aW9uQ29kZT8pIHtcbiAgICByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dGaWVsZHMoZmllbGRBcnJheSwgc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTtcbiAgfVxuICBoaWRlRmllbGRzKGZpZWxkQXJyYXk/LCBzZWN0aW9uQ29kZT8sIHN1YlNlY3Rpb25Db2RlPykge1xuICAgIHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZUZpZWxkcyhmaWVsZEFycmF5LCBzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkNvZGUpO1xuICB9XG5cbiAgZ2V0SGVhZGVyQWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRIZWFkZXJBY3Rpb25zKCk7IH1cbiAgZ2V0QWN0aW9uT2JqZWN0KGVsZW1lbnRJZCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldEFjdGlvbk9iamVjdChlbGVtZW50SWQpOyB9XG4gIGdldEFjdGlvbihhY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmdldEFjdGlvbk9iamVjdChhY3Rpb25Db2RlKTsgfVxuICBnZXRBY3Rpb25EZWZpbml0aW9uKGFjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpOyB9XG4gIHNob3dBY3Rpb24oYWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dBY3Rpb24oYWN0aW9uQ29kZSk7IH1cbiAgaGlkZUFjdGlvbihhY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZUFjdGlvbihhY3Rpb25Db2RlKTsgfVxuICBzaG93QWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuICBoaWRlQWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuICBlbmFibGVBY3Rpb24oYWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmVuYWJsZUFjdGlvbihhY3Rpb25Db2RlKTsgfVxuICBkaXNhYmxlQWN0aW9uKGFjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5kaXNhYmxlQWN0aW9uKGFjdGlvbkNvZGUpOyB9XG4gIGVuYWJsZUFjdGlvbnMoYWN0aW9uQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5lbmFibGVBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuICBkaXNhYmxlQWN0aW9ucyhhY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmRpc2FibGVBY3Rpb25zKGFjdGlvbkFycmF5KTsgfVxuXG4gIGdldFN0YXRlcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTdGF0ZXMoKTsgfVxuICBnZXRTZWN0aW9ucygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9ucygpOyB9XG4gIGdldFNlY3Rpb24oc2VjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9uKHNlY3Rpb25Db2RlKTsgfVxuICBhY3RpdmF0ZVNlY3Rpb24oc2VjdGlvbkNvZGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5hY3RpdmF0ZVNlY3Rpb24oc2VjdGlvbkNvZGUpOyB9XG4gIGdldFN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YnNlY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U3ViU2VjdGlvbihzZWN0aW9uQ29kZSwgc3Vic2VjdGlvbkNvZGUpOyB9XG4gIG51bVNlY3Rpb25zKCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLm51bVNlY3Rpb25zKCk7IH1cbiAgZ2V0U2VjdGlvbnNUaXRsZXMoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuZ2V0U2VjdGlvbnNUaXRsZXMoKTsgfVxuICBnZXRTZWN0aW9uT2JqZWN0KGVsZW1lbnRJZCkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmdldFNlY3Rpb25PYmplY3QoZWxlbWVudElkKTsgfVxuICBzaG93U2VjdGlvbihzZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dTZWN0aW9uKHNlY3Rpb25Db2RlKTsgfVxuICBoaWRlU2VjdGlvbihzZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVTZWN0aW9uKHNlY3Rpb25Db2RlKTsgfVxuICBzaG93U2VjdGlvbnMoc2VjdGlvbkFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd1NlY3Rpb25zKHNlY3Rpb25BcnJheSk7IH1cbiAgaGlkZVNlY3Rpb25zKHNlY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVTZWN0aW9ucyhzZWN0aW9uQXJyYXkpOyB9XG4gIHNob3dTdWJTZWN0aW9uKHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dTdWJTZWN0aW9uKHNlY3Rpb25Db2RlLCBzdWJTZWN0aW9uQ29kZSk7IH1cbiAgaGlkZVN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZVN1YlNlY3Rpb24oc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25Db2RlKTsgfVxuICBzaG93U3ViU2VjdGlvbnMoc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLnNob3dTdWJTZWN0aW9ucyhzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkFycmF5KTsgfVxuICBoaWRlU3ViU2VjdGlvbnMoc2VjdGlvbkNvZGUsIHN1YlNlY3Rpb25BcnJheSkgeyByZXR1cm4gdGhpcy5mb3JtU3RydWN0dXJlLmhpZGVTdWJTZWN0aW9ucyhzZWN0aW9uQ29kZSwgc3ViU2VjdGlvbkFycmF5KTsgfVxuXG4gIGdldFRhYmxlcygpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZXMoKTsgfVxuICBnZXRUYWJsZU9iamVjdChlbGVtZW50SWQpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZU9iamVjdChlbGVtZW50SWQpOyB9XG4gIGdldFRhYmxlKHRhYmxlTmFtZSkgeyByZXR1cm4gdGhpcy5nZXRUYWJsZU9iamVjdCh0YWJsZU5hbWUpOyB9XG4gIHNob3dUYWJsZSh0YWJsZU5hbWUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5zaG93VGFibGUodGFibGVOYW1lKTsgfVxuICBoaWRlVGFibGUodGFibGVOYW1lKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaGlkZVRhYmxlKHRhYmxlTmFtZSk7IH1cbiAgc2hvd1RhYmxlcyh0YWJsZUFycmF5KSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc2hvd1RhYmxlcyh0YWJsZUFycmF5KTsgfVxuICBoaWRlVGFibGVzKHRhYmxlQXJyYXkpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5oaWRlVGFibGVzKHRhYmxlQXJyYXkpOyB9XG4gIGNsZWFuVGFibGUodGFibGVOYW1lKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2xlYW5UYWJsZSh0YWJsZU5hbWUpOyB9XG4gIGdldFRhYmxlUmVjb3JkKHRhYmxlTmFtZSwgcmVjb3JkSWQpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZVJlY29yZCh0YWJsZU5hbWUsIHJlY29yZElkKTsgfVxuXG4gIGN1c3RvbVByZVByb2Nlc3NpbmcoKSB7IH1cbiAgY3VzdG9tRm9ybVN0YXJ0KCkgeyB9XG4gIGRpc3BsYXlBY3Rpb25TZXJ2ZXJFcnJvcigpIHsgfVxuICBkaXNwbGF5VmFsaWRhdGlvblNlcnZlckVycm9yKCkgeyB9XG4gIGRpc3BsYXlUYWJsZVNlcnZlckVycm9yKCkgeyB9XG4gIHNob3dGaWVsZEluZm8oZmllbGRDb2RlOiBzdHJpbmcpIHsgfVxuICBzaG93TW9kYWxEaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG4gIG9wZW5VcGxvYWREaWFsb2codGl0bGUsIGJvZHksIG9wdGlvbnMsIGNhbGxiYWNrPywgcGFyYW1zPykgeyB9XG5cbiAgc3Vic2NyaWJlQXBwRXZlbnQoZXZlbnROYW1lLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX2V2ZW50RW1pdGVyLnN1YnNjcmliZShldmVudE5hbWUsIGNhbGxiYWNrKTtcbiAgfVxuXG4gIG9wZW5Gb3JtKG5hbWUsIGRhdGEgPSBudWxsLCBiYWNrRGF0YSA9IG51bGwsIGNsZWFuU3RhY2sgPSBmYWxzZSkge1xuICAgIGxldCBvcmlnaW4gPSBudWxsO1xuICAgIGlmICghY2xlYW5TdGFjaykge1xuICAgICAgb3JpZ2luID0geyAuLi5iYWNrRGF0YSwgbmFtZTogdGhpcy5uYW1lLCB1cmw6IHRoaXMuX2Zvcm1Sb3V0ZSwgdG9rZW46IHRoaXMuY29udHJvbFRva2VuIH07XG4gICAgICBvcmlnaW4uc3ViamVjdCA9IG9yaWdpbj8uc3ViamVjdCA/PyB0aGlzLmZvcm1TdWJqZWN0O1xuICAgICAgb3JpZ2luLnN0YXRlID0gb3JpZ2luPy5zdGF0ZSA/PyB0aGlzLmN1cnJlbnRTdGF0ZTtcbiAgICAgIG9yaWdpbi5maWVsZHMgPSBvcmlnaW4/LmZpZWxkcyA/PyB7fTtcbiAgICAgIG9yaWdpbi5leHRyYSA9IG9yaWdpbj8uZXh0cmEgPz8ge307XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IHsgLi4uZGF0YSwgbmFtZSB9O1xuICAgIHRhcmdldC5zdWJqZWN0ID0gdGFyZ2V0Py5zdWJqZWN0ID8/IG51bGw7XG4gICAgdGFyZ2V0LnN0YXRlID0gdGFyZ2V0Py5zdGF0ZSA/PyBudWxsO1xuICAgIHRhcmdldC5maWVsZHMgPSB0YXJnZXQ/LmZpZWxkcyA/PyB7fTtcbiAgICB0YXJnZXQuZXh0cmEgPSB0YXJnZXQ/LmV4dHJhID8/IHt9O1xuICAgIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLm9wZW5Gb3JtKG9yaWdpbiwgdGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBFc3RlIG3DqXRvZG8geWEgbm8gZGViZXLDrWEgc2VyIHV0aWxpemFkby4gVXNlIG9wZW5Gb3JtIGNvbiBlbCBub21icmUgZGVsIGZvcm11bGFyaW9cbiAgICovXG4gIGdvVG9QYWdlKG5hdmlnYXRpb25BcnJheSwgcHJlZGVmaW5lZEZpZWxkcywgb3B0aW9ucyA9IG51bGwpIHtcbiAgICBsZXQgb3JpZ2luID0gbnVsbDtcbiAgICBjb25zdCBjbGVhblN0YWNrID0gb3B0aW9ucz8uY2xlYW5TdGFjayA/PyBmYWxzZTtcbiAgICBpZiAoIWNsZWFuU3RhY2spIHtcbiAgICAgIG9yaWdpbiA9IHtcbiAgICAgICAgbmFtZTogdGhpcy5uYW1lLFxuICAgICAgICB1cmw6IHRoaXMuX2Zvcm1Sb3V0ZSxcbiAgICAgICAgdG9rZW46IHRoaXMuY29udHJvbFRva2VuLFxuICAgICAgICBmaWVsZHM6IHRoaXMuaW5wdXREYXRhRmllbGRzLFxuICAgICAgICBleHRyYTogdGhpcy5leHRyYURhdGFcbiAgICAgIH07XG4gICAgfVxuICAgIGNvbnN0IHRhcmdldCA9IHtcbiAgICAgIG5hbWU6IHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLmdldFJvdXRlRm9ybShuYXZpZ2F0aW9uQXJyYXk/LlswXSksXG4gICAgICB1cmw6IG5hdmlnYXRpb25BcnJheT8uWzBdLFxuICAgICAgc3RhdGU6IG5hdmlnYXRpb25BcnJheT8uWzFdLFxuICAgICAgc3ViamVjdDogbmF2aWdhdGlvbkFycmF5Py5bMl0sXG4gICAgICBmaWVsZHM6IHByZWRlZmluZWRGaWVsZHMsXG4gICAgICBleHRyYTogbnVsbCxcbiAgICB9O1xuICAgIHRoaXMuZm9ybU1hbmFnZXJTZXJ2aWNlLm9wZW5Gb3JtKG9yaWdpbiwgdGFyZ2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBFc3RlIG3DqXRvZG8geWEgbm8gZGViZXLDrWEgc2VyIHV0aWxpemFkby4gVXNlIG9wZW5Gb3JtIGNvbiBlbCBub21icmUgZGVsIGZvcm11bGFyaW9cbiAgICovXG4gIGdvVG9OZXdQYWdlKG5hdiwgZmxkcykgeyByZXR1cm4gdGhpcy5nb1RvUGFnZShuYXYsIGZsZHMsIHsgY2xlYW5TdGFjazogdHJ1ZSB9KTsgfVxuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBFc3RlIG3DqXRvZG8geWEgbm8gZGViZXLDrWEgc2VyIHV0aWxpemFkby4gVXNlIG9wZW5Gb3JtIGNvbiBlbCBub21icmUgZGVsIGZvcm11bGFyaW9cbiAgICovXG4gIGdvVG9TdWJQYWdlKG5hdiwgZmxkcykgeyByZXR1cm4gdGhpcy5nb1RvUGFnZShuYXYsIGZsZHMsIHsgY2xlYW5TdGFjazogZmFsc2UgfSk7IH1cblxuICBjYW5Hb0JhY2soKSB7IHJldHVybiB0aGlzLm9yaWdpblRva2VuICE9PSBudWxsIH1cbiAgZ29CYWNrKCkgeyByZXR1cm4gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuYmFja1RvKCk7IH1cbiAgZ29CYWNrRm9ybSgpIHsgcmV0dXJuIHRoaXMuZ29CYWNrKCk7IH1cbiAgZ2V0T3JpZ2luRGV0YWlsKCkgeyByZXR1cm4gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZ2V0Rm9ybUluZm8odGhpcy5vcmlnaW5Ub2tlbik7IH1cblxuICBzZXRFcnJvcihlcnJvclR5cGUsIGVycm9yTWVzc2FnZSwgZXJyb3JEZXRhaWwpIHtcbiAgICB0aGlzLl9lcnJvclR5cGUgPSBlcnJvclR5cGUgfHwgJyc7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSBlcnJvck1lc3NhZ2UgfHwgJyc7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9IGVycm9yRGV0YWlsIHx8ICcnO1xuICB9XG5cbiAgZ2V0IGZvcm1NYW5hZ2VyKCkgeyByZXR1cm4gdGhpczsgfVxuICByZXNldEVycm9yKCkgeyB0aGlzLnNldEVycm9yKG51bGwsIG51bGwsIG51bGwpOyB9XG4gIGdldEVycm9yVHlwZSgpIHsgcmV0dXJuIHRoaXMuX2Vycm9yVHlwZTsgfVxuICBnZXRFcnJvck1lc3NhZ2UoKSB7IHJldHVybiB0aGlzLmVycm9yTWVzc2FnZTsgfVxuICBnZXRFcnJvckRldGFpbCgpIHsgcmV0dXJuIHRoaXMuZXJyb3JEZXRhaWw7IH1cbiAgZ2V0RXJyb3JDb2RlKCkgeyByZXR1cm4gdGhpcy5fZXJyb3JUeXBlOyB9XG5cbiAgZ2V0IGZvcm1Sb3V0ZSgpIHsgcmV0dXJuIHRoaXMuX2Zvcm1Sb3V0ZTsgfVxuICBzZXQgZm9ybVJvdXRlKHJvdXRlKSB7IHRoaXMuX2Zvcm1Sb3V0ZSA9IHJvdXRlOyB9XG4gIGRlZmluZUZvcm1Db2RlKG5hbWUpIHsgdGhpcy5uYW1lID0gbmFtZTsgfVxuICBnZXRDdXJyZW50U3RhdGUoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc3RhdGU7IH1cbiAgZ2V0Q3VycmVudE1vZGUoKSB7IHJldHVybiB0aGlzLmZvcm1TdHJ1Y3R1cmUuc3RhdGU7IH1cblxuICBnZXQgZm9ybUNvZGUoKSB7IHJldHVybiB0aGlzLm5hbWU7IH1cbiAgc2V0IGZvcm1Db2RlKG5hbWUpIHsgdGhpcy5uYW1lID0gbmFtZTsgfVxuXG4gIGdldEZvcm1QYXJhbWV0ZXIobmFtZSkge1xuICAgIHJldHVybiAobmFtZSkgPyAodGhpcy5leHRyYURhdGE/LltuYW1lXSA/PyBudWxsKSA6IG51bGw7XG4gIH1cblxuICBnZXRTdWJqZWN0KCkgeyByZXR1cm4gdGhpcy5mb3JtU3ViamVjdDsgfVxuICBnZXRmb3JtU3ViamVjdCgpIHsgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpOyB9XG5cbiAgcHJlb2Nlc3NJbnB1dFBhcmFtcyhwYXJhbXMpIHtcbiAgICB0aGlzLmNvbnRyb2xUb2tlbiA9IHBhcmFtcz8uW1RPS0VOXSA/PyBudWxsO1xuICAgIGNvbnN0IHsgdG9rZW4sIHN1YmplY3QsIHN0YXRlLCBmaWVsZHMsIGV4dHJhLCBvcmlnaW5Ub2tlbiB9ID0gdGhpcy5mb3JtTWFuYWdlclNlcnZpY2UuZ2V0Rm9ybUluZm8odGhpcy5jb250cm9sVG9rZW4pO1xuICAgIGlmICghdGhpcy5jb250cm9sVG9rZW4gfHwgdGhpcy5jb250cm9sVG9rZW4gIT09IHRva2VuKSB7XG4gICAgICBjb25zb2xlLmxvZyhgTm8gc2Ugb2J0dXZvIHVuIHRva2VuIHbDoWxpZG8gcGFyYSBhYnJpciBlbCBmb3JtdWxhcmlvICR7dGhpcy5jb250cm9sVG9rZW59LT4ke3Rva2VufWApO1xuICAgIH1cbiAgICB0aGlzLmZvcm1TdWJqZWN0ID0gcGFyYW1zPy5bU1VCSkVDVF0gPz8gc3ViamVjdCA/PyBudWxsO1xuICAgIHRoaXMuaW5wdXREYXRhRmllbGRzID0gZmllbGRzO1xuICAgIHRoaXMuZXh0cmFEYXRhID0gZXh0cmE7XG4gICAgdGhpcy5vcmlnaW5Ub2tlbiA9IG9yaWdpblRva2VuO1xuICAgIHJldHVybiBzdGF0ZTtcbiAgfVxuXG4gIHN1YnNjcmliZVNlY3Rpb25BY3RpdmF0aW9uKCkge1xuICAgIGNvbnN0IGZvcm1TZWN0aW9ucyA9IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9ucygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1TZWN0aW9ucykpIHtcbiAgICAgIGZvcm1TZWN0aW9ucy5mb3JFYWNoKHNlY3Rpb24gPT4ge1xuICAgICAgICBzZWN0aW9uLmFjdGl2YXRpb24uc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5sYXVuY2hTZWN0aW9uQWN0aXZhdGlvbihjb2RlKSk7XG4gICAgICAgIHNlY3Rpb24uaW5hY3RpdmF0aW9uLnN1YnNjcmliZShjb2RlID0+IHRoaXMubGF1bmNoU2VjdGlvbkluYWN0aXZhdGlvbihjb2RlKSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzdWJzY3JpYmVGaWVsZHNTdWJqZWN0cygpIHtcbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5mb3JtU3RydWN0dXJlLmdldEZpZWxkcygpO1xuICAgIGlmIChBcnJheS5pc0FycmF5KGZvcm1GaWVsZHMpKSB7XG4gICAgICBmb3JtRmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICBmaWVsZC5lZGl0aW9uRmluaXNoLnN1YnNjcmliZShldmVudCA9PiB7XG4gICAgICAgICAgY29uc3QgeyBjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uIH0gPSBldmVudDtcbiAgICAgICAgICB0aGlzLnN0YXJ0RmllbGRWYWxpZGF0aW9uKGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24pO1xuICAgICAgICB9KTtcbiAgICAgICAgZmllbGQuZWRpdGlvblBhcnRpYWwuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAgICBjb25zdCB7IGNvZGUsIGludHJpbnNpY1ZhbGlkYXRpb24gfSA9IGV2ZW50O1xuICAgICAgICAgIHRoaXMuc3RhcnRGaWVsZElucHV0VmFsaWRhdGlvbihjb2RlLCBpbnRyaW5zaWNWYWxpZGF0aW9uKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZpZWxkLmRldGFpbFJlcXVlc3Quc3Vic2NyaWJlKGNvZGUgPT4gdGhpcy5zaG93RmllbGRJbmZvKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZUFjdGlvblN1YmplY3RzKCkge1xuICAgIGNvbnN0IGZvcm1BY3Rpb25zID0gdGhpcy5mb3JtU3RydWN0dXJlLmdldEFjdGlvbnMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtQWN0aW9ucykpIHtcbiAgICAgIGZvcm1BY3Rpb25zLmZvckVhY2goYWN0aW9uID0+IHtcbiAgICAgICAgYWN0aW9uLmFjdGlvbkFjdGl2YXRlZC5zdWJzY3JpYmUoY29kZSA9PiB0aGlzLnN0YXJ0QWN0aW9uKGNvZGUpKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHN1YnNjcmliZVRhYmxlU3ViamVjdHMoKSB7XG4gICAgY29uc3QgZm9ybVRhYmxlcyA9IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRUYWJsZXMoKTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShmb3JtVGFibGVzKSkge1xuICAgICAgZm9ybVRhYmxlcy5mb3JFYWNoKHRhYmxlID0+IHtcbiAgICAgICAgdGFibGUuaW5saW5lQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLmdsb2JhbEFjdGlvblRyaWdnZXIuc3Vic2NyaWJlKGV2ZW50ID0+IHRoaXMuc3RhcnRUYWJsZUdsb2JhbEFjdGlvbihldmVudCkpO1xuICAgICAgICB0YWJsZS5yZWNvcmRTZWxlY3Rpb25UcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVSZWNvcmRTZWxlY3Rpb24oZXZlbnQpKTtcbiAgICAgICAgdGFibGUuc2VsZWN0aW9uQWN0aW9uVHJpZ2dlci5zdWJzY3JpYmUoZXZlbnQgPT4gdGhpcy5zdGFydFRhYmxlU2VsZWN0aW9uQWN0aW9uKGV2ZW50KSk7XG4gICAgICAgIHRhYmxlLmdldERhdGFUcmlnZ2VyLnN1YnNjcmliZShldmVudCA9PiB0aGlzLnN0YXJ0VGFibGVHZXREYXRhKGV2ZW50KSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBmb3JtSW5pdChwYXJhbXMpIHtcbiAgICBsZXQgaW5pdGlhbFN0YXRlID0gdGhpcy5wcmVvY2Vzc0lucHV0UGFyYW1zKHBhcmFtcyk7XG4gICAgaWYgKCF0aGlzLm5hbWUpIHsgcmV0dXJuOyB9XG4gICAgaWYgKCF0aGlzLmRlZmluaXRpb25PYnRhaW5lZCkge1xuICAgICAgdGhpcy5pblNlcnZlclByb2Nlc3MgPSB0cnVlO1xuICAgICAgY29uc3QgZm9ybURlZmluaXRpb24gPSBhd2FpdCB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5nZXRGb3JtRGVmaW5pdGlvbih0aGlzLm5hbWUpO1xuICAgICAgdGhpcy5pblNlcnZlclByb2Nlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMuZm9ybVN0cnVjdHVyZSA9IG5ldyBGb3JtU3RydWN0dXJlQW5kRGF0YShmb3JtRGVmaW5pdGlvbiwgdGhpcy5mb3JtQ29uZmlnKTtcbiAgICAgIHRoaXMuZGVmaW5pdGlvbk9idGFpbmVkID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5jbGVhbkRhdGEoKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnN1cHBvcnRTdGF0ZShpbml0aWFsU3RhdGUpKSB7XG4gICAgICBpbml0aWFsU3RhdGUgPSB0aGlzLmZvcm1TdHJ1Y3R1cmUuZGVmYXVsdFN0YXRlO1xuICAgIH1cbiAgICB0aGlzLmZvcm1TdHJ1Y3R1cmUuY2hhbmdlU3RhdGUoaW5pdGlhbFN0YXRlIHx8IHRoaXMuZm9ybVN0cnVjdHVyZS5kZWZhdWx0U3RhdGUpO1xuICAgIGNvbnN0IGlucHV0RmllbGROYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuaW5wdXREYXRhRmllbGRzKTtcbiAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgaW5wdXRGaWVsZE5hbWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgY29uc3QgZmllbGRDb2RlID0gaW5wdXRGaWVsZE5hbWVzW2luZGV4XTtcbiAgICAgIGNvbnN0IGZpZWxkVmFsdWUgPSB0aGlzLmlucHV0RGF0YUZpZWxkc1tmaWVsZENvZGVdO1xuICAgICAgdGhpcy5zZXRGaWVsZFZhbHVlKGZpZWxkQ29kZSwgZmllbGRWYWx1ZSk7XG4gICAgfVxuICAgIGNvbnN0IHJlY29yZFJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy5nZXREYXRhKTtcbiAgICB0aGlzLmNoZWNrRXJyb3JSZWNvcmRSZWNlaXZlZChyZWNvcmRSZXNwb25zZSk7XG4gICAgdGhpcy5mb3JtVmlzaWJsZSA9IHRydWU7XG4gICAgdGhpcy5zdWJzY3JpYmVTZWN0aW9uQWN0aXZhdGlvbigpO1xuICAgIHRoaXMuc3Vic2NyaWJlRmllbGRzU3ViamVjdHMoKTtcbiAgICB0aGlzLnN1YnNjcmliZUFjdGlvblN1YmplY3RzKCk7XG4gICAgdGhpcy5zdWJzY3JpYmVUYWJsZVN1YmplY3RzKCk7XG4gICAgdGhpcy5jdXN0b21Gb3JtU3RhcnQoKTtcbiAgfVxuXG4gIGNoZWNrRXJyb3JSZWNvcmRSZWNlaXZlZChyZWNvcmRSZXNwb25zZSkge1xuICAgIGNvbnN0IHsgZXJyb3IgfSA9IHJlY29yZFJlc3BvbnNlO1xuICAgIGlmICghZXJyb3IpIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgdGhpcy5lcnJvckNvZGUgPSByZWNvcmRSZXNwb25zZS5lcnJvckNvZGU7XG4gICAgdGhpcy5lcnJvck1lc3NhZ2UgPSByZWNvcmRSZXNwb25zZS5lcnJvck1lc3NhZ2U7XG4gICAgdGhpcy5lcnJvckRldGFpbCA9IHJlY29yZFJlc3BvbnNlLmVycm9yRGV0YWlsO1xuICB9XG5cbiAgZXJyb3JPY2N1cmVkKCkge1xuICAgIHJldHVybiAodGhpcy5lcnJvckNvZGUgIT09ICcwMCcpO1xuICB9XG5cbiAgY2hhbmdlU3RhdGUoc3RhdGUpIHsgcmV0dXJuIHRoaXMuZm9ybVN0cnVjdHVyZS5jaGFuZ2VTdGF0ZShzdGF0ZSk7IH1cbiAgY2hhbmdlRm9ybU1vZGUoc3RhdGUpIHsgcmV0dXJuIHRoaXMuY2hhbmdlU3RhdGUoc3RhdGUpOyB9XG5cbiAgYXN5bmMgcmVxdWVzdEZvcm1BY3Rpb24oYWN0aW9uQ29kZSwgYWN0aW9uU3ViamVjdCA9IHt9KSB7XG4gICAgY29uc3QgYWN0aW9uRGV0YWlsID0ge1xuICAgICAgZm9ybUNvZGU6IHRoaXMubmFtZSxcbiAgICAgIGZvcm1TdWJqZWN0OiB0aGlzLmZvcm1TdWJqZWN0LFxuICAgICAgY3VycmVudE1vZGU6IHRoaXMuZm9ybVN0cnVjdHVyZS5zdGF0ZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICBhY3Rpb25TdWJqZWN0LFxuICAgICAgdmVyc2lvbjogUEFZTE9BRF9WRVJTSU9OLFxuICAgICAgZm9ybURhdGE6IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRQYXlsb2FkKCksXG4gICAgICBpbW11dGFibGVEYXRhOiB0aGlzLmZvcm1TdHJ1Y3R1cmUuaW1tdXRhYmxlRGF0YSxcbiAgICB9O1xuICAgIHRoaXMuZXJyb3JDb2RlID0gJzAwJztcbiAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICcnO1xuICAgIHRoaXMuZXJyb3JEZXRhaWwgPSAnJztcbiAgICB0aGlzLmluU2VydmVyUHJvY2VzcyA9IHRydWU7XG4gICAgY29uc3QgZm9ybUFjdGlvblJlc3BvbnNlOiBhbnkgPSBhd2FpdCB0aGlzLmZvcm1NYW5hZ2VyU2VydmljZS5leGVjU2VydmVyQWN0aW9uKGFjdGlvbkRldGFpbCk7XG4gICAgdGhpcy5pblNlcnZlclByb2Nlc3MgPSBmYWxzZTtcbiAgICBpZiAoZm9ybUFjdGlvblJlc3BvbnNlICYmIGZvcm1BY3Rpb25SZXNwb25zZS5lcnJvci5lcnJvclR5cGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdFeGNlcGNpw7NuIG5vIHNvcG9ydGFkYScpO1xuICAgIH1cbiAgICBpZiAoZm9ybUFjdGlvblJlc3BvbnNlLmhhc0Vycm9yKCkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gZm9ybUFjdGlvblJlc3BvbnNlLmVycm9yO1xuICAgICAgdGhpcy5lcnJvckNvZGUgPSBlcnJvci5lcnJvckNvZGU7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGVycm9yLmVycm9yTWVzc2FnZTtcbiAgICAgIHRoaXMuZXJyb3JEZXRhaWwgPSBlcnJvci5lcnJvckRldGFpbDtcbiAgICB9XG4gICAgY29uc3QgZm9ybVJlc3BvbnNlRGF0YSA9IGZvcm1BY3Rpb25SZXNwb25zZS5nZXREYXRhKCk7XG4gICAgdGhpcy51cGRhdGVGb3JtV2l0aFNlcnZlckRhdGEoZm9ybVJlc3BvbnNlRGF0YSk7XG4gICAgcmV0dXJuIGZvcm1SZXNwb25zZURhdGE7XG4gIH1cblxuICB1cGRhdGVGb3JtV2l0aFNlcnZlckRhdGEoZm9ybUNvbnRlbnQpIHtcbiAgICBjb25zdCB7XG4gICAgICBjdXJyZW50TW9kZSwgZm9ybVN1YmplY3QsIGFjdGlvbnMsIGZpZWxkcywgcmVjb3JkVGFibGVzLFxuICAgICAgcmV0dXJuZWRGaWxlLCBpbW11dGFibGVEYXRhLCBleHRyYUluZm8sXG4gICAgfSA9IGZvcm1Db250ZW50O1xuICAgIHRoaXMuY2hhbmdlU3RhdGUoY3VycmVudE1vZGUgPz8gdGhpcy5mb3JtU3RydWN0dXJlLnN0YXRlKTtcbiAgICBpZiAoZm9ybVN1YmplY3QpIHsgdGhpcy5mb3JtU3ViamVjdCA9IGZvcm1TdWJqZWN0OyB9XG4gICAgaWYgKGFjdGlvbnMgJiYgYWN0aW9ucy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRBY3Rpb24gb2YgYWN0aW9ucykge1xuICAgICAgICBjb25zdCBhY3Rpb25PYmplY3QgPSB0aGlzLmdldEFjdGlvbk9iamVjdChjaGFuZ2VkQWN0aW9uLmFjdGlvbkNvZGUpO1xuICAgICAgICBpZiAoYWN0aW9uT2JqZWN0KSB7IGFjdGlvbk9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRBY3Rpb24pOyB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChmaWVsZHMgJiYgZmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGZvciAoY29uc3QgY2hhbmdlZEZpZWxkIG9mIGZpZWxkcykge1xuICAgICAgICBjb25zdCBmaWVsZE9iamVjdCA9IHRoaXMuZ2V0RmllbGRPYmplY3QoY2hhbmdlZEZpZWxkLmZpZWxkQ29kZSk7XG4gICAgICAgIGlmIChmaWVsZE9iamVjdCkge1xuICAgICAgICAgIGZpZWxkT2JqZWN0LnVwZGF0ZUZyb21TZXJ2ZXIoY2hhbmdlZEZpZWxkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAocmVjb3JkVGFibGVzICYmIHJlY29yZFRhYmxlcy5sZW5ndGggPiAwKSB7XG4gICAgICBmb3IgKGNvbnN0IGNoYW5nZWRUYWJsZSBvZiByZWNvcmRUYWJsZXMpIHtcbiAgICAgICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlT2JqZWN0KGNoYW5nZWRUYWJsZS50YWJsZUNvZGUpO1xuICAgICAgICBpZiAodGFibGVPYmplY3QpIHtcbiAgICAgICAgICB0YWJsZU9iamVjdC51cGRhdGVGcm9tU2VydmVyKGNoYW5nZWRUYWJsZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHJldHVybmVkRmlsZSAmJiByZXR1cm5lZEZpbGUuZmlsZSkge1xuICAgICAgdGhpcy5maWxlTWdtdFNlcnZpY2VzLnNhdmVGaWxlKHJldHVybmVkRmlsZS5maWxlLCByZXR1cm5lZEZpbGUubmFtZSwgcmV0dXJuZWRGaWxlLnR5cGUpO1xuICAgIH1cbiAgICB0aGlzLmZvcm1TdHJ1Y3R1cmUuaW1tdXRhYmxlRGF0YSA9IGltbXV0YWJsZURhdGE7XG4gICAgdGhpcy5mb3JtU3RydWN0dXJlLmV4dHJhSW5mbyA9IGV4dHJhSW5mbztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lam8gZGUgZXZlbnQgaGFuZGxlcnMgcGFyYSBhY2Npb25lcyBzb2JyZSBlbCBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIGFkZFNlY3Rpb25BY3RpdmF0aW9uKHNlY3Rpb25zLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHNlY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShzZWN0aW9ucykpID8gc2VjdGlvbnMgOiBbc2VjdGlvbnNdO1xuICAgIHNlY3Rpb25TZXQuZm9yRWFjaCgoc2VjdGlvbk5hbWUpID0+IHtcbiAgICAgIGlmICghdGhpcy5mb3JtU2VjdGlvbnNBY3RpdmF0ZVtzZWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5mb3JtU2VjdGlvbnNBY3RpdmF0ZVtzZWN0aW9uTmFtZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbk5hbWVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICAgIH0pO1xuICB9XG5cbiAgYWRkU2VjdGlvbkluYWN0aXZhdGlvbihzZWN0aW9ucywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBzZWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoc2VjdGlvbnMpKSA/IHNlY3Rpb25zIDogW3NlY3Rpb25zXTtcbiAgICBzZWN0aW9uU2V0LmZvckVhY2goKHNlY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybVNlY3Rpb25zSW5hY3RpdmF0ZVtzZWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtU2VjdGlvbnNJbmFjdGl2YXRlW3NlY3Rpb25OYW1lXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEFjdGlvbk1ldGhvZFN0YXJ0KGFjdGlvbnMsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgYWN0aW9uU2V0ID0gKEFycmF5LmlzQXJyYXkoYWN0aW9ucykpID8gYWN0aW9ucyA6IFthY3Rpb25zXTtcbiAgICBhY3Rpb25TZXQuZm9yRWFjaCgoYWN0aW9uTmFtZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZvcm1BY3Rpb25zU3RhcnRbYWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5mb3JtQWN0aW9uc1N0YXJ0W2FjdGlvbk5hbWVdID0gW107XG4gICAgICB9XG4gICAgICB0aGlzLmZvcm1BY3Rpb25zU3RhcnRbYWN0aW9uTmFtZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhZGRBY3Rpb25NZXRob2RGaW5pc2goYWN0aW9ucywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBhY3Rpb25TZXQgPSAoQXJyYXkuaXNBcnJheShhY3Rpb25zKSkgPyBhY3Rpb25zIDogW2FjdGlvbnNdO1xuICAgIGFjdGlvblNldC5mb3JFYWNoKChhY3Rpb25OYW1lKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZm9ybUFjdGlvbnNGaW5pc2hbYWN0aW9uTmFtZV0pIHtcbiAgICAgICAgdGhpcy5mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb25OYW1lXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5mb3JtQWN0aW9uc0ZpbmlzaFthY3Rpb25OYW1lXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGxhdW5jaFNlY3Rpb25BY3RpdmF0aW9uKHNlY3Rpb25Db2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBzZWN0aW9uT2JqZWN0ID0gdGhpcy5mb3JtU3RydWN0dXJlLmdldFNlY3Rpb25PYmplY3Qoc2VjdGlvbkNvZGUpO1xuICAgIGlmICghc2VjdGlvbk9iamVjdCkgeyByZXR1cm47IH1cbiAgICBjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kcyA9IHRoaXMuZm9ybVNlY3Rpb25zQWN0aXZhdGVbc2VjdGlvbkNvZGVdO1xuICAgIGlmIChjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgZm9yIChjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kIG9mIGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudFNlY3Rpb25NZXRob2Qoc2VjdGlvbk9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbGF1bmNoU2VjdGlvbkluYWN0aXZhdGlvbihzZWN0aW9uQ29kZTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc2VjdGlvbk9iamVjdCA9IHRoaXMuZm9ybVN0cnVjdHVyZS5nZXRTZWN0aW9uT2JqZWN0KHNlY3Rpb25Db2RlKTtcbiAgICBpZiAoIXNlY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgY2xpZW50U2VjdGlvbk1ldGhvZHMgPSB0aGlzLmZvcm1TZWN0aW9uc0luYWN0aXZhdGVbc2VjdGlvbkNvZGVdO1xuICAgIGlmIChjbGllbnRTZWN0aW9uTWV0aG9kcykge1xuICAgICAgZm9yIChjb25zdCBjbGllbnRTZWN0aW9uTWV0aG9kIG9mIGNsaWVudFNlY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudFNlY3Rpb25NZXRob2Qoc2VjdGlvbk9iamVjdCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRBY3Rpb24oYWN0aW9uQ29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYWN0aW9uT2JqZWN0ID0gdGhpcy5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb25PYmplY3QpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgYWN0aW9uT2JqZWN0LnN0YXJ0KCk7XG4gICAgY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kcyA9IHRoaXMuZm9ybUFjdGlvbnNTdGFydFthY3Rpb25Db2RlXTtcbiAgICBpZiAoY2xpZW50QWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kIG9mIGNsaWVudEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgY29udGludWVBY3Rpb25Qcm9taXNlID0gY2xpZW50QWN0aW9uTWV0aG9kKGFjdGlvbk9iamVjdCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY29udGludWVBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgYWN0aW9uT2JqZWN0LnN0b3AoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0U2VydmVyQWN0aW9uKGFjdGlvbk9iamVjdCk7XG4gIH1cblxuICBhc3luYyBzdGFydFNlcnZlckFjdGlvbihhY3Rpb25JbnB1dCkge1xuICAgIGNvbnN0IGFjdGlvbiA9ICh0eXBlb2YgYWN0aW9uSW5wdXQgPT09ICdzdHJpbmcnKVxuICAgICAgPyB0aGlzLmdldEFjdGlvbihhY3Rpb25JbnB1dCkgOiBhY3Rpb25JbnB1dDtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGFjdGlvblJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdEZvcm1BY3Rpb24oYWN0aW9uLmFjdGlvbkNvZGUpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmluaXNoQWN0aW9uKGFjdGlvbiwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5QWN0aW9uU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgYWN0aW9uLnN0b3AoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaEFjdGlvbihhY3Rpb25PYmplY3QsIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IGZpbmlzaEFjdGlvbk1ldGhvZHMgPSB0aGlzLmZvcm1BY3Rpb25zRmluaXNoW2FjdGlvbk9iamVjdC5hY3Rpb25Db2RlXTtcbiAgICBpZiAoZmluaXNoQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgY2xpZW50QWN0aW9uTWV0aG9kIG9mIGZpbmlzaEFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25NZXRob2QoYWN0aW9uT2JqZWN0LCBhY3Rpb25SZXN1bHQpKTtcbiAgICAgIH1cbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICB9XG4gIH1cblxuICBjb21wbGV0ZUdsb2JhbEFjdGlvbihhY3Rpb25PYmplY3QpIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFNlcnZlckFjdGlvbihhY3Rpb25PYmplY3QpO1xuICB9XG5cbiAgLyoqXG4gICAqIE1hbmVqYWRvcmVzIGRlIGV2ZW50b3MgcGFyYSB2YWxpZGFjaW9uZXMgc29icmUgY2FtcG9zXG4gICAqL1xuXG4gIGFkZEZpZWxkSW5wdXRWYWxpZGF0aW9uKGZpZWxkcywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGZpZWxkcykpID8gZmllbGRzIDogW2ZpZWxkc107XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXSkge1xuICAgICAgICB0aGlzLmZpZWxkSW5wdXRWYWxpZGF0aW9uW2ZpZWxkQ29kZV0gPSBbXTtcbiAgICAgIH1cbiAgICAgIHRoaXMuZmllbGRJbnB1dFZhbGlkYXRpb25bZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZpZWxkVmFsaWRhdGlvblN0YXJ0KGZpZWxkcywgY2FsbGJhY2tNZXRob2QpIHtcbiAgICBjb25zdCBmaWVsZFNldCA9IChBcnJheS5pc0FycmF5KGZpZWxkcykpID8gZmllbGRzIDogW2ZpZWxkc107XG4gICAgZmllbGRTZXQuZm9yRWFjaCgoZmllbGRDb2RlKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuZmllbGRWYWxpZGF0aW9uc1N0YXJ0W2ZpZWxkQ29kZV0pIHtcbiAgICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zU3RhcnRbZmllbGRDb2RlXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zU3RhcnRbZmllbGRDb2RlXS5wdXNoKGNhbGxiYWNrTWV0aG9kKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFkZEZpZWxkVmFsaWRhdGlvbkZpbmlzaChmaWVsZHMsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgZmllbGRTZXQgPSAoQXJyYXkuaXNBcnJheShmaWVsZHMpKSA/IGZpZWxkcyA6IFtmaWVsZHNdO1xuICAgIGZpZWxkU2V0LmZvckVhY2goKGZpZWxkQ29kZSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRDb2RlXSkge1xuICAgICAgICB0aGlzLmZpZWxkVmFsaWRhdGlvbnNGaW5pc2hbZmllbGRDb2RlXSA9IFtdO1xuICAgICAgfVxuICAgICAgdGhpcy5maWVsZFZhbGlkYXRpb25zRmluaXNoW2ZpZWxkQ29kZV0ucHVzaChjYWxsYmFja01ldGhvZCk7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBzdGFydEZpZWxkSW5wdXRWYWxpZGF0aW9uKGZpZWxkQ29kZTogc3RyaW5nLCBpbnRyaW5zaWNWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZpZWxkVG9WYWxpZGF0ZSA9IHRoaXMuZ2V0RmllbGRPYmplY3QoZmllbGRDb2RlKTtcbiAgICBpZiAoIWZpZWxkVG9WYWxpZGF0ZSkgeyByZXR1cm4gZmFsc2U7IH1cbiAgICBmaWVsZFRvVmFsaWRhdGUuc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgICBmaWVsZFRvVmFsaWRhdGUuc2V0RXJyb3JDb2RlKCcwMCcpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLmZpZWxkSW5wdXRWYWxpZGF0aW9uW2ZpZWxkQ29kZV07XG4gICAgaWYgKHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY29uc3QgY29udGludWVWYWxpZGF0aW9uUHJvbWlzZSA9IHZhbGlkYXRpb25NZXRob2QoZmllbGRUb1ZhbGlkYXRlKTtcbiAgICAgICAgY2xpZW50VmFsaWRhdGlvblByb21pc2VzLnB1c2goY29udGludWVWYWxpZGF0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0RmllbGRWYWxpZGF0aW9uKGZpZWxkQ29kZTogc3RyaW5nLCBpbnRyaW5zaWNWYWxpZGF0aW9uOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGZpZWxkVG9WYWxpZGF0ZSA9IHRoaXMuZ2V0RmllbGQoZmllbGRDb2RlKTtcbiAgICBpZiAoIWZpZWxkVG9WYWxpZGF0ZSB8fCAhaW50cmluc2ljVmFsaWRhdGlvbikgeyByZXR1cm47IH1cbiAgICBmaWVsZFRvVmFsaWRhdGUuc2V0RXJyb3JNZXNzYWdlKCcnKTtcbiAgICBmaWVsZFRvVmFsaWRhdGUuc2V0RXJyb3JDb2RlKCcwMCcpO1xuICAgIGNvbnN0IHZhbGlkYXRpb25DYWxsYmFja3MgPSB0aGlzLmZpZWxkVmFsaWRhdGlvbnNTdGFydFtmaWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdmFsaWRhdGlvbk1ldGhvZCBvZiB2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudFZhbGlkYXRpb25Qcm9taXNlID0gdmFsaWRhdGlvbk1ldGhvZChmaWVsZFRvVmFsaWRhdGUpO1xuICAgICAgICBjbGllbnRWYWxpZGF0aW9uUHJvbWlzZXMucHVzaChjbGllbnRWYWxpZGF0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRWYWxpZGF0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudFZhbGlkYXRpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZVZhbGlkYXRpb24gPSBjbGllbnRWYWxpZGF0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZVZhbGlkYXRpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0U2VydmVyRmllbGRWYWxpZGF0aW9uKGZpZWxkVG9WYWxpZGF0ZSk7XG4gIH1cblxuICBhc3luYyBzdGFydFNlcnZlckZpZWxkVmFsaWRhdGlvbihpbnB1dEZpZWxkKSB7XG4gICAgY29uc3QgZmllbGRPYmogPSAodHlwZW9mIGlucHV0RmllbGQgPT09ICdzdHJpbmcnKVxuICAgICAgPyB0aGlzLmdldEZpZWxkKGlucHV0RmllbGQpIDogaW5wdXRGaWVsZDtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgdmFsaWRhdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGZpZWxkT2JqLmJhY2tlbmQpIHtcbiAgICAgIGZpZWxkT2JqLnZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgdmFsaWRhdGlvblJlc3VsdCA9IGF3YWl0IHRoaXNcbiAgICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLnZhbGlkYXRlLCBmaWVsZE9iai5maWVsZENvZGUpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIGF3YWl0IHRoaXMuZmluaXNoRmllbGRWYWxpZGF0aW9uKGZpZWxkT2JqLCB2YWxpZGF0aW9uUmVzdWx0KTtcbiAgICB9IGVsc2Uge1xuICAgICAgZmllbGRPYmouc2V0RXJyb3JDb2RlKHRoaXMuZXJyb3JDb2RlKTtcbiAgICAgIGZpZWxkT2JqLnNldEVycm9yTWVzc2FnZSh0aGlzLmVycm9yTWVzc2FnZSk7XG4gICAgICB0aGlzLmRpc3BsYXlWYWxpZGF0aW9uU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgZmllbGRPYmoudmFsaWRhdGluZyA9IGZhbHNlO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoRmllbGRWYWxpZGF0aW9uKGZpZWxkT2JqZWN0LCB2YWxpZGF0aW9uUmVzdWx0KSB7XG4gICAgY29uc3QgdmFsaWRhdGlvbkNhbGxiYWNrcyA9IHRoaXMuZmllbGRWYWxpZGF0aW9uc0ZpbmlzaFtmaWVsZE9iamVjdC5maWVsZENvZGVdO1xuICAgIGlmICh2YWxpZGF0aW9uQ2FsbGJhY2tzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB2YWxpZGF0aW9uTWV0aG9kIG9mIHZhbGlkYXRpb25DYWxsYmFja3MpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh2YWxpZGF0aW9uTWV0aG9kKGZpZWxkT2JqZWN0LCB2YWxpZGF0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgY29udGludWVGaWVsZFZhbGlkYXRpb24oZmllbGRDb2RlKSB7XG4gICAgcmV0dXJuIHRoaXMuc3RhcnRTZXJ2ZXJGaWVsZFZhbGlkYXRpb24oZmllbGRDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYW5lamFkb3JlcyBkZSBldmVudG9zIHBhcmEgYWNjaW9uZXMgc29icmUgVGFibGFzXG4gICAqL1xuXG4gIGFkZFRhYmxlQWN0aW9uU3RhcnQodGFibGVOYW1lLCBhY3Rpb25Db2RlLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5saW5lQWN0aW9uT2JqZWN0ID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpO1xuICAgIGlmICghaW5saW5lQWN0aW9uT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlTmFtZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zU3RhcnRbdGFibGVOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0ge307XG4gICAgICB0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlTmFtZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIGlmICghdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gPSBbXTtcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVBY3Rpb25GaW5pc2godGFibGVOYW1lLCBhY3Rpb25Db2RlLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5saW5lQWN0aW9uT2JqZWN0ID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uT2JqZWN0KGFjdGlvbkNvZGUpO1xuICAgIGlmICghaW5saW5lQWN0aW9uT2JqZWN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGxldCB0YWJsZUV2ZW50SGFuZGxlcnMgPSBudWxsO1xuICAgIGlmICh0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZU5hbWVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZU5hbWVdO1xuICAgIH0gZWxzZSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB7fTtcbiAgICAgIHRoaXMudGFibGVBY3Rpb25zRmluaXNoW3RhYmxlTmFtZV0gPSB0YWJsZUV2ZW50SGFuZGxlcnM7XG4gICAgfVxuICAgIGlmICghdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gPSBbXTtcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdLnB1c2goY2FsbGJhY2tNZXRob2QpO1xuICB9XG5cbiAgYWRkVGFibGVTZWxlY3Rpb25TdGFydCh0YWJsZU5hbWUsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydFt0YWJsZU5hbWVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlU2VsZWN0aW9uc1N0YXJ0W3RhYmxlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydFt0YWJsZU5hbWVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZVNlbGVjdGlvbkZpbmlzaCh0YWJsZU5hbWUsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy50YWJsZVNlbGVjdGlvbnNGaW5pc2hbdGFibGVOYW1lXSkge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZVNlbGVjdGlvbnNGaW5pc2hbdGFibGVOYW1lXTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFibGVFdmVudEhhbmRsZXJzID0gW107XG4gICAgICB0aGlzLnRhYmxlU2VsZWN0aW9uc0ZpbmlzaFt0YWJsZU5hbWVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZUdldERhdGFTdGFydCh0YWJsZU5hbWUsIGNhbGxiYWNrTWV0aG9kKSB7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlTmFtZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdGFibGVFdmVudEhhbmRsZXJzID0gbnVsbDtcbiAgICBpZiAodGhpcy50YWJsZUdldERhdGFTdGFydFt0YWJsZU5hbWVdKSB7XG4gICAgICB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlR2V0RGF0YVN0YXJ0W3RhYmxlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IFtdO1xuICAgICAgdGhpcy50YWJsZUdldERhdGFTdGFydFt0YWJsZU5hbWVdID0gdGFibGVFdmVudEhhbmRsZXJzO1xuICAgIH1cbiAgICB0YWJsZUV2ZW50SGFuZGxlcnMucHVzaChjYWxsYmFja01ldGhvZCk7XG4gIH1cblxuICBhZGRUYWJsZUdldERhdGFGaW5pc2godGFibGVOYW1lLCBjYWxsYmFja01ldGhvZCkge1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZU5hbWUpO1xuICAgIGlmICghdGFibGVPYmplY3QpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgbGV0IHRhYmxlRXZlbnRIYW5kbGVycyA9IG51bGw7XG4gICAgaWYgKHRoaXMudGFibGVHZXREYXRhRmluaXNoW3RhYmxlTmFtZV0pIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVHZXREYXRhRmluaXNoW3RhYmxlTmFtZV07XG4gICAgfSBlbHNlIHtcbiAgICAgIHRhYmxlRXZlbnRIYW5kbGVycyA9IHt9O1xuICAgICAgdGhpcy50YWJsZUdldERhdGFGaW5pc2hbdGFibGVOYW1lXSA9IHRhYmxlRXZlbnRIYW5kbGVycztcbiAgICB9XG4gICAgdGFibGVFdmVudEhhbmRsZXJzW0dFVF9EQVRBX0FDVElPTl0gPSBjYWxsYmFja01ldGhvZDtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkV2ZW50O1xuICAgIGNvbnN0IHRhYmxlT2JqZWN0ID0gdGhpcy5nZXRUYWJsZSh0YWJsZUNvZGUpO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbkNvZGUpIHsgcmV0dXJuOyB9XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZSA9IHRhYmxlQWN0aW9uTWV0aG9kKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaChjbGllbnRBY3Rpb25Qcm9taXNlKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgICBjb25zdCBjb250aW51ZUFjdGlvbiA9IGNsaWVudEFjdGlvblJlc3VsdHMucmVkdWNlKCh0b3RhbCwgY3VycikgPT4gKHRvdGFsICYmIGN1cnIpLCB0cnVlKTtcbiAgICAgIGlmICghY29udGludWVBY3Rpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLnN0YXJ0VGFibGVTZXJ2ZXJHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpO1xuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlcnZlckdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIGFjdGlvbiwgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgbGV0IGZpbmlzaCA9IHRydWU7XG4gICAgbGV0IGFjdGlvblJlc3VsdCA9IG51bGw7XG4gICAgaWYgKGFjdGlvbi5iYWNrZW5kKSB7XG4gICAgICBjb25zdCBhY3Rpb25TdWJqZWN0ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IEdMT0JBTF9BQ1RJT04sXG4gICAgICAgIGFjdGlvbkNvZGVcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgYXdhaXQgdGhpcy5maW5pc2hUYWJsZUdsb2JhbEFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgYXN5bmMgZmluaXNoVGFibGVHbG9iYWxBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25Db2RlIH0gPSB0YWJsZUFjdGlvbkRldGFpbDtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc0ZpbmlzaFt0YWJsZUNvZGVdO1xuICAgIGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kcyA9ICh0YWJsZUV2ZW50SGFuZGxlcnMpID8gdGFibGVFdmVudEhhbmRsZXJzW2FjdGlvbkNvZGVdIDogbnVsbDtcbiAgICBpZiAodGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZUFjdGlvbk1ldGhvZCBvZiB0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IGFjdGlvbkRldGFpbDtcbiAgICBjb25zdCBhY3Rpb24gPSB0YWJsZU9iamVjdC5nZXRBY3Rpb24oYWN0aW9uQ29kZSk7XG4gICAgaWYgKCFhY3Rpb24pIHsgcmV0dXJuOyB9XG4gICAgY29uc3QgdGFibGVBY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIGFjdGlvbixcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIGFjdGlvbkNvZGUsXG4gICAgICByZWNvcmRJZCxcbiAgICAgIHJlY29yZERhdGFcbiAgICB9O1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zU3RhcnRbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKTtcbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVTZXJ2ZXJBY3Rpb24odGFibGVBY3Rpb25EZXRhaWwpIHtcbiAgICBjb25zdCB7IHRhYmxlT2JqZWN0LCBhY3Rpb24sIHRhYmxlQ29kZSwgYWN0aW9uQ29kZSwgcmVjb3JkSWQsIHJlY29yZERhdGEgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGlmICghdGFibGVPYmplY3QgfHwgIWFjdGlvbikgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAoYWN0aW9uLmJhY2tlbmQpIHtcbiAgICAgIGNvbnN0IGFjdGlvblN1YmplY3QgPSB7XG4gICAgICAgIHRhYmxlQ29kZSxcbiAgICAgICAgYWN0aW9uVHlwZTogdGhpcy5mb3JtQ29uZmlnLnRhYmxlQWN0aW9ucy5pbmxpbmUsXG4gICAgICAgIGFjdGlvbkNvZGUsXG4gICAgICAgIHRhYmxlUmVjb3JkSWQ6IHJlY29yZElkLFxuICAgICAgICB0YWJsZVJlY29yZERhdGE6IHJlY29yZERhdGFcbiAgICAgIH07XG4gICAgICBhY3Rpb25SZXN1bHQgPSBhd2FpdCB0aGlzXG4gICAgICAgIC5yZXF1ZXN0Rm9ybUFjdGlvbihmb3JtQWN0aW9ucy50YWJsZUFjdGlvbiwgYWN0aW9uU3ViamVjdCk7XG4gICAgICBmaW5pc2ggPSAhdGhpcy5lcnJvck9jY3VyZWQoKTtcbiAgICB9XG4gICAgaWYgKGZpbmlzaCkge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZUFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KTtcbiAgICAgIHRoaXMuY2hhbmdlU3RhdGUoYWN0aW9uLm5ld1N0YXRlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5VGFibGVTZXJ2ZXJFcnJvcigpO1xuICAgIH1cbiAgICB0YWJsZU9iamVjdC5mcmVlV2FpdGluZygpO1xuICB9XG5cbiAgY29tcGxldGVJbmxpbmVBY3Rpb24odGFibGVBY3Rpb24pIHtcbiAgICByZXR1cm4gdGhpcy5zdGFydFRhYmxlU2VydmVyQWN0aW9uKHRhYmxlQWN0aW9uKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVBY3Rpb25FdmVudCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCBhY3Rpb25EZXRhaWwgfSA9IHRhYmxlQWN0aW9uRXZlbnQ7XG4gICAgY29uc3QgdGFibGVPYmplY3QgPSB0aGlzLmdldFRhYmxlKHRhYmxlQ29kZSk7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB7IHJlY29yZElkLCByZWNvcmREYXRhIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVTZWxlY3Rpb25EZXRhaWwgPSB7XG4gICAgICB0YWJsZU9iamVjdCxcbiAgICAgIHRhYmxlQ29kZSxcbiAgICAgIHJlY29yZElkLFxuICAgICAgcmVjb3JkRGF0YVxuICAgIH07XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZVNlbGVjdGlvbnNTdGFydFt0YWJsZUNvZGVdO1xuICAgIGlmICh0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlU2VsZWN0aW9uTWV0aG9kIG9mIHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVTZWxlY3Rpb25NZXRob2QodGFibGVTZWxlY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlclJlY29yZFNlbGVjdGlvbih0YWJsZVNlbGVjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsKSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgdGFibGVDb2RlLCByZWNvcmRJZCwgcmVjb3JkRGF0YSB9ID0gdGFibGVTZWxlY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCkgeyByZXR1cm47IH1cbiAgICB0YWJsZU9iamVjdC5wdXRPbldhaXQoKTtcbiAgICBsZXQgZmluaXNoID0gdHJ1ZTtcbiAgICBsZXQgYWN0aW9uUmVzdWx0ID0gbnVsbDtcbiAgICBpZiAodGFibGVPYmplY3Quc2VsZWN0aW9uQmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdDogYW55ID0ge1xuICAgICAgICB0YWJsZUNvZGUsXG4gICAgICAgIGFjdGlvblR5cGU6IHRoaXMuZm9ybUNvbmZpZy50YWJsZUFjdGlvbnMucm93U2VsZWN0aW9uLFxuICAgICAgICBhY3Rpb25Db2RlOiBudWxsLFxuICAgICAgICB0YWJsZVJlY29yZElkOiByZWNvcmRJZCxcbiAgICAgICAgdGFibGVSZWNvcmREYXRhOiByZWNvcmREYXRhXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudGFibGVBY3Rpb24sIGFjdGlvblN1YmplY3QpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVSZWNvcmRTZWxlY3Rpb24odGFibGVTZWxlY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlUmVjb3JkU2VsZWN0aW9uKHRhYmxlU2VsZWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSB9ID0gdGFibGVTZWxlY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZVNlbGVjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBpZiAodGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlcyA9IFtdO1xuICAgICAgZm9yIChjb25zdCB0YWJsZVNlbGVjdGlvbk1ldGhvZCBvZiB0YWJsZUV2ZW50SGFuZGxlcnMpIHtcbiAgICAgICAgY2xpZW50QWN0aW9uUHJvbWlzZXMucHVzaCh0YWJsZVNlbGVjdGlvbk1ldGhvZCh0YWJsZVNlbGVjdGlvbkRldGFpbCwgYWN0aW9uUmVzdWx0KSk7XG4gICAgICB9XG4gICAgICBhd2FpdCBQcm9taXNlLmFsbChjbGllbnRBY3Rpb25Qcm9taXNlcyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RhcnRUYWJsZVNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkV2ZW50KSB7XG4gICAgY29uc3QgeyB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIGFjdGlvbkRldGFpbCB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBpZiAoIXRhYmxlT2JqZWN0IHx8ICFhY3Rpb25Db2RlKSB7IHJldHVybjsgfVxuICAgIHRoaXMucmVzZXRFcnJvcigpO1xuICAgIGNvbnN0IHsgc2VsZWN0ZWRSZWNvcmRzIH0gPSBhY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgYWN0aW9uID0gdGFibGVPYmplY3QuZ2V0QWN0aW9uKGFjdGlvbkNvZGUpO1xuICAgIGlmICghYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIGNvbnN0IHRhYmxlQWN0aW9uRGV0YWlsID0ge1xuICAgICAgdGFibGVPYmplY3QsXG4gICAgICBhY3Rpb24sXG4gICAgICB0YWJsZUNvZGUsXG4gICAgICBhY3Rpb25Db2RlLFxuICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgfTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlQWN0aW9uc1N0YXJ0W3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbYWN0aW9uQ29kZV0gOiBudWxsO1xuICAgIGlmICh0YWJsZUFjdGlvbk1ldGhvZHMpIHtcbiAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2VzID0gW107XG4gICAgICBmb3IgKGNvbnN0IHRhYmxlQWN0aW9uTWV0aG9kIG9mIHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgICBjb25zdCBjbGllbnRBY3Rpb25Qcm9taXNlID0gdGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwpO1xuICAgICAgICBjbGllbnRBY3Rpb25Qcm9taXNlcy5wdXNoKGNsaWVudEFjdGlvblByb21pc2UpO1xuICAgICAgfVxuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsKGNsaWVudEFjdGlvblByb21pc2VzKTtcbiAgICAgIGNvbnN0IGNvbnRpbnVlQWN0aW9uID0gY2xpZW50QWN0aW9uUmVzdWx0cy5yZWR1Y2UoKHRvdGFsLCBjdXJyKSA9PiAodG90YWwgJiYgY3VyciksIHRydWUpO1xuICAgICAgaWYgKCFjb250aW51ZUFjdGlvbikge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhcnRUYWJsZVNlcnZlclNlbGVjdGlvbkFjdGlvbih0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsKSB7XG4gICAgY29uc3QgeyB0YWJsZU9iamVjdCwgYWN0aW9uLCB0YWJsZUNvZGUsIGFjdGlvbkNvZGUsIHNlbGVjdGVkUmVjb3JkcyB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgaWYgKCF0YWJsZU9iamVjdCB8fCAhYWN0aW9uKSB7IHJldHVybjsgfVxuICAgIHRhYmxlT2JqZWN0LnB1dE9uV2FpdCgpO1xuICAgIGxldCBmaW5pc2ggPSB0cnVlO1xuICAgIGxldCBhY3Rpb25SZXN1bHQgPSBudWxsO1xuICAgIGlmIChhY3Rpb24uYmFja2VuZCkge1xuICAgICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHtcbiAgICAgICAgdGFibGVDb2RlLFxuICAgICAgICBhY3Rpb25UeXBlOiB0aGlzLmZvcm1Db25maWcudGFibGVBY3Rpb25zLnNlbGVjdGlvbixcbiAgICAgICAgYWN0aW9uQ29kZSxcbiAgICAgICAgc2VsZWN0ZWRSZWNvcmRzXG4gICAgICB9O1xuICAgICAgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgICAucmVxdWVzdEZvcm1BY3Rpb24oZm9ybUFjdGlvbnMudGFibGVBY3Rpb24sIGFjdGlvblN1YmplY3QpO1xuICAgICAgZmluaXNoID0gIXRoaXMuZXJyb3JPY2N1cmVkKCk7XG4gICAgfVxuICAgIGlmIChmaW5pc2gpIHtcbiAgICAgIHRoaXMuZmluaXNoVGFibGVTZWxlY3Rpb25BY3Rpb24odGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgICB0aGlzLmNoYW5nZVN0YXRlKGFjdGlvbi5uZXdTdGF0ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9XG4gICAgdGFibGVPYmplY3QuZnJlZVdhaXRpbmcoKTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFRhYmxlU2VsZWN0aW9uQWN0aW9uKHRhYmxlQWN0aW9uRGV0YWlsLCBhY3Rpb25SZXN1bHQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSwgYWN0aW9uQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgY29uc3QgdGFibGVFdmVudEhhbmRsZXJzID0gdGhpcy50YWJsZUFjdGlvbnNGaW5pc2hbdGFibGVDb2RlXTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbk1ldGhvZHMgPSAodGFibGVFdmVudEhhbmRsZXJzKSA/IHRhYmxlRXZlbnRIYW5kbGVyc1thY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0VGFibGVHZXREYXRhKHRhYmxlQWN0aW9uRXZlbnQpIHtcbiAgICBjb25zdCB7IHRhYmxlQ29kZSB9ID0gdGFibGVBY3Rpb25FdmVudDtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZUFjdGlvbkRldGFpbCA9IHtcbiAgICAgIHRhYmxlT2JqZWN0LFxuICAgICAgdGFibGVDb2RlXG4gICAgfTtcbiAgICB0aGlzLnJlc2V0RXJyb3IoKTtcbiAgICBjb25zdCB0YWJsZUV2ZW50SGFuZGxlcnMgPSB0aGlzLnRhYmxlR2V0RGF0YVN0YXJ0W3RhYmxlQ29kZV07XG4gICAgaWYgKHRhYmxlRXZlbnRIYW5kbGVycykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVFdmVudEhhbmRsZXJzKSB7XG4gICAgICAgIGNvbnN0IGNsaWVudEFjdGlvblByb21pc2UgPSB0YWJsZUFjdGlvbk1ldGhvZCh0YWJsZUFjdGlvbkRldGFpbCk7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2goY2xpZW50QWN0aW9uUHJvbWlzZSk7XG4gICAgICB9XG4gICAgICBjb25zdCBjbGllbnRBY3Rpb25SZXN1bHRzID0gYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgICAgY29uc3QgY29udGludWVBY3Rpb24gPSBjbGllbnRBY3Rpb25SZXN1bHRzLnJlZHVjZSgodG90YWwsIGN1cnIpID0+ICh0b3RhbCAmJiBjdXJyKSwgdHJ1ZSk7XG4gICAgICBpZiAoIWNvbnRpbnVlQWN0aW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgdGhpcy5zdGFydFRhYmxlU2VydmVyR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbCk7XG4gIH1cblxuICBhc3luYyBzdGFydFRhYmxlU2VydmVyR2V0RGF0YSh0YWJsZUFjdGlvbkRldGFpbCkge1xuICAgIGNvbnN0IHsgdGFibGVPYmplY3QsIHRhYmxlQ29kZSB9ID0gdGFibGVBY3Rpb25EZXRhaWw7XG4gICAgdGFibGVPYmplY3QucHV0T25XYWl0KCk7XG4gICAgY29uc3QgYWN0aW9uU3ViamVjdCA9IHsgdGFibGVDb2RlIH07XG4gICAgY29uc3QgYWN0aW9uUmVzdWx0ID0gYXdhaXQgdGhpc1xuICAgICAgLnJlcXVlc3RGb3JtQWN0aW9uKGZvcm1BY3Rpb25zLmdldFRhYmxlRGF0YSwgYWN0aW9uU3ViamVjdCk7XG4gICAgaWYgKHRoaXMuZXJyb3JPY2N1cmVkKCkpIHtcbiAgICAgIHRoaXMuZGlzcGxheVRhYmxlU2VydmVyRXJyb3IoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5maW5pc2hUYWJsZUdldERhdGEodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCk7XG4gICAgfVxuICAgIHRhYmxlT2JqZWN0LmZyZWVXYWl0aW5nKCk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hUYWJsZUdldERhdGEodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkge1xuICAgIGNvbnN0IHsgdGFibGVDb2RlLCB0YWJsZUFjdGlvbkNvZGUgfSA9IHRhYmxlQWN0aW9uRGV0YWlsO1xuICAgIGNvbnN0IHRhYmxlRXZlbnRIYW5kbGVycyA9IHRoaXMudGFibGVBY3Rpb25zRmluaXNoW3RhYmxlQ29kZV07XG4gICAgY29uc3QgdGFibGVBY3Rpb25NZXRob2RzID0gKHRhYmxlRXZlbnRIYW5kbGVycykgPyB0YWJsZUV2ZW50SGFuZGxlcnNbdGFibGVBY3Rpb25Db2RlXSA6IG51bGw7XG4gICAgaWYgKHRhYmxlQWN0aW9uTWV0aG9kcykge1xuICAgICAgY29uc3QgY2xpZW50QWN0aW9uUHJvbWlzZXMgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgdGFibGVBY3Rpb25NZXRob2Qgb2YgdGFibGVBY3Rpb25NZXRob2RzKSB7XG4gICAgICAgIGNsaWVudEFjdGlvblByb21pc2VzLnB1c2godGFibGVBY3Rpb25NZXRob2QodGFibGVBY3Rpb25EZXRhaWwsIGFjdGlvblJlc3VsdCkpO1xuICAgICAgfVxuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xpZW50QWN0aW9uUHJvbWlzZXMpO1xuICAgIH1cbiAgfVxuXG4gIGNoZWNrU2VjdGlvblJlcXVpcmVkRmllbGRzKHNlY3Rpb25Db2RlLCByZXFGaWVsZE1lc3NhZ2U/KSB7XG4gICAgdGhpcy5jbGVhbkVycm9yRmllbGRzKG51bGwsIHNlY3Rpb25Db2RlKTtcbiAgICBjb25zdCByZXF1aXJlZEZpZWxkTWVzc2FnZSA9IHJlcUZpZWxkTWVzc2FnZSA/PyB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGRcbiAgICBjb25zdCBudW1FcnJvcnMgPSB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcih0aGlzLmdldFJlcXVpcmVkRW1wdHlGaWVsZHMobnVsbCxcbiAgICAgIHNlY3Rpb25Db2RlKSwgbnVsbCwgcmVxdWlyZWRGaWVsZE1lc3NhZ2UpO1xuICAgIHJldHVybiAobnVtRXJyb3JzID09PSAwKTtcbiAgfVxuXG4gIHZhbGlkYXRlU2VjdGlvbkNvbnNpc3RlbmN5KHNlY3Rpb25Db2RlLCByZXFGaWVsZE1lc3NhZ2U/KSB7XG4gICAgdGhpcy5yZXNldEVycm9yKCk7XG4gICAgY29uc3QgY29tcGxldGVGaWVsZHMgPSB0aGlzLmNoZWNrU2VjdGlvblJlcXVpcmVkRmllbGRzKHNlY3Rpb25Db2RlLCByZXFGaWVsZE1lc3NhZ2UpO1xuICAgIGlmICghY29tcGxldGVGaWVsZHMpIHtcbiAgICAgIHRoaXMuc2V0RXJyb3IodGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy50eXBlV2FybmluZyxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uVGl0bGUsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZHMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBsZXQgdmFsaWRhdGlvbkVycm9yID0gZmFsc2U7XG4gICAgY29uc3QgcmVxdWlyZWRFbXB0eUZpZWxkcyA9IHRoaXMuZ2V0UmVxdWlyZWRFbXB0eUZpZWxkcyhudWxsLCBzZWN0aW9uQ29kZSk7XG4gICAgaWYgKHJlcXVpcmVkRW1wdHlGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IodGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy50eXBlV2FybmluZyxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uVGl0bGUsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMucmVxdWlyZWRGaWVsZHMpO1xuICAgICAgdGhpcy50YWdGaWVsZHNXaXRoRXJyb3IocmVxdWlyZWRFbXB0eUZpZWxkcywgbnVsbCxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkKTtcbiAgICAgIGZvciAoY29uc3QgZmllbGRDb2RlIG9mIHJlcXVpcmVkRW1wdHlGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgcmVxdWlyZWRFbXB0eUZpZWxkID0gdGhpcy5nZXRGaWVsZChmaWVsZENvZGUpO1xuICAgICAgICBpZiAocmVxdWlyZWRFbXB0eUZpZWxkICYmIHJlcXVpcmVkRW1wdHlGaWVsZC53aWRnZXRcbiAgICAgICAgICAmJiByZXF1aXJlZEVtcHR5RmllbGQud2lkZ2V0LmZvY3VzKSB7XG4gICAgICAgICAgcmVxdWlyZWRFbXB0eUZpZWxkLndpZGdldC5mb2N1cygpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHZhbGlkYXRpb25Jc3N1ZUZpZWxkcyA9IHRoaXMuZ2V0RmllbGRzV2l0aFZhbGlkYXRpb25Jc3N1ZXMobnVsbCxcbiAgICAgIHNlY3Rpb25Db2RlKTtcbiAgICBpZiAoIXZhbGlkYXRpb25FcnJvciAmJiB2YWxpZGF0aW9uSXNzdWVGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGlvbkVycm9yID0gdHJ1ZTtcbiAgICAgIHRoaXMuc2V0RXJyb3IodGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy50eXBlV2FybmluZyxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy52YWxpZGF0aW9uVGl0bGUsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvbkZpZWxkcyk7XG4gICAgICBmb3IgKGNvbnN0IGZpZWxkQ29kZSBvZiB2YWxpZGF0aW9uSXNzdWVGaWVsZHMpIHtcbiAgICAgICAgY29uc3QgdmFsaWRhdGlvbklzc3VlRmllbGQgPSB0aGlzLmdldEZpZWxkKGZpZWxkQ29kZSk7XG4gICAgICAgIGlmICh2YWxpZGF0aW9uSXNzdWVGaWVsZCAmJiB2YWxpZGF0aW9uSXNzdWVGaWVsZC53aWRnZXRcbiAgICAgICAgICAmJiB2YWxpZGF0aW9uSXNzdWVGaWVsZC53aWRnZXQuZm9jdXMpIHtcbiAgICAgICAgICB2YWxpZGF0aW9uSXNzdWVGaWVsZC53aWRnZXQuZm9jdXMoKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGlvbkVycm9yO1xuICB9XG5cbiAgY29weVRhYmxlUmVjb3JkVG9GaWVsZHModGFibGVPYmosIG1hcHBpbmdUYWJsZSA9IG51bGwpIHtcbiAgICBjb25zdCB0YWJsZU9iamVjdCA9IHRoaXMuZ2V0VGFibGUodGFibGVPYmoudGFibGVDb2RlKTtcbiAgICBjb25zdCB0YWJsZVJlY29yZCA9IHRhYmxlT2JqZWN0LmdldFRhYmxlUmVjb3JkKHRhYmxlT2JqLnJlY29yZElkKTtcbiAgICBjb25zdCBjb2x1bW5OYW1lcyA9IHRhYmxlT2JqZWN0LmNvbHVtbk5hbWVzO1xuICAgIGZvciAoY29uc3QgY29sdW1uTmFtZSBvZiBjb2x1bW5OYW1lcykge1xuICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSB0YWJsZVJlY29yZC5nZXRGaWVsZFZhbHVlKGNvbHVtbk5hbWUpID8/ICcnO1xuICAgICAgY29uc3QgZmllbGRDb2RlID0gbWFwcGluZ1RhYmxlPy5bY29sdW1uTmFtZV0gPz8gY29sdW1uTmFtZTtcbiAgICAgIHRoaXMuc2V0RmllbGRWYWx1ZShmaWVsZENvZGUsIGNvbHVtblZhbHVlKTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogU29wb3J0ZSByZWdpc3Ryb3MgZW4gdGFibGFzIHF1ZSBzZSBlZGl0YW4gZW4gY2FtcG9zIGRlbCBmb3JtdWxhcmlvXG4gICAqL1xuXG4gIGRlZmluZUVkaXRpb25UYWJsZSh0YWJsZUVkaXRpb25EZWYpIHtcbiAgICBjb25zdCB7IGNvbHVtbkZpZWxkTWFwcGluZywgcmVjb3JkQ2FwdHVyZUZpZWxkcywgc3RhcnRDb2xsYXBzZWQgfSA9IHRhYmxlRWRpdGlvbkRlZjtcbiAgICB0YWJsZUVkaXRpb25EZWYuc3RhcnRDb2xsYXBzZWQgPSAodHlwZW9mIHN0YXJ0Q29sbGFwc2VkICE9PSAndW5kZWZpbmVkJylcbiAgICAgID8gc3RhcnRDb2xsYXBzZWQgOiB0cnVlO1xuXG4gICAgY29uc3QgZmllbGRzTWFwcGluZ1RhYmxlID0ge307XG4gICAgY29uc3QgZmllbGRzVG9DbGVhciA9IFtdO1xuICAgIGZvciAoY29uc3QgY29sdW1uTWFwIG9mIGNvbHVtbkZpZWxkTWFwcGluZykge1xuICAgICAgY29uc3QgW2NvbHVtbk5hbWUsIGZvcm1GaWVsZF0gPSBjb2x1bW5NYXA7XG4gICAgICBmaWVsZHNNYXBwaW5nVGFibGVbY29sdW1uTmFtZV0gPSBmb3JtRmllbGQ7XG4gICAgICBmaWVsZHNUb0NsZWFyLnB1c2goZm9ybUZpZWxkKTtcbiAgICB9XG4gICAgdGFibGVFZGl0aW9uRGVmLmZpZWxkc01hcHBpbmdUYWJsZSA9IGZpZWxkc01hcHBpbmdUYWJsZTtcbiAgICB0YWJsZUVkaXRpb25EZWYuZmllbGRzVG9DbGVhciA9IGZpZWxkc1RvQ2xlYXI7XG5cbiAgICBjb25zdCB7IHRhYmxlTmFtZSwgbmV3UmVjb3JkQWN0aW9uTmFtZSwgc2F2ZVJlY29yZEFjdGlvbk5hbWUsXG4gICAgICBjYW5jZWxTYXZlUmVjb3JkQWN0aW9uTmFtZSwgdGFibGVFZGl0UmVjb3JkQWN0aW9uTmFtZSwgZW5hYmxlUmVjb3JkRWRpdGlvblxuICAgIH0gPSB0YWJsZUVkaXRpb25EZWY7XG5cbiAgICB0aGlzLmFkZEFjdGlvbk1ldGhvZFN0YXJ0KG5ld1JlY29yZEFjdGlvbk5hbWUsICgpID0+IHtcbiAgICAgIHRoaXMuY2xlYW5GaWVsZHMoZmllbGRzVG9DbGVhciwgbnVsbCk7XG4gICAgICB0aGlzLnNob3dGaWVsZHMocmVjb3JkQ2FwdHVyZUZpZWxkcyk7XG4gICAgICBpZiAoIWVuYWJsZVJlY29yZEVkaXRpb24pIHtcbiAgICAgICAgdGhpcy5lbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgICB9XG4gICAgICB0aGlzLmhpZGVBY3Rpb24obmV3UmVjb3JkQWN0aW9uTmFtZSk7XG4gICAgICB0aGlzLnNob3dBY3Rpb24oY2FuY2VsU2F2ZVJlY29yZEFjdGlvbk5hbWUpO1xuICAgICAgdGhpcy5zaG93QWN0aW9uKHNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0pO1xuICAgIGNvbnN0IHsgcmVjb3JkRWRpdGlvblZhbGlkYXRlLCBkaXNhYmxlUmVjb3JkRWRpdGlvbiB9ID0gdGFibGVFZGl0aW9uRGVmO1xuICAgIHRoaXMuYWRkQWN0aW9uTWV0aG9kU3RhcnQoc2F2ZVJlY29yZEFjdGlvbk5hbWUsICgpID0+IHtcbiAgICAgIHJldHVybiAoIXJlY29yZEVkaXRpb25WYWxpZGF0ZSkgPyB0aGlzLnJlY29yZEVkaXRpb25WYWxpZGF0ZSh0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgIDogcmVjb3JkRWRpdGlvblZhbGlkYXRlKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgfSk7XG4gICAgdGhpcy5hZGRBY3Rpb25NZXRob2RGaW5pc2goc2F2ZVJlY29yZEFjdGlvbk5hbWUsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5lcnJvck9jY3VyZWQoKSkge1xuICAgICAgICByZXR1cm4gKCFkaXNhYmxlUmVjb3JkRWRpdGlvbikgPyB0aGlzLmRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZilcbiAgICAgICAgICA6IGRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5hZGRBY3Rpb25NZXRob2RTdGFydChjYW5jZWxTYXZlUmVjb3JkQWN0aW9uTmFtZSwgKCkgPT4ge1xuICAgICAgcmV0dXJuICghZGlzYWJsZVJlY29yZEVkaXRpb24pID8gdGhpcy5kaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgIDogZGlzYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmKTtcbiAgICB9KTtcbiAgICB0aGlzLmFkZFRhYmxlQWN0aW9uU3RhcnQodGFibGVOYW1lLCB0YWJsZUVkaXRSZWNvcmRBY3Rpb25OYW1lLFxuICAgICAgKHRibEFjdE9iaikgPT4ge1xuICAgICAgICByZXR1cm4gKCFlbmFibGVSZWNvcmRFZGl0aW9uKVxuICAgICAgICAgID8gdGhpcy5lbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZiwgdGJsQWN0T2JqKVxuICAgICAgICAgIDogZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYsIHRibEFjdE9iaik7XG4gICAgICB9KTtcbiAgICBpZiAodGFibGVFZGl0aW9uRGVmLnN0YXJ0Q29sbGFwc2VkKSB7XG4gICAgICByZXR1cm4gKCF0YWJsZUVkaXRpb25EZWYuZGlzYWJsZVJlY29yZEVkaXRpb24pXG4gICAgICAgID8gdGhpcy5kaXNhYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgIDogdGFibGVFZGl0aW9uRGVmLmRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAoIXRhYmxlRWRpdGlvbkRlZi5lbmFibGVSZWNvcmRFZGl0aW9uKVxuICAgICAgICA/IHRoaXMuZW5hYmxlUmVjb3JkRWRpdGlvbih0YWJsZUVkaXRpb25EZWYpXG4gICAgICAgIDogdGFibGVFZGl0aW9uRGVmLmVuYWJsZVJlY29yZEVkaXRpb24odGFibGVFZGl0aW9uRGVmLCBudWxsKTtcbiAgICB9XG4gIH1cblxuICBlbmFibGVSZWNvcmRFZGl0aW9uKHRhYmxlRWRpdGlvbkRlZiwgdGFibGVBY3Rpb25PYmplY3QgPSBudWxsKSB7XG4gICAgaWYgKHRhYmxlQWN0aW9uT2JqZWN0KSB7XG4gICAgICB0aGlzLmNvcHlUYWJsZVJlY29yZFRvRmllbGRzKHRhYmxlQWN0aW9uT2JqZWN0LCB0YWJsZUVkaXRpb25EZWYuZmllbGRzTWFwcGluZ1RhYmxlKTtcbiAgICB9XG4gICAgdGhpcy5zaG93RmllbGRzKHRhYmxlRWRpdGlvbkRlZi5yZWNvcmRDYXB0dXJlRmllbGRzKTtcbiAgICB0aGlzLmhpZGVBY3Rpb24odGFibGVFZGl0aW9uRGVmLm5ld1JlY29yZEFjdGlvbk5hbWUpO1xuICAgIHRoaXMuc2hvd0FjdGlvbih0YWJsZUVkaXRpb25EZWYuY2FuY2VsU2F2ZVJlY29yZEFjdGlvbk5hbWUpO1xuICAgIHRoaXMuc2hvd0FjdGlvbih0YWJsZUVkaXRpb25EZWYuc2F2ZVJlY29yZEFjdGlvbk5hbWUpO1xuICAgIGlmICh0YWJsZUVkaXRpb25EZWYuZmllbGRzVG9UcmlnZ2VyVmFsaWRhdGlvblxuICAgICAgJiYgdGFibGVFZGl0aW9uRGVmLmZpZWxkc1RvVHJpZ2dlclZhbGlkYXRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgZm9yIChjb25zdCBmaWVsZE5hbWUgb2YgdGFibGVFZGl0aW9uRGVmLmZpZWxkc1RvVHJpZ2dlclZhbGlkYXRpb24pIHtcbiAgICAgICAgdGhpcy5zdGFydEZpZWxkVmFsaWRhdGlvbihmaWVsZE5hbWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGRpc2FibGVSZWNvcmRFZGl0aW9uKHRhYmxlRGVmaW5pdGlvbikge1xuICAgIHRoaXMuY2xlYW5GaWVsZHModGFibGVEZWZpbml0aW9uLmZpZWxkc1RvQ2xlYXIsIG51bGwpO1xuICAgIHRoaXMuaGlkZUZpZWxkcyh0YWJsZURlZmluaXRpb24ucmVjb3JkQ2FwdHVyZUZpZWxkcyk7XG4gICAgdGhpcy5zaG93QWN0aW9uKHRhYmxlRGVmaW5pdGlvbi5uZXdSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICB0aGlzLmhpZGVBY3Rpb24odGFibGVEZWZpbml0aW9uLmNhbmNlbFNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICB0aGlzLmhpZGVBY3Rpb24odGFibGVEZWZpbml0aW9uLnNhdmVSZWNvcmRBY3Rpb25OYW1lKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIHJlY29yZEVkaXRpb25WYWxpZGF0ZSh0YWJsZUVkaXRpb25EZWYpIHtcbiAgICBjb25zdCB7IHJlY29yZENhcHR1cmVGaWVsZHMgfSA9IHRhYmxlRWRpdGlvbkRlZjtcbiAgICBsZXQgdmFsaWRhdGlvbk9rID0gdHJ1ZTtcbiAgICBjb25zdCByZXF1aXJlZEVtcHR5RmllbGRzID0gdGhpcy5nZXRSZXF1aXJlZEVtcHR5RmllbGRzKHJlY29yZENhcHR1cmVGaWVsZHMsIG51bGwpO1xuICAgIGlmIChyZXF1aXJlZEVtcHR5RmllbGRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHZhbGlkYXRpb25PayA9IGZhbHNlO1xuICAgICAgdGhpcy5zZXRFcnJvcih0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnR5cGVXYXJuaW5nLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25UaXRsZSxcbiAgICAgICAgdGhpcy5mb3JtQ29uZmlnLmZvcm1TdGFuZGFyZEVycm9ycy5yZXF1aXJlZEZpZWxkcyk7XG4gICAgICB0aGlzLnRhZ0ZpZWxkc1dpdGhFcnJvcihyZXF1aXJlZEVtcHR5RmllbGRzLCBudWxsLFxuICAgICAgICB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnJlcXVpcmVkRmllbGQpO1xuICAgIH1cbiAgICBjb25zdCB2YWxpZGF0aW9uSXNzdWVGaWVsZHMgPSB0aGlzLmdldEZpZWxkc1dpdGhWYWxpZGF0aW9uSXNzdWVzKHJlY29yZENhcHR1cmVGaWVsZHMsIG51bGwpO1xuICAgIGlmICh2YWxpZGF0aW9uSXNzdWVGaWVsZHMubGVuZ3RoID4gMCkge1xuICAgICAgdmFsaWRhdGlvbk9rID0gZmFsc2U7XG4gICAgICB0aGlzLnNldEVycm9yKHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudHlwZVdhcm5pbmcsXG4gICAgICAgIHRoaXMuZm9ybUNvbmZpZy5mb3JtU3RhbmRhcmRFcnJvcnMudmFsaWRhdGlvblRpdGxlLCB0aGlzLmZvcm1Db25maWcuZm9ybVN0YW5kYXJkRXJyb3JzLnZhbGlkYXRpb25GaWVsZHMpO1xuICAgIH1cbiAgICByZXR1cm4gdmFsaWRhdGlvbk9rO1xuICB9XG59XG4iXX0=