@smarterplan/ngx-smarterplan-core 1.4.4 → 1.4.6

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 (79) hide show
  1. package/esm2022/lib/components/csv-export/csv-export.component.mjs +5 -6
  2. package/esm2022/lib/components/loader/loader.component.mjs +7 -8
  3. package/esm2022/lib/components/menu-bar/avatar/avatar.component.mjs +6 -7
  4. package/esm2022/lib/components/menu-bar/menu-bar.component.mjs +7 -8
  5. package/esm2022/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +8 -9
  6. package/esm2022/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +6 -7
  7. package/esm2022/lib/components/search-bar/search-bar.component.mjs +6 -7
  8. package/esm2022/lib/components/support-modal/support-modal.component.mjs +6 -7
  9. package/esm2022/lib/helpers.service.mjs +1 -1
  10. package/esm2022/lib/matterport-extensions/hsl-loader/HlsLoader.mjs +1 -1
  11. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasImage.mjs +1 -1
  12. package/esm2022/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +1 -1
  13. package/esm2022/lib/matterport-extensions/nest-thermostat/NestThermostat.mjs +1 -1
  14. package/esm2022/lib/matterport-extensions/nest-thermostat/PlaneRenderer.mjs +1 -1
  15. package/esm2022/lib/matterport-extensions/security-camera/SecurityCamera.mjs +1 -1
  16. package/esm2022/lib/matterport-extensions/tv-player/TvPlayer.mjs +1 -1
  17. package/esm2022/lib/matterport-extensions/video-renderer/VideoRenderer.mjs +1 -1
  18. package/esm2022/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +1 -1
  19. package/esm2022/lib/mattertagData.mjs +1 -1
  20. package/esm2022/lib/ngx-smarterplan-core.module.mjs +6 -7
  21. package/esm2022/lib/ngx-smarterplan-core.service.mjs +6 -7
  22. package/esm2022/lib/pipes/duration-to-string.pipe.mjs +6 -7
  23. package/esm2022/lib/pipes/format-date-number-to-digits.pipe.mjs +6 -7
  24. package/esm2022/lib/pipes/hashtag-from-id.pipe.mjs +6 -7
  25. package/esm2022/lib/pipes/safe-url.pipe.mjs +6 -7
  26. package/esm2022/lib/pipes/time-date-to-local-string.pipe.mjs +9 -10
  27. package/esm2022/lib/pipes/username-from-id.pipe.mjs +6 -7
  28. package/esm2022/lib/services/amplify-cache.service.mjs +7 -8
  29. package/esm2022/lib/services/base-tab.service.mjs +6 -7
  30. package/esm2022/lib/services/baseVisibility.service.mjs +6 -7
  31. package/esm2022/lib/services/content.service.mjs +6 -7
  32. package/esm2022/lib/services/filter.service.mjs +6 -7
  33. package/esm2022/lib/services/intervention.service.mjs +6 -7
  34. package/esm2022/lib/services/locale.service.mjs +9 -10
  35. package/esm2022/lib/services/matterport-import.service.mjs +6 -7
  36. package/esm2022/lib/services/matterport.service.mjs +7 -8
  37. package/esm2022/lib/services/models/affectation.service.mjs +7 -8
  38. package/esm2022/lib/services/models/base-object.service.mjs +6 -7
  39. package/esm2022/lib/services/models/capture.service.mjs +7 -8
  40. package/esm2022/lib/services/models/comment.service.mjs +7 -8
  41. package/esm2022/lib/services/models/domain.service.mjs +7 -8
  42. package/esm2022/lib/services/models/equipment.service.mjs +7 -8
  43. package/esm2022/lib/services/models/event.service.mjs +7 -8
  44. package/esm2022/lib/services/models/feature.service.mjs +7 -8
  45. package/esm2022/lib/services/models/hashtag.service.mjs +7 -8
  46. package/esm2022/lib/services/models/layer.service.mjs +7 -8
  47. package/esm2022/lib/services/models/measurement.service.mjs +7 -8
  48. package/esm2022/lib/services/models/mission.service.mjs +7 -8
  49. package/esm2022/lib/services/models/navigation.service.mjs +7 -8
  50. package/esm2022/lib/services/models/node.service.mjs +7 -8
  51. package/esm2022/lib/services/models/object3D.service.mjs +7 -8
  52. package/esm2022/lib/services/models/operation.service.mjs +7 -8
  53. package/esm2022/lib/services/models/organisation.service.mjs +7 -8
  54. package/esm2022/lib/services/models/plan.service.mjs +8 -10
  55. package/esm2022/lib/services/models/poi.service.mjs +7 -8
  56. package/esm2022/lib/services/models/profile.service.mjs +7 -8
  57. package/esm2022/lib/services/models/property.service.mjs +7 -8
  58. package/esm2022/lib/services/models/space.service.mjs +7 -8
  59. package/esm2022/lib/services/models/template.service.mjs +7 -8
  60. package/esm2022/lib/services/models/ticket.service.mjs +7 -8
  61. package/esm2022/lib/services/models/visit.service.mjs +6 -7
  62. package/esm2022/lib/services/models/zone.service.mjs +7 -8
  63. package/esm2022/lib/services/navigator.service.mjs +6 -7
  64. package/esm2022/lib/services/s3.service.mjs +1 -1
  65. package/esm2022/lib/services/search.service.mjs +6 -7
  66. package/esm2022/lib/services/support.service.mjs +6 -7
  67. package/esm2022/lib/services/tag.service.mjs +6 -7
  68. package/esm2022/lib/services/user.service.mjs +9 -10
  69. package/esm2022/lib/services/validators.service.mjs +6 -7
  70. package/esm2022/lib/services/viewer.service.mjs +6 -7
  71. package/esm2022/lib/services/zone-drawer.service.mjs +1 -1
  72. package/esm2022/lib/services/zoneChange.service.mjs +6 -7
  73. package/esm2022/lib/types.service.mjs +1 -1
  74. package/esm2022/lib/validators/no-empty.directive.mjs +1 -1
  75. package/esm2022/lib/validators/number.directive.mjs +1 -1
  76. package/esm2022/lib/validators/text.directive.mjs +1 -1
  77. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs +277 -278
  78. package/fesm2022/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  79. package/package.json +26 -6
@@ -17,7 +17,7 @@ import * as i4 from "@angular/router";
17
17
  import * as i5 from "../matterport.service";
18
18
  import * as i6 from "../baseVisibility.service";
19
19
  import * as i7 from "../content.service";
20
- class PlanService {
20
+ export class PlanService {
21
21
  zoneService;
22
22
  navigationService;
23
23
  viewerService;
@@ -219,8 +219,7 @@ class PlanService {
219
219
  return new Promise(async (resolve) => {
220
220
  const canvas = document.createElement('canvas');
221
221
  const context = canvas.getContext('2d');
222
- const pdfjsWorker = await import('pdfjs-dist/build/pdf.worker.entry');
223
- GlobalWorkerOptions.workerSrc = pdfjsWorker;
222
+ GlobalWorkerOptions.workerSrc = `//cdnjs.cloudflare.com/ajax/libs/pdf.js/4.4.168/pdf.worker.min.mjs`;
224
223
  const pdf = await getDocument(currentPlan.filepath).promise;
225
224
  const page = await pdf.getPage(1);
226
225
  const viewPortParameters = { scale: 1.5 };
@@ -807,17 +806,16 @@ class PlanService {
807
806
  // console.log(x, y);
808
807
  return { x, y, coeffX: newCoeffX, coeffY: newCoeffY };
809
808
  }
810
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PlanService, deps: [{ token: 'currentAPIService' }, { token: i1.ZoneService }, { token: i2.NavigationService }, { token: i3.ViewerService }, { token: i4.Router }, { token: i5.MatterportService }, { token: i6.BaseVisibilityService }, { token: i7.ContentService }], target: i0.ɵɵFactoryTarget.Injectable });
811
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PlanService, providedIn: 'root' });
809
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PlanService, deps: [{ token: 'currentAPIService' }, { token: i1.ZoneService }, { token: i2.NavigationService }, { token: i3.ViewerService }, { token: i4.Router }, { token: i5.MatterportService }, { token: i6.BaseVisibilityService }, { token: i7.ContentService }], target: i0.ɵɵFactoryTarget.Injectable });
810
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PlanService, providedIn: 'root' });
812
811
  }
