@smarterplan/ngx-smarterplan-core 0.3.18 → 0.4.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.
Files changed (29) hide show
  1. package/README.md +24 -24
  2. package/esm2020/lib/components/csv-export/csv-export.component.mjs +3 -3
  3. package/esm2020/lib/components/menu-bar/avatar/avatar.component.mjs +1 -1
  4. package/esm2020/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +3 -3
  5. package/esm2020/lib/components/menu-bar/range-date-picker/range-date-picker.component.mjs +3 -3
  6. package/esm2020/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +3 -3
  7. package/esm2020/lib/components/search-bar/search-bar.component.mjs +3 -3
  8. package/esm2020/lib/mattertagData.mjs +43 -45
  9. package/esm2020/lib/ngx-smarterplan-core.service.mjs +1 -1
  10. package/esm2020/lib/pipes/duration-to-string.pipe.mjs +1 -1
  11. package/esm2020/lib/pipes/hashtag-from-id.pipe.mjs +1 -1
  12. package/esm2020/lib/pipes/safe-url.pipe.mjs +1 -1
  13. package/esm2020/lib/pipes/time-date-to-local-string.pipe.mjs +1 -1
  14. package/esm2020/lib/services/matterport.service.mjs +38 -77
  15. package/esm2020/lib/services/user.service.mjs +11 -2
  16. package/esm2020/lib/services/viewer.service.mjs +21 -102
  17. package/esm2020/lib/types.service.mjs +16 -1
  18. package/esm2020/public-api.mjs +2 -1
  19. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +136 -252
  20. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  21. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +134 -232
  22. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  23. package/lib/mattertagData.d.ts +3 -10
  24. package/lib/services/matterport.service.d.ts +4 -10
  25. package/lib/services/user.service.d.ts +1 -0
  26. package/lib/services/viewer.service.d.ts +13 -25
  27. package/lib/types.service.d.ts +31 -3
  28. package/package.json +1 -1
  29. package/public-api.d.ts +1 -0
@@ -46,7 +46,7 @@ export class BaseUserService {
46
46
  **/
47
47
  async checkConnectedAWSUser() {
48
48
  if (!this.cu) {
49
- console.log("first connection");
49
+ console.log("checl AWS user");
50
50
  let cau = null;
51
51
  let user = null;
52
52
  try {
@@ -401,6 +401,15 @@ export class BaseUserService {
401
401
  this.isChanged.next(false);
402
402
  await Auth.signOut();
403
403
  }
404
+ async logoutCurrentWihtoutAuth() {
405
+ await this.profileService.updateProfile({
406
+ id: this.cu.id,
407
+ token: null,
408
+ });
409
+ this.cu = null;
410
+ this.currentMissions = null;
411
+ this.isChanged.next(false);
412
+ }
404
413
  async checkAccessToken(jwtToken) {
405
414
  const now = DateTime.local();
406
415
  // console.log("now", now);
@@ -441,4 +450,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
441
450
  providedIn: "root",
442
451
  }]
443
452
  }], ctorParameters: function () { return [{ type: i1.ProfileService }, { type: i2.MissionService }, { type: i3.PropertyService }, { type: i4.Router }, { type: i5.Location }, { type: i0.NgZone }, { type: i6.TranslateService }]; } });
