@sunbird-cb/toc 0.35.6 → 0.35.7

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 (36) hide show
  1. package/esm2022/lib/_collection/_common/content-toc/app-toc-about/app-toc-about.component.mjs +2 -2
  2. package/esm2022/lib/_collection/_common/content-toc/app-toc-content-card-v2/app-toc-content-card-v2.component.mjs +1 -3
  3. package/esm2022/lib/_collection/_common/content-toc/content-toc.component.mjs +1 -2
  4. package/esm2022/lib/app-toc-lib.module.mjs +10 -5
  5. package/esm2022/lib/components/enroll-profile-form/enroll-profile-form.component.mjs +13 -2
  6. package/esm2022/lib/models/user-profile.model.mjs +1 -1
  7. package/esm2022/lib/services/discuss-utils.service.mjs +30 -43
  8. package/esm2022/lib/services/netcore.service.mjs +116 -46
  9. package/esm2022/lib/services/nps-grid.service.mjs +34 -22
  10. package/esm2022/lib/services/otp.service.mjs +63 -25
  11. package/esm2022/lib/services/profile-v2.service.mjs +46 -21
  12. package/esm2022/lib/services/user-profile.service.mjs +159 -39
  13. package/esm2022/public-api.mjs +2 -1
  14. package/fesm2022/sunbird-cb-toc.mjs +583 -327
  15. package/fesm2022/sunbird-cb-toc.mjs.map +1 -1
  16. package/lib/_collection/_common/content-toc/content-toc.component.d.ts.map +1 -1
  17. package/lib/app-toc-lib.module.d.ts.map +1 -1
  18. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts +2 -0
  19. package/lib/components/enroll-profile-form/enroll-profile-form.component.d.ts.map +1 -1
  20. package/lib/models/user-profile.model.d.ts +87 -0
  21. package/lib/models/user-profile.model.d.ts.map +1 -1
  22. package/lib/services/discuss-utils.service.d.ts +5 -27
  23. package/lib/services/discuss-utils.service.d.ts.map +1 -1
  24. package/lib/services/netcore.service.d.ts +16 -28
  25. package/lib/services/netcore.service.d.ts.map +1 -1
  26. package/lib/services/nps-grid.service.d.ts +11 -10
  27. package/lib/services/nps-grid.service.d.ts.map +1 -1
  28. package/lib/services/otp.service.d.ts +5 -10
  29. package/lib/services/otp.service.d.ts.map +1 -1
  30. package/lib/services/profile-v2.service.d.ts +7 -6
  31. package/lib/services/profile-v2.service.d.ts.map +1 -1
  32. package/lib/services/user-profile.service.d.ts +35 -11
  33. package/lib/services/user-profile.service.d.ts.map +1 -1
  34. package/package.json +1 -1
  35. package/public-api.d.ts +1 -0
  36. package/public-api.d.ts.map +1 -1