813
- export { PlanService };
814
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PlanService, decorators: [{
812
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PlanService, decorators: [{
815
813
  type: Injectable,
816
814
  args: [{
817
815
  providedIn: 'root',
818
816
  }]
819
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
817
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
820
818
  type: Inject,
821
819
  args: ['currentAPIService']
822
- }] }, { type: i1.ZoneService }, { type: i2.NavigationService }, { type: i3.ViewerService }, { type: i4.Router }, { type: i5.MatterportService }, { type: i6.BaseVisibilityService }, { type: i7.ContentService }]; } });
823
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvcGxhbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5RCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUNILFdBQVcsRUFDWCxXQUFXLEVBRVgsT0FBTyxHQUVWLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUFHeEQsTUFHYSxXQUFXO0lBNEVSO0lBQ0E7SUFFQTtJQUNBO0lBQ0E7SUFFQTtJQUNBO0lBbkZaLFVBQVUsQ0FBTztJQUVqQixXQUFXLENBQU87SUFFbEIsWUFBWSxDQUFTO0lBRXJCLGFBQWEsQ0FBTztJQUVwQixVQUFVLENBQU07SUFFaEIsT0FBTyxDQUEyQjtJQUNsQyxjQUFjLENBQWM7SUFFNUIsT0FBTyxDQUFNO0lBRWIsT0FBTyxHQUFZLEtBQUssQ0FBQztJQUV6QixlQUFlLENBQW9CO0lBRW5DLFVBQVUsQ0FBUztJQUVuQixVQUFVLENBQVM7SUFFbkIsZUFBZSxDQUFNO0lBRXJCLFlB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QUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzdFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBRTVFLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDO1FBQzVFLHFCQUFxQjtRQUVyQixPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsQ0FBQztJQUMxRCxDQUFDO3dHQXI5QlEsV0FBVyxrQkEyRVIsbUJBQW1COzRHQTNFdEIsV0FBVyxjQUZSLE1BQU07O1NBRVQsV0FBVzs0RkFBWCxXQUFXO2tCQUh2QixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQjs7MEJBNEVRLE1BQU07MkJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgZnVuYy1uYW1lcyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBnZXREb2N1bWVudCwgR2xvYmFsV29ya2VyT3B0aW9ucyB9IGZyb20gJ3BkZmpzLWRpc3QnO1xyXG5pbXBvcnQgcGFuem9vbSBmcm9tICdwYW56b29tJztcclxuaW1wb3J0IHZpZGVvanMgZnJvbSBcInZpZGVvLmpzXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgUm91dGVyIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHtcclxuICAgIENvbW1lbnRUeXBlLFxyXG4gICAgRmVhdHVyZVR5cGUsXHJcbiAgICBQbGFuLFxyXG4gICAgUG9pVHlwZSxcclxuICAgIFpvbmUsXHJcbn0gZnJvbSAnLi4vLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VWaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4uL2Jhc2VWaXNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJwb3J0U2VydmljZSB9IGZyb20gJy4uL21hdHRlcnBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IFZpZXdlclNlcnZpY2UgfSBmcm9tICcuLi92aWV3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IFpvbmVTZXJ2aWNlIH0gZnJvbSAnLi96b25lLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOYXZpZ2F0aW9uU2VydmljZSB9IGZyb20gJy4vbmF2aWdhdGlvbi5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZ2V0U2lnbmVkRmlsZSwgdXBsb2FkRmlsZVRvUzMgfSBmcm9tICcuLi9zMy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQmFzZVRhZ1NlcnZpY2UgfSBmcm9tICcuLi90YWcuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uLy4uL2NvbmZpZyc7XHJcbmltcG9ydCB7IGdldENvZWZmaWNpZW50c0ZvckltYWdlIH0gZnJvbSAnLi4vem9uZS1kcmF3ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IGdldE1ldGFGb3JJbWFnZSB9IGZyb20gJy4uLy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vY29udGVudC5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICAgIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBsYW5TZXJ2aWNlIHtcclxuICAgIGNob3NlblBsYW46IFBsYW47XHJcblxyXG4gICAgY3VycmVudFBsYW46IFBsYW47XHJcblxyXG4gICAgY3VycmVudFN3ZWVwOiBzdHJpbmc7XHJcblxyXG4gICAgcGxhbkZpbGVDYWNoZTogRmlsZTtcclxuXHJcbiAgICBwbGFuQ2FudmFzOiBhbnk7XHJcblxyXG4gICAgcGxhbkRpdjogSFRNTEVsZW1lbnQgfCBTVkdFbGVtZW50O1xyXG4gICAgcGxhbkRpdkNvbnRlbnQ6IEhUTUxFbGVtZW50O1xyXG5cclxuICAgIHBhbnpvb206IGFueTtcclxuXHJcbiAgICBpc1JlYWR5OiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gICAgdXNlclBvc2l0aW9uQnRuOiBIVE1MQnV0dG9uRWxlbWVudDtcclxuXHJcbiAgICBjb2VmZlBsYW5YOiBudW1iZXI7XHJcblxyXG4gICAgY29lZmZQbGFuWTogbnVtYmVyO1xyXG5cclxuICAgIGNhbGlicmF0aW9uUGxhbjogYW55O1xyXG5cclxuICAgIGRldGFpbFRhZ0RpdjogSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgZGV0YWlsVGFnRGl2SXNIb3ZlciA9IGZhbHNlO1xyXG5cclxuICAgIGJ0blRhZ0lzSG92ZXIgPSBmYWxzZTtcclxuXHJcbiAgICByZXNpemVQbGFuU3Vic2NyaXB0aW9uID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuXHJcbiAgICBpbWdQbGFuOiBIVE1MSW1hZ2VFbGVtZW50O1xyXG5cclxuICAgIGxhc3RUb3VjaFRpbWUgPSAwO1xyXG5cclxuICAgIGRlbGF5RGJsVG91Y2ggPSA1MDA7XHJcblxyXG4gICAgbGFzdFJvdGF0aW9uOiBudW1iZXIgPSAwO1xyXG5cclxuICAgIGh0bWxDb250ZW50VG9JbmplY3Q6IHtcclxuICAgICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICAgIGNvbnRlbnQ6IHN0cmluZztcclxuICAgICAgICBlbGVtZW50SUQ6IHN0cmluZztcclxuICAgICAgICB5OiBudW1iZXI7XHJcbiAgICAgICAgeDogbnVtYmVyO1xyXG4gICAgICAgIHRhZ0ljb246IHN0cmluZztcclxuICAgICAgICB1cmw6IHN0cmluZztcclxuICAgIH1bXSA9IFtdO1xyXG5cclxuICAgIGNhY2hlOiB7XHJcbiAgICAgICAgZXF1aXBJRHM6IHN0cmluZ1tdO1xyXG4gICAgICAgIHRpY2tldElEczogc3RyaW5nW107XHJcbiAgICAgICAgbWVhc3VyZW1lbnRzSURzOiBzdHJpbmdbXTtcclxuICAgICAgICBmZWF0dXJlSURzOiBzdHJpbmdbXTtcclxuICAgICAgICB6b25lSUQ6IHN0cmluZztcclxuICAgICAgICBwbGFuOiBQbGFuO1xyXG4gICAgICAgIGh0bWxDb250ZW50OiB7XHJcbiAgICAgICAgICAgIHRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGNvbnRlbnQ6IHN0cmluZztcclxuICAgICAgICAgICAgZWxlbWVudElEOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHk6IG51bWJlcjtcclxuICAgICAgICAgICAgeDogbnVtYmVyO1xyXG4gICAgICAgICAgICB0YWdJY29uOiBzdHJpbmc7XHJcbiAgICAgICAgICAgIHVybDogc3RyaW5nO1xyXG4gICAgICAgIH1bXTtcclxuICAgIH07XHJcblxyXG4gICAgZm9jdXNNb3VzZVRhZ0RpdjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIEFQSTogYW55OyAvL0FXU1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKFxyXG4gICAgICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSxcclxuICAgICAgICBwcml2YXRlIHpvbmVTZXJ2aWNlOiBab25lU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG5hdmlnYXRpb25TZXJ2aWNlOiBOYXZpZ2F0aW9uU2VydmljZSxcclxuICAgICAgICAvLyB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSxcclxuICAgICAgICBwcml2YXRlIHZpZXdlclNlcnZpY2U6IFZpZXdlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSByb3V0ZXI6IFJvdXRlcixcclxuICAgICAgICBwcml2YXRlIG1hdHRlcnBvcnRTZXJ2aWNlOiBNYXR0ZXJwb3J0U2VydmljZSxcclxuICAgICAgICAvLyBwcml2YXRlIGNvbmZpZzogQXBwQ29uZmlnLFxyXG4gICAgICAgIHByaXZhdGUgdmlzaWJpbGl0eVNlcnZpY2U6IEJhc2VWaXNpYmlsaXR5U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIGNvbnRlbnRTZXJ2aWNlOiBDb250ZW50U2VydmljZVxyXG4gICAgKSB7XHJcbiAgICAgICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmN1cnJlbnRDYW1lcmFQb3NlLnN1YnNjcmliZSgocG9zZSkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvdGF0aW9uKHBvc2Uucm90YXRpb24ueSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlUGxhbihwbGFuSW5wdXQ6IFBsYW4pOiBQcm9taXNlPFBsYW4+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZVBsYW4ocGxhbklucHV0KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkZWxldGVQbGFuKHBsYW46IFBsYW4pOiBQcm9taXNlPFBsYW4+IHtcclxuICAgICAgICAvLyBhd2FpdCBkZWxldGVGcm9tUzMocGxhbi5hbm5leGUpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlUGxhbih7IGlkOiBwbGFuLmlkIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFBsYW5zRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fXHJcbiAgICAgICAgICAgIC5QbGFuc0J5U3BhY2Uoc3BhY2VJRClcclxuICAgICAgICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UGxhbnNGb3Jab25lKHpvbmVJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fXHJcbiAgICAgICAgICAgIC5QbGFuc0J5Wm9uZSh6b25lSUQpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFNpbmdlZFBsYW5zRm9yU3BhY2Uoc3BhY2VJRDogc3RyaW5nKTogUHJvbWlzZTxQbGFuW10+IHtcclxuICAgICAgICBjb25zdCBwbGFuc0Zyb21EQiA9IGF3YWl0IHRoaXMuZ2V0UGxhbnNGb3JTcGFjZShzcGFjZUlEKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhwbGFuc0Zyb21EQik7XHJcbiAgICAgICAgY29uc3QgcGxhbnMgPSBbXTtcclxuICAgICAgICBpZiAocGxhbnNGcm9tREIubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIHBsYW5zRnJvbURCLm1hcChhc3luYyAocGxhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBsYW5PYmplY3QgPSB7IC4uLnBsYW4gfSBhcyBQbGFuO1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFubmV4ZSBsb29rcyBsaWtlIHZpc2l0cy9tb2RlbElEL3BsYW5zL2ZpbGUuZXh0ZW5zaW9uXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShwbGFuLmFubmV4ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNpZ25lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFuT2JqZWN0LmZpbGVwYXRoID0gc2lnbmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAocGxhbi5hbm5leGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWywgbW9kZWxJRCwgLCBmaWxlbmFtZVdpdGhFeHRlbnNpb25dID0gcGxhbi5hbm5leGUuc3BsaXQoJy8nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgWywgZXh0ZW50aW9uXSA9IGZpbGVuYW1lV2l0aEV4dGVuc2lvbi5zcGxpdCgnLicpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFuT2JqZWN0Lm1vZGVsM2QgPSBtb2RlbElEO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFuT2JqZWN0LmV4dGVuc2lvbiA9IGV4dGVudGlvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhbnMucHVzaChwbGFuT2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRXJyb3IgcGxhbiBoYXZlIG5vdCBhbm5leGUgPT4gYCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKHBsYW4uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwbGFucztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRQbGFuc1dpdGhab25lc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICAgICAgY29uc3QgcGxhbnMgPSBhd2FpdCB0aGlzLmdldFBsYW5zRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgY29uc3QgcGxhbnNab25lcyA9IHBsYW5zLmZpbHRlcigocGxhbikgPT4gcGxhbi56b25lICYmIHBsYW4uY2FsaWJyYXRpb24pO1xyXG4gICAgICAgIHJldHVybiBwbGFuc1pvbmVzO1xyXG4gICAgfVxyXG5cclxuICAgIHNldENob3NlblBsYW4oY2hvc2VuUGxhbjogUGxhbikge1xyXG4gICAgICAgIHRoaXMuY2hvc2VuUGxhbiA9IGNob3NlblBsYW47XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0Q2hvc2VuUGxhbigpOiBQbGFuIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5jaG9zZW5QbGFuO1xyXG4gICAgfVxyXG5cclxuICAgIHNldFBsYW5GaWxlQ2FjaGUocGxhbkZpbGVDYWNoZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMucGxhbkZpbGVDYWNoZSA9IHBsYW5GaWxlQ2FjaGU7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdldFBsYW5GaWxlQ2FjaGUoKTogRmlsZSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMucGxhbkZpbGVDYWNoZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVQbGFuV2l0aEFubmV4ZShwbGFuOiBQbGFuLCBmaWxlOiBGaWxlKTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICAgICAgY29uc3QgY3JlYXRlZFBsYW4gPSBhd2FpdCB0aGlzLmNyZWF0ZVBsYW4ocGxhbik7XHJcbiAgICAgICAgY29uc3QgbW9kZWwzRCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0TW9kZWwzREZvclpvbmUocGxhbi56b25lSUQpO1xyXG4gICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IHVwbG9hZEZpbGVUb1MzKFxyXG4gICAgICAgICAgICBgdmlzaXRzLyR7bW9kZWwzRH0vcGxhbnMvYCxcclxuICAgICAgICAgICAgZmlsZSxcclxuICAgICAgICAgICAgY3JlYXRlZFBsYW4uaWRcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICh1cmwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVQbGFuKHsgaWQ6IGNyZWF0ZWRQbGFuLmlkLCBhbm5leGU6IHVybCB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZWRQbGFuO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZVBsYW4ocGxhbjogYW55KTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVQbGFuKHBsYW4pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHVwZGF0ZVBsYW5GaWxlKCk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hvc2VuUGxhbiAmJiB0aGlzLnBsYW5GaWxlQ2FjaGUpIHtcclxuICAgICAgICAgICAgY29uc3QgbW9kZWwzRCA9IGF3YWl0IHRoaXMuem9uZVNlcnZpY2UuZ2V0TW9kZWwzREZvclpvbmUoXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNob3NlblBsYW4uem9uZUlEXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiB1cGxvYWRGaWxlVG9TMyhcclxuICAgICAgICAgICAgICAgIGB2aXNpdHMvJHttb2RlbDNEfS9wbGFucy9gLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGFuRmlsZUNhY2hlLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5QbGFuLmlkXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdCgpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNldEFsbFBsYW5zRm9yWm9uZU5vdEN1cnJlbnQoem9uZUlEOiBzdHJpbmcsIGN1cnJlbnRQbGFuSUQ6IHN0cmluZykge1xyXG4gICAgICAgIGNvbnN0IHBsYW5zID0gYXdhaXQgdGhpcy5BUEkuX19wcm90b19fLkxpc3RQbGFucyh7XHJcbiAgICAgICAgICAgIHpvbmVJRDogeyBlcTogem9uZUlEIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIHBsYW5zLml0ZW1zLm1hcChhc3luYyAocGxhbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKHBsYW4uaXNDdXJyZW50Rm9yWm9uZSAmJiBwbGFuLmlkICE9PSBjdXJyZW50UGxhbklEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQbGFuKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IHBsYW4uaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzQ3VycmVudEZvclpvbmU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY29uZmlndXJlUGxhbihcclxuICAgICAgICBjdXJyZW50UGxhbjogUGxhbixcclxuICAgICAgICBkaXZJZDogc3RyaW5nID0gJ3BsYW5EaXZQYW5lJyxcclxuICAgICAgICBkaXZDb250ZW50SWQ6IHN0cmluZyA9ICdwbGFuRGl2UGFuZUNvbnRlbnQnXHJcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICB0aGlzLmlzUmVhZHkgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIXRoaXMuZGV0YWlsVGFnRGl2KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICAgIGAjZGV0YWlsVGFnRGl2YFxyXG4gICAgICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzTW91c2VUYWdEaXYgPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuYnRuVGFnSXNIb3ZlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB0aGlzLmZvY3VzTW91c2VUYWdEaXYgPSBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4gPSBKU09OLnBhcnNlKGN1cnJlbnRQbGFuLmNhbGlicmF0aW9uKTtcclxuICAgICAgICB0aGlzLmN1cnJlbnRQbGFuID0gY3VycmVudFBsYW47XHJcbiAgICAgICAgdGhpcy5wbGFuRGl2ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgIyR7ZGl2SWR9YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgIGAjJHtkaXZDb250ZW50SWR9YFxyXG4gICAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcblxyXG4gICAgICAgIHRoaXMucGxhbkRpdi5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0JywgdGhpcy5oYW5kbGVUb3VjaC5iaW5kKHRoaXMpKTtcclxuICAgICAgICB0aGlzLnBsYW5EaXYuYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLCB0aGlzLm9uRGJsQ2xpY2tQbGFuLmJpbmQodGhpcykpO1xyXG5cclxuICAgICAgICBpZiAoIWN1cnJlbnRQbGFuLmFubmV4ZS5pbmNsdWRlcygncGRmJykpIHtcclxuICAgICAgICAgICAgdGhpcy5pbWdQbGFuID0gYXdhaXQgZ2V0TWV0YUZvckltYWdlKGN1cnJlbnRQbGFuLmZpbGVwYXRoKTtcclxuICAgICAgICAgICAgLy9SZWN0IHVzZSBvZmZzZXRXaWR0aCA6IGhlaWdodCwgbm90IGFjdHVhbCBib3VuZGluZ0NsaWVudFJlY3QgYmVjYXVzZSB3aWxsIGJlIG1vZGlmaWVkIGJ5IHRoZSB6b29tLlxyXG4gICAgICAgICAgICBjb25zdCByZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICBjb25zdCB7IGNvZWZmWCwgY29lZmZZIH0gPSBnZXRDb2VmZmljaWVudHNGb3JJbWFnZSh0aGlzLmltZ1BsYW4sIHJlY3QpO1xyXG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblggPSBjb2VmZlg7XHJcbiAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWSA9IGNvZWZmWTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke2N1cnJlbnRQbGFuLmZpbGVwYXRofSlgO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZHJhd1BkZihjdXJyZW50UGxhbik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XHJcbiAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCc7XHJcblxyXG4gICAgICAgIHRoaXMucGFuem9vbSA9IHBhbnpvb20odGhpcy5wbGFuRGl2LCB7XHJcbiAgICAgICAgICAgIGJvdW5kczogdHJ1ZSxcclxuICAgICAgICAgICAgYm91bmRzUGFkZGluZzogMCxcclxuICAgICAgICAgICAgbWF4Wm9vbTogNCxcclxuICAgICAgICAgICAgem9vbURvdWJsZUNsaWNrU3BlZWQ6IDEsIC8vZGlzYWJsZXMgZG91YmxlIGNsaWNrIHpvb21cclxuICAgICAgICAgICAgLy9pbml0aWFsWm9vbTogNFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMucGFuem9vbS56b29tQWJzKDAsIDAsIDQpO1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVJvdGF0aW9uKHRoaXMubGFzdFJvdGF0aW9uKTtcclxuICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyUGxhbkltYWdlKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYW5EaXZDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZHJhd1BkZihjdXJyZW50UGxhbjogUGxhbik6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKSBhcyBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbnRleHQgPSBjYW52YXMuZ2V0Q29udGV4dCgnMmQnKSBhcyBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHBkZmpzV29ya2VyID0gYXdhaXQgaW1wb3J0KCdwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuZW50cnknKTtcclxuXHJcbiAgICAgICAgICAgIEdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjID0gcGRmanNXb3JrZXI7XHJcbiAgICAgICAgICAgIGNvbnN0IHBkZiA9IGF3YWl0IGdldERvY3VtZW50KGN1cnJlbnRQbGFuLmZpbGVwYXRoKS5wcm9taXNlO1xyXG4gICAgICAgICAgICBjb25zdCBwYWdlID0gYXdhaXQgcGRmLmdldFBhZ2UoMSk7XHJcblxyXG4gICAgICAgICAgICBjb25zdCB2aWV3UG9ydFBhcmFtZXRlcnMgPSB7IHNjYWxlOiAxLjUgfTtcclxuICAgICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHZpZXdQb3J0UGFyYW1ldGVycyk7XHJcblxyXG4gICAgICAgICAgICBjYW52YXMuaGVpZ2h0ID0gdmlld3BvcnQuaGVpZ2h0O1xyXG4gICAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyQ29udGV4dCA9IHtcclxuICAgICAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQsXHJcbiAgICAgICAgICAgICAgICB2aWV3cG9ydCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgcmVuZGVyVGFzayA9IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpLnByb21pc2U7XHJcbiAgICAgICAgICAgIHJlbmRlclRhc2sudGhlbihhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbWdVcmwgPSBjYW52YXMudG9EYXRhVVJMKCdpbWFnZS9wbmcnKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW1nUGxhbiA9IGF3YWl0IGdldE1ldGFGb3JJbWFnZShpbWdVcmwpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKHRoaXMuaW1nUGxhbiwgcmVjdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblggPSBjb2VmZlg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgPSBjb2VmZlk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBsYW5EaXYuc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke2ltZ1VybH0pYDtcclxuICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZHJhd0VsZW1lbnQoXHJcbiAgICAgICAgZWxlbWVudDogYW55LFxyXG4gICAgICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICAgICAgY3VycmVudFBsYW46IFBsYW4sXHJcbiAgICAgICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXHJcbiAgICAgICAgY29uZmlnOiBDb25maWcsXHJcbiAgICAgICAgc2l6ZUJ1dHRvbjogbnVtYmVyID0gMTBcclxuICAgICkge1xyXG4gICAgICAgIGNvbnN0IFtwb2ldID0gZWxlbWVudC5wb2lzLml0ZW1zO1xyXG4gICAgICAgIGlmIChwb2kgJiYgcG9pLmNvb3JkaW5hdGUgJiYgY3VycmVudFBsYW4pIHtcclxuICAgICAgICAgICAgY29uc3QgeyB6b25lIH0gPSBjdXJyZW50UGxhbjtcclxuICAgICAgICAgICAgaWYgKHpvbmUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICAgICAgICAgIGxldCBlbGVtZW50VGl0bGU6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHVybCA9IHRhZ1NlcnZpY2UuZ2V0VXJsRm9yU2VlRGV0YWlscyhlbGVtZW50LCB0YWdUeXBlKTtcclxuICAgICAgICAgICAgICAgIGxldCB0YWdJY29uSW1hZ2U6IHN0cmluZztcclxuICAgICAgICAgICAgICAgIHN3aXRjaCAodGFnVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5USUNLRVQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX3RpY2tldDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5FUVVJUE1FTlQ6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX2VxdWlwbWVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5NRUFTVVJFOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdJY29uSW1hZ2UgPSBjb25maWcubXlfY29uZmlnLmljb25fbWVhc3VyZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQb2lUeXBlLk9CSkVDVDNEOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdJY29uSW1hZ2UgPSBjb25maWcubXlfY29uZmlnLmljb25fb2JqZWN0M2Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5EQVRBOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdJY29uSW1hZ2UgPSBjb25maWcubXlfY29uZmlnLmljb25fZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkRFU0s6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pLnRhZ0ljb24pIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0YWdJY29uID0gSlNPTi5wYXJzZShwb2kudGFnSWNvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdUeXBlID09PSBQb2lUeXBlLkRBVEEgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50eXBlID09PSBGZWF0dXJlVHlwZS5JTkRJQ0FUT1JfVEVNUFxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdJY29uLnNyYyA9IHRhZ1NlcnZpY2UuZ2V0SWNvblRhZ0ltYWdlRm9yRmVhdHVyZShlbGVtZW50LCBwb2kpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyBwb2kudGFnSWNvbiA9IHRhZ0ljb247XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWdJY29uLnNyYykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCBnZXRTaWduZWRGaWxlKHRhZ0ljb24uc3JjKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNvdXJjZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gc291cmNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zdHlsZUJ1dHRvbihidXR0b24sIHRhZ0ljb25JbWFnZSwgc2l6ZUJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uaWQgPSBlbGVtZW50LmlkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5hcHBlbmQoYnV0dG9uKTtcclxuICAgICAgICAgICAgICAgIGxldCB4OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICBsZXQgeTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm5ldykge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIGFsZXJ0KFwibmV3IGNhbGlicmF0aW9uIHBsYW46IHBvc2l0aW9uaW5nIG5vdCByZWFkeSB5ZXRcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24yRCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtUG9zaXRpb24zREZvck5ld0NhbGlicmF0aW9uKHBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICB4ID0gcG9zaXRpb24yRC54O1xyXG4gICAgICAgICAgICAgICAgICAgIHkgPSBwb3NpdGlvbjJELnk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke3kgLyBwb3NpdGlvbjJELmNvZWZmWSAtIDV9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7eCAvIHBvc2l0aW9uMkQuY29lZmZYIC0gNX1weGA7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHRvIHJlbW92ZSB3aGVuIGFsbCBjYWxpYnJhdGlvbnMgYXJlIG5ld1xyXG4gICAgICAgICAgICAgICAgICAgIHggPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRYICsgcG9zaXRpb24ueCAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLng7XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgKyBwb3NpdGlvbi56ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueTtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0gYCR7eSAvIHRoaXMuY29lZmZQbGFuWSAtIDV9cHhgO1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7eCAvIHRoaXMuY29lZmZQbGFuWCAtIDV9cHhgO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGh0bWwgPSBhd2FpdCB0YWdTZXJ2aWNlLmdldEh0bWxUb0luamVjdCh0YWdUeXBlLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIGlmIChodG1sICE9ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5odG1sQ29udGVudFRvSW5qZWN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50SUQ6IGVsZW1lbnQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogaHRtbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgeCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbjogdGFnSWNvbkltYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHdoZW4gd2UgZG9uJ3QgaGF2ZSBodG1sID0+IGNhc2Ugb2YgRU1CRUQgQ29tbWVudCB0eXBlXHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29tbWVudEVtYmVkID0gZWxlbWVudC5jb21tZW50cz8uaXRlbXMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgKGNvbSkgPT4gY29tLnR5cGUgPT09IENvbW1lbnRUeXBlLkVNQkVEICYmIGNvbS5zaG93bkluVGFnXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWVudEVtYmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbENvbnRlbnRUb0luamVjdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRJRDogZWxlbWVudC5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBlbGVtZW50LnRpdGxlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogYDxpZnJhbWUgc3JjPSR7Y29tbWVudEVtYmVkLmV4dGVybmFsTGlua30gaGVpZ2h0PVwiMjAwcHhcIiB3aWR0aD1cIjEwMCVcIj48L2lmcmFtZT5gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdJY29uOiB0YWdJY29uSW1hZ2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZExpc3RlbmVyc1RvQnV0dG9uKGJ1dHRvbiwgdXJsLCB0YWdTZXJ2aWNlLCBlbGVtZW50KTtcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlUm90YXRpb24odGhpcy5sYXN0Um90YXRpb24pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRyYXdVc2VyUG9zaXRpb24oY3VycmVudFN3ZWVwID0gdGhpcy5jdXJyZW50U3dlZXAsIHNpemVCdXR0b246IG51bWJlciA9IDEwKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3dlZXAgPSBjdXJyZW50U3dlZXA7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FsaWJyYXRpb25QbGFuICYmIGN1cnJlbnRTd2VlcCkge1xyXG4gICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmdldEN1cnJlbnRDYW1lcmFQb3NpdGlvbigpPy5wb3NpdGlvbjtcclxuICAgICAgICAgICAgaWYgKHBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMudXNlclBvc2l0aW9uQnRuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bi5pZCA9ICdjdXJyZW50UG9zaXRpb24nO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuYXBwZW5kKHRoaXMudXNlclBvc2l0aW9uQnRuKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bi50aXRsZSA9ICdZb3UgYXJlIGhlcmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVCdXR0b24oXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAnaHR0cHM6Ly9hcGkuaWNvbmlmeS5kZXNpZ24vYng6YnhzLXVzZXItY2lyY2xlLnN2Zz9jb2xvcj1ncmVlbiZoZWlnaHQ9MTcmd2lkdGg9MTcnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplQnV0dG9uXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGxldCB4OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICBsZXQgeTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm5ldykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMkQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uM0RGb3JOZXdDYWxpYnJhdGlvbihwb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvc2l0aW9uMkQueCAvIHBvc2l0aW9uMkQuY29lZmZYIC0gNTtcclxuICAgICAgICAgICAgICAgICAgICB5ID0gcG9zaXRpb24yRC55IC8gcG9zaXRpb24yRC5jb2VmZlkgLSA1O1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB4ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueCAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLngpIC9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YO1xyXG4gICAgICAgICAgICAgICAgICAgIHkgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi56ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueSkgL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bi5zdHlsZS50b3AgPSBgJHt5fXB4YDtcclxuICAgICAgICAgICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuLnN0eWxlLmxlZnQgPSBgJHt4fXB4YDtcclxuICAgICAgICAgICAgICAgIHRoaXMubW92ZU9uUG9pbnQoeyB4OiB4ICsgNSwgeTogeSArIDUgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBDZW50ZXIgdGhlIHZpZXcgb2YgdGhlIHBsYW4gb24gY29vcmRpbmF0ZXNcclxuICAgICAqIEBwYXJhbSBjb29yZGluYXRlIENvb3JkaW5hdGUgb24gdGhlIHBsYW5cclxuICAgICAqL1xyXG4gICAgbW92ZU9uUG9pbnQoY29vcmRpbmF0ZSkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYW5EaXYpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSB0aGlzLnBhbnpvb20uZ2V0VHJhbnNmb3JtKCkuc2NhbGU7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vdmVYID0gdGhpcy5wbGFuRGl2LmNsaWVudFdpZHRoIC8gMiAtIGNvb3JkaW5hdGUueCAqIHNjYWxlO1xyXG4gICAgICAgICAgICBjb25zdCBtb3ZlWSA9IHRoaXMucGxhbkRpdi5jbGllbnRIZWlnaHQgLyAyIC0gY29vcmRpbmF0ZS55ICogc2NhbGU7XHJcbiAgICAgICAgICAgIHRoaXMucGFuem9vbS5tb3ZlVG8obW92ZVgsIG1vdmVZKTtcclxuICAgICAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSBgJHtjb29yZGluYXRlLnh9cHggJHtjb29yZGluYXRlLnl9cHhgO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIEFwcGx5IGEgcm90YXRpb24gdG8gdGhlIHBsYW5cclxuICAgICAqIEJ1dHRvbnMgd2lsbCByZW1haW4gaW4gdGhlIGNvcnJlY3Qgcm90YXRpb25cclxuICAgICAqIEBwYXJhbSByb3RhdGlvblxyXG4gICAgICovXHJcbiAgICB1cGRhdGVSb3RhdGlvbihyb3RhdGlvbikge1xyXG4gICAgICAgIHRoaXMubGFzdFJvdGF0aW9uID0gcm90YXRpb247XHJcbiAgICAgICAgaWYgKHRoaXMucGxhbkRpdkNvbnRlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5zdHlsZS50cmFuc2Zvcm0gPSBgcm90YXRlKCR7cm90YXRpb259ZGVnKWA7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0aGlzLnBsYW5EaXZDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgICBsZXQgcm90YXRpb25SZWdleCA9IC8ocm90YXRlXFwoLT9cXGQqXFwuP1xcZCtkZWdcXCkpL2c7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWZvci1lYWNoXHJcbiAgICAgICAgICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUudHJhbnNmb3JtID0gYnV0dG9uLnN0eWxlLnRyYW5zZm9ybS5yZXBsYWNlKHJvdGF0aW9uUmVnZXgsIFwiXCIpICsgYCByb3RhdGUoJHstcm90YXRpb259ZGVnKWA7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICByZW1vdmVDdXJyZW50UG9zaXRpb24oKSB7XHJcbiAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2N1cnJlbnRQb3NpdGlvbicpO1xyXG4gICAgICAgIGlmIChidXR0b24pIHtcclxuICAgICAgICAgICAgYnV0dG9uLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0biA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHN0eWxlQnV0dG9uKGJ1dHRvbjogSFRNTEJ1dHRvbkVsZW1lbnQsIHVybDogc3RyaW5nLCBzaXplQnV0dG9uOiBudW1iZXIgPSAxMCkge1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kSW1hZ2UgPSBgdXJsKCR7dXJsfSlgO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSAndHJhbnNwYXJlbnQnO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLmJvcmRlciA9ICdub25lJztcclxuICAgICAgICBidXR0b24uc3R5bGUud2lkdGggPSBgMTBweGA7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLmhlaWdodCA9IGAxMHB4YDtcclxuICAgICAgICBidXR0b24uZGlzYWJsZWQgPSBmYWxzZTtcclxuICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZFNpemUgPSAnY29udGFpbic7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRSZXBlYXQgPSAnbm8tcmVwZWF0JztcclxuICAgICAgICBidXR0b24uc3R5bGUudHJhbnNmb3JtID0gYHNjYWxlKCR7c2l6ZUJ1dHRvbi8xMH0pYFxyXG4gIH1cclxuXHJcbiAgICBhZGRMaXN0ZW5lcnNUb0J1dHRvbihcclxuICAgICAgICBidXR0b246IEhUTUxCdXR0b25FbGVtZW50LFxyXG4gICAgICAgIHVybDogc3RyaW5nLFxyXG4gICAgICAgIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlID0gbnVsbCxcclxuICAgICAgICBlbGVtZW50OiBhbnkgPSBudWxsXHJcbiAgICApIHtcclxuICAgICAgICBsZXQgdmlkZW9Kc1BsYXllcjtcclxuICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsIGFzeW5jIChldmVudCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50Rm9yQnV0dG9uID0gdGhpcy5odG1sQ29udGVudFRvSW5qZWN0LmZpbmQoXHJcbiAgICAgICAgICAgICAgICAob2JqZWN0KSA9PiBvYmplY3QuZWxlbWVudElEID09PSBidXR0b24uaWRcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgdGhpcy5idG5UYWdJc0hvdmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29uc3QgdGl0bGUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGAjdGl0bGVUYWdEaXZgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnRGb3JCdXR0b24udGl0bGUpIHtcclxuICAgICAgICAgICAgICAgIHRpdGxlLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lJztcclxuICAgICAgICAgICAgICAgIHRpdGxlLmlubmVySFRNTCA9IGNvbnRlbnRGb3JCdXR0b24udGl0bGU7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZS5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI2h0bWxUYWdEaXZgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUudG9wID0gYCR7ZXZlbnQuY2xpZW50WSArIDEwfXB4YDtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUubGVmdCA9IGAke2V2ZW50LmNsaWVudFggPCAxMjAgPyAwIDogZXZlbnQuY2xpZW50WCAtIDEyMFxyXG4gICAgICAgICAgICAgICAgfXB4YDtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGNvbnRlbnRGb3JCdXR0b24uY29udGVudCk7XHJcbiAgICAgICAgICAgIGNvbnRlbnQuaW5uZXJIVE1MID0gY29udGVudEZvckJ1dHRvbi5jb250ZW50O1xyXG4gICAgICAgICAgICBjb25zdCBkZXRhaWxCdXR0b24gPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNkZXRhaWxCdG4nKTtcclxuICAgICAgICAgICAgaWYgKGRldGFpbEJ1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgZGV0YWlsQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgaW1hZ2UgY2Fyb3VzZWwgZnVsbHNjcmVlbiBidXR0b25cclxuICAgICAgICAgICAgY29uc3QgaW1hZ2VGdWxsc2NyZWVuQnRuID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjaW1hZ2UtZm9vdGVyJyk7XHJcbiAgICAgICAgICAgIGlmIChpbWFnZUZ1bGxzY3JlZW5CdG4pIHtcclxuICAgICAgICAgICAgICAgIGltYWdlRnVsbHNjcmVlbkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFnU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdTZXJ2aWNlLm9uQWN0aW9uSW1hZ2VDbGljayhjb250ZW50Rm9yQnV0dG9uLmVsZW1lbnRJRCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBib29raW5nIGZ1bGxzY3JlZW4gYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbnN0IGJvb2tpbmdCdXR0b24gPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNib29raW5nQnRuJyk7XHJcbiAgICAgICAgICAgIGlmIChib29raW5nQnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICBib29raW5nQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgZG9jdW1lbnQgcGRmIGZ1bGxzY3JlZW4gYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbnN0IGRvY0Z1bGxzY3JlZW5CdG4gPSBjb250ZW50LnF1ZXJ5U2VsZWN0b3IoJyNkb2MtZm9vdGVyJyk7XHJcbiAgICAgICAgICAgIGlmIChkb2NGdWxsc2NyZWVuQnRuICYmIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50VXJsID0gdGFnU2VydmljZS5nZXRBbm5leGVGb3JDb21tZW50VHlwZUluRmVhdHVyZShcclxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgIENvbW1lbnRUeXBlLkRPQ1VNRU5UXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgZG9jRnVsbHNjcmVlbkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFnU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdTZXJ2aWNlLm9uQWN0aW9uRG9jQ2xpY2soZG9jdW1lbnRVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgdmlkZW8gZnVsbHNjcmVlbiBidXR0b25cclxuICAgICAgICAgICAgY29uc3QgdmlkZW9GdWxsc2NyZWVuQnRuID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjYnRuLXZpZGVvLWZ1bGxzY3JlZW4nKTtcclxuICAgICAgICAgICAgaWYgKHZpZGVvRnVsbHNjcmVlbkJ0biAmJiBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2aWRlb1VybCA9IHRhZ1NlcnZpY2UuZ2V0QW5uZXhlRm9yQ29tbWVudFR5cGVJbkZlYXR1cmUoXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICBDb21tZW50VHlwZS5WSURFT1xyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHZpZGVvRnVsbHNjcmVlbkJ0bi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFnU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdTZXJ2aWNlLm9uQWN0aW9uVmlkZW9DbGljayh2aWRlb1VybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBZb3V0dWJlIHZpZGVvIGZ1bGxzY3JlZW4gYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbnN0IHlvdXR1YmVGdWxsU2NyZWVuID0gY29udGVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgJyNidG4tdmlkZW8tZnVsbHNjcmVlbi15b3V0dWJlJ1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoeW91dHViZUZ1bGxTY3JlZW4gJiYgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeW91dHViZVVybCA9IHRhZ1NlcnZpY2UuZ2V0QW5uZXhlRm9yQ29tbWVudFR5cGVJbkZlYXR1cmUoXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICBDb21tZW50VHlwZS5ZT1VUVUJFXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgeW91dHViZUZ1bGxTY3JlZW4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnU2VydmljZS5vbkFjdGlvbllvdXR1YmVDbGljayh5b3V0dWJlVXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIG11dGUgdmlkZW8gYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbnN0IGJ0bk11dGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuLW11dGUnKTtcclxuICAgICAgICAgICAgY29uc3QgaW1nT24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc291bmQtb24nKTtcclxuICAgICAgICAgICAgY29uc3QgaW1nT2ZmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdW5kLW9mZicpO1xyXG4gICAgICAgICAgICBjb25zdCBwbGF5ZXJFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCJtdXMtdmlkZW8tdGFnXCIpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHBsYXllckVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIHZpZGVvSnNQbGF5ZXIgPSB2aWRlb2pzKFwibXVzLXZpZGVvLXRhZ1wiKTtcclxuICAgICAgICAgICAgICAgIGlmIChidG5NdXRlICYmIHZpZGVvSnNQbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICBidG5NdXRlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9Kc1BsYXllci5tdXRlZCgpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0pzUGxheWVyLm11dGVkKGZhbHNlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWdPbiAmJiBpbWdPZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdPbi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nT2ZmLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0pzUGxheWVyLm11dGVkKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltZ09uICYmIGltZ09mZikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ09uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nT2ZmLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIGF1ZGlvIHBsYXllciBidXR0b25zXHJcbiAgICAgICAgICAgIGNvbnN0IHBsYXllckJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hdWRpby1wbGF5LWJ1dHRvbicpO1xyXG4gICAgICAgICAgICBjb25zdCBhdWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdWRpby10YWcnKSBhcyBIVE1MTWVkaWFFbGVtZW50O1xyXG4gICAgICAgICAgICBjb25zdCB0aW1lbGluZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgICAnLnRpbWVsaW5lLXRhZydcclxuICAgICAgICAgICAgKSBhcyBIVE1MSW5wdXRFbGVtZW50O1xyXG4gICAgICAgICAgICAvLyBjb25zdCB0aW1lbGluZVZhbHVlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnRpbWVsaW5lLXRhZycpLnZhbHVlO1xyXG4gICAgICAgICAgICBjb25zdCBzb3VuZEJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy5hdWRpby1zb3VuZC1idG4nKTtcclxuICAgICAgICAgICAgY29uc3QgcGxheUF1ZGlvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3BsYXknKTtcclxuICAgICAgICAgICAgY29uc3QgcGF1c2VBdWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwYXVzZScpO1xyXG4gICAgICAgICAgICBjb25zdCBpbWdTb3VuZE9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvLXNvdW5kLW9uJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGltZ1NvdW5kT2ZmID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2F1ZGlvLXNvdW5kLW9mZicpO1xyXG4gICAgICAgICAgICBjb25zdCBhdWRpb01vZGFsID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1hdWRpby1tb2RhbCcpO1xyXG4gICAgICAgICAgICBpZiAoYXVkaW8gJiYgcGxheWVyQnV0dG9uICYmIHRpbWVsaW5lKSB7XHJcbiAgICAgICAgICAgICAgICBwbGF5ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvLnBhdXNlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpby5wbGF5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhdXNlQXVkaW8uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5QXVkaW8uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhdWRpby5wYXVzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXVzZUF1ZGlvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYXlBdWRpby5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBzb3VuZEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXVkaW8ubXV0ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8ubXV0ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nU291bmRPbi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZ1NvdW5kT2ZmLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8ubXV0ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWdTb3VuZE9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZ1NvdW5kT2ZmLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGNoYW5nZVRpbWVsaW5lUG9zaXRpb24oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvLmR1cmF0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VQb3NpdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMTAwICogYXVkaW8uY3VycmVudFRpbWUpIC8gYXVkaW8uZHVyYXRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBlcmNlbnRhZ2VQb3NpdGlvblN0cmluZyA9IHBlcmNlbnRhZ2VQb3NpdGlvbiArICclJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUuc3R5bGUuYmFja2dyb3VuZFNpemUgPSBwZXJjZW50YWdlUG9zaXRpb25TdHJpbmcgKyAnIDEwMCUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS52YWx1ZSA9IHBlcmNlbnRhZ2VQb3NpdGlvbi50b1N0cmluZygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGF1ZGlvLm9udGltZXVwZGF0ZSA9IGNoYW5nZVRpbWVsaW5lUG9zaXRpb247XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFuZ2VTZWVrKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRpbWUgPSAocGFyc2VJbnQodGltZWxpbmUudmFsdWUpICogYXVkaW8uZHVyYXRpb24pIC8gMTAwO1xyXG4gICAgICAgICAgICAgICAgICAgIGF1ZGlvLmN1cnJlbnRUaW1lID0gdGltZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRpbWVsaW5lLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsIGNoYW5nZVNlZWspO1xyXG4gICAgICAgICAgICAgICAgdGltZWxpbmUuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLCBjaGFuZ2VTZWVrKTtcclxuICAgICAgICAgICAgICAgIC8vIGhhbmRsZSBhdWRpbyBjbGlja1xyXG4gICAgICAgICAgICAgICAgaWYgKGF1ZGlvTW9kYWwgJiYgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvQ29tbWVudCA9IGVsZW1lbnQuY29tbWVudHM/Lml0ZW1zLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5BVURJTyAmJiBjb20uc2hvd25JblRhZ1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYXVkaW9Db21tZW50SUQgPSBhdWRpb0NvbW1lbnQgPyBhdWRpb0NvbW1lbnQuaWQgOiAnJztcclxuICAgICAgICAgICAgICAgICAgICBhdWRpb01vZGFsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGFnU2VydmljZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnU2VydmljZS5vbkFjdGlvbkF1ZGlvQ2xpY2soYXVkaW9Db21tZW50SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHdlIHdhaXQgaWYgdXNlciBob3ZlcnMgb24gdG8gZGl2IG9mIHRoZSB0YWcgKGNoYW5nZXMgdGhpcy5mb2N1c01vdXNlVGFnRGl2KVxyXG4gICAgICAgICAgICB0aGlzLmJ0blRhZ0lzSG92ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuZm9jdXNNb3VzZVRhZ0RpdiAmJiAhdGhpcy5idG5UYWdJc0hvdmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmlkZW9Kc1BsYXllcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2aWRlb0pzUGxheWVyLmRpc3Bvc2UoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICBpZiAodmlkZW9Kc1BsYXllcikge1xyXG4gICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllci5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYXdhaXQgdGhpcy52aWV3ZXJTZXJ2aWNlLmFjdGlvbl9tb3ZlX3RvX3RhZyhidXR0b24uaWQpO1xyXG4gICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGNsZWFyQnRuKGlkTGlzdDogYW55W10pIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGlkIG9mIGlkTGlzdCkge1xyXG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XHJcbiAgICAgICAgICAgIGlmIChidXR0b24pIHtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5yZW1vdmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBjbGVhckFsbEJ1dHRvbnMoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGxhbkRpdkNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRoaXMucGxhbkRpdkNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyk7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWZvci1lYWNoXHJcbiAgICAgICAgICAgIGJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0biA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHVwZGF0ZUFsbEJ1dHRvbnNTdHlsZShwcm9wZXJ0aWVzOiBBcnJheTxzdHJpbmc+LCB2YWx1ZXM6IEFycmF5PHN0cmluZz4pIHtcclxuICAgICAgICBpZiAodGhpcy5wbGFuRGl2Q29udGVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGhpcy5wbGFuRGl2Q29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKTtcclxuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vbm8tYXJyYXktZm9yLWVhY2hcclxuICAgICAgICAgICAgYnV0dG9ucy5mb3JFYWNoKGZ1bmN0aW9uIChjdXJyZW50VmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMuZm9yRWFjaCgocHJvcGVydHksIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcGVydHkgPT09IFwidHJhbnNmb3JtXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9Gb3Igc2F2aW5nIHRoZSByb3RhdGlvbiBhbmQgYWRkaW5nIHNjYWxlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb3RhdGlvblJlZ2V4ID0gLyhyb3RhdGVcXCgtP1xcZCpcXC4/XFxkK2RlZ1xcKSkvZztcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHJvdGF0aW9uTWF0Y2ggPSBjdXJyZW50VmFsdWUuc3R5bGVbcHJvcGVydHldLm1hdGNoKHJvdGF0aW9uUmVnZXgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocm90YXRpb25NYXRjaC5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUuc3R5bGVbcHJvcGVydHldID0gYCR7dmFsdWVzW2ldfSAke3JvdGF0aW9uTWF0Y2hbMF19YDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZS5zdHlsZVtwcm9wZXJ0eV0gPSB2YWx1ZXNbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25QbGFuUmVtb3ZlKCkge1xyXG4gICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuID0gbnVsbDtcclxuICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbiA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3dlZXAgPSBudWxsO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2ID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZXNpemVQbGFuKGlzUmVtb3Zpbmc6IGJvb2xlYW4pIHtcclxuICAgICAgICB0aGlzLnJlc2l6ZVBsYW5TdWJzY3JpcHRpb24ubmV4dChmYWxzZSk7XHJcbiAgICAgICAgaWYgKGlzUmVtb3ZpbmcpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zb2xlLmxvZygnaW4gcmVzaXplUGxhbicpO1xyXG4gICAgICAgIGlmICh0aGlzLnBsYW5EaXYgJiYgdGhpcy5jdXJyZW50U3dlZXApIHtcclxuICAgICAgICAgICAgdGhpcy5wYW56b29tID0gcGFuem9vbSh0aGlzLnBsYW5EaXYsIHtcclxuICAgICAgICAgICAgICAgIGJvdW5kczogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGJvdW5kc1BhZGRpbmc6IDAsXHJcbiAgICAgICAgICAgICAgICBtYXhab29tOiA0LFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRIZWlnaHQsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgY29uc3QgeyBjb2VmZlgsIGNvZWZmWSB9ID0gZ2V0Q29lZmZpY2llbnRzRm9ySW1hZ2UodGhpcy5pbWdQbGFuLCByZWN0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWCA9IGNvZWZmWDtcclxuICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWSA9IGNvZWZmWTtcclxuICAgICAgICAgICAgICAgIHRoaXMucGFuem9vbS56b29tQWJzKDAsIDAsIDQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5yZXNpemVQbGFuU3Vic2NyaXB0aW9uLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIH0sIDIwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVRvdWNoKGV2ZW50KSB7XHJcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcclxuICAgICAgICBpZiAobm93IC0gdGhpcy5sYXN0VG91Y2hUaW1lIDwgdGhpcy5kZWxheURibFRvdWNoKSB7XHJcbiAgICAgICAgICAgIHRoaXMubGFzdFRvdWNoVGltZSA9IDA7XHJcbiAgICAgICAgICAgIC8vIHRoaXMub25EYmxDbGlja1BsYW4oZXZlbnQpO1xyXG4gICAgICAgICAgICAvKiogU2ltdWxhdGUgYSBkYmxjbGljayBmb3IgcGhvbmUgKHdlIGRvbid0IGdldCBvZmZzZXRYL1kgb24gdG91Y2hldmVudCkgKi9cclxuICAgICAgICAgICAgY29uc3QgbmV3RXZlbnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnTW91c2VFdmVudHMnKTtcclxuICAgICAgICAgICAgY29uc3QgdG91Y2ggPSBldmVudC5jaGFuZ2VkVG91Y2hlc1swXTtcclxuICAgICAgICAgICAgbmV3RXZlbnQuaW5pdE1vdXNlRXZlbnQoXHJcbiAgICAgICAgICAgICAgICAnZGJsY2xpY2snLFxyXG4gICAgICAgICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICBldmVudC50YXJnZXQub3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICB0b3VjaC5zY3JlZW5YLFxyXG4gICAgICAgICAgICAgICAgdG91Y2guc2NyZWVuWSxcclxuICAgICAgICAgICAgICAgIHRvdWNoLmNsaWVudFgsXHJcbiAgICAgICAgICAgICAgICB0b3VjaC5jbGllbnRZLFxyXG4gICAgICAgICAgICAgICAgZXZlbnQuY3RybEtleSxcclxuICAgICAgICAgICAgICAgIGV2ZW50LmFsdEtleSxcclxuICAgICAgICAgICAgICAgIGV2ZW50LnNoaXJ0S2V5LFxyXG4gICAgICAgICAgICAgICAgZXZlbnQubWV0YUtleSxcclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgICAgICAgICBudWxsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGV2ZW50LnRhcmdldC5kaXNwYXRjaEV2ZW50KG5ld0V2ZW50KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RUb3VjaFRpbWUgPSBub3c7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIG9uRGJsQ2xpY2tQbGFuKGV2ZW50KSB7XHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgICAgICBjb25zdCBjbGlja1ggPSBldmVudC5vZmZzZXRYO1xyXG4gICAgICAgIGNvbnN0IGNsaWNrWSA9IGV2ZW50Lm9mZnNldFk7XHJcbiAgICAgICAgY29uc3Qgem9uZVBsYW4gPSB0aGlzLmN1cnJlbnRQbGFuLnpvbmU7XHJcbiAgICAgICAgaWYgKHpvbmVQbGFuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5hdmlnYXRpb25zOiBhbnkgPVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5uYXZpZ2F0aW9uU2VydmljZS5nZXROYXZpZ2F0aW9uc0ZvclpvbmUoem9uZVBsYW4pO1xyXG4gICAgICAgICAgICBpZiAobmF2aWdhdGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICAgICAgbmF2aWdhdGlvbnMubWFwKGFzeW5jIChuYXYpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPSBKU09OLnBhcnNlKG5hdi5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB4OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB5OiBudW1iZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMkQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtUG9zaXRpb24zREZvck5ld0NhbGlicmF0aW9uKHBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbjJELnggLyBwb3NpdGlvbjJELmNvZWZmWDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBwb3NpdGlvbjJELnkgLyBwb3NpdGlvbjJELmNvZWZmWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHggPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRYICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueCAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLngpIC9cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WSArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnogKiB0aGlzLmNhbGlicmF0aW9uUGxhbi55KSAvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0WCA9IE1hdGguYWJzKGNsaWNrWCAtIHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkaXN0WSA9IE1hdGguYWJzKGNsaWNrWSAtIHkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBuYXYuZGlzdCA9IE1hdGguc3FydChNYXRoLnBvdyhkaXN0WCwgMikgKyBNYXRoLnBvdyhkaXN0WSwgMikpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgbmF2aWdhdGlvbnMuc29ydCgoYSwgYikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhLmRpc3QgLSBiLmRpc3Q7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWF0dGVycG9ydFNlcnZpY2UuYWN0aW9uX2dvX3RvX3N3ZWVwKFxyXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zWzBdLm1hdHRlcnBvcnRTd2VlcElEXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uZmlndXJlcyBwbGFuIGZyb20gY2FjaGUgKHByZXZpb3VzIHBsYW4pLlxyXG4gICAgICovXHJcbiAgICBhc3luYyB1cGxvYWRQbGFuRnJvbUNhY2hlKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHRoaXMuaHRtbENvbnRlbnRUb0luamVjdCA9IHRoaXMuY2FjaGUuaHRtbENvbnRlbnQ7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5jb25maWd1cmVQbGFuKHRoaXMuY2FjaGUucGxhbik7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogUHV0cyBidXR0b25zICh0YWdzKSBmcm9tIGNhY2hlIGFjY29yZGluZyB0byBwYXNzZWQgZWxlbWVudCBJRHMgKGZvciBmaWx0ZXIgaWYgYW55KVxyXG4gICAgICogQHBhcmFtIGVsZW1lbnRJRHMgZWxlbWVudHMgKHRpY2tldHMsIGVxdWlwbWVudHMsIGV0YykgdG8gYmUgc2hvd24gb24gcGxhblxyXG4gICAgICovXHJcbiAgICB1cGxvYWRUYWdzRnJvbUNhY2hlKHNpemVCdXR0b246IG51bWJlciA9IDEwKSB7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJ1cGxvYWRpbmcgdGFncyBmcm9tIGNhY2hlXCIpO1xyXG5cclxuICAgICAgICBmb3IgKGNvbnN0IGNhY2hlZCBvZiB0aGlzLmNhY2hlLmh0bWxDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgICB0aGlzLnN0eWxlQnV0dG9uKGJ1dHRvbiwgY2FjaGVkLnRhZ0ljb24sIHNpemVCdXR0b24pO1xyXG4gICAgICAgICAgICBidXR0b24uaWQgPSBjYWNoZWQuZWxlbWVudElEO1xyXG4gICAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LmFwcGVuZChidXR0b24pO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jYWxpYnJhdGlvblBsYW4ubmV3KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb2VmZlggPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWCAvXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW1nUGxhbi53aWR0aCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ1dpZHRoKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5ld0NvZWZmWSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZIC9cclxuICAgICAgICAgICAgICAgICAgICAodGhpcy5pbWdQbGFuLmhlaWdodCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ0hlaWdodCk7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0gYCR7Y2FjaGVkLnkgLyBuZXdDb2VmZlkgLSA1fXB4YDtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y2FjaGVkLnggLyBuZXdDb2VmZlggLSA1fXB4YDtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjYWNoZWQueSAvIHRoaXMuY29lZmZQbGFuWSAtIDV9cHhgO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLmxlZnQgPSBgJHtjYWNoZWQueCAvIHRoaXMuY29lZmZQbGFuWCAtIDV9cHhgO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmFkZExpc3RlbmVyc1RvQnV0dG9uKGJ1dHRvbiwgY2FjaGVkLnVybCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldENhbGlicmF0ZWRQbGFuRm9yWm9uZSh6b25lOiBab25lKTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICAgICAgbGV0IHBsYW5zID0gKGF3YWl0IHRoaXMuQVBJLlBsYW5zQnlab25lKHpvbmUuaWQpKS5pdGVtcztcclxuICAgICAgICBsZXQgcGFyZW50Wm9uZSA9IG51bGw7XHJcbiAgICAgICAgaWYgKHBsYW5zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAvLyB0cnkgdG8gZmluZCBwYXJlbnQgem9uZVxyXG4gICAgICAgICAgICBwYXJlbnRab25lID0gYXdhaXQgdGhpcy5BUEkuR2V0Wm9uZSh6b25lLnBhcmVudElEKTtcclxuICAgICAgICAgICAgcGxhbnMgPSAoYXdhaXQgdGhpcy5BUEkuUGxhbnNCeVpvbmUoem9uZS5wYXJlbnRJRCkpLml0ZW1zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjYWxpYnJhdGVkUGxhbiA9IHBsYW5zLmZpbmQoXHJcbiAgICAgICAgICAgIChwbGFuKSA9PiBwbGFuLmNhbGlicmF0aW9uICYmIHBsYW4uaXNDdXJyZW50Rm9yWm9uZVxyXG4gICAgICAgICkgYXMgUGxhbjtcclxuICAgICAgICBpZiAoY2FsaWJyYXRlZFBsYW4pIHtcclxuICAgICAgICAgICAgY29uc3Qgc2lnbmVkID0gYXdhaXQgZ2V0U2lnbmVkRmlsZShjYWxpYnJhdGVkUGxhbi5hbm5leGUpO1xyXG4gICAgICAgICAgICBpZiAoc2lnbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBjYWxpYnJhdGVkUGxhbi5maWxlcGF0aCA9IHNpZ25lZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYWxpYnJhdGVkUGxhbi5uYXZpZ2F0aW9uSURzID0gcGFyZW50Wm9uZVxyXG4gICAgICAgICAgICAgICAgPyBwYXJlbnRab25lLnN3ZWVwSURzXHJcbiAgICAgICAgICAgICAgICA6IHpvbmUuc3dlZXBJRHM7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjYWxpYnJhdGVkUGxhbiB8fCBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHRyYW5zZm9ybVBvc2l0aW9uM0RGb3JOZXdDYWxpYnJhdGlvbihwb3NpdGlvbjoge1xyXG4gICAgICAgIHg6IG51bWJlcjtcclxuICAgICAgICB5OiBudW1iZXI7XHJcbiAgICAgICAgejogbnVtYmVyO1xyXG4gICAgfSk6IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IGNvZWZmWDogbnVtYmVyOyBjb2VmZlk6IG51bWJlcjsgfSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25YID1cclxuICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ubmFtZVhBeGlzID09PSAneCcgPyBwb3NpdGlvbi54IDogcG9zaXRpb24uejtcclxuICAgICAgICBjb25zdCBwb3NpdGlvblkgPVxyXG4gICAgICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbi5uYW1lWUF4aXMgPT09ICd4JyA/IHBvc2l0aW9uLnggOiBwb3NpdGlvbi56O1xyXG4gICAgICAgIGxldCB4ID1cclxuICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WCArIHBvc2l0aW9uWCAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLnNjYWxlWDtcclxuICAgICAgICBsZXQgeSA9XHJcbiAgICAgICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgKyBwb3NpdGlvblkgKiB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVk7XHJcbiAgICAgICAgY29uc3QgbmV3Q29lZmZYID1cclxuICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YIC8gKHRoaXMuaW1nUGxhbi53aWR0aCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ1dpZHRoKTtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm5ld0NvZWZmWFwiLCBuZXdDb2VmZlgpO1xyXG4gICAgICAgIGNvbnN0IG5ld0NvZWZmWSA9XHJcbiAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWSAvICh0aGlzLmltZ1BsYW4uaGVpZ2h0IC8gdGhpcy5jYWxpYnJhdGlvblBsYW4uaW1nSGVpZ2h0KTtcclxuICAgICAgICB4ID0gKHggLSB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRYUGxhbikgLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVBsYW47XHJcblxyXG4gICAgICAgIHkgPSAoeSAtIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFlQbGFuKSAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLnNjYWxlUGxhbjtcclxuICAgICAgICAvLyBjb25zb2xlLmxvZyh4LCB5KTtcclxuXHJcbiAgICAgICAgcmV0dXJuIHsgeCwgeSwgY29lZmZYOiBuZXdDb2VmZlgsIGNvZWZmWTogbmV3Q29lZmZZIH07XHJcbiAgICB9XHJcbn1cclxuIl19
820
+ }] }, { type: i1.ZoneService }, { type: i2.NavigationService }, { type: i3.ViewerService }, { type: i4.Router }, { type: i5.MatterportService }, { type: i6.BaseVisibilityService }, { type: i7.ContentService }] });
821
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGxhbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tb2RlbHMvcGxhbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQiwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5RCxPQUFPLE9BQU8sTUFBTSxTQUFTLENBQUM7QUFDOUIsT0FBTyxPQUFPLE1BQU0sVUFBVSxDQUFDO0FBQy9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUNILFdBQVcsRUFDWCxXQUFXLEVBRVgsT0FBTyxHQUVWLE1BQU0scUJBQXFCLENBQUM7QUFNN0IsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHOUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDakUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7Ozs7Ozs7QUFNeEQsTUFBTSxPQUFPLFdBQVc7SUE0RVI7SUFDQTtJQUVBO0lBQ0E7SUFDQTtJQUVBO0lBQ0E7SUFuRlosVUFBVSxDQUFPO0lBRWpCLFdBQVcsQ0FBTztJQUVsQixZQUFZLENBQVM7SUFFckIsYUFBYSxDQUFPO0lBRXBCLFVBQVUsQ0FBTTtJQUVoQixPQUFPLENBQTJCO0lBQ2xDLGNBQWMsQ0FBYztJQUU1QixPQUFPLENBQU07SUFFYixPQUFPLEdBQVksS0FBSyxDQUFDO0lBRXpCLGVBQWUsQ0FBb0I7SUFFbkMsVUFBVSxDQUFTO0lBRW5CLFVBQVUsQ0FBUztJQUVuQixlQUFlLENBQU07SUFF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QUM7UUFFNUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUM7UUFDNUUscUJBQXFCO1FBRXJCLE9BQU8sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxDQUFDO0lBQzFELENBQUM7d0dBbjlCUSxXQUFXLGtCQTJFUixtQkFBbUI7NEdBM0V0QixXQUFXLGNBRlIsTUFBTTs7NEZBRVQsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckI7OzBCQTRFUSxNQUFNOzJCQUFDLG1CQUFtQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGZ1bmMtbmFtZXMgKi9cclxuLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xyXG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgZ2V0RG9jdW1lbnQsIEdsb2JhbFdvcmtlck9wdGlvbnMgfSBmcm9tICdwZGZqcy1kaXN0JztcclxuaW1wb3J0IHBhbnpvb20gZnJvbSAncGFuem9vbSc7XHJcbmltcG9ydCB2aWRlb2pzIGZyb20gXCJ2aWRlby5qc1wiO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7XHJcbiAgICBDb21tZW50VHlwZSxcclxuICAgIEZlYXR1cmVUeXBlLFxyXG4gICAgUGxhbixcclxuICAgIFBvaVR5cGUsXHJcbiAgICBab25lLFxyXG59IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuLi9iYXNlVmlzaWJpbGl0eS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTWF0dGVycG9ydFNlcnZpY2UgfSBmcm9tICcuLi9tYXR0ZXJwb3J0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBWaWV3ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vdmlld2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBab25lU2VydmljZSB9IGZyb20gJy4vem9uZS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTmF2aWdhdGlvblNlcnZpY2UgfSBmcm9tICcuL25hdmlnYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IGdldFNpZ25lZEZpbGUsIHVwbG9hZEZpbGVUb1MzIH0gZnJvbSAnLi4vczMuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi4vdGFnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi8uLi9jb25maWcnO1xyXG5pbXBvcnQgeyBnZXRDb2VmZmljaWVudHNGb3JJbWFnZSB9IGZyb20gJy4uL3pvbmUtZHJhd2VyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBnZXRNZXRhRm9ySW1hZ2UgfSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb250ZW50U2VydmljZSB9IGZyb20gJy4uL2NvbnRlbnQuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQbGFuU2VydmljZSB7XHJcbiAgICBjaG9zZW5QbGFuOiBQbGFuO1xyXG5cclxuICAgIGN1cnJlbnRQbGFuOiBQbGFuO1xyXG5cclxuICAgIGN1cnJlbnRTd2VlcDogc3RyaW5nO1xyXG5cclxuICAgIHBsYW5GaWxlQ2FjaGU6IEZpbGU7XHJcblxyXG4gICAgcGxhbkNhbnZhczogYW55O1xyXG5cclxuICAgIHBsYW5EaXY6IEhUTUxFbGVtZW50IHwgU1ZHRWxlbWVudDtcclxuICAgIHBsYW5EaXZDb250ZW50OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgICBwYW56b29tOiBhbnk7XHJcblxyXG4gICAgaXNSZWFkeTogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICAgIHVzZXJQb3NpdGlvbkJ0bjogSFRNTEJ1dHRvbkVsZW1lbnQ7XHJcblxyXG4gICAgY29lZmZQbGFuWDogbnVtYmVyO1xyXG5cclxuICAgIGNvZWZmUGxhblk6IG51bWJlcjtcclxuXHJcbiAgICBjYWxpYnJhdGlvblBsYW46IGFueTtcclxuXHJcbiAgICBkZXRhaWxUYWdEaXY6IEhUTUxFbGVtZW50O1xyXG5cclxuICAgIGRldGFpbFRhZ0RpdklzSG92ZXIgPSBmYWxzZTtcclxuXHJcbiAgICBidG5UYWdJc0hvdmVyID0gZmFsc2U7XHJcblxyXG4gICAgcmVzaXplUGxhblN1YnNjcmlwdGlvbiA9IG5ldyBTdWJqZWN0PGJvb2xlYW4+KCk7XHJcblxyXG4gICAgaW1nUGxhbjogSFRNTEltYWdlRWxlbWVudDtcclxuXHJcbiAgICBsYXN0VG91Y2hUaW1lID0gMDtcclxuXHJcbiAgICBkZWxheURibFRvdWNoID0gNTAwO1xyXG5cclxuICAgIGxhc3RSb3RhdGlvbjogbnVtYmVyID0gMDtcclxuXHJcbiAgICBodG1sQ29udGVudFRvSW5qZWN0OiB7XHJcbiAgICAgICAgdGl0bGU6IHN0cmluZztcclxuICAgICAgICBjb250ZW50OiBzdHJpbmc7XHJcbiAgICAgICAgZWxlbWVudElEOiBzdHJpbmc7XHJcbiAgICAgICAgeTogbnVtYmVyO1xyXG4gICAgICAgIHg6IG51bWJlcjtcclxuICAgICAgICB0YWdJY29uOiBzdHJpbmc7XHJcbiAgICAgICAgdXJsOiBzdHJpbmc7XHJcbiAgICB9W10gPSBbXTtcclxuXHJcbiAgICBjYWNoZToge1xyXG4gICAgICAgIGVxdWlwSURzOiBzdHJpbmdbXTtcclxuICAgICAgICB0aWNrZXRJRHM6IHN0cmluZ1tdO1xyXG4gICAgICAgIG1lYXN1cmVtZW50c0lEczogc3RyaW5nW107XHJcbiAgICAgICAgZmVhdHVyZUlEczogc3RyaW5nW107XHJcbiAgICAgICAgem9uZUlEOiBzdHJpbmc7XHJcbiAgICAgICAgcGxhbjogUGxhbjtcclxuICAgICAgICBodG1sQ29udGVudDoge1xyXG4gICAgICAgICAgICB0aXRsZTogc3RyaW5nO1xyXG4gICAgICAgICAgICBjb250ZW50OiBzdHJpbmc7XHJcbiAgICAgICAgICAgIGVsZW1lbnRJRDogc3RyaW5nO1xyXG4gICAgICAgICAgICB5OiBudW1iZXI7XHJcbiAgICAgICAgICAgIHg6IG51bWJlcjtcclxuICAgICAgICAgICAgdGFnSWNvbjogc3RyaW5nO1xyXG4gICAgICAgICAgICB1cmw6IHN0cmluZztcclxuICAgICAgICB9W107XHJcbiAgICB9O1xyXG5cclxuICAgIGZvY3VzTW91c2VUYWdEaXY6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICBBUEk6IGFueTsgLy9BV1NcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBASW5qZWN0KCdjdXJyZW50QVBJU2VydmljZScpIGFwaUluamVjdGVkOiBhbnksXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBuYXZpZ2F0aW9uU2VydmljZTogTmF2aWdhdGlvblNlcnZpY2UsXHJcbiAgICAgICAgLy8gdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB2aWV3ZXJTZXJ2aWNlOiBWaWV3ZXJTZXJ2aWNlLFxyXG4gICAgICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICAgICAgcHJpdmF0ZSBtYXR0ZXJwb3J0U2VydmljZTogTWF0dGVycG9ydFNlcnZpY2UsXHJcbiAgICAgICAgLy8gcHJpdmF0ZSBjb25maWc6IEFwcENvbmZpZyxcclxuICAgICAgICBwcml2YXRlIHZpc2liaWxpdHlTZXJ2aWNlOiBCYXNlVmlzaWJpbGl0eVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2VcclxuICAgICkge1xyXG4gICAgICAgIHRoaXMuQVBJID0gYXBpSW5qZWN0ZWQ7XHJcbiAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5jdXJyZW50Q2FtZXJhUG9zZS5zdWJzY3JpYmUoKHBvc2UpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3RhdGlvbihwb3NlLnJvdGF0aW9uLnkpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVBsYW4ocGxhbklucHV0OiBQbGFuKTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVQbGFuKHBsYW5JbnB1dCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZGVsZXRlUGxhbihwbGFuOiBQbGFuKTogUHJvbWlzZTxQbGFuPiB7XHJcbiAgICAgICAgLy8gYXdhaXQgZGVsZXRlRnJvbVMzKHBsYW4uYW5uZXhlKTtcclxuICAgICAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkRlbGV0ZVBsYW4oeyBpZDogcGxhbi5pZCB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRQbGFuc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAgICAgICAuUGxhbnNCeVNwYWNlKHNwYWNlSUQpXHJcbiAgICAgICAgICAgIC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuaXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldFBsYW5zRm9yWm9uZSh6b25lSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAgICAgICAuUGxhbnNCeVpvbmUoem9uZUlEKVxyXG4gICAgICAgICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLml0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRTaW5nZWRQbGFuc0ZvclNwYWNlKHNwYWNlSUQ6IHN0cmluZyk6IFByb21pc2U8UGxhbltdPiB7XHJcbiAgICAgICAgY29uc3QgcGxhbnNGcm9tREIgPSBhd2FpdCB0aGlzLmdldFBsYW5zRm9yU3BhY2Uoc3BhY2VJRCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2cocGxhbnNGcm9tREIpO1xyXG4gICAgICAgIGNvbnN0IHBsYW5zID0gW107XHJcbiAgICAgICAgaWYgKHBsYW5zRnJvbURCLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgICAgICBwbGFuc0Zyb21EQi5tYXAoYXN5bmMgKHBsYW4pID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwbGFuT2JqZWN0ID0geyAuLi5wbGFuIH0gYXMgUGxhbjtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbm5leGUgbG9va3MgbGlrZSB2aXNpdHMvbW9kZWxJRC9wbGFucy9maWxlLmV4dGVuc2lvblxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGdldFNpZ25lZEZpbGUocGxhbi5hbm5leGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChzaWduZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhbk9iamVjdC5maWxlcGF0aCA9IHNpZ25lZDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBsYW4uYW5uZXhlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFssIG1vZGVsSUQsICwgZmlsZW5hbWVXaXRoRXh0ZW5zaW9uXSA9IHBsYW4uYW5uZXhlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFssIGV4dGVudGlvbl0gPSBmaWxlbmFtZVdpdGhFeHRlbnNpb24uc3BsaXQoJy4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhbk9iamVjdC5tb2RlbDNkID0gbW9kZWxJRDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhbk9iamVjdC5leHRlbnNpb24gPSBleHRlbnRpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYW5zLnB1c2gocGxhbk9iamVjdCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYEVycm9yIHBsYW4gaGF2ZSBub3QgYW5uZXhlID0+IGApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhwbGFuLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcGxhbnM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UGxhbnNXaXRoWm9uZXNGb3JTcGFjZShzcGFjZUlEOiBzdHJpbmcpOiBQcm9taXNlPFBsYW5bXT4ge1xyXG4gICAgICAgIGNvbnN0IHBsYW5zID0gYXdhaXQgdGhpcy5nZXRQbGFuc0ZvclNwYWNlKHNwYWNlSUQpO1xyXG4gICAgICAgIGNvbnN0IHBsYW5zWm9uZXMgPSBwbGFucy5maWx0ZXIoKHBsYW4pID0+IHBsYW4uem9uZSAmJiBwbGFuLmNhbGlicmF0aW9uKTtcclxuICAgICAgICByZXR1cm4gcGxhbnNab25lcztcclxuICAgIH1cclxuXHJcbiAgICBzZXRDaG9zZW5QbGFuKGNob3NlblBsYW46IFBsYW4pIHtcclxuICAgICAgICB0aGlzLmNob3NlblBsYW4gPSBjaG9zZW5QbGFuO1xyXG4gICAgfVxyXG5cclxuICAgIGdldENob3NlblBsYW4oKTogUGxhbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hvc2VuUGxhbjtcclxuICAgIH1cclxuXHJcbiAgICBzZXRQbGFuRmlsZUNhY2hlKHBsYW5GaWxlQ2FjaGU6IEZpbGUpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLnBsYW5GaWxlQ2FjaGUgPSBwbGFuRmlsZUNhY2hlO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRQbGFuRmlsZUNhY2hlKCk6IEZpbGUge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnBsYW5GaWxlQ2FjaGU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlUGxhbldpdGhBbm5leGUocGxhbjogUGxhbiwgZmlsZTogRmlsZSk6IFByb21pc2U8UGxhbj4ge1xyXG4gICAgICAgIGNvbnN0IGNyZWF0ZWRQbGFuID0gYXdhaXQgdGhpcy5jcmVhdGVQbGFuKHBsYW4pO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsM0QgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldE1vZGVsM0RGb3Jab25lKHBsYW4uem9uZUlEKTtcclxuICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCB1cGxvYWRGaWxlVG9TMyhcclxuICAgICAgICAgICAgYHZpc2l0cy8ke21vZGVsM0R9L3BsYW5zL2AsXHJcbiAgICAgICAgICAgIGZpbGUsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRQbGFuLmlkXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAodXJsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlUGxhbih7IGlkOiBjcmVhdGVkUGxhbi5pZCwgYW5uZXhlOiB1cmwgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBjcmVhdGVkUGxhbjtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVQbGFuKHBsYW46IGFueSk6IFByb21pc2U8UGxhbj4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uVXBkYXRlUGxhbihwbGFuKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyB1cGRhdGVQbGFuRmlsZSgpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNob3NlblBsYW4gJiYgdGhpcy5wbGFuRmlsZUNhY2hlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vZGVsM0QgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldE1vZGVsM0RGb3Jab25lKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jaG9zZW5QbGFuLnpvbmVJRFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICByZXR1cm4gdXBsb2FkRmlsZVRvUzMoXHJcbiAgICAgICAgICAgICAgICBgdmlzaXRzLyR7bW9kZWwzRH0vcGxhbnMvYCxcclxuICAgICAgICAgICAgICAgIHRoaXMucGxhbkZpbGVDYWNoZSxcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hvc2VuUGxhbi5pZFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzZXRBbGxQbGFuc0ZvclpvbmVOb3RDdXJyZW50KHpvbmVJRDogc3RyaW5nLCBjdXJyZW50UGxhbklEOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBwbGFucyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5MaXN0UGxhbnMoe1xyXG4gICAgICAgICAgICB6b25lSUQ6IHsgZXE6IHpvbmVJRCB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICBwbGFucy5pdGVtcy5tYXAoYXN5bmMgKHBsYW4pID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChwbGFuLmlzQ3VycmVudEZvclpvbmUgJiYgcGxhbi5pZCAhPT0gY3VycmVudFBsYW5JRCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlUGxhbih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwbGFuLmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc0N1cnJlbnRGb3Jab25lOiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNvbmZpZ3VyZVBsYW4oXHJcbiAgICAgICAgY3VycmVudFBsYW46IFBsYW4sXHJcbiAgICAgICAgZGl2SWQ6IHN0cmluZyA9ICdwbGFuRGl2UGFuZScsXHJcbiAgICAgICAgZGl2Q29udGVudElkOiBzdHJpbmcgPSAncGxhbkRpdlBhbmVDb250ZW50J1xyXG4gICAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICAgICAgdGhpcy5pc1JlYWR5ID0gZmFsc2U7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRldGFpbFRhZ0Rpdikge1xyXG4gICAgICAgICAgICB0aGlzLmRldGFpbFRhZ0RpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgICAgICAgICBgI2RldGFpbFRhZ0RpdmBcclxuICAgICAgICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5mb2N1c01vdXNlVGFnRGl2ID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmRldGFpbFRhZ0Rpdi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ0blRhZ0lzSG92ZXIgPSBmYWxzZTtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgdGhpcy5mb2N1c01vdXNlVGFnRGl2ID0gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuID0gSlNPTi5wYXJzZShjdXJyZW50UGxhbi5jYWxpYnJhdGlvbik7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50UGxhbiA9IGN1cnJlbnRQbGFuO1xyXG4gICAgICAgIHRoaXMucGxhbkRpdiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCMke2RpdklkfWApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICBgIyR7ZGl2Q29udGVudElkfWBcclxuICAgICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG5cclxuICAgICAgICB0aGlzLnBsYW5EaXYuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIHRoaXMuaGFuZGxlVG91Y2guYmluZCh0aGlzKSk7XHJcbiAgICAgICAgdGhpcy5wbGFuRGl2LmFkZEV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJywgdGhpcy5vbkRibENsaWNrUGxhbi5iaW5kKHRoaXMpKTtcclxuXHJcbiAgICAgICAgaWYgKCFjdXJyZW50UGxhbi5hbm5leGUuaW5jbHVkZXMoJ3BkZicpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaW1nUGxhbiA9IGF3YWl0IGdldE1ldGFGb3JJbWFnZShjdXJyZW50UGxhbi5maWxlcGF0aCk7XHJcbiAgICAgICAgICAgIC8vUmVjdCB1c2Ugb2Zmc2V0V2lkdGggOiBoZWlnaHQsIG5vdCBhY3R1YWwgYm91bmRpbmdDbGllbnRSZWN0IGJlY2F1c2Ugd2lsbCBiZSBtb2RpZmllZCBieSB0aGUgem9vbS5cclxuICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgICAgICAgICAgIHdpZHRoOiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldFdpZHRoLFxyXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgY29uc3QgeyBjb2VmZlgsIGNvZWZmWSB9ID0gZ2V0Q29lZmZpY2llbnRzRm9ySW1hZ2UodGhpcy5pbWdQbGFuLCByZWN0KTtcclxuICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YID0gY29lZmZYO1xyXG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgPSBjb2VmZlk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHtjdXJyZW50UGxhbi5maWxlcGF0aH0pYDtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLmRyYXdQZGYoY3VycmVudFBsYW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLmJhY2tncm91bmRTaXplID0gJ2NvbnRhaW4nO1xyXG4gICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUuYmFja2dyb3VuZFJlcGVhdCA9ICduby1yZXBlYXQnO1xyXG5cclxuICAgICAgICB0aGlzLnBhbnpvb20gPSBwYW56b29tKHRoaXMucGxhbkRpdiwge1xyXG4gICAgICAgICAgICBib3VuZHM6IHRydWUsXHJcbiAgICAgICAgICAgIGJvdW5kc1BhZGRpbmc6IDAsXHJcbiAgICAgICAgICAgIG1heFpvb206IDQsXHJcbiAgICAgICAgICAgIHpvb21Eb3VibGVDbGlja1NwZWVkOiAxLCAvL2Rpc2FibGVzIGRvdWJsZSBjbGljayB6b29tXHJcbiAgICAgICAgICAgIC8vaW5pdGlhbFpvb206IDRcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnBhbnpvb20uem9vbUFicygwLCAwLCA0KTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVSb3RhdGlvbih0aGlzLmxhc3RSb3RhdGlvbik7XHJcbiAgICAgICAgfSwgMjAwKTtcclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhclBsYW5JbWFnZSgpIHtcclxuICAgICAgICBpZiAodGhpcy5wbGFuRGl2Q29udGVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRyYXdQZGYoY3VycmVudFBsYW46IFBsYW4pOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJykgYXMgSFRNTENhbnZhc0VsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJykgYXMgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xyXG4gICAgICAgICAgICBHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyA9IGAvL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9wZGYuanMvNC40LjE2OC9wZGYud29ya2VyLm1pbi5tanNgO1xyXG4gICAgICAgICAgICBjb25zdCBwZGYgPSBhd2FpdCBnZXREb2N1bWVudChjdXJyZW50UGxhbi5maWxlcGF0aCkucHJvbWlzZTtcclxuICAgICAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHBkZi5nZXRQYWdlKDEpO1xyXG5cclxuICAgICAgICAgICAgY29uc3Qgdmlld1BvcnRQYXJhbWV0ZXJzID0geyBzY2FsZTogMS41IH07XHJcbiAgICAgICAgICAgIGNvbnN0IHZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh2aWV3UG9ydFBhcmFtZXRlcnMpO1xyXG5cclxuICAgICAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDtcclxuICAgICAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7XHJcbiAgICAgICAgICAgICAgICBjYW52YXNDb250ZXh0OiBjb250ZXh0LFxyXG4gICAgICAgICAgICAgICAgdmlld3BvcnQsXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KS5wcm9taXNlO1xyXG4gICAgICAgICAgICByZW5kZXJUYXNrLnRoZW4oYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW1nVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvcG5nJyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmltZ1BsYW4gPSBhd2FpdCBnZXRNZXRhRm9ySW1hZ2UoaW1nVXJsKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJlY3QgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLnBsYW5EaXZDb250ZW50Lm9mZnNldEhlaWdodCxcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICBjb25zdCB7IGNvZWZmWCwgY29lZmZZIH0gPSBnZXRDb2VmZmljaWVudHNGb3JJbWFnZSh0aGlzLmltZ1BsYW4sIHJlY3QpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YID0gY29lZmZYO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZID0gY29lZmZZO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5wbGFuRGl2LnN0eWxlLmJhY2tncm91bmRJbWFnZSA9IGB1cmwoJHtpbWdVcmx9KWA7XHJcbiAgICAgICAgICAgICAgICByZXNvbHZlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGRyYXdFbGVtZW50KFxyXG4gICAgICAgIGVsZW1lbnQ6IGFueSxcclxuICAgICAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgICAgIGN1cnJlbnRQbGFuOiBQbGFuLFxyXG4gICAgICAgIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlLFxyXG4gICAgICAgIGNvbmZpZzogQ29uZmlnLFxyXG4gICAgICAgIHNpemVCdXR0b246IG51bWJlciA9IDEwXHJcbiAgICApIHtcclxuICAgICAgICBjb25zdCBbcG9pXSA9IGVsZW1lbnQucG9pcy5pdGVtcztcclxuICAgICAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlICYmIGN1cnJlbnRQbGFuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHsgem9uZSB9ID0gY3VycmVudFBsYW47XHJcbiAgICAgICAgICAgIGlmICh6b25lKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZWxlbWVudFRpdGxlOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoZWxlbWVudCwgdGFnVHlwZSk7XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFnSWNvbkltYWdlOiBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRhZ1R5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuVElDS0VUOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl90aWNrZXQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuRVFVSVBNRU5UOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IGNvbmZpZy5teV9jb25maWcuaWNvbl9lcXVpcG1lbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuTUVBU1VSRTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX21lYXN1cmU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5PQkpFQ1QzRDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX29iamVjdDNkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFBvaVR5cGUuREFUQTpcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbkltYWdlID0gY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgUG9pVHlwZS5ERVNLOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0YWdJY29uSW1hZ2UgPSBjb25maWcubXlfY29uZmlnLmljb25fZGF0YTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKHBvaS50YWdJY29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdGFnSWNvbiA9IEpTT04ucGFyc2UocG9pLnRhZ0ljb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnVHlwZSA9PT0gUG9pVHlwZS5EQVRBICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudHlwZSA9PT0gRmVhdHVyZVR5cGUuSU5ESUNBVE9SX1RFTVBcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbi5zcmMgPSB0YWdTZXJ2aWNlLmdldEljb25UYWdJbWFnZUZvckZlYXR1cmUoZWxlbWVudCwgcG9pKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gcG9pLnRhZ0ljb24gPSB0YWdJY29uO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGFnSWNvbi5zcmMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc291cmNlID0gYXdhaXQgZ2V0U2lnbmVkRmlsZSh0YWdJY29uLnNyYyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb25JbWFnZSA9IHNvdXJjZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc3R5bGVCdXR0b24oYnV0dG9uLCB0YWdJY29uSW1hZ2UsIHNpemVCdXR0b24pO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLmlkID0gZWxlbWVudC5pZDtcclxuICAgICAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuYXBwZW5kKGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICBsZXQgeDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IHk6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBhbGVydChcIm5ldyBjYWxpYnJhdGlvbiBwbGFuOiBwb3NpdGlvbmluZyBub3QgcmVhZHkgeWV0XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uMkQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uM0RGb3JOZXdDYWxpYnJhdGlvbihwb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9IHBvc2l0aW9uMkQueDtcclxuICAgICAgICAgICAgICAgICAgICB5ID0gcG9zaXRpb24yRC55O1xyXG4gICAgICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS50b3AgPSBgJHt5IC8gcG9zaXRpb24yRC5jb2VmZlkgLSA1fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IGAke3ggLyBwb3NpdGlvbjJELmNvZWZmWCAtIDV9cHhgO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB0byByZW1vdmUgd2hlbiBhbGwgY2FsaWJyYXRpb25zIGFyZSBuZXdcclxuICAgICAgICAgICAgICAgICAgICB4ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WCArIHBvc2l0aW9uLnggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi54O1xyXG4gICAgICAgICAgICAgICAgICAgIHkgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZICsgcG9zaXRpb24ueiAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLnk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke3kgLyB0aGlzLmNvZWZmUGxhblkgLSA1fXB4YDtcclxuICAgICAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IGAke3ggLyB0aGlzLmNvZWZmUGxhblggLSA1fXB4YDtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBodG1sID0gYXdhaXQgdGFnU2VydmljZS5nZXRIdG1sVG9JbmplY3QodGFnVHlwZSwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaHRtbCAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaHRtbENvbnRlbnRUb0luamVjdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudElEOiBlbGVtZW50LmlkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGh0bWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHgsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ0ljb246IHRhZ0ljb25JbWFnZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyB3aGVuIHdlIGRvbid0IGhhdmUgaHRtbCA9PiBjYXNlIG9mIEVNQkVEIENvbW1lbnQgdHlwZVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbW1lbnRFbWJlZCA9IGVsZW1lbnQuY29tbWVudHM/Lml0ZW1zLmZpbmQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIChjb20pID0+IGNvbS50eXBlID09PSBDb21tZW50VHlwZS5FTUJFRCAmJiBjb20uc2hvd25JblRhZ1xyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbW1lbnRFbWJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmh0bWxDb250ZW50VG9JbmplY3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50SUQ6IGVsZW1lbnQuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZWxlbWVudC50aXRsZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGA8aWZyYW1lIHNyYz0ke2NvbW1lbnRFbWJlZC5leHRlcm5hbExpbmt9IGhlaWdodD1cIjIwMHB4XCIgd2lkdGg9XCIxMDAlXCI+PC9pZnJhbWU+YCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFnSWNvbjogdGFnSWNvbkltYWdlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRMaXN0ZW5lcnNUb0J1dHRvbihidXR0b24sIHVybCwgdGFnU2VydmljZSwgZWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVJvdGF0aW9uKHRoaXMubGFzdFJvdGF0aW9uKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBkcmF3VXNlclBvc2l0aW9uKGN1cnJlbnRTd2VlcCA9IHRoaXMuY3VycmVudFN3ZWVwLCBzaXplQnV0dG9uOiBudW1iZXIgPSAxMCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN3ZWVwID0gY3VycmVudFN3ZWVwO1xyXG4gICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbiAmJiBjdXJyZW50U3dlZXApIHtcclxuICAgICAgICAgICAgY29uc3QgcG9zaXRpb24gPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJwb3J0U2VydmljZS5nZXRDdXJyZW50Q2FtZXJhUG9zaXRpb24oKT8ucG9zaXRpb247XHJcbiAgICAgICAgICAgIGlmIChwb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLnVzZXJQb3NpdGlvbkJ0bikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudXNlclBvc2l0aW9uQnRuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4uaWQgPSAnY3VycmVudFBvc2l0aW9uJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnBsYW5EaXZDb250ZW50LmFwcGVuZCh0aGlzLnVzZXJQb3NpdGlvbkJ0bik7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4udGl0bGUgPSAnWW91IGFyZSBoZXJlJztcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0eWxlQnV0dG9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bixcclxuICAgICAgICAgICAgICAgICAgICAgICAgJ2h0dHBzOi8vYXBpLmljb25pZnkuZGVzaWduL2J4OmJ4cy11c2VyLWNpcmNsZS5zdmc/Y29sb3I9Z3JlZW4maGVpZ2h0PTE3JndpZHRoPTE3JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZUJ1dHRvblxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBsZXQgeDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgbGV0IHk6IG51bWJlcjtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNhbGlicmF0aW9uUGxhbi5uZXcpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbjJEID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgIHggPSBwb3NpdGlvbjJELnggLyBwb3NpdGlvbjJELmNvZWZmWCAtIDU7XHJcbiAgICAgICAgICAgICAgICAgICAgeSA9IHBvc2l0aW9uMkQueSAvIHBvc2l0aW9uMkQuY29lZmZZIC0gNTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeCA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICh0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRYICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi54KSAvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWDtcclxuICAgICAgICAgICAgICAgICAgICB5ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24ueiAqIHRoaXMuY2FsaWJyYXRpb25QbGFuLnkpIC9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5ZO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4uc3R5bGUudG9wID0gYCR7eX1weGA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0bi5zdHlsZS5sZWZ0ID0gYCR7eH1weGA7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vdmVPblBvaW50KHsgeDogeCArIDUsIHk6IHkgKyA1IH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ2VudGVyIHRoZSB2aWV3IG9mIHRoZSBwbGFuIG9uIGNvb3JkaW5hdGVzXHJcbiAgICAgKiBAcGFyYW0gY29vcmRpbmF0ZSBDb29yZGluYXRlIG9uIHRoZSBwbGFuXHJcbiAgICAgKi9cclxuICAgIG1vdmVPblBvaW50KGNvb3JkaW5hdGUpIHtcclxuICAgICAgICBpZiAodGhpcy5wbGFuRGl2KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gdGhpcy5wYW56b29tLmdldFRyYW5zZm9ybSgpLnNjYWxlO1xyXG4gICAgICAgICAgICBjb25zdCBtb3ZlWCA9IHRoaXMucGxhbkRpdi5jbGllbnRXaWR0aCAvIDIgLSBjb29yZGluYXRlLnggKiBzY2FsZTtcclxuICAgICAgICAgICAgY29uc3QgbW92ZVkgPSB0aGlzLnBsYW5EaXYuY2xpZW50SGVpZ2h0IC8gMiAtIGNvb3JkaW5hdGUueSAqIHNjYWxlO1xyXG4gICAgICAgICAgICB0aGlzLnBhbnpvb20ubW92ZVRvKG1vdmVYLCBtb3ZlWSk7XHJcbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gYCR7Y29vcmRpbmF0ZS54fXB4ICR7Y29vcmRpbmF0ZS55fXB4YDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcHBseSBhIHJvdGF0aW9uIHRvIHRoZSBwbGFuXHJcbiAgICAgKiBCdXR0b25zIHdpbGwgcmVtYWluIGluIHRoZSBjb3JyZWN0IHJvdGF0aW9uXHJcbiAgICAgKiBAcGFyYW0gcm90YXRpb25cclxuICAgICAqL1xyXG4gICAgdXBkYXRlUm90YXRpb24ocm90YXRpb24pIHtcclxuICAgICAgICB0aGlzLmxhc3RSb3RhdGlvbiA9IHJvdGF0aW9uO1xyXG4gICAgICAgIGlmICh0aGlzLnBsYW5EaXZDb250ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMucGxhbkRpdkNvbnRlbnQuc3R5bGUudHJhbnNmb3JtID0gYHJvdGF0ZSgke3JvdGF0aW9ufWRlZylgO1xyXG4gICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGhpcy5wbGFuRGl2Q29udGVudC5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24nKTtcclxuICAgICAgICAgICAgbGV0IHJvdGF0aW9uUmVnZXggPSAvKHJvdGF0ZVxcKC0/XFxkKlxcLj9cXGQrZGVnXFwpKS9nO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1mb3ItZWFjaFxyXG4gICAgICAgICAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4ge1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9IGJ1dHRvbi5zdHlsZS50cmFuc2Zvcm0ucmVwbGFjZShyb3RhdGlvblJlZ2V4LCBcIlwiKSArIGAgcm90YXRlKCR7LXJvdGF0aW9ufWRlZylgO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcmVtb3ZlQ3VycmVudFBvc2l0aW9uKCkge1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJyNjdXJyZW50UG9zaXRpb24nKTtcclxuICAgICAgICBpZiAoYnV0dG9uKSB7XHJcbiAgICAgICAgICAgIGJ1dHRvbi5yZW1vdmUoKTtcclxuICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBzdHlsZUJ1dHRvbihidXR0b246IEhUTUxCdXR0b25FbGVtZW50LCB1cmw6IHN0cmluZywgc2l6ZUJ1dHRvbjogbnVtYmVyID0gMTApIHtcclxuICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZEltYWdlID0gYHVybCgke3VybH0pYDtcclxuICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZENvbG9yID0gJ3RyYW5zcGFyZW50JztcclxuICAgICAgICBidXR0b24uc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXIgPSAnbm9uZSc7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLndpZHRoID0gYDEwcHhgO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5oZWlnaHQgPSBgMTBweGA7XHJcbiAgICAgICAgYnV0dG9uLmRpc2FibGVkID0gZmFsc2U7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLmJhY2tncm91bmRTaXplID0gJ2NvbnRhaW4nO1xyXG4gICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kUmVwZWF0ID0gJ25vLXJlcGVhdCc7XHJcbiAgICAgICAgYnV0dG9uLnN0eWxlLnRyYW5zZm9ybSA9IGBzY2FsZSgke3NpemVCdXR0b24vMTB9KWBcclxuICB9XHJcblxyXG4gICAgYWRkTGlzdGVuZXJzVG9CdXR0b24oXHJcbiAgICAgICAgYnV0dG9uOiBIVE1MQnV0dG9uRWxlbWVudCxcclxuICAgICAgICB1cmw6IHN0cmluZyxcclxuICAgICAgICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSA9IG51bGwsXHJcbiAgICAgICAgZWxlbWVudDogYW55ID0gbnVsbFxyXG4gICAgKSB7XHJcbiAgICAgICAgbGV0IHZpZGVvSnNQbGF5ZXI7XHJcbiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCBhc3luYyAoZXZlbnQpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY29udGVudEZvckJ1dHRvbiA9IHRoaXMuaHRtbENvbnRlbnRUb0luamVjdC5maW5kKFxyXG4gICAgICAgICAgICAgICAgKG9iamVjdCkgPT4gb2JqZWN0LmVsZW1lbnRJRCA9PT0gYnV0dG9uLmlkXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHRoaXMuYnRuVGFnSXNIb3ZlciA9IHRydWU7XHJcbiAgICAgICAgICAgIGNvbnN0IHRpdGxlID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihgI3RpdGxlVGFnRGl2YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50Rm9yQnV0dG9uLnRpdGxlKSB7XHJcbiAgICAgICAgICAgICAgICB0aXRsZS5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZSc7XHJcbiAgICAgICAgICAgICAgICB0aXRsZS5pbm5lckhUTUwgPSBjb250ZW50Rm9yQnV0dG9uLnRpdGxlO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGl0bGUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgY29udGVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYCNodG1sVGFnRGl2YCkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLnRvcCA9IGAke2V2ZW50LmNsaWVudFkgKyAxMH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLmxlZnQgPSBgJHtldmVudC5jbGllbnRYIDwgMTIwID8gMCA6IGV2ZW50LmNsaWVudFggLSAxMjBcclxuICAgICAgICAgICAgICAgIH1weGA7XHJcbiAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhjb250ZW50Rm9yQnV0dG9uLmNvbnRlbnQpO1xyXG4gICAgICAgICAgICBjb250ZW50LmlubmVySFRNTCA9IGNvbnRlbnRGb3JCdXR0b24uY29udGVudDtcclxuICAgICAgICAgICAgY29uc3QgZGV0YWlsQnV0dG9uID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjZGV0YWlsQnRuJyk7XHJcbiAgICAgICAgICAgIGlmIChkZXRhaWxCdXR0b24pIHtcclxuICAgICAgICAgICAgICAgIGRldGFpbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIGltYWdlIGNhcm91c2VsIGZ1bGxzY3JlZW4gYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbnN0IGltYWdlRnVsbHNjcmVlbkJ0biA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignI2ltYWdlLWZvb3RlcicpO1xyXG4gICAgICAgICAgICBpZiAoaW1hZ2VGdWxsc2NyZWVuQnRuKSB7XHJcbiAgICAgICAgICAgICAgICBpbWFnZUZ1bGxzY3JlZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnU2VydmljZS5vbkFjdGlvbkltYWdlQ2xpY2soY29udGVudEZvckJ1dHRvbi5lbGVtZW50SUQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgYm9va2luZyBmdWxsc2NyZWVuIGJ1dHRvblxyXG4gICAgICAgICAgICBjb25zdCBib29raW5nQnV0dG9uID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjYm9va2luZ0J0bicpO1xyXG4gICAgICAgICAgICBpZiAoYm9va2luZ0J1dHRvbikge1xyXG4gICAgICAgICAgICAgICAgYm9va2luZ0J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbdXJsXSk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIGRvY3VtZW50IHBkZiBmdWxsc2NyZWVuIGJ1dHRvblxyXG4gICAgICAgICAgICBjb25zdCBkb2NGdWxsc2NyZWVuQnRuID0gY29udGVudC5xdWVyeVNlbGVjdG9yKCcjZG9jLWZvb3RlcicpO1xyXG4gICAgICAgICAgICBpZiAoZG9jRnVsbHNjcmVlbkJ0biAmJiBlbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb2N1bWVudFVybCA9IHRhZ1NlcnZpY2UuZ2V0QW5uZXhlRm9yQ29tbWVudFR5cGVJbkZlYXR1cmUoXHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudCxcclxuICAgICAgICAgICAgICAgICAgICBDb21tZW50VHlwZS5ET0NVTUVOVFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIGRvY0Z1bGxzY3JlZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnU2VydmljZS5vbkFjdGlvbkRvY0NsaWNrKGRvY3VtZW50VXJsKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgLy8gaGFuZGxlIHZpZGVvIGZ1bGxzY3JlZW4gYnV0dG9uXHJcbiAgICAgICAgICAgIGNvbnN0IHZpZGVvRnVsbHNjcmVlbkJ0biA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcignI2J0bi12aWRlby1mdWxsc2NyZWVuJyk7XHJcbiAgICAgICAgICAgIGlmICh2aWRlb0Z1bGxzY3JlZW5CdG4gJiYgZWxlbWVudCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmlkZW9VcmwgPSB0YWdTZXJ2aWNlLmdldEFubmV4ZUZvckNvbW1lbnRUeXBlSW5GZWF0dXJlKFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgQ29tbWVudFR5cGUuVklERU9cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICB2aWRlb0Z1bGxzY3JlZW5CdG4uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGFnU2VydmljZS5vbkFjdGlvblZpZGVvQ2xpY2sodmlkZW9VcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBoYW5kbGUgWW91dHViZSB2aWRlbyBmdWxsc2NyZWVuIGJ1dHRvblxyXG4gICAgICAgICAgICBjb25zdCB5b3V0dWJlRnVsbFNjcmVlbiA9IGNvbnRlbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAgICAgICAgICcjYnRuLXZpZGVvLWZ1bGxzY3JlZW4teW91dHViZSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKHlvdXR1YmVGdWxsU2NyZWVuICYmIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHlvdXR1YmVVcmwgPSB0YWdTZXJ2aWNlLmdldEFubmV4ZUZvckNvbW1lbnRUeXBlSW5GZWF0dXJlKFxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgQ29tbWVudFR5cGUuWU9VVFVCRVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIHlvdXR1YmVGdWxsU2NyZWVuLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0YWdTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1NlcnZpY2Uub25BY3Rpb25Zb3V0dWJlQ2xpY2soeW91dHViZVVybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBtdXRlIHZpZGVvIGJ1dHRvblxyXG4gICAgICAgICAgICBjb25zdCBidG5NdXRlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bi1tdXRlJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGltZ09uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3NvdW5kLW9uJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGltZ09mZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzb3VuZC1vZmYnKTtcclxuICAgICAgICAgICAgY29uc3QgcGxheWVyRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwibXVzLXZpZGVvLXRhZ1wiKTtcclxuXHJcbiAgICAgICAgICAgIGlmIChwbGF5ZXJFbGVtZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2aWRlb0pzUGxheWVyID0gdmlkZW9qcyhcIm11cy12aWRlby10YWdcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoYnRuTXV0ZSAmJiB2aWRlb0pzUGxheWVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnRuTXV0ZS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvSnNQbGF5ZXIubXV0ZWQoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllci5tdXRlZChmYWxzZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1nT24gJiYgaW1nT2ZmKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nT24uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ09mZi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllci5tdXRlZCh0cnVlKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbWdPbiAmJiBpbWdPZmYpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdPbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ09mZi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgIC8vIGhhbmRsZSBhdWRpbyBwbGF5ZXIgYnV0dG9uc1xyXG4gICAgICAgICAgICBjb25zdCBwbGF5ZXJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXVkaW8tcGxheS1idXR0b24nKTtcclxuICAgICAgICAgICAgY29uc3QgYXVkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYXVkaW8tdGFnJykgYXMgSFRNTE1lZGlhRWxlbWVudDtcclxuICAgICAgICAgICAgY29uc3QgdGltZWxpbmUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICAgICAgICAgJy50aW1lbGluZS10YWcnXHJcbiAgICAgICAgICAgICkgYXMgSFRNTElucHV0RWxlbWVudDtcclxuICAgICAgICAgICAgLy8gY29uc3QgdGltZWxpbmVWYWx1ZSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJy50aW1lbGluZS10YWcnKS52YWx1ZTtcclxuICAgICAgICAgICAgY29uc3Qgc291bmRCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcuYXVkaW8tc291bmQtYnRuJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBsYXlBdWRpbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdwbGF5Jyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHBhdXNlQXVkaW8gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgncGF1c2UnKTtcclxuICAgICAgICAgICAgY29uc3QgaW1nU291bmRPbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdWRpby1zb3VuZC1vbicpO1xyXG4gICAgICAgICAgICBjb25zdCBpbWdTb3VuZE9mZiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhdWRpby1zb3VuZC1vZmYnKTtcclxuICAgICAgICAgICAgY29uc3QgYXVkaW9Nb2RhbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4tYXVkaW8tbW9kYWwnKTtcclxuICAgICAgICAgICAgaWYgKGF1ZGlvICYmIHBsYXllckJ1dHRvbiAmJiB0aW1lbGluZSkge1xyXG4gICAgICAgICAgICAgICAgcGxheWVyQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpby5wYXVzZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8ucGxheSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXVzZUF1ZGlvLnN0eWxlLmRpc3BsYXkgPSAnaW5saW5lLWJsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGxheUF1ZGlvLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgYXVkaW8ucGF1c2UoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcGF1c2VBdWRpby5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGF5QXVkaW8uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgc291bmRCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1ZGlvLm11dGVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLm11dGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZ1NvdW5kT24uc3R5bGUuZGlzcGxheSA9ICdpbmxpbmUtYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWdTb3VuZE9mZi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGF1ZGlvLm11dGVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nU291bmRPbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWdTb3VuZE9mZi5zdHlsZS5kaXNwbGF5ID0gJ2lubGluZS1ibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBjaGFuZ2VUaW1lbGluZVBvc2l0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhdWRpby5kdXJhdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlUG9zaXRpb24gPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEwMCAqIGF1ZGlvLmN1cnJlbnRUaW1lKSAvIGF1ZGlvLmR1cmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwZXJjZW50YWdlUG9zaXRpb25TdHJpbmcgPSBwZXJjZW50YWdlUG9zaXRpb24gKyAnJSc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLnN0eWxlLmJhY2tncm91bmRTaXplID0gcGVyY2VudGFnZVBvc2l0aW9uU3RyaW5nICsgJyAxMDAlJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUudmFsdWUgPSBwZXJjZW50YWdlUG9zaXRpb24udG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBhdWRpby5vbnRpbWV1cGRhdGUgPSBjaGFuZ2VUaW1lbGluZVBvc2l0aW9uO1xyXG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gY2hhbmdlU2VlaygpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB0aW1lID0gKHBhcnNlSW50KHRpbWVsaW5lLnZhbHVlKSAqIGF1ZGlvLmR1cmF0aW9uKSAvIDEwMDtcclxuICAgICAgICAgICAgICAgICAgICBhdWRpby5jdXJyZW50VGltZSA9IHRpbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aW1lbGluZS5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLCBjaGFuZ2VTZWVrKTtcclxuICAgICAgICAgICAgICAgIHRpbWVsaW5lLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JywgY2hhbmdlU2Vlayk7XHJcbiAgICAgICAgICAgICAgICAvLyBoYW5kbGUgYXVkaW8gY2xpY2tcclxuICAgICAgICAgICAgICAgIGlmIChhdWRpb01vZGFsICYmIGVsZW1lbnQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhdWRpb0NvbW1lbnQgPSBlbGVtZW50LmNvbW1lbnRzPy5pdGVtcy5maW5kKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAoY29tKSA9PiBjb20udHlwZSA9PT0gQ29tbWVudFR5cGUuQVVESU8gJiYgY29tLnNob3duSW5UYWdcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGF1ZGlvQ29tbWVudElEID0gYXVkaW9Db21tZW50ID8gYXVkaW9Db21tZW50LmlkIDogJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgYXVkaW9Nb2RhbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhZ1NlcnZpY2UpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhZ1NlcnZpY2Uub25BY3Rpb25BdWRpb0NsaWNrKGF1ZGlvQ29tbWVudElEKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAvLyB3ZSB3YWl0IGlmIHVzZXIgaG92ZXJzIG9uIHRvIGRpdiBvZiB0aGUgdGFnIChjaGFuZ2VzIHRoaXMuZm9jdXNNb3VzZVRhZ0RpdilcclxuICAgICAgICAgICAgdGhpcy5idG5UYWdJc0hvdmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLmZvY3VzTW91c2VUYWdEaXYgJiYgIXRoaXMuYnRuVGFnSXNIb3Zlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGV0YWlsVGFnRGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZpZGVvSnNQbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmlkZW9Kc1BsYXllci5kaXNwb3NlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAxMDApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGFzeW5jICgpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5kZXRhaWxUYWdEaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgaWYgKHZpZGVvSnNQbGF5ZXIpIHtcclxuICAgICAgICAgICAgICAgIHZpZGVvSnNQbGF5ZXIuZGlzcG9zZSgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMudmlld2VyU2VydmljZS5hY3Rpb25fbW92ZV90b190YWcoYnV0dG9uLmlkKTtcclxuICAgICAgICAgICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5kZXRhaWxTaG93aW5nLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBjbGVhckJ0bihpZExpc3Q6IGFueVtdKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpZCBvZiBpZExpc3QpIHtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xyXG4gICAgICAgICAgICBpZiAoYnV0dG9uKSB7XHJcbiAgICAgICAgICAgICAgICBidXR0b24ucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgY2xlYXJBbGxCdXR0b25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnBsYW5EaXZDb250ZW50KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0aGlzLnBsYW5EaXZDb250ZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby1hcnJheS1mb3ItZWFjaFxyXG4gICAgICAgICAgICBidXR0b25zLmZvckVhY2goZnVuY3Rpb24gKGN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy51c2VyUG9zaXRpb25CdG4gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICB1cGRhdGVBbGxCdXR0b25zU3R5bGUocHJvcGVydGllczogQXJyYXk8c3RyaW5nPiwgdmFsdWVzOiBBcnJheTxzdHJpbmc+KSB7XHJcbiAgICAgICAgaWYgKHRoaXMucGxhbkRpdkNvbnRlbnQpIHtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRoaXMucGxhbkRpdkNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnYnV0dG9uJyk7XHJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL25vLWFycmF5LWZvci1lYWNoXHJcbiAgICAgICAgICAgIGJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbiAoY3VycmVudFZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzLmZvckVhY2goKHByb3BlcnR5LCBpKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5ID09PSBcInRyYW5zZm9ybVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vRm9yIHNhdmluZyB0aGUgcm90YXRpb24gYW5kIGFkZGluZyBzY2FsZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcm90YXRpb25SZWdleCA9IC8ocm90YXRlXFwoLT9cXGQqXFwuP1xcZCtkZWdcXCkpL2c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByb3RhdGlvbk1hdGNoID0gY3VycmVudFZhbHVlLnN0eWxlW3Byb3BlcnR5XS5tYXRjaChyb3RhdGlvblJlZ2V4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdGF0aW9uTWF0Y2gubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlLnN0eWxlW3Byb3BlcnR5XSA9IGAke3ZhbHVlc1tpXX0gJHtyb3RhdGlvbk1hdGNoWzBdfWA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUuc3R5bGVbcHJvcGVydHldID0gdmFsdWVzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIG9uUGxhblJlbW92ZSgpIHtcclxuICAgICAgICB0aGlzLnVzZXJQb3NpdGlvbkJ0biA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuY3VycmVudFN3ZWVwID0gbnVsbDtcclxuICAgICAgICB0aGlzLmRldGFpbFRhZ0RpdiA9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVzaXplUGxhbihpc1JlbW92aW5nOiBib29sZWFuKSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVQbGFuU3Vic2NyaXB0aW9uLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIGlmIChpc1JlbW92aW5nKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc29sZS5sb2coJ2luIHJlc2l6ZVBsYW4nKTtcclxuICAgICAgICBpZiAodGhpcy5wbGFuRGl2ICYmIHRoaXMuY3VycmVudFN3ZWVwKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGFuem9vbSA9IHBhbnpvb20odGhpcy5wbGFuRGl2LCB7XHJcbiAgICAgICAgICAgICAgICBib3VuZHM6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBib3VuZHNQYWRkaW5nOiAwLFxyXG4gICAgICAgICAgICAgICAgbWF4Wm9vbTogNCxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgcmVjdCA9IHtcclxuICAgICAgICAgICAgICAgICAgICB3aWR0aDogdGhpcy5wbGFuRGl2Q29udGVudC5vZmZzZXRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHRoaXMucGxhbkRpdkNvbnRlbnQub2Zmc2V0SGVpZ2h0LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHsgY29lZmZYLCBjb2VmZlkgfSA9IGdldENvZWZmaWNpZW50c0ZvckltYWdlKHRoaXMuaW1nUGxhbiwgcmVjdCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblggPSBjb2VmZlg7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgPSBjb2VmZlk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnBhbnpvb20uem9vbUFicygwLCAwLCA0KTtcclxuICAgICAgICAgICAgICAgIHRoaXMucmVzaXplUGxhblN1YnNjcmlwdGlvbi5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICB9LCAyMDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVUb3VjaChldmVudCkge1xyXG4gICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XHJcbiAgICAgICAgaWYgKG5vdyAtIHRoaXMubGFzdFRvdWNoVGltZSA8IHRoaXMuZGVsYXlEYmxUb3VjaCkge1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RUb3VjaFRpbWUgPSAwO1xyXG4gICAgICAgICAgICAvLyB0aGlzLm9uRGJsQ2xpY2tQbGFuKGV2ZW50KTtcclxuICAgICAgICAgICAgLyoqIFNpbXVsYXRlIGEgZGJsY2xpY2sgZm9yIHBob25lICh3ZSBkb24ndCBnZXQgb2Zmc2V0WC9ZIG9uIHRvdWNoZXZlbnQpICovXHJcbiAgICAgICAgICAgIGNvbnN0IG5ld0V2ZW50ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRvdWNoID0gZXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07XHJcbiAgICAgICAgICAgIG5ld0V2ZW50LmluaXRNb3VzZUV2ZW50KFxyXG4gICAgICAgICAgICAgICAgJ2RibGNsaWNrJyxcclxuICAgICAgICAgICAgICAgIHRydWUsXHJcbiAgICAgICAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgICAgICAgZXZlbnQudGFyZ2V0Lm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcsXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgdG91Y2guc2NyZWVuWCxcclxuICAgICAgICAgICAgICAgIHRvdWNoLnNjcmVlblksXHJcbiAgICAgICAgICAgICAgICB0b3VjaC5jbGllbnRYLFxyXG4gICAgICAgICAgICAgICAgdG91Y2guY2xpZW50WSxcclxuICAgICAgICAgICAgICAgIGV2ZW50LmN0cmxLZXksXHJcbiAgICAgICAgICAgICAgICBldmVudC5hbHRLZXksXHJcbiAgICAgICAgICAgICAgICBldmVudC5zaGlydEtleSxcclxuICAgICAgICAgICAgICAgIGV2ZW50Lm1ldGFLZXksXHJcbiAgICAgICAgICAgICAgICAwLFxyXG4gICAgICAgICAgICAgICAgbnVsbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBldmVudC50YXJnZXQuZGlzcGF0Y2hFdmVudChuZXdFdmVudCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5sYXN0VG91Y2hUaW1lID0gbm93O1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBvbkRibENsaWNrUGxhbihldmVudCkge1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgY29uc3QgY2xpY2tYID0gZXZlbnQub2Zmc2V0WDtcclxuICAgICAgICBjb25zdCBjbGlja1kgPSBldmVudC5vZmZzZXRZO1xyXG4gICAgICAgIGNvbnN0IHpvbmVQbGFuID0gdGhpcy5jdXJyZW50UGxhbi56b25lO1xyXG4gICAgICAgIGlmICh6b25lUGxhbikge1xyXG4gICAgICAgICAgICBjb25zdCBuYXZpZ2F0aW9uczogYW55ID1cclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubmF2aWdhdGlvblNlcnZpY2UuZ2V0TmF2aWdhdGlvbnNGb3Jab25lKHpvbmVQbGFuKTtcclxuICAgICAgICAgICAgaWYgKG5hdmlnYXRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zLm1hcChhc3luYyAobmF2KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0gSlNPTi5wYXJzZShuYXYucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeDogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgeTogbnVtYmVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5jYWxpYnJhdGlvblBsYW4ubmV3KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbjJEID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybVBvc2l0aW9uM0RGb3JOZXdDYWxpYnJhdGlvbihwb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID0gcG9zaXRpb24yRC54IC8gcG9zaXRpb24yRC5jb2VmZlg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gcG9zaXRpb24yRC55IC8gcG9zaXRpb24yRC5jb2VmZlk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB4ID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WCArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uLnggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi54KSAvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2VmZlBsYW5YO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeSA9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFkgK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbi56ICogdGhpcy5jYWxpYnJhdGlvblBsYW4ueSkgL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdFggPSBNYXRoLmFicyhjbGlja1ggLSB4KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGlzdFkgPSBNYXRoLmFicyhjbGlja1kgLSB5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmF2LmRpc3QgPSBNYXRoLnNxcnQoTWF0aC5wb3coZGlzdFgsIDIpICsgTWF0aC5wb3coZGlzdFksIDIpKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgIG5hdmlnYXRpb25zLnNvcnQoKGEsIGIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYS5kaXN0IC0gYi5kaXN0O1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnBvcnRTZXJ2aWNlLmFjdGlvbl9nb190b19zd2VlcChcclxuICAgICAgICAgICAgICAgICAgICBuYXZpZ2F0aW9uc1swXS5tYXR0ZXJwb3J0U3dlZXBJRFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbmZpZ3VyZXMgcGxhbiBmcm9tIGNhY2hlIChwcmV2aW91cyBwbGFuKS5cclxuICAgICAqL1xyXG4gICAgYXN5bmMgdXBsb2FkUGxhbkZyb21DYWNoZSgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICB0aGlzLmh0bWxDb250ZW50VG9JbmplY3QgPSB0aGlzLmNhY2hlLmh0bWxDb250ZW50O1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29uZmlndXJlUGxhbih0aGlzLmNhY2hlLnBsYW4pO1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFB1dHMgYnV0dG9ucyAodGFncykgZnJvbSBjYWNoZSBhY2NvcmRpbmcgdG8gcGFzc2VkIGVsZW1lbnQgSURzIChmb3IgZmlsdGVyIGlmIGFueSlcclxuICAgICAqIEBwYXJhbSBlbGVtZW50SURzIGVsZW1lbnRzICh0aWNrZXRzLCBlcXVpcG1lbnRzLCBldGMpIHRvIGJlIHNob3duIG9uIHBsYW5cclxuICAgICAqL1xyXG4gICAgdXBsb2FkVGFnc0Zyb21DYWNoZShzaXplQnV0dG9uOiBudW1iZXIgPSAxMCkge1xyXG4gICAgICAgIC8vIGNvbnNvbGUubG9nKFwidXBsb2FkaW5nIHRhZ3MgZnJvbSBjYWNoZVwiKTtcclxuXHJcbiAgICAgICAgZm9yIChjb25zdCBjYWNoZWQgb2YgdGhpcy5jYWNoZS5odG1sQ29udGVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBidXR0b24gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTtcclxuICAgICAgICAgICAgdGhpcy5zdHlsZUJ1dHRvbihidXR0b24sIGNhY2hlZC50YWdJY29uLCBzaXplQnV0dG9uKTtcclxuICAgICAgICAgICAgYnV0dG9uLmlkID0gY2FjaGVkLmVsZW1lbnRJRDtcclxuICAgICAgICAgICAgdGhpcy5wbGFuRGl2Q29udGVudC5hcHBlbmQoYnV0dG9uKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2FsaWJyYXRpb25QbGFuLm5ldykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmV3Q29lZmZYID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvZWZmUGxhblggL1xyXG4gICAgICAgICAgICAgICAgICAgICh0aGlzLmltZ1BsYW4ud2lkdGggLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5pbWdXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdDb2VmZlkgPVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWSAvXHJcbiAgICAgICAgICAgICAgICAgICAgKHRoaXMuaW1nUGxhbi5oZWlnaHQgLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5pbWdIZWlnaHQpO1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uLnN0eWxlLnRvcCA9IGAke2NhY2hlZC55IC8gbmV3Q29lZmZZIC0gNX1weGA7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUubGVmdCA9IGAke2NhY2hlZC54IC8gbmV3Q29lZmZYIC0gNX1weGA7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBidXR0b24uc3R5bGUudG9wID0gYCR7Y2FjaGVkLnkgLyB0aGlzLmNvZWZmUGxhblkgLSA1fXB4YDtcclxuICAgICAgICAgICAgICAgIGJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y2FjaGVkLnggLyB0aGlzLmNvZWZmUGxhblggLSA1fXB4YDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5hZGRMaXN0ZW5lcnNUb0J1dHRvbihidXR0b24sIGNhY2hlZC51cmwpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRDYWxpYnJhdGVkUGxhbkZvclpvbmUoem9uZTogWm9uZSk6IFByb21pc2U8UGxhbj4ge1xyXG4gICAgICAgIGxldCBwbGFucyA9IChhd2FpdCB0aGlzLkFQSS5QbGFuc0J5Wm9uZSh6b25lLmlkKSkuaXRlbXM7XHJcbiAgICAgICAgbGV0IHBhcmVudFpvbmUgPSBudWxsO1xyXG4gICAgICAgIGlmIChwbGFucy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgLy8gdHJ5IHRvIGZpbmQgcGFyZW50IHpvbmVcclxuICAgICAgICAgICAgcGFyZW50Wm9uZSA9IGF3YWl0IHRoaXMuQVBJLkdldFpvbmUoem9uZS5wYXJlbnRJRCk7XHJcbiAgICAgICAgICAgIHBsYW5zID0gKGF3YWl0IHRoaXMuQVBJLlBsYW5zQnlab25lKHpvbmUucGFyZW50SUQpKS5pdGVtcztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgY2FsaWJyYXRlZFBsYW4gPSBwbGFucy5maW5kKFxyXG4gICAgICAgICAgICAocGxhbikgPT4gcGxhbi5jYWxpYnJhdGlvbiAmJiBwbGFuLmlzQ3VycmVudEZvclpvbmVcclxuICAgICAgICApIGFzIFBsYW47XHJcbiAgICAgICAgaWYgKGNhbGlicmF0ZWRQbGFuKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNpZ25lZCA9IGF3YWl0IGdldFNpZ25lZEZpbGUoY2FsaWJyYXRlZFBsYW4uYW5uZXhlKTtcclxuICAgICAgICAgICAgaWYgKHNpZ25lZCkge1xyXG4gICAgICAgICAgICAgICAgY2FsaWJyYXRlZFBsYW4uZmlsZXBhdGggPSBzaWduZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY2FsaWJyYXRlZFBsYW4ubmF2aWdhdGlvbklEcyA9IHBhcmVudFpvbmVcclxuICAgICAgICAgICAgICAgID8gcGFyZW50Wm9uZS5zd2VlcElEc1xyXG4gICAgICAgICAgICAgICAgOiB6b25lLnN3ZWVwSURzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gY2FsaWJyYXRlZFBsYW4gfHwgbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0cmFuc2Zvcm1Qb3NpdGlvbjNERm9yTmV3Q2FsaWJyYXRpb24ocG9zaXRpb246IHtcclxuICAgICAgICB4OiBudW1iZXI7XHJcbiAgICAgICAgeTogbnVtYmVyO1xyXG4gICAgICAgIHo6IG51bWJlcjtcclxuICAgIH0pOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyBjb2VmZlg6IG51bWJlcjsgY29lZmZZOiBudW1iZXI7IH0ge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uWCA9XHJcbiAgICAgICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm5hbWVYQXhpcyA9PT0gJ3gnID8gcG9zaXRpb24ueCA6IHBvc2l0aW9uLno7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb25ZID1cclxuICAgICAgICAgICAgdGhpcy5jYWxpYnJhdGlvblBsYW4ubmFtZVlBeGlzID09PSAneCcgPyBwb3NpdGlvbi54IDogcG9zaXRpb24uejtcclxuICAgICAgICBsZXQgeCA9XHJcbiAgICAgICAgICAgIHRoaXMuY2FsaWJyYXRpb25QbGFuLm9mZnNldFggKyBwb3NpdGlvblggKiB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVg7XHJcbiAgICAgICAgbGV0IHkgPVxyXG4gICAgICAgICAgICB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZICsgcG9zaXRpb25ZICogdGhpcy5jYWxpYnJhdGlvblBsYW4uc2NhbGVZO1xyXG4gICAgICAgIGNvbnN0IG5ld0NvZWZmWCA9XHJcbiAgICAgICAgICAgIHRoaXMuY29lZmZQbGFuWCAvICh0aGlzLmltZ1BsYW4ud2lkdGggLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5pbWdXaWR0aCk7XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coXCJuZXdDb2VmZlhcIiwgbmV3Q29lZmZYKTtcclxuICAgICAgICBjb25zdCBuZXdDb2VmZlkgPVxyXG4gICAgICAgICAgICB0aGlzLmNvZWZmUGxhblkgLyAodGhpcy5pbWdQbGFuLmhlaWdodCAvIHRoaXMuY2FsaWJyYXRpb25QbGFuLmltZ0hlaWdodCk7XHJcbiAgICAgICAgeCA9ICh4IC0gdGhpcy5jYWxpYnJhdGlvblBsYW4ub2Zmc2V0WFBsYW4pIC8gdGhpcy5jYWxpYnJhdGlvblBsYW4uc2NhbGVQbGFuO1xyXG5cclxuICAgICAgICB5ID0gKHkgLSB0aGlzLmNhbGlicmF0aW9uUGxhbi5vZmZzZXRZUGxhbikgLyB0aGlzLmNhbGlicmF0aW9uUGxhbi5zY2FsZVBsYW47XHJcbiAgICAgICAgLy8gY29uc29sZS5sb2coeCwgeSk7XHJcblxyXG4gICAgICAgIHJldHVybiB7IHgsIHksIGNvZWZmWDogbmV3Q29lZmZYLCBjb2VmZlk6IG5ld0NvZWZmWSB9O1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
@@ -5,7 +5,7 @@ import { removeNullKeysFromObject } from '../../helpers.service';
5
5
  import * as i0 from "@angular/core";