444
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE9BQU8sRUFBRSxXQUFXLEVBQWtDLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJeEssT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7OztBQVVuQzs7R0FFRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBcUJ4QixZQUNZLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGVBQWdDLEVBQ2hDLE1BQWMsRUFDZCxRQUFrQixFQUNsQixNQUFjLEVBQ2QsU0FBMkI7UUFOM0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBMUJ2QyxjQUFTLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFFckQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixh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LEdBQUcsSUFBSSxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDckMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUIsQ0FBQzs7NEdBOWdCUSxlQUFlO2dIQUFmLGVBQWUsY0FGWixNQUFNOzJGQUVULGVBQWU7a0JBSDNCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgTmdab25lIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gXCJAYW5ndWxhci9yb3V0ZXJcIjtcclxuaW1wb3J0IHsgTG9jYXRpb24gfSBmcm9tIFwiQGFuZ3VsYXIvY29tbW9uXCI7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tIFwiQG5neC10cmFuc2xhdGUvY29yZVwiO1xyXG5pbXBvcnQgeyBMZXZlbFN0YXR1cywgTWlzc2lvbiwgT3JnYW5pc2F0aW9uLCBQcm9maWxlLCBQcm9maWxlRW50aXR5LCBQcm9maWxlU3RhdHVzLCBQcm9wZXJ0eVR5cGUsIFJvbGVTdGF0dXMgfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBlbnVtVG9BcnJheSwgZmlsdGVyVW5pcXVlQXJyYXlCeUlELCBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucywgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucywgZ2V0TGV2ZWxzQmVsb3csIGdldFJvbGVzQmVsb3dGb3JNYW5hZ2VyIH0gZnJvbSBcIi4uL2hlbHBlcnMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQcm9maWxlU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9wcm9maWxlLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWlzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvbWlzc2lvbi5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFByb3BlcnR5U2VydmljZSB9IGZyb20gXCIuL21vZGVscy9wcm9wZXJ0eS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERhdGVUaW1lIH0gZnJvbSBcImx1eG9uXCI7XHJcbmltcG9ydCB7IEF1dGggfSBmcm9tIFwiYXdzLWFtcGxpZnlcIjtcclxuXHJcbmludGVyZmFjZSBDcmVhdGVVc2VyIHtcclxuICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICBwaG9uZTogc3RyaW5nO1xyXG4gICAgbGFzdE5hbWU6IHN0cmluZztcclxuICAgIGZpcnN0TmFtZTogc3RyaW5nO1xyXG4gICAgcGFzc3dvcmQ/OiBzdHJpbmc7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBVc2VyU2VydmljZSBoYW5kbGVzIHVzZXIncyBsaWZlY3ljbGUsIGZyb20gY3JlYXRpb24gdG8gZGVsZXRpb25cclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgQmFzZVVzZXJTZXJ2aWNlIHtcclxuXHJcbiAgICBpc0NoYW5nZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG5cclxuICAgIHVwZGF0aW5nID0gZmFsc2U7XHJcblxyXG4gICAgbWFuYWdlcnMgPSBbXHJcbiAgICAgICAgUm9sZVN0YXR1cy5BRE1JTixcclxuICAgICAgICBSb2xlU3RhdHVzLk1BTkFHRVIsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcclxuICAgICAgICBSb2xlU3RhdHVzLkdVSURFX01VU0VVTSxcclxuICAgIF07XHJcblxyXG4gICAgY3VycmVudE1pc3Npb25zOiBNaXNzaW9uW107XHJcblxyXG4gICAgbGFzdEV4cGlyZWRNaXNzaW9uOiBNaXNzaW9uO1xyXG5cclxuICAgIG5leHRNaXNzaW9uVG9TdGFydDogTWlzc2lvbjtcclxuXHJcbiAgICBjdTogUHJvZmlsZUVudGl0eSA9IG51bGw7XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9maWxlU2VydmljZTogUHJvZmlsZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtaXNzaW9uU2VydmljZTogTWlzc2lvblNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwcm9wZXJ0eVNlcnZpY2U6IFByb3BlcnR5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgICAgIHByaXZhdGUgbG9jYXRpb246IExvY2F0aW9uLFxyXG4gICAgICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmUsXHJcbiAgICAgICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICAvLyB0aGlzLmNoZWNrQ29ubmVjdGVkQVdTVXNlcigpO1xyXG4gICAgICAgIHRoaXMubWlzc2lvblNlcnZpY2UuY3VycmVudE1pc3Npb25zVXBkYXRlZC5zdWJzY3JpYmUoYXN5bmMgKGRhdGEpID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJjdXJyZW50IG1pc3Npb25zIHVwZGF0ZWRcIik7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1pc3Npb25zID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuaW5zdGFudE1pc3Npb25zT2ZDdXJyZW50KHRoaXMuY3UuaWQpO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInVzZXIgaXMgY2hhbmdlZCBlbWl0dGluZ1wiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0NoYW5nZWQubmV4dCh0cnVlKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiBBV1MgdXNlciBpcyBjb25uZWN0ZWQgYW5kIGFzc2lnbmcgaXQgdG8gY3VycmVudCB1c2VyICh0aGlzLmN1KVxyXG4gICAgKiovXHJcbiAgICBhc3luYyBjaGVja0Nvbm5lY3RlZEFXU1VzZXIoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1KSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiZmlyc3QgY29ubmVjdGlvblwiKTtcclxuICAgICAgICAgICAgbGV0IGNhdSA9IG51bGw7XHJcbiAgICAgICAgICAgIGxldCB1c2VyID0gbnVsbDtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNhdSA9IGF3YWl0IEF1dGguY3VycmVudEF1dGhlbnRpY2F0ZWRVc2VyKCk7XHJcbiAgICAgICAgICAgICAgICB1c2VyID0gYXdhaXQgdGhpcy5jdXJyZW50KGNhdSk7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh1c2VyKTtcclxuICAgICAgICAgICAgfSBjYXRjaCB7IH1cclxuICAgICAgICAgICAgaWYgKCF1c2VyKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcImhlcmVcIik7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCJhdXRoXCJdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGNyZWF0ZVVzZXIgc3Bhd25zIGEgbmV3IFVzZXIsIGFsb25nIHdpdGg6XHJcbiAgICAgKiAtIGEgcHJvcGVyIEFXU0NvZ25pdG8gc2lnbnVwXHJcbiAgICAgKiAtIGEgUHJvZmlsZSBlbnRyeSBob2xkaW5nIHRoZSBBV1NDb2duaXRvIElEXHJcbiAgICAgKiAtIGEgTWlzc2lvbiBlbnRyeSBob2xkaW5nIHRoZSBPcmdhbmlzYXRpb24gSURcclxuICAgICAqXHJcbiAgICAgKiBAc2VlIDE3NFxyXG4gICAgICogQHNlZSBodHRwczovL2RvY3MuYW1wbGlmeS5hd3MvbGliL2F1dGgvZW1haWxwYXNzd29yZC9xL3BsYXRmb3JtL2pzI3NpZ24tdXBcclxuICAgICAqIEB0b2RvIHdvbmRlciBpZiB3ZSBjYW4gbWFzaCB0b2dldGhlciBQcm9maWxlLCBNaXNzaW9uIGFuZCBVc2VyIGVudHJpZXNcclxuICAgICAqIEBwYXJhbSB1IFVzZXIgdG8gYmUgY3JlYXRlZFxyXG4gICAgICovXHJcbiAgICBhc3luYyBjcmVhdGVVc2VyQVdTYW5kUHJvZmlsZShcclxuICAgICAgICB1OiB7XHJcbiAgICAgICAgICAgIGVtYWlsOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHBob25lOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGxhc3ROYW1lOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGZpcnN0TmFtZTogc3RyaW5nO1xyXG4gICAgICAgICAgICBwYXNzd29yZD86IHN0cmluZztcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByZXZhbGlkYXRlZDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgKTogUHJvbWlzZTxQcm9maWxlPiB7XHJcbiAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IHtcclxuICAgICAgICAgICAgZW1haWw6IHUuZW1haWwudHJpbSgpLFxyXG4gICAgICAgICAgICBnaXZlbl9uYW1lOiB1LmZpcnN0TmFtZSxcclxuICAgICAgICAgICAgZmFtaWx5X25hbWU6IHUubGFzdE5hbWUsXHJcbiAgICAgICAgICAgIHpvbmVpbmZvOiBcImZyXCIsIC8vIEB0b2RvIGRlYWwgd2l0aCB6b25laW5mbyBhbmQgbG9jYWxlXHJcbiAgICAgICAgICAgIGxvY2FsZTogXCJmclwiLFxyXG4gICAgICAgICAgICBcImN1c3RvbTpwcmV2YWxpZGF0ZWRcIjogXCJmYWxzZVwiLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgaWYgKHByZXZhbGlkYXRlZCkge1xyXG4gICAgICAgICAgICBhdHRyaWJ1dGVzW1wiY3VzdG9tOnByZXZhbGlkYXRlZFwiXSA9IFwidHJ1ZVwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBBV1NDb2duaXRvXHJcbiAgICAgICAgY29uc3QgcGFzc3dvcmQgPSB1LnBhc3N3b3JkID8gdS5wYXNzd29yZCA6IFwidGVtcG9yYXJ5cFwiO1xyXG4gICAgICAgIGxldCBlcnJvcjtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBjb25zdCB7IHVzZXJTdWIgfSA9IGF3YWl0IEF1dGguc2lnblVwKHtcclxuICAgICAgICAgICAgICAgIHVzZXJuYW1lOiB1LmVtYWlsLCAvLyB1c2VybmFtZSBzaG91bGQgYmUgYW4gZW1haWwgdGhleSBzYXlcclxuICAgICAgICAgICAgICAgIHBhc3N3b3JkLFxyXG4gICAgICAgICAgICAgICAgYXR0cmlidXRlcyxcclxuICAgICAgICAgICAgICAgIGNsaWVudE1ldGFkYXRhOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgcGhvbmU6IHUucGhvbmUsXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKHVzZXJTdWIpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmNyZWF0ZVByb2ZpbGUodXNlclN1YiwgdSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9IGNhdGNoIChlcnJvcl86IGFueSkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKGVycm9yXy5jb2RlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiSW52YWxpZFBhc3N3b3JkRXhjZXB0aW9uXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBcImF1dGguZXJyb3Iud3JvbmdfcGFzc3dvcmRcIjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJVc2VyTm90Q29uZmlybWVkRXhjZXB0aW9uXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBcImF1dGguZXJyb3IudXNlcl9ub3RfY29uZmlybWVkXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIFwiSW52YWxpZFBhcmFtZXRlckV4Y2VwdGlvblwiOlxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gXCJhdXRoLmVycm9yLmludmFsaWRfcGFyYW1ldGVyXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yID0gZXJyb3JfLm1lc3NhZ2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coYEFXUyBTaWduIFVQIGVycm9yIDogJHtlcnJvcn1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVQcm9maWxlKFxyXG4gICAgICAgIGF3c1VzZXJJRDogc3RyaW5nLFxyXG4gICAgICAgIHU6IENyZWF0ZVVzZXIsXHJcbiAgICApOiBQcm9taXNlPFByb2ZpbGU+IHtcclxuICAgICAgICBjb25zdCBwcm9maWxlID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5jcmVhdGVQcm9maWxlKHtcclxuICAgICAgICAgICAgdXNlcklEOiBhd3NVc2VySUQsXHJcbiAgICAgICAgICAgIG1ldGFkYXRhOiBKU09OLnN0cmluZ2lmeSh7XHJcbiAgICAgICAgICAgICAgICBlbWFpbDogdS5lbWFpbCxcclxuICAgICAgICAgICAgICAgIHBob25lOiB1LnBob25lLFxyXG4gICAgICAgICAgICAgICAgbGFzdE5hbWU6IHUubGFzdE5hbWUsXHJcbiAgICAgICAgICAgICAgICBmaXJzdE5hbWU6IHUuZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgc3RhdHVzOiBQcm9maWxlU3RhdHVzLldBSVRJTkdfRk9SX0FDVElWQVRJT04sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHByb2ZpbGU7XHJcbiAgICB9XHJcblxyXG4gICAgY3VycmVudE9yZ2FuaXNhdGlvbihzcGFjZUlEOiBzdHJpbmcgPSBudWxsKTogT3JnYW5pc2F0aW9uIHtcclxuICAgICAgICBpZiAodGhpcy5jdSkge1xyXG4gICAgICAgICAgICBpZiAoIXNwYWNlSUQpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNaXNzaW9uc1swXS5vcmdhbmlzYXRpb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1pc3Npb24oc3BhY2VJRCkub3JnYW5pc2F0aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjdXJyZW50KFxyXG4gICAgICAgIHVzZXIsXHJcbiAgICAgICAgZmFzdENvbm5lY3Q6IGJvb2xlYW4gPSBmYWxzZSxcclxuICAgICk6IFByb21pc2U8UHJvZmlsZUVudGl0eSB8IG51bGw+IHtcclxuICAgICAgICBpZiAoIXRoaXMuY3UgJiYgIXRoaXMudXBkYXRpbmcpIHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY3UgPSBhd2FpdCB0aGlzLnVzZXJGcm9tQVdTSUQodXNlci51c2VybmFtZSk7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdSAmJiB1c2VyLmF0dHJpYnV0ZXMuZW1haWwpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgIGBObyBwcm9maWxlIGZvciB1c2VySUQg8J+UqiAke3VzZXIuYXR0cmlidXRlcy5lbWFpbH1gLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIC8vIFRoZXJlJ3Mgbm8gcHJvZmlsZXMsIHByb2ZpbGVzLml0ZW1zLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgICAgICAgICAgLy8gSXQncyBtYXliZSB0aGUg8J+kriBjYXNlIHdoZXJlIHRoZSBwcm9maWxlIGhhcyBiZWVuIHNhdmVkIHdpdGggYW4gZW1haWxcclxuICAgICAgICAgICAgICAgIC8vIGluc3RlYWQgb2YgYW4gaGFzaGVkIGlkXHJcbiAgICAgICAgICAgICAgICAvLyBJZiBmb3VuZCwgd2UgbmVlZCB0byByZXBsYWNlIHRoZSBpZCBpbiBib3RoIHRoZSBQcm9maWxlXHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbWFpbFByb2ZpbGUgPSBhd2FpdCB0aGlzLnVzZXJGcm9tQVdTSUQoXHJcbiAgICAgICAgICAgICAgICAgICAgdXNlci5hdHRyaWJ1dGVzLmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGlmIChlbWFpbFByb2ZpbGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgYPCfkY8gZG9pbmcgdGhlIHNwYWNlaGlwIHJldmVyc2FsIGVtYWlsIG9uICR7dXNlci5hdHRyaWJ1dGVzLmVtYWlsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmN1ID0gYXdhaXQgdGhpcy51c2VyRnJvbUFXU0lEKHVzZXIudXNlcm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5jdSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgQXV0aC5zaWduT3V0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBtaXNzaW9ucyA9IGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuaW5zdGFudE1pc3Npb25zT2ZDdXJyZW50KFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdS5pZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNaXNzaW9ucyA9IG1pc3Npb25zO1xyXG4gICAgICAgICAgICBsZXQgb2tUb0xvZ2luID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKCFmYXN0Q29ubmVjdCAmJiAhdGhpcy5pc1NQQWRtaW4oKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gY2hlY2sgYWNjZXNzIHRva2VuIGlmIG5vdCBGYXN0IGNvbm5lY3QgKGZhc3QgY29ubmVjdCBpcyBmb3IgdGhlIGd1ZXN0IGNvbm5lY3Rpb24gdmlhIGxpbmsoL3JlZGlyZWN0P3VzZXI9KSlcclxuICAgICAgICAgICAgICAgIC8vIGFuZCBub3QgU21hcnRlclBsYW4gQWRtaW5cclxuICAgICAgICAgICAgICAgIG9rVG9Mb2dpbiA9IGF3YWl0IHRoaXMuY2hlY2tBY2Nlc3NUb2tlbihcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLnNpZ25JblVzZXJTZXNzaW9uLmFjY2Vzc1Rva2VuLmp3dFRva2VuLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIW9rVG9Mb2dpbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRNaXNzaW9ucyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgQXV0aC5zaWduT3V0KCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVByb2ZpbGUoe1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuY3UuaWQsXHJcbiAgICAgICAgICAgICAgICBsYXN0Q29ubmVjdGVkQXQ6IERhdGUubm93KCksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAoIW1pc3Npb25zICYmIHRoaXMubG9jYXRpb24ucGF0aCgpICE9PSBcIi9uby1taXNzaW9uXCIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW1wiL25vLW1pc3Npb25cIl0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ1c2VyIGlzIGNoYW5nZWQgZW1pdHRpbmdcIik7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDaGFuZ2VkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRpbmcgPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3U7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdXNlckZyb21BV1NJRCh1c2VySWQ6IHN0cmluZyk6IFByb21pc2U8UHJvZmlsZUVudGl0eSB8IG51bGw+IHtcclxuICAgICAgICBjb25zdCBwcm9maWxlID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRQcm9maWxlRnJvbUFXU0lEKHVzZXJJZCk7XHJcbiAgICAgICAgaWYgKHByb2ZpbGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9maWxlRW50aXR5KHByb2ZpbGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1c2VyRnJvbVVzZXJJRCh1c2VySUQ6IHN0cmluZyk6IFByb21pc2U8UHJvZmlsZUVudGl0eSB8IG51bGw+IHtcclxuICAgICAgICBjb25zdCBwcm9maWxlID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRQcm9maWxlKHVzZXJJRCk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9maWxlRW50aXR5KHByb2ZpbGUpO1xyXG4gICAgfVxyXG5cclxuICAgIGN1cnJlbnRNaXNzaW9uKHNwYWNlSUQ6IHN0cmluZyk6IE1pc3Npb24ge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLmdldE1pc3Npb25Gb3JTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICByZXR1cm4gbWlzc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBpc01hbmFnZXIoc3BhY2VJRDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMuZ2V0TWlzc2lvbkZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIGlmIChtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hbmFnZXJzLmluY2x1ZGVzKG1pc3Npb24ucm9sZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpc1NlcnZpY2Uoc3BhY2VJRDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMuZ2V0TWlzc2lvbkZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIGlmIChtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtaXNzaW9uLnJvbGUgPT09IFJvbGVTdGF0dXMuU0VSVklDRTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzQWRtaW4oc3BhY2VJRDogc3RyaW5nKTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMuZ2V0TWlzc2lvbkZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIGlmIChtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBtaXNzaW9uLnJvbGUgPT09IFJvbGVTdGF0dXMuQURNSU47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBpc1NtYXJ0ZXJQbGFuKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcE1pc3Npb25zID0gdGhpcy5jdXJyZW50TWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobSkgPT5cclxuICAgICAgICAgICAgICAgIG0ub3JnYW5pc2F0aW9uSUQgPT09IFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIgJiZcclxuICAgICAgICAgICAgICAgIHRoaXMubWFuYWdlcnMuaW5jbHVkZXMobS5yb2xlKSxcclxuICAgICAgICApOyAvLyBJRCBvZiBTbWFydGVyUGxhblxyXG4gICAgICAgIHJldHVybiBzcE1pc3Npb25zLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgaXNTUEFkbWluKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzcE1pc3Npb25zID0gdGhpcy5jdXJyZW50TWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobSkgPT5cclxuICAgICAgICAgICAgICAgIG0ub3JnYW5pc2F0aW9uSUQgPT09IFwiNmUyODIwMWYtNDY3OS00YzI5LTlkMmQtOGEzMjVmNTdjZWU5XCIgJiZcclxuICAgICAgICAgICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5BRE1JTixcclxuICAgICAgICApOyAvLyBJRCBvZiBTbWFydGVyUGxhblxyXG4gICAgICAgIHJldHVybiBzcE1pc3Npb25zLmxlbmd0aCA+IDA7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWlzc2lvbkZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IE1pc3Npb24ge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNaXNzaW9ucy5maW5kKChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc01hbmFnZXJSb2xlSW5BbnlNaXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TWlzc2lvbnMuc29tZSgobWlzKSA9PlxyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXJzLmluY2x1ZGVzKG1pcy5yb2xlKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc1NlcnZpY2VSb2xlSW5BbnlNaXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TWlzc2lvbnMuc29tZShcclxuICAgICAgICAgICAgKG1pcykgPT4gbWlzLnJvbGUgPT09IFJvbGVTdGF0dXMuU0VSVklDRSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGhhc0FkbWluUm9sZUluQW55TWlzc2lvbigpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1pc3Npb25zLnNvbWUoXHJcbiAgICAgICAgICAgIChtaXMpID0+IG1pcy5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlT3JVcGRhdGVNaXNzaW9uRm9yT3JnV2l0aFByb3BlcnR5KFxyXG4gICAgICAgIG1pc3Npb25JbnB1dDogTWlzc2lvbixcclxuICAgICAgICBvcmdJRDogc3RyaW5nLFxyXG4gICAgICAgIGNyZWF0ZTogYm9vbGVhbiA9IHRydWUsXHJcbiAgICApOiBQcm9taXNlPE1pc3Npb24+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gYXdhaXQgKGNyZWF0ZVxyXG4gICAgICAgICAgICA/IHRoaXMubWlzc2lvblNlcnZpY2UuY3JlYXRlKG1pc3Npb25JbnB1dClcclxuICAgICAgICAgICAgOiB0aGlzLm1pc3Npb25TZXJ2aWNlLnVwZGF0ZShtaXNzaW9uSW5wdXQpKTtcclxuXHJcbiAgICAgICAgaWYgKHRoaXMubWFuYWdlcnMuaW5jbHVkZXMobWlzc2lvbi5yb2xlKSAmJiBtaXNzaW9uLnNwYWNlSUQpIHtcclxuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnByb3BlcnR5U2VydmljZS5nZXRQcm9wZXJ0aWVzRm9yT3JnYW5pc2F0aW9uKG9yZ0lEKTtcclxuICAgICAgICAgICAgY29uc3QgcHJvcGVydHlTcGFjZUlEcyA9IHByb3BlcnRpZXMubWFwKFxyXG4gICAgICAgICAgICAgICAgKHByb3BlcnR5XykgPT4gcHJvcGVydHlfLnNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChwcm9wZXJ0eVNwYWNlSURzLmluY2x1ZGVzKG1pc3Npb24uc3BhY2VJRCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaXNzaW9uO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vIHdlIGRlbGVnYXRlIHRoZSByaWdodHMgb2YgdGhlIHNwYWNlXHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmNyZWF0ZVByb3BlcnR5KHtcclxuICAgICAgICAgICAgICAgIHNwYWNlSUQ6IG1pc3Npb24uc3BhY2VJRCxcclxuICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbklEOiBvcmdJRCxcclxuICAgICAgICAgICAgICAgIHR5cGU6IFByb3BlcnR5VHlwZS5TSEFSRUQsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbWlzc2lvbjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzb2Z0RGVsZXRlVXNlcih1c2VySUQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb25zID0gYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uc0Zyb21Vc2VySUQodXNlcklEKTtcclxuICAgICAgICBpZiAobWlzc2lvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UudXBkYXRlUHJvZmlsZSh7IGlkOiB1c2VySUQsIGRlbGV0ZWRBdDogRGF0ZS5ub3coKSB9KTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJQcm9maWxlIHNvZnQgZGVsZXRlZFwiKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICAvKipcclxuICAgICAqIENoZWNrcyBpZiB0aGUgUHJvZmlsZSAoYnkgaWQpIGNhbiBiZSByZW1vdmVkIGNvbXBsZXRlbHkgZnJvbSB0aGUgREIgKG5vIG1pc3Npb25zIGluIHRoZSBEQilcclxuICAgICAqIEBwYXJhbSBwcm9maWxlSURcclxuICAgICAqIEByZXR1cm5zIGJvb2xlYW5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgY2FuSGFyZERlbGV0ZVVzZXIocHJvZmlsZUlEOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IChhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmdldE1pc3Npb25zRnJvbVVzZXJJRChwcm9maWxlSUQpKTtcclxuICAgICAgICByZXR1cm4gbWlzc2lvbnMubGVuZ3RoID09PSAwO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGhhcmREZWxldGVVc2VyKHVzZXJJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgZGVsZXRlZCA9IGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UuZGVsZXRlUHJvZmlsZSh1c2VySUQpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiUHJvZmlsZSBoYXJkIGRlbGV0ZWRcIik7XHJcbiAgICAgICAgcmV0dXJuIGRlbGV0ZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TWFuYWdlck1pc3Npb25zKCk6IE1pc3Npb25bXSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNaXNzaW9ucy5maWx0ZXIoKG1pcykgPT5cclxuICAgICAgICAgICAgdGhpcy5tYW5hZ2Vycy5pbmNsdWRlcyhtaXMucm9sZSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRBdmFsYWJsZUxldmVsc0ZvckN1cnJlbnRVc2VyKCk6IExldmVsU3RhdHVzW10ge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtMZXZlbFN0YXR1cy5NSU5JTVVNXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgbGV2ZWxzID0gZW51bVRvQXJyYXkoTGV2ZWxTdGF0dXMpO1xyXG4gICAgICAgIGNvbnN0IGhpZ2hlc3RMZXZlbCA9IGdldEhpZ2hlc3RMZXZlbEZvck1pc3Npb25zKHRoaXMuY3VycmVudE1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgcmV0dXJuIGxldmVscy5maWx0ZXIoKGxldmVsKSA9PlxyXG4gICAgICAgICAgICBnZXRMZXZlbHNCZWxvdyhoaWdoZXN0TGV2ZWwpLmluY2x1ZGVzKGxldmVsKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF2YWlsYWJsZVJvbGVzRm9yQ3VycmVudFVzZXIoKTogUm9sZVN0YXR1c1tdIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbUm9sZVN0YXR1cy5WSVNJVE9SXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgcm9sZXMgPSBlbnVtVG9BcnJheShSb2xlU3RhdHVzKTtcclxuICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9IGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnModGhpcy5jdXJyZW50TWlzc2lvbnMpO1xyXG4gICAgICAgIHJldHVybiByb2xlcy5maWx0ZXIoKHJvbGUpID0+XHJcbiAgICAgICAgICAgIGdldFJvbGVzQmVsb3dGb3JNYW5hZ2VyKGhpZ2hlc3RSb2xlKS5pbmNsdWRlcyhyb2xlKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKiBUZXN0IGlmIHRoZSB1c2VyIGhhdmUgdGhlIHJvbGUgZ2l2ZW4gaW4gcGFyYW1ldGVyIDogXCJyb2xlU3RhdHVzXCIgKi9cclxuICAgIGlzUm9sZShyb2xlU3RhdHVzOiBSb2xlU3RhdHVzKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNaXNzaW9ucy5zb21lKChtKSA9PiBtLnJvbGUgPT09IHJvbGVTdGF0dXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzR3VpZGUoc3BhY2VJRDogc3RyaW5nID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChzcGFjZUlEKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLmdldE1pc3Npb25Gb3JTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaXNzaW9uLnJvbGUgPT09IFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmlzUm9sZShSb2xlU3RhdHVzLkdVSURFX01VU0VVTSk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNNdXNldW1WaXNpdG9yKHNwYWNlSUQ6IHN0cmluZyA9IG51bGwpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoc3BhY2VJRCkge1xyXG4gICAgICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy5nZXRNaXNzaW9uRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgICAgIGlmIChtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbWlzc2lvbi5yb2xlID09PSBSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmlzUm9sZShSb2xlU3RhdHVzLlZJU0lUT1JfTVVTRVVNKTtcclxuICAgIH1cclxuXHJcbiAgICBpc09jY3VwYW50KCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzUm9sZShSb2xlU3RhdHVzLk9DQ1VQQU5UKTtcclxuICAgIH1cclxuXHJcbiAgICBpc1Zpc2l0b3Ioc3BhY2VJRDogc3RyaW5nID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChzcGFjZUlEKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLmdldE1pc3Npb25Gb3JTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaXNzaW9uLnJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5pc1JvbGUoUm9sZVN0YXR1cy5WSVNJVE9SKTtcclxuICAgIH1cclxuXHJcbiAgICBpc011c2V1bVVzZXIoc3BhY2VJRDogc3RyaW5nID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmlzR3VpZGUoc3BhY2VJRCkgfHwgdGhpcy5pc011c2V1bVZpc2l0b3Ioc3BhY2VJRCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzT25seU11c2V1bVJvbGUoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudE1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNaXNzaW9ucy5ldmVyeShcclxuICAgICAgICAgICAgICAgIChtKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5HVUlERV9NVVNFVU0gfHxcclxuICAgICAgICAgICAgICAgICAgICBtLnJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcm9maWxlRm9yTWFpbChtYWlsOiBzdHJpbmcpOiBQcm9taXNlPFByb2ZpbGU+IHtcclxuICAgICAgICBjb25zdCB1c2Vyc1dpdGhNYWlsID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5nZXRVc2Vyc0Zvck1haWwobWFpbCk7XHJcbiAgICAgICAgcmV0dXJuIHVzZXJzV2l0aE1haWwubGVuZ3RoID4gMCA/IHVzZXJzV2l0aE1haWxbMF0gOiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGN1cnJlbnRPcmRlcmVkT3JnTGlzdCgpOiBPcmdhbmlzYXRpb25bXSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9yZGVyZWRPcmdMaXN0ID0gdGhpcy5jdXJyZW50TWlzc2lvbnMubWFwKFxyXG4gICAgICAgICAgICAobWlzKSA9PiBtaXMub3JkZXJlZE9yZ2FuaXNhdGlvbixcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQob3JkZXJlZE9yZ0xpc3QpO1xyXG4gICAgfVxyXG5cclxuICAgIHVzZXJIYXNBY2Nlc3NUb0FsbFpvbmVzSW5TcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uc0ZvclNwYWNlID0gdGhpcy5jdXJyZW50TWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobWlzKSA9PiBtaXMuc3BhY2VJRCA9PT0gc3BhY2VJRCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBtaXNzaW9uc0ZvclNwYWNlLnNvbWUoXHJcbiAgICAgICAgICAgIChtaXNzaW9uKSA9PlxyXG4gICAgICAgICAgICAgICAgIW1pc3Npb24uem9uZUlEIHx8IChtaXNzaW9uLnpvbmUgJiYgIW1pc3Npb24uem9uZS5wYXJlbnRJRCksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBsb2dvdXRDdXJyZW50QW5kU2lnbk91dEF1dGgoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS51cGRhdGVQcm9maWxlKHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuY3UuaWQsXHJcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuY3UgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudE1pc3Npb25zID0gbnVsbDtcclxuICAgICAgICB0aGlzLmlzQ2hhbmdlZC5uZXh0KGZhbHNlKTtcclxuICAgICAgICBhd2FpdCBBdXRoLnNpZ25PdXQoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjaGVja0FjY2Vzc1Rva2VuKGp3dFRva2VuOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBub3cgPSBEYXRlVGltZS5sb2NhbCgpO1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwibm93XCIsIG5vdyk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJpbiBvbmUgaG91clwiLCBub3cucGx1cyh7IGhvdXJzOiAxIH0pLnRvTWlsbGlzKCkpO1xyXG4gICAgICAgIGlmICh0aGlzLmN1LnRva2VuICYmIHRoaXMuY3UudG9rZW5FeHBpcmVkQXQgPiBub3cudG9NaWxsaXMoKSkge1xyXG4gICAgICAgICAgICAvLyBjaGVjayB0b2tlblxyXG4gICAgICAgICAgICBpZiAodGhpcy5jdS50b2tlbiA9PT0gand0VG9rZW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwic2FtZSBhd3MgdG9rZW5cIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBhbGVydCh0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KFwiYXV0aC5lcnJvci5hY3RpdmVUb2tlblwiKSk7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS51cGRhdGVQcm9maWxlKHtcclxuICAgICAgICAgICAgaWQ6IHRoaXMuY3UuaWQsXHJcbiAgICAgICAgICAgIHRva2VuRXhwaXJlZEF0OiBub3cucGx1cyh7IG1pbnV0ZXM6IDUgfSkudG9NaWxsaXMoKSxcclxuICAgICAgICAgICAgdG9rZW46IGp3dFRva2VuLFxyXG4gICAgICAgICAgICBzdGF0dXM6IFByb2ZpbGVTdGF0dXMuQUNUSVZFLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNsZWFyVXNlclRva2VuKGlkKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS51cGRhdGVQcm9maWxlKHtcclxuICAgICAgICAgICAgaWQ6IGlkLFxyXG4gICAgICAgICAgICB0b2tlbjogbnVsbCxcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVDdXJyZW50VXNlcihwcm9maWxlOiBQcm9maWxlKSB7XHJcbiAgICAgICAgdGhpcy5jdSA9IG5ldyBQcm9maWxlRW50aXR5KHByb2ZpbGUpO1xyXG4gICAgICAgIHRoaXMuaXNDaGFuZ2VkLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcbn1cclxuIl19
453
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXNlci5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBSS9CLE9BQU8sRUFBRSxXQUFXLEVBQWtDLGFBQWEsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3ZJLE9BQU8sRUFBRSxXQUFXLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUsY0FBYyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFJeEssT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNqQyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sYUFBYSxDQUFDOzs7Ozs7OztBQVVuQzs7R0FFRztBQUlILE1BQU0sT0FBTyxlQUFlO0lBcUJ4QixZQUNZLGNBQThCLEVBQzlCLGNBQThCLEVBQzlCLGVBQWdDLEVBQ2hDLE1BQWMsRUFDZCxRQUFrQixFQUNsQixNQUFjLEVBQ2QsU0FBMkI7UUFOM0IsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUFDaEMsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGFBQVEsR0FBUixRQUFRLENBQVU7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBMUJ2QyxjQUFTLEdBQXFCLElBQUksT0FBTyxFQUFXLENBQUM7UUFFckQsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixh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QUFLLEVBQUUsUUFBUTtZQUNmLE1BQU0sRUFBRSxhQUFhLENBQUMsTUFBTTtTQUMvQixDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQ25CLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUM7WUFDcEMsRUFBRSxFQUFFLEVBQUU7WUFDTixLQUFLLEVBQUUsSUFBSTtTQUNkLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFnQjtRQUM5QixJQUFJLENBQUMsRUFBRSxHQUFHLElBQUksYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLENBQUM7OzRHQXhoQlEsZUFBZTtnSEFBZixlQUFlLGNBRlosTUFBTTsyRkFFVCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUsIE5nWm9uZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tIFwiQGFuZ3VsYXIvcm91dGVyXCI7XHJcbmltcG9ydCB7IExvY2F0aW9uIH0gZnJvbSBcIkBhbmd1bGFyL2NvbW1vblwiO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSBcIkBuZ3gtdHJhbnNsYXRlL2NvcmVcIjtcclxuaW1wb3J0IHsgTGV2ZWxTdGF0dXMsIE1pc3Npb24sIE9yZ2FuaXNhdGlvbiwgUHJvZmlsZSwgUHJvZmlsZUVudGl0eSwgUHJvZmlsZVN0YXR1cywgUHJvcGVydHlUeXBlLCBSb2xlU3RhdHVzIH0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgZW51bVRvQXJyYXksIGZpbHRlclVuaXF1ZUFycmF5QnlJRCwgZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMsIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMsIGdldExldmVsc0JlbG93LCBnZXRSb2xlc0JlbG93Rm9yTWFuYWdlciB9IGZyb20gXCIuLi9oZWxwZXJzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUHJvZmlsZVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvcHJvZmlsZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IE1pc3Npb25TZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL21pc3Npb24uc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQcm9wZXJ0eVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvcHJvcGVydHkuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBEYXRlVGltZSB9IGZyb20gXCJsdXhvblwiO1xyXG5pbXBvcnQgeyBBdXRoIH0gZnJvbSBcImF3cy1hbXBsaWZ5XCI7XHJcblxyXG5pbnRlcmZhY2UgQ3JlYXRlVXNlciB7XHJcbiAgICBlbWFpbDogc3RyaW5nO1xyXG4gICAgcGhvbmU6IHN0cmluZztcclxuICAgIGxhc3ROYW1lOiBzdHJpbmc7XHJcbiAgICBmaXJzdE5hbWU6IHN0cmluZztcclxuICAgIHBhc3N3b3JkPzogc3RyaW5nO1xyXG59XHJcblxyXG4vKipcclxuICogVXNlclNlcnZpY2UgaGFuZGxlcyB1c2VyJ3MgbGlmZWN5Y2xlLCBmcm9tIGNyZWF0aW9uIHRvIGRlbGV0aW9uXHJcbiAqL1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEJhc2VVc2VyU2VydmljZSB7XHJcblxyXG4gICAgaXNDaGFuZ2VkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICB1cGRhdGluZyA9IGZhbHNlO1xyXG5cclxuICAgIG1hbmFnZXJzID0gW1xyXG4gICAgICAgIFJvbGVTdGF0dXMuQURNSU4sXHJcbiAgICAgICAgUm9sZVN0YXR1cy5NQU5BR0VSLFxyXG4gICAgICAgIFJvbGVTdGF0dXMuT1dORVIsXHJcbiAgICAgICAgUm9sZVN0YXR1cy5HVUlERV9NVVNFVU0sXHJcbiAgICBdO1xyXG5cclxuICAgIGN1cnJlbnRNaXNzaW9uczogTWlzc2lvbltdO1xyXG5cclxuICAgIGxhc3RFeHBpcmVkTWlzc2lvbjogTWlzc2lvbjtcclxuXHJcbiAgICBuZXh0TWlzc2lvblRvU3RhcnQ6IE1pc3Npb247XHJcblxyXG4gICAgY3U6IFByb2ZpbGVFbnRpdHkgPSBudWxsO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIHByaXZhdGUgcHJvZmlsZVNlcnZpY2U6IFByb2ZpbGVTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWlzc2lvblNlcnZpY2U6IE1pc3Npb25TZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcHJvcGVydHlTZXJ2aWNlOiBQcm9wZXJ0eVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvbixcclxuICAgICAgICBwcml2YXRlIG5nWm9uZTogTmdab25lLFxyXG4gICAgICAgIHByaXZhdGUgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgLy8gdGhpcy5jaGVja0Nvbm5lY3RlZEFXU1VzZXIoKTtcclxuICAgICAgICB0aGlzLm1pc3Npb25TZXJ2aWNlLmN1cnJlbnRNaXNzaW9uc1VwZGF0ZWQuc3Vic2NyaWJlKGFzeW5jIChkYXRhKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiY3VycmVudCBtaXNzaW9ucyB1cGRhdGVkXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRNaXNzaW9ucyA9XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmluc3RhbnRNaXNzaW9uc09mQ3VycmVudCh0aGlzLmN1LmlkKTtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJ1c2VyIGlzIGNoYW5nZWQgZW1pdHRpbmdcIik7XHJcbiAgICAgICAgICAgIHRoaXMuaXNDaGFuZ2VkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDaGVja3MgaWYgQVdTIHVzZXIgaXMgY29ubmVjdGVkIGFuZCBhc3NpZ25nIGl0IHRvIGN1cnJlbnQgdXNlciAodGhpcy5jdSlcclxuICAgICoqL1xyXG4gICAgYXN5bmMgY2hlY2tDb25uZWN0ZWRBV1NVc2VyKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5jdSkge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcImNoZWNsIEFXUyB1c2VyXCIpO1xyXG4gICAgICAgICAgICBsZXQgY2F1ID0gbnVsbDtcclxuICAgICAgICAgICAgbGV0IHVzZXIgPSBudWxsO1xyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgY2F1ID0gYXdhaXQgQXV0aC5jdXJyZW50QXV0aGVudGljYXRlZFVzZXIoKTtcclxuICAgICAgICAgICAgICAgIHVzZXIgPSBhd2FpdCB0aGlzLmN1cnJlbnQoY2F1KTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHVzZXIpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIHsgfVxyXG4gICAgICAgICAgICBpZiAoIXVzZXIpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiaGVyZVwiKTtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtcImF1dGhcIl0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogY3JlYXRlVXNlciBzcGF3bnMgYSBuZXcgVXNlciwgYWxvbmcgd2l0aDpcclxuICAgICAqIC0gYSBwcm9wZXIgQVdTQ29nbml0byBzaWdudXBcclxuICAgICAqIC0gYSBQcm9maWxlIGVudHJ5IGhvbGRpbmcgdGhlIEFXU0NvZ25pdG8gSURcclxuICAgICAqIC0gYSBNaXNzaW9uIGVudHJ5IGhvbGRpbmcgdGhlIE9yZ2FuaXNhdGlvbiBJRFxyXG4gICAgICpcclxuICAgICAqIEBzZWUgMTc0XHJcbiAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hbXBsaWZ5LmF3cy9saWIvYXV0aC9lbWFpbHBhc3N3b3JkL3EvcGxhdGZvcm0vanMjc2lnbi11cFxyXG4gICAgICogQHRvZG8gd29uZGVyIGlmIHdlIGNhbiBtYXNoIHRvZ2V0aGVyIFByb2ZpbGUsIE1pc3Npb24gYW5kIFVzZXIgZW50cmllc1xyXG4gICAgICogQHBhcmFtIHUgVXNlciB0byBiZSBjcmVhdGVkXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGNyZWF0ZVVzZXJBV1NhbmRQcm9maWxlKFxyXG4gICAgICAgIHU6IHtcclxuICAgICAgICAgICAgZW1haWw6IHN0cmluZztcclxuICAgICAgICAgICAgcGhvbmU6IHN0cmluZztcclxuICAgICAgICAgICAgbGFzdE5hbWU6IHN0cmluZztcclxuICAgICAgICAgICAgZmlyc3ROYW1lOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHBhc3N3b3JkPzogc3RyaW5nO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHJldmFsaWRhdGVkOiBib29sZWFuID0gZmFsc2UsXHJcbiAgICApOiBQcm9taXNlPFByb2ZpbGU+IHtcclxuICAgICAgICBjb25zdCBhdHRyaWJ1dGVzID0ge1xyXG4gICAgICAgICAgICBlbWFpbDogdS5lbWFpbC50cmltKCksXHJcbiAgICAgICAgICAgIGdpdmVuX25hbWU6IHUuZmlyc3ROYW1lLFxyXG4gICAgICAgICAgICBmYW1pbHlfbmFtZTogdS5sYXN0TmFtZSxcclxuICAgICAgICAgICAgem9uZWluZm86IFwiZnJcIiwgLy8gQHRvZG8gZGVhbCB3aXRoIHpvbmVpbmZvIGFuZCBsb2NhbGVcclxuICAgICAgICAgICAgbG9jYWxlOiBcImZyXCIsXHJcbiAgICAgICAgICAgIFwiY3VzdG9tOnByZXZhbGlkYXRlZFwiOiBcImZhbHNlXCIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBpZiAocHJldmFsaWRhdGVkKSB7XHJcbiAgICAgICAgICAgIGF0dHJpYnV0ZXNbXCJjdXN0b206cHJldmFsaWRhdGVkXCJdID0gXCJ0cnVlXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEFXU0NvZ25pdG9cclxuICAgICAgICBjb25zdCBwYXNzd29yZCA9IHUucGFzc3dvcmQgPyB1LnBhc3N3b3JkIDogXCJ0ZW1wb3JhcnlwXCI7XHJcbiAgICAgICAgbGV0IGVycm9yO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgdXNlclN1YiB9ID0gYXdhaXQgQXV0aC5zaWduVXAoe1xyXG4gICAgICAgICAgICAgICAgdXNlcm5hbWU6IHUuZW1haWwsIC8vIHVzZXJuYW1lIHNob3VsZCBiZSBhbiBlbWFpbCB0aGV5IHNheVxyXG4gICAgICAgICAgICAgICAgcGFzc3dvcmQsXHJcbiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLFxyXG4gICAgICAgICAgICAgICAgY2xpZW50TWV0YWRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICBwaG9uZTogdS5waG9uZSxcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICBpZiAodXNlclN1Yikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlUHJvZmlsZSh1c2VyU3ViLCB1KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yXzogYW55KSB7XHJcbiAgICAgICAgICAgIHN3aXRjaCAoZXJyb3JfLmNvZGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJJbnZhbGlkUGFzc3dvcmRFeGNlcHRpb25cIjpcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFwiYXV0aC5lcnJvci53cm9uZ19wYXNzd29yZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBcIlVzZXJOb3RDb25maXJtZWRFeGNlcHRpb25cIjpcclxuICAgICAgICAgICAgICAgICAgICBlcnJvciA9IFwiYXV0aC5lcnJvci51c2VyX25vdF9jb25maXJtZWRcIjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCJJbnZhbGlkUGFyYW1ldGVyRXhjZXB0aW9uXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBcImF1dGguZXJyb3IuaW52YWxpZF9wYXJhbWV0ZXJcIjtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IgPSBlcnJvcl8ubWVzc2FnZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhgQVdTIFNpZ24gVVAgZXJyb3IgOiAke2Vycm9yfWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVByb2ZpbGUoXHJcbiAgICAgICAgYXdzVXNlcklEOiBzdHJpbmcsXHJcbiAgICAgICAgdTogQ3JlYXRlVXNlcixcclxuICAgICk6IFByb21pc2U8UHJvZmlsZT4ge1xyXG4gICAgICAgIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmNyZWF0ZVByb2ZpbGUoe1xyXG4gICAgICAgICAgICB1c2VySUQ6IGF3c1VzZXJJRCxcclxuICAgICAgICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHtcclxuICAgICAgICAgICAgICAgIGVtYWlsOiB1LmVtYWlsLFxyXG4gICAgICAgICAgICAgICAgcGhvbmU6IHUucGhvbmUsXHJcbiAgICAgICAgICAgICAgICBsYXN0TmFtZTogdS5sYXN0TmFtZSxcclxuICAgICAgICAgICAgICAgIGZpcnN0TmFtZTogdS5maXJzdE5hbWUsXHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgICBzdGF0dXM6IFByb2ZpbGVTdGF0dXMuV0FJVElOR19GT1JfQUNUSVZBVElPTixcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gcHJvZmlsZTtcclxuICAgIH1cclxuXHJcbiAgICBjdXJyZW50T3JnYW5pc2F0aW9uKHNwYWNlSUQ6IHN0cmluZyA9IG51bGwpOiBPcmdhbmlzYXRpb24ge1xyXG4gICAgICAgIGlmICh0aGlzLmN1KSB7XHJcbiAgICAgICAgICAgIGlmICghc3BhY2VJRCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1pc3Npb25zWzBdLm9yZ2FuaXNhdGlvbjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TWlzc2lvbihzcGFjZUlEKS5vcmdhbmlzYXRpb247XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGN1cnJlbnQoXHJcbiAgICAgICAgdXNlcixcclxuICAgICAgICBmYXN0Q29ubmVjdDogYm9vbGVhbiA9IGZhbHNlLFxyXG4gICAgKTogUHJvbWlzZTxQcm9maWxlRW50aXR5IHwgbnVsbD4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jdSAmJiAhdGhpcy51cGRhdGluZykge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jdSA9IGF3YWl0IHRoaXMudXNlckZyb21BV1NJRCh1c2VyLnVzZXJuYW1lKTtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmN1ICYmIHVzZXIuYXR0cmlidXRlcy5lbWFpbCkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgICAgYE5vIHByb2ZpbGUgZm9yIHVzZXJJRCDwn5SqICR7dXNlci5hdHRyaWJ1dGVzLmVtYWlsfWAsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gVGhlcmUncyBubyBwcm9maWxlcywgcHJvZmlsZXMuaXRlbXMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgICAgICAgICAvLyBJdCdzIG1heWJlIHRoZSDwn6SuIGNhc2Ugd2hlcmUgdGhlIHByb2ZpbGUgaGFzIGJlZW4gc2F2ZWQgd2l0aCBhbiBlbWFpbFxyXG4gICAgICAgICAgICAgICAgLy8gaW5zdGVhZCBvZiBhbiBoYXNoZWQgaWRcclxuICAgICAgICAgICAgICAgIC8vIElmIGZvdW5kLCB3ZSBuZWVkIHRvIHJlcGxhY2UgdGhlIGlkIGluIGJvdGggdGhlIFByb2ZpbGVcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVtYWlsUHJvZmlsZSA9IGF3YWl0IHRoaXMudXNlckZyb21BV1NJRChcclxuICAgICAgICAgICAgICAgICAgICB1c2VyLmF0dHJpYnV0ZXMuZW1haWwsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVtYWlsUHJvZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBg8J+RjyBkb2luZyB0aGUgc3BhY2VoaXAgcmV2ZXJzYWwgZW1haWwgb24gJHt1c2VyLmF0dHJpYnV0ZXMuZW1haWx9YCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3UgPSBhd2FpdCB0aGlzLnVzZXJGcm9tQVdTSUQodXNlci51c2VybmFtZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmN1KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBBdXRoLnNpZ25PdXQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IG1pc3Npb25zID0gYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5pbnN0YW50TWlzc2lvbnNPZkN1cnJlbnQoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1LmlkXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuY3VycmVudE1pc3Npb25zID0gbWlzc2lvbnM7XHJcbiAgICAgICAgICAgIGxldCBva1RvTG9naW4gPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAoIWZhc3RDb25uZWN0ICYmICF0aGlzLmlzU1BBZG1pbigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjaGVjayBhY2Nlc3MgdG9rZW4gaWYgbm90IEZhc3QgY29ubmVjdCAoZmFzdCBjb25uZWN0IGlzIGZvciB0aGUgZ3Vlc3QgY29ubmVjdGlvbiB2aWEgbGluaygvcmVkaXJlY3Q/dXNlcj0pKVxyXG4gICAgICAgICAgICAgICAgLy8gYW5kIG5vdCBTbWFydGVyUGxhbiBBZG1pblxyXG4gICAgICAgICAgICAgICAgb2tUb0xvZ2luID0gYXdhaXQgdGhpcy5jaGVja0FjY2Vzc1Rva2VuKFxyXG4gICAgICAgICAgICAgICAgICAgIHVzZXIuc2lnbkluVXNlclNlc3Npb24uYWNjZXNzVG9rZW4uand0VG9rZW4sXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghb2tUb0xvZ2luKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudE1pc3Npb25zID0gW107XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0aW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCBBdXRoLnNpZ25PdXQoKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvZmlsZVNlcnZpY2UudXBkYXRlUHJvZmlsZSh7XHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5jdS5pZCxcclxuICAgICAgICAgICAgICAgIGxhc3RDb25uZWN0ZWRBdDogRGF0ZS5ub3coKSxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICghbWlzc2lvbnMgJiYgdGhpcy5sb2NhdGlvbi5wYXRoKCkgIT09IFwiL25vLW1pc3Npb25cIikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXCIvbm8tbWlzc2lvblwiXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcInVzZXIgaXMgY2hhbmdlZCBlbWl0dGluZ1wiKTtcclxuICAgICAgICAgICAgdGhpcy5pc0NoYW5nZWQubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGluZyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jdTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1c2VyRnJvbUFXU0lEKHVzZXJJZDogc3RyaW5nKTogUHJvbWlzZTxQcm9maWxlRW50aXR5IHwgbnVsbD4ge1xyXG4gICAgICAgIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFByb2ZpbGVGcm9tQVdTSUQodXNlcklkKTtcclxuICAgICAgICBpZiAocHJvZmlsZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb2ZpbGVFbnRpdHkocHJvZmlsZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVzZXJGcm9tVXNlcklEKHVzZXJJRDogc3RyaW5nKTogUHJvbWlzZTxQcm9maWxlRW50aXR5IHwgbnVsbD4ge1xyXG4gICAgICAgIGNvbnN0IHByb2ZpbGUgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFByb2ZpbGUodXNlcklEKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb2ZpbGVFbnRpdHkocHJvZmlsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgY3VycmVudE1pc3Npb24oc3BhY2VJRDogc3RyaW5nKTogTWlzc2lvbiB7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMuZ2V0TWlzc2lvbkZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIHJldHVybiBtaXNzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTWFuYWdlcihzcGFjZUlEOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy5nZXRNaXNzaW9uRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFuYWdlcnMuaW5jbHVkZXMobWlzc2lvbi5yb2xlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU2VydmljZShzcGFjZUlEOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy5nZXRNaXNzaW9uRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgaXNBZG1pbihzcGFjZUlEOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy5nZXRNaXNzaW9uRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5BRE1JTjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGlzU21hcnRlclBsYW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNwTWlzc2lvbnMgPSB0aGlzLmN1cnJlbnRNaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChtKSA9PlxyXG4gICAgICAgICAgICAgICAgbS5vcmdhbmlzYXRpb25JRCA9PT0gXCI2ZTI4MjAxZi00Njc5LTRjMjktOWQyZC04YTMyNWY1N2NlZTlcIiAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYW5hZ2Vycy5pbmNsdWRlcyhtLnJvbGUpLFxyXG4gICAgICAgICk7IC8vIElEIG9mIFNtYXJ0ZXJQbGFuXHJcbiAgICAgICAgcmV0dXJuIHNwTWlzc2lvbnMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBpc1NQQWRtaW4oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHNwTWlzc2lvbnMgPSB0aGlzLmN1cnJlbnRNaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChtKSA9PlxyXG4gICAgICAgICAgICAgICAgbS5vcmdhbmlzYXRpb25JRCA9PT0gXCI2ZTI4MjAxZi00Njc5LTRjMjktOWQyZC04YTMyNWY1N2NlZTlcIiAmJlxyXG4gICAgICAgICAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLkFETUlOLFxyXG4gICAgICAgICk7IC8vIElEIG9mIFNtYXJ0ZXJQbGFuXHJcbiAgICAgICAgcmV0dXJuIHNwTWlzc2lvbnMubGVuZ3RoID4gMDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNaXNzaW9uRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogTWlzc2lvbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1pc3Npb25zLmZpbmQoKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzTWFuYWdlclJvbGVJbkFueU1pc3Npb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNaXNzaW9ucy5zb21lKChtaXMpID0+XHJcbiAgICAgICAgICAgIHRoaXMubWFuYWdlcnMuaW5jbHVkZXMobWlzLnJvbGUpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzU2VydmljZVJvbGVJbkFueU1pc3Npb24oKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmN1cnJlbnRNaXNzaW9ucy5zb21lKFxyXG4gICAgICAgICAgICAobWlzKSA9PiBtaXMucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFzQWRtaW5Sb2xlSW5BbnlNaXNzaW9uKCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5jdXJyZW50TWlzc2lvbnMuc29tZShcclxuICAgICAgICAgICAgKG1pcykgPT4gbWlzLnJvbGUgPT09IFJvbGVTdGF0dXMuQURNSU4sXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVPclVwZGF0ZU1pc3Npb25Gb3JPcmdXaXRoUHJvcGVydHkoXHJcbiAgICAgICAgbWlzc2lvbklucHV0OiBNaXNzaW9uLFxyXG4gICAgICAgIG9yZ0lEOiBzdHJpbmcsXHJcbiAgICAgICAgY3JlYXRlOiBib29sZWFuID0gdHJ1ZSxcclxuICAgICk6IFByb21pc2U8TWlzc2lvbj4ge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb24gPSBhd2FpdCAoY3JlYXRlXHJcbiAgICAgICAgICAgID8gdGhpcy5taXNzaW9uU2VydmljZS5jcmVhdGUobWlzc2lvbklucHV0KVxyXG4gICAgICAgICAgICA6IHRoaXMubWlzc2lvblNlcnZpY2UudXBkYXRlKG1pc3Npb25JbnB1dCkpO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tYW5hZ2Vycy5pbmNsdWRlcyhtaXNzaW9uLnJvbGUpICYmIG1pc3Npb24uc3BhY2VJRCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0aWVzID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucHJvcGVydHlTZXJ2aWNlLmdldFByb3BlcnRpZXNGb3JPcmdhbmlzYXRpb24ob3JnSUQpO1xyXG4gICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVNwYWNlSURzID0gcHJvcGVydGllcy5tYXAoXHJcbiAgICAgICAgICAgICAgICAocHJvcGVydHlfKSA9PiBwcm9wZXJ0eV8uc3BhY2VJRCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHByb3BlcnR5U3BhY2VJRHMuaW5jbHVkZXMobWlzc2lvbi5zcGFjZUlEKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pc3Npb247XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gd2UgZGVsZWdhdGUgdGhlIHJpZ2h0cyBvZiB0aGUgc3BhY2VcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9wZXJ0eVNlcnZpY2UuY3JlYXRlUHJvcGVydHkoe1xyXG4gICAgICAgICAgICAgICAgc3BhY2VJRDogbWlzc2lvbi5zcGFjZUlELFxyXG4gICAgICAgICAgICAgICAgb3JnYW5pc2F0aW9uSUQ6IG9yZ0lELFxyXG4gICAgICAgICAgICAgICAgdHlwZTogUHJvcGVydHlUeXBlLlNIQVJFRCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBtaXNzaW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNvZnREZWxldGVVc2VyKHVzZXJJRDogc3RyaW5nKSB7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSBhd2FpdCB0aGlzLm1pc3Npb25TZXJ2aWNlLmdldE1pc3Npb25zRnJvbVVzZXJJRCh1c2VySUQpO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS51cGRhdGVQcm9maWxlKHsgaWQ6IHVzZXJJRCwgZGVsZXRlZEF0OiBEYXRlLm5vdygpIH0pO1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIlByb2ZpbGUgc29mdCBkZWxldGVkXCIpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIC8qKlxyXG4gICAgICogQ2hlY2tzIGlmIHRoZSBQcm9maWxlIChieSBpZCkgY2FuIGJlIHJlbW92ZWQgY29tcGxldGVseSBmcm9tIHRoZSBEQiAobm8gbWlzc2lvbnMgaW4gdGhlIERCKVxyXG4gICAgICogQHBhcmFtIHByb2ZpbGVJRFxyXG4gICAgICogQHJldHVybnMgYm9vbGVhblxyXG4gICAgICovXHJcbiAgICBhc3luYyBjYW5IYXJkRGVsZXRlVXNlcihwcm9maWxlSUQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb25zID0gKGF3YWl0IHRoaXMubWlzc2lvblNlcnZpY2UuZ2V0TWlzc2lvbnNGcm9tVXNlcklEKHByb2ZpbGVJRCkpO1xyXG4gICAgICAgIHJldHVybiBtaXNzaW9ucy5sZW5ndGggPT09IDA7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgaGFyZERlbGV0ZVVzZXIodXNlcklEOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBkZWxldGVkID0gYXdhaXQgdGhpcy5wcm9maWxlU2VydmljZS5kZWxldGVQcm9maWxlKHVzZXJJRCk7XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJQcm9maWxlIGhhcmQgZGVsZXRlZFwiKTtcclxuICAgICAgICByZXR1cm4gZGVsZXRlZDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNYW5hZ2VyTWlzc2lvbnMoKTogTWlzc2lvbltdIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1pc3Npb25zLmZpbHRlcigobWlzKSA9PlxyXG4gICAgICAgICAgICB0aGlzLm1hbmFnZXJzLmluY2x1ZGVzKG1pcy5yb2xlKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEF2YWxhYmxlTGV2ZWxzRm9yQ3VycmVudFVzZXIoKTogTGV2ZWxTdGF0dXNbXSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRNaXNzaW9ucykge1xyXG4gICAgICAgICAgICByZXR1cm4gW0xldmVsU3RhdHVzLk1JTklNVU1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBsZXZlbHMgPSBlbnVtVG9BcnJheShMZXZlbFN0YXR1cyk7XHJcbiAgICAgICAgY29uc3QgaGlnaGVzdExldmVsID0gZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnModGhpcy5jdXJyZW50TWlzc2lvbnMpO1xyXG5cclxuICAgICAgICByZXR1cm4gbGV2ZWxzLmZpbHRlcigobGV2ZWwpID0+XHJcbiAgICAgICAgICAgIGdldExldmVsc0JlbG93KGhpZ2hlc3RMZXZlbCkuaW5jbHVkZXMobGV2ZWwpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QXZhaWxhYmxlUm9sZXNGb3JDdXJyZW50VXNlcigpOiBSb2xlU3RhdHVzW10ge1xyXG4gICAgICAgIGlmICghdGhpcy5jdXJyZW50TWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtSb2xlU3RhdHVzLlZJU0lUT1JdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByb2xlcyA9IGVudW1Ub0FycmF5KFJvbGVTdGF0dXMpO1xyXG4gICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID0gZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyh0aGlzLmN1cnJlbnRNaXNzaW9ucyk7XHJcbiAgICAgICAgcmV0dXJuIHJvbGVzLmZpbHRlcigocm9sZSkgPT5cclxuICAgICAgICAgICAgZ2V0Um9sZXNCZWxvd0Zvck1hbmFnZXIoaGlnaGVzdFJvbGUpLmluY2x1ZGVzKHJvbGUpLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqIFRlc3QgaWYgdGhlIHVzZXIgaGF2ZSB0aGUgcm9sZSBnaXZlbiBpbiBwYXJhbWV0ZXIgOiBcInJvbGVTdGF0dXNcIiAqL1xyXG4gICAgaXNSb2xlKHJvbGVTdGF0dXM6IFJvbGVTdGF0dXMpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1pc3Npb25zLnNvbWUoKG0pID0+IG0ucm9sZSA9PT0gcm9sZVN0YXR1cyk7XHJcbiAgICB9XHJcblxyXG4gICAgaXNHdWlkZShzcGFjZUlEOiBzdHJpbmcgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHNwYWNlSUQpIHtcclxuICAgICAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMuZ2V0TWlzc2lvbkZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgICAgICBpZiAobWlzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5HVUlERV9NVVNFVU07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSb2xlKFJvbGVTdGF0dXMuR1VJREVfTVVTRVVNKTtcclxuICAgIH1cclxuXHJcbiAgICBpc011c2V1bVZpc2l0b3Ioc3BhY2VJRDogc3RyaW5nID0gbnVsbCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmIChzcGFjZUlEKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1pc3Npb24gPSB0aGlzLmdldE1pc3Npb25Gb3JTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICAgICAgaWYgKG1pc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtaXNzaW9uLnJvbGUgPT09IFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSb2xlKFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU0pO1xyXG4gICAgfVxyXG5cclxuICAgIGlzT2NjdXBhbnQoKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNSb2xlKFJvbGVTdGF0dXMuT0NDVVBBTlQpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzVmlzaXRvcihzcGFjZUlEOiBzdHJpbmcgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgaWYgKHNwYWNlSUQpIHtcclxuICAgICAgICAgICAgY29uc3QgbWlzc2lvbiA9IHRoaXMuZ2V0TWlzc2lvbkZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgICAgICBpZiAobWlzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5WSVNJVE9SO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmlzUm9sZShSb2xlU3RhdHVzLlZJU0lUT1IpO1xyXG4gICAgfVxyXG5cclxuICAgIGlzTXVzZXVtVXNlcihzcGFjZUlEOiBzdHJpbmcgPSBudWxsKTogYm9vbGVhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNHdWlkZShzcGFjZUlEKSB8fCB0aGlzLmlzTXVzZXVtVmlzaXRvcihzcGFjZUlEKTtcclxuICAgIH1cclxuXHJcbiAgICBoYXNPbmx5TXVzZXVtUm9sZSgpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50TWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudE1pc3Npb25zLmV2ZXJ5KFxyXG4gICAgICAgICAgICAgICAgKG0pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgbS5yb2xlID09PSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTSB8fFxyXG4gICAgICAgICAgICAgICAgICAgIG0ucm9sZSA9PT0gUm9sZVN0YXR1cy5WSVNJVE9SX01VU0VVTSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByb2ZpbGVGb3JNYWlsKG1haWw6IHN0cmluZyk6IFByb21pc2U8UHJvZmlsZT4ge1xyXG4gICAgICAgIGNvbnN0IHVzZXJzV2l0aE1haWwgPSBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLmdldFVzZXJzRm9yTWFpbChtYWlsKTtcclxuICAgICAgICByZXR1cm4gdXNlcnNXaXRoTWFpbC5sZW5ndGggPiAwID8gdXNlcnNXaXRoTWFpbFswXSA6IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgY3VycmVudE9yZGVyZWRPcmdMaXN0KCk6IE9yZ2FuaXNhdGlvbltdIHtcclxuICAgICAgICBpZiAoIXRoaXMuY3VycmVudE1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb3JkZXJlZE9yZ0xpc3QgPSB0aGlzLmN1cnJlbnRNaXNzaW9ucy5tYXAoXHJcbiAgICAgICAgICAgIChtaXMpID0+IG1pcy5vcmRlcmVkT3JnYW5pc2F0aW9uLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChvcmRlcmVkT3JnTGlzdCk7XHJcbiAgICB9XHJcblxyXG4gICAgdXNlckhhc0FjY2Vzc1RvQWxsWm9uZXNJblNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb25zRm9yU3BhY2UgPSB0aGlzLmN1cnJlbnRNaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChtaXMpID0+IG1pcy5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIG1pc3Npb25zRm9yU3BhY2Uuc29tZShcclxuICAgICAgICAgICAgKG1pc3Npb24pID0+XHJcbiAgICAgICAgICAgICAgICAhbWlzc2lvbi56b25lSUQgfHwgKG1pc3Npb24uem9uZSAmJiAhbWlzc2lvbi56b25lLnBhcmVudElEKSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvZ291dEN1cnJlbnRBbmRTaWduT3V0QXV0aCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVByb2ZpbGUoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5jdS5pZCxcclxuICAgICAgICAgICAgdG9rZW46IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jdSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TWlzc2lvbnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNDaGFuZ2VkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIGF3YWl0IEF1dGguc2lnbk91dCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGxvZ291dEN1cnJlbnRXaWh0b3V0QXV0aCgpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVByb2ZpbGUoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5jdS5pZCxcclxuICAgICAgICAgICAgdG9rZW46IG51bGwsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5jdSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50TWlzc2lvbnMgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuaXNDaGFuZ2VkLm5leHQoZmFsc2UpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNoZWNrQWNjZXNzVG9rZW4oand0VG9rZW46IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGVUaW1lLmxvY2FsKCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJub3dcIiwgbm93KTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcImluIG9uZSBob3VyXCIsIG5vdy5wbHVzKHsgaG91cnM6IDEgfSkudG9NaWxsaXMoKSk7XHJcbiAgICAgICAgaWYgKHRoaXMuY3UudG9rZW4gJiYgdGhpcy5jdS50b2tlbkV4cGlyZWRBdCA+IG5vdy50b01pbGxpcygpKSB7XHJcbiAgICAgICAgICAgIC8vIGNoZWNrIHRva2VuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmN1LnRva2VuID09PSBqd3RUb2tlbikge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coXCJzYW1lIGF3cyB0b2tlblwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGFsZXJ0KHRoaXMudHJhbnNsYXRlLmluc3RhbnQoXCJhdXRoLmVycm9yLmFjdGl2ZVRva2VuXCIpKTtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVByb2ZpbGUoe1xyXG4gICAgICAgICAgICBpZDogdGhpcy5jdS5pZCxcclxuICAgICAgICAgICAgdG9rZW5FeHBpcmVkQXQ6IG5vdy5wbHVzKHsgbWludXRlczogNSB9KS50b01pbGxpcygpLFxyXG4gICAgICAgICAgICB0b2tlbjogand0VG9rZW4sXHJcbiAgICAgICAgICAgIHN0YXR1czogUHJvZmlsZVN0YXR1cy5BQ1RJVkUsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY2xlYXJVc2VyVG9rZW4oaWQpIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVByb2ZpbGUoe1xyXG4gICAgICAgICAgICBpZDogaWQsXHJcbiAgICAgICAgICAgIHRva2VuOiBudWxsLFxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUN1cnJlbnRVc2VyKHByb2ZpbGU6IFByb2ZpbGUpIHtcclxuICAgICAgICB0aGlzLmN1ID0gbmV3IFByb2ZpbGVFbnRpdHkocHJvZmlsZSk7XHJcbiAgICAgICAgdGhpcy5pc0NoYW5nZWQubmV4dCh0cnVlKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -4,7 +4,7 @@
4
4
  /* eslint-disable class-methods-use-this */
