@smarterplan/ngx-smarterplan-core 1.2.1 → 1.2.3

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 (31) hide show
  1. package/esm2020/lib/matterport-extensions/hsl-loader/HlsLoader.mjs +68 -0
  2. package/esm2020/lib/matterport-extensions/nest-thermostat/CanvasRenderer.mjs +2 -3
  3. package/esm2020/lib/matterport-extensions/security-camera/SecurityCamera.mjs +44 -54
  4. package/esm2020/lib/matterport-extensions/tv-player/TvPlayer.mjs +98 -0
  5. package/esm2020/lib/matterport-extensions/video-renderer/VideoRenderer.mjs +64 -0
  6. package/esm2020/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.mjs +221 -0
  7. package/esm2020/lib/services/matterport.service.mjs +70 -9
  8. package/esm2020/lib/services/viewer.service.mjs +4 -2
  9. package/esm2020/lib/types.service.mjs +1 -1
  10. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +439 -73
  11. package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  12. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +439 -73
  13. package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
  14. package/lib/matterport-extensions/hsl-loader/HlsLoader.d.ts +26 -0
  15. package/lib/matterport-extensions/hsl-loader/HlsLoader.d.ts.map +1 -0
  16. package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts +1 -2
  17. package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts.map +1 -1
  18. package/lib/matterport-extensions/security-camera/SecurityCamera.d.ts +7 -6
  19. package/lib/matterport-extensions/security-camera/SecurityCamera.d.ts.map +1 -1
  20. package/lib/matterport-extensions/tv-player/TvPlayer.d.ts +26 -0
  21. package/lib/matterport-extensions/tv-player/TvPlayer.d.ts.map +1 -0
  22. package/lib/matterport-extensions/video-renderer/VideoRenderer.d.ts +26 -0
  23. package/lib/matterport-extensions/video-renderer/VideoRenderer.d.ts.map +1 -0
  24. package/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.d.ts +43 -0
  25. package/lib/matterport-extensions/view-frustum-mesh/ViewFrustumMesh.d.ts.map +1 -0
  26. package/lib/services/matterport.service.d.ts +2 -0
  27. package/lib/services/matterport.service.d.ts.map +1 -1
  28. package/lib/services/viewer.service.d.ts.map +1 -1
  29. package/lib/types.service.d.ts +1 -0
  30. package/lib/types.service.d.ts.map +1 -1
  31. package/package.json +1 -1
@@ -0,0 +1,68 @@
1
+ import { SceneComponent } from './../scene-component/SceneComponent';
2
+ // @ts-ignore
3
+ import Hls from 'hls.js';
4
+ export class HlsLoader extends SceneComponent {
5
+ constructor() {
6
+ super(...arguments);
7
+ this.video = null;
8
+ this.texture = null;
9
+ this.hls = null;
10
+ this.inputs = {
11
+ src: './../assets/video/121222-04.mp4',
12
+ enabled: true,
13
+ };
14
+ this.outputs = {
15
+ video: null,
16
+ aspect: 1,
17
+ };
18
+ }
19
+ onInit(videoTexture) {
20
+ this.outputs.video = videoTexture;
21
+ this.outputs.aspect = 720 / 480;
22
+ if (this.inputs.enabled) {
23
+ this.setupStream();
24
+ }
25
+ }
26
+ onInputsUpdated() {
27
+ this.setupStream();
28
+ }
29
+ onDestroy() {
30
+ this.releaseResources();
31
+ }
32
+ createVideoElement() {
33
+ const video = document.createElement('video');
34
+ video.crossOrigin = 'anonymous';
35
+ video.setAttribute('height', '480');
36
+ video.setAttribute('width', '720');
37
+ video.volume = 0.1;
38
+ return video;
39
+ }
40
+ setupStream() {
41
+ this.releaseResources();
42
+ if (this.inputs.enabled) {
43
+ this.video = this.createVideoElement();
44
+ this.hls = new Hls();
45
+ this.hls.loadSource(this.inputs.src);
46
+ this.hls.attachMedia(this.video);
47
+ this.hls.on(Hls.Events.MANIFEST_PARSED, () => {
48
+ this.outputs.video = this.video;
49
+ });
50
+ }
51
+ }
52
+ releaseResources() {
53
+ if (this.hls) {
54
+ this.hls.destroy();
55
+ this.hls = null;
56
+ }
57
+ if (this.texture) {
58
+ this.texture.dispose();
59
+ this.texture = null;
60
+ this.outputs.video = null;
61
+ }
62
+ }
63
+ }
64
+ export const hlsLoaderType = 'mp.hlsLoader';
65
+ export function makeHlsLoader() {
66
+ return new HlsLoader();
67
+ }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSGxzTG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvaHNsLWxvYWRlci9IbHNMb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxxQ0FBcUMsQ0FBQztBQUV0RixhQUFhO0FBQ2IsT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDO0FBWXpCLE1BQU0sT0FBTyxTQUFVLFNBQVEsY0FBYztJQUE3Qzs7UUFDVSxVQUFLLEdBQTRCLElBQUksQ0FBQztRQUN0QyxZQUFPLEdBQXdCLElBQUksQ0FBQztRQUNwQyxRQUFHLEdBQWUsSUFBSSxDQUFDO1FBRXRCLFdBQU0sR0FBVztZQUN4QixHQUFHLEVBQUUsaUNBQWlDO1lBQ3RDLE9BQU8sRUFBRSxJQUFJO1NBQ2QsQ0FBQTtRQUVRLFlBQU8sR0FBRztZQUNqQixLQUFLLEVBQUUsSUFBSTtZQUNYLE1BQU0sRUFBRSxDQUFDO1NBQ0MsQ0FBQztJQXNEZixDQUFDO0lBcERVLE1BQU0sQ0FBQyxZQUEyQjtRQUN6QyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUM7UUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEdBQUcsR0FBRyxHQUFDLEdBQUcsQ0FBQztRQUM5QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztTQUNwQjtJQUNILENBQUM7SUFFUSxlQUFlO1FBRXRCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRVEsU0FBUztRQUNoQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDOUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7UUFDaEMsS0FBSyxDQUFDLFlBQVksQ0FBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbkMsS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUM7UUFDbkIsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRU8sV0FBVztRQUNqQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUV4QixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtnQkFDM0MsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNsQyxDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUVPLGdCQUFnQjtRQUN0QixJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO1NBQ2pCO1FBRUQsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2hCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO1NBQzNCO0lBQ0gsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQztBQUM1QyxNQUFNLFVBQVUsYUFBYTtJQUMzQixPQUFPLElBQUksU0FBUyxFQUFFLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjZW5lQ29tcG9uZW50LCBDb21wb25lbnRPdXRwdXQgfSBmcm9tICcuLy4uL3NjZW5lLWNvbXBvbmVudC9TY2VuZUNvbXBvbmVudCc7XHJcbmltcG9ydCB7IFZpZGVvVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcclxuLy8gQHRzLWlnbm9yZVxyXG5pbXBvcnQgSGxzIGZyb20gJ2hscy5qcyc7XHJcblxyXG50eXBlIElucHV0cyA9IHtcclxuICBzcmM6IHN0cmluZztcclxuICBlbmFibGVkOiBib29sZWFuO1xyXG59O1xyXG5cclxudHlwZSBPdXRwdXRzID0ge1xyXG4gIHZpZGVvOiBIVE1MVmlkZW9FbGVtZW50IHwgbnVsbDtcclxuICBhc3BlY3Q6IG51bWJlcjtcclxufSAmIENvbXBvbmVudE91dHB1dDtcclxuXHJcbmV4cG9ydCBjbGFzcyBIbHNMb2FkZXIgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCB7XHJcbiAgcHJpdmF0ZSB2aWRlbzogSFRNTFZpZGVvRWxlbWVudCB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgdGV4dHVyZTogVmlkZW9UZXh0dXJlIHwgbnVsbCA9IG51bGw7XHJcbiAgcHJpdmF0ZSBobHM6IEhscyB8IG51bGwgPSBudWxsO1xyXG5cclxuICBvdmVycmlkZSBpbnB1dHM6IElucHV0cyA9IHtcclxuICAgIHNyYzogJy4vLi4vYXNzZXRzL3ZpZGVvLzEyMTIyMi0wNC5tcDQnLFxyXG4gICAgZW5hYmxlZDogdHJ1ZSxcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG91dHB1dHMgPSB7XHJcbiAgICB2aWRlbzogbnVsbCxcclxuICAgIGFzcGVjdDogMSxcclxuICB9IGFzIE91dHB1dHM7XHJcblxyXG4gIG92ZXJyaWRlIG9uSW5pdCh2aWRlb1RleHR1cmU/OiBWaWRlb1RleHR1cmUpIHtcclxuICAgIHRoaXMub3V0cHV0cy52aWRlbyA9IHZpZGVvVGV4dHVyZTtcclxuICAgIHRoaXMub3V0cHV0cy5hc3BlY3QgPSA3MjAvNDgwO1xyXG4gICAgaWYgKHRoaXMuaW5wdXRzLmVuYWJsZWQpIHtcclxuICAgICAgdGhpcy5zZXR1cFN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb3ZlcnJpZGUgb25JbnB1dHNVcGRhdGVkKCkge1xyXG5cclxuICAgIHRoaXMuc2V0dXBTdHJlYW0oKTtcclxuICB9XHJcblxyXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcclxuICAgIHRoaXMucmVsZWFzZVJlc291cmNlcygpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVWaWRlb0VsZW1lbnQoKSB7XHJcbiAgICBjb25zdCB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XHJcbiAgICB2aWRlby5jcm9zc09yaWdpbiA9ICdhbm9ueW1vdXMnO1xyXG4gICAgdmlkZW8uc2V0QXR0cmlidXRlKCdoZWlnaHQnLCAnNDgwJyk7XHJcbiAgICB2aWRlby5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywgJzcyMCcpO1xyXG4gICAgdmlkZW8udm9sdW1lID0gMC4xO1xyXG4gICAgcmV0dXJuIHZpZGVvO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzZXR1cFN0cmVhbSgpIHtcclxuICAgIHRoaXMucmVsZWFzZVJlc291cmNlcygpO1xyXG5cclxuICAgIGlmICh0aGlzLmlucHV0cy5lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMudmlkZW8gPSB0aGlzLmNyZWF0ZVZpZGVvRWxlbWVudCgpO1xyXG4gICAgICB0aGlzLmhscyA9IG5ldyBIbHMoKTtcclxuICAgICAgdGhpcy5obHMubG9hZFNvdXJjZSh0aGlzLmlucHV0cy5zcmMpO1xyXG4gICAgICB0aGlzLmhscy5hdHRhY2hNZWRpYSh0aGlzLnZpZGVvKTtcclxuICAgICAgdGhpcy5obHMub24oSGxzLkV2ZW50cy5NQU5JRkVTVF9QQVJTRUQsICgpID0+IHtcclxuICAgICAgICB0aGlzLm91dHB1dHMudmlkZW8gPSB0aGlzLnZpZGVvO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVsZWFzZVJlc291cmNlcygpIHtcclxuICAgIGlmICh0aGlzLmhscykge1xyXG4gICAgICB0aGlzLmhscy5kZXN0cm95KCk7XHJcbiAgICAgIHRoaXMuaGxzID0gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy50ZXh0dXJlKSB7XHJcbiAgICAgIHRoaXMudGV4dHVyZS5kaXNwb3NlKCk7XHJcbiAgICAgIHRoaXMudGV4dHVyZSA9IG51bGw7XHJcbiAgICAgIHRoaXMub3V0cHV0cy52aWRlbyA9IG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgY29uc3QgaGxzTG9hZGVyVHlwZSA9ICdtcC5obHNMb2FkZXInO1xyXG5leHBvcnQgZnVuY3Rpb24gbWFrZUhsc0xvYWRlcigpIHtcclxuICByZXR1cm4gbmV3IEhsc0xvYWRlcigpO1xyXG59XHJcbiJdfQ==
@@ -14,12 +14,11 @@ export class CanvasRenderer extends SceneComponent {
14
14
  repaint: true,
15
15
  };
16
16
  }