6
6
  import * as i1 from "../user.service";
7
7
  import * as i2 from "../zoneChange.service";
8
- class PoiService {
8
+ export class PoiService {
9
9
  userService;
10
10
  zoneChangeService;
11
11
  API; //AWS APIService
@@ -91,20 +91,19 @@ class PoiService {
91
91
  this.destroy$.next(true);
92
92
  this.destroy$.complete();
93
93
  }
94
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiService, deps: [{ token: 'currentAPIService' }, { token: 'currentAwsKinesisAnalyticsService' }, { token: i1.BaseUserService }, { token: i2.ZoneChangeService }], target: i0.ɵɵFactoryTarget.Injectable });
95
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiService, providedIn: 'root' });
94
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PoiService, deps: [{ token: 'currentAPIService' }, { token: 'currentAwsKinesisAnalyticsService' }, { token: i1.BaseUserService }, { token: i2.ZoneChangeService }], target: i0.ɵɵFactoryTarget.Injectable });
95
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PoiService, providedIn: 'root' });
96
96
  }
97
- export { PoiService };
98
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiService, decorators: [{
97
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: PoiService, decorators: [{
99
98
  type: Injectable,
100
99
  args: [{
101
100
  providedIn: 'root',
102
101
  }]
103
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
102
+ }], ctorParameters: () => [{ type: undefined, decorators: [{
104
103
  type: Inject,
105
104
  args: ['currentAPIService']
106
105
  }] }, { type: undefined, decorators: [{
107
106
  type: Inject,
108
107
  args: ['currentAwsKinesisAnalyticsService']
109
- }] }, { type: i1.BaseUserService }, { type: i2.ZoneChangeService }]; } });
110
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9wb2kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLE9BQU8sRUFBWSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUMsd0JBQXdCLEVBQVksTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUsxRSxNQUdhLFVBQVU7SUFlWDtJQUNBO0lBZlYsR0FBRyxDQUFNLENBQUMsZ0JBQWdCO0lBQzFCLG1CQUFtQixDQUFNLENBQUMsS0FBSztJQUMvQixhQUFhLEdBQVMsSUFBSSxDQUFDO0lBRTNCLGNBQWMsQ0FBUztJQUV2QixZQUFZLENBQVM7SUFFYixRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUVqQyxZQUMrQixXQUFnQixFQUUzQywyQkFBZ0MsRUFDMUIsV0FBNEIsRUFDNUIsaUJBQW9DLENBQUMsa0ZBQWtGOztRQUR2SCxnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsc0JBQWlCLEdBQWpCLGlCQUFpQixDQUFtQjtRQUU1QyxJQUFJLENBQUMsR0FBRyxHQUFHLFdBQVcsQ0FBQztRQUN2QixJQUFJLENBQUMsbUJBQW1CLEdBQUcsMkJBQTJCLENBQUM7UUFFdkQsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNuRCxJQUFJLENBQUMsSUFBSSxFQUFFO2dCQUNULE9BQU87YUFDUjtZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO2FBQ3BD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QUE4QixDQUNsQyxLQUFhLEVBQ2IsSUFBYTtRQUViLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTO2FBQ3RCLFFBQVEsQ0FBQyxFQUFDLGlCQUFpQixFQUFFLEVBQUMsRUFBRSxFQUFFLEtBQUssRUFBQyxFQUFDLEVBQUUsR0FBRyxDQUFDO2FBQy9DLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0F4R1UsVUFBVSxrQkFZWCxtQkFBbUIsYUFDbkIsbUNBQW1DOzRHQWJsQyxVQUFVLGNBRlQsTUFBTTs7U0FFUCxVQUFVOzRGQUFWLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFhSSxNQUFNOzJCQUFDLG1CQUFtQjs7MEJBQzFCLE1BQU07MkJBQUMsbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgY2xhc3MtbWV0aG9kcy11c2UtdGhpcyAqL1xyXG5pbXBvcnQge0luamVjdCwgSW5qZWN0YWJsZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7U3ViamVjdCwgdGFrZVVudGlsfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtyZW1vdmVOdWxsS2V5c0Zyb21PYmplY3QsIHdhaXRVbnRpbH0gZnJvbSAnLi4vLi4vaGVscGVycy5zZXJ2aWNlJztcclxuaW1wb3J0IHtQT0ksIFBvaVR5cGUsIFpvbmV9IGZyb20gJy4uLy4uL3R5cGVzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1pvbmVDaGFuZ2VTZXJ2aWNlfSBmcm9tICcuLi96b25lQ2hhbmdlLnNlcnZpY2UnO1xyXG5pbXBvcnQge0Jhc2VVc2VyU2VydmljZX0gZnJvbSAnLi4vdXNlci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb2lTZXJ2aWNlIHtcclxuICBBUEk6IGFueTsgLy9BV1MgQVBJU2VydmljZVxyXG4gIGF3c0tpbmVzaXNBbmFseXRpY3M6IGFueTsgLy9BV1NcclxuICBzZWxlY3RlZEZsb29yOiBab25lID0gbnVsbDtcclxuXHJcbiAgY3VycmVudFNwYWNlSUQ6IHN0cmluZztcclxuXHJcbiAgem9uZUlERmlsdGVyOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgZGVzdHJveSQgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBUElTZXJ2aWNlJykgYXBpSW5qZWN0ZWQ6IGFueSxcclxuICAgIEBJbmplY3QoJ2N1cnJlbnRBd3NLaW5lc2lzQW5hbHl0aWNzU2VydmljZScpXHJcbiAgICAgIGF3c0tpbmVzaXNBbmFseXRpY3NJbmplY3RlZDogYW55LFxyXG4gICAgcHJpdmF0ZSB1c2VyU2VydmljZTogQmFzZVVzZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB6b25lQ2hhbmdlU2VydmljZTogWm9uZUNoYW5nZVNlcnZpY2UgLy8gaW5qZWN0IFpvbmVDaGFuZ2VTZXJ2aWNlIGluc3RlYWQgb2YgTmF2aWdhdG9yU2VydmljZSB0byBmaXggY2lyY3VsYXIgZGVwZW5kYW5jeVxyXG4gICkge1xyXG4gICAgdGhpcy5BUEkgPSBhcGlJbmplY3RlZDtcclxuICAgIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcyA9IGF3c0tpbmVzaXNBbmFseXRpY3NJbmplY3RlZDtcclxuXHJcbiAgICB0aGlzLnpvbmVDaGFuZ2VTZXJ2aWNlLnpvbmVDaGFuZ2Uuc3Vic2NyaWJlKCh6b25lKSA9PiB7XHJcbiAgICAgIGlmICghem9uZSkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoem9uZS5zcGFjZUlEKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50U3BhY2VJRCA9IHpvbmUuc3BhY2VJRDtcclxuICAgICAgfVxyXG4gICAgICBpZiAoIXRoaXMuY3VycmVudFNwYWNlSUQpIHtcclxuICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IG51bGw7XHJcbiAgICAgIH0gZWxzZSBpZiAoem9uZS5pZCAhPT0gdGhpcy56b25lSURGaWx0ZXIpIHtcclxuICAgICAgICB0aGlzLnpvbmVJREZpbHRlciA9IHpvbmUuaWQ7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2UuZmxvb3JIYXNDaGFuZ2VkLnN1YnNjcmliZSgoZmxvb3IpID0+IHtcclxuICAgICAgaWYgKGZsb29yKSB7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZEZsb29yID0gZmxvb3I7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UG9pQnlFbGVtZW50SWQoZWxlbWVudElkOiBzdHJpbmcpOiBQcm9taXNlPFBPSSB8IG51bGw+IHtcclxuICAgIGNvbnN0IHBvaXMgPSBhd2FpdCB0aGlzLkFQSS5fX3Byb3RvX18uUG9pc0J5RWxlbWVudChlbGVtZW50SWQpO1xyXG4gICAgaWYgKHBvaXMgJiYgcG9pcy5pdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgIHJldHVybiBwb2lzLml0ZW1zWzBdO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRQb2lzQnlUeXBlKHR5cGU6IFBvaVR5cGUpOiBQcm9taXNlPFtQT0ldIHwgYW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlBvaXNCeVR5cGUodHlwZSkudGhlbigocG9pcykgPT4gcG9pcy5pdGVtcyk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBjcmVhdGVQT0lGb3JTcGFjZUlEKHBvaTogUE9JKTogUHJvbWlzZTxQT0k+IHtcclxuICAgIHJlbW92ZU51bGxLZXlzRnJvbU9iamVjdChwb2kpO1xyXG4gICAgaWYgKCEhdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzICYmICEhdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLnJlY29yZCAmJiB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkKCkpIHtcclxuICAgICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzLmdldEluc3RhbmNlKCkucmVjb3JkKFxyXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcclxuICAgICAgICB7XHJcbiAgICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGV2ZW50VHlwZTogJ09iamVjdCBDcmVhdGlvbicsXHJcbiAgICAgICAgICAgIG9iamVjdFR5cGU6ICdwb2knLFxyXG4gICAgICAgICAgICBwb2k6IHBvaSxcclxuICAgICAgICAgICAgdXNlcjogdGhpcy51c2VyU2VydmljZS5jdSxcclxuICAgICAgICAgICAgdGltZXN0YW1wOiBuZXcgRGF0ZSgpLFxyXG4gICAgICAgICAgICBmbG9vcklkOiB0aGlzLnNlbGVjdGVkRmxvb3I/LmlkLFxyXG4gICAgICAgICAgICBsb2NhdGlvbklkOiB0aGlzLmN1cnJlbnRTcGFjZUlELFxyXG4gICAgICAgICAgICB6b25lSWQ6IHRoaXMuem9uZUlERmlsdGVyLFxyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIHN0cmVhbU5hbWU6ICdzbWFydGVycGxhbktpbmVzaXMtYW5hbHl0aWNzJyxcclxuICAgICAgICAgIC8vIHBhcnRpdGlvbktleTogXCJcIixcclxuICAgICAgICB9LFxyXG4gICAgICAgICdBV1NLaW5lc2lzJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5DcmVhdGVQT0kocG9pKTtcclxuICB9XHJcblxyXG4gIHBvaUlzVmlydHVhbChwb2k6IFBPSSk6IGJvb2xlYW4ge1xyXG4gICAgY29uc3Qge2Nvb3JkaW5hdGV9ID0gcG9pO1xyXG4gICAgcmV0dXJuICFjb29yZGluYXRlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlUG9pKHBvaToge30pOiBQcm9taXNlPFBPST4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5VcGRhdGVQT0kocG9pKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRlbGV0ZVBvaShwb2lJRDogc3RyaW5nKTogUHJvbWlzZTxQT0k+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uRGVsZXRlUE9JKHtpZDogcG9pSUR9KTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFBvaXNCeU1hdHRlcnBvcnRTd2VlcEJ5VHlwZShcclxuICAgIHN3ZWVwOiBzdHJpbmcsXHJcbiAgICB0eXBlOiBQb2lUeXBlXHJcbiAgKTogUHJvbWlzZTxQT0lbXT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fX1xyXG4gICAgICAuTGlzdFBPSXMoe21hdHRlcnBvcnRTd2VlcElEOiB7ZXE6IHN3ZWVwfX0sIDMwMClcclxuICAgICAgLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5pdGVtcy5maWx0ZXIoKHBvaSkgPT4gcG9pLnR5cGUgPT09IHR5cGUpKTtcclxuICB9XHJcblxyXG4gIHVuc3Vic2NyaWJlKCkge1xyXG4gICAgdGhpcy5kZXN0cm95JC5uZXh0KHRydWUpO1xyXG4gICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xyXG4gIH1cclxufVxyXG4iXX0=
108
+ }] }, { type: i1.BaseUserService }, { type: i2.ZoneChangeService }] });
109
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9pLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL21vZGVscy9wb2kuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsT0FBTyxFQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDakQsT0FBTyxFQUFDLE9BQU8sRUFBWSxNQUFNLE1BQU0sQ0FBQztBQUN4QyxPQUFPLEVBQUMsd0JBQXdCLEVBQVksTUFBTSx1QkFBdUIsQ0FBQzs7OztBQVExRSxNQUFNLE9BQU8sVUFBVTtJQWVYO0lBQ0E7SUFmVixHQUFHLENBQU0sQ0FBQyxnQkFBZ0I7SUFDMUIsbUJBQW1CLENBQU0sQ0FBQyxLQUFLO0lBQy9CLGFBQWEsR0FBUyxJQUFJLENBQUM7SUFFM0IsY0FBYyxDQUFTO0lBRXZCLFlBQVksQ0FBUztJQUViLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBRWpDLFlBQytCLFdBQWdCLEVBRTNDLDJCQUFnQyxFQUMxQixXQUE0QixFQUM1QixpQkFBb0MsQ0FBQyxrRkFBa0Y7O1FBRHZILGdCQUFXLEdBQVgsV0FBVyxDQUFpQjtRQUM1QixzQkFBaUIsR0FBakIsaUJBQWlCLENBQW1CO1FBRTVDLElBQUksQ0FBQyxHQUFHLEdBQUcsV0FBVyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxtQkFBbUIsR0FBRywyQkFBMkIsQ0FBQztRQUV2RCxJQUFJLENBQUMsaUJBQWlCLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ25ELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDVixPQUFPO1lBQ1QsQ0FBQztZQUNELElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUNqQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUks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QyxTQUFTLENBQUMsRUFBQyxFQUFFLEVBQUUsS0FBSyxFQUFDLENBQUMsQ0FBQztJQUNuRCxDQUFDO0lBRUQsS0FBSyxDQUFDLDhCQUE4QixDQUNsQyxLQUFhLEVBQ2IsSUFBYTtRQUViLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTO2FBQ3RCLFFBQVEsQ0FBQyxFQUFDLGlCQUFpQixFQUFFLEVBQUMsRUFBRSxFQUFFLEtBQUssRUFBQyxFQUFDLEVBQUUsR0FBRyxDQUFDO2FBQy9DLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRUQsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0IsQ0FBQzt3R0F4R1UsVUFBVSxrQkFZWCxtQkFBbUIsYUFDbkIsbUNBQW1DOzRHQWJsQyxVQUFVLGNBRlQsTUFBTTs7NEZBRVAsVUFBVTtrQkFIdEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWFJLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQyxtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtTdWJqZWN0LCB0YWtlVW50aWx9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge3JlbW92ZU51bGxLZXlzRnJvbU9iamVjdCwgd2FpdFVudGlsfSBmcm9tICcuLi8uLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1BPSSwgUG9pVHlwZSwgWm9uZX0gZnJvbSAnLi4vLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7Wm9uZUNoYW5nZVNlcnZpY2V9IGZyb20gJy4uL3pvbmVDaGFuZ2Uuc2VydmljZSc7XHJcbmltcG9ydCB7QmFzZVVzZXJTZXJ2aWNlfSBmcm9tICcuLi91c2VyLnNlcnZpY2UnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290JyxcclxufSlcclxuZXhwb3J0IGNsYXNzIFBvaVNlcnZpY2Uge1xyXG4gIEFQSTogYW55OyAvL0FXUyBBUElTZXJ2aWNlXHJcbiAgYXdzS2luZXNpc0FuYWx5dGljczogYW55OyAvL0FXU1xyXG4gIHNlbGVjdGVkRmxvb3I6IFpvbmUgPSBudWxsO1xyXG5cclxuICBjdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICB6b25lSURGaWx0ZXI6IHN0cmluZztcclxuXHJcbiAgcHJpdmF0ZSBkZXN0cm95JCA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnY3VycmVudEFQSVNlcnZpY2UnKSBhcGlJbmplY3RlZDogYW55LFxyXG4gICAgQEluamVjdCgnY3VycmVudEF3c0tpbmVzaXNBbmFseXRpY3NTZXJ2aWNlJylcclxuICAgICAgYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkOiBhbnksXHJcbiAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHpvbmVDaGFuZ2VTZXJ2aWNlOiBab25lQ2hhbmdlU2VydmljZSAvLyBpbmplY3QgWm9uZUNoYW5nZVNlcnZpY2UgaW5zdGVhZCBvZiBOYXZpZ2F0b3JTZXJ2aWNlIHRvIGZpeCBjaXJjdWxhciBkZXBlbmRhbmN5XHJcbiAgKSB7XHJcbiAgICB0aGlzLkFQSSA9IGFwaUluamVjdGVkO1xyXG4gICAgdGhpcy5hd3NLaW5lc2lzQW5hbHl0aWNzID0gYXdzS2luZXNpc0FuYWx5dGljc0luamVjdGVkO1xyXG5cclxuICAgIHRoaXMuem9uZUNoYW5nZVNlcnZpY2Uuem9uZUNoYW5nZS5zdWJzY3JpYmUoKHpvbmUpID0+IHtcclxuICAgICAgaWYgKCF6b25lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICh6b25lLnNwYWNlSUQpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnRTcGFjZUlEID0gem9uZS5zcGFjZUlEO1xyXG4gICAgICB9XHJcbiAgICAgIGlmICghdGhpcy5jdXJyZW50U3BhY2VJRCkge1xyXG4gICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gbnVsbDtcclxuICAgICAgfSBlbHNlIGlmICh6b25lLmlkICE9PSB0aGlzLnpvbmVJREZpbHRlcikge1xyXG4gICAgICAgIHRoaXMuem9uZUlERmlsdGVyID0gem9uZS5pZDtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy56b25lQ2hhbmdlU2VydmljZS5mbG9vckhhc0NoYW5nZWQuc3Vic2NyaWJlKChmbG9vcikgPT4ge1xyXG4gICAgICBpZiAoZmxvb3IpIHtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRmxvb3IgPSBmbG9vcjtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBnZXRQb2lCeUVsZW1lbnRJZChlbGVtZW50SWQ6IHN0cmluZyk6IFByb21pc2U8UE9JIHwgbnVsbD4ge1xyXG4gICAgY29uc3QgcG9pcyA9IGF3YWl0IHRoaXMuQVBJLl9fcHJvdG9fXy5Qb2lzQnlFbGVtZW50KGVsZW1lbnRJZCk7XHJcbiAgICBpZiAocG9pcyAmJiBwb2lzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgcmV0dXJuIHBvaXMuaXRlbXNbMF07XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGdldFBvaXNCeVR5cGUodHlwZTogUG9pVHlwZSk6IFByb21pc2U8W1BPSV0gfCBhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLkFQSS5fX3Byb3RvX18uUG9pc0J5VHlwZSh0eXBlKS50aGVuKChwb2lzKSA9PiBwb2lzLml0ZW1zKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGNyZWF0ZVBPSUZvclNwYWNlSUQocG9pOiBQT0kpOiBQcm9taXNlPFBPST4ge1xyXG4gICAgcmVtb3ZlTnVsbEtleXNGcm9tT2JqZWN0KHBvaSk7XHJcbiAgICBpZiAoISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MgJiYgISF0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MucmVjb3JkICYmIHRoaXMuYXdzS2luZXNpc0FuYWx5dGljcy5yZWNvcmQoKSkge1xyXG4gICAgICB0aGlzLmF3c0tpbmVzaXNBbmFseXRpY3MuZ2V0SW5zdGFuY2UoKS5yZWNvcmQoXHJcbiAgICAgICAgLy8gQHRzLWlnbm9yZVxyXG4gICAgICAgIHtcclxuICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgZXZlbnRUeXBlOiAnT2JqZWN0IENyZWF0aW9uJyxcclxuICAgICAgICAgICAgb2JqZWN0VHlwZTogJ3BvaScsXHJcbiAgICAgICAgICAgIHBvaTogcG9pLFxyXG4gICAgICAgICAgICB1c2VyOiB0aGlzLnVzZXJTZXJ2aWNlLmN1LFxyXG4gICAgICAgICAgICB0aW1lc3RhbXA6IG5ldyBEYXRlKCksXHJcbiAgICAgICAgICAgIGZsb29ySWQ6IHRoaXMuc2VsZWN0ZWRGbG9vcj8uaWQsXHJcbiAgICAgICAgICAgIGxvY2F0aW9uSWQ6IHRoaXMuY3VycmVudFNwYWNlSUQsXHJcbiAgICAgICAgICAgIHpvbmVJZDogdGhpcy56b25lSURGaWx0ZXIsXHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgc3RyZWFtTmFtZTogJ3NtYXJ0ZXJwbGFuS2luZXNpcy1hbmFseXRpY3MnLFxyXG4gICAgICAgICAgLy8gcGFydGl0aW9uS2V5OiBcIlwiLFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ0FXU0tpbmVzaXMnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLkNyZWF0ZVBPSShwb2kpO1xyXG4gIH1cclxuXHJcbiAgcG9pSXNWaXJ0dWFsKHBvaTogUE9JKTogYm9vbGVhbiB7XHJcbiAgICBjb25zdCB7Y29vcmRpbmF0ZX0gPSBwb2k7XHJcbiAgICByZXR1cm4gIWNvb3JkaW5hdGU7XHJcbiAgfVxyXG5cclxuICBhc3luYyB1cGRhdGVQb2kocG9pOiB7fSk6IFByb21pc2U8UE9JPiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fLlVwZGF0ZVBPSShwb2kpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGVsZXRlUG9pKHBvaUlEOiBzdHJpbmcpOiBQcm9taXNlPFBPST4ge1xyXG4gICAgcmV0dXJuIHRoaXMuQVBJLl9fcHJvdG9fXy5EZWxldGVQT0koe2lkOiBwb2lJRH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZ2V0UG9pc0J5TWF0dGVycG9ydFN3ZWVwQnlUeXBlKFxyXG4gICAgc3dlZXA6IHN0cmluZyxcclxuICAgIHR5cGU6IFBvaVR5cGVcclxuICApOiBQcm9taXNlPFBPSVtdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5BUEkuX19wcm90b19fXHJcbiAgICAgIC5MaXN0UE9Jcyh7bWF0dGVycG9ydFN3ZWVwSUQ6IHtlcTogc3dlZXB9fSwgMzAwKVxyXG4gICAgICAudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLml0ZW1zLmZpbHRlcigocG9pKSA9PiBwb2kudHlwZSA9PT0gdHlwZSkpO1xyXG4gIH1cclxuXHJcbiAgdW5zdWJzY3JpYmUoKSB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcbiAgfVxyXG59XHJcbiJdfQ==