5
5
  import { Injectable } from "@angular/core";
6
6
  import { Subject } from "rxjs";
7
- import { ViewerInteractions, PoiType } from "../types.service";
7
+ import { ViewerInteractions } from "../types.service";
8
8
  import * as i0 from "@angular/core";
9
9
  import * as i1 from "./models/poi.service";
10
10
  import * as i2 from "./matterport.service";
@@ -124,38 +124,15 @@ export class ViewerService {
124
124
  }
125
125
  return false;
126
126
  }
127
- async action_load_all_tickets_from_database(tickets) {
128
- await Promise.all(tickets.map(async (ticket) => {
129
- const poi = await this.poiService.getPoiByElementId(ticket.id);
130
- if (poi && poi.coordinate) {
131
- await this.actionAddObjectFromPOI(ticket, poi);
132
- }
133
- }));
134
- }
135
- async action_load_all_equipments_from_database(equipments) {
136
- // console.log("adding equips", equipments);
137
- await Promise.all(equipments.map(async (equip) => {
138
- const poi = await this.poiService.getPoiByElementId(equip.id);
139
- if (poi && poi.coordinate) {
140
- await this.actionAddObjectFromPOI(equip, poi);
141
- }
142
- }));
143
- }
144
- async action_load_all_measurements_from_database(comments) {
145
- // console.log("adding measures", comments);
146
- await Promise.all(comments.map(async (comment) => {
147
- const poi = await this.poiService.getPoiByElementId(comment.id);
148
- if (poi && poi.coordinate) {
149
- this.actionAddObjectFromPOI(comment, poi);
150
- }
151
- }));
152
- }
153
- async action_load_all_features_from_database(features) {
154
- // console.log("adding features", features);
155
- await Promise.all(features.map(async (feature) => {
156
- const poi = await this.poiService.getPoiByElementId(feature.id);
127
+ /**
128
+ * Adds Mattertags to Viewer
129
+ * @param objects List of objects (tickets, equipments) etc to be added as Mattertags
130
+ */
131
+ async addObjectTagsToViewer(objects) {
132
+ await Promise.all(objects.map(async (object) => {
133
+ const poi = await this.poiService.getPoiByElementId(object.id);
157
134
  if (poi && poi.coordinate) {
158
- this.actionAddObjectFromPOI(feature, poi);
135
+ this.actionAddObjectFromPOI(object, poi);
159
136
  }
160
137
  }));
161
138
  }
@@ -174,84 +151,26 @@ export class ViewerService {
174
151
  }
175
152
  }
176
153
  /**
177
- * Enable ticket placement menu to add a new ticket
178
- */
179
- async action_add_ticket() {
180
- this.action_toolbox_inside_view();
181
- // Matterport
182
- if (this.checkMode("Matterport")) {
183
- if (this.matterportService.getInteractionMode() ===
184
- ViewerInteractions.DEFAULT) {
185
- await this.matterportService.action_add_ticket();
186
- }
187
- }
188
- }
189
- /**
190
- *
191
- */
192
- async action_position_ticket(ticket) {
193
- // Matterport
194
- if (this.checkMode("Matterport") &&
195
- this.matterportService.getInteractionMode() ===
196
- ViewerInteractions.DEFAULT) {
197
- await this.matterportService.action_position_element(PoiType.TICKET, ticket);
198
- }
199
- // Cupix
200
- }
201
- /**
202
- * Position a feature with Matterport
203
- * @param feature The feature that will be positioned
204
- */
205
- async action_position_feature(feature) {
206
- // Matterport
207
- if (this.checkMode("Matterport") &&
208
- this.matterportService.getInteractionMode() ===
209
- ViewerInteractions.DEFAULT) {
210
- await this.matterportService.action_position_element(PoiType.DATA, feature);
211
- }
212
- }
213
- /**
214
- * Enable equipement placement menu to add a new equipment
215
- */
216
- async action_add_equip() {
154
+ * Enable tag placement menu to add a new element depending on its type (TICKET, DATA, EQUIPMENT etc)
155
+ */
156
+ async actionAddNewElementToViewer(poiType) {
217
157
  this.action_toolbox_inside_view();
218
158
  // Matterport
219
- if (this.checkMode("Matterport")) {
220
- if (this.matterportService.getInteractionMode() ===
221
- ViewerInteractions.DEFAULT) {
222
- await this.matterportService.action_add_equip();
223
- }
159
+ if (this.checkMode("Matterport") && this.matterportService.getInteractionMode() ===
160
+ ViewerInteractions.DEFAULT) {
161
+ await this.matterportService.addElementAsMattertag(poiType);
224
162
  }
225
163
  }
226
164
  /**
227
- *
165
+ * Launches the repositioning of an existing Mattertag related to parameter object
166
+ * @param element object (TICKET, EQUIPMENT, FEATURE, etc)
167
+ * @param poiType type of object
228
168
  */
229
- async action_position_equip(equipment) {
230
- // Matterport
231
- if (this.checkMode("Matterport") &&
232
- this.matterportService.getInteractionMode() ===
233
- ViewerInteractions.DEFAULT) {
234
- await this.matterportService.action_position_element(PoiType.EQUIPMENT, equipment);
235
- }
236
- // Cupix
237
- }
238
- action_add_feature() {
239
- this.action_toolbox_inside_view();
240
- // Matterport
241
- if (this.checkMode("Matterport")) {
242
- if (this.matterportService.getInteractionMode() ===
243
- ViewerInteractions.DEFAULT) {
244
- this.matterportService.action_add_feature();
245
- }
246
- }
247
- }
248
- action_add_desk() {
249
- this.action_toolbox_inside_view();
250
- // Matterport
169
+ async actionRepositionElementInViewer(element, poiType) {
251
170
  if (this.checkMode("Matterport") &&
252
171
  this.matterportService.getInteractionMode() ===
253
172
  ViewerInteractions.DEFAULT) {
254
- this.matterportService.action_add_desk();
173
+ await this.matterportService.action_position_element(poiType, element);
255
174
  }
256
175
  }
257
176
  /**
@@ -392,4 +311,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.2.7", ngImpor
392
311
  providedIn: "root",
393
312
  }]
394
313
  }], ctorParameters: function () { return [{ type: i1.PoiService }, { type: i2.MatterportService }]; } });
395
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL3ZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyw4QkFBOEI7QUFDOUIseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0IsT0FBTyxFQUFxQixrQkFBa0IsRUFBRSxPQUFPLEVBQXVDLE1BQU0sa0JBQWtCLENBQUM7Ozs7QUFLdkgsTUFBTSxPQUFPLGFBQWE7SUE2Q3RCLFlBQ1ksVUFBc0IsRUFDdEIsaUJBQW9DO1FBRHBDLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQTlDeEMsZUFBVSxHQUFXLFlBQVksQ0FBQztRQU1uQyxlQUFVLEdBS1osSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUVaLGlCQUFZLEdBQXFCLElBQUksT0FBTyxFQUFFLENBQUM7UUFFL0MsYUFBUSxHQUFHLEtBQUssQ0FBQztRQUVqQixrQkFBYSxHQUFHLEtBQUssQ0FBQztRQU10QixrQkFBYSxHQUFHO1lBQ25CLFNBQVMsRUFBRTtnQkFDUCxJQUFJLEVBQUUsS0FBSztnQkFDWCxNQUFNLEVBQUUsY0FBYztnQkFDdEIsSUFBSSxLQUFLLENBQUM7Z0JBQ1YsSUFBSSxLQUFLLENBQUM7YUFDYjtZQUNELFNBQVMsRUFBRTtnQkFDUCxJQUFJLEVBQUUsS0FBSzthQUNkO1lBQ0QsTUFBTSxFQUFFO2dCQUNKLElBQUksRUFBRSxLQUFLO2dCQUNYLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixJQUFJLEtBQUssQ0FBQztnQkFDVixJQUFJLEtBQUssQ0FBQzthQUNiO1lB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QztJQUVELHFCQUFxQixDQUFDLGVBQXlCO1FBQzNDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxZQUFZLENBQUMsRUFBRTtZQUM5QixJQUFJLENBQUMsaUJBQWlCLENBQUMscUJBQXFCLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDakU7SUFDTCxDQUFDOzswR0F6ZlEsYUFBYTs4R0FBYixhQUFhLGNBRlYsTUFBTTsyRkFFVCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLWF3YWl0LWluLWxvb3AgKi9cclxuLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXHJcbi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBNYXR0ZXJwb3J0U2VydmljZSB9IGZyb20gXCIuL21hdHRlcnBvcnQuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBCYXNlVGFnU2VydmljZSB9IGZyb20gXCIuL3RhZy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IERiT2JqZWN0VHlwZSwgUE9JLCBWaWV3ZXJJbnRlcmFjdGlvbnMsIFBvaVR5cGUsIENvbW1lbnQsIEVxdWlwbWVudCwgVGlja2V0LCBGZWF0dXJlIH0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgUG9pU2VydmljZSB9IGZyb20gXCIuL21vZGVscy9wb2kuc2VydmljZVwiO1xyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIFZpZXdlclNlcnZpY2Uge1xyXG4gICAgcHJpdmF0ZSB2aWV3ZXJNb2RlOiBzdHJpbmcgPSBcIk1hdHRlcnBvcnRcIjtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudE1vZGVsM0Q6IHN0cmluZztcclxuXHJcbiAgICBwcml2YXRlIHRvdXJVcmw6IHN0cmluZztcclxuXHJcbiAgICBwdWJsaWMgdmlld2VySXNPbjogU3ViamVjdDx7XHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nIHwgbnVsbDtcclxuICAgICAgICBtb2RlbDNEOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgIHN3ZWVwOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgIHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9IHwgbnVsbDtcclxuICAgIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwdWJsaWMgZGF0YUlzTG9hZGVkOiBTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwdWJsaWMgaXNMb2FkZWQgPSBmYWxzZTtcclxuXHJcbiAgICBwdWJsaWMgc2hvd2luZ1ZpZXdlciA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzd2VlcFRvTW92ZTogc3RyaW5nIHwgbnVsbDtcclxuXHJcbiAgICBwdWJsaWMgcm90YXRpb25Ub01vdmU6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0gfCBudWxsO1xyXG5cclxuICAgIHB1YmxpYyB0b29sYm94U3RhdGVzID0ge1xyXG4gICAgICAgIGRvbGxob3VzZToge1xyXG4gICAgICAgICAgICBzdGF0OiBmYWxzZSxcclxuICAgICAgICAgICAgaWNvbklkOiBcInVpLWRvbGxob3VzZVwiLFxyXG4gICAgICAgICAgICBzaG93KCkgeyB9LFxyXG4gICAgICAgICAgICBoaWRlKCkgeyB9LFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZmxvb3JwbGFuOiB7XHJcbiAgICAgICAgICAgIHN0YXQ6IGZhbHNlLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbWVzdXJlOiB7XHJcbiAgICAgICAgICAgIHN0YXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpY29uSWQ6IFwidWktbWVzdXJlXCIsXHJcbiAgICAgICAgICAgIHNob3coKSB7IH0sXHJcbiAgICAgICAgICAgIGhpZGUoKSB7IH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmaWx0ZXI6IHtcclxuICAgICAgICAgICAgc3RhdDogZmFsc2UsXHJcbiAgICAgICAgfSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgbWF0dGVycG9ydFNlcnZpY2U6IE1hdHRlcnBvcnRTZXJ2aWNlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5zZXRNb2RlKFwiTWF0dGVycG9ydFwiKTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICBVdGlsc1xyXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIGNoZWNrTW9kZShpbmRleE1vZGU6IHN0cmluZykge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdlck1vZGUgPT09IGluZGV4TW9kZTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICBTZXR0ZXJzXHJcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgc2V0TW9kZShpbmRleE1vZGU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMudmlld2VyTW9kZSA9IGluZGV4TW9kZTtcclxuICAgIH1cclxuXHJcbiAgICBzZXRUb3VyVXJsKG1vZGVsM2Q6IHN0cmluZywgc2hvd0ljb25QbGFuOiBib29sZWFuID0gdHJ1ZSwgc2hvd0ljb25Eb2xsaG91c2U6IGJvb2xlYW4gPSB0cnVlLCBzaG93SWNvbkZsb29yczogYm9vbGVhbiA9IHRydWUpIHtcclxuICAgICAgICAvLyB0aGlzLnRvdXJVcmwgPSB0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIilcclxuICAgICAgICAvLyAgICAgPyBgaHR0cHM6Ly9teS5tYXR0ZXJwb3J0LmNvbS9zaG93Lz9tPSR7bW9kZWwzZH0mcGxheT0xJnFzPTEmaHI9MCZndD0wJnRpdGxlPTAmbG9nPTAmYnJhbmQ9MCZhcHBsaWNhdGlvbktleT1xbjl3c2FzdXk1aDJmenJicm4xbnpyMGlkJm1kcz0wYFxyXG4gICAgICAgIC8vICAgICA6IFwiaHR0cDovL2N1cGl4d2Vld29yay5zMy13ZWJzaXRlLmV1LXdlc3QtMy5hbWF6b25hd3MuY29tL1wiO1xyXG4gICAgICAgIHRoaXMudG91clVybCA9IGBodHRwczovL215Lm1hdHRlcnBvcnQuY29tL3Nob3cvP209JHttb2RlbDNkfSZwbGF5PTEmaHI9MCZxcz0xJmd0PTAmdGl0bGU9MCZsb2c9MCZicmFuZD0wJnNlYXJjaD0wJmFwcGxpY2F0aW9uS2V5PXFuOXdzYXN1eTVoMmZ6cmJybjFuenIwaWQmbWRzPTBgO1xyXG4gICAgICAgIGlmICghc2hvd0ljb25QbGFuKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG91clVybCArPSBcIiZmcD0wXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghc2hvd0ljb25Eb2xsaG91c2UpIHtcclxuICAgICAgICAgICAgdGhpcy50b3VyVXJsICs9IFwiJmRoPTBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzaG93SWNvbkZsb29ycykge1xyXG4gICAgICAgICAgICB0aGlzLnRvdXJVcmwgKz0gXCImZj0wXCI7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQWxsKCkge1xyXG4gICAgICAgIHRoaXMuc3dlZXBUb01vdmUgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucm90YXRpb25Ub01vdmUgPSBudWxsO1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93aW5nVmlld2VyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jbGVhckFsbCgpO1xyXG4gICAgICAgICAgICB0aGlzLnZpZXdlcklzT24ubmV4dCh7XHJcbiAgICAgICAgICAgICAgICBzcGFjZUlEOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgbW9kZWwzRDogbnVsbCxcclxuICAgICAgICAgICAgICAgIHN3ZWVwOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgcm90YXRpb246IG51bGwsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICBHZXR0ZXJzXHJcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgZ2V0TW9kZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy52aWV3ZXJNb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFZpZXdlclNlbGVjdGVkU2VydmljZSgpIHtcclxuICAgICAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgIC8vICAgICByZXR1cm4gdGhpcy5nZXRNYXR0ZXJwb3J0U2VydmljZSgpO1xyXG4gICAgICAgIC8vIH1cclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRNYXR0ZXJwb3J0U2VydmljZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFRvdXJVcmwoKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudG91clVybDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNYXR0ZXJwb3J0U2VydmljZSgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0U2VydmljZTtcclxuICAgIH1cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICAgICBHZW5lcmljIE1haW4gYWN0aW9uIGZ1bmN0aW9uc1xyXG4gICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG4gICAgc2V0U3dlZXBUb01vdmUoc3dlZXA6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuc3dlZXBUb01vdmUgPSBzd2VlcDtcclxuICAgIH1cclxuXHJcbiAgICBzZXRSb3RhdGlvblRvTW92ZShyb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSkge1xyXG4gICAgICAgIHRoaXMucm90YXRpb25Ub01vdmUgPSByb3RhdGlvbjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fbW92ZV90b190YWcoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHQgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJZCk7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQudGFnKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdvVG9UYWcocmVzdWx0LnRhZyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAocmVzdWx0LnN3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwVG9Nb3ZlID0gcmVzdWx0LnN3ZWVwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9sb2FkX2FsbF90aWNrZXRzX2Zyb21fZGF0YWJhc2UoXHJcbiAgICAgICAgdGlja2V0czogVGlja2V0W10sXHJcbiAgICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICB0aWNrZXRzLm1hcChhc3luYyAodGlja2V0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQodGlja2V0LmlkISk7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb25BZGRPYmplY3RGcm9tUE9JKHRpY2tldCwgcG9pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fbG9hZF9hbGxfZXF1aXBtZW50c19mcm9tX2RhdGFiYXNlKGVxdWlwbWVudHM6IEVxdWlwbWVudFtdKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJhZGRpbmcgZXF1aXBzXCIsIGVxdWlwbWVudHMpO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBlcXVpcG1lbnRzLm1hcChhc3luYyAoZXF1aXApID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvaSA9IGF3YWl0IHRoaXMucG9pU2VydmljZS5nZXRQb2lCeUVsZW1lbnRJZChlcXVpcC5pZCEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShlcXVpcCwgcG9pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fbG9hZF9hbGxfbWVhc3VyZW1lbnRzX2Zyb21fZGF0YWJhc2UoY29tbWVudHM6IENvbW1lbnRbXSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkaW5nIG1lYXN1cmVzXCIsIGNvbW1lbnRzKTtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgY29tbWVudHMubWFwKGFzeW5jIChjb21tZW50KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQoY29tbWVudC5pZCEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgYWN0aW9uX2xvYWRfYWxsX2ZlYXR1cmVzX2Zyb21fZGF0YWJhc2UoZmVhdHVyZXM6IEZlYXR1cmVbXSkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYWRkaW5nIGZlYXR1cmVzXCIsIGZlYXR1cmVzKTtcclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgZmVhdHVyZXMubWFwKGFzeW5jIChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQoZmVhdHVyZS5pZCEpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShmZWF0dXJlLCBwb2kpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbkFkZE9iamVjdEZyb21QT0koXHJcbiAgICAgICAgb2JqZWN0OiBUaWNrZXQgfCBFcXVpcG1lbnQgfCBDb21tZW50IHwgRmVhdHVyZSxcclxuICAgICAgICBwb2k6IFBPSVxyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fYWRkX21hdHRlcnRhZ19mcm9tX1BPSShcclxuICAgICAgICAgICAgICAgIHBvaS50eXBlISxcclxuICAgICAgICAgICAgICAgIG9iamVjdCxcclxuICAgICAgICAgICAgICAgIHBvaSxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ3VwaXhcclxuICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fZGVsZXRlX2VsZW1lbnQoXHJcbiAgICAgICAgZWxlbWVudDogRGJPYmplY3RUeXBlLFxyXG4gICAgKSB7XHJcbiAgICAgICAgLy8gTWF0dGVycG9ydFxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fZGVsZXRlX2VsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIHRpY2tldCBwbGFjZW1lbnQgbWVudSB0byBhZGQgYSBuZXcgdGlja2V0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjdGlvbl9hZGRfdGlja2V0KCkge1xyXG4gICAgICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcclxuXHJcbiAgICAgICAgLy8gTWF0dGVycG9ydFxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSA9PT1cclxuICAgICAgICAgICAgICAgIFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fYWRkX3RpY2tldCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWN0aW9uX3Bvc2l0aW9uX3RpY2tldCh0aWNrZXQ6IERiT2JqZWN0VHlwZSkge1xyXG4gICAgICAgIC8vIE1hdHRlcnBvcnRcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSAmJlxyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEludGVyYWN0aW9uTW9kZSgpID09PVxyXG4gICAgICAgICAgICBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl9wb3NpdGlvbl9lbGVtZW50KFxyXG4gICAgICAgICAgICAgICAgUG9pVHlwZS5USUNLRVQsXHJcbiAgICAgICAgICAgICAgICB0aWNrZXQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIEN1cGl4XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBQb3NpdGlvbiBhIGZlYXR1cmUgd2l0aCBNYXR0ZXJwb3J0XHJcbiAgICAgKiBAcGFyYW0gZmVhdHVyZSBUaGUgZmVhdHVyZSB0aGF0IHdpbGwgYmUgcG9zaXRpb25lZFxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3Rpb25fcG9zaXRpb25fZmVhdHVyZShmZWF0dXJlOiBEYk9iamVjdFR5cGUpIHtcclxuICAgICAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikgJiZcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSA9PT1cclxuICAgICAgICAgICAgVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fcG9zaXRpb25fZWxlbWVudChcclxuICAgICAgICAgICAgICAgIFBvaVR5cGUuREFUQSxcclxuICAgICAgICAgICAgICAgIGZlYXR1cmUsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIGVxdWlwZW1lbnQgcGxhY2VtZW50IG1lbnUgdG8gYWRkIGEgbmV3IGVxdWlwbWVudFxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3Rpb25fYWRkX2VxdWlwKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcclxuXHJcbiAgICAgICAgLy8gTWF0dGVycG9ydFxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSA9PT1cclxuICAgICAgICAgICAgICAgIFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fYWRkX2VxdWlwKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKlxyXG4gICAgICovXHJcbiAgICBhc3luYyBhY3Rpb25fcG9zaXRpb25fZXF1aXAoZXF1aXBtZW50OiBEYk9iamVjdFR5cGUpIHtcclxuICAgICAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikgJiZcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSA9PT1cclxuICAgICAgICAgICAgVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fcG9zaXRpb25fZWxlbWVudChcclxuICAgICAgICAgICAgICAgIFBvaVR5cGUuRVFVSVBNRU5ULFxyXG4gICAgICAgICAgICAgICAgZXF1aXBtZW50LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDdXBpeFxyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl9hZGRfZmVhdHVyZSgpIHtcclxuICAgICAgICB0aGlzLmFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCk7XHJcblxyXG4gICAgICAgIC8vIE1hdHRlcnBvcnRcclxuICAgICAgICBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgPT09XHJcbiAgICAgICAgICAgICAgICBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX2FkZF9mZWF0dXJlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uX2FkZF9kZXNrKCkge1xyXG4gICAgICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcclxuXHJcbiAgICAgICAgLy8gTWF0dGVycG9ydFxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpICYmXHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgPT09XHJcbiAgICAgICAgICAgIFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX2FkZF9kZXNrKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogRW5hYmxlIHRpY2tldCBwbGFjZW1lbnQgbWVudSB0byBhZGQgYSBuZXcgdGlja2V0XHJcbiAgICAgKi9cclxuICAgIGFjdGlvbl9jYW5jZWxlZCgpIHtcclxuICAgICAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl9jYW5jZWxlZCgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpIHtcclxuICAgICAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl90b29sYm94X2RvbGxob3VzZSgpIHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgIT09XHJcbiAgICAgICAgICAgIFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWN0aW9uX2NhbmNlbGVkKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmFjdGlvbl90b29sYm94X2NhbmNlbF9tZXN1cmUoKTtcclxuICAgICAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl90b29sYm94X2RvbGxob3VzZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9tZXN1cmUoKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEludGVyYWN0aW9uTW9kZSgpICE9PVxyXG4gICAgICAgICAgICBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbl9jYW5jZWxlZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpO1xyXG4gICAgICAgIC8vIE1hdHRlcnBvcnRcclxuICAgICAgICBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFjdGlvbl90b29sYm94X2NhbmNlbF9tZXN1cmUoKSB7XHJcbiAgICAgICAgLy8gTWF0dGVycG9ydFxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl91cGRhdGVfcG9pKFxyXG4gICAgICAgIHBvaTogUE9JLFxyXG4gICAgICAgIGlzVmFsaWQ6IGJvb2xlYW4sXHJcbiAgICAgICAgZWxlbWVudDogRGJPYmplY3RUeXBlLFxyXG4gICAgKTogUHJvbWlzZTxQT0k+IHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XHJcbiAgICAgICAgICAgIGlmIChpc1ZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5tYXR0ZXJ0YWdUb0ZvbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5tYXR0ZXJ0YWdUb0ZvbGxvd1xyXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRMYXN0VGFnKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWxhc3RUYWcpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0YWdEYXRhID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0RhdGFGcm9tSWQobGFzdFRhZyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRhZ0RhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9pTWV0YWRhdGEgPSBwb2kubWV0YWRhdGFcclxuICAgICAgICAgICAgICAgICAgICA/IEpTT04ucGFyc2UocG9pLm1ldGFkYXRhKVxyXG4gICAgICAgICAgICAgICAgICAgIDoge307XHJcbiAgICAgICAgICAgICAgICBwb2lNZXRhZGF0YS5ub3JtYWwgPSB0YWdEYXRhLmdldE5vcm1hbCgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcG9pSW5wdXQgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWQ6IHBvaS5pZCxcclxuICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlOiB0YWdEYXRhLmdldENvb3JkaW5hdGVTdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICBtYXR0ZXJwb3J0U3dlZXBJRDogdGFnRGF0YS5nZXRTd2VlcElEKCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6IEpTT04uc3RyaW5naWZ5KHBvaU1ldGFkYXRhKSxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cGRhdGVkUG9pOiBQT0kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UudXBkYXRlUG9pKFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaUlucHV0LFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHRhZ0RhdGEuc2V0UG9pKHVwZGF0ZWRQb2kpO1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5pbmplY3RIdG1sSW5UYWcoXHJcbiAgICAgICAgICAgICAgICAgICAgcG9pLnR5cGUhLFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFzdFRhZ1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZWRpdFRhZ1N0eWxlKGxhc3RUYWcsIHRhZ0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nb1RvVGFnKGxhc3RUYWcpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodXBkYXRlZFBvaSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5kZWxldGVMYXN0TWF0dGVydGFnKCk7XHJcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9pKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogTW92ZSBhbiBleGlzdGluZyBwb2kgaW4gTWF0dGVycG9ydFxyXG4gICAgICogQHBhcmFtIHBvaVxyXG4gICAgICogQHBhcmFtIGVsZW1lbnRcclxuICAgICAqL1xyXG4gICAgYXN5bmMgYWN0aW9uX21vdmVfcG9pX3Zpc3VhbGx5KFxyXG4gICAgICAgIHBvaTogUE9JLFxyXG4gICAgICAgIGVsZW1lbnQ6IFRpY2tldCB8IEZlYXR1cmUgfCBFcXVpcG1lbnQgfCBDb21tZW50LFxyXG4gICAgKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb25fZGVsZXRlX2VsZW1lbnQoZWxlbWVudCk7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5hY3Rpb25BZGRPYmplY3RGcm9tUE9JKGVsZW1lbnQsIHBvaSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgQ3VwaXhcclxuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcbiAgICBNYXR0ZXJwb3J0XHJcbiAgICBodHRwczovL21hdHRlcnBvcnQuZ2l0aHViLmlvL3Nob3djYXNlLXNkay9kb2NzL3Nkay9yZWZlcmVuY2UvY3VycmVudC9tb2R1bGVzL21hdHRlcnRhZy5odG1sI2FkZFxyXG4gICAgaHR0cHM6Ly9tYXR0ZXJwb3J0LmdpdGh1Yi5pby9zaG93Y2FzZS1zZGsvZG9jcy9zZGsvcmVmZXJlbmNlL2N1cnJlbnQvbW9kdWxlcy9tYXR0ZXJ0YWcuaHRtbCNyZW1vdmVcclxuLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xyXG5cclxuICAgIGFzeW5jIGluaXRNYXR0ZXJwb3J0U2RrKHNwYWNlSUQ6IHN0cmluZywgbW9kZWwzRDogc3RyaW5nLCB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSwgaXNNdXNldW06IGJvb2xlYW4gPSBmYWxzZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuaXNMb2FkZWQgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmN1cnJlbnRTcGFjZUlEID0gc3BhY2VJRDtcclxuICAgICAgICByZXR1cm4gdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5pbml0U2RrKHRhZ1NlcnZpY2UsIGlzTXVzZXVtKS50aGVuKGFzeW5jIChyZXN1bHQpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBzZGsgfSA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2U7XHJcbiAgICAgICAgICAgICAgICBzZGsuQXBwLnN0YXRlLnN1YnNjcmliZShmdW5jdGlvbiAoYXBwU3RhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhcHAgc3RhdGUgaGFzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnVGhlIGN1cnJlbnQgcGhhc2U6ICcsIGFwcFN0YXRlLnBoYXNlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXBwU3RhdGUucGhhc2UgPT09IHNkay5BcHAuUGhhc2UuUExBWUlORykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnVGhlIGFwcCBpcyBwbGF5aW5nJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2hvd2luZ1ZpZXdlciA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwYWNlSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RlbDNELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dlZXA6IHRoaXMuc3dlZXBUb01vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3RhdGlvbjogdGhpcy5yb3RhdGlvblRvTW92ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZGF0YUlzTG9hZGVkLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnN3ZWVwVG9Nb3ZlID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5yb3RhdGlvblRvTW92ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5yZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
314
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlld2VyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL3ZpZXdlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHFDQUFxQztBQUNyQyw4QkFBOEI7QUFDOUIseUNBQXlDO0FBQ3pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFHL0IsT0FBTyxFQUFxQixrQkFBa0IsRUFBZ0QsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQUt2SCxNQUFNLE9BQU8sYUFBYTtJQTZDdEIsWUFDWSxVQUFzQixFQUN0QixpQkFBb0M7UUFEcEMsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUN0QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBOUN4QyxlQUFVLEdBQVcsWUFBWSxDQUFDO1FBTW5DLGVBQVUsR0FLWixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBRVosaUJBQVksR0FBcUIsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUUvQyxhQUFRLEdBQUcsS0FBSyxDQUFDO1FBRWpCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBTXRCLGtCQUFhLEdBQUc7WUFDbkIsU0FBUyxFQUFFO2dCQUNQLElBQUksRUFBRSxLQUFLO2dCQUNYLE1BQU0sRUFBRSxjQUFjO2dCQUN0QixJQUFJLEtBQUssQ0FBQztnQkFDVixJQUFJLEtBQUssQ0FBQzthQUNiO1lBQ0QsU0FBUyxFQUFFO2dCQUNQLElBQUksRUFBRSxLQUFLO2FBQ2Q7WUFDRCxNQUFNLEVBQUU7Z0JBQ0osSUFBSSxFQUFFLEtBQUs7Z0JBQ1gsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLElBQUksS0FBSyxDQUFDO2dCQUNWLElBQUksS0FBSyxDQUFDO2FBQ2I7WUFDRCxNQUFNLEVB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SyxFQUFFLElBQUksQ0FBQyxXQUFXOzRCQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWM7eUJBQ2hDLENBQUMsQ0FBQzt3QkFDSCxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDN0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7d0JBQ3JCLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO3dCQUN4QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztxQkFDOUI7Z0JBQ0wsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUNkLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzVCO1lBQ0QsT0FBTyxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQscUJBQXFCLENBQUMsZUFBeUI7UUFDM0MsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxFQUFFO1lBQzlCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqRTtJQUNMLENBQUM7OzBHQWhZUSxhQUFhOzhHQUFiLGFBQWEsY0FGVixNQUFNOzJGQUVULGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tYXdhaXQtaW4tbG9vcCAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cclxuLyogZXNsaW50LWRpc2FibGUgbm8tdW5kZXJzY29yZS1kYW5nbGUgKi9cclxuLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xyXG5pbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7IE1hdHRlcnBvcnRTZXJ2aWNlIH0gZnJvbSBcIi4vbWF0dGVycG9ydC5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSBcIi4vdGFnLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRGJPYmplY3RUeXBlLCBQT0ksIFZpZXdlckludGVyYWN0aW9ucywgUG9pVHlwZSwgQ29tbWVudCwgRXF1aXBtZW50LCBUaWNrZXQsIEZlYXR1cmUgfSBmcm9tIFwiLi4vdHlwZXMuc2VydmljZVwiO1xyXG5pbXBvcnQgeyBQb2lTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL3BvaS5zZXJ2aWNlXCI7XHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46IFwicm9vdFwiLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgVmlld2VyU2VydmljZSB7XHJcbiAgICBwcml2YXRlIHZpZXdlck1vZGU6IHN0cmluZyA9IFwiTWF0dGVycG9ydFwiO1xyXG5cclxuICAgIHB1YmxpYyBjdXJyZW50TW9kZWwzRDogc3RyaW5nO1xyXG5cclxuICAgIHByaXZhdGUgdG91clVybDogc3RyaW5nO1xyXG5cclxuICAgIHB1YmxpYyB2aWV3ZXJJc09uOiBTdWJqZWN0PHtcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcgfCBudWxsO1xyXG4gICAgICAgIG1vZGVsM0Q6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgc3dlZXA6IHN0cmluZyB8IG51bGw7XHJcbiAgICAgICAgcm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IH0gfCBudWxsO1xyXG4gICAgfT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIHB1YmxpYyBkYXRhSXNMb2FkZWQ6IFN1YmplY3Q8Ym9vbGVhbj4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIHB1YmxpYyBpc0xvYWRlZCA9IGZhbHNlO1xyXG5cclxuICAgIHB1YmxpYyBzaG93aW5nVmlld2VyID0gZmFsc2U7XHJcblxyXG4gICAgcHVibGljIHN3ZWVwVG9Nb3ZlOiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICAgIHB1YmxpYyByb3RhdGlvblRvTW92ZTogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgfSB8IG51bGw7XHJcblxyXG4gICAgcHVibGljIHRvb2xib3hTdGF0ZXMgPSB7XHJcbiAgICAgICAgZG9sbGhvdXNlOiB7XHJcbiAgICAgICAgICAgIHN0YXQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBpY29uSWQ6IFwidWktZG9sbGhvdXNlXCIsXHJcbiAgICAgICAgICAgIHNob3coKSB7IH0sXHJcbiAgICAgICAgICAgIGhpZGUoKSB7IH0sXHJcbiAgICAgICAgfSxcclxuICAgICAgICBmbG9vcnBsYW46IHtcclxuICAgICAgICAgICAgc3RhdDogZmFsc2UsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXN1cmU6IHtcclxuICAgICAgICAgICAgc3RhdDogZmFsc2UsXHJcbiAgICAgICAgICAgIGljb25JZDogXCJ1aS1tZXN1cmVcIixcclxuICAgICAgICAgICAgc2hvdygpIHsgfSxcclxuICAgICAgICAgICAgaGlkZSgpIHsgfSxcclxuICAgICAgICB9LFxyXG4gICAgICAgIGZpbHRlcjoge1xyXG4gICAgICAgICAgICBzdGF0OiBmYWxzZSxcclxuICAgICAgICB9LFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHBvaVNlcnZpY2U6IFBvaVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBtYXR0ZXJwb3J0U2VydmljZTogTWF0dGVycG9ydFNlcnZpY2UsXHJcbiAgICApIHtcclxuICAgICAgICB0aGlzLnNldE1vZGUoXCJNYXR0ZXJwb3J0XCIpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgIFV0aWxzXHJcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgY2hlY2tNb2RlKGluZGV4TW9kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudmlld2VyTW9kZSA9PT0gaW5kZXhNb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgIFNldHRlcnNcclxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBzZXRNb2RlKGluZGV4TW9kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy52aWV3ZXJNb2RlID0gaW5kZXhNb2RlO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFRvdXJVcmwobW9kZWwzZDogc3RyaW5nLCBzaG93SWNvblBsYW46IGJvb2xlYW4gPSB0cnVlLCBzaG93SWNvbkRvbGxob3VzZTogYm9vbGVhbiA9IHRydWUsIHNob3dJY29uRmxvb3JzOiBib29sZWFuID0gdHJ1ZSkge1xyXG4gICAgICAgIC8vIHRoaXMudG91clVybCA9IHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKVxyXG4gICAgICAgIC8vICAgICA/IGBodHRwczovL215Lm1hdHRlcnBvcnQuY29tL3Nob3cvP209JHttb2RlbDNkfSZwbGF5PTEmcXM9MSZocj0wJmd0PTAmdGl0bGU9MCZsb2c9MCZicmFuZD0wJmFwcGxpY2F0aW9uS2V5PXFuOXdzYXN1eTVoMmZ6cmJybjFuenIwaWQmbWRzPTBgXHJcbiAgICAgICAgLy8gICAgIDogXCJodHRwOi8vY3VwaXh3ZWV3b3JrLnMzLXdlYnNpdGUuZXUtd2VzdC0zLmFtYXpvbmF3cy5jb20vXCI7XHJcbiAgICAgICAgdGhpcy50b3VyVXJsID0gYGh0dHBzOi8vbXkubWF0dGVycG9ydC5jb20vc2hvdy8/bT0ke21vZGVsM2R9JnBsYXk9MSZocj0wJnFzPTEmZ3Q9MCZ0aXRsZT0wJmxvZz0wJmJyYW5kPTAmc2VhcmNoPTAmYXBwbGljYXRpb25LZXk9cW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZCZtZHM9MGA7XHJcbiAgICAgICAgaWYgKCFzaG93SWNvblBsYW4pIHtcclxuICAgICAgICAgICAgdGhpcy50b3VyVXJsICs9IFwiJmZwPTBcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFzaG93SWNvbkRvbGxob3VzZSkge1xyXG4gICAgICAgICAgICB0aGlzLnRvdXJVcmwgKz0gXCImZGg9MFwiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXNob3dJY29uRmxvb3JzKSB7XHJcbiAgICAgICAgICAgIHRoaXMudG91clVybCArPSBcIiZmPTBcIjtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbGwoKSB7XHJcbiAgICAgICAgdGhpcy5zd2VlcFRvTW92ZSA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yb3RhdGlvblRvTW92ZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5pc0xvYWRlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmNsZWFyQWxsKCk7XHJcbiAgICAgICAgICAgIHRoaXMudmlld2VySXNPbi5uZXh0KHtcclxuICAgICAgICAgICAgICAgIHNwYWNlSUQ6IG51bGwsXHJcbiAgICAgICAgICAgICAgICBtb2RlbDNEOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgc3dlZXA6IG51bGwsXHJcbiAgICAgICAgICAgICAgICByb3RhdGlvbjogbnVsbCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgIEdldHRlcnNcclxuICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBnZXRNb2RlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnZpZXdlck1vZGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Vmlld2VyU2VsZWN0ZWRTZXJ2aWNlKCkge1xyXG4gICAgICAgIC8vIE1hdHRlcnBvcnRcclxuICAgICAgICAvLyBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XHJcbiAgICAgICAgLy8gICAgIHJldHVybiB0aGlzLmdldE1hdHRlcnBvcnRTZXJ2aWNlKCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIHJldHVybiB0aGlzLmdldE1hdHRlcnBvcnRTZXJ2aWNlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VG91clVybCgpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy50b3VyVXJsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldE1hdHRlcnBvcnRTZXJ2aWNlKCkge1xyXG4gICAgICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgICAgIEdlbmVyaWMgTWFpbiBhY3Rpb24gZnVuY3Rpb25zXHJcbiAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcbiAgICBzZXRTd2VlcFRvTW92ZShzd2VlcDogc3RyaW5nKSB7XHJcbiAgICAgICAgdGhpcy5zd2VlcFRvTW92ZSA9IHN3ZWVwO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFJvdGF0aW9uVG9Nb3ZlKHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB9KSB7XHJcbiAgICAgICAgdGhpcy5yb3RhdGlvblRvTW92ZSA9IHJvdGF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9tb3ZlX3RvX3RhZyhlbGVtZW50SWQ6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgICAgIC8vIE1hdHRlcnBvcnRcclxuICAgICAgICBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudElkKTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdC50YWcpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ29Ub1RhZyhyZXN1bHQudGFnKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQuc3dlZXApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc3dlZXBUb01vdmUgPSByZXN1bHQuc3dlZXA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBZGRzIE1hdHRlcnRhZ3MgdG8gVmlld2VyXHJcbiAgICAgKiBAcGFyYW0gb2JqZWN0cyBMaXN0IG9mIG9iamVjdHMgKHRpY2tldHMsIGVxdWlwbWVudHMpIGV0YyB0byBiZSBhZGRlZCBhcyBNYXR0ZXJ0YWdzXHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFkZE9iamVjdFRhZ3NUb1ZpZXdlcihvYmplY3RzOiBEYk9iamVjdFR5cGVbXSkge1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBvYmplY3RzLm1hcChhc3luYyAob2JqZWN0KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb2kgPSBhd2FpdCB0aGlzLnBvaVNlcnZpY2UuZ2V0UG9pQnlFbGVtZW50SWQob2JqZWN0LmlkISk7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hY3Rpb25BZGRPYmplY3RGcm9tUE9JKG9iamVjdCwgcG9pKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25BZGRPYmplY3RGcm9tUE9JKFxyXG4gICAgICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgICAgIHBvaTogUE9JXHJcbiAgICApIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl9hZGRfbWF0dGVydGFnX2Zyb21fUE9JKFxyXG4gICAgICAgICAgICAgICAgcG9pLnR5cGUhLFxyXG4gICAgICAgICAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgICAgICAgICAgcG9pLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDdXBpeFxyXG4gICAgICAgIC8vIFRPRE9cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGFzeW5jIGFjdGlvbl9kZWxldGVfZWxlbWVudChcclxuICAgICAgICBlbGVtZW50OiBEYk9iamVjdFR5cGUsXHJcbiAgICApIHtcclxuICAgICAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl9kZWxldGVfZWxlbWVudChlbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAqIEVuYWJsZSB0YWcgcGxhY2VtZW50IG1lbnUgdG8gYWRkIGEgbmV3IGVsZW1lbnQgZGVwZW5kaW5nIG9uIGl0cyB0eXBlIChUSUNLRVQsIERBVEEsIEVRVUlQTUVOVCBldGMpXHJcbiAgICAqL1xyXG4gICAgYXN5bmMgYWN0aW9uQWRkTmV3RWxlbWVudFRvVmlld2VyKHBvaVR5cGU6IFBvaVR5cGUpIHtcclxuICAgICAgICB0aGlzLmFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCk7XHJcblxyXG4gICAgICAgIC8vIE1hdHRlcnBvcnRcclxuICAgICAgICBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpICYmIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0SW50ZXJhY3Rpb25Nb2RlKCkgPT09XHJcbiAgICAgICAgICAgIFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWRkRWxlbWVudEFzTWF0dGVydGFnKHBvaVR5cGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIExhdW5jaGVzIHRoZSByZXBvc2l0aW9uaW5nIG9mIGFuIGV4aXN0aW5nIE1hdHRlcnRhZyByZWxhdGVkIHRvIHBhcmFtZXRlciBvYmplY3RcclxuICAgICAqIEBwYXJhbSBlbGVtZW50IG9iamVjdCAoVElDS0VULCBFUVVJUE1FTlQsIEZFQVRVUkUsIGV0YylcclxuICAgICAqIEBwYXJhbSBwb2lUeXBlIHR5cGUgb2Ygb2JqZWN0XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjdGlvblJlcG9zaXRpb25FbGVtZW50SW5WaWV3ZXIoZWxlbWVudDogRGJPYmplY3RUeXBlLCBwb2lUeXBlOiBQb2lUeXBlKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikgJiZcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSA9PT1cclxuICAgICAgICAgICAgVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fcG9zaXRpb25fZWxlbWVudChcclxuICAgICAgICAgICAgICAgIHBvaVR5cGUsXHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEVuYWJsZSB0aWNrZXQgcGxhY2VtZW50IG1lbnUgdG8gYWRkIGEgbmV3IHRpY2tldFxyXG4gICAgICovXHJcbiAgICBhY3Rpb25fY2FuY2VsZWQoKSB7XHJcbiAgICAgICAgLy8gTWF0dGVycG9ydFxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fY2FuY2VsZWQoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKSB7XHJcbiAgICAgICAgLy8gTWF0dGVycG9ydFxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9pbnNpZGVfdmlldygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKSB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEludGVyYWN0aW9uTW9kZSgpICE9PVxyXG4gICAgICAgICAgICBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVFxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFjdGlvbl9jYW5jZWxlZCgpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCk7XHJcbiAgICAgICAgLy8gTWF0dGVycG9ydFxyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrTW9kZShcIk1hdHRlcnBvcnRcIikpIHtcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5hY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCkge1xyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRJbnRlcmFjdGlvbk1vZGUoKSAhPT1cclxuICAgICAgICAgICAgVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFRcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hY3Rpb25fY2FuY2VsZWQoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKTtcclxuICAgICAgICAvLyBNYXR0ZXJwb3J0XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl90b29sYm94X21lc3VyZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xyXG4gICAgICAgIC8vIE1hdHRlcnBvcnRcclxuICAgICAgICBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX3Rvb2xib3hfY2FuY2VsX21lc3VyZSgpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBhY3Rpb25fdXBkYXRlX3BvaShcclxuICAgICAgICBwb2k6IFBPSSxcclxuICAgICAgICBpc1ZhbGlkOiBib29sZWFuLFxyXG4gICAgICAgIGVsZW1lbnQ6IERiT2JqZWN0VHlwZSxcclxuICAgICk6IFByb21pc2U8UE9JPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tNb2RlKFwiTWF0dGVycG9ydFwiKSkge1xyXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGFzdFRhZyA9IHRoaXMubWF0dGVycG9ydFNlcnZpY2UubWF0dGVydGFnVG9Gb2xsb3dcclxuICAgICAgICAgICAgICAgICAgICA/IHRoaXMubWF0dGVycG9ydFNlcnZpY2UubWF0dGVydGFnVG9Gb2xsb3dcclxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ2V0TGFzdFRhZygpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFsYXN0VGFnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFnRGF0YSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRUYWdEYXRhRnJvbUlkKGxhc3RUYWcpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0YWdEYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwb2kpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvaU1ldGFkYXRhID0gcG9pLm1ldGFkYXRhXHJcbiAgICAgICAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKHBvaS5tZXRhZGF0YSlcclxuICAgICAgICAgICAgICAgICAgICA6IHt9O1xyXG4gICAgICAgICAgICAgICAgcG9pTWV0YWRhdGEubm9ybWFsID0gdGFnRGF0YS5nZXROb3JtYWwoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvaUlucHV0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlkOiBwb2kuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZTogdGFnRGF0YS5nZXRDb29yZGluYXRlU3RyaW5nKCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWF0dGVycG9ydFN3ZWVwSUQ6IHRhZ0RhdGEuZ2V0U3dlZXBJRCgpLFxyXG4gICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBKU09OLnN0cmluZ2lmeShwb2lNZXRhZGF0YSksXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdXBkYXRlZFBvaTogUE9JID0gYXdhaXQgdGhpcy5wb2lTZXJ2aWNlLnVwZGF0ZVBvaShcclxuICAgICAgICAgICAgICAgICAgICBwb2lJbnB1dCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB0YWdEYXRhLnNldFBvaSh1cGRhdGVkUG9pKTtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubWF0dGVycG9ydFNlcnZpY2UuaW5qZWN0SHRtbEluVGFnKFxyXG4gICAgICAgICAgICAgICAgICAgIHBvaS50eXBlISxcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RUYWdcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmVkaXRUYWdTdHlsZShsYXN0VGFnLCB0YWdEYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZ29Ub1RhZyhsYXN0VGFnKTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHVwZGF0ZWRQb2kpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuZGVsZXRlTGFzdE1hdHRlcnRhZygpO1xyXG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHBvaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocG9pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIE1vdmUgYW4gZXhpc3RpbmcgcG9pIGluIE1hdHRlcnBvcnRcclxuICAgICAqIEBwYXJhbSBwb2lcclxuICAgICAqIEBwYXJhbSBlbGVtZW50XHJcbiAgICAgKi9cclxuICAgIGFzeW5jIGFjdGlvbl9tb3ZlX3BvaV92aXN1YWxseShcclxuICAgICAgICBwb2k6IFBPSSxcclxuICAgICAgICBlbGVtZW50OiBUaWNrZXQgfCBGZWF0dXJlIHwgRXF1aXBtZW50IHwgQ29tbWVudCxcclxuICAgICkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uX2RlbGV0ZV9lbGVtZW50KGVsZW1lbnQpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuYWN0aW9uQWRkT2JqZWN0RnJvbVBPSShlbGVtZW50LCBwb2kpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuICAgIEN1cGl4XHJcbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovXHJcblxyXG4gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4gICAgTWF0dGVycG9ydFxyXG4gICAgaHR0cHM6Ly9tYXR0ZXJwb3J0LmdpdGh1Yi5pby9zaG93Y2FzZS1zZGsvZG9jcy9zZGsvcmVmZXJlbmNlL2N1cnJlbnQvbW9kdWxlcy9tYXR0ZXJ0YWcuaHRtbCNhZGRcclxuICAgIGh0dHBzOi8vbWF0dGVycG9ydC5naXRodWIuaW8vc2hvd2Nhc2Utc2RrL2RvY3Mvc2RrL3JlZmVyZW5jZS9jdXJyZW50L21vZHVsZXMvbWF0dGVydGFnLmh0bWwjcmVtb3ZlXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cclxuXHJcbiAgICBhc3luYyBpbml0TWF0dGVycG9ydFNkayhzcGFjZUlEOiBzdHJpbmcsIG1vZGVsM0Q6IHN0cmluZywgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsIGlzTXVzZXVtOiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLmlzTG9hZGVkID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jdXJyZW50U3BhY2VJRCA9IHNwYWNlSUQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuaW5pdFNkayh0YWdTZXJ2aWNlLCBpc011c2V1bSkudGhlbihhc3luYyAocmVzdWx0KSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2RrIH0gPSB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlO1xyXG4gICAgICAgICAgICAgICAgc2RrLkFwcC5zdGF0ZS5zdWJzY3JpYmUoZnVuY3Rpb24gKGFwcFN0YXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gYXBwIHN0YXRlIGhhcyBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1RoZSBjdXJyZW50IHBoYXNlOiAnLCBhcHBTdGF0ZS5waGFzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFwcFN0YXRlLnBoYXNlID09PSBzZGsuQXBwLlBoYXNlLlBMQVlJTkcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1RoZSBhcHAgaXMgcGxheWluZycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNob3dpbmdWaWV3ZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnZpZXdlcklzT24ubmV4dCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGFjZUlELFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWwzRCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwOiB0aGlzLnN3ZWVwVG9Nb3ZlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm90YXRpb246IHRoaXMucm90YXRpb25Ub01vdmUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRhdGFJc0xvYWRlZC5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTG9hZGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zd2VlcFRvTW92ZSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucm90YXRpb25Ub01vdmUgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja01vZGUoXCJNYXR0ZXJwb3J0XCIpKSB7XHJcbiAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UucmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==