17
- onInit(ci) {
17
+ onInit() {
18
18
  // set up canvas 2d context
19
19
  this.canvas = document.createElement('canvas');
20
20
  this.renderContext2D = this.canvas.getContext('2d');
21
21
  this.outputs.texture = new CanvasTexture(this.canvas);
22
- // this.inputs.painter = ci; // FOR TV ONLY
23
22
  this.resize(this.inputs.textureRes);
24
23
  this.repaint();
25
24
  }
@@ -59,4 +58,4 @@ export const canvasRendererType = 'mp.canvasRenderer';
59
58
  export function makeCanvasRenderer() {
60
59
  return new CanvasRenderer();
61
60
  }
62
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FudmFzUmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9uZXN0LXRoZXJtb3N0YXQvQ2FudmFzUmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBcUJ0QyxNQUFNLE9BQU8sY0FBZSxTQUFRLGNBQWM7SUFBbEQ7O1FBSVcsV0FBTSxHQUFXO1lBQ3hCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUscUJBQXFCO1NBQ3hELENBQUE7UUFFUSxZQUFPLEdBQUc7WUFDakIsT0FBTyxFQUFFLElBQUk7U0FDSCxDQUFDO1FBRUosV0FBTSxHQUFHO1lBQ2hCLE9BQU8sRUFBRSxJQUFJO1NBQ0osQ0FBQztJQW9EZCxDQUFDO0lBbERVLE1BQU0sQ0FBQyxFQUFnQjtRQUU5QiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELDJDQUEyQztRQUUzQyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ2pCLENBQUM7SUFFRCw4QkFBOEIsQ0FBQyxFQUFFO1FBQy9CLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRVEsZUFBZSxDQUFDLFNBQWlCO1FBQ3hDLElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUNuRCxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLEVBQUU7WUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsSUFBSSxTQUFTLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQzdDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNoQjtJQUNILENBQUM7SUFFUSxPQUFPLENBQUMsU0FBaUIsRUFBRSxVQUFtQjtRQUNyRCxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7WUFDM0IsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVRLFNBQVM7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFTyxNQUFNLENBQUMsSUFBVTtRQUN2QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQzNCLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFO1lBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsZUFBZSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDeEUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztTQUN6QztJQUNILENBQUM7Q0FFRjtBQU9ELE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHLG1CQUFtQixDQUFDO0FBQ3RELE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBTY2VuZUNvbXBvbmVudCwgQ29tcG9uZW50T3V0cHV0IH0gZnJvbSAnLi4vc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50JztcbmltcG9ydCB0eXBlIHsgVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IENhbnZhc1RleHR1cmUgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSAnLi9QbGFuZVJlbmRlcmVyJztcbmltcG9ydCB7IENhbnZhc0ltYWdlIH0gZnJvbSAnLi9DYW52YXNJbWFnZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVBhaW50ZXIyZCB7XG4gIHBhaW50KGNvbnRleHQyZDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELCBzaXplOiBTaXplKTogdm9pZDtcbn1cblxudHlwZSBJbnB1dHMgPSB7XG4gIHBhaW50ZXI6IElQYWludGVyMmQgfCBudWxsO1xuICB0ZXh0dXJlUmVzOiBTaXplO1xufVxuXG50eXBlIE91dHB1dHMgPSB7XG4gIHRleHR1cmU6IFRleHR1cmUgfCBudWxsO1xufSAmIENvbXBvbmVudE91dHB1dDtcblxudHlwZSBFdmVudHMgPSB7XG4gIHJlcGFpbnQ6IGJvb2xlYW47XG59O1xuXG5leHBvcnQgY2xhc3MgQ2FudmFzUmVuZGVyZXIgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcbiAgcHJpdmF0ZSByZW5kZXJDb250ZXh0MkQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcblxuICBvdmVycmlkZSBpbnB1dHM6IElucHV0cyA9IHtcbiAgICBwYWludGVyOiBudWxsLFxuICAgIHRleHR1cmVSZXM6IHsgdzogMTAyNCwgaDogMTAyNCB9LCAvLyBkaW0gZm9yIHRoZXJtb3N0YXRcbiAgfVxuXG4gIG92ZXJyaWRlIG91dHB1dHMgPSB7XG4gICAgdGV4dHVyZTogbnVsbCxcbiAgfSBhcyBPdXRwdXRzO1xuXG4gIG92ZXJyaWRlIGV2ZW50cyA9IHtcbiAgICByZXBhaW50OiB0cnVlLFxuICB9IGFzIEV2ZW50cztcblxuICBvdmVycmlkZSBvbkluaXQoY2k/OiBDYW52YXNJbWFnZSkge1xuXG4gICAgLy8gc2V0IHVwIGNhbnZhcyAyZCBjb250ZXh0XG4gICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICB0aGlzLnJlbmRlckNvbnRleHQyRCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgdGhpcy5vdXRwdXRzLnRleHR1cmUgPSBuZXcgQ2FudmFzVGV4dHVyZSh0aGlzLmNhbnZhcyk7XG4gICAgLy8gdGhpcy5pbnB1dHMucGFpbnRlciA9IGNpOyAvLyBGT1IgVFYgT05MWVxuXG4gICAgdGhpcy5yZXNpemUodGhpcy5pbnB1dHMudGV4dHVyZVJlcyk7XG4gICAgdGhpcy5yZXBhaW50KCk7XG4gIH1cblxuICBzZXRDYW52YXNOZXN0VGhlcm1vc3RhdFBhaW50ZXIoc2Mpe1xuICAgIHRoaXMuaW5wdXRzLnBhaW50ZXIgPSBzYztcbiAgfVxuXG4gIG92ZXJyaWRlIG9uSW5wdXRzVXBkYXRlZChvbGRJbnB1dHM6IElucHV0cykge1xuICAgIGlmIChvbGRJbnB1dHMudGV4dHVyZVJlcy53ICE9PSB0aGlzLmlucHV0cy50ZXh0dXJlUmVzLncgfHxcbiAgICAgICAgb2xkSW5wdXRzLnRleHR1cmVSZXMuaCAhPT0gdGhpcy5pbnB1dHMudGV4dHVyZVJlcy5oKSB7XG4gICAgICB0aGlzLnJlc2l6ZSh0aGlzLmlucHV0cy50ZXh0dXJlUmVzKTtcbiAgICB9XG5cbiAgICBpZiAob2xkSW5wdXRzLnBhaW50ZXIgIT09IHRoaXMuaW5wdXRzLnBhaW50ZXIpIHtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG9uRXZlbnQoZXZlbnRUeXBlOiBzdHJpbmcsIF9ldmVudERhdGE6IHVua25vd24pIHtcbiAgICBpZiAoZXZlbnRUeXBlID09PSAncmVwYWludCcpIHtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcbiAgICB0aGlzLm91dHB1dHMudGV4dHVyZS5kaXNwb3NlKCk7XG4gICAgdGhpcy5vdXRwdXRzLnRleHR1cmUgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNpemUoc2l6ZTogU2l6ZSkge1xuICAgIHRoaXMuY2FudmFzLndpZHRoID0gc2l6ZS53O1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHNpemUuaDtcbiAgfVxuXG4gIHB1YmxpYyByZXBhaW50KCkge1xuICAgIGlmICh0aGlzLmlucHV0cy5wYWludGVyKSB7XG4gICAgICB0aGlzLmlucHV0cy5wYWludGVyLnBhaW50KHRoaXMucmVuZGVyQ29udGV4dDJELCB0aGlzLmlucHV0cy50ZXh0dXJlUmVzKTtcbiAgICAgIHRoaXMub3V0cHV0cy50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDYW52YXNSZW5kZXJlciBleHRlbmRzIFNjZW5lQ29tcG9uZW50e1xuICBpbnB1dHM6IElucHV0cztcbiAgb3V0cHV0czogT3V0cHV0cztcbn1cblxuZXhwb3J0IGNvbnN0IGNhbnZhc1JlbmRlcmVyVHlwZSA9ICdtcC5jYW52YXNSZW5kZXJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWFrZUNhbnZhc1JlbmRlcmVyKCkge1xuICByZXR1cm4gbmV3IENhbnZhc1JlbmRlcmVyKCk7XG59XG4iXX0=
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ2FudmFzUmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9uZXN0LXRoZXJtb3N0YXQvQ2FudmFzUmVuZGVyZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBbUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUVwRixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBcUJ0QyxNQUFNLE9BQU8sY0FBZSxTQUFRLGNBQWM7SUFBbEQ7O1FBSVcsV0FBTSxHQUFXO1lBQ3hCLE9BQU8sRUFBRSxJQUFJO1lBQ2IsVUFBVSxFQUFFLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUscUJBQXFCO1NBQ3hELENBQUE7UUFFUSxZQUFPLEdBQUc7WUFDakIsT0FBTyxFQUFFLElBQUk7U0FDSCxDQUFDO1FBRUosV0FBTSxHQUFHO1lBQ2hCLE9BQU8sRUFBRSxJQUFJO1NBQ0osQ0FBQztJQW1EZCxDQUFDO0lBakRVLE1BQU07UUFFYiwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXRELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDakIsQ0FBQztJQUVELDhCQUE4QixDQUFDLEVBQUU7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0lBQzNCLENBQUM7SUFFUSxlQUFlLENBQUMsU0FBaUI7UUFDeEMsSUFBSSxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ25ELFNBQVMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRTtZQUN2RCxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7UUFFRCxJQUFJLFNBQVMsQ0FBQyxPQUFPLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDN0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1NBQ2hCO0lBQ0gsQ0FBQztJQUVRLE9BQU8sQ0FBQyxTQUFpQixFQUFFLFVBQW1CO1FBQ3JELElBQUksU0FBUyxLQUFLLFNBQVMsRUFBRTtZQUMzQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDaEI7SUFDSCxDQUFDO0lBRVEsU0FBUztRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVPLE1BQU0sQ0FBQyxJQUFVO1FBQ3ZCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7WUFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN4RSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQ3pDO0lBQ0gsQ0FBQztDQUVGO0FBT0QsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7QUFDdEQsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxPQUFPLElBQUksY0FBYyxFQUFFLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNjZW5lQ29tcG9uZW50LCBDb21wb25lbnRPdXRwdXQgfSBmcm9tICcuLi9zY2VuZS1jb21wb25lbnQvU2NlbmVDb21wb25lbnQnO1xuaW1wb3J0IHR5cGUgeyBUZXh0dXJlIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgQ2FudmFzVGV4dHVyZSB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IFNpemUgfSBmcm9tICcuL1BsYW5lUmVuZGVyZXInO1xuaW1wb3J0IHsgQ2FudmFzSW1hZ2UgfSBmcm9tICcuL0NhbnZhc0ltYWdlJztcblxuZXhwb3J0IGludGVyZmFjZSBJUGFpbnRlcjJkIHtcbiAgcGFpbnQoY29udGV4dDJkOiBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQsIHNpemU6IFNpemUpOiB2b2lkO1xufVxuXG50eXBlIElucHV0cyA9IHtcbiAgcGFpbnRlcjogSVBhaW50ZXIyZCB8IG51bGw7XG4gIHRleHR1cmVSZXM6IFNpemU7XG59XG5cbnR5cGUgT3V0cHV0cyA9IHtcbiAgdGV4dHVyZTogVGV4dHVyZSB8IG51bGw7XG59ICYgQ29tcG9uZW50T3V0cHV0O1xuXG50eXBlIEV2ZW50cyA9IHtcbiAgcmVwYWludDogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCBjbGFzcyBDYW52YXNSZW5kZXJlciBleHRlbmRzIFNjZW5lQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xuICBwcml2YXRlIHJlbmRlckNvbnRleHQyRDogQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEO1xuXG4gIG92ZXJyaWRlIGlucHV0czogSW5wdXRzID0ge1xuICAgIHBhaW50ZXI6IG51bGwsXG4gICAgdGV4dHVyZVJlczogeyB3OiAxMDI0LCBoOiAxMDI0IH0sIC8vIGRpbSBmb3IgdGhlcm1vc3RhdFxuICB9XG5cbiAgb3ZlcnJpZGUgb3V0cHV0cyA9IHtcbiAgICB0ZXh0dXJlOiBudWxsLFxuICB9IGFzIE91dHB1dHM7XG5cbiAgb3ZlcnJpZGUgZXZlbnRzID0ge1xuICAgIHJlcGFpbnQ6IHRydWUsXG4gIH0gYXMgRXZlbnRzO1xuXG4gIG92ZXJyaWRlIG9uSW5pdCgpIHtcblxuICAgIC8vIHNldCB1cCBjYW52YXMgMmQgY29udGV4dFxuICAgIHRoaXMuY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgdGhpcy5yZW5kZXJDb250ZXh0MkQgPSB0aGlzLmNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuICAgIHRoaXMub3V0cHV0cy50ZXh0dXJlID0gbmV3IENhbnZhc1RleHR1cmUodGhpcy5jYW52YXMpO1xuXG4gICAgdGhpcy5yZXNpemUodGhpcy5pbnB1dHMudGV4dHVyZVJlcyk7XG4gICAgdGhpcy5yZXBhaW50KCk7XG4gIH1cblxuICBzZXRDYW52YXNOZXN0VGhlcm1vc3RhdFBhaW50ZXIoc2Mpe1xuICAgIHRoaXMuaW5wdXRzLnBhaW50ZXIgPSBzYztcbiAgfVxuXG4gIG92ZXJyaWRlIG9uSW5wdXRzVXBkYXRlZChvbGRJbnB1dHM6IElucHV0cykge1xuICAgIGlmIChvbGRJbnB1dHMudGV4dHVyZVJlcy53ICE9PSB0aGlzLmlucHV0cy50ZXh0dXJlUmVzLncgfHxcbiAgICAgICAgb2xkSW5wdXRzLnRleHR1cmVSZXMuaCAhPT0gdGhpcy5pbnB1dHMudGV4dHVyZVJlcy5oKSB7XG4gICAgICB0aGlzLnJlc2l6ZSh0aGlzLmlucHV0cy50ZXh0dXJlUmVzKTtcbiAgICB9XG5cbiAgICBpZiAob2xkSW5wdXRzLnBhaW50ZXIgIT09IHRoaXMuaW5wdXRzLnBhaW50ZXIpIHtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG9uRXZlbnQoZXZlbnRUeXBlOiBzdHJpbmcsIF9ldmVudERhdGE6IHVua25vd24pIHtcbiAgICBpZiAoZXZlbnRUeXBlID09PSAncmVwYWludCcpIHtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcbiAgICB0aGlzLm91dHB1dHMudGV4dHVyZS5kaXNwb3NlKCk7XG4gICAgdGhpcy5vdXRwdXRzLnRleHR1cmUgPSBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNpemUoc2l6ZTogU2l6ZSkge1xuICAgIHRoaXMuY2FudmFzLndpZHRoID0gc2l6ZS53O1xuICAgIHRoaXMuY2FudmFzLmhlaWdodCA9IHNpemUuaDtcbiAgfVxuXG4gIHB1YmxpYyByZXBhaW50KCkge1xuICAgIGlmICh0aGlzLmlucHV0cy5wYWludGVyKSB7XG4gICAgICB0aGlzLmlucHV0cy5wYWludGVyLnBhaW50KHRoaXMucmVuZGVyQ29udGV4dDJELCB0aGlzLmlucHV0cy50ZXh0dXJlUmVzKTtcbiAgICAgIHRoaXMub3V0cHV0cy50ZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICB9XG4gIH1cblxufVxuXG5leHBvcnQgaW50ZXJmYWNlIElDYW52YXNSZW5kZXJlciBleHRlbmRzIFNjZW5lQ29tcG9uZW50e1xuICBpbnB1dHM6IElucHV0cztcbiAgb3V0cHV0czogT3V0cHV0cztcbn1cblxuZXhwb3J0IGNvbnN0IGNhbnZhc1JlbmRlcmVyVHlwZSA9ICdtcC5jYW52YXNSZW5kZXJlcic7XG5leHBvcnQgZnVuY3Rpb24gbWFrZUNhbnZhc1JlbmRlcmVyKCkge1xuICByZXR1cm4gbmV3IENhbnZhc1JlbmRlcmVyKCk7XG59XG4iXX0=
@@ -1,10 +1,8 @@
1
- import { Object3D, Mesh, PerspectiveCamera, MeshBasicMaterial, BoxGeometry, ShaderMaterial, EdgesGeometry, AnimationMixer, Color, Matrix4, Vector3, Euler, CylinderBufferGeometry, BackSide, NormalBlending, AdditiveBlending, Quaternion, QuaternionKeyframeTrack, AnimationClip, LoopPingPong } from 'three';
2
- import * as BufferGeometryUtils from 'three/examples/jsm/utils/BufferGeometryUtils.js';
1
+ import { Color, Matrix4, Vector3 } from 'three';
3
2
  import { SceneComponent } from '../scene-component/SceneComponent';
4
3
  export class SecurityCamera extends SceneComponent {
5
4
  constructor() {
6
5
  super(...arguments);
7
- this.rootScene = null;
8
6
  this.root = null;
9
7
  this.pivot = null;
10
8
  this.box = null;
@@ -28,32 +26,20 @@ export class SecurityCamera extends SceneComponent {
28
26
  };
29
27
  this.outputs = {};
30
28
  }
31
- setComponent(component) {
32
- component.onTick = this.onTick.bind(this);
33
- this.component = component;
34
- this.context = component.context;
35
- }
36
- setRootScene(rootScene) {
37
- this.rootScene = rootScene;
38
- }
39
- onInit(modelNode) {
40
- if (!this.context) {
41
- this.context = {
42
- root: modelNode
43
- };
44
- }
45
- this.root = new Object3D();
46
- this.pivot = new Object3D();
29
+ onInit() {
30
+ const THREE = this.context.three;
31
+ this.root = new THREE.Object3D();
32
+ this.pivot = new THREE.Object3D();
47
33
  this.root.add(this.pivot);
48
34
  this.outputs.objectRoot = this.root;
49
35
  this.root.position.set(this.inputs.localPosition.x, this.inputs.localPosition.y, this.inputs.localPosition.z);
50
- const euler = new Euler(this.inputs.localRotation.x * Math.PI / 180, this.inputs.localRotation.y * Math.PI / 180, this.inputs.localRotation.z * Math.PI / 180, 'YXZ');
36
+ const euler = new THREE.Euler(this.inputs.localRotation.x * Math.PI / 180, this.inputs.localRotation.y * Math.PI / 180, this.inputs.localRotation.z * Math.PI / 180, 'YXZ');
51
37
  this.pivot.quaternion.setFromEuler(euler);
52
38
  const aspect = this.inputs.aspect;
53
39
  const DEG2RAD = Math.PI / 180;
54
40
  const RAD2DEG = 1 / DEG2RAD;
55
41
  const verticalFOV = 2 * Math.atan(1 / aspect * Math.tan(0.5 * this.inputs.horizontalFOV * DEG2RAD)) * RAD2DEG;
56
- this.projector = new PerspectiveCamera(verticalFOV, aspect, this.inputs.nearPlane, this.inputs.farPlane);
42
+ this.projector = new THREE.PerspectiveCamera(verticalFOV, aspect, this.inputs.nearPlane, this.inputs.farPlane);
57
43
  // orientation of the projector is handled by the pivot
58
44
  this.pivot.add(this.projector);
59
45
  this.makeFrustumVisuals();
@@ -62,8 +48,7 @@ export class SecurityCamera extends SceneComponent {
62
48
  this.makeHighlight();
63
49
  // attach highighting to the mesh it represents
64
50
  // TODO (scene query): this is very brittle but is the only way to attach something to a room of the model
65
- // this.outputs.objectRoot.parent.parent.add(this.highlight); // legacy matterport code
66
- this.rootScene.add(this.highlight);
51
+ this.outputs.objectRoot.parent.parent.add(this.highlight);
67
52
  // create the animation mixer to rotate the camera
68
53
  this.makeAnimation();
69
54
  }
@@ -88,6 +73,7 @@ export class SecurityCamera extends SceneComponent {
88
73
  }
89
74
  }
90
75
  makeFrustumVisuals() {
76
+ const THREE = this.context.three;
91
77
  if (this.box) {
92
78
  this.root.remove(this.box);
93
79
  this.box.material.dispose();
@@ -106,11 +92,11 @@ export class SecurityCamera extends SceneComponent {
106
92
  const r = thickness / 2;
107
93
  const geoms = [];
108
94
  for (let i = 0; i < count * 3 - 1; i += 6) {
109
- const a = new Vector3(array[i], array[i + 1], array[i + 2]);
110
- const b = new Vector3(array[i + 3], array[i + 4], array[i + 5]);
111
- const vec = new Vector3().subVectors(b, a);
95
+ const a = new THREE.Vector3(array[i], array[i + 1], array[i + 2]);
96
+ const b = new THREE.Vector3(array[i + 3], array[i + 4], array[i + 5]);
97
+ const vec = new THREE.Vector3().subVectors(b, a);
112
98
  const len = vec.length();
113
- const geom = new CylinderBufferGeometry(r, r, len, 8);
99
+ const geom = new THREE.CylinderBufferGeometry(r, r, len, 8);
114
100
  geom.translate(0, len / 2, 0);
115
101
  geom.rotateX(Math.PI / 2);
116
102
  geom.lookAt(vec);
@@ -118,10 +104,10 @@ export class SecurityCamera extends SceneComponent {
118
104
  geoms.push(geom);
119
105
  }
120
106
  // API to be updated in bundle - JSSDK-1222
121
- return BufferGeometryUtils.mergeBufferGeometries(geoms);
107
+ return THREE.mergeBufferGeometries(geoms);
122
108
  }
123
109
  const frustumLength = this.inputs.farPlane - this.inputs.nearPlane;
124
- const boxGeometry = new BoxGeometry(2, 2, frustumLength);
110
+ const boxGeometry = new THREE.BoxGeometry(2, 2, frustumLength);
125
111
  const halfHAngle = this.inputs.horizontalFOV * 0.5 * Math.PI / 180;
126
112
  const nearHalfWidth = Math.tan(halfHAngle) * this.inputs.nearPlane;
127
113
  const farHalfWidth = Math.tan(halfHAngle) * this.inputs.farPlane;
@@ -144,41 +130,41 @@ export class SecurityCamera extends SceneComponent {
144
130
  }
145
131
  positions.setZ(i, vertexZ - 0.5 * frustumLength - this.inputs.nearPlane);
146
132
  }
147
- var boxMaterial = new MeshBasicMaterial({
133
+ var boxMaterial = new THREE.MeshBasicMaterial({
148
134
  color: this.inputs.color,
149
135
  opacity: 0.05,
150
136
  transparent: true,
151
- side: BackSide,
152
- blending: NormalBlending,
137
+ side: THREE.BackSide,
138
+ blending: THREE.NormalBlending,
153
139
  depthWrite: false,
154
140
  });
155
- this.box = new Mesh(boxGeometry, boxMaterial);
156
- const edgesGeometry = edgesToCylinders(new EdgesGeometry(boxGeometry), 0.015);
157
- this.edges = new Mesh(edgesGeometry, new MeshBasicMaterial({
141
+ this.box = new THREE.Mesh(boxGeometry, boxMaterial);
142
+ const edgesGeometry = edgesToCylinders(new THREE.EdgesGeometry(boxGeometry), 0.015);
143
+ this.edges = new THREE.Mesh(edgesGeometry, new THREE.MeshBasicMaterial({
158
144
  color: 0xffffff,
159
145
  opacity: 0.25,
160
146
  transparent: true,
161
- blending: AdditiveBlending,
147
+ blending: THREE.AdditiveBlending,
162
148
  depthWrite: false,
163
149
  }));
164
- const edgesGeometry2 = edgesToCylinders(new EdgesGeometry(boxGeometry), 0.06);
165
- const edges2 = new Mesh(edgesGeometry2, new MeshBasicMaterial({
150
+ const edgesGeometry2 = edgesToCylinders(new THREE.EdgesGeometry(boxGeometry), 0.06);
151
+ const edges2 = new THREE.Mesh(edgesGeometry2, new THREE.MeshBasicMaterial({
166
152
  color: this.inputs.color,
167
153
  opacity: 0.05,
168
154
  transparent: true,
169
- blending: AdditiveBlending,
155
+ blending: THREE.AdditiveBlending,
170
156
  depthWrite: false,
171
157
  }));
172
158
  this.pivot.add(edges2);
173
159
  }
174
160
  makeHighlight() {
161
+ const THREE = this.context.three;
175
162
  // TODO (scene query): this is very brittle and hardcoded but is the only way to get room geometries until we have a better way to query the scene graph
176
- // const floorMesh = this.outputs.objectRoot.parent.parent.getObjectByName('FloorMesh:0'); // legacy matterport code..
177
- const floorMesh = this.rootScene.getObjectByName('FloorMesh:0');
163
+ const floorMesh = this.outputs.objectRoot.parent.parent.getObjectByName('FloorMesh:0');
178
164
  const roomMesh = floorMesh.children[0];
179
165
  updateHighlightUniforms(this.projector, this.highlightUniforms);
180
166
  this.highlightUniforms.color.value.setHex(this.inputs.color);
181
- const shader = new ShaderMaterial({
167
+ const shader = new THREE.ShaderMaterial({
182
168
  polygonOffset: true,
183
169
  polygonOffsetUnits: -0.1,
184
170
  transparent: true,
@@ -187,18 +173,23 @@ export class SecurityCamera extends SceneComponent {
187
173
  fragmentShader: fragmentShader(),
188
174
  });
189
175
  // a mesh to represent the "highlight"
190
- this.highlight = new Mesh(roomMesh.geometry, shader);
176
+ this.highlight = new THREE.Mesh(roomMesh.geometry, shader);
177
+ }
178
+ toggleViewFrustum() {
179
+ this.highlight.visible = !this.highlight.visible;
180
+ this.edges.visible = !this.edges.visible;
181
+ this.pivot.visible = !this.pivot.visible;
191
182
  }
192
183
  makeAnimation() {
184
+ const THREE = this.context.three;
193
185
  // preapply the initial rotation of the root so that panAngle is relative to it.
194
186
  // TODO: fix it!
195
- const rootRotation = this.context.root.quaternion; // legacy matterport code
196
- // const rootRotation = this.root.quaternion;
197
- const yAxis = new Vector3(0, 1, 0);
198
- const frame0 = new Quaternion().setFromAxisAngle(yAxis, 0).premultiply(rootRotation);
199
- const frame1 = new Quaternion().setFromAxisAngle(yAxis, this.inputs.panAngle).premultiply(rootRotation);
187
+ const rootRotation = this.context.root.quaternion;
188
+ const yAxis = new THREE.Vector3(0, 1, 0);
189
+ const frame0 = new THREE.Quaternion().setFromAxisAngle(yAxis, 0).premultiply(rootRotation);
190
+ const frame1 = new THREE.Quaternion().setFromAxisAngle(yAxis, this.inputs.panAngle).premultiply(rootRotation);
200
191
  // a track that has delays at the start and end for 5% of the animation
201
- const track = new QuaternionKeyframeTrack('.quaternion', [
192
+ const track = new THREE.QuaternionKeyframeTrack('.quaternion', [
202
193
  0, this.inputs.panPeriod * 0.05, this.inputs.panPeriod * 0.95, this.inputs.panPeriod
203
194
  ], [
204
195
  frame0.x, frame0.y, frame0.z, frame0.w,
@@ -206,13 +197,12 @@ export class SecurityCamera extends SceneComponent {
206
197
  frame1.x, frame1.y, frame1.z, frame1.w,
207
198
  frame1.x, frame1.y, frame1.z, frame1.w,
208
199
  ]);
209
- const clip = new AnimationClip('panning', this.inputs.panPeriod, [track]);
200
+ const clip = new THREE.AnimationClip('panning', this.inputs.panPeriod, [track]);
210
201
  // There is no api to change the rotation of the root, so we will use a private property to access the Object3D.
211
202
  // This will likely need to change in the future.
212
- this.mixer = new AnimationMixer(this.context.root.obj3D); // legacode code matterport
213
- // this.mixer = new AnimationMixer(this.root);
203
+ this.mixer = new THREE.AnimationMixer(this.context.root.obj3D);
214
204
  const action = this.mixer.clipAction(clip);
215
- action.loop = LoopPingPong;
205
+ action.loop = THREE.LoopPingPong;
216
206
  action.play();
217
207
  }
218
208
  }
@@ -256,4 +246,4 @@ export const securityCameraType = 'mp.securityCamera';
256
246
  export const makeSecurityCamera = function () {
257
247
  return new SecurityCamera();
258
248
  };
259
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlDYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9zZWN1cml0eS1jYW1lcmEvU2VjdXJpdHlDYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFDUixJQUFJLEVBQ0osaUJBQWlCLEVBQ2pCLGlCQUFpQixFQUNqQixXQUFXLEVBQ1gsY0FBYyxFQUVkLGFBQWEsRUFDYixjQUFjLEVBQ2QsS0FBSyxFQUNMLE9BQU8sRUFDUCxPQUFPLEVBQ1AsS0FBSyxFQUNMLHNCQUFzQixFQUN0QixRQUFRLEVBQ1IsY0FBYyxFQUNkLGdCQUFnQixFQUNoQixVQUFVLEVBQ1YsdUJBQXVCLEVBQ3ZCLGFBQWEsRUFDYixZQUFZLEVBQ2IsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEtBQUssbUJBQW1CLE1BQU0saURBQWlELENBQUE7QUFDdEYsT0FBTyxFQUFtQixjQUFjLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQXFCbkYsTUFBTSxPQUFPLGNBQWUsU0FBUSxjQUFjO0lBQWxEOztRQUNVLGNBQVMsR0FBb0IsSUFBSSxDQUFDO1FBQ2xDLFNBQUksR0FBb0IsSUFBSSxDQUFDO1FBQzdCLFVBQUssR0FBb0IsSUFBSSxDQUFDO1FBQzlCLFFBQUcsR0FBZ0IsSUFBSSxDQUFDO1FBQ3hCLFVBQUssR0FBZ0IsSUFBSSxDQUFDO1FBRTFCLGNBQVMsR0FBZ0IsSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFzQjtZQUM3QyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBQztZQUMzQixZQUFZLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBQztZQUNwQyxXQUFXLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUs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QUE4RTtJQUM5RSw0Q0FBNEM7SUFDNUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNsRSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4RyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE9iamVjdDNELFxuICBNZXNoLFxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsXG4gIEJveEdlb21ldHJ5LFxuICBTaGFkZXJNYXRlcmlhbCxcbiAgTGluZUJhc2ljTWF0ZXJpYWwsXG4gIEVkZ2VzR2VvbWV0cnksXG4gIEFuaW1hdGlvbk1peGVyLFxuICBDb2xvcixcbiAgTWF0cml4NCxcbiAgVmVjdG9yMyxcbiAgRXVsZXIsXG4gIEN5bGluZGVyQnVmZmVyR2VvbWV0cnksXG4gIEJhY2tTaWRlLFxuICBOb3JtYWxCbGVuZGluZyxcbiAgQWRkaXRpdmVCbGVuZGluZyxcbiAgUXVhdGVybmlvbixcbiAgUXVhdGVybmlvbktleWZyYW1lVHJhY2ssXG4gIEFuaW1hdGlvbkNsaXAsXG4gIExvb3BQaW5nUG9uZ1xufSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgKiBhcyBCdWZmZXJHZW9tZXRyeVV0aWxzIGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS91dGlscy9CdWZmZXJHZW9tZXRyeVV0aWxzLmpzJ1xuaW1wb3J0IHtDb21wb25lbnRDb250ZXh0LCBTY2VuZUNvbXBvbmVudH0gZnJvbSAnLi4vc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50JztcblxuaW50ZXJmYWNlIElucHV0cyB7XG4gIG5lYXJQbGFuZTogbnVtYmVyO1xuICBmYXJQbGFuZTogbnVtYmVyLFxuICBob3Jpem9udGFsRk9WOiBudW1iZXIsXG4gIGFzcGVjdDogbnVtYmVyLFxuICBsb2NhbFBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IH07XG4gIGxvY2FsUm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcjsgfTtcbiAgY29sb3I6IG51bWJlcjtcbiAgcGFuUGVyaW9kOiBudW1iZXI7XG4gIHBhbkFuZ2xlOiBudW1iZXI7XG59XG5cbnR5cGUgSGlnaGxpZ2h0VW5pZm9ybXMgPSB7XG4gIGNvbG9yOiB7IHZhbHVlOiBDb2xvciB9LFxuICBwcm9qUG9zaXRpb246IHsgdmFsdWU6IFZlY3RvcjMgfTtcbiAgbGlnaHRNYXRyaXg6IHsgdmFsdWU6IE1hdHJpeDQgfTtcbn1cblxuXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlDYW1lcmEgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcm9vdFNjZW5lOiBPYmplY3QzRCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHJvb3Q6IE9iamVjdDNEIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgcGl2b3Q6IE9iamVjdDNEIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgYm94OiBNZXNoIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgZWRnZXM6IE1lc2ggfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwcm9qZWN0b3I6IFBlcnNwZWN0aXZlQ2FtZXJhO1xuICBwcml2YXRlIGhpZ2hsaWdodDogTWVzaCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGhpZ2hsaWdodFVuaWZvcm1zOiBIaWdobGlnaHRVbmlmb3JtcyA9IHtcbiAgICBjb2xvcjoge3ZhbHVlOiBuZXcgQ29sb3IoKX0sXG4gICAgcHJvalBvc2l0aW9uOiB7dmFsdWU6IG5ldyBWZWN0b3IzKCl9LFxuICAgIGxpZ2h0TWF0cml4OiB7dmFsdWU6IG5ldyBNYXRyaXg0KCl9LFxuICB9XG4gIHByaXZhdGUgbWl4ZXI6IEFuaW1hdGlvbk1peGVyO1xuXG4gIG92ZXJyaWRlIGlucHV0czogSW5wdXRzID0ge1xuICAgIG5lYXJQbGFuZTogMC4xLFxuICAgIGZhclBsYW5lOiA0LFxuICAgIGhvcml6b250YWxGT1Y6IDgwLFxuICAgIGFzcGVjdDogMTYgLyA5LFxuICAgIGxvY2FsUG9zaXRpb246IHt4OiAwLCB5OiAwLCB6OiAwfSxcbiAgICBsb2NhbFJvdGF0aW9uOiB7eDogMCwgeTogMCwgejogMH0sXG4gICAgY29sb3I6IDB4ZmZmZmZmLFxuICAgIHBhblBlcmlvZDogMjAsXG4gICAgcGFuQW5nbGU6IDE4MCxcbiAgfTtcblxuICBvdmVycmlkZSBvdXRwdXRzOiBhbnkgPSB7fTtcbiAgcHJpdmF0ZSBjb21wb25lbnQ6IFNjZW5lQ29tcG9uZW50O1xuXG5cbiAgc2V0Q29tcG9uZW50KGNvbXBvbmVudDogU2NlbmVDb21wb25lbnQpIHtcbiAgICBjb21wb25lbnQub25UaWNrID0gdGhpcy5vblRpY2suYmluZCh0aGlzKTtcbiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDtcbiAgICB0aGlzLmNvbnRleHQgPSBjb21wb25lbnQuY29udGV4dDtcbiAgfVxuXG4gIHNldFJvb3RTY2VuZShyb290U2NlbmU6IE9iamVjdDNEKSB7XG4gICAgdGhpcy5yb290U2NlbmUgPSByb290U2NlbmU7XG4gIH1cblxuICBvdmVycmlkZSBvbkluaXQobW9kZWxOb2RlPzogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgcm9vdDogbW9kZWxOb2RlXG4gICAgICB9IGFzIENvbXBvbmVudENvbnRleHQ7XG4gICAgfVxuXG4gICAgdGhpcy5yb290ID0gbmV3IE9iamVjdDNEKCk7XG4gICAgdGhpcy5waXZvdCA9IG5ldyBPYmplY3QzRCgpO1xuICAgIHRoaXMucm9vdC5hZGQodGhpcy5waXZvdCk7XG4gICAgdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QgPSB0aGlzLnJvb3Q7XG5cbiAgICB0aGlzLnJvb3QucG9zaXRpb24uc2V0KHRoaXMuaW5wdXRzLmxvY2FsUG9zaXRpb24ueCwgdGhpcy5pbnB1dHMubG9jYWxQb3NpdGlvbi55LCB0aGlzLmlucHV0cy5sb2NhbFBvc2l0aW9uLnopO1xuXG4gICAgY29uc3QgZXVsZXIgPSBuZXcgRXVsZXIodGhpcy5pbnB1dHMubG9jYWxSb3RhdGlvbi54ICogTWF0aC5QSSAvIDE4MCwgdGhpcy5pbnB1dHMubG9jYWxSb3RhdGlvbi55ICogTWF0aC5QSSAvIDE4MCwgdGhpcy5pbnB1dHMubG9jYWxSb3RhdGlvbi56ICogTWF0aC5QSSAvIDE4MCwgJ1lYWicpO1xuICAgIHRoaXMucGl2b3QucXVhdGVybmlvbi5zZXRGcm9tRXVsZXIoZXVsZXIpO1xuXG4gICAgY29uc3QgYXNwZWN0ID0gdGhpcy5pbnB1dHMuYXNwZWN0O1xuICAgIGNvbnN0IERFRzJSQUQgPSBNYXRoLlBJIC8gMTgwO1xuICAgIGNvbnN0IFJBRDJERUcgPSAxIC8gREVHMlJBRDtcbiAgICBjb25zdCB2ZXJ0aWNhbEZPViA9IDIgKiBNYXRoLmF0YW4oMSAvIGFzcGVjdCAqIE1hdGgudGFuKDAuNSAqIHRoaXMuaW5wdXRzLmhvcml6b250YWxGT1YgKiBERUcyUkFEKSkgKiBSQUQyREVHO1xuICAgIHRoaXMucHJvamVjdG9yID0gbmV3IFBlcnNwZWN0aXZlQ2FtZXJhKHZlcnRpY2FsRk9WLCBhc3BlY3QsIHRoaXMuaW5wdXRzLm5lYXJQbGFuZSwgdGhpcy5pbnB1dHMuZmFyUGxhbmUpO1xuICAgIC8vIG9yaWVudGF0aW9uIG9mIHRoZSBwcm9qZWN0b3IgaXMgaGFuZGxlZCBieSB0aGUgcGl2b3RcbiAgICB0aGlzLnBpdm90LmFkZCh0aGlzLnByb2plY3Rvcik7XG5cbiAgICB0aGlzLm1ha2VGcnVzdHVtVmlzdWFscygpO1xuXG4gICAgdGhpcy5waXZvdC5hZGQodGhpcy5ib3gpO1xuICAgIHRoaXMucGl2b3QuYWRkKHRoaXMuZWRnZXMpO1xuXG4gICAgdGhpcy5tYWtlSGlnaGxpZ2h0KCk7XG5cbiAgICAvLyBhdHRhY2ggaGlnaGlnaHRpbmcgdG8gdGhlIG1lc2ggaXQgcmVwcmVzZW50c1xuICAgIC8vIFRPRE8gKHNjZW5lIHF1ZXJ5KTogdGhpcyBpcyB2ZXJ5IGJyaXR0bGUgYnV0IGlzIHRoZSBvbmx5IHdheSB0byBhdHRhY2ggc29tZXRoaW5nIHRvIGEgcm9vbSBvZiB0aGUgbW9kZWxcbiAgICAvLyB0aGlzLm91dHB1dHMub2JqZWN0Um9vdC5wYXJlbnQucGFyZW50LmFkZCh0aGlzLmhpZ2hsaWdodCk7IC8vIGxlZ2FjeSBtYXR0ZXJwb3J0IGNvZGVcbiAgICB0aGlzLnJvb3RTY2VuZS5hZGQodGhpcy5oaWdobGlnaHQpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBhbmltYXRpb24gbWl4ZXIgdG8gcm90YXRlIHRoZSBjYW1lcmFcbiAgICB0aGlzLm1ha2VBbmltYXRpb24oKTtcbiAgfVxuXG5cbiAgb3ZlcnJpZGUgb25UaWNrKGRlbHRhOiBudW1iZXIpIHtcbiAgICB1cGRhdGVIaWdobGlnaHRVbmlmb3Jtcyh0aGlzLnByb2plY3RvciwgdGhpcy5oaWdobGlnaHRVbmlmb3Jtcyk7XG4gICAgaWYgKHRoaXMubWl4ZXIpIHtcbiAgICAgIHRoaXMubWl4ZXIudXBkYXRlKGRlbHRhIC8gMTAwMCk7XG4gICAgfVxuICB9XG5cbiAgb3ZlcnJpZGUgb25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLmhpZ2hsaWdodCAmJiB0aGlzLmhpZ2hsaWdodC5wYXJlbnQpIHtcbiAgICAgIHRoaXMuaGlnaGxpZ2h0LnBhcmVudC5yZW1vdmUodGhpcy5oaWdobGlnaHQpO1xuICAgICAgKHRoaXMuaGlnaGxpZ2h0Lm1hdGVyaWFsIGFzIFNoYWRlck1hdGVyaWFsKS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkZ2VzKSB7XG4gICAgICB0aGlzLmVkZ2VzLmdlb21ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICh0aGlzLmVkZ2VzLm1hdGVyaWFsIGFzIExpbmVCYXNpY01hdGVyaWFsKS5kaXNwb3NlKCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmJveCkge1xuICAgICAgdGhpcy5ib3guZ2VvbWV0cnkuZGlzcG9zZSgpO1xuICAgICAgKHRoaXMuYm94Lm1hdGVyaWFsIGFzIE1lc2hCYXNpY01hdGVyaWFsKS5kaXNwb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRnJ1c3R1bVZpc3VhbHMoKSB7XG4gICAgaWYgKHRoaXMuYm94KSB7XG4gICAgICB0aGlzLnJvb3QucmVtb3ZlKHRoaXMuYm94KTtcbiAgICAgICh0aGlzLmJveC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xuICAgICAgKHRoaXMuYm94Lmdlb21ldHJ5IGFzIEJveEdlb21ldHJ5KS5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmJveCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkZ2VzKSB7XG4gICAgICB0aGlzLnJvb3QucmVtb3ZlKHRoaXMuZWRnZXMpO1xuICAgICAgKHRoaXMuZWRnZXMubWF0ZXJpYWwgYXMgTGluZUJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcbiAgICAgICh0aGlzLmVkZ2VzLmdlb21ldHJ5IGFzIEVkZ2VzR2VvbWV0cnkpLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuZWRnZXMgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVkZ2VzVG9DeWxpbmRlcnMoZWRnZXNHZW9tZXRyeTogRWRnZXNHZW9tZXRyeSwgdGhpY2tuZXNzOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHtwb3NpdGlvbn0gPSBlZGdlc0dlb21ldHJ5LmF0dHJpYnV0ZXM7XG4gICAgICBjb25zdCB7YXJyYXksIGNvdW50fSA9IHBvc2l0aW9uO1xuICAgICAgY29uc3QgciA9IHRoaWNrbmVzcyAvIDI7XG4gICAgICBjb25zdCBnZW9tcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudCAqIDMgLSAxOyBpICs9IDYpIHtcbiAgICAgICAgY29uc3QgYSA9IG5ldyBWZWN0b3IzKGFycmF5W2ldLCBhcnJheVtpICsgMV0sIGFycmF5W2kgKyAyXSk7XG4gICAgICAgIGNvbnN0IGIgPSBuZXcgVmVjdG9yMyhhcnJheVtpICsgM10sIGFycmF5W2kgKyA0XSwgYXJyYXlbaSArIDVdKTtcblxuICAgICAgICBjb25zdCB2ZWMgPSBuZXcgVmVjdG9yMygpLnN1YlZlY3RvcnMoYiwgYSk7XG4gICAgICAgIGNvbnN0IGxlbiA9IHZlYy5sZW5ndGgoKTtcbiAgICAgICAgY29uc3QgZ2VvbSA9IG5ldyBDeWxpbmRlckJ1ZmZlckdlb21ldHJ5KHIsIHIsIGxlbiwgOCk7XG4gICAgICAgIGdlb20udHJhbnNsYXRlKDAsIGxlbiAvIDIsIDApO1xuICAgICAgICBnZW9tLnJvdGF0ZVgoTWF0aC5QSSAvIDIpO1xuICAgICAgICBnZW9tLmxvb2tBdCh2ZWMpO1xuICAgICAgICBnZW9tLnRyYW5zbGF0ZShhLngsIGEueSwgYS56KTtcbiAgICAgICAgZ2VvbXMucHVzaChnZW9tKTtcbiAgICAgIH1cbiAgICAgIC8vIEFQSSB0byBiZSB1cGRhdGVkIGluIGJ1bmRsZSAtIEpTU0RLLTEyMjJcbiAgICAgIHJldHVybiBCdWZmZXJHZW9tZXRyeVV0aWxzLm1lcmdlQnVmZmVyR2VvbWV0cmllcyhnZW9tcyk7XG4gICAgfVxuXG4gICAgY29uc3QgZnJ1c3R1bUxlbmd0aCA9IHRoaXMuaW5wdXRzLmZhclBsYW5lIC0gdGhpcy5pbnB1dHMubmVhclBsYW5lO1xuICAgIGNvbnN0IGJveEdlb21ldHJ5OiBCb3hHZW9tZXRyeSA9IG5ldyBCb3hHZW9tZXRyeSgyLCAyLCBmcnVzdHVtTGVuZ3RoKTtcbiAgICBjb25zdCBoYWxmSEFuZ2xlID0gdGhpcy5pbnB1dHMuaG9yaXpvbnRhbEZPViAqIDAuNSAqIE1hdGguUEkgLyAxODA7XG4gICAgY29uc3QgbmVhckhhbGZXaWR0aCA9IE1hdGgudGFuKGhhbGZIQW5nbGUpICogdGhpcy5pbnB1dHMubmVhclBsYW5lO1xuICAgIGNvbnN0IGZhckhhbGZXaWR0aCA9IE1hdGgudGFuKGhhbGZIQW5nbGUpICogdGhpcy5pbnB1dHMuZmFyUGxhbmU7XG4gICAgY29uc3QgbmVhckhhbGZIZWlnaHQgPSBuZWFySGFsZldpZHRoIC8gdGhpcy5pbnB1dHMuYXNwZWN0O1xuICAgIGNvbnN0IGZhckhhbGZIZWlnaHQgPSBmYXJIYWxmV2lkdGggLyB0aGlzLmlucHV0cy5hc3BlY3Q7XG5cbiAgICBjb25zdCBwb3NpdGlvbnMgPSBib3hHZW9tZXRyeS5nZXRBdHRyaWJ1dGUoJ3Bvc2l0aW9uJyk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBvc2l0aW9ucy5jb3VudDsgaSsrKSB7XG4gICAgICBjb25zdCB2ZXJ0ZXhaID0gcG9zaXRpb25zLmdldFooaSk7XG4gICAgICBjb25zdCB2ZXJ0ZXhYID0gcG9zaXRpb25zLmdldFgoaSk7XG4gICAgICBjb25zdCB2ZXJ0ZXhZID0gcG9zaXRpb25zLmdldFkoaSk7XG4gICAgICBpZiAodmVydGV4WiA+IDApIHtcbiAgICAgICAgLy8gYmFjayBvZiB0aGUgY2FtZXJhXG4gICAgICAgIHBvc2l0aW9ucy5zZXRYKGksIHZlcnRleFggKiBuZWFySGFsZldpZHRoKVxuICAgICAgICBwb3NpdGlvbnMuc2V0WShpLCB2ZXJ0ZXhZICogbmVhckhhbGZIZWlnaHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZnJvbnQgb2YgdGhlIGNhbWVyYVxuICAgICAgICBwb3NpdGlvbnMuc2V0WChpLCB2ZXJ0ZXhYICogZmFySGFsZldpZHRoKVxuICAgICAgICBwb3NpdGlvbnMuc2V0WShpLCB2ZXJ0ZXhZICogZmFySGFsZkhlaWdodCk7XG4gICAgICB9XG4gICAgICBwb3NpdGlvbnMuc2V0WihpLCB2ZXJ0ZXhaIC0gMC41ICogZnJ1c3R1bUxlbmd0aCAtIHRoaXMuaW5wdXRzLm5lYXJQbGFuZSk7XG4gICAgfVxuXG4gICAgdmFyIGJveE1hdGVyaWFsOiBNZXNoQmFzaWNNYXRlcmlhbCA9IG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogdGhpcy5pbnB1dHMuY29sb3IsXG4gICAgICBvcGFjaXR5OiAwLjA1LFxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICBzaWRlOiBCYWNrU2lkZSxcbiAgICAgIGJsZW5kaW5nOiBOb3JtYWxCbGVuZGluZyxcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxuICAgIH0pO1xuICAgIHRoaXMuYm94ID0gbmV3IE1lc2goYm94R2VvbWV0cnksIGJveE1hdGVyaWFsKTtcbiAgICBjb25zdCBlZGdlc0dlb21ldHJ5ID0gZWRnZXNUb0N5bGluZGVycyhuZXcgRWRnZXNHZW9tZXRyeShib3hHZW9tZXRyeSksIDAuMDE1KTtcbiAgICB0aGlzLmVkZ2VzID0gbmV3IE1lc2goZWRnZXNHZW9tZXRyeSwgbmV3IE1lc2hCYXNpY01hdGVyaWFsKHtcbiAgICAgIGNvbG9yOiAweGZmZmZmZixcbiAgICAgIG9wYWNpdHk6IDAuMjUsXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgIGJsZW5kaW5nOiBBZGRpdGl2ZUJsZW5kaW5nLFxuICAgICAgZGVwdGhXcml0ZTogZmFsc2UsXG4gICAgfSkpO1xuXG4gICAgY29uc3QgZWRnZXNHZW9tZXRyeTIgPSBlZGdlc1RvQ3lsaW5kZXJzKG5ldyBFZGdlc0dlb21ldHJ5KGJveEdlb21ldHJ5KSwgMC4wNik7XG4gICAgY29uc3QgZWRnZXMyID0gbmV3IE1lc2goZWRnZXNHZW9tZXRyeTIsIG5ldyBNZXNoQmFzaWNNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogdGhpcy5pbnB1dHMuY29sb3IsXG4gICAgICBvcGFjaXR5OiAwLjA1LFxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICBibGVuZGluZzogQWRkaXRpdmVCbGVuZGluZyxcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxuICAgIH0pKTtcbiAgICB0aGlzLnBpdm90LmFkZChlZGdlczIpO1xuICB9XG5cbiAgcHJpdmF0ZSBtYWtlSGlnaGxpZ2h0KCkge1xuXG4gICAgLy8gVE9ETyAoc2NlbmUgcXVlcnkpOiB0aGlzIGlzIHZlcnkgYnJpdHRsZSBhbmQgaGFyZGNvZGVkIGJ1dCBpcyB0aGUgb25seSB3YXkgdG8gZ2V0IHJvb20gZ2VvbWV0cmllcyB1bnRpbCB3ZSBoYXZlIGEgYmV0dGVyIHdheSB0byBxdWVyeSB0aGUgc2NlbmUgZ3JhcGhcbiAgICAvLyBjb25zdCBmbG9vck1lc2ggPSB0aGlzLm91dHB1dHMub2JqZWN0Um9vdC5wYXJlbnQucGFyZW50LmdldE9iamVjdEJ5TmFtZSgnRmxvb3JNZXNoOjAnKTsgLy8gbGVnYWN5IG1hdHRlcnBvcnQgY29kZS4uXG4gICAgY29uc3QgZmxvb3JNZXNoID0gdGhpcy5yb290U2NlbmUuZ2V0T2JqZWN0QnlOYW1lKCdGbG9vck1lc2g6MCcpO1xuICAgIGNvbnN0IHJvb21NZXNoID0gZmxvb3JNZXNoLmNoaWxkcmVuWzBdIGFzIE1lc2g7XG5cbiAgICB1cGRhdGVIaWdobGlnaHRVbmlmb3Jtcyh0aGlzLnByb2plY3RvciwgdGhpcy5oaWdobGlnaHRVbmlmb3Jtcyk7XG4gICAgdGhpcy5oaWdobGlnaHRVbmlmb3Jtcy5jb2xvci52YWx1ZS5zZXRIZXgodGhpcy5pbnB1dHMuY29sb3IpO1xuXG4gICAgY29uc3Qgc2hhZGVyID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcbiAgICAgIHBvbHlnb25PZmZzZXQ6IHRydWUsXG4gICAgICBwb2x5Z29uT2Zmc2V0VW5pdHM6IC0wLjEsXG4gICAgICB0cmFuc3BhcmVudDogdHJ1ZSxcbiAgICAgIHVuaWZvcm1zOiB0aGlzLmhpZ2hsaWdodFVuaWZvcm1zLFxuICAgICAgdmVydGV4U2hhZGVyOiB2ZXJ0ZXhTaGFkZXIoKSxcbiAgICAgIGZyYWdtZW50U2hhZGVyOiBmcmFnbWVudFNoYWRlcigpLFxuICAgIH0pO1xuXG4gICAgLy8gYSBtZXNoIHRvIHJlcHJlc2VudCB0aGUgXCJoaWdobGlnaHRcIlxuICAgIHRoaXMuaGlnaGxpZ2h0ID0gbmV3IE1lc2gocm9vbU1lc2guZ2VvbWV0cnksIHNoYWRlcik7XG5cblxuICB9XG5cbiAgcHJpdmF0ZSBtYWtlQW5pbWF0aW9uKCkge1xuXG4gICAgLy8gcHJlYXBwbHkgdGhlIGluaXRpYWwgcm90YXRpb24gb2YgdGhlIHJvb3Qgc28gdGhhdCBwYW5BbmdsZSBpcyByZWxhdGl2ZSB0byBpdC5cblxuICAgIC8vIFRPRE86IGZpeCBpdCFcbiAgICBjb25zdCByb290Um90YXRpb24gPSB0aGlzLmNvbnRleHQucm9vdC5xdWF0ZXJuaW9uOyAvLyBsZWdhY3kgbWF0dGVycG9ydCBjb2RlXG4gICAgLy8gY29uc3Qgcm9vdFJvdGF0aW9uID0gdGhpcy5yb290LnF1YXRlcm5pb247XG5cbiAgICBjb25zdCB5QXhpcyA9IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xuICAgIGNvbnN0IGZyYW1lMCA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZSh5QXhpcywgMCkucHJlbXVsdGlwbHkocm9vdFJvdGF0aW9uKTtcbiAgICBjb25zdCBmcmFtZTEgPSBuZXcgUXVhdGVybmlvbigpLnNldEZyb21BeGlzQW5nbGUoeUF4aXMsIHRoaXMuaW5wdXRzLnBhbkFuZ2xlKS5wcmVtdWx0aXBseShyb290Um90YXRpb24pO1xuXG4gICAgLy8gYSB0cmFjayB0aGF0IGhhcyBkZWxheXMgYXQgdGhlIHN0YXJ0IGFuZCBlbmQgZm9yIDUlIG9mIHRoZSBhbmltYXRpb25cbiAgICBjb25zdCB0cmFjayA9IG5ldyBRdWF0ZXJuaW9uS2V5ZnJhbWVUcmFjaygnLnF1YXRlcm5pb24nLCBbXG4gICAgICAwLCB0aGlzLmlucHV0cy5wYW5QZXJpb2QgKiAwLjA1LCB0aGlzLmlucHV0cy5wYW5QZXJpb2QgKiAwLjk1LCB0aGlzLmlucHV0cy5wYW5QZXJpb2RcbiAgICBdLCBbXG4gICAgICBmcmFtZTAueCwgZnJhbWUwLnksIGZyYW1lMC56LCBmcmFtZTAudyxcbiAgICAgIGZyYW1lMC54LCBmcmFtZTAueSwgZnJhbWUwLnosIGZyYW1lMC53LFxuICAgICAgZnJhbWUxLngsIGZyYW1lMS55LCBmcmFtZTEueiwgZnJhbWUxLncsXG4gICAgICBmcmFtZTEueCwgZnJhbWUxLnksIGZyYW1lMS56LCBmcmFtZTEudyxcbiAgICBdKTtcblxuICAgIGNvbnN0IGNsaXAgPSBuZXcgQW5pbWF0aW9uQ2xpcCgncGFubmluZycsIHRoaXMuaW5wdXRzLnBhblBlcmlvZCwgW3RyYWNrXSk7XG5cbiAgICAvLyBUaGVyZSBpcyBubyBhcGkgdG8gY2hhbmdlIHRoZSByb3RhdGlvbiBvZiB0aGUgcm9vdCwgc28gd2Ugd2lsbCB1c2UgYSBwcml2YXRlIHByb3BlcnR5IHRvIGFjY2VzcyB0aGUgT2JqZWN0M0QuXG4gICAgLy8gVGhpcyB3aWxsIGxpa2VseSBuZWVkIHRvIGNoYW5nZSBpbiB0aGUgZnV0dXJlLlxuICAgIHRoaXMubWl4ZXIgPSBuZXcgQW5pbWF0aW9uTWl4ZXIoKHRoaXMuY29udGV4dC5yb290IGFzIGFueSkub2JqM0QpOyAvLyBsZWdhY29kZSBjb2RlIG1hdHRlcnBvcnRcbiAgICAvLyB0aGlzLm1peGVyID0gbmV3IEFuaW1hdGlvbk1peGVyKHRoaXMucm9vdCk7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5taXhlci5jbGlwQWN0aW9uKGNsaXApO1xuICAgIGFjdGlvbi5sb29wID0gTG9vcFBpbmdQb25nO1xuICAgIGFjdGlvbi5wbGF5KCk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiB2ZXJ0ZXhTaGFkZXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIG1hdDQgbGlnaHRNYXRyaXg7XG5cbiAgICB2YXJ5aW5nIHZlYzQgdkxpZ2h0Q29vcmRzO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgLy8gY3JlYXRlIGEgVVYgcmVnaW9uIFswLDFdIHggWzAsMV0gdG8gcmVwcmVzZW50IHdoYXQgdGhlIGxpZ2h0TWF0cml4IFwic2Vlc1wiXG4gICAgICB2TGlnaHRDb29yZHMgPSBsaWdodE1hdHJpeCAqICBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZnJhZ21lbnRTaGFkZXIoKSB7XG4gIHJldHVybiBgXG4gICAgdW5pZm9ybSB2ZWMzIGNvbG9yO1xuXG4gICAgdmFyeWluZyB2ZWM0IHZMaWdodENvb3JkcztcblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIHZlYzIgbGlnaHRVViA9IHZMaWdodENvb3Jkcy54eSAvIHZMaWdodENvb3Jkcy53O1xuICAgICAgZmxvYXQgaW5WaWV3ID0gZmxvYXQobWF4KGxpZ2h0VVYueCwgbGlnaHRVVi55KSA8PSAxLjAgJiYgbWluKGxpZ2h0VVYueCwgbGlnaHRVVi55KSA+PSAwLjAgJiYgdkxpZ2h0Q29vcmRzLnogPiAwLjApO1xuXG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBtaW4oaW5WaWV3LCAwLjIpKTtcbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhpZ2hsaWdodFVuaWZvcm1zKHByb2plY3RvcjogUGVyc3BlY3RpdmVDYW1lcmEsIHVuaWZvcm1zOiBIaWdobGlnaHRVbmlmb3Jtcykge1xuICBwcm9qZWN0b3IuZ2V0V29ybGRQb3NpdGlvbih1bmlmb3Jtcy5wcm9qUG9zaXRpb24udmFsdWUpO1xuXG4gIC8vIHNpbWlsYXIgdG8gYSBzaGFkb3cgbWF0cml4LCBidXQgd2UncmUgdXNpbmcgaXQgYXMgYSBcInJlY3Rhbmd1bGFyXCIgc3BvdGxpZ2h0XG4gIC8vIFtsaWdodEJpYXNdICogW3Byb2plY3Rpb25dICogW3ZpZXdNYXRyaXhdXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLm1ha2VTY2FsZSgwLjUsIDAuNSwgMC41KTtcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUuc2V0UG9zaXRpb24obmV3IFZlY3RvcjMoMC41LCAwLjUsIDAuNSkpXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLm11bHRpcGx5TWF0cmljZXModW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUsIHByb2plY3Rvci5wcm9qZWN0aW9uTWF0cml4KTtcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUubXVsdGlwbHlNYXRyaWNlcyh1bmlmb3Jtcy5saWdodE1hdHJpeC52YWx1ZSwgcHJvamVjdG9yLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG59XG5cbmV4cG9ydCBjb25zdCBzZWN1cml0eUNhbWVyYVR5cGUgPSAnbXAuc2VjdXJpdHlDYW1lcmEnO1xuZXhwb3J0IGNvbnN0IG1ha2VTZWN1cml0eUNhbWVyYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBTZWN1cml0eUNhbWVyYSgpO1xufVxuIl19
249
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2VjdXJpdHlDYW1lcmEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9zZWN1cml0eS1jYW1lcmEvU2VjdXJpdHlDYW1lcmEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUdXLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUN4QyxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxjQUFjLEVBQWEsTUFBTSxtQ0FBbUMsQ0FBQztBQTJCN0UsTUFBTSxPQUFPLGNBQWUsU0FBUSxjQUFjO0lBQWxEOztRQUNVLFNBQUksR0FBb0IsSUFBSSxDQUFDO1FBQzdCLFVBQUssR0FBb0IsSUFBSSxDQUFDO1FBQzlCLFFBQUcsR0FBZ0IsSUFBSSxDQUFDO1FBQ3hCLFVBQUssR0FBZ0IsSUFBSSxDQUFDO1FBRTFCLGNBQVMsR0FBZ0IsSUFBSSxDQUFDO1FBQzlCLHNCQUFpQixHQUFzQjtZQUM3QyxLQUFLLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxLQUFLLEVBQUUsRUFBQztZQUMzQixZQUFZLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBQztZQUNwQyxXQUFXLEVBQUUsRUFBQyxLQUFLLEVBQUUsSUFBSSxPQUFPLEVBQUUsRUFBQztTQUNwQyxDQUFBO1FBR1EsV0FBTSxHQUFXO1lBQ3hCLFNBQVMsRUFBRSxHQUFHO1lBQ2QsUUFBUSxFQUFFLENBQUM7WUFDWCxhQUFhLEVBQUUsRUFBRTtZQUNqQixNQUFNLEVBQUUsRUFBRSxHQUFHLENBQUM7WUFDZCxhQUFhLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBQztZQUNqQyxhQUFhLEVBQUUsRUFBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFB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RUQsU0FBUyx1QkFBdUIsQ0FBQyxTQUE0QixFQUFFLFFBQTJCO0lBQ3hGLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXhELDhFQUE4RTtJQUM5RSw0Q0FBNEM7SUFDNUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEQsUUFBUSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQTtJQUNsRSxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztJQUNwRyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQUN4RyxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsbUJBQW1CLENBQUM7QUFDdEQsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUc7SUFDaEMsT0FBTyxJQUFJLGNBQWMsRUFBRSxDQUFDO0FBQzlCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE9iamVjdDNELCBNZXNoLCBQZXJzcGVjdGl2ZUNhbWVyYSxcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsIEJveEdlb21ldHJ5LCBTaGFkZXJNYXRlcmlhbCwgTGluZUJhc2ljTWF0ZXJpYWwsIEVkZ2VzR2VvbWV0cnksXG4gIEFuaW1hdGlvbk1peGVyLCBDb2xvciwgTWF0cml4NCwgVmVjdG9yM1xufSBmcm9tICd0aHJlZSc7XG5pbXBvcnQge1NjZW5lQ29tcG9uZW50LCBJU2NlbmVOb2RlfSBmcm9tICcuLi9zY2VuZS1jb21wb25lbnQvU2NlbmVDb21wb25lbnQnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gIGludGVyZmFjZSBXaW5kb3cge1xuICAgIFRIUkVFOiBhbnk7XG4gIH1cbn1cblxuaW50ZXJmYWNlIElucHV0cyB7XG4gIG5lYXJQbGFuZTogbnVtYmVyO1xuICBmYXJQbGFuZTogbnVtYmVyLFxuICBob3Jpem9udGFsRk9WOiBudW1iZXIsXG4gIGFzcGVjdDogbnVtYmVyLFxuICBsb2NhbFBvc2l0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyOyB6OiBudW1iZXI7IH07XG4gIGxvY2FsUm90YXRpb246IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHo6IG51bWJlcjsgfTtcbiAgY29sb3I6IG51bWJlcjtcbiAgcGFuUGVyaW9kOiBudW1iZXI7XG4gIHBhbkFuZ2xlOiBudW1iZXI7XG59XG5cbnR5cGUgSGlnaGxpZ2h0VW5pZm9ybXMgPSB7XG4gIGNvbG9yOiB7IHZhbHVlOiBDb2xvciB9LFxuICBwcm9qUG9zaXRpb246IHsgdmFsdWU6IFZlY3RvcjMgfTtcbiAgbGlnaHRNYXRyaXg6IHsgdmFsdWU6IE1hdHJpeDQgfTtcbn1cblxuXG5leHBvcnQgY2xhc3MgU2VjdXJpdHlDYW1lcmEgZXh0ZW5kcyBTY2VuZUNvbXBvbmVudCB7XG4gIHByaXZhdGUgcm9vdDogT2JqZWN0M0QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBwaXZvdDogT2JqZWN0M0QgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBib3g6IE1lc2ggfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBlZGdlczogTWVzaCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIHByb2plY3RvcjogUGVyc3BlY3RpdmVDYW1lcmE7XG4gIHByaXZhdGUgaGlnaGxpZ2h0OiBNZXNoIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgaGlnaGxpZ2h0VW5pZm9ybXM6IEhpZ2hsaWdodFVuaWZvcm1zID0ge1xuICAgIGNvbG9yOiB7dmFsdWU6IG5ldyBDb2xvcigpfSxcbiAgICBwcm9qUG9zaXRpb246IHt2YWx1ZTogbmV3IFZlY3RvcjMoKX0sXG4gICAgbGlnaHRNYXRyaXg6IHt2YWx1ZTogbmV3IE1hdHJpeDQoKX0sXG4gIH1cbiAgcHJpdmF0ZSBtaXhlcjogQW5pbWF0aW9uTWl4ZXI7XG5cbiAgb3ZlcnJpZGUgaW5wdXRzOiBJbnB1dHMgPSB7XG4gICAgbmVhclBsYW5lOiAwLjEsXG4gICAgZmFyUGxhbmU6IDQsXG4gICAgaG9yaXpvbnRhbEZPVjogODAsXG4gICAgYXNwZWN0OiAxNiAvIDksXG4gICAgbG9jYWxQb3NpdGlvbjoge3g6IDAsIHk6IDAsIHo6IDB9LFxuICAgIGxvY2FsUm90YXRpb246IHt4OiAwLCB5OiAwLCB6OiAwfSxcbiAgICBjb2xvcjogMHhmZmZmZmYsXG4gICAgcGFuUGVyaW9kOiAyMCxcbiAgICBwYW5BbmdsZTogMTgwLFxuICB9O1xuXG4gIG92ZXJyaWRlIG91dHB1dHM6IGFueSA9IHt9O1xuXG5cbiAgb3ZlcnJpZGUgb25Jbml0KCkge1xuICAgIGNvbnN0IFRIUkVFID0gdGhpcy5jb250ZXh0LnRocmVlO1xuXG4gICAgdGhpcy5yb290ID0gbmV3IFRIUkVFLk9iamVjdDNEKCk7XG4gICAgdGhpcy5waXZvdCA9IG5ldyBUSFJFRS5PYmplY3QzRCgpO1xuICAgIHRoaXMucm9vdC5hZGQodGhpcy5waXZvdCk7XG4gICAgdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QgPSB0aGlzLnJvb3Q7XG4gICAgdGhpcy5yb290LnBvc2l0aW9uLnNldCh0aGlzLmlucHV0cy5sb2NhbFBvc2l0aW9uLngsIHRoaXMuaW5wdXRzLmxvY2FsUG9zaXRpb24ueSwgdGhpcy5pbnB1dHMubG9jYWxQb3NpdGlvbi56KTtcblxuICAgIGNvbnN0IGV1bGVyID0gbmV3IFRIUkVFLkV1bGVyKHRoaXMuaW5wdXRzLmxvY2FsUm90YXRpb24ueCAqIE1hdGguUEkgLyAxODAsIHRoaXMuaW5wdXRzLmxvY2FsUm90YXRpb24ueSAqIE1hdGguUEkgLyAxODAsIHRoaXMuaW5wdXRzLmxvY2FsUm90YXRpb24ueiAqIE1hdGguUEkgLyAxODAsICdZWFonKTtcbiAgICB0aGlzLnBpdm90LnF1YXRlcm5pb24uc2V0RnJvbUV1bGVyKGV1bGVyKTtcblxuICAgIGNvbnN0IGFzcGVjdCA9IHRoaXMuaW5wdXRzLmFzcGVjdDtcbiAgICBjb25zdCBERUcyUkFEID0gTWF0aC5QSSAvIDE4MDtcbiAgICBjb25zdCBSQUQyREVHID0gMSAvIERFRzJSQUQ7XG4gICAgY29uc3QgdmVydGljYWxGT1YgPSAyICogTWF0aC5hdGFuKDEgLyBhc3BlY3QgKiBNYXRoLnRhbigwLjUgKiB0aGlzLmlucHV0cy5ob3Jpem9udGFsRk9WICogREVHMlJBRCkpICogUkFEMkRFRztcbiAgICB0aGlzLnByb2plY3RvciA9IG5ldyBUSFJFRS5QZXJzcGVjdGl2ZUNhbWVyYSh2ZXJ0aWNhbEZPViwgYXNwZWN0LCB0aGlzLmlucHV0cy5uZWFyUGxhbmUsIHRoaXMuaW5wdXRzLmZhclBsYW5lKTtcbiAgICAvLyBvcmllbnRhdGlvbiBvZiB0aGUgcHJvamVjdG9yIGlzIGhhbmRsZWQgYnkgdGhlIHBpdm90XG4gICAgdGhpcy5waXZvdC5hZGQodGhpcy5wcm9qZWN0b3IpO1xuXG4gICAgdGhpcy5tYWtlRnJ1c3R1bVZpc3VhbHMoKTtcblxuICAgIHRoaXMucGl2b3QuYWRkKHRoaXMuYm94KTtcbiAgICB0aGlzLnBpdm90LmFkZCh0aGlzLmVkZ2VzKTtcblxuICAgIHRoaXMubWFrZUhpZ2hsaWdodCgpO1xuXG4gICAgLy8gYXR0YWNoIGhpZ2hpZ2h0aW5nIHRvIHRoZSBtZXNoIGl0IHJlcHJlc2VudHNcbiAgICAvLyBUT0RPIChzY2VuZSBxdWVyeSk6IHRoaXMgaXMgdmVyeSBicml0dGxlIGJ1dCBpcyB0aGUgb25seSB3YXkgdG8gYXR0YWNoIHNvbWV0aGluZyB0byBhIHJvb20gb2YgdGhlIG1vZGVsXG4gICAgdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QucGFyZW50LnBhcmVudC5hZGQodGhpcy5oaWdobGlnaHQpO1xuXG4gICAgLy8gY3JlYXRlIHRoZSBhbmltYXRpb24gbWl4ZXIgdG8gcm90YXRlIHRoZSBjYW1lcmFcbiAgICB0aGlzLm1ha2VBbmltYXRpb24oKTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uVGljayhkZWx0YTogbnVtYmVyKSB7XG4gICAgdXBkYXRlSGlnaGxpZ2h0VW5pZm9ybXModGhpcy5wcm9qZWN0b3IsIHRoaXMuaGlnaGxpZ2h0VW5pZm9ybXMpO1xuICAgIGlmICh0aGlzLm1peGVyKSB7XG4gICAgICB0aGlzLm1peGVyLnVwZGF0ZShkZWx0YSAvIDEwMDApO1xuICAgIH1cbiAgfVxuXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5oaWdobGlnaHQgJiYgdGhpcy5oaWdobGlnaHQucGFyZW50KSB7XG4gICAgICB0aGlzLmhpZ2hsaWdodC5wYXJlbnQucmVtb3ZlKHRoaXMuaGlnaGxpZ2h0KTtcbiAgICAgICh0aGlzLmhpZ2hsaWdodC5tYXRlcmlhbCBhcyBTaGFkZXJNYXRlcmlhbCkuZGlzcG9zZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5lZGdlcykge1xuICAgICAgdGhpcy5lZGdlcy5nZW9tZXRyeS5kaXNwb3NlKCk7XG4gICAgICAodGhpcy5lZGdlcy5tYXRlcmlhbCBhcyBMaW5lQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xuICAgIH1cbiAgICBpZiAodGhpcy5ib3gpIHtcbiAgICAgIHRoaXMuYm94Lmdlb21ldHJ5LmRpc3Bvc2UoKTtcbiAgICAgICh0aGlzLmJveC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xuICAgIH1cblxuICB9XG5cbiAgcHJpdmF0ZSBtYWtlRnJ1c3R1bVZpc3VhbHMoKSB7XG4gICAgY29uc3QgVEhSRUUgPSB0aGlzLmNvbnRleHQudGhyZWU7XG4gICAgaWYgKHRoaXMuYm94KSB7XG4gICAgICB0aGlzLnJvb3QucmVtb3ZlKHRoaXMuYm94KTtcbiAgICAgICh0aGlzLmJveC5tYXRlcmlhbCBhcyBNZXNoQmFzaWNNYXRlcmlhbCkuZGlzcG9zZSgpO1xuICAgICAgKHRoaXMuYm94Lmdlb21ldHJ5IGFzIEJveEdlb21ldHJ5KS5kaXNwb3NlKCk7XG4gICAgICB0aGlzLmJveCA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLmVkZ2VzKSB7XG4gICAgICB0aGlzLnJvb3QucmVtb3ZlKHRoaXMuZWRnZXMpO1xuICAgICAgKHRoaXMuZWRnZXMubWF0ZXJpYWwgYXMgTGluZUJhc2ljTWF0ZXJpYWwpLmRpc3Bvc2UoKTtcbiAgICAgICh0aGlzLmVkZ2VzLmdlb21ldHJ5IGFzIEVkZ2VzR2VvbWV0cnkpLmRpc3Bvc2UoKTtcbiAgICAgIHRoaXMuZWRnZXMgPSBudWxsO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVkZ2VzVG9DeWxpbmRlcnMoZWRnZXNHZW9tZXRyeTogRWRnZXNHZW9tZXRyeSwgdGhpY2tuZXNzOiBudW1iZXIpIHtcbiAgICAgIGNvbnN0IHtwb3NpdGlvbn0gPSBlZGdlc0dlb21ldHJ5LmF0dHJpYnV0ZXM7XG4gICAgICBjb25zdCB7YXJyYXksIGNvdW50fSA9IHBvc2l0aW9uO1xuICAgICAgY29uc3QgciA9IHRoaWNrbmVzcyAvIDI7XG4gICAgICBjb25zdCBnZW9tcyA9IFtdO1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb3VudCAqIDMgLSAxOyBpICs9IDYpIHtcbiAgICAgICAgY29uc3QgYSA9IG5ldyBUSFJFRS5WZWN0b3IzKGFycmF5W2ldLCBhcnJheVtpICsgMV0sIGFycmF5W2kgKyAyXSk7XG4gICAgICAgIGNvbnN0IGIgPSBuZXcgVEhSRUUuVmVjdG9yMyhhcnJheVtpICsgM10sIGFycmF5W2kgKyA0XSwgYXJyYXlbaSArIDVdKTtcblxuICAgICAgICBjb25zdCB2ZWMgPSBuZXcgVEhSRUUuVmVjdG9yMygpLnN1YlZlY3RvcnMoYiwgYSk7XG4gICAgICAgIGNvbnN0IGxlbiA9IHZlYy5sZW5ndGgoKTtcbiAgICAgICAgY29uc3QgZ2VvbSA9IG5ldyBUSFJFRS5DeWxpbmRlckJ1ZmZlckdlb21ldHJ5KHIsIHIsIGxlbiwgOCk7XG4gICAgICAgIGdlb20udHJhbnNsYXRlKDAsIGxlbiAvIDIsIDApO1xuICAgICAgICBnZW9tLnJvdGF0ZVgoTWF0aC5QSSAvIDIpO1xuICAgICAgICBnZW9tLmxvb2tBdCh2ZWMpO1xuICAgICAgICBnZW9tLnRyYW5zbGF0ZShhLngsIGEueSwgYS56KTtcbiAgICAgICAgZ2VvbXMucHVzaChnZW9tKTtcbiAgICAgIH1cbiAgICAgIC8vIEFQSSB0byBiZSB1cGRhdGVkIGluIGJ1bmRsZSAtIEpTU0RLLTEyMjJcbiAgICAgIHJldHVybiAoVEhSRUUgYXMgYW55KS5tZXJnZUJ1ZmZlckdlb21ldHJpZXMoZ2VvbXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGZydXN0dW1MZW5ndGggPSB0aGlzLmlucHV0cy5mYXJQbGFuZSAtIHRoaXMuaW5wdXRzLm5lYXJQbGFuZTtcbiAgICBjb25zdCBib3hHZW9tZXRyeTogQm94R2VvbWV0cnkgPSBuZXcgVEhSRUUuQm94R2VvbWV0cnkoMiwgMiwgZnJ1c3R1bUxlbmd0aCk7XG4gICAgY29uc3QgaGFsZkhBbmdsZSA9IHRoaXMuaW5wdXRzLmhvcml6b250YWxGT1YgKiAwLjUgKiBNYXRoLlBJIC8gMTgwO1xuICAgIGNvbnN0IG5lYXJIYWxmV2lkdGggPSBNYXRoLnRhbihoYWxmSEFuZ2xlKSAqIHRoaXMuaW5wdXRzLm5lYXJQbGFuZTtcbiAgICBjb25zdCBmYXJIYWxmV2lkdGggPSBNYXRoLnRhbihoYWxmSEFuZ2xlKSAqIHRoaXMuaW5wdXRzLmZhclBsYW5lO1xuICAgIGNvbnN0IG5lYXJIYWxmSGVpZ2h0ID0gbmVhckhhbGZXaWR0aCAvIHRoaXMuaW5wdXRzLmFzcGVjdDtcbiAgICBjb25zdCBmYXJIYWxmSGVpZ2h0ID0gZmFySGFsZldpZHRoIC8gdGhpcy5pbnB1dHMuYXNwZWN0O1xuXG4gICAgY29uc3QgcG9zaXRpb25zID0gYm94R2VvbWV0cnkuZ2V0QXR0cmlidXRlKCdwb3NpdGlvbicpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwb3NpdGlvbnMuY291bnQ7IGkrKykge1xuICAgICAgY29uc3QgdmVydGV4WiA9IHBvc2l0aW9ucy5nZXRaKGkpO1xuICAgICAgY29uc3QgdmVydGV4WCA9IHBvc2l0aW9ucy5nZXRYKGkpO1xuICAgICAgY29uc3QgdmVydGV4WSA9IHBvc2l0aW9ucy5nZXRZKGkpO1xuICAgICAgaWYgKHZlcnRleFogPiAwKSB7XG4gICAgICAgIC8vIGJhY2sgb2YgdGhlIGNhbWVyYVxuICAgICAgICBwb3NpdGlvbnMuc2V0WChpLCB2ZXJ0ZXhYICogbmVhckhhbGZXaWR0aClcbiAgICAgICAgcG9zaXRpb25zLnNldFkoaSwgdmVydGV4WSAqIG5lYXJIYWxmSGVpZ2h0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGZyb250IG9mIHRoZSBjYW1lcmFcbiAgICAgICAgcG9zaXRpb25zLnNldFgoaSwgdmVydGV4WCAqIGZhckhhbGZXaWR0aClcbiAgICAgICAgcG9zaXRpb25zLnNldFkoaSwgdmVydGV4WSAqIGZhckhhbGZIZWlnaHQpO1xuICAgICAgfVxuICAgICAgcG9zaXRpb25zLnNldFooaSwgdmVydGV4WiAtIDAuNSAqIGZydXN0dW1MZW5ndGggLSB0aGlzLmlucHV0cy5uZWFyUGxhbmUpO1xuICAgIH1cblxuICAgIHZhciBib3hNYXRlcmlhbDogTWVzaEJhc2ljTWF0ZXJpYWwgPSBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IHRoaXMuaW5wdXRzLmNvbG9yLFxuICAgICAgb3BhY2l0eTogMC4wNSxcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgc2lkZTogVEhSRUUuQmFja1NpZGUsXG4gICAgICBibGVuZGluZzogVEhSRUUuTm9ybWFsQmxlbmRpbmcsXG4gICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcbiAgICB9KTtcbiAgICB0aGlzLmJveCA9IG5ldyBUSFJFRS5NZXNoKGJveEdlb21ldHJ5LCBib3hNYXRlcmlhbCk7XG4gICAgY29uc3QgZWRnZXNHZW9tZXRyeSA9IGVkZ2VzVG9DeWxpbmRlcnMobmV3IFRIUkVFLkVkZ2VzR2VvbWV0cnkoYm94R2VvbWV0cnkpLCAwLjAxNSk7XG4gICAgdGhpcy5lZGdlcyA9IG5ldyBUSFJFRS5NZXNoKGVkZ2VzR2VvbWV0cnksIG5ldyBUSFJFRS5NZXNoQmFzaWNNYXRlcmlhbCh7XG4gICAgICBjb2xvcjogMHhmZmZmZmYsXG4gICAgICBvcGFjaXR5OiAwLjI1LFxuICAgICAgdHJhbnNwYXJlbnQ6IHRydWUsXG4gICAgICBibGVuZGluZzogVEhSRUUuQWRkaXRpdmVCbGVuZGluZyxcbiAgICAgIGRlcHRoV3JpdGU6IGZhbHNlLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IGVkZ2VzR2VvbWV0cnkyID0gZWRnZXNUb0N5bGluZGVycyhuZXcgVEhSRUUuRWRnZXNHZW9tZXRyeShib3hHZW9tZXRyeSksIDAuMDYpO1xuICAgIGNvbnN0IGVkZ2VzMiA9IG5ldyBUSFJFRS5NZXNoKGVkZ2VzR2VvbWV0cnkyLCBuZXcgVEhSRUUuTWVzaEJhc2ljTWF0ZXJpYWwoe1xuICAgICAgY29sb3I6IHRoaXMuaW5wdXRzLmNvbG9yLFxuICAgICAgb3BhY2l0eTogMC4wNSxcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgYmxlbmRpbmc6IFRIUkVFLkFkZGl0aXZlQmxlbmRpbmcsXG4gICAgICBkZXB0aFdyaXRlOiBmYWxzZSxcbiAgICB9KSk7XG4gICAgdGhpcy5waXZvdC5hZGQoZWRnZXMyKTtcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUhpZ2hsaWdodCgpIHtcbiAgICBjb25zdCBUSFJFRSA9IHRoaXMuY29udGV4dC50aHJlZTtcblxuICAgIC8vIFRPRE8gKHNjZW5lIHF1ZXJ5KTogdGhpcyBpcyB2ZXJ5IGJyaXR0bGUgYW5kIGhhcmRjb2RlZCBidXQgaXMgdGhlIG9ubHkgd2F5IHRvIGdldCByb29tIGdlb21ldHJpZXMgdW50aWwgd2UgaGF2ZSBhIGJldHRlciB3YXkgdG8gcXVlcnkgdGhlIHNjZW5lIGdyYXBoXG4gICAgY29uc3QgZmxvb3JNZXNoID0gdGhpcy5vdXRwdXRzLm9iamVjdFJvb3QucGFyZW50LnBhcmVudC5nZXRPYmplY3RCeU5hbWUoJ0Zsb29yTWVzaDowJyk7XG4gICAgY29uc3Qgcm9vbU1lc2ggPSBmbG9vck1lc2guY2hpbGRyZW5bMF0gYXMgTWVzaDtcblxuICAgIHVwZGF0ZUhpZ2hsaWdodFVuaWZvcm1zKHRoaXMucHJvamVjdG9yLCB0aGlzLmhpZ2hsaWdodFVuaWZvcm1zKTtcbiAgICB0aGlzLmhpZ2hsaWdodFVuaWZvcm1zLmNvbG9yLnZhbHVlLnNldEhleCh0aGlzLmlucHV0cy5jb2xvcik7XG5cbiAgICBjb25zdCBzaGFkZXIgPSBuZXcgVEhSRUUuU2hhZGVyTWF0ZXJpYWwoe1xuICAgICAgcG9seWdvbk9mZnNldDogdHJ1ZSxcbiAgICAgIHBvbHlnb25PZmZzZXRVbml0czogLTAuMSxcbiAgICAgIHRyYW5zcGFyZW50OiB0cnVlLFxuICAgICAgdW5pZm9ybXM6IHRoaXMuaGlnaGxpZ2h0VW5pZm9ybXMsXG4gICAgICB2ZXJ0ZXhTaGFkZXI6IHZlcnRleFNoYWRlcigpLFxuICAgICAgZnJhZ21lbnRTaGFkZXI6IGZyYWdtZW50U2hhZGVyKCksXG4gICAgfSk7XG5cbiAgICAvLyBhIG1lc2ggdG8gcmVwcmVzZW50IHRoZSBcImhpZ2hsaWdodFwiXG4gICAgdGhpcy5oaWdobGlnaHQgPSBuZXcgVEhSRUUuTWVzaChyb29tTWVzaC5nZW9tZXRyeSwgc2hhZGVyKTtcbiAgfVxuXG4gIHRvZ2dsZVZpZXdGcnVzdHVtKCk6IHZvaWQge1xuICAgIHRoaXMuaGlnaGxpZ2h0LnZpc2libGUgPSAhdGhpcy5oaWdobGlnaHQudmlzaWJsZTtcbiAgICB0aGlzLmVkZ2VzLnZpc2libGUgPSAhdGhpcy5lZGdlcy52aXNpYmxlO1xuICAgIHRoaXMucGl2b3QudmlzaWJsZSA9ICF0aGlzLnBpdm90LnZpc2libGVcbiAgfVxuXG4gIHByaXZhdGUgbWFrZUFuaW1hdGlvbigpIHtcbiAgICBjb25zdCBUSFJFRSA9IHRoaXMuY29udGV4dC50aHJlZTtcblxuICAgIC8vIHByZWFwcGx5IHRoZSBpbml0aWFsIHJvdGF0aW9uIG9mIHRoZSByb290IHNvIHRoYXQgcGFuQW5nbGUgaXMgcmVsYXRpdmUgdG8gaXQuXG5cbiAgICAvLyBUT0RPOiBmaXggaXQhXG4gICAgY29uc3Qgcm9vdFJvdGF0aW9uID0gdGhpcy5jb250ZXh0LnJvb3QucXVhdGVybmlvbjtcblxuICAgIGNvbnN0IHlBeGlzID0gbmV3IFRIUkVFLlZlY3RvcjMoMCwgMSwgMCk7XG4gICAgY29uc3QgZnJhbWUwID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKS5zZXRGcm9tQXhpc0FuZ2xlKHlBeGlzLCAwKS5wcmVtdWx0aXBseShyb290Um90YXRpb24pO1xuICAgIGNvbnN0IGZyYW1lMSA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCkuc2V0RnJvbUF4aXNBbmdsZSh5QXhpcywgdGhpcy5pbnB1dHMucGFuQW5nbGUpLnByZW11bHRpcGx5KHJvb3RSb3RhdGlvbik7XG5cbiAgICAvLyBhIHRyYWNrIHRoYXQgaGFzIGRlbGF5cyBhdCB0aGUgc3RhcnQgYW5kIGVuZCBmb3IgNSUgb2YgdGhlIGFuaW1hdGlvblxuICAgIGNvbnN0IHRyYWNrID0gbmV3IFRIUkVFLlF1YXRlcm5pb25LZXlmcmFtZVRyYWNrKCcucXVhdGVybmlvbicsIFtcbiAgICAgIDAsIHRoaXMuaW5wdXRzLnBhblBlcmlvZCAqIDAuMDUsIHRoaXMuaW5wdXRzLnBhblBlcmlvZCAqIDAuOTUsIHRoaXMuaW5wdXRzLnBhblBlcmlvZFxuICAgIF0sIFtcbiAgICAgIGZyYW1lMC54LCBmcmFtZTAueSwgZnJhbWUwLnosIGZyYW1lMC53LFxuICAgICAgZnJhbWUwLngsIGZyYW1lMC55LCBmcmFtZTAueiwgZnJhbWUwLncsXG4gICAgICBmcmFtZTEueCwgZnJhbWUxLnksIGZyYW1lMS56LCBmcmFtZTEudyxcbiAgICAgIGZyYW1lMS54LCBmcmFtZTEueSwgZnJhbWUxLnosIGZyYW1lMS53LFxuICAgIF0pO1xuXG4gICAgY29uc3QgY2xpcCA9IG5ldyBUSFJFRS5BbmltYXRpb25DbGlwKCdwYW5uaW5nJywgdGhpcy5pbnB1dHMucGFuUGVyaW9kLCBbdHJhY2tdKTtcblxuICAgIC8vIFRoZXJlIGlzIG5vIGFwaSB0byBjaGFuZ2UgdGhlIHJvdGF0aW9uIG9mIHRoZSByb290LCBzbyB3ZSB3aWxsIHVzZSBhIHByaXZhdGUgcHJvcGVydHkgdG8gYWNjZXNzIHRoZSBPYmplY3QzRC5cbiAgICAvLyBUaGlzIHdpbGwgbGlrZWx5IG5lZWQgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuXG4gICAgdGhpcy5taXhlciA9IG5ldyBUSFJFRS5BbmltYXRpb25NaXhlcigodGhpcy5jb250ZXh0LnJvb3QgYXMgYW55KS5vYmozRCk7XG4gICAgY29uc3QgYWN0aW9uID0gdGhpcy5taXhlci5jbGlwQWN0aW9uKGNsaXApO1xuICAgIGFjdGlvbi5sb29wID0gVEhSRUUuTG9vcFBpbmdQb25nO1xuICAgIGFjdGlvbi5wbGF5KCk7XG4gIH1cblxufVxuXG5mdW5jdGlvbiB2ZXJ0ZXhTaGFkZXIoKTogc3RyaW5nIHtcbiAgcmV0dXJuIGBcbiAgICB1bmlmb3JtIG1hdDQgbGlnaHRNYXRyaXg7XG5cbiAgICB2YXJ5aW5nIHZlYzQgdkxpZ2h0Q29vcmRzO1xuXG4gICAgdm9pZCBtYWluKCkge1xuICAgICAgLy8gY3JlYXRlIGEgVVYgcmVnaW9uIFswLDFdIHggWzAsMV0gdG8gcmVwcmVzZW50IHdoYXQgdGhlIGxpZ2h0TWF0cml4IFwic2Vlc1wiXG4gICAgICB2TGlnaHRDb29yZHMgPSBsaWdodE1hdHJpeCAqICBtb2RlbE1hdHJpeCAqIHZlYzQocG9zaXRpb24sIDEuMCk7XG4gICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KHBvc2l0aW9uLCAxLjApO1xuICAgIH1cbiAgYDtcbn1cblxuZnVuY3Rpb24gZnJhZ21lbnRTaGFkZXIoKSB7XG4gIHJldHVybiBgXG4gICAgdW5pZm9ybSB2ZWMzIGNvbG9yO1xuXG4gICAgdmFyeWluZyB2ZWM0IHZMaWdodENvb3JkcztcblxuICAgIHZvaWQgbWFpbigpIHtcbiAgICAgIHZlYzIgbGlnaHRVViA9IHZMaWdodENvb3Jkcy54eSAvIHZMaWdodENvb3Jkcy53O1xuICAgICAgZmxvYXQgaW5WaWV3ID0gZmxvYXQobWF4KGxpZ2h0VVYueCwgbGlnaHRVVi55KSA8PSAxLjAgJiYgbWluKGxpZ2h0VVYueCwgbGlnaHRVVi55KSA+PSAwLjAgJiYgdkxpZ2h0Q29vcmRzLnogPiAwLjApO1xuXG4gICAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KGNvbG9yLCBtaW4oaW5WaWV3LCAwLjIpKTtcbiAgICB9XG4gIGA7XG59XG5cbmZ1bmN0aW9uIHVwZGF0ZUhpZ2hsaWdodFVuaWZvcm1zKHByb2plY3RvcjogUGVyc3BlY3RpdmVDYW1lcmEsIHVuaWZvcm1zOiBIaWdobGlnaHRVbmlmb3Jtcykge1xuICBwcm9qZWN0b3IuZ2V0V29ybGRQb3NpdGlvbih1bmlmb3Jtcy5wcm9qUG9zaXRpb24udmFsdWUpO1xuXG4gIC8vIHNpbWlsYXIgdG8gYSBzaGFkb3cgbWF0cml4LCBidXQgd2UncmUgdXNpbmcgaXQgYXMgYSBcInJlY3Rhbmd1bGFyXCIgc3BvdGxpZ2h0XG4gIC8vIFtsaWdodEJpYXNdICogW3Byb2plY3Rpb25dICogW3ZpZXdNYXRyaXhdXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLm1ha2VTY2FsZSgwLjUsIDAuNSwgMC41KTtcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUuc2V0UG9zaXRpb24obmV3IFZlY3RvcjMoMC41LCAwLjUsIDAuNSkpXG4gIHVuaWZvcm1zLmxpZ2h0TWF0cml4LnZhbHVlLm11bHRpcGx5TWF0cmljZXModW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUsIHByb2plY3Rvci5wcm9qZWN0aW9uTWF0cml4KTtcbiAgdW5pZm9ybXMubGlnaHRNYXRyaXgudmFsdWUubXVsdGlwbHlNYXRyaWNlcyh1bmlmb3Jtcy5saWdodE1hdHJpeC52YWx1ZSwgcHJvamVjdG9yLm1hdHJpeFdvcmxkSW52ZXJzZSk7XG59XG5cbmV4cG9ydCBjb25zdCBzZWN1cml0eUNhbWVyYVR5cGUgPSAnbXAuc2VjdXJpdHlDYW1lcmEnO1xuZXhwb3J0IGNvbnN0IG1ha2VTZWN1cml0eUNhbWVyYSA9IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIG5ldyBTZWN1cml0eUNhbWVyYSgpO1xufVxuIl19
@@ -0,0 +1,98 @@
1
+ import { SceneComponent } from '../scene-component/SceneComponent';
2
+ import { Texture, MeshBasicMaterial, LinearFilter, } from 'three';
3
+ const HoverEvent = 'hover';
4
+ const UnhoverEvent = 'unhover';
5
+ export class TvPlayer extends SceneComponent {
6
+ constructor() {
7
+ super(...arguments);
8
+ this.rootScene = null;
9
+ this.mesh = null;
10
+ this.inputs = {
11
+ loadingState: 'Idle',
12
+ texture: null,
13
+ updateInterval: 1000,
14
+ };
15
+ this.events = {
16
+ [HoverEvent]: true,
17
+ [UnhoverEvent]: true,
18
+ };
19
+ }
20
+ onInit(modelNode) {
21
+ if (!this.context) {
22
+ this.context = {
23
+ root: modelNode
24
+ };
25
+ }
26
+ const root = this.context.root;
27
+ const THREE = this.context.three;
28
+ }
29
+ onDestroy() {
30
+ super.onDestroy();
31
+ clearInterval(this.intervalVideoTexture);
32
+ }
33
+ onInputsUpdated() {
34
+ if (this.inputs.loadingState === 'Loaded') {
35
+ const lines = [];
36
+ //@ts-ignore
37
+ this.context.root.obj3D.traverse((obj) => {
38
+ // we dont want line segments, track them and remove them.
39
+ if (obj.type === 'LineSegments') {
40
+ lines.push(obj);
41
+ }
42
+ else if (obj.type === 'Mesh') {
43
+ this.mesh = obj;
44
+ let video, videoImage, videoImageContext, videoTexture;
45
+ // create the video element
46
+ video = document.createElement('video');
47
+ // video.src = "./../assets/video/video_samsic.mp4";
48
+ video.src = "./../assets/video/121222-04.mp4";
49
+ video.load(); // must call after setting/changing source
50
+ video.loop = true;
51
+ video.play();
52
+ videoImage = document.createElement('canvas');
53
+ // videoImage.width = 640;
54
+ videoImage.width = 1280;
55
+ // videoImage.height = 360;
56
+ videoImage.height = 720;
57
+ videoImageContext = videoImage.getContext('2d');
58
+ // background color if no video present
59
+ videoImageContext.fillStyle = '#000000';
60
+ videoImageContext.fillRect(0, 0, videoImage.width, videoImage.height);
61
+ videoTexture = new Texture(videoImage);
62
+ videoTexture.minFilter = LinearFilter;
63
+ videoTexture.magFilter = LinearFilter;
64
+ const movieMaterial = new MeshBasicMaterial({ map: videoTexture });
65
+ this.mesh.material = movieMaterial;
66
+ const render = () => {
67
+ if (video.readyState === video.HAVE_ENOUGH_DATA) {
68
+ videoImageContext.drawImage(video, 0, 0);
69
+ if (videoTexture)
70
+ videoTexture.needsUpdate = true;
71
+ }
72
+ const camera = (this.context.scene.children.find(u => u.constructor.name === 'CameraRig')).camera;
73
+ this.context.renderer.render(this.context.scene, camera);
74
+ };
75
+ this.intervalVideoTexture = setInterval(() => {
76
+ render();
77
+ }, 180);
78
+ }
79
+ });
80
+ // remove the line segments.
81
+ lines.forEach((line) => {
82
+ line.parent.remove(line);
83
+ });
84
+ }
85
+ }
86
+ setComponent(component) {
87
+ this.component = component;
88
+ this.context = component.context;
89
+ }
90
+ setRootScene(rootScene) {
91
+ this.rootScene = rootScene;
92
+ }
93
+ }
94
+ export const TvPlayerType = 'mp.TvPlayer';
95
+ export const makeTvPlayer = function () {
96
+ return new TvPlayer();
97
+ };
98
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiVHZQbGF5ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy90di1wbGF5ZXIvVHZQbGF5ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLGNBQWMsRUFBbUIsTUFBTSxtQ0FBbUMsQ0FBQztBQUNuRixPQUFPLEVBR0wsT0FBTyxFQUNQLGlCQUFpQixFQUVqQixZQUFZLEdBQ2IsTUFBTSxPQUFPLENBQUM7QUFFZixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUM7QUFDM0IsTUFBTSxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBUy9CLE1BQU0sT0FBTyxRQUFTLFNBQVEsY0FBYztJQUE1Qzs7UUFDVSxjQUFTLEdBQW9CLElBQUksQ0FBQztRQUNsQyxTQUFJLEdBQWdCLElBQUksQ0FBQztRQUl4QixXQUFNLEdBQVc7WUFDeEIsWUFBWSxFQUFFLE1BQU07WUFDcEIsT0FBTyxFQUFFLElBQUk7WUFDYixjQUFjLEVBQUUsSUFBSTtTQUNyQixDQUFBO1FBR1EsV0FBTSxHQUFHO1lBQ2hCLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSTtZQUNsQixDQUFDLFlBQVksQ0FBQyxFQUFFLElBQUk7U0FDckIsQ0FBQztJQXVGSixDQUFDO0lBcEZVLE1BQU0sQ0FBQyxTQUFlO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2pCLElBQUksQ0FBQyxPQUFPLEdBQUc7Z0JBQ2IsSUFBSSxFQUFFLFNBQVM7YUFDSSxDQUFDO1NBQ3ZCO1FBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7SUFDbkMsQ0FBQztJQUVRLFNBQVM7UUFDaEIsS0FBSyxDQUFDLFNBQVMsRUFB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QW9CLEdBQUcsV0FBVyxDQUFDLEdBQUcsRUFBRTt3QkFDM0MsTUFBTSxFQUFFLENBQUM7b0JBQ1gsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUVUO1lBQ0gsQ0FBQyxDQUFDLENBQUM7WUFFSCw0QkFBNEI7WUFDNUIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQWtCLEVBQUUsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsQ0FBQyxDQUFDLENBQUM7U0FDSjtJQUNILENBQUM7SUFFRCxZQUFZLENBQUMsU0FBeUI7UUFDcEMsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDM0IsSUFBSSxDQUFDLE9BQU8sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDO0lBQ25DLENBQUM7SUFFRCxZQUFZLENBQUMsU0FBbUI7UUFDOUIsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7SUFDN0IsQ0FBQztDQUNGO0FBRUQsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLGFBQWEsQ0FBQztBQUMxQyxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUc7SUFDMUIsT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO0FBQ3hCLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U2NlbmVDb21wb25lbnQsIENvbXBvbmVudENvbnRleHR9IGZyb20gJy4uL3NjZW5lLWNvbXBvbmVudC9TY2VuZUNvbXBvbmVudCc7XG5pbXBvcnQge1xuICBPYmplY3QzRCxcbiAgTWVzaCxcbiAgVGV4dHVyZSxcbiAgTWVzaEJhc2ljTWF0ZXJpYWwsXG4gIExpbmVTZWdtZW50cyxcbiAgTGluZWFyRmlsdGVyLFxufSBmcm9tICd0aHJlZSc7XG5cbmNvbnN0IEhvdmVyRXZlbnQgPSAnaG92ZXInO1xuY29uc3QgVW5ob3ZlckV2ZW50ID0gJ3VuaG92ZXInO1xuXG50eXBlIElucHV0cyA9IHtcbiAgbG9hZGluZ1N0YXRlOiBzdHJpbmc7XG4gIHRleHR1cmU6IFRleHR1cmUgfCBudWxsO1xuICB1cGRhdGVJbnRlcnZhbDogbnVtYmVyO1xufVxuXG5cbmV4cG9ydCBjbGFzcyBUdlBsYXllciBleHRlbmRzIFNjZW5lQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByb290U2NlbmU6IE9iamVjdDNEIHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgbWVzaDogTWVzaCB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIGNvbXBvbmVudDogU2NlbmVDb21wb25lbnQ7XG5cblxuICBvdmVycmlkZSBpbnB1dHM6IElucHV0cyA9IHtcbiAgICBsb2FkaW5nU3RhdGU6ICdJZGxlJyxcbiAgICB0ZXh0dXJlOiBudWxsLFxuICAgIHVwZGF0ZUludGVydmFsOiAxMDAwLFxuICB9XG5cblxuICBvdmVycmlkZSBldmVudHMgPSB7XG4gICAgW0hvdmVyRXZlbnRdOiB0cnVlLFxuICAgIFtVbmhvdmVyRXZlbnRdOiB0cnVlLFxuICB9O1xuICBwcml2YXRlIGludGVydmFsVmlkZW9UZXh0dXJlOiBOb2RlSlMuVGltZW91dDtcblxuICBvdmVycmlkZSBvbkluaXQobW9kZWxOb2RlPzogYW55KSB7XG4gICAgaWYgKCF0aGlzLmNvbnRleHQpIHtcbiAgICAgIHRoaXMuY29udGV4dCA9IHtcbiAgICAgICAgcm9vdDogbW9kZWxOb2RlXG4gICAgICB9IGFzIENvbXBvbmVudENvbnRleHQ7XG4gICAgfVxuICAgIGNvbnN0IHJvb3QgPSB0aGlzLmNvbnRleHQucm9vdDtcbiAgICBjb25zdCBUSFJFRSA9IHRoaXMuY29udGV4dC50aHJlZTtcbiAgfVxuXG4gIG92ZXJyaWRlIG9uRGVzdHJveSgpIHtcbiAgICBzdXBlci5vbkRlc3Ryb3koKTtcbiAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxWaWRlb1RleHR1cmUpO1xuICB9XG5cbiAgb3ZlcnJpZGUgb25JbnB1dHNVcGRhdGVkKCkge1xuICAgIGlmICh0aGlzLmlucHV0cy5sb2FkaW5nU3RhdGUgPT09ICdMb2FkZWQnKSB7XG4gICAgICBjb25zdCBsaW5lczogTGluZVNlZ21lbnRzW10gPSBbXTtcblxuICAgICAgLy9AdHMtaWdub3JlXG4gICAgICB0aGlzLmNvbnRleHQucm9vdC5vYmozRC50cmF2ZXJzZSgob2JqOiBPYmplY3QzRCkgPT4ge1xuICAgICAgICAvLyB3ZSBkb250IHdhbnQgbGluZSBzZWdtZW50cywgdHJhY2sgdGhlbSBhbmQgcmVtb3ZlIHRoZW0uXG4gICAgICAgIGlmIChvYmoudHlwZSA9PT0gJ0xpbmVTZWdtZW50cycpIHtcbiAgICAgICAgICBsaW5lcy5wdXNoKG9iaiBhcyBMaW5lU2VnbWVudHMpO1xuICAgICAgICB9IGVsc2UgaWYgKG9iai50eXBlID09PSAnTWVzaCcpIHtcbiAgICAgICAgICB0aGlzLm1lc2ggPSBvYmogYXMgTWVzaDtcblxuICAgICAgICAgIGxldCB2aWRlbywgdmlkZW9JbWFnZSwgdmlkZW9JbWFnZUNvbnRleHQsIHZpZGVvVGV4dHVyZTtcbiAgICAgICAgICAvLyBjcmVhdGUgdGhlIHZpZGVvIGVsZW1lbnRcbiAgICAgICAgICB2aWRlbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ZpZGVvJyk7XG4gICAgICAgICAgLy8gdmlkZW8uc3JjID0gXCIuLy4uL2Fzc2V0cy92aWRlby92aWRlb19zYW1zaWMubXA0XCI7XG4gICAgICAgICAgdmlkZW8uc3JjID0gXCIuLy4uL2Fzc2V0cy92aWRlby8xMjEyMjItMDQubXA0XCI7XG4gICAgICAgICAgdmlkZW8ubG9hZCgpOyAvLyBtdXN0IGNhbGwgYWZ0ZXIgc2V0dGluZy9jaGFuZ2luZyBzb3VyY2VcbiAgICAgICAgICB2aWRlby5sb29wID0gdHJ1ZTtcbiAgICAgICAgICB2aWRlby5wbGF5KCk7XG5cbiAgICAgICAgICB2aWRlb0ltYWdlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XG4gICAgICAgICAgLy8gdmlkZW9JbWFnZS53aWR0aCA9IDY0MDtcbiAgICAgICAgICB2aWRlb0ltYWdlLndpZHRoID0gMTI4MDtcbiAgICAgICAgICAvLyB2aWRlb0ltYWdlLmhlaWdodCA9IDM2MDtcbiAgICAgICAgICB2aWRlb0ltYWdlLmhlaWdodCA9IDcyMDtcblxuICAgICAgICAgIHZpZGVvSW1hZ2VDb250ZXh0ID0gdmlkZW9JbWFnZS5nZXRDb250ZXh0KCcyZCcpO1xuICAgICAgICAgIC8vIGJhY2tncm91bmQgY29sb3IgaWYgbm8gdmlkZW8gcHJlc2VudFxuICAgICAgICAgIHZpZGVvSW1hZ2VDb250ZXh0LmZpbGxTdHlsZSA9ICcjMDAwMDAwJztcbiAgICAgICAgICB2aWRlb0ltYWdlQ29udGV4dC5maWxsUmVjdCgwLCAwLCB2aWRlb0ltYWdlLndpZHRoLCB2aWRlb0ltYWdlLmhlaWdodCk7XG5cbiAgICAgICAgICB2aWRlb1RleHR1cmUgPSBuZXcgVGV4dHVyZSh2aWRlb0ltYWdlKVxuICAgICAgICAgIHZpZGVvVGV4dHVyZS5taW5GaWx0ZXIgPSBMaW5lYXJGaWx0ZXI7XG4gICAgICAgICAgdmlkZW9UZXh0dXJlLm1hZ0ZpbHRlciA9IExpbmVhckZpbHRlcjtcbiAgICAgICAgICBjb25zdCBtb3ZpZU1hdGVyaWFsID0gbmV3IE1lc2hCYXNpY01hdGVyaWFsKHttYXA6IHZpZGVvVGV4dHVyZX0pXG4gICAgICAgICAgdGhpcy5tZXNoLm1hdGVyaWFsID0gbW92aWVNYXRlcmlhbDtcblxuICAgICAgICAgIGNvbnN0IHJlbmRlciA9ICgpID0+IHtcbiAgICAgICAgICAgIGlmICh2aWRlby5yZWFkeVN0YXRlID09PSB2aWRlby5IQVZFX0VOT1VHSF9EQVRBKSB7XG4gICAgICAgICAgICAgIHZpZGVvSW1hZ2VDb250ZXh0LmRyYXdJbWFnZSh2aWRlbywgMCwgMCk7XG4gICAgICAgICAgICAgIGlmICh2aWRlb1RleHR1cmUpXG4gICAgICAgICAgICAgICAgdmlkZW9UZXh0dXJlLm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGNhbWVyYSA9ICh0aGlzLmNvbnRleHQuc2NlbmUuY2hpbGRyZW4uZmluZCh1ID0+IHUuY29uc3RydWN0b3IubmFtZSA9PT0gJ0NhbWVyYVJpZycpKS5jYW1lcmE7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQucmVuZGVyZXIucmVuZGVyKHRoaXMuY29udGV4dC5zY2VuZSwgY2FtZXJhKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhpcy5pbnRlcnZhbFZpZGVvVGV4dHVyZSA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIHJlbmRlcigpO1xuICAgICAgICAgIH0sIDE4MCk7XG5cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIHJlbW92ZSB0aGUgbGluZSBzZWdtZW50cy5cbiAgICAgIGxpbmVzLmZvckVhY2goKGxpbmU6IExpbmVTZWdtZW50cykgPT4ge1xuICAgICAgICBsaW5lLnBhcmVudC5yZW1vdmUobGluZSk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBzZXRDb21wb25lbnQoY29tcG9uZW50OiBTY2VuZUNvbXBvbmVudCkge1xuICAgIHRoaXMuY29tcG9uZW50ID0gY29tcG9uZW50O1xuICAgIHRoaXMuY29udGV4dCA9IGNvbXBvbmVudC5jb250ZXh0O1xuICB9XG5cbiAgc2V0Um9vdFNjZW5lKHJvb3RTY2VuZTogT2JqZWN0M0QpIHtcbiAgICB0aGlzLnJvb3RTY2VuZSA9IHJvb3RTY2VuZTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVHZQbGF5ZXJUeXBlID0gJ21wLlR2UGxheWVyJztcbmV4cG9ydCBjb25zdCBtYWtlVHZQbGF5ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuZXcgVHZQbGF5ZXIoKTtcbn1cbiJdfQ==