@@ -97,6 +97,8 @@ export class EnrollProfileFormComponent {
97
97
  this.showDoptChanges = false;
98
98
  this.verifyEmail = false;
99
99
  this.approvedDomainList = [];
100
+ this.verifiedEmailOtp = '';
101
+ this.verifiedPhoneOtp = '';
100
102
  this.currentDate = new Date();
101
103
  this.openDesignationDropdown = false;
102
104
  this.openLanguageDropdown = false;
@@ -413,6 +415,7 @@ export class EnrollProfileFormComponent {
413
415
  this.eVerified = true;
414
416
  this.emailOtpSent = false;
415
417
  this.contextToken = _res.result.contextToken;
418
+ this.verifiedEmailOtp = this.emailOtpForm.controls['eOtp'].value;
416
419
  this.emailOtpForm.reset();
417
420
  }, (error) => {
418
421
  if (!error.ok) {
@@ -428,6 +431,7 @@ export class EnrollProfileFormComponent {
428
431
  this.verifyMobile = true;
429
432
  this.mVerified = true;
430
433
  this.otpSent = false;
434
+ this.verifiedPhoneOtp = this.otpForm.controls['otp'].value;
431
435
  this.otpForm.reset();
432
436
  }, (error) => {
433
437
  if (!error.ok) {
@@ -1319,6 +1323,12 @@ export class EnrollProfileFormComponent {
1319
1323
  }
1320
1324
  }
1321
1325
  submitProfile(payload) {
1326
+ if (this.eVerified && this.verifiedEmailOtp) {
1327
+ payload['request']['emailOtp'] = this.verifiedEmailOtp;
1328
+ }
1329
+ if (this.mVerified && this.verifiedPhoneOtp) {
1330
+ payload['request']['phoneOtp'] = this.verifiedPhoneOtp;
1331
+ }
1322
1332
  if (payload && payload['request'] && payload['request']['profileDetails'] && payload['request']['profileDetails']['personalDetails'] && payload['request']['profileDetails']['personalDetails']['dob']) {
1323
1333
  let dobFormat = payload['request']['profileDetails']['personalDetails']['dob'];
1324
1334
  let dob = `${new Date(dobFormat).getDate()}-${new Date(dobFormat).getMonth() + 1}-${new Date(dobFormat).getFullYear()}`;
@@ -1327,6 +1337,7 @@ export class EnrollProfileFormComponent {
1327
1337
  if (this.updateProfile) {
1328
1338
  this.addLoader = this.addLoader + 1;
1329
1339
  this.userProfileService.editProfileDetails(payload).subscribe((res) => {
1340
+ debugger;
1330
1341
  this.addLoader = this.addLoader - 1;
1331
1342
  if (res.responseCode === 'OK') {
1332
1343
  this.submitSurevy(true);
@@ -1335,7 +1346,7 @@ export class EnrollProfileFormComponent {
1335
1346
  this.addLoader = this.addLoader - 1;
1336
1347
  /* tslint:disable */
1337
1348
  console.log(error);
1338
- this.snackBar.open("something went wrong!");
1349
+ this.snackBar.open(error?.error?.params?.errmsg || "Something went wrong!");
1339
1350
  });
1340
1351
  }
1341
1352
  }
@@ -1837,4 +1848,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
1837
1848
  type: HostListener,
1838
1849
  args: ['document:click', ['$event']]
1839
1850
  }] } });
1840
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvY29tcG9uZW50cy9lbnJvbGwtcHJvZmlsZS1mb3JtL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvZW5yb2xsLXByb2ZpbGUtZm9ybS9lbnJvbGwtcHJvZmlsZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFekYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM5QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUt0RSxPQUFPLEVBQXNDLHNCQUFzQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBRS9ILG9CQUFvQjtBQUNwQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLdEIsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUE7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQTtBQUMxQyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUE7QUFDckMsb0JBQW9CO0FBQ3BCLE1BQU0sYUFBYSxHQUFHLHFIQUFxSCxDQUFB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QkFBa0I7c0JBRmpCLFlBQVk7dUJBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxRQUFRLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbidcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBJbmplY3QsIFZpZXdDaGlsZCwgRWxlbWVudFJlZiwgSG9zdExpc3RlbmVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3JtcydcbmltcG9ydCB7IFVzZXJQcm9maWxlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXItcHJvZmlsZS5zZXJ2aWNlJ1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgc3RhcnRXaXRoLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IE5zVXNlclByb2ZpbGVEZXRhaWxzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3VzZXItcHJvZmlsZS5tb2RlbCdcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJ1xuaW1wb3J0IHsgUHJvZmlsZVYyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Byb2ZpbGUtdjIuc2VydmljZSdcbmltcG9ydCB7IE90cFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9vdHAuc2VydmljZSdcbmltcG9ydCB7IE5QU0dyaWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbnBzLWdyaWQuc2VydmljZSdcbmltcG9ydCB7IE1hdExlZ2FjeURpYWxvZ1JlZiBhcyBNYXREaWFsb2dSZWYsIE1BVF9MRUdBQ1lfRElBTE9HX0RBVEEgYXMgTUFUX0RJQUxPR19EQVRBIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LWRpYWxvZydcbmltcG9ydCB7IE1hdExlZ2FjeVNuYWNrQmFyIGFzIE1hdFNuYWNrQmFyIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwvbGVnYWN5LXNuYWNrLWJhcidcbi8qIHRzbGludDpkaXNhYmxlICovXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSdcbi8vIGltcG9ydCB7IFNpZ251cFNlcnZpY2UgfSBmcm9tICdzcmMvYXBwL3JvdXRlcy9wdWJsaWMvcHVibGljLXNpZ251cC9zaWdudXAuc2VydmljZSdcbmltcG9ydCB7IGRlc2lnbmF0aW9uIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Byb2ZpbGUtcmV2YW1wLm1vZGVsJ1xuXG5jb25zdCBNT0JJTEVfUEFUVEVSTiA9IC9eWzBdP1s2Nzg5XVxcZHs5fSQvXG5jb25zdCBQSU5fQ09ERV9QQVRURVJOID0gL15bMS05XVswLTldezV9JC9cbmNvbnN0IEVNUF9JRF9QQVRURVJOID0gL15bYS16MC05XSskL2lcbi8qIHRzbGludDpkaXNhYmxlICovXG5jb25zdCBFTUFJTF9QQVRURVJOID0gL15bYS16QS1aMC05XStbYS16QS1aMC05Ll8tXSpbYS16QS1aMC05XStAW2EtekEtWjAtOV0rKFstYS16QS1aMC05XSpbYS16QS1aMC05XSspPyhcXC5bYS16QS1aMC05LV0rKSpcXC5bYS16QS1aXXsyLDR9JC9cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnd3MtYXBwLWVucm9sbC1wcm9maWxlLWZvcm0nLFxuICB0ZW1wbGF0ZVVybDogJy4vZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgRW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBwdWJsaWMgYWZ0ZXJTdWJtaXRBY3Rpb24gPSB0aGlzLmNoZWNrQWZ0ZXJTdWJtaXQuYmluZCh0aGlzKVxuICBpc1JlYWRPbmx5ID0gZmFsc2VcbiAgYmF0Y2hEZXRhaWxzOiBhbnlcbiAgY3VzdG9tRm9ybTogYm9vbGVhbiA9IGZhbHNlXG4gIHVzZXJEZXRhaWxzRm9ybTogRm9ybUdyb3VwXG4gIGdyb3VwRGF0YTogYW55IHwgdW5kZWZpbmVkXG4gIHByaXZhdGUgZGVzdHJveVN1YmplY3QkID0gbmV3IFN1YmplY3QoKVxuICBkZXNpZ25hdGlvbnNNZXRhOiBhbnkgPSBbXVxuICAvLyBmaWx0ZXJEZXNpZ25hdGlvbnNNZXRhOiBhbnkgPSBbXVxuICBlVXNlckdlbmRlciA9IE9iamVjdC5rZXlzKE5zVXNlclByb2ZpbGVEZXRhaWxzLkVVc2VyR2VuZGVyKVxuICBtYXN0ZXJMYW5ndWFnZXM6IGFueVxuICBtYXN0ZXJMYW5ndWFnZUJhY2t1cDogYW55XG4gIGVDYXRlZ29yeSA9IE9iamVjdC5rZXlzKE5zVXNlclByb2ZpbGVEZXRhaWxzLkVDYXRlZ29yeSlcbiAgdXNlclByb2ZpbGVPYmplY3Q6IGFueVxuICBlbGlnaWJsZTogYm9vbGVhbiA9IGZhbHNlXG4gIGlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICBzaG93QmF0Y2hGb3JOb0NhZHJlID0gdHJ1ZVxuICBjaXZpbFNlcnZpY2VEYXRhOiBhbnlcbiAgY2l2aWxTZXJ2aWNlVHlwZXM6IGFueVxuICBzZXJ2aWNlTmFtZTogYW55XG4gIHNlcnZpY2VUeXBlOiBhbnlcbiAgc2VydmljZUxpc3REYXRhOiBhbnlcbiAgc2VydmljZUlkOiBhbnlcbiAgZXJyb3JNZXNzYWdlOiBhbnlcbiAgc2VsZWN0ZWRTZXJ2aWNlTmFtZTogYW55XG4gIHNlbGVjdGVkU2VydmljZTogYW55XG4gIGNpdmlsU2VydmljZU5hbWU6IGFueVxuICBjaXZpbFNlcnZpY2VJZDogYW55XG4gIGNhZHJlSWQ6IGFueVxuICBjYWRyZTogYW55XG4gIGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHk6IGFueVxuICBzdGFydEJhdGNoOiBhbnlcbiAgZW5kQmF0Y2g6IGFueVxuICB5ZWFyQXJyYXk6IGFueVxuICBleGNsdXNpb25ZZWFyOiBhbnlcbiAgc2VsZWN0ZWRDYWRyZU5hbWU6IGFueVxuICBzZWxlY3RlZENhZHJlOiBhbnlcbiAgdmVyaWZ5TW9iaWxlOiBib29sZWFuID0gZmFsc2VcbiAgb3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXG4gIGVtYWlsT3RwU2VudDogYm9vbGVhbiA9IGZhbHNlXG4gIG90cEVudGVyZWQgPSAnJ1xuICBtVmVyaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBlVmVyaWZpZWQ6IGJvb2xlYW4gPSBmYWxzZVxuICBAVmlld0NoaWxkKCd0aW1lckRpdicsIHsgc3RhdGljOiBmYWxzZSB9KSB0aW1lckRpdiAhOiBhbnlcbiAgQFZpZXdDaGlsZCgnZW1haWxUaW1lckRpdicsIHsgc3RhdGljOiBmYWxzZSB9KSBlbWFpbFRpbWVyRGl2ICE6IGFueVxuICB0aW1lTGVmdCA9IDE1MFxuICBlbWFpbFRpbWVMZWZ0ID0gMTUwXG4gIGludGVydmFsOiBhbnlcbiAgZW1haWxJbnRlcnZhbDogYW55XG4gIHNob3dSZXNlbmRPVFAgPSBmYWxzZVxuICBzaG93RW1haWxSZXNlbmRPVFAgPSBmYWxzZVxuICBvdHBGb3JtOiBGb3JtR3JvdXBcbiAgZW1haWxPdHBGb3JtOiBGb3JtR3JvdXBcbiAgc2hvd25hbWUgPSBmYWxzZVxuICBzaG93RGVzaWduYXRpb24gPSBmYWxzZVxuICBzaG93R3JvdXAgPSBmYWxzZVxuICBzaG93RW1wbG95ZWVDb2RlID0gZmFsc2VcbiAgc2hvd01vYmlsZSA9IGZhbHNlXG4gIHNob3dHZW5kZXIgPSBmYWxzZVxuICBzaG93RG9iID0gZmFsc2VcbiAgc2hvd0NhdGVnb3J5ID0gZmFsc2VcbiAgc2hvd0RlY2ltYWxNZWRpdW0gPSBmYWxzZVxuICBzaG93UGluQ29kZSA9IGZhbHNlXG4gIHNob3dDYWRyZURldGFpbHMgPSBmYWxzZVxuICB1cGRhdGVQcm9maWxlID0gZmFsc2VcbiAgcGVuZGluZ0ZpbGVkczogYW55XG4gIHBHcm91cDogYW55XG4gIHBEZXNpZ25hdGlvbjogYW55XG4gIGlzTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dFbXBsb3llZUNvZGU6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5zaG93TW9iaWxlOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0dlbmRlcjogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dEb2I6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93RG9taWNpbGVNZWRpdW06IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93Q2F0ZWdvcnk6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93cGluQ29kZTogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dzaG93Q2FkcmVEZXRhaWxzOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0dyb3VwOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0Rlc2lnbmF0aW9uOiBib29sZWFuID0gZmFsc2VcbiAgc2VsZWN0ZWREYXRlOiBhbnlcbiAgc2hvd0NvdW50ZXI6IG51bWJlciA9IDBcbiAgZGlzYWJsZUNvdW50ZXI6IG51bWJlciA9IDBcbiAgY2FuU2hvd0VtYWlsOiBib29sZWFuID0gZmFsc2VcbiAgc2hvd0VtYWlsOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd05hbWU6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93T3JnOiBib29sZWFuID0gZmFsc2VcbiAgc2hvd09yZzogYm9vbGVhbiA9IGZhbHNlXG4gIHN1cnZleUlkOiBhbnlcbiAgc2hvd0RvcHRDaGFuZ2VzOiBib29sZWFuID0gZmFsc2VcbiAgcHJvZmlsZUZvcm1UeXBlOiBhbnlcbiAgdmVyaWZ5RW1haWwgPSBmYWxzZVxuICBhcHByb3ZlZERvbWFpbkxpc3Q6IGFueSA9IFtdXG4gIGNvbnRleHRUb2tlbjogYW55XG4gIGN1cnJlbnREYXRlID0gbmV3IERhdGUoKVxuICBvcGVuRGVzaWduYXRpb25Ecm9wZG93biA9IGZhbHNlXG4gIG9wZW5MYW5ndWFnZURyb3Bkb3duID0gZmFsc2VcbiAgY2FuU2hvd090aGVyRGVzaWduYXRpb24gPSBmYWxzZVxuICBkZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSA1MFxuICBhZGRMb2FkZXIgPSAwXG4gIGlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50ID0gIDUwXG4gIGRlc2lnYW50aW9uRmlsdGVyRW5hYmxlID0gZmFsc2VcbiAgb3JnYW5pc2F0aW9uSWQgPSAnJ1xuICBzZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICBkZXNpZ25hdGlvbnNPZmZzZXQgPSAwO1xuICBkZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJztcbiAgZGVzaWduYXRpb25zVG90YWxDb3VudCA9IDA7XG4gIGZvcm1JZDogc3RyaW5nID0gJyc7XG4gIGZvcm1zRGV0aWxzOiBhbnk7XG4gIEBWaWV3Q2hpbGQoJ3RleHRCb3gnKSB0ZXh0Qm94ITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdkcm9wZG93bicpIGRyb3Bkb3duITogRWxlbWVudFJlZlxuICBAVmlld0NoaWxkKCdsYW5ndWFnZVRleHRCb3gnKSBsYW5ndWFnZVRleHRCb3ghOiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoJ2xhbmd1YWdlRHJvcGRvd24nKSBsYW5ndWFnZURyb3Bkb3duITogRWxlbWVudFJlZlxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNuYWNrQmFyOiBNYXRTbmFja0JhcixcbiAgICBwdWJsaWMgZGlhbG9nUmVmOiBNYXREaWFsb2dSZWY8RW5yb2xsUHJvZmlsZUZvcm1Db21wb25lbnQ+LFxuICAgIHByaXZhdGUgdXNlclByb2ZpbGVTZXJ2aWNlOiBVc2VyUHJvZmlsZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTcmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHByb2ZpbGVWMlN2YzogUHJvZmlsZVYyU2VydmljZSxcbiAgICBwcml2YXRlIG90cFNlcnZpY2U6IE90cFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBucHNTdmM6IE5QU0dyaWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGRhdGVQaXBlOiBEYXRlUGlwZSxcbiAgICAvLyBwcml2YXRlIHNpZ251cFNlcnZpY2U6IFNpZ251cFNlcnZpY2UsXG4gICAgQEluamVjdChNQVRfRElBTE9HX0RBVEEpIHB1YmxpYyBkYXRhOiBhbnksXG4gICkge1xuXG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnNldERlZmF1bHRMYW5nKCdlbicpXG4gICAgICBjb25zdCBsYW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpIVxuICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLnVzZShsYW5nKVxuICAgIH1cblxuICAgIHRoaXMuYmF0Y2hEZXRhaWxzID0gdGhpcy5kYXRhLmJhdGNoRGF0YVxuICAgIHRoaXMuc3VydmV5SWQgPSB0aGlzLmRhdGEuc3VydmV5SWRcbiAgICB0aGlzLnNob3dEb3B0Q2hhbmdlcyA9IHRoaXMuZGF0YS5zaG93RG9wdENoYW5nZXNcbiAgICB0aGlzLnByb2ZpbGVGb3JtVHlwZSA9IHRoaXMuYmF0Y2hEZXRhaWxzLmJhdGNoQXR0cmlidXRlcy51c2VyUHJvZmlsZUZpbGVkc1xuICAgIHRoaXMudXNlckRldGFpbHNGb3JtID0gbmV3IEZvcm1Hcm91cCh7XG4gICAgICBuYW1lOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgb3JnYW5pc2F0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgZ3JvdXA6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBkZXNpZ25hdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGVtcGxveWVlQ29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHByaW1hcnlFbWFpbDogbmV3IEZvcm1Db250cm9sKCcnLCBbVmFsaWRhdG9ycy5wYXR0ZXJuKEVNQUlMX1BBVFRFUk4pXSksXG4gICAgICBtb2JpbGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBnZW5kZXI6IG5ldyBGb3JtQ29udHJvbCgnJywgW10pLFxuICAgICAgZG9iOiBuZXcgRm9ybUNvbnRyb2woJycsIFtdKSxcbiAgICAgIGRvbWljaWxlTWVkaXVtOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgY2F0ZWdvcnk6IG5ldyBGb3JtQ29udHJvbCgnJywgW10pLFxuICAgICAgcGluQ29kZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGlzQ2FkcmU6IG5ldyBGb3JtQ29udHJvbCgpLFxuICAgICAgdHlwZU9mQ2l2aWxTZXJ2aWNlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgc2VydmljZVR5cGU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYWRyZU5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYWRyZUJhdGNoOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIG90aGVyRGVzaWduYXRpb246IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKVxuICAgIH0pXG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlXG4gICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdCA9IHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlclxuICAgIHRoaXMub3JnYW5pc2F0aW9uSWQgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncm9vdE9yZ0lkJywgXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3BlcnNvbmFsRGV0YWlscy5yb290T3JnSWQnLCAnJykpXG5cbiAgICB0aGlzLm90cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIG90cDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgIH0pXG4gICAgdGhpcy5lbWFpbE90cEZvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIGVPdHA6IG5ldyBGb3JtQ29udHJvbCgnJywgVmFsaWRhdG9ycy5yZXF1aXJlZClcbiAgICB9KVxuXG4gICAgLy8gVG8gY2hlY2sgdGhlIG1vYmlsZSBudW1iZXIgZW50ZXJlZCBieSB0aGUgdXNlciBpcyBzYW1lIG9yIG5vdCwgdmFsaWRhdGluZyB0aGUgbW9iaWxlIG51bWJlciB0byBzaG93IHRoZSBHZXQgT1RQLlxuICAgIGlmICh0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpKSB7XG4gICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpIS52YWx1ZUNoYW5nZXNcbiAgICAgICAgLnN1YnNjcmliZShyZXMgPT4ge1xuICAgICAgICAgIGlmIChyZXMgJiYgcmVzICE9PSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgfHxcbiAgICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5waG9uZVZlcmlmaWVkKSB7XG4gICAgICAgICAgICBpZiAoTU9CSUxFX1BBVFRFUk4udGVzdChyZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gdHJ1ZVxuICAgICAgICAgICAgICB0aGlzLm1WZXJpZmllZCA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnZlcmlmeU1vYmlsZSA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gVG8gY2hlY2sgdGhlIGVtYWlsIGVudGVyZWQgYnkgdGhlIHVzZXIgaXMgc2FtZSBvciBub3QsIHZhbGlkYXRpbmcgdGhlIGVtYWlsIHRvIHNob3cgdGhlIEdldCBPVFAuXG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykpIHtcbiAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykhLnZhbHVlQ2hhbmdlc1xuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMgIT09IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCkge1xuICAgICAgICAgICAgaWYgKEVNQUlMX1BBVFRFUk4udGVzdChyZXMpKSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnZlcmlmeUVtYWlsID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBzY3JvbGxUb0FjdGl2ZSh0eXBlOiBhbnkpOiB2b2lkIHtcbiAgICBsZXQgYWN0aXZlRWxlbWVudDogYW55XG4gICAgbGV0IGNvbnRhaW5lcjogYW55XG4gICAgaWYgKHR5cGUgPT09ICdsYW5ndWFnZScpIHtcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMubGFuZ3VhZ2VEcm9wZG93bi5uYXRpdmVFbGVtZW50XG4gICAgICBhY3RpdmVFbGVtZW50ID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoJy5sYW5ndWFnZS1pdGVtLWFjdGl2ZScpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnZGVzaWduYXRpb24nKSB7XG4gICAgICBjb250YWluZXIgPSB0aGlzLmRyb3Bkb3duLm5hdGl2ZUVsZW1lbnRcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLml0ZW0tYWN0aXZlJylcbiAgICB9XG4gICAgaWYgKGFjdGl2ZUVsZW1lbnQpIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuc2Nyb2xsSW50b1ZpZXcoeyBiZWhhdmlvcjogJ3Ntb290aCcsIGJsb2NrOiAnbmVhcmVzdCcgfSk7XG4gICAgfVxuICB9XG5cbiAgQEhvc3RMaXN0ZW5lcignZG9jdW1lbnQ6Y2xpY2snLCBbJyRldmVudCddKVxuXG4gIGhhbmRsZUNsaWNrT3V0c2lkZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxFbGVtZW50XG4gICAgaWYgKFxuICAgICAgdGhpcy50ZXh0Qm94ICYmICF0aGlzLnRleHRCb3gubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudCkgJiZcbiAgICAgIHRoaXMuZHJvcGRvd24gJiYgIXRoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudClcbiAgICApIHtcbiAgICAgIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSBmYWxzZVxuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmxhbmd1YWdlVGV4dEJveCAmJiAhdGhpcy5sYW5ndWFnZVRleHRCb3gubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudCkgJiZcbiAgICAgIHRoaXMubGFuZ3VhZ2VEcm9wZG93biAmJiAhdGhpcy5sYW5ndWFnZURyb3Bkb3duLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoY2xpY2tlZEVsZW1lbnQpXG4gICAgKSB7XG4gICAgICB0aGlzLm9wZW5MYW5ndWFnZURyb3Bkb3duID0gZmFsc2VcbiAgICB9XG4gIH1cbiAgb25EZXNpZ25hdGlvbnNGb2N1cygpIHtcbiAgICAvLyB0aGlzLm9wZW5EZXNpZ25hdGlvbkRyb3Bkb3duID0gdHJ1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgnZGVzaWduYXRpb24nKVxuICAgIH0sIDEwMClcbiAgfVxuICBvbkxhbmd1YWdlRm9jdXMoKSB7XG4gICAgdGhpcy5vcGVuTGFuZ3VhZ2VEcm9wZG93biA9IHRydWVcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuc2Nyb2xsVG9BY3RpdmUoJ2xhbmd1YWdlJylcbiAgICB9LCAxMDApXG4gIH1cblxuICBmaWx0ZXJMYW5ndWFnZSh2YWx1ZTogYW55KSB7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCkge1xuICAgICAgdGhpcy5tYXN0ZXJMYW5ndWFnZXMgPSB0aGlzLm1hc3Rlckxhbmd1YWdlQmFja3VwLmZpbHRlcigodmFsOiBhbnkpID0+XG4gICAgICAgIHZhbCAmJiB2YWwubmFtZS50cmltKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAgICAgKVxuICAgICAgaWYgKHRoaXMubWFzdGVyTGFuZ3VhZ2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb25zdCB1c2VybmFtZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2RvbWljaWxlTWVkaXVtJylcbiAgICAgICAgaWYgKHVzZXJuYW1lQ29udHJvbCkge1xuICAgICAgICAgIHVzZXJuYW1lQ29udHJvbC5zZXRFcnJvcnMoeyByZXF1aXJlZDogdHJ1ZSB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm9wZW5MYW5ndWFnZURyb3Bkb3duID0gdHJ1ZVxuICB9XG5cbiAgLy8gZmlsdGVyZGVzaWduYXRpb24odmFsdWU6IGFueSkge1xuICAvLyAgIGlmICh2YWx1ZS5sZW5ndGgpIHtcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPXRydWVcbiAgLy8gICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5maWx0ZXIoKHZhbDogYW55KSA9PlxuICAvLyAgICAgICB2YWwgJiYgdmFsLm5hbWUudHJpbSgpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModmFsdWUudG9Mb3dlckNhc2UoKSlcbiAgLy8gICAgIClcbiAgLy8gICAgIGlmICh0aGlzLmZpbHRlckRlc2lnbmF0aW9uc01ldGEubGVuZ3RoID09PSAwKSB7XG4gIC8vICAgICAgIGNvbnN0IHVzZXJuYW1lQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAvLyAgICAgICBpZiAodXNlcm5hbWVDb250cm9sKSB7XG4gIC8vICAgICAgICAgdXNlcm5hbWVDb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAvLyAgICAgICB9XG4gIC8vICAgICB9XG4gIC8vICAgfSBlbHNlIHtcbiAgLy8gICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudClcbiAgLy8gICAgIHRoaXMuZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPWZhbHNlXG5cbiAgLy8gICAgIHRoaXMuZGVzaWduYXRpb25MaXN0TG9hZENvdW50ID0gdGhpcy5kZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQ7XG4gIC8vICAgfVxuICAvLyAgIC8vIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSB0cnVlXG4gIC8vIH1cblxuICAvLyBhc3luYyBnZXRNYXN0ZXJEZXNpZ25hdGlvbigpIHtcbiAgLy8gICB0aGlzLnNpZ251cFNlcnZpY2UuZ2V0T3JnUmVhZERhdGEodGhpcy51c2VyUHJvZmlsZU9iamVjdC5yb290T3JnSWQpLnN1YnNjcmliZSgocmVzdWx0OiBhbnkpID0+IHtcbiAgLy8gICAgIGlmIChyZXN1bHQgJiYgcmVzdWx0LmZyYW1ld29ya2lkKSB7XG4gIC8vICAgICAgIHRoaXMuc2lnbnVwU2VydmljZS5nZXRGcmFtZXdvcmtJbmZvKHJlc3VsdC5mcmFtZXdvcmtpZCkuc3Vic2NyaWJlKChyZXM6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIGNvbnN0IGZyYW1ld29ya0RldGFpbHMgPSBfLmdldChyZXMsICdyZXN1bHQuZnJhbWV3b3JrJylcbiAgLy8gICAgICAgICBjb25zdCBjYXRlZ29yaWVzT2ZGcmFtZXdvcmsgPSBfLmdldChmcmFtZXdvcmtEZXRhaWxzLCAnY2F0ZWdvcmllcycsIFtdKVxuICAvLyAgICAgICAgIGNvbnN0IG9yZ2FuaXNhdGlvbnNMaXN0ID0gdGhpcy5nZXRUZXJtc0J5Q29kZShjYXRlZ29yaWVzT2ZGcmFtZXdvcmssICdvcmcnKVxuICAvLyAgICAgICAgIGNvbnN0IGRpc09yZGVyZWRMaXN0ID0gXy5nZXQob3JnYW5pc2F0aW9uc0xpc3QsICdbMF0uY2hpbGRyZW4nLCBbXSlcbiAgLy8gICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBfLnNvcnRCeShkaXNPcmRlcmVkTGlzdCwgJ25hbWUnKVxuICAvLyAgICAgICAgIHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YSA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zbGljZSgwLCB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudClcbiAgLy8gICAgICAgICBpZiAodGhpcy5jYW5TaG93RGVzaWduYXRpb24pIHtcbiAgLy8gICAgICAgICAgIGxldCBmaWVsZCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAvLyAgICAgICAgICAgaWYgKGZpZWxkICYmIGZpZWxkLnZhbHVlKSB7XG4gIC8vICAgICAgICAgICAgIGxldCBfdmFsdWUgPSBmaWVsZC52YWx1ZS50b0xvd2VyQ2FzZSgpXG4gIC8vICAgICAgICAgICAgIGlmICghdGhpcy5kZXNpZ25hdGlvbnNNZXRhLmZpbmQoKGQ6IGFueSkgPT4gZC5uYW1lLnRvTG93ZXJDYXNlKCkgPT09IF92YWx1ZSkpIHtcbiAgLy8gICAgICAgICAgICAgICBmaWVsZC5wYXRjaFZhbHVlKCcnKVxuICAvLyAgICAgICAgICAgICB9XG4gIC8vICAgICAgICAgICB9XG4gIC8vICAgICAgICAgfVxuICAvLyAgICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAvLyAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAvLyAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIGVycm9yKVxuICAvLyAgICAgICB9KVxuICAvLyAgICAgfVxuICAvLyAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgLy8gICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIG9jY3VycmVkOicsIGVycm9yKVxuICAvLyAgIH0pXG4gIC8vIH1cblxuICAvLyBwcml2YXRlIGdldFRlcm1zQnlDb2RlKGNhdGVnb3JpZXM6IGFueVtdLCBjb2RlOiBzdHJpbmcpIHtcbiAgLy8gICBjb25zdCBzZWxlY3RlZENhdGVnb3J5ID0gY2F0ZWdvcmllcy5maWx0ZXIoXG4gIC8vICAgICAoY2F0ZWdvcnk6IGFueSkgPT4gY2F0ZWdvcnkuY29kZSA9PT0gY29kZVxuICAvLyAgICk7XG4gIC8vICAgcmV0dXJuIF8uZ2V0KHNlbGVjdGVkQ2F0ZWdvcnksICdbMF0udGVybXMnLCBbXSk7XG4gIC8vIH1cblxuICBwcmV2ZW50Qmx1cihldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxuICBwcmV2ZW50TGFuZ3VhZ2VCbHVyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgc2VsZWN0RGVzaWduYXRpb24oZGVzaWduYXRpb246IGFueSkge1xuICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnBhdGNoVmFsdWUoeyBkZXNpZ25hdGlvbjogZGVzaWduYXRpb24gfSlcbiAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ290aGVyRGVzaWduYXRpb24nKVxuICAgIGlmICh0aGlzLnNob3dEb3B0Q2hhbmdlcyAmJiBkZXNpZ25hdGlvbiA9PT0gJ090aGVycycpIHtcbiAgICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgfVxuICAgICAgdGhpcy5jYW5TaG93T3RoZXJEZXNpZ25hdGlvbiA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICBmaWVsZENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgfVxuICAgICAgdGhpcy5jYW5TaG93T3RoZXJEZXNpZ25hdGlvbiA9IGZhbHNlXG4gICAgfVxuICAgIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSBmYWxzZVxuICB9XG5cblxuICBzZWxlY3RMYW5ndWFnZShsYW5ndWFnZTogYW55KSB7XG4gICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7IGRvbWljaWxlTWVkaXVtOiBsYW5ndWFnZSB9KVxuICAgIHRoaXMub3Blbkxhbmd1YWdlRHJvcGRvd24gPSBmYWxzZVxuICB9XG5cbiAgaXNFbWFpbEFsbG93ZWQoZW1haWw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGRvbWFpbiA9IGVtYWlsLnNwbGl0KCdAJylbMV1cbiAgICByZXR1cm4gZG9tYWluID8gdGhpcy5hcHByb3ZlZERvbWFpbkxpc3QuaW5jbHVkZXMoZG9tYWluKSA6IGZhbHNlXG4gIH1cblxuICBoYW5kbGVHZW5lcmF0ZUVtYWlsT1RQKHZlcmlmeVR5cGU/OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZyh2ZXJpZnlUeXBlKVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmdldFdoaXRlTGlzdERvbWFpbigpLnN1YnNjcmliZSgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdCAmJiByZXNwb25zZS5yZXN1bHQuZG9tYWlucyAmJiByZXNwb25zZS5yZXN1bHQuZG9tYWlucy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMuYXBwcm92ZWREb21haW5MaXN0ID0gcmVzcG9uc2UucmVzdWx0LmRvbWFpbnNcbiAgICAgICAgaWYgKHRoaXMuYXBwcm92ZWREb21haW5MaXN0ICYmIHRoaXMuYXBwcm92ZWREb21haW5MaXN0Lmxlbmd0aCAmJiB0aGlzLmFwcHJvdmVkRG9tYWluTGlzdC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgaWYgKHRoaXMuaXNFbWFpbEFsbG93ZWQodGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWVbJ3ByaW1hcnlFbWFpbCddKSkge1xuICAgICAgICAgICAgdGhpcy5vdHBTZXJ2aWNlLnNlbmRFbWFpbE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsncHJpbWFyeUVtYWlsJ10pXG4gICAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAgICAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuZW1haWxPdHBGb3JtLnJlc2V0KClcbiAgICAgICAgICAgICAgICBpZiAodmVyaWZ5VHlwZSkge1xuICAgICAgICAgICAgICAgICAgdGhpcy5lbWFpbE90cFNlbnQgPSB0cnVlXG4gICAgICAgICAgICAgICAgICB0aGlzLnN0YXJ0RW1haWxUaW1lcigpXG4gICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnb3RwU2VudEVtYWlsJykpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ2VtYWlsT1RQU2VudEZhaWwnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnZW1haWxBcHByb3ZlZFBvcHVwTXNnJykpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGhhbmRsZUdlbmVyYXRlT1RQKHZlcmlmeVR5cGU/OiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm90cFNlcnZpY2Uuc2VuZE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsnbW9iaWxlJ10pXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdvdHBTZW50TW9iaWxlJykpXG4gICAgICAgIHRoaXMub3RwRm9ybS5yZXNldCgpXG4gICAgICAgIGlmICh2ZXJpZnlUeXBlKSB7XG4gICAgICAgICAgdGhpcy5vdHBTZW50ID0gdHJ1ZVxuICAgICAgICAgIHRoaXMuc3RhcnRUaW1lcigpXG4gICAgICAgICAgLy90aGlzLmhhbmRsZVZlcmlmeU9UUCh2ZXJpZnlUeXBlLCB0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsnbW9iaWxlJ10pXG4gICAgICAgIH1cbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdtb2JpbGVPVFBTZW50RmFpbCcpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlUmVzZW5kT1RQKCk6IHZvaWQge1xuICAgIHRoaXMudGltZUxlZnQgPSAxNTBcbiAgICB0aGlzLnNob3dSZXNlbmRPVFAgPSB0cnVlXG4gICAgdGhpcy5zdGFydFRpbWVyKClcbiAgICBsZXQgb3RwVmFsdWUkOiBhbnlcbiAgICBvdHBWYWx1ZSQgPSB0aGlzLm90cFNlcnZpY2UucmVzZW5kT3RwKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSlcblxuICAgIG90cFZhbHVlJC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ290cFNlbnRNb2JpbGUnKSlcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXy5nZXQoZXJyb3IsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgJ1VuYWJsZSB0byByZXNlbmQgT1RQLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVSZXNlbmRFbWFpbE9UUCgpOiB2b2lkIHtcbiAgICB0aGlzLmVtYWlsVGltZUxlZnQgPSAxNTBcbiAgICB0aGlzLnNob3dFbWFpbFJlc2VuZE9UUCA9IHRydWVcbiAgICB0aGlzLnN0YXJ0RW1haWxUaW1lcigpXG4gICAgbGV0IG90cFZhbHVlJDogYW55XG4gICAgb3RwVmFsdWUkID0gdGhpcy5vdHBTZXJ2aWNlLnNlbmRFbWFpbE90cCh0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncHJpbWFyeUVtYWlsJ10udmFsdWUpXG4gICAgb3RwVmFsdWUkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnb3RwU2VudEVtYWlsJykpXG4gICAgICB9LCAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKF8uZ2V0KGVycm9yLCAnZXJyb3IucGFyYW1zLmVycm1zZycpIHx8ICdVbmFibGUgdG8gcmVzZW5kIE9UUCwgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlciEnKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgdmVyaWZ5RW1haWxPVFAoKTogdm9pZCB7XG4gICAgdGhpcy5vdHBTZXJ2aWNlLnZlcmlmeUVtYWlsT1RQKHRoaXMuZW1haWxPdHBGb3JtLmNvbnRyb2xzWydlT3RwJ10udmFsdWUsIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydwcmltYXJ5RW1haWwnXS52YWx1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ09UUFNlbnRTdWNjZXNzJykpXG4gICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSB0cnVlXG4gICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmVtYWlsT3RwU2VudCA9IGZhbHNlXG4gICAgICAgIHRoaXMuY29udGV4dFRva2VuID0gX3Jlcy5yZXN1bHQuY29udGV4dFRva2VuXG4gICAgICAgIHRoaXMuZW1haWxPdHBGb3JtLnJlc2V0KClcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCB0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBWZXJpZnlGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHZlcmlmeU1vYmlsZU9UUCgpOiB2b2lkIHtcbiAgICB0aGlzLm90cFNlcnZpY2UudmVyaWZ5T1RQKHRoaXMub3RwRm9ybS5jb250cm9sc1snb3RwJ10udmFsdWUsIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ09UUFNlbnRTdWNjZXNzJykpXG4gICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gdHJ1ZVxuICAgICAgICB0aGlzLm1WZXJpZmllZCA9IHRydWVcbiAgICAgICAgdGhpcy5vdHBTZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5vdHBGb3JtLnJlc2V0KClcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCB0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBWZXJpZnlGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHN0YXJ0VGltZXIoKSB7XG4gICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRpbWVMZWZ0ID4gMCkge1xuICAgICAgICB0aGlzLnRpbWVMZWZ0ID0gdGhpcy50aW1lTGVmdCAtIDFcbiAgICAgICAgaWYgKHRoaXMudGltZXJEaXYpIHtcbiAgICAgICAgICB0aGlzLnRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLnRpbWVMZWZ0IC8gNjApfW06ICR7dGhpcy50aW1lTGVmdCAlIDYwfXNgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93UmVzZW5kT1RQID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sIDEwMDApXG4gIH1cblxuICBzdGFydEVtYWlsVGltZXIoKSB7XG4gICAgdGhpcy5lbWFpbEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZW1haWxUaW1lTGVmdCA+IDApIHtcbiAgICAgICAgdGhpcy5lbWFpbFRpbWVMZWZ0ID0gdGhpcy5lbWFpbFRpbWVMZWZ0IC0gMVxuICAgICAgICBpZiAodGhpcy5lbWFpbFRpbWVyRGl2KSB7XG4gICAgICAgICAgdGhpcy5lbWFpbFRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLmVtYWlsVGltZUxlZnQgLyA2MCl9bTogJHt0aGlzLmVtYWlsVGltZUxlZnQgJSA2MH1zYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuZW1haWxJbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93RW1haWxSZXNlbmRPVFAgPSB0cnVlXG4gICAgICB9XG4gICAgfSwgMTAwMClcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0FmdGVyU3VibWl0KF9lOiBhbnkpIHtcbiAgICAvLyB0aGlzLnJlbmRlclN1YmplY3QubmV4dCgpXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnRm9ybSBpcyBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5JylcbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmXG4gICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZVwiKSB7XG4gICAgICB0aGlzLnN1Ym1pdFN1cmV2eSh0cnVlKVxuICAgIH1cbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmICF0aGlzLnVwZGF0ZVByb2ZpbGUgJiZcbiAgICAgICh0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiRnVsbCBpR09UIHByb2ZpbGVcIiB8fFxuICAgICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQ3VzdG9tIGlHT1QgcHJvZmlsZVwiKSkge1xuICAgICAgdGhpcy5zdWJtaXRTdXJldnkodHJ1ZSlcbiAgICB9XG4gICAgdGhpcy5vcGVuU25hY2tiYXIoJ0Zvcm0gaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIGNsb3NlUG9wdXAoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICB9KVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtSWQgPSBfLmdldCh0aGlzLmRhdGEsICdiYXRjaERhdGEuYmF0Y2hBdHRyaWJ1dGVzLnByb2ZpbGVTdXJ2ZXlJZCcpXG4gICAgdGhpcy5nZXRGb3JtRGV0YWlscygpXG4gICAgdGhpcy5zZXRWYWx1ZUNoYW5nZUZ1bmN0aW9ucygpXG4gICAgdGhpcy5mZXRjaENhZHJlRGF0YSgpXG4gICAgdGhpcy5nZXRHcm91cERhdGEoKVxuICAgIHRoaXMuZ2V0UGVuZGluZ0RldGFpbHMoKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gdGhpcy5sb2FkRGVzaWduYXRpb25zKClcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucygpO1xuICAgICAgLy90aGlzLmdldE1hc3RlckRlc2lnbmF0aW9uKClcbiAgICAgIHRoaXMuZ2V0TWFzdGVyTGFuZ3VhZ2UoKVxuICAgIH0sIDUwMClcbiAgfVxuXG4gIGdldEZvcm1EZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLmZvcm1JZCkge1xuICAgICAgdGhpcy5wcm9maWxlVjJTdmMuZ2V0Rm9ybVYyQnlJRCh0aGlzLmZvcm1JZCkuc3Vic2NyaWJlKChyZXNwb25jZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25jZSkge1xuICAgICAgICAgIHRoaXMuZm9ybXNEZXRpbHMgPSBfLmdldChyZXNwb25jZSwgJ3Jlc3VsdC5yZXNwb25zZScsIHt9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHNldFZhbHVlQ2hhbmdlRnVuY3Rpb25zKCkge1xuICAgIGNvbnN0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKVxuICAgIGlmIChzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgIGxldCBzZXR0aW5nVmFsdWVDaGFuZ2UgPSB0cnVlXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgKS5zdWJzY3JpYmUoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPSAwXG4gICAgICAgICAgaWYgKHNlYXJjaFRleHQgJiYgc2VhcmNoVGV4dC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSBzZWFyY2hUZXh0XG4gICAgICAgICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXNlYXJjaFRleHQpIHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHNlYXJjaFRleHRcbiAgICAgICAgICAgIGlmKCFzZXR0aW5nVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCkgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRpbmdWYWx1ZUNoYW5nZSA9IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZmV0Y2hDYWRyZURhdGEoKSB7XG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLnByb2ZpbGVWMlN2Yy5mZXRjaENhZHJlKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgY29uc3QgdmFsdWUgPSByZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQgJiYgcmVzcG9uc2UucmVzdWx0LnJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdC5yZXNwb25zZS52YWx1ZVxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmNpdmlsU2VydmljZVR5cGUpIHtcbiAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VEYXRhID0gdmFsdWUuY2l2aWxTZXJ2aWNlVHlwZVxuICAgICAgICB0aGlzLmNpdmlsU2VydmljZVR5cGVzID0gdGhpcy5jaXZpbFNlcnZpY2VEYXRhLmNpdmlsU2VydmljZVR5cGVMaXN0Lm1hcCgoc2VydmljZTogYW55KSA9PiBzZXJ2aWNlLm5hbWUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldElzQ2FkcmVTdGF0dXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzQ2FkcmVTdGF0dXMgPSB2YWx1ZVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHR5cGVPZkNpdmlsU2VydmljZTogJycsXG4gICAgICAgIHNlcnZpY2VUeXBlOiAnJyxcbiAgICAgICAgY2FkcmVOYW1lOiAnJyxcbiAgICAgICAgY2FkcmVCYXRjaDogJycsXG4gICAgICAgIGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHk6ICcnLFxuICAgICAgfSlcbiAgICAgIHRoaXMuYWRkVmFsaWRhdG9ycygpXG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNob3dCYXRjaEZvck5vQ2FkcmUgPSBmYWxzZVxuICAgICAgdGhpcy5yZW1vdmVWYWxpZGF0b3JzKClcbiAgICB9XG4gIH1cblxuICBnZXRBbGxFcnJvcnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gW107XG4gICAgT2JqZWN0LmtleXModGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbEVycm9ycyA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzW2tleV0uZXJyb3JzO1xuICAgICAgaWYgKGNvbnRyb2xFcnJvcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoY29udHJvbEVycm9ycykuZm9yRWFjaCgoZXJyb3JLZXkpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGVycm9yS2V5KSB7XG4gICAgICAgICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMucHVzaChgJHtrZXl9IGlzIHJlcXVpcmVkLmApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbmxlbmd0aCc6XG4gICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkTGVuZ3RoID0gY29udHJvbEVycm9yc1snbWlubGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGg7XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMucHVzaChgJHtrZXl9IG11c3QgYmUgYXQgbGVhc3QgJHtyZXF1aXJlZExlbmd0aH0gY2hhcmFjdGVycyBsb25nLmApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGBQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLmApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIEFkZCBtb3JlIGNhc2VzIGZvciBvdGhlciB2YWxpZGF0b3JzIGFzIG5lZWRlZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9yTWVzc2FnZXM7XG4gIH1cblxuICBhZGRWYWxpZGF0b3JzKCkge1xuICAgIGNvbnN0IGZpZWxkQ29udHJvbDAgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKVxuICAgIGlmIChmaWVsZENvbnRyb2wwKSB7XG4gICAgICBmaWVsZENvbnRyb2wwLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgIGZpZWxkQ29udHJvbDAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJylcbiAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICBmaWVsZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wxID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpXG4gICAgaWYgKGZpZWxkQ29udHJvbDEpIHtcbiAgICAgIGZpZWxkQ29udHJvbDEuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sMS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gICAgY29uc3QgZmllbGRDb250cm9sMyA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVCYXRjaCcpXG4gICAgaWYgKGZpZWxkQ29udHJvbDMpIHtcbiAgICAgIGZpZWxkQ29udHJvbDMuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sMy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gIH1cblxuICByZW1vdmVWYWxpZGF0b3JzKCkge1xuICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJylcbiAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICBmaWVsZENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgIGZpZWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gICAgY29uc3QgZmllbGRDb250cm9sMSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKVxuICAgIGlmIChmaWVsZENvbnRyb2wxKSB7XG4gICAgICBmaWVsZENvbnRyb2wxLmNsZWFyVmFsaWRhdG9ycygpXG4gICAgICBmaWVsZENvbnRyb2wxLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZU5hbWUnKVxuICAgIGlmIChmaWVsZENvbnRyb2wyKSB7XG4gICAgICBmaWVsZENvbnRyb2wyLmNsZWFyVmFsaWRhdG9ycygpXG4gICAgICBmaWVsZENvbnRyb2wyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBpZiAoZmllbGRDb250cm9sMykge1xuICAgICAgZmllbGRDb250cm9sMy5jbGVhclZhbGlkYXRvcnMoKVxuICAgICAgZmllbGRDb250cm9sMy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gIH1cblxuICBnZXRTZXJ2aWNlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZXJ2aWNlVHlwZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJylcbiAgICBjb25zdCBjYWRyZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlTmFtZScpXG4gICAgY29uc3QgYmF0Y2hDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBjb25zdCBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eScpXG5cbiAgICBpZiAoc2VydmljZVR5cGVDb250cm9sKSB7IHNlcnZpY2VUeXBlQ29udHJvbC5yZXNldCgpIH1cbiAgICBpZiAoY2FkcmVDb250cm9sKSB7IGNhZHJlQ29udHJvbC5yZXNldCgpIH1cbiAgICBpZiAoYmF0Y2hDb250cm9sKSB7IGJhdGNoQ29udHJvbC5yZXNldCgpIH1cbiAgICBpZiAoY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wpIHsgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wucmVzZXQoKSB9XG5cbiAgICB0aGlzLnNlcnZpY2VUeXBlID0gdGhpcy5jaXZpbFNlcnZpY2VEYXRhLmNpdmlsU2VydmljZVR5cGVMaXN0LmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBldmVudClcbiAgICB0aGlzLnNlcnZpY2VUeXBlID0gdGhpcy5jaXZpbFNlcnZpY2VEYXRhLmNpdmlsU2VydmljZVR5cGVMaXN0LmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBldmVudClcbiAgICBpZiAodGhpcy5zZXJ2aWNlVHlwZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlTGlzdERhdGEgPSB0aGlzLnNlcnZpY2VUeXBlLnNlcnZpY2VMaXN0XG4gICAgICB0aGlzLnNlcnZpY2VOYW1lID0gdGhpcy5zZXJ2aWNlTGlzdERhdGEubWFwKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2UubmFtZSlcbiAgICAgIHRoaXMuc2VydmljZUlkID0gdGhpcy5zZXJ2aWNlVHlwZS5pZFxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdTZXJ2aWNlIFR5cGUgbm90IGZvdW5kJ1xuICAgIH1cbiAgfVxuXG4gIG9uU2VydmljZVNlbGVjdChldmVudDogYW55KSB7XG4gICAgY29uc3QgY2FkcmVDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZU5hbWUnKVxuICAgIGNvbnN0IGJhdGNoQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVCYXRjaCcpXG4gICAgY29uc3QgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQ29udHJvbGxpbmdBdXRob3JpdHknKVxuICAgIGlmIChjYWRyZUNvbnRyb2wpIHsgY2FkcmVDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChiYXRjaENvbnRyb2wpIHsgYmF0Y2hDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCkgeyBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbC5yZXNldCgpIH1cbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWUgPSBldmVudC52YWx1ZVxuICAgIGlmICh0aGlzLnNlcnZpY2VMaXN0RGF0YSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2UgPSB0aGlzLnNlcnZpY2VMaXN0RGF0YS5maW5kKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2UubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lKVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuY2l2aWxTZXJ2aWNlTmFtZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLm5hbWVcbiAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VJZCA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmlkXG4gICAgICAgIHRoaXMuY2FkcmUgPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUxpc3QgPyB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUxpc3QubWFwKChjYWRyZTogYW55KSA9PiBjYWRyZS5uYW1lKSA6IFtdXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZSAmJiB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5KSB7XG4gICAgICB0aGlzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHkgPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eSA9ICdOQSdcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlICYmIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2hvd0JhdGNoRm9yTm9DYWRyZSA9IHRydWVcbiAgICAgIHRoaXMuc3RhcnRCYXRjaCA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNvbW1vbkJhdGNoU3RhcnRZZWFyXG4gICAgICB0aGlzLmVuZEJhdGNoID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UuY29tbW9uQmF0Y2hFbmRZZWFyXG4gICAgICB0aGlzLmV4Y2x1c2lvblllYXIgPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jb21tb25CYXRjaEV4Y2x1c2lvblllYXJMaXN0XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICAgICAgdGhpcy55ZWFyQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLmVuZEJhdGNoIC0gdGhpcy5zdGFydEJhdGNoICsgMSB9LCAoXywgaW5kZXgpID0+IHRoaXMuc3RhcnRCYXRjaCArIGluZGV4KVxuICAgICAgICAuZmlsdGVyKHllYXIgPT4gIXRoaXMuZXhjbHVzaW9uWWVhci5pbmNsdWRlcyh5ZWFyKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QmF0Y2hGb3JOb0NhZHJlID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvbkNhZHJlU2VsZWN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBiYXRjaENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKVxuICAgIGNvbnN0IGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5JylcblxuICAgIGlmIChiYXRjaENvbnRyb2wpIHsgYmF0Y2hDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCkgeyBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbC5yZXNldCgpIH1cbiAgICB0aGlzLnNlbGVjdGVkQ2FkcmVOYW1lID0gZXZlbnRcbiAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYWRyZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdC5maW5kKChjYWRyZTogYW55KSA9PiBjYWRyZS5uYW1lID09PSB0aGlzLnNlbGVjdGVkQ2FkcmVOYW1lKVxuICAgICAgdGhpcy5zdGFydEJhdGNoID0gdGhpcy5zZWxlY3RlZENhZHJlID8gdGhpcy5zZWxlY3RlZENhZHJlLnN0YXJ0QmF0Y2hZZWFyIDogJydcbiAgICAgIHRoaXMuZW5kQmF0Y2ggPSB0aGlzLnNlbGVjdGVkQ2FkcmUgPyB0aGlzLnNlbGVjdGVkQ2FkcmUuZW5kQmF0Y2hZZWFyIDogJydcbiAgICAgIHRoaXMuZXhjbHVzaW9uWWVhciA9IHRoaXMuc2VsZWN0ZWRDYWRyZSA/IHRoaXMuc2VsZWN0ZWRDYWRyZS5leGN1bHNpb25ZZWFyTGlzdCA6ICcnXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICAgICAgdGhpcy55ZWFyQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLmVuZEJhdGNoIC0gdGhpcy5zdGFydEJhdGNoICsgMSB9LCAoXywgaW5kZXgpID0+IHRoaXMuc3RhcnRCYXRjaCArIGluZGV4KVxuICAgICAgICAuZmlsdGVyKHllYXIgPT4gIXRoaXMuZXhjbHVzaW9uWWVhci5pbmNsdWRlcyh5ZWFyKSlcbiAgICAgIHRoaXMuY2FkcmVJZCA9IHRoaXMuc2VsZWN0ZWRDYWRyZSA/IHRoaXMuc2VsZWN0ZWRDYWRyZS5pZCA6ICcnXG4gICAgfVxuXG4gIH1cblxuICBnZXRQZW5kaW5nRGV0YWlscygpIHtcbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMucHJvZmlsZVYyU3ZjLmZldGNoQXBwcm92YWxEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICBpZiAocmVzcCAmJiByZXNwLnJlc3VsdCAmJiByZXNwLnJlc3VsdC5kYXRhKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0ZpbGVkcyA9IHJlc3AucmVzdWx0LmRhdGFcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0ZpbGVkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nRmlsZWRzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXJbJ2dyb3VwJ10pIHtcbiAgICAgICAgICAgICAgbGV0IGN0cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2dyb3VwJylcbiAgICAgICAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICAgICAgICBjdHJsLnBhdGNoVmFsdWUoeyBncm91cDogdXNlclsnZ3JvdXAnXSB9KVxuICAgICAgICAgICAgICAgIHRoaXMucEdyb3VwID0gdXNlclsnZ3JvdXAnXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlclsnZGVzaWduYXRpb24nXSkge1xuICAgICAgICAgICAgICBsZXQgY3RybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAgICAgICAgICAgICBpZiAoY3RybCkge1xuICAgICAgICAgICAgICAgIGN0cmwucGF0Y2hWYWx1ZSh7IGRlc2lnbmF0aW9uOiB1c2VyWydkZXNpZ25hdGlvbiddIH0pXG4gICAgICAgICAgICAgICAgdGhpcy5wRGVzaWduYXRpb24gPSB1c2VyWydkZXNpZ25hdGlvbiddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICB0aGlzLmRlZmluZUZvcm1BdHRyaWJ1dGVzKClcbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgIH0pXG4gIH1cblxuICBkZWZpbmVGb3JtQXR0cmlidXRlcygpIHtcbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmXG4gICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMuYnBFbnJvbE1hbmRhdG9yeVByb2ZpbGVGaWVsZHMpIHtcbiAgICAgIGxldCBjdXN0b21BdHRyID0gdGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLmJwRW5yb2xNYW5kYXRvcnlQcm9maWxlRmllbGRzXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnbmFtZScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd05hbWUgPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd25hbWUgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnbmFtZScpXG4gICAgICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC5kaXNhYmxlKClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJyAmJlxuICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jYW5TaG93TmFtZSA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zaG93bmFtZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2VtYWlsJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RW1haWwgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwpXG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCkge1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbClcbiAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5zaG93RW1haWwgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dFbWFpbCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnb3JnYW5pc2F0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93T3JnID0gdHJ1ZVxuICAgICAgICB0aGlzLnNob3dPcmcgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnb3JnYW5pc2F0aW9uJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC5kaXNhYmxlKClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJyAmJlxuICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY2FuU2hvd09yZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zaG93T3JnID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnZ3JvdXAnKSkge1xuICAgICAgICB0aGlzLmNhblNob3dHcm91cCA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93R3JvdXAgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZ3JvdXAnKVxuICAgICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgICAgaWYgKHRoaXMucEdyb3VwKSB7XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy5wR3JvdXApXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgLy8gICB0aGlzLmNhblNob3dHcm91cCA9IHRydWVcbiAgICAgICAgICAgIC8vICAgdGhpcy5zaG93R3JvdXAgPSB0cnVlXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMgJiZcbiAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmdyb3VwKVxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0dyb3VwID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNob3dHcm91cCA9IGZhbHNlXG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2Rlc2lnbmF0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RGVzaWduYXRpb24gPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd0Rlc2lnbmF0aW9uID0gdHJ1ZVxuICAgICAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGlmICh0aGlzLnBEZXNpZ25hdGlvbikge1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnBhdGNoVmFsdWUodGhpcy5wRGVzaWduYXRpb24pXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgLy8gICB0aGlzLmNhblNob3dEZXNpZ25hdGlvbiA9IHRydWVcbiAgICAgICAgICAgIC8vICAgdGhpcy5zaG93RGVzaWduYXRpb24gPSB0cnVlXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMgJiZcbiAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24pIHtcbiAgICAgICAgICAgICAgZmllbGRDb250cm9sLnBhdGNoVmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uKVxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0Rlc2lnbmF0aW9uID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNob3dEZXNpZ25hdGlvbiA9IGZhbHNlXG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2VtcGxveWVlQ29kZScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0VtcGxveWVlQ29kZSA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdlbXBsb3llZUNvZGUnKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZW1wbG95ZWVDb2RlKSB7XG4gICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKEVNUF9JRF9QQVRURVJOKV0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dFbXBsb3llZUNvZGUgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dFbXBsb3llZUNvZGUgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKEVNUF9JRF9QQVRURVJOKV0pO1xuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnbW9iaWxlJykpIHtcbiAgICAgICAgdGhpcy5jYW5zaG93TW9iaWxlID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpXG4gICAgICAgIGlmIChjb250cmwpIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMubW9iaWxlICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnBob25lVmVyaWZpZWQpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUpXG4gICAgICAgICAgICB0aGlzLm1WZXJpZmllZCA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5wYXR0ZXJuKE1PQklMRV9QQVRURVJOKV0pO1xuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5zaG93TW9iaWxlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMubVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dNb2JpbGUgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5taW5MZW5ndGgoMTApLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMCksIFZhbGlkYXRvcnMucGF0dGVybihNT0JJTEVfUEFUVEVSTildKTtcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2Fuc2hvd01vYmlsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tVmVyaWZpZWQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdnZW5kZXInKSkge1xuICAgICAgICB0aGlzLmNhblNob3dHZW5kZXIgPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZ2VuZGVyJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXIpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXIpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dHZW5kZXIgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dHZW5kZXIgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdkb2InKSkge1xuICAgICAgICB0aGlzLmNhblNob3dEb2IgPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZG9iJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb2IpIHtcbiAgICAgICAgICAgIGxldCBfZG9iOiBhbnkgPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb2JcbiAgICAgICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IF9kb2Iuc3BsaXQoJy0nKVxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKE51bWJlcih5ZWFyKSwgTnVtYmVyKG1vbnRoKSAtIDEsIE51bWJlcihkYXkpKVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRNb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGAke2Zvcm1hdHRlZFllYXJ9LSR7Zm9ybWF0dGVkTW9udGh9LSR7Zm9ybWF0dGVkRGF5fWApXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodGhpcy5zZWxlY3RlZERhdGUpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dEb2IgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEb2IgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdkb21pY2lsZU1lZGl1bScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0RvbWljaWxlTWVkaXVtID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2RvbWljaWxlTWVkaXVtJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bSkge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtKVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93RG9taWNpbGVNZWRpdW0gPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEZWNpbWFsTWVkaXVtID0gdHJ1ZVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnY2F0ZWdvcnknKSkge1xuICAgICAgICB0aGlzLmNhblNob3dDYXRlZ29yeSA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYXRlZ29yeScpXG4gICAgICAgIGlmIChjb250cmwpIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeSlcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZmlsZUZvcm1UeXBlID09PSAnQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2hvd0NhdGVnb3J5ID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93Q2F0ZWdvcnkgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdwaW5Db2RlJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93cGluQ29kZSA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdwaW5Db2RlJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNiksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDYpLCBWYWxpZGF0b3JzLnBhdHRlcm4oUElOX0NPREVfUEFUVEVSTildKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93cGluQ29kZSA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BpbkNvZGUgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNiksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDYpLCBWYWxpZGF0b3JzLnBhdHRlcm4oUElOX0NPREVfUEFUVEVSTildKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnY2FkcmVEZXRhaWxzJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdpc0NhZHJlJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscykuaW5jbHVkZXMoJ2lzQ2FkcmUnKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmlzQ2FkcmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRydWUpXG4gICAgICAgICAgICAgIHRoaXMuaXNDYWRyZVN0YXR1cyA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlSWQgPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlSWRcbiAgICAgICAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VJZCA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZUlkXG4gICAgICAgICAgICAgIHRoaXMuY2FkcmVJZCA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlSWRcbiAgICAgICAgICAgICAgdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5ID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eU5hbWVcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZXJ2aWNlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUpXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlcnZpY2VTZWxlY3QoeyB2YWx1ZTogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSB9KVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25DYWRyZVNlbGVjdCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgdHlwZU9mQ2l2aWxTZXJ2aWNlOiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlLFxuICAgICAgICAgICAgICAgICAgc2VydmljZVR5cGU6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgICBjYWRyZU5hbWU6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhZHJlQmF0Y2g6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gsXG4gICAgICAgICAgICAgICAgICBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5OiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9LCAxMDAwKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLmlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmluZEF0dHIoY3VzdG9tQXR0cjogYW55LCBmTmFtZTogYW55KSB7XG4gICAgaWYgKGZOYW1lID09PSAnbmFtZScpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZW1haWwnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCcpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ29yZ2FuaXNhdGlvbicpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5kZXBhcnRtZW50TmFtZScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2dyb3VwJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMuZ3JvdXAnKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdkZXNpZ25hdGlvbicpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzLmRlc2lnbmF0aW9uJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZW1wbG95ZWVDb2RlJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ21vYmlsZScpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMubW9iaWxlJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZ2VuZGVyJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXInKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdkb2InKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYicpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2RvbWljaWxlTWVkaXVtJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2NhdGVnb3J5Jykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ3BpbkNvZGUnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2NhZHJlRGV0YWlscycpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZScpXG4gICAgfVxuXG4gIH1cblxuICBmaW5kSW5Qcm9maWxlKGF0dHI6IHN0cmluZykge1xuICAgIGlmIChhdHRyID09PSAnbmFtZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdE5hbWUgfHwgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lXG4gICAgfVxuICAgIGlmIChhdHRyID09PSAnZ3JvdXAnKSB7XG4gICAgICByZXR1cm4gKCF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2ZpbGVHcm91cFN0YXR1cykgfHxcbiAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9maWxlR3JvdXBTdGF0dXMgPT09ICdOT1QtVkVSSUZJRUQnIHx8ICh0aGlzLnBHcm91cCA/IHRydWUgOiBmYWxzZSlcbiAgICB9XG4gICAgaWYgKGF0dHIgPT09ICdkZXNpZ25hdGlvbicpIHtcbiAgICAgIHJldHVybiAoIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmlsZURlc2lnbmF0aW9uU3RhdHVzKSB8fFxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2ZpbGVEZXNpZ25hdGlvblN0YXR1cyA9PT0gJ05PVC1WRVJJRklFRCcgfHwgKHRoaXMucERlc2lnbmF0aW9uID8gdHJ1ZSA6IGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGdldEdyb3VwRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmdldEdyb3VwcygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgdGhpcy5ncm91cERhdGEgPSByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQucmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlICE9PSAnT3RoZXJzJylcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdncm91cERhdGFGYWlsZScpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlVHJhbnNsYXRlVG8obWVudU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmhhbmRsZVRyYW5zbGF0ZVRvKG1lbnVOYW1lKVxuICB9XG5cbiAgY2hlY2tTZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucygpOiB2b2lkIHtcbiAgICBpZih0aGlzLm9yZ2FuaXNhdGlvbklkKSB7XG4gICAgICBjb25zdCBpZ290RGVzaWduYXRpb25Cb2R5OiBhbnkgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBzdGF0dXM6ICdMaXZlJyxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnZGVzaWduYXRpb24nLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1xuICAgICAgICAgICAgICB0aGlzLm9yZ2FuaXNhdGlvbklkICsgJ19vZGNzX2Rlc2lnbmF0aW9uJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBvYmplY3RUeXBlOiAnVGVybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWVsZHM6IFsnbmFtZSddLFxuICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICBsaW1pdDogMSxcbiAgICAgICAgICBzb3J0X2J5OiB7XG4gICAgICAgICAgICBsYXN0VXBkYXRlZE9uOiAnZGVzYycsXG4gICAgICAgICAgICBvYmplY3RUeXBlOiAnVGVybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWNldHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnNlYXJjaElnb3REZXNpZ25hdGlvbihpZ290RGVzaWduYXRpb25Cb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5jb3VudCcsIDApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcmdIYXNEZXNpZ25hdGlvbnMgPSBjb3VudCA+IDA7XG4gICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZ2V0ZGVzaWduYXRpb25zTWV0YSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0ZGVzaWduYXRpb25zTWV0YSgpIHtcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zKSB7XG4gICAgICB0aGlzLmdldElnb3REZXNpZ25hdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXREZWZhdWx0RGVzaWduYXRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJZ290RGVzaWduYXRpb25zKCkge1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBzdGF0dXM6IFwiTGl2ZVwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImRlc2lnbmF0aW9uXCIsXG4gICAgICAgICAgY2F0ZWdvcmllczogW1xuICAgICAgICAgICAgdGhpcy5vcmdhbmlzYXRpb25JZCArICdfb2Rjc19kZXNpZ25hdGlvbicsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBvYmplY3RUeXBlOiBcIlRlcm1cIlxuICAgICAgICB9LFxuICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICBcIm5hbWVcIlxuICAgICAgICBdLFxuICAgICAgICBvZmZzZXQ6IHRoaXMuZGVzaWduYXRpb25zT2Zmc2V0LFxuICAgICAgICBsaW1pdDogdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQsXG4gICAgICAgIHNvcnRfYnk6IHtcbiAgICAgICAgICBsYXN0VXBkYXRlZE9uOiBcImRlc2NcIixcbiAgICAgICAgICBvYmplY3RUeXBlOiBcIlRlcm1cIlxuICAgICAgICB9LFxuICAgICAgICBmYWNldHM6IFtdXG4gICAgICB9XG4gICAgfTtcbiAgICBpZih0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCl7XG4gICAgICByZXF1ZXN0Qm9keVsncmVxdWVzdCddWydxdWVyeSddID0gdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQ7XG4gICAgfVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnNlYXJjaElnb3REZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgaWYodGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBfLmdldChyZXMsICdyZXN1bHQuVGVybScsIFtdKSBhcyBkZXNpZ25hdGlvbltdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IFsuLi50aGlzLmRlc2lnbmF0aW9uc01ldGEsIC4uLl8uZ2V0KHJlcywgJ3Jlc3VsdC5UZXJtJywgW10pIGFzIGRlc2lnbmF0aW9uW11dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25zVG90YWxDb3VudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5jb3VudCcsIDApO1xuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSByZWZyZXNoIG9yIHRyeSBhZ2FpbiBsYXRlci4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgICBwcml2YXRlIGdldERlZmF1bHREZXNpZ25hdGlvbnMoKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBmaWx0ZXJDcml0ZXJpYU1hcDoge1xuICAgICAgICAgIHN0YXR1czogJ0FjdGl2ZSdcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdGVkRmllbGRzOiBbXSxcbiAgICAgICAgcGFnZU51bWJlcjogdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0KSB7XG4gICAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0XG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5zZWFyY2hEZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQuZGF0YScsIFtdKSBhcyBkZXNpZ25hdGlvbltdO1xuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnQubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBpdGVtLmRlc2lnbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyB8fCAnQWN0aXZlJyxcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKHRoaXMuZGVzaWduYXRpb25zT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBtYXBwZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IFsuLi50aGlzLmRlc2lnbmF0aW9uc01ldGEsIC4uLm1hcHBlZF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zVG90YWxDb3VudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQudG90YWxDb3VudCcsIDApO1xuICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoJ1NvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgcmVmcmVzaCBvciB0cnkgYWdhaW4gbGF0ZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICBnZXRNYXN0ZXJMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5nZXRNYXN0ZXJMYW5ndWFnZXMoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubWFzdGVyTGFuZ3VhZ2VzID0gcmVzLmxhbmd1YWdlc1xuICAgICAgICB0aGlzLm1hc3Rlckxhbmd1YWdlQmFja3VwID0gcmVzLmxhbmd1YWdlc1xuICAgICAgfSwgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ3VuYWJsZUZldGNoTWFzdGVyTGFuZ3VhZ2VEYXRhJykpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVFbXB0eSh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZSA9PT0gJ21vYmlsZScpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgJiYgIXRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSkge1xuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snbW9iaWxlJ10uc2V0RXJyb3JzKHsgdmFsaWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAncHJpbWFyeUVtYWlsJykge1xuICAgICAgaWYgKCF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwgJiYgIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMudmFsdWVbJ3ByaW1hcnlFbWFpbCddKSB7XG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnNldEVycm9ycyh7IHZhbGlkOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvblN1Ym1pdEZvcm0oZm9ybTogYW55KSB7XG4gICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICBjb25zb2xlLmxvZyhmb3JtKVxuICAgIGxldCBwYXlsb2FkID0gdGhpcy5nZW5lcmF0ZVByb2ZpbGVQYXlsb2FkKClcbiAgICBpZiAoKHRoaXMuY2FuU2hvd0Rlc2lnbmF0aW9uIHx8IHRoaXMuY2FuU2hvd0dyb3VwKSAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIGlmICh0aGlzLnBlbmRpbmdGaWxlZHMpIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nRmlsZWRzLmZvckVhY2goKF9vYmo6IGFueSkgPT4ge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhfb2JqKS5pbmNsdWRlcygnZGVzaWduYXRpb24nKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZVYyU3ZjLndpdGhEcmF3QXBwcm92YWxSZXF1ZXN0KHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlci5pZCwgX29iai53ZklkKS5zdWJzY3JpYmUoKHJlc3A6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzcCAmJiByZXNwLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgICAgICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwLnJlc3VsdC5tZXNzYWdlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyhfb2JqKS5pbmNsdWRlcygnZ3JvdXAnKSkge1xuICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICAgICAgICAgIHRoaXMucHJvZmlsZVYyU3ZjLndpdGhEcmF3QXBwcm92YWxSZXF1ZXN0KHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlci5pZCwgX29iai53ZklkKS5zdWJzY3JpYmUoKHJlc3A6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBpZiAocmVzcCAmJiByZXNwLnJlc3VsdCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgICAgICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhyZXNwLnJlc3VsdC5tZXNzYWdlKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsICE9PSB0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZS5wcmltYXJ5RW1haWwgJiYgdGhpcy5jYW5TaG93RW1haWwpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUVtYWlsKHRoaXMudXNlckRldGFpbHNGb3JtLnZhbHVlLnByaW1hcnlFbWFpbClcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnN1Ym1pdFByb2ZpbGUocGF5bG9hZClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCAhPT0gdGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWUucHJpbWFyeUVtYWlsICYmIHRoaXMuY2FuU2hvd0VtYWlsKSB7XG4gICAgICAgIHRoaXMudXBkYXRlRW1haWwodGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWUucHJpbWFyeUVtYWlsKVxuICAgICAgfVxuICAgICAgdGhpcy5zdWJtaXRQcm9maWxlKHBheWxvYWQpXG4gICAgfVxuICB9XG5cbiAgc3VibWl0UHJvZmlsZShwYXlsb2FkOiBhbnkpIHtcbiAgICBpZiAocGF5bG9hZCAmJiBwYXlsb2FkWydyZXF1ZXN0J10gJiYgcGF5bG9hZFsncmVxdWVzdCddWydwcm9maWxlRGV0YWlscyddICYmIHBheWxvYWRbJ3JlcXVlc3QnXVsncHJvZmlsZURldGFpbHMnXVsncGVyc29uYWxEZXRhaWxzJ10gJiYgcGF5bG9hZFsncmVxdWVzdCddWydwcm9maWxlRGV0YWlscyddWydwZXJzb25hbERldGFpbHMnXVsnZG9iJ10pIHtcbiAgICAgIGxldCBkb2JGb3JtYXQgPSBwYXlsb2FkWydyZXF1ZXN0J11bJ3Byb2ZpbGVEZXRhaWxzJ11bJ3BlcnNvbmFsRGV0YWlscyddWydkb2InXTtcbiAgICAgIGxldCBkb2IgPSBgJHtuZXcgRGF0ZShkb2JGb3JtYXQpLmdldERhdGUoKX0tJHtuZXcgRGF0ZShkb2JGb3JtYXQpLmdldE1vbnRoKCkgKyAxfS0ke25ldyBEYXRlKGRvYkZvcm1hdCkuZ2V0RnVsbFllYXIoKX1gXG4gICAgICBwYXlsb2FkWydyZXF1ZXN0J11bJ3Byb2ZpbGVEZXRhaWxzJ11bJ3BlcnNvbmFsRGV0YWlscyddWydkb2InXSA9IGRvYlxuICAgIH1cbiAgICBpZiAodGhpcy51cGRhdGVQcm9maWxlKSB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgICAgdGhpcy51c2VyUHJvZmlsZVNlcnZpY2UuZWRpdFByb2ZpbGVEZXRhaWxzKHBheWxvYWQpLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgaWYgKHJlcy5yZXNwb25zZUNvZGUgPT09ICdPSycpIHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdFN1cmV2eSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlICovXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXCJzb21ldGhpbmcgd2VudCB3cm9uZyFcIilcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgc3VibWl0U3VyZXZ5KHN0YXR1czogYW55KSB7XG4gICAgbGV0IHN1cmV2eVBheWxvYWQgPSB7XG4gICAgICBmb3JtSWQ6IF8uZ2V0KHRoaXMuZGF0YSwgJ2JhdGNoRGF0YS5iYXRjaEF0dHJpYnV0ZXMucHJvZmlsZVN1cnZleUlkJyksXG4gICAgICB2ZXJzaW9uOiA0LFxuICAgICAgc3RhdHVzOiAnU1VCTUlUVEVEJyxcbiAgICAgIHJlc3BvbnNlczogdGhpcy5nZW5lcmVhdGVTdXJ2ZXlQYXlsb2FkKHN0YXR1cyksXG4gICAgICBjb250ZXh0SWQ6IF8uZ2V0KHRoaXMuZGF0YSwgJ2JhdGNoRGF0YS5jb3Vyc2VJZCcpLFxuICAgICAgY29udGV4dE5hbWU6IF8uZ2V0KHRoaXMuZGF0YSwgJ2NvdXJzZU5hbWUnLCAnJyksXG4gICAgfVxuICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgKyAxXG4gICAgdGhpcy5ucHNTdmMuc3VibWl0QnBGb3JtV2l0aFByb2ZpbGVEZXRhaWxzKHN1cmV2eVBheWxvYWQpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgaWYgKF8uZ2V0KHJlc3AsICdwYXJhbXMuc3RhdHVzJykgPT09ICdzdWNjZXNzJykge1xuICAgICAgICB0aGlzLmN1c3RvbUZvcm0gPSBmYWxzZVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXCJGb3JtIGlzIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHlcIilcbiAgICAgICAgdGhpcy5jbG9zZVBvcHVwKClcbiAgICAgIH1cbiAgICAgIGlmIChyZXNwICYmIHJlc3Auc3RhdHVzQ29kZSAmJiByZXNwLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICB0aGlzLmN1c3RvbUZvcm0gPSBmYWxzZVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocmVzcC5lcnJvck1lc3NhZ2UpXG4gICAgICB9XG4gICAgfSwgZXJyb3IgPT4ge1xuICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgIC8qIHRzbGludDpkaXNhYmxlICovXG4gICAgICBjb25zb2xlLmxvZyhlcnJvcilcbiAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcInNvbWV0aGluZyB3ZW50IHdyb25nIVwiKVxuICAgIH0pXG4gIH1cblxuICBnZW5lcmF0ZVByb2ZpbGVQYXlsb2FkKCkge1xuICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIHVzZXJJZDogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5pZGVudGlmaWVyLFxuICAgICAgICBwcm9maWxlRGV0YWlsczoge1xuICAgICAgICAgIGVtcGxveW1lbnREZXRhaWxzOiB7fSxcbiAgICAgICAgICBwZXJzb25hbERldGFpbHM6IHt9LFxuICAgICAgICAgIC8vIGNhZHJlRGV0YWlsczoge30sXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IF9wcm9mZXNzaW9uYWxEZXRhaWxzOiBhbnkgPSB7fVxuICAgIGxldCB1cGRhdGVQcm9mZXNzaW9uYWxEZXRhaWxzOiBib29sZWFuID0gZmFsc2VcbiAgICBpZiAodGhpcy5zaG93R3JvdXAgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dyb3VwJ10udmFsdWUgJiYgIXRoaXMuc2hvd0RvcHRDaGFuZ2VzKSB7XG4gICAgICBfcHJvZmVzc2lvbmFsRGV0YWlsc1snZ3JvdXAnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydncm91cCddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgICB1cGRhdGVQcm9mZXNzaW9uYWxEZXRhaWxzID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy5zaG93RGVzaWduYXRpb24gJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWUgJiYgIXRoaXMuc2hvd0RvcHRDaGFuZ2VzKSB7XG4gICAgICBfcHJvZmVzc2lvbmFsRGV0YWlsc1snZGVzaWduYXRpb24nXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgICB1cGRhdGVQcm9mZXNzaW9uYWxEZXRhaWxzID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodXBkYXRlUHJvZmVzc2lvbmFsRGV0YWlscykge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzWydwcm9mZXNzaW9uYWxEZXRhaWxzJ10gPSBbX3Byb2Zlc3Npb25hbERldGFpbHNdXG4gICAgfVxuICAgIGlmICh0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZW1wbG95ZWVDb2RlJ10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlsc1snZW1wbG95ZWVDb2RlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZW1wbG95ZWVDb2RlJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1snbW9iaWxlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snbW9iaWxlJ10udmFsdWVcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHNbJ3Bob25lVmVyaWZpZWQnXSA9IHRydWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1snZ2VuZGVyJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZ2VuZGVyJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb2InXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1snZG9iJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9iJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb21pY2lsZU1lZGl1bSddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydkb21pY2lsZU1lZGl1bSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYXRlZ29yeSddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydjYXRlZ29yeSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydwaW5Db2RlJ10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlsc1sncGluQ29kZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZVxuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1sncGluY29kZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIGxldCBfY2FkcmVEZXRhaWxzOiBhbnkgPSB7fVxuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1snaXNDYWRyZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUpIHtcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2l2aWxTZXJ2aWNlVHlwZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3R5cGVPZkNpdmlsU2VydmljZSddLnZhbHVlXG4gICAgICAgIF9jYWRyZURldGFpbHNbJ2NpdmlsU2VydmljZU5hbWUnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydzZXJ2aWNlVHlwZSddLnZhbHVlXG4gICAgICAgIF9jYWRyZURldGFpbHNbJ2NhZHJlTmFtZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlTmFtZSddLnZhbHVlXG4gICAgICAgIF9jYWRyZURldGFpbHNbJ2NhZHJlQmF0Y2gnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYWRyZUJhdGNoJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eU5hbWUnXSA9IHRoaXMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eVxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjYWRyZUlkJ10gPSB0aGlzLmNhZHJlSWRcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2l2aWxTZXJ2aWNlSWQnXSA9IHRoaXMuY2l2aWxTZXJ2aWNlSWRcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2l2aWxTZXJ2aWNlVHlwZUlkJ10gPSB0aGlzLnNlcnZpY2VJZFxuICAgICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHNbJ2NhZHJlRGV0YWlscyddID0gX2NhZHJlRGV0YWlsc1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcGF5bG9hZFxuICB9XG5cbiAgZm9ybWF0RGF0ZShfZG9iOiBzdHJpbmcgfCBEYXRlKTogc3RyaW5nIHtcbiAgICBsZXQgZGF0ZU9iajogRGF0ZSB8IG51bGwgPSBudWxsO1xuICAgIGlmIChfZG9iIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgZGF0ZU9iaiA9IF9kb2I7XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgX2RvYiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IHBhcnRzID0gX2RvYi5zcGxpdCgnLScpO1xuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA9PT0gMykge1xuICAgICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBwYXJ0cztcbiAgICAgICAgZGF0ZU9iaiA9IG5ldyBEYXRlKE51bWJlcih5ZWFyKSwgTnVtYmVyKG1vbnRoKSAtIDEsIE51bWJlcihkYXkpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZCA9IG5ldyBEYXRlKF9kb2IpO1xuICAgICAgICBpZiAoIWlzTmFOKHBhcnNlZC5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgZGF0ZU9iaiA9IHBhcnNlZDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoIWRhdGVPYmogfHwgaXNOYU4oZGF0ZU9iai5nZXRUaW1lKCkpKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRhdGVQaXBlLnRyYW5zZm9ybShkYXRlT2JqLCAneXl5eS1NTS1kZCcpIHx8ICcnO1xuICB9XG5cbiAgZ2V0UXVlc3Rpb25JZChmaWVsZE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgaWYgKCFmaWVsZE5hbWUgfHwgIXRoaXMuZm9ybXNEZXRpbHMuZmllbGRzKSB7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgY29uc3QgZmllbGQgPSB0aGlzLmZvcm1zRGV0aWxzLmZpZWxkcy5maW5kKChmOiBhbnkpID0+IGYuZmllbGQgPT09IGZpZWxkTmFtZSkgfHwge307XG4gICAgcmV0dXJuIGZpZWxkLmlkIHx8ICcnO1xuICB9XG5cbiAgZ2VuZXJlYXRlU3VydmV5UGF5bG9hZChzdGF0dXM6IGFueSkge1xuICAgIGxldCBkYXRhT2JqZWN0OiBhbnkgPSBbXVxuICAgIHRoaXMuYmF0Y2hEZXRhaWxzLmJhdGNoQXR0cmlidXRlcy5icEVucm9sTWFuZGF0b3J5UHJvZmlsZUZpZWxkcy5mb3JFYWNoKChfZmllbGQ6IGFueSkgPT4ge1xuICAgICAgY29uc3QgZmllbGRUb0FkZCA9IHtcbiAgICAgICAgcXVlc3Rpb25JZDogdGhpcy5nZXRRdWVzdGlvbklkKF9maWVsZC5maWVsZCksXG4gICAgICAgIHF1ZXN0aW9uOiBfZmllbGQuZGlzcGxheU5hbWUsXG4gICAgICAgIGFuc3dlcjogJycsXG4gICAgICAgIGFuc3dlclR5cGU6IF9maWVsZC5maWVsZFR5cGVcbiAgICAgIH1cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lJykge1xuICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3ROYW1lJywgXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWUnLCAnJykpXG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0TmFtZSB8fCB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWVcbiAgICAgIH1cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5kZXBhcnRtZW50TmFtZScpIHtcbiAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUnLCAnTi9BJylcbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lID9cbiAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lIDogXCJOL0FcIlxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMuZ3JvdXAnKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dHcm91cCAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydncm91cCddLnZhbHVlXG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZ3JvdXAnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXAnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXAgP1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmdyb3VwIDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMuZGVzaWduYXRpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZXNpZ25hdGlvbiAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBpZiAodGhpcy5zaG93RG9wdENoYW5nZXMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10gJiZcbiAgICAgICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddLnZhbHVlID09PSAnT3RoZXJzJyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snb3RoZXJEZXNpZ25hdGlvbiddKSB7XG4gICAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydvdGhlckRlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ290aGVyRGVzaWduYXRpb24nXS52YWx1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddLnZhbHVlXG4gICAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddLnZhbHVlXG4gICAgICAgICAgfVxuICAgICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5kZXNpZ25hdGlvbiA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24gOiBcIk4vQVwiXG4gICAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uJywgJ04vQScpXG4gICAgICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZW1wbG95ZWVDb2RlJykge1xuICAgICAgICBpZiAodGhpcy5zaG93RW1wbG95ZWVDb2RlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2VtcGxveWVlQ29kZSddLnZhbHVlXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZW1wbG95ZWVDb2RlJ10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUgP1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUgOiBcIk4vQVwiXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsJykge1xuICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbFxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWxcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUnKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dNb2JpbGUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snbW9iaWxlJ10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgOiBcIk4vQVwiXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iJykge1xuICAgICAgICBpZiAodGhpcy5zaG93RG9iICYmIHN0YXR1cykge1xuICAgICAgICAgIGxldCBfZG9iOiBhbnkgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9iJ10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMuZm9ybWF0RGF0ZShfZG9iKVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy5mb3JtYXREYXRlKF9kb2IpXG4gICAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYikge1xuICAgICAgICAgICAgbGV0IF9kb2I6IGFueSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYlxuICAgICAgICAgICAgY29uc3QgW2RheSwgbW9udGgsIHllYXJdID0gX2RvYi5zcGxpdCgnLScpXG4gICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoTnVtYmVyKHllYXIpLCBOdW1iZXIobW9udGgpIC0gMSwgTnVtYmVyKGRheSkpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWREYXkgPSBTdHJpbmcoZGF0ZS5nZXREYXRlKCkpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZE1vbnRoID0gU3RyaW5nKGRhdGUuZ2V0TW9udGgoKSArIDEpLnBhZFN0YXJ0KDIsICcwJylcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKClcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gYCR7Zm9ybWF0dGVkWWVhcn0tJHtmb3JtYXR0ZWRNb250aH0tJHtmb3JtYXR0ZWREYXl9YFxuICAgICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBgJHtmb3JtYXR0ZWRZZWFyfS0ke2Zvcm1hdHRlZE1vbnRofS0ke2Zvcm1hdHRlZERheX1gXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gXCIxOTUwLTA2LTAxXCJcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXCIxOTUwLTA2LTAxXCJcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXInKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dHZW5kZXIgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZ2VuZGVyJ10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXInLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlciA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXIgOiBcIk4vQVwiXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9taWNpbGVNZWRpdW0nKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEZWNpbWFsTWVkaXVtICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb21pY2lsZU1lZGl1bSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtJywgJ04vQScpXG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0NhdGVnb3J5ICYmIHN0YXR1cykge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYXRlZ29yeSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5JywgJ04vQScpXG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUnKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dQaW5Db2RlICYmIHN0YXR1cykge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5waW5Db2RlID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscycpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMgJiZcbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmlzQ2FkcmUgPyAnWWVzJyA6ICdObydcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuaXNDYWRyZScpID8gJ1llcycgOiAnTm8nXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUnKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sndHlwZU9mQ2l2aWxTZXJ2aWNlJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWyd0eXBlT2ZDaXZpbFNlcnZpY2UnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZScsICdOL0EnKVxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZU5hbWUnKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snc2VydmljZVR5cGUnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3NlcnZpY2VUeXBlJ10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZU5hbWUgP1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSA6ICdOL0EnXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZU5hbWUnLCAnTi9BJylcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUnKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVOYW1lJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYWRyZU5hbWUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUnLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUgOiAnTi9BJ1xuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUJhdGNoJykge1xuICAgICAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlQmF0Y2gnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlQmF0Y2gnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCA/XG4gICAgICAgICAgLy8gICBKU09OLnN0cmluZ2lmeSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUJhdGNoKSA6ICdOL0EnXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gnKSA/IEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gpIDogJ04vQSdcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSA6ICdOL0EnXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lJywgJ04vQScpXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbUlkJykge1xuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcyAmJlxuICAgICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1JZCkge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWRcbiAgICAgICAgICAvLyAgID8gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbUlkIDogXCJOL0FcIlxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWQnLCAnTi9BJylcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9ICdOL0EnXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbURvcicpIHtcbiAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMgJiZcbiAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1Eb3JcbiAgICAgICAgICAvLyAgID8gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbURvciA6IFwiTi9BXCJcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbURvcicsICdOL0EnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9ICdOL0EnXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBkYXRhT2JqZWN0XG4gIH1cblxuICB1cGRhdGVFbWFpbChlbWFpbDogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgcG9zdERhdGEgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgICd1c2VySWQnOiB0aGlzLmNvbmZpZ1NyYy51bk1hcHBlZFVzZXIuaWQsXG4gICAgICAgICdjb250ZXh0VG9rZW4nOiB0aGlzLmNvbnRleHRUb2tlbixcbiAgICAgICAgJ3Byb2ZpbGVEZXRhaWxzJzoge1xuICAgICAgICAgICdwZXJzb25hbERldGFpbHMnOiB7XG4gICAgICAgICAgICAncHJpbWFyeUVtYWlsJzogZW1haWwsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuXG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS51cGRhdGVQcmltYXJ5RW1haWxEZXRhaWxzKHBvc3REYXRhKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwgPSBlbWFpbFxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnZW1haWxVcGRhdGVkJykpXG4gICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygndXBkYXRlRW1haWxGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHNldHVwU2Nyb2xsTGlzdGVuZXIob3BlbmVkOiBib29sZWFuKTogdm9pZCB7XG4gICAgY29uc3Qgc2VhcmNoRGVzaWduYXRpb25Db250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZWFyY2hEZXNpZ25hdGlvbicpO1xuICAgIGlmIChvcGVuZWQgJiYgc2VhcmNoRGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uc09mZnNldCA9IDBcbiAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IFtdO1xuICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKClcbiAgICAgIGNvbnN0IHNlYXJjaElucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnNlYXJjaC1pbnB1dCcpIGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICBpZiAoc2VhcmNoSW5wdXQpIHtcbiAgICAgICAgc2VhcmNoSW5wdXQuZm9jdXMoKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm1hdC1zZWxlY3QtcGFuZWwnKTtcbiAgICAgIGlmIChwYW5lbCkge1xuICAgICAgICBwYW5lbC5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uRGVzaWduYXRpb25TZWxlY3RTY3JvbGwuYmluZCh0aGlzKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbChldmVudDogYW55KTogdm9pZCB7XG4gICAgY29uc3QgZWxlbWVudCA9IGV2ZW50LnRhcmdldDtcbiAgICAgIC8vIENoZWNrIGlmIHVzZXIgaGFzIHNjcm9sbGVkIHRvIHRoZSBib3R0b20gKHdpdGggYSBzbWFsbCB0aHJlc2hvbGQpXG4gICAgICBpZiAoZWxlbWVudC5zY3JvbGxUb3AgKyBlbGVtZW50LmNsaWVudEhlaWdodCA+PSBlbGVtZW50LnNjcm9sbEhlaWdodCAtIDUpIHtcbiAgICAgICAgLy8gT25seSBsb2FkIG1vcmUgaWYgbm90IGFscmVhZHkgbG9hZGluZyBhbmQgaWYgdGhlcmUgYXJlIHBvdGVudGlhbGx5IG1vcmUgaXRlbXNcbiAgICAgICAgaWYgKCF0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgJiYgdGhpcy5kZXNpZ25hdGlvbnNNZXRhLmxlbmd0aCA8IHRoaXMuZGVzaWduYXRpb25zVG90YWxDb3VudCkge1xuICAgICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IHRydWU7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgKz0gMTtcbiAgICAgICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgICB9XG4gICAgICB9XG4gIH1cblxuICBjaGVja0N1cnJlbnREZXNpZ25hdGlvblByZXNlbnQoKSB7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IGRlc2lnbmF0aW9uIHZhbHVlXG4gICAgY29uc3Qgc2VhcmNoRGVzaWduYXRpb25Db250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdkZXNpZ25hdGlvbicpO1xuICAgIGNvbnN0IGN1cnJlbnREZXNpZ25hdGlvbiA9IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA/IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbC52YWx1ZSA6ICcnO1xuICAgIC8vIENoZWNrIGlmIGN1cnJlbnQgZGVzaWduYXRpb24gZXhpc3RzIGluIHRoZSBsaXN0XG4gICAgaWYgKGN1cnJlbnREZXNpZ25hdGlvbikge1xuICAgICAgY29uc3QgZGVzaWduYXRpb25FeGlzdHMgPSB0aGlzLmRlc2lnbmF0aW9uc01ldGEuc29tZShcbiAgICAgICAgKGRlc2lnbmF0aW9uOiBhbnkpID0+IGRlc2lnbmF0aW9uLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gY3VycmVudERlc2lnbmF0aW9uLnRvTG93ZXJDYXNlKClcbiAgICAgICk7XG5cbiAgICAgIC8vIElmIGRlc2lnbmF0aW9uIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGxpc3QsIGFkZCBpdFxuICAgICAgaWYgKCFkZXNpZ25hdGlvbkV4aXN0cykge1xuICAgICAgICAvLyBDcmVhdGUgYSBuZXcgZGVzaWduYXRpb24gb2JqZWN0IHRvIG1hdGNoIHRoZSBzdHJ1Y3R1cmUgb2Ygb3RoZXIgaXRlbXNcbiAgICAgICAgY29uc3QgbmV3RGVzaWduYXRpb24gPSB7XG4gICAgICAgICAgbmFtZTogY3VycmVudERlc2lnbmF0aW9uLFxuICAgICAgICAgIHN0YXR1czogJ0FjdGl2ZSdcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNNZXRhLnVuc2hpZnQobmV3RGVzaWduYXRpb24pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZCgpOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJyk7XG4gICAgaWYgKHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCkge1xuICAgICAgc2VhcmNoRGVzaWduYXRpb25Db250cm9sLnNldFZhbHVlKCcnKVxuICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSAnJ1xuICAgIH1cbiAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gIH1cblxufVxuIiwiPGRpdiAjZnVsbFNjcmVlbkNvbnRhaW5lcj5cbiAgICA8ZGl2IGNsYXNzPVwiZGlhbG9nLWhlYWRlciB0ZXh0LXJpZ2h0IG1iLTJcIj5cbiAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwibWF0LWljb24gbm90cmFuc2xhdGUgbWF0ZXJpYWwtaWNvbnMgY2xvc2UtaWNvbiBjdXJzb3ItcG9pbnRlclwiIG1hdHByZWZpeD1cIlwiIHJvbGU9XCJpbWdcIiBhcmlhLWhpZGRlbj1cInRydWVcIiBbbWF0LWRpYWxvZy1jbG9zZV09XCJmYWxzZVwiPmNsb3NlPC9tYXQtaWNvbj5cbiAgICA8L2Rpdj5cbiAgICA8aDE+IHt7ZGF0YT8uY291cnNlTmFtZX19IDwvaDE+XG4gICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiIWlzTG9hZGluZ1wiPlxuICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJ1c2VyRGV0YWlsc0Zvcm1cIiBjbGFzcz1cInVzZXJEZXRhaWxzRm9ybVwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dOYW1lXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLm5hbWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwibmFtZVwiIHBsYWNlaG9sZGVyPVwiTmFtZVwiLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd09yZ1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7IChzaG93RG9wdENoYW5nZXMgPyAncHJvZmlsZUluZm8ucHJlc2VudE9yZ2FuaXNhdGlvbicgOiAncHJvZmlsZUluZm8ub3JnYW5pc2F0aW9uJykgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJvcmdhbmlzYXRpb25cIiBwbGFjZWhvbGRlcj1cIk9yZ2FuaXNhdGlvblwiLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0VtYWlsXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmVtYWlsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cInByaW1hcnlFbWFpbFwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgZW1haWxcIiAoa2V5dXApPVwiaGFuZGxlRW1wdHkoJ3ByaW1hcnlFbWFpbCcpXCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJtYXQtZXJyb3JcIiAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybS5nZXQoJ3ByaW1hcnlFbWFpbCcpLmhhc0Vycm9yKCdyZXF1aXJlZCcpIHx8IHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3ByaW1hcnlFbWFpbCcpLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmludmFsaWRFbWFpbCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIiAqbmdJZj1cInZlcmlmeUVtYWlsICYmICFvdHBTZW50ICYmICFlVmVyaWZpZWRcIj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJnZXQtb3RwXCIgKGNsaWNrKT1cImhhbmRsZUdlbmVyYXRlRW1haWxPVFAoJ2VtYWlsJylcIj57eyAncHJvZmlsZUluZm8uZ2V0T1RQJyB8IHRyYW5zbGF0ZVxuICAgICAgICAgICAgICAgIH19PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiZW1haWxPdHBTZW50XCI+XG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwiZW1haWxPdHBGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZW50ZXItb3RwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW50ZXJPVFAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlRpbWUgUmVtYWluaW5nOiA8c3BhbiAjZW1haWxUaW1lckRpdj48L3NwYW4+PC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkIG1vYmlsZS1udW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZU90cFwiIGNsYXNzPVwiaW5wdXQtdGV4dCBjdXN0b20tc2l6ZVwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmVudGVyVGhlT1RQJyB8IHRyYW5zbGF0ZSB9fVwiIG1heGxlbmd0aD1cIjZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiICpuZ0lmPVwic2hvd0VtYWlsUmVzZW5kT1RQXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZXJcIj57eyAncHJvZmlsZUluZm8uZGlkTm90UmVjZWl2ZU9UUCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtb3RwXCIgKGNsaWNrKT1cImhhbmRsZVJlc2VuZEVtYWlsT1RQKClcIj4mbmJzcDsmbmJzcDt7eyAncHJvZmlsZUluZm8ucmVzZW50T1RQJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgbWItNFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cganVzdGlmeS1iZXR3ZWVuXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9XCJzYXZlLWJ1dHRvblwiIChjbGljayk9XCJ2ZXJpZnlFbWFpbE9UUCgpXCI+e3sgJ3Byb2ZpbGVJbmZvLnN1Ym1pdCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93R3JvdXBcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5ncm91cCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJncm91cFwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmNob29zZUFHcm91cCcgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBncm91cCBvZiBncm91cERhdGFcIiB2YWx1ZT1cInt7Z3JvdXB9fVwiPnt7IGdyb3VwIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBtYi0yXCIgKm5nSWY9XCJzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAge3sncHJvZmlsZUluZm8uZ3JvdXBOb3RlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGwgcmVsYXRpdmVcIiAqbmdJZj1cImNhblNob3dEZXNpZ25hdGlvblwiPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmRlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGF1dG8tY29tcGxldGUtcm93IHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dCBoaWdoLXppbmRleFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uXCJcbiAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyZGVzaWduYXRpb24oJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAoZm9jdXMpPVwib25EZXNpZ25hdGlvbnNGb2N1cygpXCIgI3RleHRCb3hcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cInt7ICdwcm9maWxlSW5mby5jaG9vc2VBRGVzaWduYXRpb24nIHwgdHJhbnNsYXRlIH19XCI+XG4gICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImRpc2FnbmF0aW9uLWNhcmV0XCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+IC0tPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJjdXN0b20tc2VsZWN0LWNvbnRhaW5lclwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJmaXhlZC1oZWlnaHQtc2VsZWN0XCI+XG4gICAgICAgICAgICAgIDxtYXQtc2VsZWN0IHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmNob29zZUFEZXNpZ25hdGlvbicgfCB0cmFuc2xhdGUgfX1cIiBmb3JtQ29udHJvbE5hbWU9XCJkZXNpZ25hdGlvblwiICAoY2xvc2VkKT1cIm9uRGVzaWduYXRpb25Ecm9wZG93bkNsb3NlZCgpXCIgKG9wZW5lZENoYW5nZSk9XCJzZXR1cFNjcm9sbExpc3RlbmVyKCRldmVudClcIiAgcGFuZWxDbGFzcz1cInNlYXJjaC1wYW5lbFwiPlxuICAgICAgICAgICAgICAgIDwhLS0gU3RpY2t5IHNlYXJjaCBpbnB1dCBjb250YWluZXIgLS0+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInN0aWNreS1zZWFyY2gtY29udGFpbmVyXCIgKGNsaWNrKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInNlYXJjaC1pbnB1dC13cmFwcGVyXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cInRleHRcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9XCJTZWFyY2ggZGVzaWduYXRpb25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwic2VhcmNoRGVzaWduYXRpb25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJzZWFyY2gtaW5wdXRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoa2V5ZG93bik9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCI+XG4gICAgICAgICAgICAgICAgICAgIDxidXR0b24gXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZ0lmPVwic2VhcmNoRGVzaWduYXRpb24/LnZhbHVlXCIgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9XCJjbGVhci1idXR0b25cIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cInNlYXJjaERlc2lnbmF0aW9uPy5zZXRWYWx1ZSgnJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg4pyVXG4gICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBPcHRpb25zIGxpc3QgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IG9wdGlvbiBvZiBkZXNpZ25hdGlvbnNNZXRhIFwiIFt2YWx1ZV09XCJvcHRpb24/Lm5hbWVcIiAoY2xpY2spPVwic2VsZWN0RGVzaWduYXRpb24ob3B0aW9uPy5uYW1lKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAge3sgb3B0aW9uPy5uYW1lIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICA8IS0tIExvYWRpbmcgaW5kaWNhdG9yIC0tPlxuICAgICAgICAgICAgICAgICAgPGRpdiAqbmdJZj1cImlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnNcIiBjbGFzcz1cImxvYWRpbmctaW5kaWNhdG9yXCI+XG4gICAgICAgICAgICAgICAgICAgIExvYWRpbmcgbW9yZS4uLlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPCEtLSBObyByZXN1bHRzIG1lc3NhZ2UgLS0+XG4gICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nSWY9XCIoZGVzaWduYXRpb25zTWV0YSApPy5sZW5ndGggPT09IDBcIiBkaXNhYmxlZD5cbiAgICAgICAgICAgICAgICAgICAgICAgIE5vIG1hdGNoZXMgZm91bmRcbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybT8uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10/LmludmFsaWQgJiYgdXNlckRldGFpbHNGb3JtPy5jb250cm9sc1snZGVzaWduYXRpb24nXT8udG91Y2hlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtZXJyb3JcIj5cbiAgICAgICAgICAgICAgICBQbGVhc2Ugc2VsZWN0IGEgdmFsaWQgZGVzaWduYXRpb24uXG4gICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC14cyBtYi0yXCIgKm5nSWY9XCJzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgIHt7J3Byb2ZpbGVJbmZvLmRlc2lnbmF0aW9uTm90ZScgfCB0cmFuc2xhdGV9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwhLS0gPGRpdiBjbGFzcz1cImF1dG8tbGlzdCBmbGV4IGZsZXgtY29sIGlnbm9yZS1ibHVyXCIgI2Ryb3Bkb3duXG4gICAgICAgICAgICAqbmdJZj1cIm9wZW5EZXNpZ25hdGlvbkRyb3Bkb3duICYmIGZpbHRlckRlc2lnbmF0aW9uc01ldGEubGVuZ3RoXCI+XG4gICAgICAgICAgICA8ZGl2IChtb3VzZWRvd24pPVwicHJldmVudEJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiaXRlbSB7e3VzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZGVzaWduYXRpb24nXT8udmFsdWU/LnRvTG93ZXJDYXNlKCkgPT09IGRlc2lnbmF0aW9uPy5uYW1lPy50b0xvd2VyQ2FzZSgpID8gJ2l0ZW0tYWN0aXZlJyA6ICcnfX1cIlxuICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgZGVzaWduYXRpb24gb2YgZmlsdGVyRGVzaWduYXRpb25zTWV0YVwiIChjbGljayk9XCJzZWxlY3REZXNpZ25hdGlvbihkZXNpZ25hdGlvbi5uYW1lKVwiPlxuICAgICAgICAgICAgICB7eyBkZXNpZ25hdGlvbj8ubmFtZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+IC0tPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCByZWxhdGl2ZVwiICpuZ0lmPVwiY2FuU2hvd0Rlc2lnbmF0aW9uICYmIGNhblNob3dPdGhlckRlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICB7eyAncHJvZmlsZUluZm8ub3RoZXJEZXNpZ25hdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2ICpuZ0lmPVwiY2FuU2hvd090aGVyRGVzaWduYXRpb25cIj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm90aGVyRGVzaWduYXRpb25cIiBwbGFjZWhvbGRlcj1cInt7ICdwcm9maWxlSW5mby5lbnRlckRlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiLz5cbiAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dFbXBsb3llZUNvZGVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW1wbG95ZWVJZCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlbXBsb3llZUNvZGVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIGVtcGxveWVlIGNvZGVcIi8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+ICAgIFxuICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwibWF0LWVycm9yXCIgKm5nSWY9XCJ1c2VyRGV0YWlsc0Zvcm0/LmdldCgnZW1wbG95ZWVDb2RlJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAgICBQbGVhc2UgZW50ZXIgYW4gQWxwaGEtbnVtZXJpYyB2YWx1ZSBvbmx5XG4gICAgICAgICAgICA8L21hdC1lcnJvcj4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2Fuc2hvd01vYmlsZVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5tb2JpbGVOdW1iZXInIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGdhcC00XCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjb3VudHJ5LWNvZGUgZmxleCBqdXN0aWZ5LWNlbnRlciBpdGVtcy1jZW50ZXJcIiBhcHBlYXJhbmNlPVwib3V0bGluZVwiPlxuICAgICAgICAgICAgICAgICs5MVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgtMVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cIm1vYmlsZS1udW1cIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IG1vYmlsZS10ZXh0IHJlbGF0aXZlXCIgbWF4bGVuZ3RoPVwiMTBcIiAoa2V5dXApPVwiaGFuZGxlRW1wdHkoJ21vYmlsZScpXCJcbiAgICAgICAgICAgICAgICAgICAgICBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJtb2JpbGVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIG1vYmlsZSBudW1iZXJcIi8+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwidmVyaWZpZWQtY2hlY2tcIiAqbmdJZj1cIm1WZXJpZmllZFwiPmNoZWNrX2NpcmNsZTwvbWF0LWljb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cIm1hdC1lcnJvclwiXG4gICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJ1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdtb2JpbGUnKS5oYXNFcnJvcigncmVxdWlyZWQnKSB8fCB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdtb2JpbGUnKS5oYXNFcnJvcigncGF0dGVybicpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8ucGxlYXNlRW50ZXJWYWxpZE1vYmlsZU51bWJlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1lbmRcIiAqbmdJZj1cInZlcmlmeU1vYmlsZSAmJiAhb3RwU2VudCAmJiAhbVZlcmlmaWVkXCI+XG4gICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdldC1vdHAgc206bXItNFwiIChjbGljayk9XCJoYW5kbGVHZW5lcmF0ZU9UUCgncGhvbmUnKVwiPnt7ICdwcm9maWxlSW5mby5nZXRPVFAnIHxcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiAqbmdJZj1cIm90cFNlbnRcIj4gICAgICAgICAgICAgXG4gICAgICAgICAgICAgIDxmb3JtIFtmb3JtR3JvdXBdPVwib3RwRm9ybVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGVudGVyLW90cFwiPlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmVudGVyT1RQJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1iLTNcIj5UaW1lIFJlbWFpbmluZzogPHNwYW4gI3RpbWVyRGl2Pjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGQgbW9iaWxlLW51bVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJvdHBcIiBjbGFzcz1cImlucHV0LXRleHQgY3VzdG9tLXNpemVcIiBwbGFjZWhvbGRlcj1cInt7ICdwcm9maWxlSW5mby5lbnRlclRoZU9UUCcgfCB0cmFuc2xhdGUgfX1cIiBtYXhsZW5ndGg9XCI2XCIgLz5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXgganVzdGlmeS1jZW50ZXJcIiAqbmdJZj1cInNob3dSZXNlbmRPVFBcIj4gIFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvd1wiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRpbWVyXCI+e3sgJ3Byb2ZpbGVJbmZvLmRpZE5vdFJlY2VpdmVPVFAnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwicmVzZW5kLW90cFwiIChjbGljayk9XCJoYW5kbGVSZXNlbmRPVFAoKVwiPiZuYnNwOyZuYnNwO3t7ICdwcm9maWxlSW5mby5yZXNlbnRPVFAnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCIgKGNsaWNrKT1cInZlcmlmeU1vYmlsZU9UUCgpXCI+e3sgJ3Byb2ZpbGVJbmZvLnN1Ym1pdCcgfCB0cmFuc2xhdGUgfX08L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Zvcm0+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0dlbmRlclwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmdlbmRlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJnZW5kZXJcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBnZW5kZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IF9nZW5kZXIgb2YgZVVzZXJHZW5kZXJcIiB2YWx1ZT1cInt7IF9nZW5kZXIgfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRyYW5zbGF0ZVRvKF9nZW5kZXIudG9Mb3dlckNhc2UoKSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dEb2JcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5kb2InIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGlucHV0IG1hdElucHV0IGNsYXNzPVwiaW5wdXQtdGV4dCBpY29uLWluY2x1ZGUtaW5wdXRcIiBbbWF4XT1cImN1cnJlbnREYXRlXCIgW21hdERhdGVwaWNrZXJdPVwicGlja2VyXCIgWyhuZ01vZGVsKV09XCJzZWxlY3RlZERhdGVcIlxuICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRvYlwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGRhdGUgb2YgYmlydGhcIiAvPlxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyLXRvZ2dsZSBtYXRTdWZmaXggW2Zvcl09XCJwaWNrZXJcIj48L21hdC1kYXRlcGlja2VyLXRvZ2dsZT5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZGF0ZXBpY2tlciAjcGlja2VyPjwvbWF0LWRhdGVwaWNrZXI+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCByZWxhdGl2ZVwiICpuZ0lmPVwiY2FuU2hvd0RvbWljaWxlTWVkaXVtXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8ubW90aGVyVG9uZ3VlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBhdXRvLWNvbXBsZXRlLXJvdyByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dCBoaWdoLXppbmRleFwiIGFyaWEtbGFiZWw9XCJEb21pY2lsZSBNZWRpdW0gKE1vdGhlciBUb25ndWUpXCIgbWF0SW5wdXRcbiAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sTmFtZT1cImRvbWljaWxlTWVkaXVtXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgbW90aGVyIHRvbmd1ZVwiXG4gICAgICAgICAgICAgICAgICAoaW5wdXQpPVwiZmlsdGVyTGFuZ3VhZ2UoJGV2ZW50LnRhcmdldC52YWx1ZSlcIiAoZm9jdXMpPVwib25MYW5ndWFnZUZvY3VzKClcIiAjbGFuZ3VhZ2VUZXh0Qm94Lz5cbiAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtb3RoZXItdG91bmd1ZS1jYXJldFwiPmFycm93X2Ryb3BfZG93bjwvbWF0LWljb24+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxtYXQtZXJyb3IgKm5nSWY9XCJ1c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10uaW52YWxpZCAmJiB1c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udG91Y2hlZFwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtYXQtZXJyb3JcIj5cbiAgICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSB2YWxpZCBtb3RoZXIgdG9uZ3VlLlxuICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhdXRvLWxhbmd1YWdlLWxpc3QgZmxleCBmbGV4LWNvbCBpZ25vcmUtYmx1clwiICNsYW5ndWFnZURyb3Bkb3duXG4gICAgICAgICAgICAgICpuZ0lmPVwib3Blbkxhbmd1YWdlRHJvcGRvd24gJiYgbWFzdGVyTGFuZ3VhZ2VzPy5sZW5ndGhcIj5cbiAgICAgICAgICAgICAgPGRpdiAobW91c2Vkb3duKT1cInByZXZlbnRMYW5ndWFnZUJsdXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJsYW5ndWFnZS1pdGVtIHt7dXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb21pY2lsZU1lZGl1bSddPy52YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gbGFuZ3VhZ2U/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPyAnbGFuZ3VhZ2UtaXRlbS1hY3RpdmUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICAgKm5nRm9yPVwibGV0IGxhbmd1YWdlIG9mIG1hc3Rlckxhbmd1YWdlc1wiIChjbGljayk9XCJzZWxlY3RMYW5ndWFnZShsYW5ndWFnZS5uYW1lKVwiPlxuICAgICAgICAgICAgICAgIHt7IGxhbmd1YWdlPy5uYW1lIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93Q2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5jYXRlZ29yeScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjYXRlZ29yeVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNhdGVnb3J5XCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBjYXRlZ29yeSBvZiBlQ2F0ZWdvcnlcIiB2YWx1ZT1cInt7IGNhdGVnb3J5IH19XCI+e3tcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUcmFuc2xhdGVUbyhjYXRlZ29yeT8udG9Mb3dlckNhc2UoKSkgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3BpbkNvZGVcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyAndXNlclByb2ZpbGUub2ZmaWNlUGluQ29kZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cImVtYWlsXCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgbWF4bGVuZ3RoPVwiNlwiIGZvcm1Db250cm9sTmFtZT1cInBpbkNvZGVcIiBwbGFjZWhvbGRlcj1cIkVudGVyIHBpbmNvZGVcIi8+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJtYXQtZXJyb3JcIiAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybT8uZ2V0KCdwaW5Db2RlJyk/Lmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uaW52YWxpZFBpbkNvZGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9tYXQtZXJyb3I+ICAgICAgICAgIFxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dzaG93Q2FkcmVEZXRhaWxzICAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZnJvbUdvdk9yZ2FuaXphdGlvbicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJpc0NhZHJlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJnZXRJc0NhZHJlU3RhdHVzKCRldmVudC52YWx1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBjYWRyZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwidHJ1ZVwiPlllczwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gW3ZhbHVlXT1cImZhbHNlXCI+Tm88L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiBpc0NhZHJlU3RhdHVzICAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8udHlwZU9mQ2l2aWxTZXJ2aWNlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cInR5cGVPZkNpdmlsU2VydmljZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwiZ2V0U2VydmljZSgkZXZlbnQudmFsdWUpXCIgIHBsYWNlaG9sZGVyPVwiU2VsZWN0IHR5cGUgb2YgY2l2aWwgc2VydmljZVwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgc2VydmljZSBvZiBjaXZpbFNlcnZpY2VUeXBlc1wiIFt2YWx1ZV09XCJzZXJ2aWNlXCI+e3sgc2VydmljZSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKS52YWx1ZSAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uc2VydmljZVR5cGUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwic2VydmljZVR5cGVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uU2VydmljZVNlbGVjdCgkZXZlbnQpXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3Qgc2VydmljZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZXJ2aWNlIG9mIHNlcnZpY2VOYW1lXCIgW3ZhbHVlXT1cInNlcnZpY2VcIj57eyBzZXJ2aWNlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAmJiBcbiAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlIFxuICAgICAgICAgICAgICAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCd0eXBlT2ZDaXZpbFNlcnZpY2UnKS52YWx1ZSAmJiAoXG4gICAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIEFkbWluaXN0cmF0aXZlIFNlcnZpY2UgKElBUyknIHx8IFxuICAgICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSA9PT0gJ0luZGlhbiBQb2xpY2UgU2VydmljZSAoSVBTKScgfHwgXG4gICAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIEZvcmVzdCBTZXJ2aWNlIChJRm9TKScgXG4gICAgICAgICAgICAgICAgKSAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uY2FkcmUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY2FkcmVOYW1lXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJvbkNhZHJlU2VsZWN0KCRldmVudC52YWx1ZSlcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBjYWRyZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzdGF0ZSBvZiBjYWRyZVwiIFt2YWx1ZV09XCJzdGF0ZVwiPnt7IHN0YXRlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiIXNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKSAmJiAodXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAmJiBcbiAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKS52YWx1ZSAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCd0eXBlT2ZDaXZpbFNlcnZpY2UnKS52YWx1ZSAmJiAoXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSA9PT0gJ0luZGlhbiBBZG1pbmlzdHJhdGl2ZSBTZXJ2aWNlIChJQVMpJyB8fCBcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIFBvbGljZSBTZXJ2aWNlIChJUFMpJyB8fCBcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIEZvcmVzdCBTZXJ2aWNlIChJRm9TKScgXG4gICAgICAgICAgICApICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlTmFtZScpLnZhbHVlKSAgPyB0cnVlIDogKCh1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICYmIFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKS52YWx1ZSBcbiAgICAgICAgICAgICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIChcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICE9PSAnSW5kaWFuIEFkbWluaXN0cmF0aXZlIFNlcnZpY2UgKElBUyknICYmIFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgIT09ICdJbmRpYW4gUG9saWNlIFNlcnZpY2UgKElQUyknICYmIFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgIT09ICdJbmRpYW4gRm9yZXN0IFNlcnZpY2UgKElGb1MpJyBcbiAgICAgICAgICAgICkpKSA/IHRydWUgOiBmYWxzZVwiPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmJhdGNoJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNhZHJlQmF0Y2hcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBiYXRjaFwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHllYXIgb2YgeWVhckFycmF5XCIgW3ZhbHVlXT1cInllYXJcIj57eyB5ZWFyIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlICYmICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJykudmFsdWUgJiYgIXNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZCBtYi0zXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2FkcmVDb250cm9sLW5hbWVcIj57e2NhZHJlQ29udHJvbGxpbmdBdXRob3JpdHl9fTwvc3Bhbj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bmctY29udGFpbmVyPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBmbGV4IGZsZXgtcm93IGdhcC00IGp1c3RpZnktZW5kIG1hcmdpbi10b3AtbVwiPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJzYXZlLWJ1dHRvblwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInVzZXJEZXRhaWxzRm9ybT8uaW52YWxpZCB8fCAhbVZlcmlmaWVkIHx8ICFlVmVyaWZpZWRcIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdEZvcm0odXNlckRldGFpbHNGb3JtKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5zYXZlQ2hhbmdlcycgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgIDwvZm9ybT5cbiAgICA8L2Rpdj5cbiAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiYWRkTG9hZGVyID4gMFwiID5cbiAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNlbnRlciBteS0yIGxvYWRlciBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiPlxuICAgICAgICA8bWF0LXNwaW5uZXIgY2xhc3M9XCJpbmxpbmUtYmxvY2tcIj48L21hdC1zcGlubmVyPlxuICAgICAgPC9kaXY+XG4gICAgPC9uZy1jb250YWluZXI+XG48L2Rpdj5cbiJdfQ==
1851
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJyYXJ5L3N1bmJpcmQtY2IvdG9jL3NyYy9saWIvY29tcG9uZW50cy9lbnJvbGwtcHJvZmlsZS1mb3JtL2Vucm9sbC1wcm9maWxlLWZvcm0uY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicmFyeS9zdW5iaXJkLWNiL3RvYy9zcmMvbGliL2NvbXBvbmVudHMvZW5yb2xsLXByb2ZpbGUtZm9ybS9lbnJvbGwtcHJvZmlsZS1mb3JtLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxTQUFTLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBYyxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUE7QUFDOUYsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFbkUsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFekYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQTtBQUM5QixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUt0RSxPQUFPLEVBQXNDLHNCQUFzQixJQUFJLGVBQWUsRUFBRSxNQUFNLGlDQUFpQyxDQUFBO0FBRS9ILG9CQUFvQjtBQUNwQixPQUFPLENBQUMsTUFBTSxRQUFRLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFLdEIsTUFBTSxjQUFjLEdBQUcsbUJBQW1CLENBQUE7QUFDMUMsTUFBTSxnQkFBZ0IsR0FBRyxpQkFBaUIsQ0FBQTtBQUMxQyxNQUFNLGNBQWMsR0FBRyxjQUFjLENBQUE7QUFDckMsb0JBQW9CO0FBQ3BCLE1BQU0sYUFBYSxHQUFHLHFIQUFxSCxDQUFB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QUF3QixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUNyQyxJQUFJLENBQUMscUJBQXFCLEdBQUcsRUFBRSxDQUFBO1NBQ2hDO1FBQ0QsSUFBSSxDQUFDLDhCQUE4QixFQUFFLENBQUE7SUFDdkMsQ0FBQzsrR0E3MERVLDBCQUEwQiw0U0ErSDNCLGVBQWU7bUdBL0hkLDBCQUEwQiwwc0JDL0J2Qyx1MXhCQXdaQTs7NEZEelhhLDBCQUEwQjtrQkFMdEMsU0FBUzsrQkFDRSw0QkFBNEI7OzBCQW1JbkMsTUFBTTsyQkFBQyxlQUFlOzRDQW5GaUIsUUFBUTtzQkFBakQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO2dCQUNPLGFBQWE7c0JBQTNELFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTtnQkFtRXZCLE9BQU87c0JBQTVCLFNBQVM7dUJBQUMsU0FBUztnQkFDRyxRQUFRO3NCQUE5QixTQUFTO3VCQUFDLFVBQVU7Z0JBQ1MsZUFBZTtzQkFBNUMsU0FBUzt1QkFBQyxpQkFBaUI7Z0JBQ0csZ0JBQWdCO3NCQUE5QyxTQUFTO3VCQUFDLGtCQUFrQjtnQkFnSDdCLGtCQUFrQjtzQkFGakIsWUFBWTt1QkFBQyxnQkFBZ0IsRUFBRSxDQUFDLFFBQVEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJ1xuaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIEluamVjdCwgVmlld0NoaWxkLCBFbGVtZW50UmVmLCBIb3N0TGlzdGVuZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJ1xuaW1wb3J0IHsgVXNlclByb2ZpbGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci1wcm9maWxlLnNlcnZpY2UnXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBzdGFydFdpdGgsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgTnNVc2VyUHJvZmlsZURldGFpbHMgfSBmcm9tICcuLi8uLi9tb2RlbHMvdXNlci1wcm9maWxlLm1vZGVsJ1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInXG5pbXBvcnQgeyBQcm9maWxlVjJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcHJvZmlsZS12Mi5zZXJ2aWNlJ1xuaW1wb3J0IHsgT3RwU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL290cC5zZXJ2aWNlJ1xuaW1wb3J0IHsgTlBTR3JpZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ucHMtZ3JpZC5zZXJ2aWNlJ1xuaW1wb3J0IHsgTWF0TGVnYWN5RGlhbG9nUmVmIGFzIE1hdERpYWxvZ1JlZiwgTUFUX0xFR0FDWV9ESUFMT0dfREFUQSBhcyBNQVRfRElBTE9HX0RBVEEgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktZGlhbG9nJ1xuaW1wb3J0IHsgTWF0TGVnYWN5U25hY2tCYXIgYXMgTWF0U25hY2tCYXIgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9sZWdhY3ktc25hY2stYmFyJ1xuLyogdHNsaW50OmRpc2FibGUgKi9cbmltcG9ydCBfIGZyb20gJ2xvZGFzaCdcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJ1xuLy8gaW1wb3J0IHsgU2lnbnVwU2VydmljZSB9IGZyb20gJ3NyYy9hcHAvcm91dGVzL3B1YmxpYy9wdWJsaWMtc2lnbnVwL3NpZ251cC5zZXJ2aWNlJ1xuaW1wb3J0IHsgZGVzaWduYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvcHJvZmlsZS1yZXZhbXAubW9kZWwnXG5cbmNvbnN0IE1PQklMRV9QQVRURVJOID0gL15bMF0/WzY3ODldXFxkezl9JC9cbmNvbnN0IFBJTl9DT0RFX1BBVFRFUk4gPSAvXlsxLTldWzAtOV17NX0kL1xuY29uc3QgRU1QX0lEX1BBVFRFUk4gPSAvXlthLXowLTldKyQvaVxuLyogdHNsaW50OmRpc2FibGUgKi9cbmNvbnN0IEVNQUlMX1BBVFRFUk4gPSAvXlthLXpBLVowLTldK1thLXpBLVowLTkuXy1dKlthLXpBLVowLTldK0BbYS16QS1aMC05XSsoWy1hLXpBLVowLTldKlthLXpBLVowLTldKyk/KFxcLlthLXpBLVowLTktXSspKlxcLlthLXpBLVpdezIsNH0kL1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICd3cy1hcHAtZW5yb2xsLXByb2ZpbGUtZm9ybScsXG4gIHRlbXBsYXRlVXJsOiAnLi9lbnJvbGwtcHJvZmlsZS1mb3JtLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vZW5yb2xsLXByb2ZpbGUtZm9ybS5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBFbnJvbGxQcm9maWxlRm9ybUNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG4gIHB1YmxpYyBhZnRlclN1Ym1pdEFjdGlvbiA9IHRoaXMuY2hlY2tBZnRlclN1Ym1pdC5iaW5kKHRoaXMpXG4gIGlzUmVhZE9ubHkgPSBmYWxzZVxuICBiYXRjaERldGFpbHM6IGFueVxuICBjdXN0b21Gb3JtOiBib29sZWFuID0gZmFsc2VcbiAgdXNlckRldGFpbHNGb3JtOiBGb3JtR3JvdXBcbiAgZ3JvdXBEYXRhOiBhbnkgfCB1bmRlZmluZWRcbiAgcHJpdmF0ZSBkZXN0cm95U3ViamVjdCQgPSBuZXcgU3ViamVjdCgpXG4gIGRlc2lnbmF0aW9uc01ldGE6IGFueSA9IFtdXG4gIC8vIGZpbHRlckRlc2lnbmF0aW9uc01ldGE6IGFueSA9IFtdXG4gIGVVc2VyR2VuZGVyID0gT2JqZWN0LmtleXMoTnNVc2VyUHJvZmlsZURldGFpbHMuRVVzZXJHZW5kZXIpXG4gIG1hc3Rlckxhbmd1YWdlczogYW55XG4gIG1hc3Rlckxhbmd1YWdlQmFja3VwOiBhbnlcbiAgZUNhdGVnb3J5ID0gT2JqZWN0LmtleXMoTnNVc2VyUHJvZmlsZURldGFpbHMuRUNhdGVnb3J5KVxuICB1c2VyUHJvZmlsZU9iamVjdDogYW55XG4gIGVsaWdpYmxlOiBib29sZWFuID0gZmFsc2VcbiAgaXNDYWRyZVN0YXR1cyA9IGZhbHNlXG4gIHNob3dCYXRjaEZvck5vQ2FkcmUgPSB0cnVlXG4gIGNpdmlsU2VydmljZURhdGE6IGFueVxuICBjaXZpbFNlcnZpY2VUeXBlczogYW55XG4gIHNlcnZpY2VOYW1lOiBhbnlcbiAgc2VydmljZVR5cGU6IGFueVxuICBzZXJ2aWNlTGlzdERhdGE6IGFueVxuICBzZXJ2aWNlSWQ6IGFueVxuICBlcnJvck1lc3NhZ2U6IGFueVxuICBzZWxlY3RlZFNlcnZpY2VOYW1lOiBhbnlcbiAgc2VsZWN0ZWRTZXJ2aWNlOiBhbnlcbiAgY2l2aWxTZXJ2aWNlTmFtZTogYW55XG4gIGNpdmlsU2VydmljZUlkOiBhbnlcbiAgY2FkcmVJZDogYW55XG4gIGNhZHJlOiBhbnlcbiAgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eTogYW55XG4gIHN0YXJ0QmF0Y2g6IGFueVxuICBlbmRCYXRjaDogYW55XG4gIHllYXJBcnJheTogYW55XG4gIGV4Y2x1c2lvblllYXI6IGFueVxuICBzZWxlY3RlZENhZHJlTmFtZTogYW55XG4gIHNlbGVjdGVkQ2FkcmU6IGFueVxuICB2ZXJpZnlNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZVxuICBvdHBTZW50OiBib29sZWFuID0gZmFsc2VcbiAgZW1haWxPdHBTZW50OiBib29sZWFuID0gZmFsc2VcbiAgb3RwRW50ZXJlZCA9ICcnXG4gIG1WZXJpZmllZDogYm9vbGVhbiA9IGZhbHNlXG4gIGVWZXJpZmllZDogYm9vbGVhbiA9IGZhbHNlXG4gIEBWaWV3Q2hpbGQoJ3RpbWVyRGl2JywgeyBzdGF0aWM6IGZhbHNlIH0pIHRpbWVyRGl2ICE6IGFueVxuICBAVmlld0NoaWxkKCdlbWFpbFRpbWVyRGl2JywgeyBzdGF0aWM6IGZhbHNlIH0pIGVtYWlsVGltZXJEaXYgITogYW55XG4gIHRpbWVMZWZ0ID0gMTUwXG4gIGVtYWlsVGltZUxlZnQgPSAxNTBcbiAgaW50ZXJ2YWw6IGFueVxuICBlbWFpbEludGVydmFsOiBhbnlcbiAgc2hvd1Jlc2VuZE9UUCA9IGZhbHNlXG4gIHNob3dFbWFpbFJlc2VuZE9UUCA9IGZhbHNlXG4gIG90cEZvcm06IEZvcm1Hcm91cFxuICBlbWFpbE90cEZvcm06IEZvcm1Hcm91cFxuICBzaG93bmFtZSA9IGZhbHNlXG4gIHNob3dEZXNpZ25hdGlvbiA9IGZhbHNlXG4gIHNob3dHcm91cCA9IGZhbHNlXG4gIHNob3dFbXBsb3llZUNvZGUgPSBmYWxzZVxuICBzaG93TW9iaWxlID0gZmFsc2VcbiAgc2hvd0dlbmRlciA9IGZhbHNlXG4gIHNob3dEb2IgPSBmYWxzZVxuICBzaG93Q2F0ZWdvcnkgPSBmYWxzZVxuICBzaG93RGVjaW1hbE1lZGl1bSA9IGZhbHNlXG4gIHNob3dQaW5Db2RlID0gZmFsc2VcbiAgc2hvd0NhZHJlRGV0YWlscyA9IGZhbHNlXG4gIHVwZGF0ZVByb2ZpbGUgPSBmYWxzZVxuICBwZW5kaW5nRmlsZWRzOiBhbnlcbiAgcEdyb3VwOiBhbnlcbiAgcERlc2lnbmF0aW9uOiBhbnlcbiAgaXNMb2FkaW5nOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0VtcGxveWVlQ29kZTogYm9vbGVhbiA9IGZhbHNlXG4gIGNhbnNob3dNb2JpbGU6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93R2VuZGVyOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd0RvYjogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dEb21pY2lsZU1lZGl1bTogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dDYXRlZ29yeTogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dwaW5Db2RlOiBib29sZWFuID0gZmFsc2VcbiAgY2FuU2hvd3Nob3dDYWRyZURldGFpbHM6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93R3JvdXA6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93RGVzaWduYXRpb246IGJvb2xlYW4gPSBmYWxzZVxuICBzZWxlY3RlZERhdGU6IGFueVxuICBzaG93Q291bnRlcjogbnVtYmVyID0gMFxuICBkaXNhYmxlQ291bnRlcjogbnVtYmVyID0gMFxuICBjYW5TaG93RW1haWw6IGJvb2xlYW4gPSBmYWxzZVxuICBzaG93RW1haWw6IGJvb2xlYW4gPSBmYWxzZVxuICBjYW5TaG93TmFtZTogYm9vbGVhbiA9IGZhbHNlXG4gIGNhblNob3dPcmc6IGJvb2xlYW4gPSBmYWxzZVxuICBzaG93T3JnOiBib29sZWFuID0gZmFsc2VcbiAgc3VydmV5SWQ6IGFueVxuICBzaG93RG9wdENoYW5nZXM6IGJvb2xlYW4gPSBmYWxzZVxuICBwcm9maWxlRm9ybVR5cGU6IGFueVxuICB2ZXJpZnlFbWFpbCA9IGZhbHNlXG4gIGFwcHJvdmVkRG9tYWluTGlzdDogYW55ID0gW11cbiAgY29udGV4dFRva2VuOiBhbnlcbiAgdmVyaWZpZWRFbWFpbE90cDogc3RyaW5nID0gJydcbiAgdmVyaWZpZWRQaG9uZU90cDogc3RyaW5nID0gJydcbiAgY3VycmVudERhdGUgPSBuZXcgRGF0ZSgpXG4gIG9wZW5EZXNpZ25hdGlvbkRyb3Bkb3duID0gZmFsc2VcbiAgb3Blbkxhbmd1YWdlRHJvcGRvd24gPSBmYWxzZVxuICBjYW5TaG93T3RoZXJEZXNpZ25hdGlvbiA9IGZhbHNlXG4gIGRlc2lnbmF0aW9uTGlzdExvYWRDb3VudCA9IDUwXG4gIGFkZExvYWRlciA9IDBcbiAgaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICBkZXNpZ25hdGlvbkRlZmF1bHRMb2FkQ291bnQgPSAgNTBcbiAgZGVzaWdhbnRpb25GaWx0ZXJFbmFibGUgPSBmYWxzZVxuICBvcmdhbmlzYXRpb25JZCA9ICcnXG4gIHNlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zID0gZmFsc2U7XG4gIGRlc2lnbmF0aW9uc09mZnNldCA9IDA7XG4gIGRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9ICcnO1xuICBkZXNpZ25hdGlvbnNUb3RhbENvdW50ID0gMDtcbiAgZm9ybUlkOiBzdHJpbmcgPSAnJztcbiAgZm9ybXNEZXRpbHM6IGFueTtcbiAgQFZpZXdDaGlsZCgndGV4dEJveCcpIHRleHRCb3ghOiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duJykgZHJvcGRvd24hOiBFbGVtZW50UmVmXG4gIEBWaWV3Q2hpbGQoJ2xhbmd1YWdlVGV4dEJveCcpIGxhbmd1YWdlVGV4dEJveCE6IEVsZW1lbnRSZWZcbiAgQFZpZXdDaGlsZCgnbGFuZ3VhZ2VEcm9wZG93bicpIGxhbmd1YWdlRHJvcGRvd24hOiBFbGVtZW50UmVmXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgc25hY2tCYXI6IE1hdFNuYWNrQmFyLFxuICAgIHB1YmxpYyBkaWFsb2dSZWY6IE1hdERpYWxvZ1JlZjxFbnJvbGxQcm9maWxlRm9ybUNvbXBvbmVudD4sXG4gICAgcHJpdmF0ZSB1c2VyUHJvZmlsZVNlcnZpY2U6IFVzZXJQcm9maWxlU2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1NyYzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcHJvZmlsZVYyU3ZjOiBQcm9maWxlVjJTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3RwU2VydmljZTogT3RwU2VydmljZSxcbiAgICBwcml2YXRlIG5wc1N2YzogTlBTR3JpZFNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgZGF0ZVBpcGU6IERhdGVQaXBlLFxuICAgIC8vIHByaXZhdGUgc2lnbnVwU2VydmljZTogU2lnbnVwU2VydmljZSxcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHVibGljIGRhdGE6IGFueSxcbiAgKSB7XG5cbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2Uuc2V0RGVmYXVsdExhbmcoJ2VuJylcbiAgICAgIGNvbnN0IGxhbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZUxhbmd1YWdlJykhXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UudXNlKGxhbmcpXG4gICAgfVxuXG4gICAgdGhpcy5iYXRjaERldGFpbHMgPSB0aGlzLmRhdGEuYmF0Y2hEYXRhXG4gICAgdGhpcy5zdXJ2ZXlJZCA9IHRoaXMuZGF0YS5zdXJ2ZXlJZFxuICAgIHRoaXMuc2hvd0RvcHRDaGFuZ2VzID0gdGhpcy5kYXRhLnNob3dEb3B0Q2hhbmdlc1xuICAgIHRoaXMucHJvZmlsZUZvcm1UeXBlID0gdGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzXG4gICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0gPSBuZXcgRm9ybUdyb3VwKHtcbiAgICAgIG5hbWU6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBvcmdhbmlzYXRpb246IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBncm91cDogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGRlc2lnbmF0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgZW1wbG95ZWVDb2RlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgcHJpbWFyeUVtYWlsOiBuZXcgRm9ybUNvbnRyb2woJycsIFtWYWxpZGF0b3JzLnBhdHRlcm4oRU1BSUxfUEFUVEVSTildKSxcbiAgICAgIG1vYmlsZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGdlbmRlcjogbmV3IEZvcm1Db250cm9sKCcnLCBbXSksXG4gICAgICBkb2I6IG5ldyBGb3JtQ29udHJvbCgnJywgW10pLFxuICAgICAgZG9taWNpbGVNZWRpdW06IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYXRlZ29yeTogbmV3IEZvcm1Db250cm9sKCcnLCBbXSksXG4gICAgICBwaW5Db2RlOiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgaXNDYWRyZTogbmV3IEZvcm1Db250cm9sKCksXG4gICAgICB0eXBlT2ZDaXZpbFNlcnZpY2U6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBzZXJ2aWNlVHlwZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGNhZHJlTmFtZTogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIGNhZHJlQmF0Y2g6IG5ldyBGb3JtQ29udHJvbCgnJyksXG4gICAgICBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5OiBuZXcgRm9ybUNvbnRyb2woJycpLFxuICAgICAgb3RoZXJEZXNpZ25hdGlvbjogbmV3IEZvcm1Db250cm9sKCcnKSxcbiAgICAgIHNlYXJjaERlc2lnbmF0aW9uOiBuZXcgRm9ybUNvbnRyb2woJycpXG4gICAgfSlcbiAgICB0aGlzLmlzTG9hZGluZyA9IHRydWVcbiAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0ID0gdGhpcy5jb25maWdTcmMudW5NYXBwZWRVc2VyXG4gICAgdGhpcy5vcmdhbmlzYXRpb25JZCA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdyb290T3JnSWQnLCBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncGVyc29uYWxEZXRhaWxzLnJvb3RPcmdJZCcsICcnKSlcblxuICAgIHRoaXMub3RwRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgb3RwOiBuZXcgRm9ybUNvbnRyb2woJycsIFZhbGlkYXRvcnMucmVxdWlyZWQpXG4gICAgfSlcbiAgICB0aGlzLmVtYWlsT3RwRm9ybSA9IG5ldyBGb3JtR3JvdXAoe1xuICAgICAgZU90cDogbmV3IEZvcm1Db250cm9sKCcnLCBWYWxpZGF0b3JzLnJlcXVpcmVkKVxuICAgIH0pXG5cbiAgICAvLyBUbyBjaGVjayB0aGUgbW9iaWxlIG51bWJlciBlbnRlcmVkIGJ5IHRoZSB1c2VyIGlzIHNhbWUgb3Igbm90LCB2YWxpZGF0aW5nIHRoZSBtb2JpbGUgbnVtYmVyIHRvIHNob3cgdGhlIEdldCBPVFAuXG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnbW9iaWxlJykpIHtcbiAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnbW9iaWxlJykhLnZhbHVlQ2hhbmdlc1xuICAgICAgICAuc3Vic2NyaWJlKHJlcyA9PiB7XG4gICAgICAgICAgaWYgKHJlcyAmJiByZXMgIT09IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSB8fFxuICAgICAgICAgICAgIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnBob25lVmVyaWZpZWQpIHtcbiAgICAgICAgICAgIGlmIChNT0JJTEVfUEFUVEVSTi50ZXN0KHJlcykpIHtcbiAgICAgICAgICAgICAgdGhpcy52ZXJpZnlNb2JpbGUgPSB0cnVlXG4gICAgICAgICAgICAgIHRoaXMubVZlcmlmaWVkID0gZmFsc2VcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMudmVyaWZ5TW9iaWxlID0gZmFsc2VcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy52ZXJpZnlNb2JpbGUgPSBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBUbyBjaGVjayB0aGUgZW1haWwgZW50ZXJlZCBieSB0aGUgdXNlciBpcyBzYW1lIG9yIG5vdCwgdmFsaWRhdGluZyB0aGUgZW1haWwgdG8gc2hvdyB0aGUgR2V0IE9UUC5cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdwcmltYXJ5RW1haWwnKSkge1xuICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdwcmltYXJ5RW1haWwnKSEudmFsdWVDaGFuZ2VzXG4gICAgICAgIC5zdWJzY3JpYmUocmVzID0+IHtcbiAgICAgICAgICBpZiAocmVzICYmIHJlcyAhPT0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsKSB7XG4gICAgICAgICAgICBpZiAoRU1BSUxfUEFUVEVSTi50ZXN0KHJlcykpIHtcbiAgICAgICAgICAgICAgdGhpcy52ZXJpZnlFbWFpbCA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy5lVmVyaWZpZWQgPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhpcy52ZXJpZnlFbWFpbCA9IGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudmVyaWZ5RW1haWwgPSBmYWxzZVxuICAgICAgICAgICAgdGhpcy5lVmVyaWZpZWQgPSB0cnVlXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHNjcm9sbFRvQWN0aXZlKHR5cGU6IGFueSk6IHZvaWQge1xuICAgIGxldCBhY3RpdmVFbGVtZW50OiBhbnlcbiAgICBsZXQgY29udGFpbmVyOiBhbnlcbiAgICBpZiAodHlwZSA9PT0gJ2xhbmd1YWdlJykge1xuICAgICAgY29udGFpbmVyID0gdGhpcy5sYW5ndWFnZURyb3Bkb3duLm5hdGl2ZUVsZW1lbnRcbiAgICAgIGFjdGl2ZUVsZW1lbnQgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcignLmxhbmd1YWdlLWl0ZW0tYWN0aXZlJylcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdkZXNpZ25hdGlvbicpIHtcbiAgICAgIGNvbnRhaW5lciA9IHRoaXMuZHJvcGRvd24ubmF0aXZlRWxlbWVudFxuICAgICAgYWN0aXZlRWxlbWVudCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCcuaXRlbS1hY3RpdmUnKVxuICAgIH1cbiAgICBpZiAoYWN0aXZlRWxlbWVudCkge1xuICAgICAgYWN0aXZlRWxlbWVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiAnc21vb3RoJywgYmxvY2s6ICduZWFyZXN0JyB9KTtcbiAgICB9XG4gIH1cblxuICBASG9zdExpc3RlbmVyKCdkb2N1bWVudDpjbGljaycsIFsnJGV2ZW50J10pXG5cbiAgaGFuZGxlQ2xpY2tPdXRzaWRlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgY29uc3QgY2xpY2tlZEVsZW1lbnQgPSBldmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnRcbiAgICBpZiAoXG4gICAgICB0aGlzLnRleHRCb3ggJiYgIXRoaXMudGV4dEJveC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSAmJlxuICAgICAgdGhpcy5kcm9wZG93biAmJiAhdGhpcy5kcm9wZG93bi5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KVxuICAgICkge1xuICAgICAgdGhpcy5vcGVuRGVzaWduYXRpb25Ecm9wZG93biA9IGZhbHNlXG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMubGFuZ3VhZ2VUZXh0Qm94ICYmICF0aGlzLmxhbmd1YWdlVGV4dEJveC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGNsaWNrZWRFbGVtZW50KSAmJlxuICAgICAgdGhpcy5sYW5ndWFnZURyb3Bkb3duICYmICF0aGlzLmxhbmd1YWdlRHJvcGRvd24ubmF0aXZlRWxlbWVudC5jb250YWlucyhjbGlja2VkRWxlbWVudClcbiAgICApIHtcbiAgICAgIHRoaXMub3Blbkxhbmd1YWdlRHJvcGRvd24gPSBmYWxzZVxuICAgIH1cbiAgfVxuICBvbkRlc2lnbmF0aW9uc0ZvY3VzKCkge1xuICAgIC8vIHRoaXMub3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gPSB0cnVlXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnNjcm9sbFRvQWN0aXZlKCdkZXNpZ25hdGlvbicpXG4gICAgfSwgMTAwKVxuICB9XG4gIG9uTGFuZ3VhZ2VGb2N1cygpIHtcbiAgICB0aGlzLm9wZW5MYW5ndWFnZURyb3Bkb3duID0gdHJ1ZVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5zY3JvbGxUb0FjdGl2ZSgnbGFuZ3VhZ2UnKVxuICAgIH0sIDEwMClcbiAgfVxuXG4gIGZpbHRlckxhbmd1YWdlKHZhbHVlOiBhbnkpIHtcbiAgICBpZiAodmFsdWUubGVuZ3RoKSB7XG4gICAgICB0aGlzLm1hc3Rlckxhbmd1YWdlcyA9IHRoaXMubWFzdGVyTGFuZ3VhZ2VCYWNrdXAuZmlsdGVyKCh2YWw6IGFueSkgPT5cbiAgICAgICAgdmFsICYmIHZhbC5uYW1lLnRyaW0oKS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHZhbHVlLnRvTG93ZXJDYXNlKCkpXG4gICAgICApXG4gICAgICBpZiAodGhpcy5tYXN0ZXJMYW5ndWFnZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHVzZXJuYW1lQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZG9taWNpbGVNZWRpdW0nKVxuICAgICAgICBpZiAodXNlcm5hbWVDb250cm9sKSB7XG4gICAgICAgICAgdXNlcm5hbWVDb250cm9sLnNldEVycm9ycyh7IHJlcXVpcmVkOiB0cnVlIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMub3Blbkxhbmd1YWdlRHJvcGRvd24gPSB0cnVlXG4gIH1cblxuICAvLyBmaWx0ZXJkZXNpZ25hdGlvbih2YWx1ZTogYW55KSB7XG4gIC8vICAgaWYgKHZhbHVlLmxlbmd0aCkge1xuICAvLyAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9dHJ1ZVxuICAvLyAgICAgdGhpcy5maWx0ZXJEZXNpZ25hdGlvbnNNZXRhID0gdGhpcy5kZXNpZ25hdGlvbnNNZXRhLmZpbHRlcigodmFsOiBhbnkpID0+XG4gIC8vICAgICAgIHZhbCAmJiB2YWwubmFtZS50cmltKCkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh2YWx1ZS50b0xvd2VyQ2FzZSgpKVxuICAvLyAgICAgKVxuICAvLyAgICAgaWYgKHRoaXMuZmlsdGVyRGVzaWduYXRpb25zTWV0YS5sZW5ndGggPT09IDApIHtcbiAgLy8gICAgICAgY29uc3QgdXNlcm5hbWVDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdkZXNpZ25hdGlvbicpXG4gIC8vICAgICAgIGlmICh1c2VybmFtZUNvbnRyb2wpIHtcbiAgLy8gICAgICAgICB1c2VybmFtZUNvbnRyb2wuc2V0RXJyb3JzKHsgcmVxdWlyZWQ6IHRydWUgfSk7XG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9IGVsc2Uge1xuICAvLyAgICAgdGhpcy5maWx0ZXJEZXNpZ25hdGlvbnNNZXRhID0gdGhpcy5kZXNpZ25hdGlvbnNNZXRhLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAvLyAgICAgdGhpcy5kZXNpZ2FudGlvbkZpbHRlckVuYWJsZSA9ZmFsc2VcblxuICAvLyAgICAgdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQgPSB0aGlzLmRlc2lnbmF0aW9uRGVmYXVsdExvYWRDb3VudDtcbiAgLy8gICB9XG4gIC8vICAgLy8gdGhpcy5vcGVuRGVzaWduYXRpb25Ecm9wZG93biA9IHRydWVcbiAgLy8gfVxuXG4gIC8vIGFzeW5jIGdldE1hc3RlckRlc2lnbmF0aW9uKCkge1xuICAvLyAgIHRoaXMuc2lnbnVwU2VydmljZS5nZXRPcmdSZWFkRGF0YSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnJvb3RPcmdJZCkuc3Vic2NyaWJlKChyZXN1bHQ6IGFueSkgPT4ge1xuICAvLyAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQuZnJhbWV3b3JraWQpIHtcbiAgLy8gICAgICAgdGhpcy5zaWdudXBTZXJ2aWNlLmdldEZyYW1ld29ya0luZm8ocmVzdWx0LmZyYW1ld29ya2lkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gIC8vICAgICAgICAgY29uc3QgZnJhbWV3b3JrRGV0YWlscyA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5mcmFtZXdvcmsnKVxuICAvLyAgICAgICAgIGNvbnN0IGNhdGVnb3JpZXNPZkZyYW1ld29yayA9IF8uZ2V0KGZyYW1ld29ya0RldGFpbHMsICdjYXRlZ29yaWVzJywgW10pXG4gIC8vICAgICAgICAgY29uc3Qgb3JnYW5pc2F0aW9uc0xpc3QgPSB0aGlzLmdldFRlcm1zQnlDb2RlKGNhdGVnb3JpZXNPZkZyYW1ld29yaywgJ29yZycpXG4gIC8vICAgICAgICAgY29uc3QgZGlzT3JkZXJlZExpc3QgPSBfLmdldChvcmdhbmlzYXRpb25zTGlzdCwgJ1swXS5jaGlsZHJlbicsIFtdKVxuICAvLyAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IF8uc29ydEJ5KGRpc09yZGVyZWRMaXN0LCAnbmFtZScpXG4gIC8vICAgICAgICAgdGhpcy5maWx0ZXJEZXNpZ25hdGlvbnNNZXRhID0gdGhpcy5kZXNpZ25hdGlvbnNNZXRhLnNsaWNlKDAsIHRoaXMuZGVzaWduYXRpb25EZWZhdWx0TG9hZENvdW50KVxuICAvLyAgICAgICAgIGlmICh0aGlzLmNhblNob3dEZXNpZ25hdGlvbikge1xuICAvLyAgICAgICAgICAgbGV0IGZpZWxkID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdkZXNpZ25hdGlvbicpXG4gIC8vICAgICAgICAgICBpZiAoZmllbGQgJiYgZmllbGQudmFsdWUpIHtcbiAgLy8gICAgICAgICAgICAgbGV0IF92YWx1ZSA9IGZpZWxkLnZhbHVlLnRvTG93ZXJDYXNlKClcbiAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLmRlc2lnbmF0aW9uc01ldGEuZmluZCgoZDogYW55KSA9PiBkLm5hbWUudG9Mb3dlckNhc2UoKSA9PT0gX3ZhbHVlKSkge1xuICAvLyAgICAgICAgICAgICAgIGZpZWxkLnBhdGNoVmFsdWUoJycpXG4gIC8vICAgICAgICAgICAgIH1cbiAgLy8gICAgICAgICAgIH1cbiAgLy8gICAgICAgICB9XG4gIC8vICAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gIC8vICAgICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gIC8vICAgICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJyZWQ6JywgZXJyb3IpXG4gIC8vICAgICAgIH0pXG4gIC8vICAgICB9XG4gIC8vICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgLy8gICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuICAvLyAgICAgY29uc29sZS5lcnJvcignRXJyb3Igb2NjdXJyZWQ6JywgZXJyb3IpXG4gIC8vICAgfSlcbiAgLy8gfVxuXG4gIC8vIHByaXZhdGUgZ2V0VGVybXNCeUNvZGUoY2F0ZWdvcmllczogYW55W10sIGNvZGU6IHN0cmluZykge1xuICAvLyAgIGNvbnN0IHNlbGVjdGVkQ2F0ZWdvcnkgPSBjYXRlZ29yaWVzLmZpbHRlcihcbiAgLy8gICAgIChjYXRlZ29yeTogYW55KSA9PiBjYXRlZ29yeS5jb2RlID09PSBjb2RlXG4gIC8vICAgKTtcbiAgLy8gICByZXR1cm4gXy5nZXQoc2VsZWN0ZWRDYXRlZ29yeSwgJ1swXS50ZXJtcycsIFtdKTtcbiAgLy8gfVxuXG4gIHByZXZlbnRCbHVyKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG4gIHByZXZlbnRMYW5ndWFnZUJsdXIoZXZlbnQ6IE1vdXNlRXZlbnQpOiB2b2lkIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBzZWxlY3REZXNpZ25hdGlvbihkZXNpZ25hdGlvbjogYW55KSB7XG4gICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7IGRlc2lnbmF0aW9uOiBkZXNpZ25hdGlvbiB9KVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnb3RoZXJEZXNpZ25hdGlvbicpXG4gICAgaWYgKHRoaXMuc2hvd0RvcHRDaGFuZ2VzICYmIGRlc2lnbmF0aW9uID09PSAnT3RoZXJzJykge1xuICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgICBmaWVsZENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICB9XG4gICAgICB0aGlzLmNhblNob3dPdGhlckRlc2lnbmF0aW9uID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgIGZpZWxkQ29udHJvbC5jbGVhclZhbGlkYXRvcnMoKVxuICAgICAgICBmaWVsZENvbnRyb2wudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICB9XG4gICAgICB0aGlzLmNhblNob3dPdGhlckRlc2lnbmF0aW9uID0gZmFsc2VcbiAgICB9XG4gICAgdGhpcy5vcGVuRGVzaWduYXRpb25Ecm9wZG93biA9IGZhbHNlXG4gIH1cblxuXG4gIHNlbGVjdExhbmd1YWdlKGxhbmd1YWdlOiBhbnkpIHtcbiAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5wYXRjaFZhbHVlKHsgZG9taWNpbGVNZWRpdW06IGxhbmd1YWdlIH0pXG4gICAgdGhpcy5vcGVuTGFuZ3VhZ2VEcm9wZG93biA9IGZhbHNlXG4gIH1cblxuICBpc0VtYWlsQWxsb3dlZChlbWFpbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgY29uc3QgZG9tYWluID0gZW1haWwuc3BsaXQoJ0AnKVsxXVxuICAgIHJldHVybiBkb21haW4gPyB0aGlzLmFwcHJvdmVkRG9tYWluTGlzdC5pbmNsdWRlcyhkb21haW4pIDogZmFsc2VcbiAgfVxuXG4gIGhhbmRsZUdlbmVyYXRlRW1haWxPVFAodmVyaWZ5VHlwZT86IGFueSk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKHZlcmlmeVR5cGUpXG4gICAgdGhpcy51c2VyUHJvZmlsZVNlcnZpY2UuZ2V0V2hpdGVMaXN0RG9tYWluKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0ICYmIHJlc3BvbnNlLnJlc3VsdC5kb21haW5zICYmIHJlc3BvbnNlLnJlc3VsdC5kb21haW5zLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy5hcHByb3ZlZERvbWFpbkxpc3QgPSByZXNwb25zZS5yZXN1bHQuZG9tYWluc1xuICAgICAgICBpZiAodGhpcy5hcHByb3ZlZERvbWFpbkxpc3QgJiYgdGhpcy5hcHByb3ZlZERvbWFpbkxpc3QubGVuZ3RoICYmIHRoaXMuYXBwcm92ZWREb21haW5MaXN0Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBpZiAodGhpcy5pc0VtYWlsQWxsb3dlZCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZVsncHJpbWFyeUVtYWlsJ10pKSB7XG4gICAgICAgICAgICB0aGlzLm90cFNlcnZpY2Uuc2VuZEVtYWlsT3RwKHRoaXMudXNlckRldGFpbHNGb3JtLnZhbHVlWydwcmltYXJ5RW1haWwnXSlcbiAgICAgICAgICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgICAgICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWFpbE90cEZvcm0ucmVzZXQoKVxuICAgICAgICAgICAgICAgIGlmICh2ZXJpZnlUeXBlKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLmVtYWlsT3RwU2VudCA9IHRydWVcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhcnRFbWFpbFRpbWVyKClcbiAgICAgICAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdvdHBTZW50RW1haWwnKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnZW1haWxPVFBTZW50RmFpbCcpKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdlbWFpbEFwcHJvdmVkUG9wdXBNc2cnKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgaGFuZGxlR2VuZXJhdGVPVFAodmVyaWZ5VHlwZT86IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMub3RwU2VydmljZS5zZW5kT3RwKHRoaXMudXNlckRldGFpbHNGb3JtLnZhbHVlWydtb2JpbGUnXSlcbiAgICAgIC5waXBlKHRha2VVbnRpbCh0aGlzLmRlc3Ryb3lTdWJqZWN0JCkpXG4gICAgICAuc3Vic2NyaWJlKChfcmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ290cFNlbnRNb2JpbGUnKSlcbiAgICAgICAgdGhpcy5vdHBGb3JtLnJlc2V0KClcbiAgICAgICAgaWYgKHZlcmlmeVR5cGUpIHtcbiAgICAgICAgICB0aGlzLm90cFNlbnQgPSB0cnVlXG4gICAgICAgICAgdGhpcy5zdGFydFRpbWVyKClcbiAgICAgICAgICAvL3RoaXMuaGFuZGxlVmVyaWZ5T1RQKHZlcmlmeVR5cGUsIHRoaXMudXNlckRldGFpbHNGb3JtLnZhbHVlWydtb2JpbGUnXSlcbiAgICAgICAgfVxuICAgICAgfSwgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ21vYmlsZU9UUFNlbnRGYWlsJykpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVSZXNlbmRPVFAoKTogdm9pZCB7XG4gICAgdGhpcy50aW1lTGVmdCA9IDE1MFxuICAgIHRoaXMuc2hvd1Jlc2VuZE9UUCA9IHRydWVcbiAgICB0aGlzLnN0YXJ0VGltZXIoKVxuICAgIGxldCBvdHBWYWx1ZSQ6IGFueVxuICAgIG90cFZhbHVlJCA9IHRoaXMub3RwU2VydmljZS5yZXNlbmRPdHAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ21vYmlsZSddLnZhbHVlKVxuXG4gICAgb3RwVmFsdWUkLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnb3RwU2VudE1vYmlsZScpKVxuICAgICAgfSwgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCAnVW5hYmxlIHRvIHJlc2VuZCBPVFAsIHBsZWFzZSB0cnkgYWdhaW4gbGF0ZXIhJylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIGhhbmRsZVJlc2VuZEVtYWlsT1RQKCk6IHZvaWQge1xuICAgIHRoaXMuZW1haWxUaW1lTGVmdCA9IDE1MFxuICAgIHRoaXMuc2hvd0VtYWlsUmVzZW5kT1RQID0gdHJ1ZVxuICAgIHRoaXMuc3RhcnRFbWFpbFRpbWVyKClcbiAgICBsZXQgb3RwVmFsdWUkOiBhbnlcbiAgICBvdHBWYWx1ZSQgPSB0aGlzLm90cFNlcnZpY2Uuc2VuZEVtYWlsT3RwKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydwcmltYXJ5RW1haWwnXS52YWx1ZSlcbiAgICBvdHBWYWx1ZSQucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdvdHBTZW50RW1haWwnKSlcbiAgICAgIH0sIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXy5nZXQoZXJyb3IsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgJ1VuYWJsZSB0byByZXNlbmQgT1RQLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyIScpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICB2ZXJpZnlFbWFpbE9UUCgpOiB2b2lkIHtcbiAgICB0aGlzLm90cFNlcnZpY2UudmVyaWZ5RW1haWxPVFAodGhpcy5lbWFpbE90cEZvcm0uY29udHJvbHNbJ2VPdHAnXS52YWx1ZSwgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3ByaW1hcnlFbWFpbCddLnZhbHVlKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKF9yZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4odGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnT1RQU2VudFN1Y2Nlc3MnKSlcbiAgICAgICAgdGhpcy52ZXJpZnlFbWFpbCA9IHRydWVcbiAgICAgICAgdGhpcy5lVmVyaWZpZWQgPSB0cnVlXG4gICAgICAgIHRoaXMuZW1haWxPdHBTZW50ID0gZmFsc2VcbiAgICAgICAgdGhpcy5jb250ZXh0VG9rZW4gPSBfcmVzLnJlc3VsdC5jb250ZXh0VG9rZW5cbiAgICAgICAgdGhpcy52ZXJpZmllZEVtYWlsT3RwID0gdGhpcy5lbWFpbE90cEZvcm0uY29udHJvbHNbJ2VPdHAnXS52YWx1ZVxuICAgICAgICB0aGlzLmVtYWlsT3RwRm9ybS5yZXNldCgpXG4gICAgICB9LCAoZXJyb3I6IEh0dHBFcnJvclJlc3BvbnNlKSA9PiB7XG4gICAgICAgIGlmICghZXJyb3Iub2spIHtcbiAgICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oXy5nZXQoZXJyb3IsICdlcnJvci5wYXJhbXMuZXJybXNnJykgfHwgdGhpcy5oYW5kbGVUcmFuc2xhdGVUbygnT1RQVmVyaWZ5RmFpbGVkJykpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICB2ZXJpZnlNb2JpbGVPVFAoKTogdm9pZCB7XG4gICAgdGhpcy5vdHBTZXJ2aWNlLnZlcmlmeU9UUCh0aGlzLm90cEZvcm0uY29udHJvbHNbJ290cCddLnZhbHVlLCB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snbW9iaWxlJ10udmFsdWUpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBTZW50U3VjY2VzcycpKVxuICAgICAgICB0aGlzLnZlcmlmeU1vYmlsZSA9IHRydWVcbiAgICAgICAgdGhpcy5tVmVyaWZpZWQgPSB0cnVlXG4gICAgICAgIHRoaXMub3RwU2VudCA9IGZhbHNlXG4gICAgICAgIHRoaXMudmVyaWZpZWRQaG9uZU90cCA9IHRoaXMub3RwRm9ybS5jb250cm9sc1snb3RwJ10udmFsdWVcbiAgICAgICAgdGhpcy5vdHBGb3JtLnJlc2V0KClcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihfLmdldChlcnJvciwgJ2Vycm9yLnBhcmFtcy5lcnJtc2cnKSB8fCB0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdPVFBWZXJpZnlGYWlsZWQnKSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgfVxuXG4gIHN0YXJ0VGltZXIoKSB7XG4gICAgdGhpcy5pbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgIGlmICh0aGlzLnRpbWVMZWZ0ID4gMCkge1xuICAgICAgICB0aGlzLnRpbWVMZWZ0ID0gdGhpcy50aW1lTGVmdCAtIDFcbiAgICAgICAgaWYgKHRoaXMudGltZXJEaXYpIHtcbiAgICAgICAgICB0aGlzLnRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLnRpbWVMZWZ0IC8gNjApfW06ICR7dGhpcy50aW1lTGVmdCAlIDYwfXNgXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93UmVzZW5kT1RQID0gdHJ1ZVxuICAgICAgfVxuICAgIH0sIDEwMDApXG4gIH1cblxuICBzdGFydEVtYWlsVGltZXIoKSB7XG4gICAgdGhpcy5lbWFpbEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgaWYgKHRoaXMuZW1haWxUaW1lTGVmdCA+IDApIHtcbiAgICAgICAgdGhpcy5lbWFpbFRpbWVMZWZ0ID0gdGhpcy5lbWFpbFRpbWVMZWZ0IC0gMVxuICAgICAgICBpZiAodGhpcy5lbWFpbFRpbWVyRGl2KSB7XG4gICAgICAgICAgdGhpcy5lbWFpbFRpbWVyRGl2Lm5hdGl2ZUVsZW1lbnQuaW5uZXJIVE1MID0gYCR7TWF0aC5mbG9vcih0aGlzLmVtYWlsVGltZUxlZnQgLyA2MCl9bTogJHt0aGlzLmVtYWlsVGltZUxlZnQgJSA2MH1zYFxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjbGVhckludGVydmFsKHRoaXMuZW1haWxJbnRlcnZhbClcbiAgICAgICAgdGhpcy5zaG93RW1haWxSZXNlbmRPVFAgPSB0cnVlXG4gICAgICB9XG4gICAgfSwgMTAwMClcbiAgfVxuXG4gIHB1YmxpYyBjaGVja0FmdGVyU3VibWl0KF9lOiBhbnkpIHtcbiAgICAvLyB0aGlzLnJlbmRlclN1YmplY3QubmV4dCgpXG4gICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnRm9ybSBpcyBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5JylcbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmXG4gICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZVwiKSB7XG4gICAgICB0aGlzLnN1Ym1pdFN1cmV2eSh0cnVlKVxuICAgIH1cbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmICF0aGlzLnVwZGF0ZVByb2ZpbGUgJiZcbiAgICAgICh0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiRnVsbCBpR09UIHByb2ZpbGVcIiB8fFxuICAgICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMudXNlclByb2ZpbGVGaWxlZHMgPT09IFwiQ3VzdG9tIGlHT1QgcHJvZmlsZVwiKSkge1xuICAgICAgdGhpcy5zdWJtaXRTdXJldnkodHJ1ZSlcbiAgICB9XG4gICAgdGhpcy5vcGVuU25hY2tiYXIoJ0Zvcm0gaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseScpXG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIGNsb3NlUG9wdXAoKSB7XG4gICAgdGhpcy5kaWFsb2dSZWYuY2xvc2UodHJ1ZSlcbiAgfVxuXG4gIHByaXZhdGUgb3BlblNuYWNrYmFyKHByaW1hcnlNc2c6IHN0cmluZywgZHVyYXRpb246IG51bWJlciA9IDUwMDApIHtcbiAgICB0aGlzLnNuYWNrQmFyLm9wZW4ocHJpbWFyeU1zZywgJ1gnLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICB9KVxuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5mb3JtSWQgPSBfLmdldCh0aGlzLmRhdGEsICdiYXRjaERhdGEuYmF0Y2hBdHRyaWJ1dGVzLnByb2ZpbGVTdXJ2ZXlJZCcpXG4gICAgdGhpcy5nZXRGb3JtRGV0YWlscygpXG4gICAgdGhpcy5zZXRWYWx1ZUNoYW5nZUZ1bmN0aW9ucygpXG4gICAgdGhpcy5mZXRjaENhZHJlRGF0YSgpXG4gICAgdGhpcy5nZXRHcm91cERhdGEoKVxuICAgIHRoaXMuZ2V0UGVuZGluZ0RldGFpbHMoKVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gdGhpcy5sb2FkRGVzaWduYXRpb25zKClcbiAgICAgIHRoaXMuY2hlY2tTZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucygpO1xuICAgICAgLy90aGlzLmdldE1hc3RlckRlc2lnbmF0aW9uKClcbiAgICAgIHRoaXMuZ2V0TWFzdGVyTGFuZ3VhZ2UoKVxuICAgIH0sIDUwMClcbiAgfVxuXG4gIGdldEZvcm1EZXRhaWxzKCkge1xuICAgIGlmICh0aGlzLmZvcm1JZCkge1xuICAgICAgdGhpcy5wcm9maWxlVjJTdmMuZ2V0Rm9ybVYyQnlJRCh0aGlzLmZvcm1JZCkuc3Vic2NyaWJlKChyZXNwb25jZTogYW55KSA9PiB7XG4gICAgICAgIGlmIChyZXNwb25jZSkge1xuICAgICAgICAgIHRoaXMuZm9ybXNEZXRpbHMgPSBfLmdldChyZXNwb25jZSwgJ3Jlc3VsdC5yZXNwb25zZScsIHt9KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHNldFZhbHVlQ2hhbmdlRnVuY3Rpb25zKCkge1xuICAgIGNvbnN0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKVxuICAgIGlmIChzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgIGxldCBzZXR0aW5nVmFsdWVDaGFuZ2UgPSB0cnVlXG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wudmFsdWVDaGFuZ2VzLnBpcGUoXG4gICAgICAgIGRlYm91bmNlVGltZSgzMDApLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICBzdGFydFdpdGgoJycpLFxuICAgICAgKS5zdWJzY3JpYmUoc2VhcmNoVGV4dCA9PiB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPSAwXG4gICAgICAgICAgaWYgKHNlYXJjaFRleHQgJiYgc2VhcmNoVGV4dC5sZW5ndGggPiAxKSB7XG4gICAgICAgICAgdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQgPSBzZWFyY2hUZXh0XG4gICAgICAgICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgICAgIH0gZWxzZSBpZiAoIXNlYXJjaFRleHQpIHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9IHNlYXJjaFRleHRcbiAgICAgICAgICAgIGlmKCFzZXR0aW5nVmFsdWVDaGFuZ2UpIHtcbiAgICAgICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCkgXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpXG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRpbmdWYWx1ZUNoYW5nZSA9IGZhbHNlXG4gICAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZmV0Y2hDYWRyZURhdGEoKSB7XG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLnByb2ZpbGVWMlN2Yy5mZXRjaENhZHJlKCkuc3Vic2NyaWJlKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgY29uc3QgdmFsdWUgPSByZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHQgJiYgcmVzcG9uc2UucmVzdWx0LnJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdC5yZXNwb25zZS52YWx1ZVxuICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLmNpdmlsU2VydmljZVR5cGUpIHtcbiAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VEYXRhID0gdmFsdWUuY2l2aWxTZXJ2aWNlVHlwZVxuICAgICAgICB0aGlzLmNpdmlsU2VydmljZVR5cGVzID0gdGhpcy5jaXZpbFNlcnZpY2VEYXRhLmNpdmlsU2VydmljZVR5cGVMaXN0Lm1hcCgoc2VydmljZTogYW55KSA9PiBzZXJ2aWNlLm5hbWUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGdldElzQ2FkcmVTdGF0dXModmFsdWU6IGJvb2xlYW4pIHtcbiAgICB0aGlzLmlzQ2FkcmVTdGF0dXMgPSB2YWx1ZVxuICAgIGlmICh2YWx1ZSkge1xuICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0ucGF0Y2hWYWx1ZSh7XG4gICAgICAgIHR5cGVPZkNpdmlsU2VydmljZTogJycsXG4gICAgICAgIHNlcnZpY2VUeXBlOiAnJyxcbiAgICAgICAgY2FkcmVOYW1lOiAnJyxcbiAgICAgICAgY2FkcmVCYXRjaDogJycsXG4gICAgICAgIGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHk6ICcnLFxuICAgICAgfSlcbiAgICAgIHRoaXMuYWRkVmFsaWRhdG9ycygpXG4gICAgfVxuXG4gICAgZWxzZSB7XG4gICAgICB0aGlzLnNob3dCYXRjaEZvck5vQ2FkcmUgPSBmYWxzZVxuICAgICAgdGhpcy5yZW1vdmVWYWxpZGF0b3JzKClcbiAgICB9XG4gIH1cblxuICBnZXRBbGxFcnJvcnMoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGVycm9yTWVzc2FnZXM6IHN0cmluZ1tdID0gW107XG4gICAgT2JqZWN0LmtleXModGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgY29uc3QgY29udHJvbEVycm9ycyA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzW2tleV0uZXJyb3JzO1xuICAgICAgaWYgKGNvbnRyb2xFcnJvcnMpIHtcbiAgICAgICAgT2JqZWN0LmtleXMoY29udHJvbEVycm9ycykuZm9yRWFjaCgoZXJyb3JLZXkpID0+IHtcbiAgICAgICAgICBzd2l0Y2ggKGVycm9yS2V5KSB7XG4gICAgICAgICAgICBjYXNlICdyZXF1aXJlZCc6XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMucHVzaChgJHtrZXl9IGlzIHJlcXVpcmVkLmApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21pbmxlbmd0aCc6XG4gICAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkTGVuZ3RoID0gY29udHJvbEVycm9yc1snbWlubGVuZ3RoJ10ucmVxdWlyZWRMZW5ndGg7XG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZXMucHVzaChgJHtrZXl9IG11c3QgYmUgYXQgbGVhc3QgJHtyZXF1aXJlZExlbmd0aH0gY2hhcmFjdGVycyBsb25nLmApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2VtYWlsJzpcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlcy5wdXNoKGBQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzLmApO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIC8vIEFkZCBtb3JlIGNhc2VzIGZvciBvdGhlciB2YWxpZGF0b3JzIGFzIG5lZWRlZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIGVycm9yTWVzc2FnZXM7XG4gIH1cblxuICBhZGRWYWxpZGF0b3JzKCkge1xuICAgIGNvbnN0IGZpZWxkQ29udHJvbDAgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2lzQ2FkcmUnKVxuICAgIGlmIChmaWVsZENvbnRyb2wwKSB7XG4gICAgICBmaWVsZENvbnRyb2wwLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKTtcbiAgICAgIGZpZWxkQ29udHJvbDAudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgfVxuICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJylcbiAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICBmaWVsZENvbnRyb2wuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wxID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpXG4gICAgaWYgKGZpZWxkQ29udHJvbDEpIHtcbiAgICAgIGZpZWxkQ29udHJvbDEuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sMS51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gICAgY29uc3QgZmllbGRDb250cm9sMyA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVCYXRjaCcpXG4gICAgaWYgKGZpZWxkQ29udHJvbDMpIHtcbiAgICAgIGZpZWxkQ29udHJvbDMuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pO1xuICAgICAgZmllbGRDb250cm9sMy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gIH1cblxuICByZW1vdmVWYWxpZGF0b3JzKCkge1xuICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJylcbiAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICBmaWVsZENvbnRyb2wuY2xlYXJWYWxpZGF0b3JzKClcbiAgICAgIGZpZWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gICAgY29uc3QgZmllbGRDb250cm9sMSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKVxuICAgIGlmIChmaWVsZENvbnRyb2wxKSB7XG4gICAgICBmaWVsZENvbnRyb2wxLmNsZWFyVmFsaWRhdG9ycygpXG4gICAgICBmaWVsZENvbnRyb2wxLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZU5hbWUnKVxuICAgIGlmIChmaWVsZENvbnRyb2wyKSB7XG4gICAgICBmaWVsZENvbnRyb2wyLmNsZWFyVmFsaWRhdG9ycygpXG4gICAgICBmaWVsZENvbnRyb2wyLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgIH1cbiAgICBjb25zdCBmaWVsZENvbnRyb2wzID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBpZiAoZmllbGRDb250cm9sMykge1xuICAgICAgZmllbGRDb250cm9sMy5jbGVhclZhbGlkYXRvcnMoKVxuICAgICAgZmllbGRDb250cm9sMy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICB9XG4gIH1cblxuICBnZXRTZXJ2aWNlKGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBzZXJ2aWNlVHlwZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJylcbiAgICBjb25zdCBjYWRyZUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlTmFtZScpXG4gICAgY29uc3QgYmF0Y2hDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUJhdGNoJylcbiAgICBjb25zdCBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eScpXG5cbiAgICBpZiAoc2VydmljZVR5cGVDb250cm9sKSB7IHNlcnZpY2VUeXBlQ29udHJvbC5yZXNldCgpIH1cbiAgICBpZiAoY2FkcmVDb250cm9sKSB7IGNhZHJlQ29udHJvbC5yZXNldCgpIH1cbiAgICBpZiAoYmF0Y2hDb250cm9sKSB7IGJhdGNoQ29udHJvbC5yZXNldCgpIH1cbiAgICBpZiAoY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wpIHsgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wucmVzZXQoKSB9XG5cbiAgICB0aGlzLnNlcnZpY2VUeXBlID0gdGhpcy5jaXZpbFNlcnZpY2VEYXRhLmNpdmlsU2VydmljZVR5cGVMaXN0LmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBldmVudClcbiAgICB0aGlzLnNlcnZpY2VUeXBlID0gdGhpcy5jaXZpbFNlcnZpY2VEYXRhLmNpdmlsU2VydmljZVR5cGVMaXN0LmZpbmQoKGVsZW1lbnQ6IGFueSkgPT4gZWxlbWVudC5uYW1lID09PSBldmVudClcbiAgICBpZiAodGhpcy5zZXJ2aWNlVHlwZSkge1xuICAgICAgdGhpcy5zZXJ2aWNlTGlzdERhdGEgPSB0aGlzLnNlcnZpY2VUeXBlLnNlcnZpY2VMaXN0XG4gICAgICB0aGlzLnNlcnZpY2VOYW1lID0gdGhpcy5zZXJ2aWNlTGlzdERhdGEubWFwKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2UubmFtZSlcbiAgICAgIHRoaXMuc2VydmljZUlkID0gdGhpcy5zZXJ2aWNlVHlwZS5pZFxuICAgICAgdGhpcy5lcnJvck1lc3NhZ2UgPSAnJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICdTZXJ2aWNlIFR5cGUgbm90IGZvdW5kJ1xuICAgIH1cbiAgfVxuXG4gIG9uU2VydmljZVNlbGVjdChldmVudDogYW55KSB7XG4gICAgY29uc3QgY2FkcmVDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZU5hbWUnKVxuICAgIGNvbnN0IGJhdGNoQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVCYXRjaCcpXG4gICAgY29uc3QgY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eUNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQ29udHJvbGxpbmdBdXRob3JpdHknKVxuICAgIGlmIChjYWRyZUNvbnRyb2wpIHsgY2FkcmVDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChiYXRjaENvbnRyb2wpIHsgYmF0Y2hDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCkgeyBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbC5yZXNldCgpIH1cbiAgICB0aGlzLnNlbGVjdGVkU2VydmljZU5hbWUgPSBldmVudC52YWx1ZVxuICAgIGlmICh0aGlzLnNlcnZpY2VMaXN0RGF0YSkge1xuICAgICAgdGhpcy5zZWxlY3RlZFNlcnZpY2UgPSB0aGlzLnNlcnZpY2VMaXN0RGF0YS5maW5kKChzZXJ2aWNlOiBhbnkpID0+IHNlcnZpY2UubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFNlcnZpY2VOYW1lKVxuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMuY2l2aWxTZXJ2aWNlTmFtZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLm5hbWVcbiAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VJZCA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmlkXG4gICAgICAgIHRoaXMuY2FkcmUgPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUxpc3QgPyB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUxpc3QubWFwKChjYWRyZTogYW55KSA9PiBjYWRyZS5uYW1lKSA6IFtdXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnNlbGVjdGVkU2VydmljZSAmJiB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5KSB7XG4gICAgICB0aGlzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHkgPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eSA9ICdOQSdcbiAgICB9XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRTZXJ2aWNlICYmIHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMuc2hvd0JhdGNoRm9yTm9DYWRyZSA9IHRydWVcbiAgICAgIHRoaXMuc3RhcnRCYXRjaCA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNvbW1vbkJhdGNoU3RhcnRZZWFyXG4gICAgICB0aGlzLmVuZEJhdGNoID0gdGhpcy5zZWxlY3RlZFNlcnZpY2UuY29tbW9uQmF0Y2hFbmRZZWFyXG4gICAgICB0aGlzLmV4Y2x1c2lvblllYXIgPSB0aGlzLnNlbGVjdGVkU2VydmljZS5jb21tb25CYXRjaEV4Y2x1c2lvblllYXJMaXN0XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICAgICAgdGhpcy55ZWFyQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLmVuZEJhdGNoIC0gdGhpcy5zdGFydEJhdGNoICsgMSB9LCAoXywgaW5kZXgpID0+IHRoaXMuc3RhcnRCYXRjaCArIGluZGV4KVxuICAgICAgICAuZmlsdGVyKHllYXIgPT4gIXRoaXMuZXhjbHVzaW9uWWVhci5pbmNsdWRlcyh5ZWFyKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93QmF0Y2hGb3JOb0NhZHJlID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvbkNhZHJlU2VsZWN0KGV2ZW50OiBhbnkpIHtcbiAgICBjb25zdCBiYXRjaENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKVxuICAgIGNvbnN0IGNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlDb250cm9sID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5JylcblxuICAgIGlmIChiYXRjaENvbnRyb2wpIHsgYmF0Y2hDb250cm9sLnJlc2V0KCkgfVxuICAgIGlmIChjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbCkgeyBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5Q29udHJvbC5yZXNldCgpIH1cbiAgICB0aGlzLnNlbGVjdGVkQ2FkcmVOYW1lID0gZXZlbnRcbiAgICBpZiAodGhpcy5zZWxlY3RlZFNlcnZpY2UpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWRDYWRyZSA9IHRoaXMuc2VsZWN0ZWRTZXJ2aWNlLmNhZHJlTGlzdC5maW5kKChjYWRyZTogYW55KSA9PiBjYWRyZS5uYW1lID09PSB0aGlzLnNlbGVjdGVkQ2FkcmVOYW1lKVxuICAgICAgdGhpcy5zdGFydEJhdGNoID0gdGhpcy5zZWxlY3RlZENhZHJlID8gdGhpcy5zZWxlY3RlZENhZHJlLnN0YXJ0QmF0Y2hZZWFyIDogJydcbiAgICAgIHRoaXMuZW5kQmF0Y2ggPSB0aGlzLnNlbGVjdGVkQ2FkcmUgPyB0aGlzLnNlbGVjdGVkQ2FkcmUuZW5kQmF0Y2hZZWFyIDogJydcbiAgICAgIHRoaXMuZXhjbHVzaW9uWWVhciA9IHRoaXMuc2VsZWN0ZWRDYWRyZSA/IHRoaXMuc2VsZWN0ZWRDYWRyZS5leGN1bHNpb25ZZWFyTGlzdCA6ICcnXG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZVxuICAgICAgdGhpcy55ZWFyQXJyYXkgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLmVuZEJhdGNoIC0gdGhpcy5zdGFydEJhdGNoICsgMSB9LCAoXywgaW5kZXgpID0+IHRoaXMuc3RhcnRCYXRjaCArIGluZGV4KVxuICAgICAgICAuZmlsdGVyKHllYXIgPT4gIXRoaXMuZXhjbHVzaW9uWWVhci5pbmNsdWRlcyh5ZWFyKSlcbiAgICAgIHRoaXMuY2FkcmVJZCA9IHRoaXMuc2VsZWN0ZWRDYWRyZSA/IHRoaXMuc2VsZWN0ZWRDYWRyZS5pZCA6ICcnXG4gICAgfVxuXG4gIH1cblxuICBnZXRQZW5kaW5nRGV0YWlscygpIHtcbiAgICBcbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMucHJvZmlsZVYyU3ZjLmZldGNoQXBwcm92YWxEZXRhaWxzKCkuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICBpZiAocmVzcCAmJiByZXNwLnJlc3VsdCAmJiByZXNwLnJlc3VsdC5kYXRhKSB7XG4gICAgICAgIHRoaXMucGVuZGluZ0ZpbGVkcyA9IHJlc3AucmVzdWx0LmRhdGFcbiAgICAgICAgaWYgKHRoaXMucGVuZGluZ0ZpbGVkcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgdGhpcy5wZW5kaW5nRmlsZWRzLmZvckVhY2goKHVzZXI6IGFueSkgPT4ge1xuICAgICAgICAgICAgaWYgKHVzZXJbJ2dyb3VwJ10pIHtcbiAgICAgICAgICAgICAgbGV0IGN0cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2dyb3VwJylcbiAgICAgICAgICAgICAgaWYgKGN0cmwpIHtcbiAgICAgICAgICAgICAgICBjdHJsLnBhdGNoVmFsdWUoeyBncm91cDogdXNlclsnZ3JvdXAnXSB9KVxuICAgICAgICAgICAgICAgIHRoaXMucEdyb3VwID0gdXNlclsnZ3JvdXAnXVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodXNlclsnZGVzaWduYXRpb24nXSkge1xuICAgICAgICAgICAgICBsZXQgY3RybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZGVzaWduYXRpb24nKVxuICAgICAgICAgICAgICBpZiAoY3RybCkge1xuICAgICAgICAgICAgICAgIGN0cmwucGF0Y2hWYWx1ZSh7IGRlc2lnbmF0aW9uOiB1c2VyWydkZXNpZ25hdGlvbiddIH0pXG4gICAgICAgICAgICAgICAgdGhpcy5wRGVzaWduYXRpb24gPSB1c2VyWydkZXNpZ25hdGlvbiddXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlXG4gICAgICB0aGlzLmRlZmluZUZvcm1BdHRyaWJ1dGVzKClcbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2coZXJyb3IpXG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZVxuICAgIH0pXG4gIH1cblxuICBkZWZpbmVGb3JtQXR0cmlidXRlcygpIHtcbiAgICBpZiAodGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLnVzZXJQcm9maWxlRmlsZWRzICYmXG4gICAgICB0aGlzLmJhdGNoRGV0YWlscy5iYXRjaEF0dHJpYnV0ZXMuYnBFbnJvbE1hbmRhdG9yeVByb2ZpbGVGaWVsZHMpIHtcbiAgICAgIGxldCBjdXN0b21BdHRyID0gdGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLmJwRW5yb2xNYW5kYXRvcnlQcm9maWxlRmllbGRzXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnbmFtZScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd05hbWUgPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd25hbWUgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnbmFtZScpXG4gICAgICAgIGlmIChmaWVsZENvbnRyb2wpIHtcbiAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC5kaXNhYmxlKClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJyAmJlxuICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWVcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5jYW5TaG93TmFtZSA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zaG93bmFtZSA9IGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2VtYWlsJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RW1haWwgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwpXG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCkge1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbClcbiAgICAgICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5zaG93RW1haWwgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dFbWFpbCA9IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnb3JnYW5pc2F0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93T3JnID0gdHJ1ZVxuICAgICAgICB0aGlzLnNob3dPcmcgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnb3JnYW5pc2F0aW9uJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGZpZWxkQ29udHJvbC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC5kaXNhYmxlKClcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJyAmJlxuICAgICAgICAgICF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lXG4gICAgICAgICkge1xuICAgICAgICAgIHRoaXMuY2FuU2hvd09yZyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5zaG93T3JnID0gZmFsc2VcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnZ3JvdXAnKSkge1xuICAgICAgICB0aGlzLmNhblNob3dHcm91cCA9IHRydWVcbiAgICAgICAgdGhpcy5zaG93R3JvdXAgPSB0cnVlXG4gICAgICAgIGNvbnN0IGZpZWxkQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZ3JvdXAnKVxuICAgICAgICBpZiAoZmllbGRDb250cm9sKSB7XG4gICAgICAgICAgaWYgKHRoaXMucEdyb3VwKSB7XG4gICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy5wR3JvdXApXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgLy8gICB0aGlzLmNhblNob3dHcm91cCA9IHRydWVcbiAgICAgICAgICAgIC8vICAgdGhpcy5zaG93R3JvdXAgPSB0cnVlXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMgJiZcbiAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXBcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWVsZENvbnRyb2wuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmdyb3VwKVxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0dyb3VwID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNob3dHcm91cCA9IGZhbHNlXG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2Rlc2lnbmF0aW9uJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93RGVzaWduYXRpb24gPSB0cnVlXG4gICAgICAgIHRoaXMuc2hvd0Rlc2lnbmF0aW9uID0gdHJ1ZVxuICAgICAgICBjb25zdCBmaWVsZENvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uJylcbiAgICAgICAgaWYgKGZpZWxkQ29udHJvbCkge1xuICAgICAgICAgIGlmICh0aGlzLnBEZXNpZ25hdGlvbikge1xuICAgICAgICAgICAgZmllbGRDb250cm9sLnBhdGNoVmFsdWUodGhpcy5wRGVzaWduYXRpb24pXG4gICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgLy8gICB0aGlzLmNhblNob3dEZXNpZ25hdGlvbiA9IHRydWVcbiAgICAgICAgICAgIC8vICAgdGhpcy5zaG93RGVzaWduYXRpb24gPSB0cnVlXG4gICAgICAgICAgICAvLyB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMgJiZcbiAgICAgICAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24pIHtcbiAgICAgICAgICAgICAgZmllbGRDb250cm9sLnBhdGNoVmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uKVxuICAgICAgICAgICAgICAvLyBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgICAvLyAgIHRoaXMuY2FuU2hvd0Rlc2lnbmF0aW9uID0gZmFsc2VcbiAgICAgICAgICAgICAgLy8gICB0aGlzLnNob3dEZXNpZ25hdGlvbiA9IGZhbHNlXG4gICAgICAgICAgICAgIC8vIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgZmllbGRDb250cm9sLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgIGZpZWxkQ29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZmluZEF0dHIoY3VzdG9tQXR0ciwgJ2VtcGxveWVlQ29kZScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0VtcGxveWVlQ29kZSA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdlbXBsb3llZUNvZGUnKVxuICAgICAgICBpZiAoY29udHJsKSB7XG4gICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZW1wbG95ZWVDb2RlKSB7XG4gICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKEVNUF9JRF9QQVRURVJOKV0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dFbXBsb3llZUNvZGUgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dFbXBsb3llZUNvZGUgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5wYXR0ZXJuKEVNUF9JRF9QQVRURVJOKV0pO1xuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnbW9iaWxlJykpIHtcbiAgICAgICAgdGhpcy5jYW5zaG93TW9iaWxlID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpXG4gICAgICAgIGlmIChjb250cmwpIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMubW9iaWxlICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnBob25lVmVyaWZpZWQpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUpXG4gICAgICAgICAgICB0aGlzLm1WZXJpZmllZCA9IHRydWVcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLm1pbkxlbmd0aCgxMCksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDEwKSwgVmFsaWRhdG9ycy5wYXR0ZXJuKE1PQklMRV9QQVRURVJOKV0pO1xuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5zaG93TW9iaWxlID0gZmFsc2VcbiAgICAgICAgICAgIHRoaXMubVZlcmlmaWVkID0gdHJ1ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dNb2JpbGUgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5taW5MZW5ndGgoMTApLCBWYWxpZGF0b3JzLm1heExlbmd0aCgxMCksIFZhbGlkYXRvcnMucGF0dGVybihNT0JJTEVfUEFUVEVSTildKTtcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuY2Fuc2hvd01vYmlsZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgdGhpcy5tVmVyaWZpZWQgPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdnZW5kZXInKSkge1xuICAgICAgICB0aGlzLmNhblNob3dHZW5kZXIgPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZ2VuZGVyJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXIpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXIpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dHZW5kZXIgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dHZW5kZXIgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdkb2InKSkge1xuICAgICAgICB0aGlzLmNhblNob3dEb2IgPSB0cnVlXG4gICAgICAgIGNvbnN0IGNvbnRybCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnZG9iJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb2IpIHtcbiAgICAgICAgICAgIGxldCBfZG9iOiBhbnkgPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb2JcbiAgICAgICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IF9kb2Iuc3BsaXQoJy0nKVxuICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKE51bWJlcih5ZWFyKSwgTnVtYmVyKG1vbnRoKSAtIDEsIE51bWJlcihkYXkpKVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkRGF5ID0gU3RyaW5nKGRhdGUuZ2V0RGF0ZSgpKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRNb250aCA9IFN0cmluZyhkYXRlLmdldE1vbnRoKCkgKyAxKS5wYWRTdGFydCgyLCAnMCcpXG4gICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWRZZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpXG4gICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGAke2Zvcm1hdHRlZFllYXJ9LSR7Zm9ybWF0dGVkTW9udGh9LSR7Zm9ybWF0dGVkRGF5fWApXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsdWUodGhpcy5zZWxlY3RlZERhdGUpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByb2ZpbGVGb3JtVHlwZSA9PT0gJ0F2YWlsYWJsZSB1c2VyIGZpbGxlZCBpR09UIHByb2ZpbGUnKSB7XG4gICAgICAgICAgICB0aGlzLmNhblNob3dEb2IgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEb2IgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdkb21pY2lsZU1lZGl1bScpKSB7XG4gICAgICAgIHRoaXMuY2FuU2hvd0RvbWljaWxlTWVkaXVtID0gdHJ1ZVxuICAgICAgICBjb25zdCBjb250cmwgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2RvbWljaWxlTWVkaXVtJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bSkge1xuICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtKVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93RG9taWNpbGVNZWRpdW0gPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnNob3dEZWNpbWFsTWVkaXVtID0gdHJ1ZVxuICAgICAgICAgICAgY29udHJsLnNldFZhbGlkYXRvcnMoW1ZhbGlkYXRvcnMucmVxdWlyZWRdKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnY2F0ZWdvcnknKSkge1xuICAgICAgICB0aGlzLmNhblNob3dDYXRlZ29yeSA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdjYXRlZ29yeScpXG4gICAgICAgIGlmIChjb250cmwpIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuY2F0ZWdvcnkpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeSlcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWxpZGF0b3JzKFtWYWxpZGF0b3JzLnJlcXVpcmVkXSlcbiAgICAgICAgICAgIGNvbnRybC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KClcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucHJvZmlsZUZvcm1UeXBlID09PSAnQXZhaWxhYmxlIHVzZXIgZmlsbGVkIGlHT1QgcHJvZmlsZScpIHtcbiAgICAgICAgICAgIHRoaXMuY2FuU2hvd0NhdGVnb3J5ID0gZmFsc2VcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zaG93Q2F0ZWdvcnkgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLmZpbmRBdHRyKGN1c3RvbUF0dHIsICdwaW5Db2RlJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93cGluQ29kZSA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdwaW5Db2RlJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUpIHtcbiAgICAgICAgICAgIGNvbnRybC5zZXRWYWx1ZSh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUpXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNiksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDYpLCBWYWxpZGF0b3JzLnBhdHRlcm4oUElOX0NPREVfUEFUVEVSTildKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93cGluQ29kZSA9IGZhbHNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2hvd1BpbkNvZGUgPSB0cnVlXG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZCwgVmFsaWRhdG9ycy5taW5MZW5ndGgoNiksIFZhbGlkYXRvcnMubWF4TGVuZ3RoKDYpLCBWYWxpZGF0b3JzLnBhdHRlcm4oUElOX0NPREVfUEFUVEVSTildKVxuICAgICAgICAgICAgY29udHJsLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5maW5kQXR0cihjdXN0b21BdHRyLCAnY2FkcmVEZXRhaWxzJykpIHtcbiAgICAgICAgdGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyA9IHRydWVcbiAgICAgICAgY29uc3QgY29udHJsID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uZ2V0KCdpc0NhZHJlJylcbiAgICAgICAgaWYgKGNvbnRybCkge1xuICAgICAgICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscykuaW5jbHVkZXMoJ2lzQ2FkcmUnKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmlzQ2FkcmUgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKHRydWUpXG4gICAgICAgICAgICAgIHRoaXMuaXNDYWRyZVN0YXR1cyA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy5zZXJ2aWNlSWQgPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlSWRcbiAgICAgICAgICAgICAgdGhpcy5jaXZpbFNlcnZpY2VJZCA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZUlkXG4gICAgICAgICAgICAgIHRoaXMuY2FkcmVJZCA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlSWRcbiAgICAgICAgICAgICAgdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5ID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eU5hbWVcbiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZXJ2aWNlKHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUpXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlcnZpY2VTZWxlY3QoeyB2YWx1ZTogdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSB9KVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUpIHtcbiAgICAgICAgICAgICAgICAgIHRoaXMub25DYWRyZVNlbGVjdCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZU5hbWUpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnBhdGNoVmFsdWUoe1xuICAgICAgICAgICAgICAgICAgdHlwZU9mQ2l2aWxTZXJ2aWNlOiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlLFxuICAgICAgICAgICAgICAgICAgc2VydmljZVR5cGU6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZU5hbWUsXG4gICAgICAgICAgICAgICAgICBjYWRyZU5hbWU6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSxcbiAgICAgICAgICAgICAgICAgIGNhZHJlQmF0Y2g6IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gsXG4gICAgICAgICAgICAgICAgICBjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5OiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSxcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICB9LCAxMDAwKVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgY29udHJsLnNldFZhbHVlKGZhbHNlKVxuICAgICAgICAgICAgICB0aGlzLmlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5wcm9maWxlRm9ybVR5cGUgPT09ICdBdmFpbGFibGUgdXNlciBmaWxsZWQgaUdPVCBwcm9maWxlJykge1xuICAgICAgICAgICAgdGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyA9IGZhbHNlXG4gICAgICAgICAgICB0aGlzLmlzQ2FkcmVTdGF0dXMgPSBmYWxzZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb250cmwuc2V0VmFsaWRhdG9ycyhbVmFsaWRhdG9ycy5yZXF1aXJlZF0pXG4gICAgICAgICAgICBjb250cmwudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZmluZEF0dHIoY3VzdG9tQXR0cjogYW55LCBmTmFtZTogYW55KSB7XG4gICAgaWYgKGZOYW1lID09PSAnbmFtZScpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZW1haWwnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCcpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ29yZ2FuaXNhdGlvbicpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5kZXBhcnRtZW50TmFtZScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2dyb3VwJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMuZ3JvdXAnKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdkZXNpZ25hdGlvbicpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzLmRlc2lnbmF0aW9uJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZW1wbG95ZWVDb2RlJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ21vYmlsZScpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMubW9iaWxlJylcbiAgICB9XG4gICAgaWYgKGZOYW1lID09PSAnZ2VuZGVyJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5nZW5kZXInKVxuICAgIH1cbiAgICBpZiAoZk5hbWUgPT09ICdkb2InKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvYicpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2RvbWljaWxlTWVkaXVtJykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2NhdGVnb3J5Jykge1xuICAgICAgcmV0dXJuIGN1c3RvbUF0dHIuZmluZCgoX2ZpZWxkOiBhbnkpID0+IF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5jYXRlZ29yeScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ3BpbkNvZGUnKSB7XG4gICAgICByZXR1cm4gY3VzdG9tQXR0ci5maW5kKChfZmllbGQ6IGFueSkgPT4gX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZScpXG4gICAgfVxuICAgIGlmIChmTmFtZSA9PT0gJ2NhZHJlRGV0YWlscycpIHtcbiAgICAgIHJldHVybiBjdXN0b21BdHRyLmZpbmQoKF9maWVsZDogYW55KSA9PiBfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZScpXG4gICAgfVxuXG4gIH1cblxuICBmaW5kSW5Qcm9maWxlKGF0dHI6IHN0cmluZykge1xuICAgIGlmIChhdHRyID09PSAnbmFtZScpIHtcbiAgICAgIHJldHVybiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdE5hbWUgfHwgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3RuYW1lXG4gICAgfVxuICAgIGlmIChhdHRyID09PSAnZ3JvdXAnKSB7XG4gICAgICByZXR1cm4gKCF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2ZpbGVHcm91cFN0YXR1cykgfHxcbiAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9maWxlR3JvdXBTdGF0dXMgPT09ICdOT1QtVkVSSUZJRUQnIHx8ICh0aGlzLnBHcm91cCA/IHRydWUgOiBmYWxzZSlcbiAgICB9XG4gICAgaWYgKGF0dHIgPT09ICdkZXNpZ25hdGlvbicpIHtcbiAgICAgIHJldHVybiAoIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmlsZURlc2lnbmF0aW9uU3RhdHVzKSB8fFxuICAgICAgICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2ZpbGVEZXNpZ25hdGlvblN0YXR1cyA9PT0gJ05PVC1WRVJJRklFRCcgfHwgKHRoaXMucERlc2lnbmF0aW9uID8gdHJ1ZSA6IGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIGdldEdyb3VwRGF0YSgpOiB2b2lkIHtcbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmdldEdyb3VwcygpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgocmVzOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgdGhpcy5ncm91cERhdGEgPSByZXMucmVzdWx0ICYmIHJlcy5yZXN1bHQucmVzcG9uc2UuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlICE9PSAnT3RoZXJzJylcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdncm91cERhdGFGYWlsZScpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgaGFuZGxlVHJhbnNsYXRlVG8obWVudU5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmhhbmRsZVRyYW5zbGF0ZVRvKG1lbnVOYW1lKVxuICB9XG5cbiAgY2hlY2tTZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucygpOiB2b2lkIHtcbiAgICBpZih0aGlzLm9yZ2FuaXNhdGlvbklkKSB7XG4gICAgICBjb25zdCBpZ290RGVzaWduYXRpb25Cb2R5OiBhbnkgPSB7XG4gICAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgICBmaWx0ZXJzOiB7XG4gICAgICAgICAgICBzdGF0dXM6ICdMaXZlJyxcbiAgICAgICAgICAgIGNhdGVnb3J5OiAnZGVzaWduYXRpb24nLFxuICAgICAgICAgICAgY2F0ZWdvcmllczogW1xuICAgICAgICAgICAgICB0aGlzLm9yZ2FuaXNhdGlvbklkICsgJ19vZGNzX2Rlc2lnbmF0aW9uJyxcbiAgICAgICAgICAgIF0sXG4gICAgICAgICAgICBvYmplY3RUeXBlOiAnVGVybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmaWVsZHM6IFsnbmFtZSddLFxuICAgICAgICAgIG9mZnNldDogMCxcbiAgICAgICAgICBsaW1pdDogMSxcbiAgICAgICAgICBzb3J0X2J5OiB7XG4gICAgICAgICAgICBsYXN0VXBkYXRlZE9uOiAnZGVzYycsXG4gICAgICAgICAgICBvYmplY3RUeXBlOiAnVGVybScsXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWNldHM6IFtdLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnNlYXJjaElnb3REZXNpZ25hdGlvbihpZ290RGVzaWduYXRpb25Cb2R5KS5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAocmVzOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb3VudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5jb3VudCcsIDApO1xuICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcmdIYXNEZXNpZ25hdGlvbnMgPSBjb3VudCA+IDA7XG4gICAgICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICAgIHRoaXMuZ2V0ZGVzaWduYXRpb25zTWV0YSgpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zZWxlY3RlZE9yZ0hhc0Rlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgdGhpcy5nZXRkZXNpZ25hdGlvbnNNZXRhKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0ZGVzaWduYXRpb25zTWV0YSgpIHtcbiAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSB0cnVlO1xuICAgIGlmICh0aGlzLnNlbGVjdGVkT3JnSGFzRGVzaWduYXRpb25zKSB7XG4gICAgICB0aGlzLmdldElnb3REZXNpZ25hdGlvbnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5nZXREZWZhdWx0RGVzaWduYXRpb25zKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRJZ290RGVzaWduYXRpb25zKCkge1xuICAgIGNvbnN0IHJlcXVlc3RCb2R5OiBhbnkgPSB7XG4gICAgICByZXF1ZXN0OiB7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBzdGF0dXM6IFwiTGl2ZVwiLFxuICAgICAgICAgIGNhdGVnb3J5OiBcImRlc2lnbmF0aW9uXCIsXG4gICAgICAgICAgY2F0ZWdvcmllczogW1xuICAgICAgICAgICAgdGhpcy5vcmdhbmlzYXRpb25JZCArICdfb2Rjc19kZXNpZ25hdGlvbicsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBvYmplY3RUeXBlOiBcIlRlcm1cIlxuICAgICAgICB9LFxuICAgICAgICBmaWVsZHM6IFtcbiAgICAgICAgICBcIm5hbWVcIlxuICAgICAgICBdLFxuICAgICAgICBvZmZzZXQ6IHRoaXMuZGVzaWduYXRpb25zT2Zmc2V0LFxuICAgICAgICBsaW1pdDogdGhpcy5kZXNpZ25hdGlvbkxpc3RMb2FkQ291bnQsXG4gICAgICAgIHNvcnRfYnk6IHtcbiAgICAgICAgICBsYXN0VXBkYXRlZE9uOiBcImRlc2NcIixcbiAgICAgICAgICBvYmplY3RUeXBlOiBcIlRlcm1cIlxuICAgICAgICB9LFxuICAgICAgICBmYWNldHM6IFtdXG4gICAgICB9XG4gICAgfTtcbiAgICBpZih0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCl7XG4gICAgICByZXF1ZXN0Qm9keVsncmVxdWVzdCddWydxdWVyeSddID0gdGhpcy5kZXNpZ25hdGlvblNlYXJjaFRleHQ7XG4gICAgfVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnNlYXJjaElnb3REZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IChyZXM6IGFueSkgPT4ge1xuICAgICAgICB0aGlzLmlzTG9hZGluZ01vcmVEZXNpZ25hdGlvbnMgPSBmYWxzZTtcbiAgICAgICAgaWYodGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQgPT09IDApIHtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBfLmdldChyZXMsICdyZXN1bHQuVGVybScsIFtdKSBhcyBkZXNpZ25hdGlvbltdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IFsuLi50aGlzLmRlc2lnbmF0aW9uc01ldGEsIC4uLl8uZ2V0KHJlcywgJ3Jlc3VsdC5UZXJtJywgW10pIGFzIGRlc2lnbmF0aW9uW11dO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZGVzaWduYXRpb25zVG90YWxDb3VudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5jb3VudCcsIDApO1xuICAgICAgICB0aGlzLmNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgIHRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyA9IGZhbHNlO1xuICAgICAgICB0aGlzLm9wZW5TbmFja2JhcignU29tZXRoaW5nIHdlbnQgd3JvbmcuIFBsZWFzZSByZWZyZXNoIG9yIHRyeSBhZ2FpbiBsYXRlci4nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICBcbiAgICBwcml2YXRlIGdldERlZmF1bHREZXNpZ25hdGlvbnMoKSB7XG4gICAgICBjb25zdCByZXF1ZXN0Qm9keTogYW55ID0ge1xuICAgICAgICBmaWx0ZXJDcml0ZXJpYU1hcDoge1xuICAgICAgICAgIHN0YXR1czogJ0FjdGl2ZSdcbiAgICAgICAgfSxcbiAgICAgICAgcmVxdWVzdGVkRmllbGRzOiBbXSxcbiAgICAgICAgcGFnZU51bWJlcjogdGhpcy5kZXNpZ25hdGlvbnNPZmZzZXQsXG4gICAgICAgIHBhZ2VTaXplOiB0aGlzLmRlc2lnbmF0aW9uTGlzdExvYWRDb3VudFxuICAgICAgfVxuICAgICAgaWYgKHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0KSB7XG4gICAgICAgIHJlcXVlc3RCb2R5WydzZWFyY2hTdHJpbmcnXSA9IHRoaXMuZGVzaWduYXRpb25TZWFyY2hUZXh0XG4gICAgICB9XG4gICAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5zZWFyY2hEZXNpZ25hdGlvbihyZXF1ZXN0Qm9keSkuc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKHJlczogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQuZGF0YScsIFtdKSBhcyBkZXNpZ25hdGlvbltdO1xuICAgICAgICAgIGNvbnN0IG1hcHBlZCA9IGNvbnRlbnQubWFwKChpdGVtOiBhbnkpID0+ICh7XG4gICAgICAgICAgICBuYW1lOiBpdGVtLmRlc2lnbmF0aW9uIHx8ICcnLFxuICAgICAgICAgICAgc3RhdHVzOiBpdGVtLnN0YXR1cyB8fCAnQWN0aXZlJyxcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKHRoaXMuZGVzaWduYXRpb25zT2Zmc2V0ID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEgPSBtYXBwZWQ7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zTWV0YSA9IFsuLi50aGlzLmRlc2lnbmF0aW9uc01ldGEsIC4uLm1hcHBlZF07XG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuZGVzaWduYXRpb25zVG90YWxDb3VudCA9IF8uZ2V0KHJlcywgJ3Jlc3VsdC5yZXN1bHQudG90YWxDb3VudCcsIDApO1xuICAgICAgICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gZmFsc2U7XG4gICAgICAgICAgdGhpcy5vcGVuU25hY2tiYXIoJ1NvbWV0aGluZyB3ZW50IHdyb25nLiBQbGVhc2UgcmVmcmVzaCBvciB0cnkgYWdhaW4gbGF0ZXIuJyk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICBnZXRNYXN0ZXJMYW5ndWFnZSgpOiB2b2lkIHtcbiAgICB0aGlzLnVzZXJQcm9maWxlU2VydmljZS5nZXRNYXN0ZXJMYW5ndWFnZXMoKVxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveVN1YmplY3QkKSlcbiAgICAgIC5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMubWFzdGVyTGFuZ3VhZ2VzID0gcmVzLmxhbmd1YWdlc1xuICAgICAgICB0aGlzLm1hc3Rlckxhbmd1YWdlQmFja3VwID0gcmVzLmxhbmd1YWdlc1xuICAgICAgfSwgKGVycm9yOiBIdHRwRXJyb3JSZXNwb25zZSkgPT4ge1xuICAgICAgICBpZiAoIWVycm9yLm9rKSB7XG4gICAgICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKHRoaXMuaGFuZGxlVHJhbnNsYXRlVG8oJ3VuYWJsZUZldGNoTWFzdGVyTGFuZ3VhZ2VEYXRhJykpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBoYW5kbGVFbXB0eSh0eXBlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBpZiAodHlwZSA9PT0gJ21vYmlsZScpIHtcbiAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5tb2JpbGUgJiYgIXRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZSkge1xuICAgICAgICB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snbW9iaWxlJ10uc2V0RXJyb3JzKHsgdmFsaWQ6IGZhbHNlIH0pXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlID09PSAncHJpbWFyeUVtYWlsJykge1xuICAgICAgaWYgKCF0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwgJiYgIXRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMudmFsdWVbJ3ByaW1hcnlFbWFpbCddKSB7XG4gICAgICAgIHRoaXMudXNlckRldGFpbHNGb3JtLnNldEVycm9ycyh7IHZhbGlkOiBmYWxzZSB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBvblN1Ym1pdEZvcm0oZm9ybTogYW55KSB7XG4gICAgLyogdHNsaW50OmRpc2FibGUgKi9cblxuICAgIGNvbnNvbGUubG9nKGZvcm0pXG4gICAgbGV0IHBheWxvYWQgPSB0aGlzLmdlbmVyYXRlUHJvZmlsZVBheWxvYWQoKVxuICAgIGlmICgodGhpcy5jYW5TaG93RGVzaWduYXRpb24gfHwgdGhpcy5jYW5TaG93R3JvdXApICYmICF0aGlzLnNob3dEb3B0Q2hhbmdlcykge1xuICAgICAgaWYgKHRoaXMucGVuZGluZ0ZpbGVkcykge1xuICAgICAgICB0aGlzLnBlbmRpbmdGaWxlZHMuZm9yRWFjaCgoX29iajogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKF9vYmopLmluY2x1ZGVzKCdkZXNpZ25hdGlvbicpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgICAgICAgICAgdGhpcy5wcm9maWxlVjJTdmMud2l0aERyYXdBcHByb3ZhbFJlcXVlc3QodGhpcy5jb25maWdTcmMudW5NYXBwZWRVc2VyLmlkLCBfb2JqLndmSWQpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXNwICYmIHJlc3AucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3AucmVzdWx0Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKE9iamVjdC5rZXlzKF9vYmopLmluY2x1ZGVzKCdncm91cCcpKSB7XG4gICAgICAgICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgICAgICAgICAgdGhpcy5wcm9maWxlVjJTdmMud2l0aERyYXdBcHByb3ZhbFJlcXVlc3QodGhpcy5jb25maWdTcmMudW5NYXBwZWRVc2VyLmlkLCBfb2JqLndmSWQpLnN1YnNjcmliZSgocmVzcDogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGlmIChyZXNwICYmIHJlc3AucmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgICAvKiB0c2xpbnQ6ZGlzYWJsZSAqL1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHJlc3AucmVzdWx0Lm1lc3NhZ2UpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwgIT09IHRoaXMudXNlckRldGFpbHNGb3JtLnZhbHVlLnByaW1hcnlFbWFpbCAmJiB0aGlzLmNhblNob3dFbWFpbCkge1xuICAgICAgICAgIHRoaXMudXBkYXRlRW1haWwodGhpcy51c2VyRGV0YWlsc0Zvcm0udmFsdWUucHJpbWFyeUVtYWlsKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3VibWl0UHJvZmlsZShwYXlsb2FkKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsICE9PSB0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZS5wcmltYXJ5RW1haWwgJiYgdGhpcy5jYW5TaG93RW1haWwpIHtcbiAgICAgICAgdGhpcy51cGRhdGVFbWFpbCh0aGlzLnVzZXJEZXRhaWxzRm9ybS52YWx1ZS5wcmltYXJ5RW1haWwpXG4gICAgICB9XG4gICAgICB0aGlzLnN1Ym1pdFByb2ZpbGUocGF5bG9hZClcbiAgICB9XG4gIH1cblxuICBzdWJtaXRQcm9maWxlKHBheWxvYWQ6IGFueSkge1xuICAgIGlmICh0aGlzLmVWZXJpZmllZCAmJiB0aGlzLnZlcmlmaWVkRW1haWxPdHApIHtcbiAgICAgIHBheWxvYWRbJ3JlcXVlc3QnXVsnZW1haWxPdHAnXSA9IHRoaXMudmVyaWZpZWRFbWFpbE90cFxuICAgIH1cbiAgICBpZiAodGhpcy5tVmVyaWZpZWQgJiYgdGhpcy52ZXJpZmllZFBob25lT3RwKSB7XG4gICAgICBwYXlsb2FkWydyZXF1ZXN0J11bJ3Bob25lT3RwJ10gPSB0aGlzLnZlcmlmaWVkUGhvbmVPdHBcbiAgICB9XG4gICAgaWYgKHBheWxvYWQgJiYgcGF5bG9hZFsncmVxdWVzdCddICYmIHBheWxvYWRbJ3JlcXVlc3QnXVsncHJvZmlsZURldGFpbHMnXSAmJiBwYXlsb2FkWydyZXF1ZXN0J11bJ3Byb2ZpbGVEZXRhaWxzJ11bJ3BlcnNvbmFsRGV0YWlscyddICYmIHBheWxvYWRbJ3JlcXVlc3QnXVsncHJvZmlsZURldGFpbHMnXVsncGVyc29uYWxEZXRhaWxzJ11bJ2RvYiddKSB7XG4gICAgICBsZXQgZG9iRm9ybWF0ID0gcGF5bG9hZFsncmVxdWVzdCddWydwcm9maWxlRGV0YWlscyddWydwZXJzb25hbERldGFpbHMnXVsnZG9iJ107XG4gICAgICBsZXQgZG9iID0gYCR7bmV3IERhdGUoZG9iRm9ybWF0KS5nZXREYXRlKCl9LSR7bmV3IERhdGUoZG9iRm9ybWF0KS5nZXRNb250aCgpICsgMX0tJHtuZXcgRGF0ZShkb2JGb3JtYXQpLmdldEZ1bGxZZWFyKCl9YFxuICAgICAgcGF5bG9hZFsncmVxdWVzdCddWydwcm9maWxlRGV0YWlscyddWydwZXJzb25hbERldGFpbHMnXVsnZG9iJ10gPSBkb2JcbiAgICB9XG4gICAgaWYgKHRoaXMudXBkYXRlUHJvZmlsZSkge1xuICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLmVkaXRQcm9maWxlRGV0YWlscyhwYXlsb2FkKS5zdWJzY3JpYmUoKHJlczogYW55KSA9PiB7ZGVidWdnZXJcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgaWYgKHJlcy5yZXNwb25zZUNvZGUgPT09ICdPSycpIHtcbiAgICAgICAgICB0aGlzLnN1Ym1pdFN1cmV2eSh0cnVlKVxuICAgICAgICB9XG4gICAgICB9LCBlcnJvciA9PiB7XG4gICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgIC8qIHRzbGludDpkaXNhYmxlICovXG4gICAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgICB0aGlzLnNuYWNrQmFyLm9wZW4oZXJyb3I/LmVycm9yPy5wYXJhbXM/LmVycm1zZyB8fCBcIlNvbWV0aGluZyB3ZW50IHdyb25nIVwiKVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBzdWJtaXRTdXJldnkoc3RhdHVzOiBhbnkpIHtcbiAgICBsZXQgc3VyZXZ5UGF5bG9hZCA9IHtcbiAgICAgIGZvcm1JZDogXy5nZXQodGhpcy5kYXRhLCAnYmF0Y2hEYXRhLmJhdGNoQXR0cmlidXRlcy5wcm9maWxlU3VydmV5SWQnKSxcbiAgICAgIHZlcnNpb246IDQsXG4gICAgICBzdGF0dXM6ICdTVUJNSVRURUQnLFxuICAgICAgcmVzcG9uc2VzOiB0aGlzLmdlbmVyZWF0ZVN1cnZleVBheWxvYWQoc3RhdHVzKSxcbiAgICAgIGNvbnRleHRJZDogXy5nZXQodGhpcy5kYXRhLCAnYmF0Y2hEYXRhLmNvdXJzZUlkJyksXG4gICAgICBjb250ZXh0TmFtZTogXy5nZXQodGhpcy5kYXRhLCAnY291cnNlTmFtZScsICcnKSxcbiAgICB9XG4gICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciArIDFcbiAgICB0aGlzLm5wc1N2Yy5zdWJtaXRCcEZvcm1XaXRoUHJvZmlsZURldGFpbHMoc3VyZXZ5UGF5bG9hZCkuc3Vic2NyaWJlKChyZXNwOiBhbnkpID0+IHtcbiAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICBpZiAoXy5nZXQocmVzcCwgJ3BhcmFtcy5zdGF0dXMnKSA9PT0gJ3N1Y2Nlc3MnKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tRm9ybSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihcIkZvcm0gaXMgc3VibWl0dGVkIHN1Y2Nlc3NmdWxseVwiKVxuICAgICAgICB0aGlzLmNsb3NlUG9wdXAoKVxuICAgICAgfVxuICAgICAgaWYgKHJlc3AgJiYgcmVzcC5zdGF0dXNDb2RlICYmIHJlc3Auc3RhdHVzQ29kZSAhPT0gMjAwKSB7XG4gICAgICAgIHRoaXMuY3VzdG9tRm9ybSA9IGZhbHNlXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3BlbihyZXNwLmVycm9yTWVzc2FnZSlcbiAgICAgIH1cbiAgICB9LCBlcnJvciA9PiB7XG4gICAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyIC0gMVxuICAgICAgLyogdHNsaW50OmRpc2FibGUgKi9cbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgICAgdGhpcy5zbmFja0Jhci5vcGVuKFwic29tZXRoaW5nIHdlbnQgd3JvbmchXCIpXG4gICAgfSlcbiAgfVxuXG4gIGdlbmVyYXRlUHJvZmlsZVBheWxvYWQoKSB7XG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgdXNlcklkOiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LmlkZW50aWZpZXIsXG4gICAgICAgIHByb2ZpbGVEZXRhaWxzOiB7XG4gICAgICAgICAgZW1wbG95bWVudERldGFpbHM6IHt9LFxuICAgICAgICAgIHBlcnNvbmFsRGV0YWlsczoge30sXG4gICAgICAgICAgLy8gY2FkcmVEZXRhaWxzOiB7fSxcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBsZXQgX3Byb2Zlc3Npb25hbERldGFpbHM6IGFueSA9IHt9XG4gICAgbGV0IHVwZGF0ZVByb2Zlc3Npb25hbERldGFpbHM6IGJvb2xlYW4gPSBmYWxzZVxuICAgIGlmICh0aGlzLnNob3dHcm91cCAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZ3JvdXAnXS52YWx1ZSAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIF9wcm9mZXNzaW9uYWxEZXRhaWxzWydncm91cCddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dyb3VwJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICAgIHVwZGF0ZVByb2Zlc3Npb25hbERldGFpbHMgPSB0cnVlXG4gICAgfVxuICAgIGlmICh0aGlzLnNob3dEZXNpZ25hdGlvbiAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZGVzaWduYXRpb24nXS52YWx1ZSAmJiAhdGhpcy5zaG93RG9wdENoYW5nZXMpIHtcbiAgICAgIF9wcm9mZXNzaW9uYWxEZXRhaWxzWydkZXNpZ25hdGlvbiddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgIHRoaXMudXBkYXRlUHJvZmlsZSA9IHRydWVcbiAgICAgIHVwZGF0ZVByb2Zlc3Npb25hbERldGFpbHMgPSB0cnVlXG4gICAgfVxuICAgIGlmICh1cGRhdGVQcm9mZXNzaW9uYWxEZXRhaWxzKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHNbJ3Byb2Zlc3Npb25hbERldGFpbHMnXSA9IFtfcHJvZmVzc2lvbmFsRGV0YWlsc11cbiAgICB9XG4gICAgaWYgKHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydlbXBsb3llZUNvZGUnXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzWydlbXBsb3llZUNvZGUnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydlbXBsb3llZUNvZGUnXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ21vYmlsZSddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydtb2JpbGUnXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZVxuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlsc1sncGhvbmVWZXJpZmllZCddID0gdHJ1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dlbmRlciddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydnZW5kZXInXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvYiddLnZhbHVlKSB7XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydkb2InXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb2InXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHNbJ2RvbWljaWxlTWVkaXVtJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWUpIHtcbiAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHNbJ2NhdGVnb3J5J10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2F0ZWdvcnknXS52YWx1ZVxuICAgICAgdGhpcy51cGRhdGVQcm9maWxlID0gdHJ1ZVxuICAgIH1cbiAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3BpbkNvZGUnXS52YWx1ZSkge1xuICAgICAgcGF5bG9hZC5yZXF1ZXN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzWydwaW5Db2RlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydwaW5jb2RlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgfVxuICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmICF0aGlzLnNob3dEb3B0Q2hhbmdlcykge1xuICAgICAgbGV0IF9jYWRyZURldGFpbHM6IGFueSA9IHt9XG4gICAgICBwYXlsb2FkLnJlcXVlc3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzWydpc0NhZHJlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlXG4gICAgICB0aGlzLnVwZGF0ZVByb2ZpbGUgPSB0cnVlXG4gICAgICBpZiAodGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSkge1xuICAgICAgICBfY2FkcmVEZXRhaWxzWydjaXZpbFNlcnZpY2VUeXBlJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sndHlwZU9mQ2l2aWxTZXJ2aWNlJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2l2aWxTZXJ2aWNlTmFtZSddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3NlcnZpY2VUeXBlJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2FkcmVOYW1lJ10gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVOYW1lJ10udmFsdWVcbiAgICAgICAgX2NhZHJlRGV0YWlsc1snY2FkcmVCYXRjaCddID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlQmF0Y2gnXS52YWx1ZVxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5TmFtZSddID0gdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgICAgIF9jYWRyZURldGFpbHNbJ2NhZHJlSWQnXSA9IHRoaXMuY2FkcmVJZFxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjaXZpbFNlcnZpY2VJZCddID0gdGhpcy5jaXZpbFNlcnZpY2VJZFxuICAgICAgICBfY2FkcmVEZXRhaWxzWydjaXZpbFNlcnZpY2VUeXBlSWQnXSA9IHRoaXMuc2VydmljZUlkXG4gICAgICAgIHBheWxvYWQucmVxdWVzdC5wcm9maWxlRGV0YWlsc1snY2FkcmVEZXRhaWxzJ10gPSBfY2FkcmVEZXRhaWxzXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBwYXlsb2FkXG4gIH1cblxuICBmb3JtYXREYXRlKF9kb2I6IHN0cmluZyB8IERhdGUpOiBzdHJpbmcge1xuICAgIGxldCBkYXRlT2JqOiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gICAgaWYgKF9kb2IgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICBkYXRlT2JqID0gX2RvYjtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfZG9iID09PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgcGFydHMgPSBfZG9iLnNwbGl0KCctJyk7XG4gICAgICBpZiAocGFydHMubGVuZ3RoID09PSAzKSB7XG4gICAgICAgIGNvbnN0IFtkYXksIG1vbnRoLCB5ZWFyXSA9IHBhcnRzO1xuICAgICAgICBkYXRlT2JqID0gbmV3IERhdGUoTnVtYmVyKHllYXIpLCBOdW1iZXIobW9udGgpIC0gMSwgTnVtYmVyKGRheSkpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcGFyc2VkID0gbmV3IERhdGUoX2RvYik7XG4gICAgICAgIGlmICghaXNOYU4ocGFyc2VkLmdldFRpbWUoKSkpIHtcbiAgICAgICAgICBkYXRlT2JqID0gcGFyc2VkO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZGF0ZU9iaiB8fCBpc05hTihkYXRlT2JqLmdldFRpbWUoKSkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGF0ZVBpcGUudHJhbnNmb3JtKGRhdGVPYmosICd5eXl5LU1NLWRkJykgfHwgJyc7XG4gIH1cblxuICBnZXRRdWVzdGlvbklkKGZpZWxkTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBpZiAoIWZpZWxkTmFtZSB8fCAhdGhpcy5mb3Jtc0RldGlscy5maWVsZHMpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZCA9IHRoaXMuZm9ybXNEZXRpbHMuZmllbGRzLmZpbmQoKGY6IGFueSkgPT4gZi5maWVsZCA9PT0gZmllbGROYW1lKSB8fCB7fTtcbiAgICByZXR1cm4gZmllbGQuaWQgfHwgJyc7XG4gIH1cblxuICBnZW5lcmVhdGVTdXJ2ZXlQYXlsb2FkKHN0YXR1czogYW55KSB7XG4gICAgbGV0IGRhdGFPYmplY3Q6IGFueSA9IFtdXG4gICAgdGhpcy5iYXRjaERldGFpbHMuYmF0Y2hBdHRyaWJ1dGVzLmJwRW5yb2xNYW5kYXRvcnlQcm9maWxlRmllbGRzLmZvckVhY2goKF9maWVsZDogYW55KSA9PiB7XG4gICAgICBjb25zdCBmaWVsZFRvQWRkID0ge1xuICAgICAgICBxdWVzdGlvbklkOiB0aGlzLmdldFF1ZXN0aW9uSWQoX2ZpZWxkLmZpZWxkKSxcbiAgICAgICAgcXVlc3Rpb246IF9maWVsZC5kaXNwbGF5TmFtZSxcbiAgICAgICAgYW5zd2VyOiAnJyxcbiAgICAgICAgYW5zd2VyVHlwZTogX2ZpZWxkLmZpZWxkVHlwZVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdG5hbWUnKSB7XG4gICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5maXJzdE5hbWUnLCBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0bmFtZScsICcnKSlcbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZmlyc3ROYW1lIHx8IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmZpcnN0bmFtZVxuICAgICAgfVxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmRlcGFydG1lbnROYW1lJykge1xuICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5kZXBhcnRtZW50TmFtZScsICdOL0EnKVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUgP1xuICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMuZGVwYXJ0bWVudE5hbWUgOiBcIk4vQVwiXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscy5ncm91cCcpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0dyb3VwICYmIHN0YXR1cykge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dyb3VwJ10udmFsdWVcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydncm91cCddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5ncm91cCcsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5ncm91cCA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZ3JvdXAgOiBcIk4vQVwiXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlscy5kZXNpZ25hdGlvbicpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0Rlc2lnbmF0aW9uICYmIHN0YXR1cykge1xuICAgICAgICAgIGlmICh0aGlzLnNob3dEb3B0Q2hhbmdlcyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZGVzaWduYXRpb24nXSAmJlxuICAgICAgICAgICAgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWUgPT09ICdPdGhlcnMnICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydvdGhlckRlc2lnbmF0aW9uJ10pIHtcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ290aGVyRGVzaWduYXRpb24nXS52YWx1ZVxuICAgICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snb3RoZXJEZXNpZ25hdGlvbiddLnZhbHVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2Rlc2lnbmF0aW9uJ10udmFsdWVcbiAgICAgICAgICB9XG4gICAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5kZXNpZ25hdGlvbiA6IFwiTi9BXCJcbiAgICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnByb2Zlc3Npb25hbERldGFpbHNbMF0uZGVzaWduYXRpb24nLCAnTi9BJylcbiAgICAgICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5lbXBsb3llZUNvZGUnKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dFbXBsb3llZUNvZGUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZW1wbG95ZWVDb2RlJ10udmFsdWVcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydlbXBsb3llZUNvZGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLmVtcGxveWVlQ29kZSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5wcmltYXJ5RW1haWwnKSB7XG4gICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMucHJpbWFyeUVtYWlsXG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbFxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd01vYmlsZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydtb2JpbGUnXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ21vYmlsZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMubW9iaWxlID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLm1vYmlsZSA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb2InKSB7XG4gICAgICAgIGlmICh0aGlzLnNob3dEb2IgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgbGV0IF9kb2I6IGFueSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkb2InXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy5mb3JtYXREYXRlKF9kb2IpXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLmZvcm1hdERhdGUoX2RvYilcbiAgICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iKSB7XG4gICAgICAgICAgICBsZXQgX2RvYjogYW55ID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9iXG4gICAgICAgICAgICBjb25zdCBbZGF5LCBtb250aCwgeWVhcl0gPSBfZG9iLnNwbGl0KCctJylcbiAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShOdW1iZXIoeWVhciksIE51bWJlcihtb250aCkgLSAxLCBOdW1iZXIoZGF5KSlcbiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZERheSA9IFN0cmluZyhkYXRlLmdldERhdGUoKSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkTW9udGggPSBTdHJpbmcoZGF0ZS5nZXRNb250aCgpICsgMSkucGFkU3RhcnQoMiwgJzAnKVxuICAgICAgICAgICAgY29uc3QgZm9ybWF0dGVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKVxuICAgICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSBgJHtmb3JtYXR0ZWRZZWFyfS0ke2Zvcm1hdHRlZE1vbnRofS0ke2Zvcm1hdHRlZERheX1gXG4gICAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IGAke2Zvcm1hdHRlZFllYXJ9LSR7Zm9ybWF0dGVkTW9udGh9LSR7Zm9ybWF0dGVkRGF5fWBcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSBcIjE5NTAtMDYtMDFcIlxuICAgICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBcIjE5NTAtMDYtMDFcIlxuICAgICAgICAgIH1cbiAgICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcicpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0dlbmRlciAmJiBzdGF0dXMpIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydnZW5kZXInXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2dlbmRlciddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlcicsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZ2VuZGVyID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmdlbmRlciA6IFwiTi9BXCJcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5kb21pY2lsZU1lZGl1bScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd0RlY2ltYWxNZWRpdW0gJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuZG9taWNpbGVNZWRpdW0nLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmRvbWljaWxlTWVkaXVtIDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5Jykge1xuICAgICAgICBpZiAodGhpcy5zaG93Q2F0ZWdvcnkgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2F0ZWdvcnknXS52YWx1ZVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhdGVnb3J5J10udmFsdWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuY2F0ZWdvcnknLCAnTi9BJylcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5ID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLmNhdGVnb3J5IDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZScpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd1BpbkNvZGUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1sncGluQ29kZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuZW1wbG95bWVudERldGFpbHMucGluQ29kZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmVtcGxveW1lbnREZXRhaWxzLnBpbkNvZGUgP1xuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5lbXBsb3ltZW50RGV0YWlscy5waW5Db2RlIDogXCJOL0FcIlxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzJykge1xuICAgICAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscyAmJlxuICAgICAgICAgIC8vICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5wZXJzb25hbERldGFpbHMuaXNDYWRyZSA/ICdZZXMnIDogJ05vJ1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLnBlcnNvbmFsRGV0YWlscy5pc0NhZHJlJykgPyAnWWVzJyA6ICdObydcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlVHlwZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWyd0eXBlT2ZDaXZpbFNlcnZpY2UnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ3R5cGVPZkNpdmlsU2VydmljZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNpdmlsU2VydmljZVR5cGUgOiAnTi9BJ1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VUeXBlJywgJ04vQScpXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG5cbiAgICAgIGlmIChfZmllbGQuZmllbGQgPT09ICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydzZXJ2aWNlVHlwZSddLnZhbHVlXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snc2VydmljZVR5cGUnXS52YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZSA/XG4gICAgICAgICAgLy8gICB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jaXZpbFNlcnZpY2VOYW1lIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2l2aWxTZXJ2aWNlTmFtZScsICdOL0EnKVxuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZScpIHtcbiAgICAgICAgaWYgKHRoaXMuY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2lzQ2FkcmUnXS52YWx1ZSAmJiBzdGF0dXMpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydjYWRyZU5hbWUnXS52YWx1ZVxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gdGhpcy51c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2NhZHJlTmFtZSddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZScsICdOL0EnKVxuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVOYW1lID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlTmFtZSA6ICdOL0EnXG4gICAgICAgIH1cbiAgICAgICAgZGF0YU9iamVjdC5wdXNoKGZpZWxkVG9BZGQpXG4gICAgICB9XG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gnKSB7XG4gICAgICAgIGlmICh0aGlzLmNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIHRoaXMudXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydpc0NhZHJlJ10udmFsdWUgJiYgc3RhdHVzKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVCYXRjaCddLnZhbHVlXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snY2FkcmVCYXRjaCddLnZhbHVlXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmNhZHJlRGV0YWlscy5jYWRyZUJhdGNoID9cbiAgICAgICAgICAvLyAgIEpTT04uc3RyaW5naWZ5KHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQmF0Y2gpIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCcpID8gSlNPTi5zdHJpbmdpZnkodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVCYXRjaCkgOiAnTi9BJ1xuICAgICAgICB9XG4gICAgICAgIGRhdGFPYmplY3QucHVzaChmaWVsZFRvQWRkKVxuICAgICAgfVxuXG4gICAgICBpZiAoX2ZpZWxkLmZpZWxkID09PSAncHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lJykge1xuICAgICAgICBpZiAodGhpcy5jYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB0aGlzLnVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snaXNDYWRyZSddLnZhbHVlICYmIHN0YXR1cykge1xuICAgICAgICAgIC8vIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gdGhpcy5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5XG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSB0aGlzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lID9cbiAgICAgICAgICAvLyAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuY2FkcmVEZXRhaWxzLmNhZHJlQ29udHJvbGxpbmdBdXRob3JpdHlOYW1lIDogJ04vQSdcbiAgICAgICAgICBmaWVsZFRvQWRkLmFuc3dlciA9IF8uZ2V0KHRoaXMudXNlclByb2ZpbGVPYmplY3QsICdwcm9maWxlRGV0YWlscy5jYWRyZURldGFpbHMuY2FkcmVDb250cm9sbGluZ0F1dGhvcml0eU5hbWUnLCAnTi9BJylcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWQnKSB7XG4gICAgICAgIGlmICh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmXG4gICAgICAgICAgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbUlkKSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzICYmIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1JZFxuICAgICAgICAgIC8vICAgPyB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtSWQgOiBcIk4vQVwiXG4gICAgICAgICAgZmllbGRUb0FkZC5hbnN3ZXIgPSBfLmdldCh0aGlzLnVzZXJQcm9maWxlT2JqZWN0LCAncHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1JZCcsICdOL0EnKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRhdGFPYmplY3RbX2ZpZWxkLm5hbWVdID0gJ04vQSdcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cblxuICAgICAgaWYgKF9maWVsZC5maWVsZCA9PT0gJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yJykge1xuICAgICAgICBpZiAodGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcyAmJlxuICAgICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMuZXh0ZXJuYWxTeXN0ZW1Eb3IpIHtcbiAgICAgICAgICAvLyBkYXRhT2JqZWN0W19maWVsZC5uYW1lXSA9IHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMuYWRkaXRpb25hbFByb3BlcnRpZXMgJiYgdGhpcy51c2VyUHJvZmlsZU9iamVjdC5wcm9maWxlRGV0YWlscy5hZGRpdGlvbmFsUHJvcGVydGllcy5leHRlcm5hbFN5c3RlbURvclxuICAgICAgICAgIC8vICAgPyB0aGlzLnVzZXJQcm9maWxlT2JqZWN0LnByb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yIDogXCJOL0FcIlxuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gXy5nZXQodGhpcy51c2VyUHJvZmlsZU9iamVjdCwgJ3Byb2ZpbGVEZXRhaWxzLmFkZGl0aW9uYWxQcm9wZXJ0aWVzLmV4dGVybmFsU3lzdGVtRG9yJywgJ04vQScpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gZGF0YU9iamVjdFtfZmllbGQubmFtZV0gPSAnTi9BJ1xuICAgICAgICAgIGZpZWxkVG9BZGQuYW5zd2VyID0gJ04vQSdcbiAgICAgICAgfVxuICAgICAgICBkYXRhT2JqZWN0LnB1c2goZmllbGRUb0FkZClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGRhdGFPYmplY3RcbiAgfVxuXG4gIHVwZGF0ZUVtYWlsKGVtYWlsOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBwb3N0RGF0YSA9IHtcbiAgICAgIHJlcXVlc3Q6IHtcbiAgICAgICAgJ3VzZXJJZCc6IHRoaXMuY29uZmlnU3JjLnVuTWFwcGVkVXNlci5pZCxcbiAgICAgICAgJ2NvbnRleHRUb2tlbic6IHRoaXMuY29udGV4dFRva2VuLFxuICAgICAgICAncHJvZmlsZURldGFpbHMnOiB7XG4gICAgICAgICAgJ3BlcnNvbmFsRGV0YWlscyc6IHtcbiAgICAgICAgICAgICdwcmltYXJ5RW1haWwnOiBlbWFpbCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9XG5cbiAgICB0aGlzLmFkZExvYWRlciA9IHRoaXMuYWRkTG9hZGVyICsgMVxuICAgIHRoaXMudXNlclByb2ZpbGVTZXJ2aWNlLnVwZGF0ZVByaW1hcnlFbWFpbERldGFpbHMocG9zdERhdGEpXG4gICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95U3ViamVjdCQpKVxuICAgICAgLnN1YnNjcmliZSgoX3JlczogYW55KSA9PiB7XG4gICAgICAgIHRoaXMuYWRkTG9hZGVyID0gdGhpcy5hZGRMb2FkZXIgLSAxXG4gICAgICAgIHRoaXMudXNlclByb2ZpbGVPYmplY3QucHJvZmlsZURldGFpbHMucGVyc29uYWxEZXRhaWxzLnByaW1hcnlFbWFpbCA9IGVtYWlsXG4gICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCdlbWFpbFVwZGF0ZWQnKSlcbiAgICAgIH0sIChlcnJvcjogSHR0cEVycm9yUmVzcG9uc2UpID0+IHtcbiAgICAgICAgdGhpcy5hZGRMb2FkZXIgPSB0aGlzLmFkZExvYWRlciAtIDFcbiAgICAgICAgaWYgKCFlcnJvci5vaykge1xuICAgICAgICAgIHRoaXMuc25hY2tCYXIub3Blbih0aGlzLmhhbmRsZVRyYW5zbGF0ZVRvKCd1cGRhdGVFbWFpbEZhaWxlZCcpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgc2V0dXBTY3JvbGxMaXN0ZW5lcihvcGVuZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBjb25zdCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlYXJjaERlc2lnbmF0aW9uJyk7XG4gICAgaWYgKG9wZW5lZCAmJiBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wpIHtcbiAgICAgIHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbC5zZXRWYWx1ZSgnJylcbiAgICAgIHRoaXMuZGVzaWduYXRpb25zT2Zmc2V0ID0gMFxuICAgICAgdGhpcy5kZXNpZ25hdGlvbnNNZXRhID0gW107XG4gICAgICB0aGlzLmdldGRlc2lnbmF0aW9uc01ldGEoKVxuICAgICAgY29uc3Qgc2VhcmNoSW5wdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuc2VhcmNoLWlucHV0JykgYXMgSFRNTElucHV0RWxlbWVudDtcbiAgICAgIGlmIChzZWFyY2hJbnB1dCkge1xuICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpO1xuICAgICAgfVxuICAgICAgY29uc3QgcGFuZWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcubWF0LXNlbGVjdC1wYW5lbCcpO1xuICAgICAgaWYgKHBhbmVsKSB7XG4gICAgICAgIHBhbmVsLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25EZXNpZ25hdGlvblNlbGVjdFNjcm9sbC5iaW5kKHRoaXMpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRlc2lnbmF0aW9uU2VsZWN0U2Nyb2xsKGV2ZW50OiBhbnkpOiB2b2lkIHtcbiAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0O1xuICAgICAgLy8gQ2hlY2sgaWYgdXNlciBoYXMgc2Nyb2xsZWQgdG8gdGhlIGJvdHRvbSAod2l0aCBhIHNtYWxsIHRocmVzaG9sZClcbiAgICAgIGlmIChlbGVtZW50LnNjcm9sbFRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0ID49IGVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gNSkge1xuICAgICAgICAvLyBPbmx5IGxvYWQgbW9yZSBpZiBub3QgYWxyZWFkeSBsb2FkaW5nIGFuZCBpZiB0aGVyZSBhcmUgcG90ZW50aWFsbHkgbW9yZSBpdGVtc1xuICAgICAgICBpZiAoIXRoaXMuaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9ucyAmJiB0aGlzLmRlc2lnbmF0aW9uc01ldGEubGVuZ3RoIDwgdGhpcy5kZXNpZ25hdGlvbnNUb3RhbENvdW50KSB7XG4gICAgICAgICAgdGhpcy5pc0xvYWRpbmdNb3JlRGVzaWduYXRpb25zID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc09mZnNldCArPSAxO1xuICAgICAgICAgIHRoaXMuZ2V0ZGVzaWduYXRpb25zTWV0YSgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgfVxuXG4gIGNoZWNrQ3VycmVudERlc2lnbmF0aW9uUHJlc2VudCgpIHtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgZGVzaWduYXRpb24gdmFsdWVcbiAgICBjb25zdCBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wgPSB0aGlzLnVzZXJEZXRhaWxzRm9ybS5nZXQoJ2Rlc2lnbmF0aW9uJyk7XG4gICAgY29uc3QgY3VycmVudERlc2lnbmF0aW9uID0gc2VhcmNoRGVzaWduYXRpb25Db250cm9sID8gc2VhcmNoRGVzaWduYXRpb25Db250cm9sLnZhbHVlIDogJyc7XG4gICAgLy8gQ2hlY2sgaWYgY3VycmVudCBkZXNpZ25hdGlvbiBleGlzdHMgaW4gdGhlIGxpc3RcbiAgICBpZiAoY3VycmVudERlc2lnbmF0aW9uKSB7XG4gICAgICBjb25zdCBkZXNpZ25hdGlvbkV4aXN0cyA9IHRoaXMuZGVzaWduYXRpb25zTWV0YS5zb21lKFxuICAgICAgICAoZGVzaWduYXRpb246IGFueSkgPT4gZGVzaWduYXRpb24ubmFtZS50b0xvd2VyQ2FzZSgpID09PSBjdXJyZW50RGVzaWduYXRpb24udG9Mb3dlckNhc2UoKVxuICAgICAgKTtcblxuICAgICAgLy8gSWYgZGVzaWduYXRpb24gZG9lc24ndCBleGlzdCBpbiB0aGUgbGlzdCwgYWRkIGl0XG4gICAgICBpZiAoIWRlc2lnbmF0aW9uRXhpc3RzKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIG5ldyBkZXNpZ25hdGlvbiBvYmplY3QgdG8gbWF0Y2ggdGhlIHN0cnVjdHVyZSBvZiBvdGhlciBpdGVtc1xuICAgICAgICBjb25zdCBuZXdEZXNpZ25hdGlvbiA9IHtcbiAgICAgICAgICBuYW1lOiBjdXJyZW50RGVzaWduYXRpb24sXG4gICAgICAgICAgc3RhdHVzOiAnQWN0aXZlJ1xuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRlc2lnbmF0aW9uc01ldGEudW5zaGlmdChuZXdEZXNpZ25hdGlvbik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKCk6IHZvaWQge1xuICAgIGNvbnN0IHNlYXJjaERlc2lnbmF0aW9uQ29udHJvbCA9IHRoaXMudXNlckRldGFpbHNGb3JtLmdldCgnc2VhcmNoRGVzaWduYXRpb24nKTtcbiAgICBpZiAoc2VhcmNoRGVzaWduYXRpb25Db250cm9sKSB7XG4gICAgICBzZWFyY2hEZXNpZ25hdGlvbkNvbnRyb2wuc2V0VmFsdWUoJycpXG4gICAgICB0aGlzLmRlc2lnbmF0aW9uU2VhcmNoVGV4dCA9ICcnXG4gICAgfVxuICAgIHRoaXMuY2hlY2tDdXJyZW50RGVzaWduYXRpb25QcmVzZW50KClcbiAgfVxuXG59XG4iLCI8ZGl2ICNmdWxsU2NyZWVuQ29udGFpbmVyPlxuICAgIDxkaXYgY2xhc3M9XCJkaWFsb2ctaGVhZGVyIHRleHQtcmlnaHQgbWItMlwiPlxuICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJtYXQtaWNvbiBub3RyYW5zbGF0ZSBtYXRlcmlhbC1pY29ucyBjbG9zZS1pY29uIGN1cnNvci1wb2ludGVyXCIgbWF0cHJlZml4PVwiXCIgcm9sZT1cImltZ1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiIFttYXQtZGlhbG9nLWNsb3NlXT1cImZhbHNlXCI+Y2xvc2U8L21hdC1pY29uPlxuICAgIDwvZGl2PlxuICAgIDxoMT4ge3tkYXRhPy5jb3Vyc2VOYW1lfX0gPC9oMT5cbiAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCIhaXNMb2FkaW5nXCI+XG4gICAgICA8Zm9ybSBbZm9ybUdyb3VwXT1cInVzZXJEZXRhaWxzRm9ybVwiIGNsYXNzPVwidXNlckRldGFpbHNGb3JtXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd05hbWVcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8ubmFtZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJuYW1lXCIgcGxhY2Vob2xkZXI9XCJOYW1lXCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93T3JnXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgKHNob3dEb3B0Q2hhbmdlcyA/ICdwcm9maWxlSW5mby5wcmVzZW50T3JnYW5pc2F0aW9uJyA6ICdwcm9maWxlSW5mby5vcmdhbmlzYXRpb24nKSB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm9yZ2FuaXNhdGlvblwiIHBsYWNlaG9sZGVyPVwiT3JnYW5pc2F0aW9uXCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93RW1haWxcIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW1haWwnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwicHJpbWFyeUVtYWlsXCIgcGxhY2Vob2xkZXI9XCJFbnRlciBlbWFpbFwiIChrZXl1cCk9XCJoYW5kbGVFbXB0eSgncHJpbWFyeUVtYWlsJylcIi8+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cIm1hdC1lcnJvclwiICpuZ0lmPVwidXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykuaGFzRXJyb3IoJ3JlcXVpcmVkJykgfHwgdXNlckRldGFpbHNGb3JtLmdldCgncHJpbWFyeUVtYWlsJykuaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uaW52YWxpZEVtYWlsJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9tYXQtZXJyb3I+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiICpuZ0lmPVwidmVyaWZ5RW1haWwgJiYgIW90cFNlbnQgJiYgIWVWZXJpZmllZFwiPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImdldC1vdHBcIiAoY2xpY2spPVwiaGFuZGxlR2VuZXJhdGVFbWFpbE9UUCgnZW1haWwnKVwiPnt7ICdwcm9maWxlSW5mby5nZXRPVFAnIHwgdHJhbnNsYXRlXG4gICAgICAgICAgICAgICAgfX08L3NwYW4+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgKm5nSWY9XCJlbWFpbE90cFNlbnRcIj5cbiAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJlbWFpbE90cEZvcm1cIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBlbnRlci1vdHBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5lbnRlck9UUCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJtYi0zXCI+VGltZSBSZW1haW5pbmc6IDxzcGFuICNlbWFpbFRpbWVyRGl2Pjwvc3Bhbj48L2Rpdj5cbiAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGQgbW9iaWxlLW51bVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBtYXRJbnB1dCBmb3JtQ29udHJvbE5hbWU9XCJlT3RwXCIgY2xhc3M9XCJpbnB1dC10ZXh0IGN1c3RvbS1zaXplXCIgcGxhY2Vob2xkZXI9XCJ7eyAncHJvZmlsZUluZm8uZW50ZXJUaGVPVFAnIHwgdHJhbnNsYXRlIH19XCIgbWF4bGVuZ3RoPVwiNlwiIC8+XG4gICAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGp1c3RpZnktY2VudGVyXCIgKm5nSWY9XCJzaG93RW1haWxSZXNlbmRPVFBcIj5cbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3dcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aW1lclwiPnt7ICdwcm9maWxlSW5mby5kaWROb3RSZWNlaXZlT1RQJyB8IHRyYW5zbGF0ZSB9fTwvZGl2PlxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInJlc2VuZC1vdHBcIiAoY2xpY2spPVwiaGFuZGxlUmVzZW5kRW1haWxPVFAoKVwiPiZuYnNwOyZuYnNwO3t7ICdwcm9maWxlSW5mby5yZXNlbnRPVFAnIHwgdHJhbnNsYXRlIH19PC9kaXY+XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCBtYi00XCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXJvdyBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz1cInNhdmUtYnV0dG9uXCIgKGNsaWNrKT1cInZlcmlmeUVtYWlsT1RQKClcIj57eyAncHJvZmlsZUluZm8uc3VibWl0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dHcm91cFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmdyb3VwJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImdyb3VwXCIgcGxhY2Vob2xkZXI9XCJ7eyAncHJvZmlsZUluZm8uY2hvb3NlQUdyb3VwJyB8IHRyYW5zbGF0ZSB9fVwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGdyb3VwIG9mIGdyb3VwRGF0YVwiIHZhbHVlPVwie3tncm91cH19XCI+e3sgZ3JvdXAgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIG1iLTJcIiAqbmdJZj1cInNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAgICB7eydwcm9maWxlSW5mby5ncm91cE5vdGUnIHwgdHJhbnNsYXRlfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbCByZWxhdGl2ZVwiICpuZ0lmPVwiY2FuU2hvd0Rlc2lnbmF0aW9uXCI+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZGVzaWduYXRpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgYXV0by1jb21wbGV0ZS1yb3cgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGhpZ2gtemluZGV4XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwiZGVzaWduYXRpb25cIlxuICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJkZXNpZ25hdGlvbigkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIChmb2N1cyk9XCJvbkRlc2lnbmF0aW9uc0ZvY3VzKClcIiAjdGV4dEJveFxuICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmNob29zZUFEZXNpZ25hdGlvbicgfCB0cmFuc2xhdGUgfX1cIj5cbiAgICAgICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZGlzYWduYXRpb24tY2FyZXRcIj5hcnJvd19kcm9wX2Rvd248L21hdC1pY29uPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gLS0+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cImN1c3RvbS1zZWxlY3QtY29udGFpbmVyXCI+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cImZpeGVkLWhlaWdodC1zZWxlY3RcIj5cbiAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgcGxhY2Vob2xkZXI9XCJ7eyAncHJvZmlsZUluZm8uY2hvb3NlQURlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVwiIGZvcm1Db250cm9sTmFtZT1cImRlc2lnbmF0aW9uXCIgIChjbG9zZWQpPVwib25EZXNpZ25hdGlvbkRyb3Bkb3duQ2xvc2VkKClcIiAob3BlbmVkQ2hhbmdlKT1cInNldHVwU2Nyb2xsTGlzdGVuZXIoJGV2ZW50KVwiICBwYW5lbENsYXNzPVwic2VhcmNoLXBhbmVsXCI+XG4gICAgICAgICAgICAgICAgPCEtLSBTdGlja3kgc2VhcmNoIGlucHV0IGNvbnRhaW5lciAtLT5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic3RpY2t5LXNlYXJjaC1jb250YWluZXJcIiAoY2xpY2spPVwiJGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwic2VhcmNoLWlucHV0LXdyYXBwZXJcIj5cbiAgICAgICAgICAgICAgICAgICAgPGlucHV0IFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwidGV4dFwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj1cIlNlYXJjaCBkZXNpZ25hdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbE5hbWU9XCJzZWFyY2hEZXNpZ25hdGlvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInNlYXJjaC1pbnB1dFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChrZXlkb3duKT1cIiRldmVudC5zdG9wUHJvcGFnYXRpb24oKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCIkZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRvY29tcGxldGU9XCJvZmZcIj5cbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5nSWY9XCJzZWFyY2hEZXNpZ25hdGlvbj8udmFsdWVcIiBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cImNsZWFyLWJ1dHRvblwiIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwic2VhcmNoRGVzaWduYXRpb24/LnNldFZhbHVlKCcnKVwiPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICDinJVcbiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbnMgbGlzdCAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgb3B0aW9uIG9mIGRlc2lnbmF0aW9uc01ldGEgXCIgW3ZhbHVlXT1cIm9wdGlvbj8ubmFtZVwiIChjbGljayk9XCJzZWxlY3REZXNpZ25hdGlvbihvcHRpb24/Lm5hbWUpXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7eyBvcHRpb24/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgIDwhLS0gTG9hZGluZyBpbmRpY2F0b3IgLS0+XG4gICAgICAgICAgICAgICAgICA8ZGl2ICpuZ0lmPVwiaXNMb2FkaW5nTW9yZURlc2lnbmF0aW9uc1wiIGNsYXNzPVwibG9hZGluZy1pbmRpY2F0b3JcIj5cbiAgICAgICAgICAgICAgICAgICAgTG9hZGluZyBtb3JlLi4uXG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8IS0tIE5vIHJlc3VsdHMgbWVzc2FnZSAtLT5cbiAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdJZj1cIihkZXNpZ25hdGlvbnNNZXRhICk/Lmxlbmd0aCA9PT0gMFwiIGRpc2FibGVkPlxuICAgICAgICAgICAgICAgICAgICAgICAgTm8gbWF0Y2hlcyBmb3VuZFxuICAgICAgICAgICAgICAgIDwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8bWF0LWVycm9yICpuZ0lmPVwidXNlckRldGFpbHNGb3JtPy5jb250cm9sc1snZGVzaWduYXRpb24nXT8uaW52YWxpZCAmJiB1c2VyRGV0YWlsc0Zvcm0/LmNvbnRyb2xzWydkZXNpZ25hdGlvbiddPy50b3VjaGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgIFBsZWFzZSBzZWxlY3QgYSB2YWxpZCBkZXNpZ25hdGlvbi5cbiAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LXhzIG1iLTJcIiAqbmdJZj1cInNob3dEb3B0Q2hhbmdlc1wiPlxuICAgICAgICAgICAge3sncHJvZmlsZUluZm8uZGVzaWduYXRpb25Ob3RlJyB8IHRyYW5zbGF0ZX19XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPCEtLSA8ZGl2IGNsYXNzPVwiYXV0by1saXN0IGZsZXggZmxleC1jb2wgaWdub3JlLWJsdXJcIiAjZHJvcGRvd25cbiAgICAgICAgICAgICpuZ0lmPVwib3BlbkRlc2lnbmF0aW9uRHJvcGRvd24gJiYgZmlsdGVyRGVzaWduYXRpb25zTWV0YS5sZW5ndGhcIj5cbiAgICAgICAgICAgIDxkaXYgKG1vdXNlZG93bik9XCJwcmV2ZW50Qmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgY2xhc3M9XCJpdGVtIHt7dXNlckRldGFpbHNGb3JtLmNvbnRyb2xzWydkZXNpZ25hdGlvbiddPy52YWx1ZT8udG9Mb3dlckNhc2UoKSA9PT0gZGVzaWduYXRpb24/Lm5hbWU/LnRvTG93ZXJDYXNlKCkgPyAnaXRlbS1hY3RpdmUnIDogJyd9fVwiXG4gICAgICAgICAgICAgICpuZ0Zvcj1cImxldCBkZXNpZ25hdGlvbiBvZiBmaWx0ZXJEZXNpZ25hdGlvbnNNZXRhXCIgKGNsaWNrKT1cInNlbGVjdERlc2lnbmF0aW9uKGRlc2lnbmF0aW9uLm5hbWUpXCI+XG4gICAgICAgICAgICAgIHt7IGRlc2lnbmF0aW9uPy5uYW1lIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj4gLS0+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlXCIgKm5nSWY9XCJjYW5TaG93RGVzaWduYXRpb24gJiYgY2FuU2hvd090aGVyRGVzaWduYXRpb25cIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5vdGhlckRlc2lnbmF0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXYgKm5nSWY9XCJjYW5TaG93T3RoZXJEZXNpZ25hdGlvblwiPlxuICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0XCIgbWF0SW5wdXQgZm9ybUNvbnRyb2xOYW1lPVwib3RoZXJEZXNpZ25hdGlvblwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmVudGVyRGVzaWduYXRpb24nIHwgdHJhbnNsYXRlIH19XCIvPlxuICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0VtcGxveWVlQ29kZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5lbXBsb3llZUlkJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIGNsYXNzPVwiaW5wdXQtdGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cImVtcGxveWVlQ29kZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgZW1wbG95ZWUgY29kZVwiLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD4gICAgXG4gICAgICAgICAgICAgIDxtYXQtZXJyb3IgY2xhc3M9XCJtYXQtZXJyb3JcIiAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybT8uZ2V0KCdlbXBsb3llZUNvZGUnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICAgIFBsZWFzZSBlbnRlciBhbiBBbHBoYS1udW1lcmljIHZhbHVlIG9ubHlcbiAgICAgICAgICAgIDwvbWF0LWVycm9yPiAgICAgICAgICAgICAgICBcbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5zaG93TW9iaWxlXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLm1vYmlsZU51bWJlcicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1yb3cgZ2FwLTRcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImNvdW50cnktY29kZSBmbGV4IGp1c3RpZnktY2VudGVyIGl0ZW1zLWNlbnRlclwiIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCI+XG4gICAgICAgICAgICAgICAgKzkxXG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleC0xXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2xcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwibW9iaWxlLW51bVwiPlxuICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT1cInRleHRcIiBjbGFzcz1cImlucHV0LXRleHQgbW9iaWxlLXRleHQgcmVsYXRpdmVcIiBtYXhsZW5ndGg9XCIxMFwiIChrZXl1cCk9XCJoYW5kbGVFbXB0eSgnbW9iaWxlJylcIlxuICAgICAgICAgICAgICAgICAgICAgIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm1vYmlsZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgbW9iaWxlIG51bWJlclwiLz5cbiAgICAgICAgICAgICAgICAgICAgICA8bWF0LWljb24gY2xhc3M9XCJ2ZXJpZmllZC1jaGVja1wiICpuZ0lmPVwibVZlcmlmaWVkXCI+Y2hlY2tfY2lyY2xlPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICAgICAgICA8bWF0LWVycm9yIGNsYXNzPVwibWF0LWVycm9yXCJcbiAgICAgICAgICAgICAgICAgICAgICAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpLmhhc0Vycm9yKCdyZXF1aXJlZCcpIHx8IHVzZXJEZXRhaWxzRm9ybS5nZXQoJ21vYmlsZScpLmhhc0Vycm9yKCdwYXR0ZXJuJylcIj5cbiAgICAgICAgICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5wbGVhc2VFbnRlclZhbGlkTW9iaWxlTnVtYmVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWVuZFwiICpuZ0lmPVwidmVyaWZ5TW9iaWxlICYmICFvdHBTZW50ICYmICFtVmVyaWZpZWRcIj5cbiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiZ2V0LW90cCBzbTptci00XCIgKGNsaWNrKT1cImhhbmRsZUdlbmVyYXRlT1RQKCdwaG9uZScpXCI+e3sgJ3Byb2ZpbGVJbmZvLmdldE9UUCcgfFxuICAgICAgICAgICAgICAgICAgICB0cmFuc2xhdGUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2ICpuZ0lmPVwib3RwU2VudFwiPiAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgPGZvcm0gW2Zvcm1Hcm91cF09XCJvdHBGb3JtXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZW50ZXItb3RwXCI+XG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZW50ZXJPVFAnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWItM1wiPlRpbWUgUmVtYWluaW5nOiA8c3BhbiAjdGltZXJEaXY+PC9zcGFuPjwvZGl2PlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZCBtb2JpbGUtbnVtXCI+XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwidGV4dFwiIG1hdElucHV0IGZvcm1Db250cm9sTmFtZT1cIm90cFwiIGNsYXNzPVwiaW5wdXQtdGV4dCBjdXN0b20tc2l6ZVwiIHBsYWNlaG9sZGVyPVwie3sgJ3Byb2ZpbGVJbmZvLmVudGVyVGhlT1RQJyB8IHRyYW5zbGF0ZSB9fVwiIG1heGxlbmd0aD1cIjZcIiAvPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBqdXN0aWZ5LWNlbnRlclwiICpuZ0lmPVwic2hvd1Jlc2VuZE9UUFwiPiAgXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93XCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGltZXJcIj57eyAncHJvZmlsZUluZm8uZGlkTm90UmVjZWl2ZU9UUCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJyZXNlbmQtb3RwXCIgKGNsaWNrKT1cImhhbmRsZVJlc2VuZE9UUCgpXCI+Jm5ic3A7Jm5ic3A7e3sgJ3Byb2ZpbGVJbmZvLnJlc2VudE9UUCcgfCB0cmFuc2xhdGUgfX08L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIG1iLTRcIj5cbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGp1c3RpZnktYmV0d2VlblwiPlxuICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPVwic2F2ZS1idXR0b25cIiAoY2xpY2spPVwidmVyaWZ5TW9iaWxlT1RQKClcIj57eyAncHJvZmlsZUluZm8uc3VibWl0JyB8IHRyYW5zbGF0ZSB9fTwvYnV0dG9uPlxuICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDwvZm9ybT5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93R2VuZGVyXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uZ2VuZGVyJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInctZnVsbFwiPlxuICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImdlbmRlclwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGdlbmRlclwiPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgX2dlbmRlciBvZiBlVXNlckdlbmRlclwiIHZhbHVlPVwie3sgX2dlbmRlciB9fVwiPnt7XG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVHJhbnNsYXRlVG8oX2dlbmRlci50b0xvd2VyQ2FzZSgpKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd0RvYlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmRvYicgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgICAgICA8aW5wdXQgbWF0SW5wdXQgY2xhc3M9XCJpbnB1dC10ZXh0IGljb24taW5jbHVkZS1pbnB1dFwiIFttYXhdPVwiY3VycmVudERhdGVcIiBbbWF0RGF0ZXBpY2tlcl09XCJwaWNrZXJcIiBbKG5nTW9kZWwpXT1cInNlbGVjdGVkRGF0ZVwiXG4gICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZG9iXCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgZGF0ZSBvZiBiaXJ0aFwiIC8+XG4gICAgICAgICAgICAgICAgICA8bWF0LWRhdGVwaWNrZXItdG9nZ2xlIG1hdFN1ZmZpeCBbZm9yXT1cInBpY2tlclwiPjwvbWF0LWRhdGVwaWNrZXItdG9nZ2xlPlxuICAgICAgICAgICAgICAgICAgPG1hdC1kYXRlcGlja2VyICNwaWNrZXI+PC9tYXQtZGF0ZXBpY2tlcj5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIHJlbGF0aXZlXCIgKm5nSWY9XCJjYW5TaG93RG9taWNpbGVNZWRpdW1cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkXCJcbiAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5tb3RoZXJUb25ndWUnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwidy1mdWxsXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtcm93IGF1dG8tY29tcGxldGUtcm93IHJlbGF0aXZlXCI+XG4gICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCJ0ZXh0XCIgY2xhc3M9XCJpbnB1dC10ZXh0IGhpZ2gtemluZGV4XCIgYXJpYS1sYWJlbD1cIkRvbWljaWxlIE1lZGl1bSAoTW90aGVyIFRvbmd1ZSlcIiBtYXRJbnB1dFxuICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xOYW1lPVwiZG9taWNpbGVNZWRpdW1cIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBtb3RoZXIgdG9uZ3VlXCJcbiAgICAgICAgICAgICAgICAgIChpbnB1dCk9XCJmaWx0ZXJMYW5ndWFnZSgkZXZlbnQudGFyZ2V0LnZhbHVlKVwiIChmb2N1cyk9XCJvbkxhbmd1YWdlRm9jdXMoKVwiICNsYW5ndWFnZVRleHRCb3gvPlxuICAgICAgICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cIm1vdGhlci10b3VuZ3VlLWNhcmV0XCI+YXJyb3dfZHJvcF9kb3duPC9tYXQtaWNvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgICAgPG1hdC1lcnJvciAqbmdJZj1cInVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS5pbnZhbGlkICYmIHVzZXJEZXRhaWxzRm9ybS5jb250cm9sc1snZG9taWNpbGVNZWRpdW0nXS50b3VjaGVkXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cIm1hdC1lcnJvclwiPlxuICAgICAgICAgICAgICAgICAgUGxlYXNlIHNlbGVjdCBhIHZhbGlkIG1vdGhlciB0b25ndWUuXG4gICAgICAgICAgICAgIDwvbWF0LWVycm9yPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImF1dG8tbGFuZ3VhZ2UtbGlzdCBmbGV4IGZsZXgtY29sIGlnbm9yZS1ibHVyXCIgI2xhbmd1YWdlRHJvcGRvd25cbiAgICAgICAgICAgICAgKm5nSWY9XCJvcGVuTGFuZ3VhZ2VEcm9wZG93biAmJiBtYXN0ZXJMYW5ndWFnZXM/Lmxlbmd0aFwiPlxuICAgICAgICAgICAgICA8ZGl2IChtb3VzZWRvd24pPVwicHJldmVudExhbmd1YWdlQmx1cigkZXZlbnQpXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImxhbmd1YWdlLWl0ZW0ge3t1c2VyRGV0YWlsc0Zvcm0uY29udHJvbHNbJ2RvbWljaWxlTWVkaXVtJ10/LnZhbHVlPy50b0xvd2VyQ2FzZSgpID09PSBsYW5ndWFnZT8ubmFtZT8udG9Mb3dlckNhc2UoKSA/ICdsYW5ndWFnZS1pdGVtLWFjdGl2ZScgOiAnJ319XCJcbiAgICAgICAgICAgICAgICAqbmdGb3I9XCJsZXQgbGFuZ3VhZ2Ugb2YgbWFzdGVyTGFuZ3VhZ2VzXCIgKGNsaWNrKT1cInNlbGVjdExhbmd1YWdlKGxhbmd1YWdlLm5hbWUpXCI+XG4gICAgICAgICAgICAgICAge3sgbGFuZ3VhZ2U/Lm5hbWUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dDYXRlZ29yeVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLmNhdGVnb3J5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImNhdGVnb3J5XCIgcGxhY2Vob2xkZXI9XCJTZWxlY3QgY2F0ZWdvcnlcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IGNhdGVnb3J5IG9mIGVDYXRlZ29yeVwiIHZhbHVlPVwie3sgY2F0ZWdvcnkgfX1cIj57e1xuICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZVRyYW5zbGF0ZVRvKGNhdGVnb3J5Py50b0xvd2VyQ2FzZSgpKSB9fTwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93cGluQ29kZVwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZm9udC1zZW1pYm9sZCBtYXJnaW4tMCByZXF1aXJlZFwiXG4gICAgICAgICAgICAgICAgICBpMThuPVwiVGl0bGUgbGFiZWx8TGFiZWwgd2hpY2ggZXhwbGFpbnMgdGhlIHVzZXIgdG8gZW50ZXIgdGl0bGVcIj5cbiAgICAgICAgICAgICAgICAgIHt7ICd1c2VyUHJvZmlsZS5vZmZpY2VQaW5Db2RlJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJ3LWZ1bGxcIj5cbiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVwiZW1haWxcIiBjbGFzcz1cImlucHV0LXRleHRcIiBtYXRJbnB1dCBtYXhsZW5ndGg9XCI2XCIgZm9ybUNvbnRyb2xOYW1lPVwicGluQ29kZVwiIHBsYWNlaG9sZGVyPVwiRW50ZXIgcGluY29kZVwiLz5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICAgICAgPG1hdC1lcnJvciBjbGFzcz1cIm1hdC1lcnJvclwiICpuZ0lmPVwidXNlckRldGFpbHNGb3JtPy5nZXQoJ3BpbkNvZGUnKT8uaGFzRXJyb3IoJ3BhdHRlcm4nKVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5pbnZhbGlkUGluQ29kZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgICA8L21hdC1lcnJvcj4gICAgICAgICAgXG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5mcm9tR292T3JnYW5pemF0aW9uJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgIDxtYXQtc2VsZWN0IGZvcm1Db250cm9sTmFtZT1cImlzQ2FkcmVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cImdldElzQ2FkcmVTdGF0dXMoJGV2ZW50LnZhbHVlKVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNhZHJlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uIFt2YWx1ZV09XCJ0cnVlXCI+WWVzPC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiBbdmFsdWVdPVwiZmFsc2VcIj5ObzwvbWF0LW9wdGlvbj5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgPC9tYXQtZm9ybS1maWVsZD5cbiAgICAgICAgICA8L2Rpdj5cblxuICAgICAgICAgIDxkaXYgY2xhc3M9XCJ3LWZ1bGxcIiAqbmdJZj1cImNhblNob3dzaG93Q2FkcmVEZXRhaWxzICYmIGlzQ2FkcmVTdGF0dXMgICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby50eXBlT2ZDaXZpbFNlcnZpY2UnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8bWF0LWZvcm0tZmllbGQgYXBwZWFyYW5jZT1cIm91dGxpbmVcIiBjbGFzcz1cInByb2ZpbGUtZm9ybS1maWVsZFwiPlxuICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwidHlwZU9mQ2l2aWxTZXJ2aWNlXCIgKHNlbGVjdGlvbkNoYW5nZSk9XCJnZXRTZXJ2aWNlKCRldmVudC52YWx1ZSlcIiAgcGxhY2Vob2xkZXI9XCJTZWxlY3QgdHlwZSBvZiBjaXZpbCBzZXJ2aWNlXCI+XG4gICAgICAgICAgICAgICAgICAgIDxtYXQtb3B0aW9uICpuZ0Zvcj1cImxldCBzZXJ2aWNlIG9mIGNpdmlsU2VydmljZVR5cGVzXCIgW3ZhbHVlXT1cInNlcnZpY2VcIj57eyBzZXJ2aWNlIH19PC9tYXQtb3B0aW9uPlxuICAgICAgICAgICAgICAgICAgPC9tYXQtc2VsZWN0PlxuICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuXG4gICAgICAgICAgPGRpdiBjbGFzcz1cInctZnVsbFwiICpuZ0lmPVwiY2FuU2hvd3Nob3dDYWRyZURldGFpbHMgJiYgdXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJykudmFsdWUgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5zZXJ2aWNlVHlwZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJzZXJ2aWNlVHlwZVwiIChzZWxlY3Rpb25DaGFuZ2UpPVwib25TZXJ2aWNlU2VsZWN0KCRldmVudClcIiBwbGFjZWhvbGRlcj1cIlNlbGVjdCBzZXJ2aWNlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHNlcnZpY2Ugb2Ygc2VydmljZU5hbWVcIiBbdmFsdWVdPVwic2VydmljZVwiPnt7IHNlcnZpY2UgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICA8L21hdC1zZWxlY3Q+XG4gICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICYmIFxuICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdpc0NhZHJlJykudmFsdWUgXG4gICAgICAgICAgICAgICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIChcbiAgICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gQWRtaW5pc3RyYXRpdmUgU2VydmljZSAoSUFTKScgfHwgXG4gICAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIFBvbGljZSBTZXJ2aWNlIChJUFMpJyB8fCBcbiAgICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gRm9yZXN0IFNlcnZpY2UgKElGb1MpJyBcbiAgICAgICAgICAgICAgICApICYmICFzaG93RG9wdENoYW5nZXNcIj5cbiAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5jYWRyZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgIDxtYXQtZm9ybS1maWVsZCBhcHBlYXJhbmNlPVwib3V0bGluZVwiIGNsYXNzPVwicHJvZmlsZS1mb3JtLWZpZWxkXCI+XG4gICAgICAgICAgICAgICAgICA8bWF0LXNlbGVjdCBmb3JtQ29udHJvbE5hbWU9XCJjYWRyZU5hbWVcIiAoc2VsZWN0aW9uQ2hhbmdlKT1cIm9uQ2FkcmVTZWxlY3QoJGV2ZW50LnZhbHVlKVwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGNhZHJlXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPG1hdC1vcHRpb24gKm5nRm9yPVwibGV0IHN0YXRlIG9mIGNhZHJlXCIgW3ZhbHVlXT1cInN0YXRlXCI+e3sgc3RhdGUgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICA8L21hdC1mb3JtLWZpZWxkPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCIhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpICYmICh1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlICYmIFxuICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlICYmIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3R5cGVPZkNpdmlsU2VydmljZScpLnZhbHVlICYmIChcbiAgICAgICAgICAgICAgICB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdzZXJ2aWNlVHlwZScpLnZhbHVlID09PSAnSW5kaWFuIEFkbWluaXN0cmF0aXZlIFNlcnZpY2UgKElBUyknIHx8IFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gUG9saWNlIFNlcnZpY2UgKElQUyknIHx8IFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgPT09ICdJbmRpYW4gRm9yZXN0IFNlcnZpY2UgKElGb1MpJyBcbiAgICAgICAgICAgICkgJiYgdXNlckRldGFpbHNGb3JtLmdldCgnY2FkcmVOYW1lJykudmFsdWUpICA/IHRydWUgOiAoKHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgJiYgXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnaXNDYWRyZScpLnZhbHVlIFxuICAgICAgICAgICAgJiYgdXNlckRldGFpbHNGb3JtLmdldCgndHlwZU9mQ2l2aWxTZXJ2aWNlJykudmFsdWUgJiYgKFxuICAgICAgICAgICAgICAgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ3NlcnZpY2VUeXBlJykudmFsdWUgIT09ICdJbmRpYW4gQWRtaW5pc3RyYXRpdmUgU2VydmljZSAoSUFTKScgJiYgXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAhPT0gJ0luZGlhbiBQb2xpY2UgU2VydmljZSAoSVBTKScgJiYgXG4gICAgICAgICAgICAgICAgdXNlckRldGFpbHNGb3JtLmdldCgnc2VydmljZVR5cGUnKS52YWx1ZSAhPT0gJ0luZGlhbiBGb3Jlc3QgU2VydmljZSAoSUZvUyknIFxuICAgICAgICAgICAgKSkpID8gdHJ1ZSA6IGZhbHNlXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZvbnQtc2VtaWJvbGQgbWFyZ2luLTAgcmVxdWlyZWRcIlxuICAgICAgICAgICAgICAgICAgaTE4bj1cIlRpdGxlIGxhYmVsfExhYmVsIHdoaWNoIGV4cGxhaW5zIHRoZSB1c2VyIHRvIGVudGVyIHRpdGxlXCI+XG4gICAgICAgICAgICAgICAgICB7eyAncHJvZmlsZUluZm8uYmF0Y2gnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgPG1hdC1mb3JtLWZpZWxkIGFwcGVhcmFuY2U9XCJvdXRsaW5lXCIgY2xhc3M9XCJwcm9maWxlLWZvcm0tZmllbGRcIj5cbiAgICAgICAgICAgICAgICAgICAgPG1hdC1zZWxlY3QgZm9ybUNvbnRyb2xOYW1lPVwiY2FkcmVCYXRjaFwiIHBsYWNlaG9sZGVyPVwiU2VsZWN0IGJhdGNoXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8bWF0LW9wdGlvbiAqbmdGb3I9XCJsZXQgeWVhciBvZiB5ZWFyQXJyYXlcIiBbdmFsdWVdPVwieWVhclwiPnt7IHllYXIgfX08L21hdC1vcHRpb24+XG4gICAgICAgICAgICAgICAgICAgIDwvbWF0LXNlbGVjdD5cbiAgICAgICAgICAgICAgICAgIDwvbWF0LWZvcm0tZmllbGQ+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsXCIgKm5nSWY9XCJjYW5TaG93c2hvd0NhZHJlRGV0YWlscyAmJiB1c2VyRGV0YWlsc0Zvcm0uZ2V0KCdpc0NhZHJlJykudmFsdWUgJiYgIHVzZXJEZXRhaWxzRm9ybS5nZXQoJ2NhZHJlQmF0Y2gnKS52YWx1ZSAmJiAhc2hvd0RvcHRDaGFuZ2VzXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb250LXNlbWlib2xkIG1hcmdpbi0wIHJlcXVpcmVkIG1iLTNcIlxuICAgICAgICAgICAgICAgIGkxOG49XCJUaXRsZSBsYWJlbHxMYWJlbCB3aGljaCBleHBsYWlucyB0aGUgdXNlciB0byBlbnRlciB0aXRsZVwiPlxuICAgICAgICAgICAgICAgIHt7ICdwcm9maWxlSW5mby5jYWRyZUNvbnRyb2xsaW5nQXV0aG9yaXR5JyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjYWRyZUNvbnRyb2wtbmFtZVwiPnt7Y2FkcmVDb250cm9sbGluZ0F1dGhvcml0eX19PC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxuZy1jb250YWluZXI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwidy1mdWxsIGZsZXggZmxleC1yb3cgZ2FwLTQganVzdGlmeS1lbmQgbWFyZ2luLXRvcC1tXCI+XG4gICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICBjbGFzcz1cInNhdmUtYnV0dG9uXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwidXNlckRldGFpbHNGb3JtPy5pbnZhbGlkIHx8ICFtVmVyaWZpZWQgfHwgIWVWZXJpZmllZFwiXG4gICAgICAgICAgICAgICAgKGNsaWNrKT1cIm9uU3VibWl0Rm9ybSh1c2VyRGV0YWlsc0Zvcm0pXCI+XG4gICAgICAgICAgICAgICAge3sgJ3Byb2ZpbGVJbmZvLnNhdmVDaGFuZ2VzJyB8IHRyYW5zbGF0ZSB9fVxuICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9mb3JtPlxuICAgIDwvZGl2PlxuICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJhZGRMb2FkZXIgPiAwXCIgPlxuICAgICAgPGRpdiBjbGFzcz1cInRleHQtY2VudGVyIG15LTIgbG9hZGVyIGZsZXgganVzdGlmeS1jZW50ZXIgaXRlbXMtY2VudGVyXCI+XG4gICAgICAgIDxtYXQtc3Bpbm5lciBjbGFzcz1cImlubGluZS1ibG9ja1wiPjwvbWF0LXNwaW5uZXI+XG4gICAgICA8L2Rpdj5cbiAgICA8L25nLWNvbnRhaW5lcj5cbjwvZGl2PlxuIl19