@colijnit/homedecorator 255.1.2 → 255.1.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.
- package/app/core/model/homedecorator-settings-options.d.ts +1 -0
- package/app/core/service/homedecorator-connector-adapter.service.d.ts +1 -1
- package/app/core/service/utils.service.d.ts +1 -0
- package/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.scss +2 -4
- package/app/plugins/core3d/items/floor-plane-item.d.ts +8 -1
- package/app/plugins/core3d/items/metadata.d.ts +2 -0
- package/app/plugins/core3d/service/ar.service.d.ts +1 -0
- package/app/plugins/core3d/service/floor-pattern.service.d.ts +26 -0
- package/app/plugins/core3d/service/floor-tile-intersection.service.d.ts +25 -0
- package/app/plugins/core3d/service/outline.service.d.ts +1 -2
- package/app/plugins/core3d/service/post-processing.service.d.ts +6 -0
- package/app/plugins/core3d/service/scene.service.d.ts +4 -1
- package/app/plugins/core3d/service/ssr.service.d.ts +18 -0
- package/app/plugins/model-uploader/model-previewer/model-preview.component.d.ts +40 -3
- package/app/plugins/render/service/new-render.service.d.ts +1 -0
- package/app/plugins/threedselector/threedselector/service/build-furniture.service.d.ts +10 -1
- package/app/plugins/threedselector/threedselector/threedselector.component.d.ts +1 -0
- package/app/plugins/toolbar/toolbar.module.d.ts +2 -1
- package/app/shared/pdf-export/pdf-export.component.d.ts +20 -0
- package/app/shared/pdf-export/pdf-export.component.scss +19 -0
- package/app/shared/pdf-export/pdf-export.module.d.ts +11 -0
- package/assets/icons/pen-ruler.svg +1 -0
- package/assets/icons/xmark_regular.svg +1 -0
- package/bundles/colijnit-homedecorator.umd.js +1195 -174
- package/bundles/colijnit-homedecorator.umd.js.map +1 -1
- package/colijnit-homedecorator-255.1.2.tgz +0 -0
- package/esm2015/app/app.version.js +4 -4
- package/esm2015/app/core/model/homedecorator-settings-options.js +2 -1
- package/esm2015/app/core/model/light-preset.js +11 -7
- package/esm2015/app/core/service/homedecorator-connector-adapter.service.js +4 -6
- package/esm2015/app/core/service/homedecorator-connector.service.js +3 -1
- package/esm2015/app/core/service/utils.service.js +16 -1
- package/esm2015/app/plugins/core3d/components/ar-gui/ar-gui-root/ar-gui-elements/ar-gui-buttons/ar-gui-buttons.component.js +2 -2
- package/esm2015/app/plugins/core3d/items/floor-plane-item.js +25 -2
- package/esm2015/app/plugins/core3d/items/metadata.js +1 -1
- package/esm2015/app/plugins/core3d/service/ar.service.js +14 -1
- package/esm2015/app/plugins/core3d/service/floor-pattern.service.js +156 -0
- package/esm2015/app/plugins/core3d/service/floor-tile-intersection.service.js +122 -0
- package/esm2015/app/plugins/core3d/service/floor.service.js +5 -2
- package/esm2015/app/plugins/core3d/service/outline.service.js +9 -8
- package/esm2015/app/plugins/core3d/service/post-processing.service.js +77 -22
- package/esm2015/app/plugins/core3d/service/scene.service.js +30 -13
- package/esm2015/app/plugins/core3d/service/ssr.service.js +53 -0
- package/esm2015/app/plugins/lite-selector/lite-selector/component/selections-summary/selections-summary.component.js +3 -3
- package/esm2015/app/plugins/model-uploader/model-previewer/model-preview.component.js +335 -79
- package/esm2015/app/plugins/model-uploader/model-uploader/model-uploader.component.js +3 -2
- package/esm2015/app/plugins/product-catalog/product-catalog/product-catalog.component.js +3 -2
- package/esm2015/app/plugins/render/service/new-render.service.js +37 -13
- package/esm2015/app/plugins/threedselector/threedselector/service/build-furniture.service.js +135 -5
- package/esm2015/app/plugins/threedselector/threedselector/threedselector.component.js +34 -8
- package/esm2015/app/plugins/toolbar/toolbar/toolbar.component.js +9 -25
- package/esm2015/app/plugins/toolbar/toolbar.module.js +8 -4
- package/esm2015/app/shared/pdf-export/pdf-export.component.js +86 -0
- package/esm2015/app/shared/pdf-export/pdf-export.module.js +38 -0
- package/fesm2015/colijnit-homedecorator.js +1156 -181
- package/fesm2015/colijnit-homedecorator.js.map +1 -1
- package/package.json +2 -2
- package/assets/hdri/ground_MASK.jpg +0 -0
|
@@ -1,34 +1,17 @@
|
|
|
1
1
|
import { Injectable } from '@angular/core';
|
|
2
|
-
import { Color } from 'three';
|
|
2
|
+
import { Color, DepthFormat, DepthTexture, NearestFilter, RGBAFormat, SRGBColorSpace, UnsignedIntType, WebGLRenderTarget } from 'three';
|
|
3
3
|
import { EffectComposer } from 'three/examples/jsm/postprocessing/EffectComposer';
|
|
4
4
|
import GUI from 'three/examples/jsm/libs/lil-gui.module.min';
|
|
5
5
|
import { N8AOPass } from 'n8ao';
|
|
6
|
-
import { SMAAPass } from 'three/examples/jsm/postprocessing/SMAAPass';
|
|
7
6
|
import { ConfigurationKey } from '../../../core/enum/configuration-key.enum';
|
|
7
|
+
import { TAARenderPass } from 'three/examples/jsm/postprocessing/TAARenderPass';
|
|
8
|
+
import { OutputPass } from 'three/examples/jsm/postprocessing/OutputPass';
|
|
9
|
+
import { RenderPass } from 'three/examples/jsm/postprocessing/RenderPass';
|
|
8
10
|
import * as i0 from "@angular/core";
|
|
9
11
|
import * as i1 from "../../../core/service/configuration.service";
|
|
10
12
|
export class PostProcessingService {
|
|
11
13
|
constructor(_configurationService) {
|
|
12
14
|
this._configurationService = _configurationService;
|
|
13
|
-
this._subs = [];
|
|
14
|
-
this._subs.push(this._configurationService.onChange.subscribe((changed) => {
|
|
15
|
-
if (ConfigurationKey.ShowPostProcessingSettings in changed) {
|
|
16
|
-
this._showHideGui(changed[ConfigurationKey.ShowPostProcessingSettings]);
|
|
17
|
-
}
|
|
18
|
-
}));
|
|
19
|
-
}
|
|
20
|
-
ngOnDestroy() {
|
|
21
|
-
this._subs.forEach(s => s.unsubscribe());
|
|
22
|
-
}
|
|
23
|
-
init(renderer, scene, camera, width, height) {
|
|
24
|
-
this._renderer = renderer;
|
|
25
|
-
this._scene = scene;
|
|
26
|
-
this._camera = camera;
|
|
27
|
-
this._composer = new EffectComposer(renderer);
|
|
28
|
-
this._n8aoPass = new N8AOPass(scene, camera, width, height);
|
|
29
|
-
const smaaPass = new SMAAPass(width, height);
|
|
30
|
-
this._composer.addPass(this._n8aoPass);
|
|
31
|
-
this._composer.addPass(smaaPass);
|
|
32
15
|
this._effectController = {
|
|
33
16
|
aoSamples: 32.0,
|
|
34
17
|
denoiseSamples: 8.0,
|
|
@@ -46,7 +29,51 @@ export class PostProcessingService {
|
|
|
46
29
|
stencil: true,
|
|
47
30
|
accumulate: false
|
|
48
31
|
};
|
|
32
|
+
this._subs = [];
|
|
33
|
+
this._subs.push(this._configurationService.onChange.subscribe((changed) => {
|
|
34
|
+
if (ConfigurationKey.ShowPostProcessingSettings in changed) {
|
|
35
|
+
this._showHideGui(changed[ConfigurationKey.ShowPostProcessingSettings]);
|
|
36
|
+
}
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
ngOnDestroy() {
|
|
40
|
+
this._subs.forEach(s => s.unsubscribe());
|
|
41
|
+
}
|
|
42
|
+
init(renderer, scene, camera, width, height) {
|
|
43
|
+
this._renderer = renderer;
|
|
44
|
+
this._scene = scene;
|
|
45
|
+
this._camera = camera;
|
|
46
|
+
this._renderTarget = new WebGLRenderTarget(width, height, {
|
|
47
|
+
minFilter: NearestFilter,
|
|
48
|
+
magFilter: NearestFilter,
|
|
49
|
+
format: RGBAFormat,
|
|
50
|
+
colorSpace: SRGBColorSpace
|
|
51
|
+
});
|
|
52
|
+
this._renderTarget.samples = 4;
|
|
53
|
+
this._renderTarget.depthTexture = new DepthTexture(width, height, UnsignedIntType);
|
|
54
|
+
this._renderTarget.depthTexture.format = DepthFormat;
|
|
55
|
+
this._composer = new EffectComposer(this._renderer, this._renderTarget);
|
|
56
|
+
this._n8aoPass = new N8AOPass(scene, camera, width, height);
|
|
57
|
+
this._n8aoPass.configuration.gammaCorrection = false;
|
|
58
|
+
this._n8aoPass.debugMode = true;
|
|
59
|
+
// const smaaPass = new SMAAPass(width, height);
|
|
60
|
+
// this._composer.addPass(smaaPass);
|
|
61
|
+
// const fxaaPass = new ShaderPass(FXAAShader);
|
|
62
|
+
// const pixelRatio = this._renderer.getPixelRatio();
|
|
63
|
+
// fxaaPass.material.uniforms[ 'resolution' ].value.x = 1 / (width * pixelRatio);
|
|
64
|
+
// fxaaPass.material.uniforms[ 'resolution' ].value.y = 1 / (height * pixelRatio);
|
|
65
|
+
this._outputPass = new OutputPass();
|
|
66
|
+
this._taaRenderPass = new TAARenderPass(this._scene, this._camera, 0x000000, 0);
|
|
67
|
+
this._taaRenderPass.unbiased = false;
|
|
68
|
+
this._taaRenderPass.sampleLevel = 4;
|
|
69
|
+
this._renderPass = new RenderPass(this._scene, this._camera);
|
|
70
|
+
// this._renderPass.enabled = false;
|
|
71
|
+
this._composer.addPass(this._renderPass);
|
|
72
|
+
this._composer.addPass(this._taaRenderPass);
|
|
73
|
+
this._composer.addPass(this._n8aoPass);
|
|
74
|
+
this._composer.addPass(this._outputPass);
|
|
49
75
|
this._createGui();
|
|
76
|
+
this._createGuiTaaPass();
|
|
50
77
|
}
|
|
51
78
|
_updatePass() {
|
|
52
79
|
this._n8aoPass.configuration.aoRadius = this._effectController.aoRadius;
|
|
@@ -66,6 +93,34 @@ export class PostProcessingService {
|
|
|
66
93
|
this._n8aoPass.configuration.accumulate = this._effectController.accumulate;
|
|
67
94
|
this.render();
|
|
68
95
|
}
|
|
96
|
+
_createGuiTaaPass() {
|
|
97
|
+
this._taaPassGui = new GUI();
|
|
98
|
+
this._taaPassGui.hide();
|
|
99
|
+
const param = { TAAEnabled: '1', TAASampleLevel: 0 };
|
|
100
|
+
this._taaPassGui.add(param, 'TAAEnabled', {
|
|
101
|
+
'Disabled': '0',
|
|
102
|
+
'Enabled': '1'
|
|
103
|
+
}).onFinishChange(() => {
|
|
104
|
+
if (this._taaRenderPass) {
|
|
105
|
+
this._taaRenderPass.enabled = (param.TAAEnabled === '1');
|
|
106
|
+
}
|
|
107
|
+
this.render();
|
|
108
|
+
});
|
|
109
|
+
this._taaPassGui.add(param, 'TAASampleLevel', {
|
|
110
|
+
'Level 0: 1 Sample': 0,
|
|
111
|
+
'Level 1: 2 Samples': 1,
|
|
112
|
+
'Level 2: 4 Samples': 2,
|
|
113
|
+
'Level 3: 8 Samples': 3,
|
|
114
|
+
'Level 4: 16 Samples': 4,
|
|
115
|
+
'Level 5: 32 Samples': 5
|
|
116
|
+
}).onFinishChange(() => {
|
|
117
|
+
if (this._taaRenderPass) {
|
|
118
|
+
this._taaRenderPass.sampleLevel = param.TAASampleLevel;
|
|
119
|
+
}
|
|
120
|
+
this.render();
|
|
121
|
+
});
|
|
122
|
+
this._taaPassGui.open();
|
|
123
|
+
}
|
|
69
124
|
setSize(width, height) {
|
|
70
125
|
this._composer.setSize(width, height);
|
|
71
126
|
}
|
|
@@ -129,4 +184,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
|
|
|
129
184
|
providedIn: 'root'
|
|
130
185
|
}]
|
|
131
186
|
}], ctorParameters: function () { return [{ type: i1.ConfigurationService }]; } });
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1wcm9jZXNzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL2NvcmUzZC9zZXJ2aWNlL3Bvc3QtcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUFDLEtBQUssRUFBMEMsTUFBTSxPQUFPLENBQUM7QUFDckUsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLGtEQUFrRCxDQUFDO0FBQ2hGLE9BQU8sR0FBRyxNQUFNLDRDQUE0QyxDQUFDO0FBQzdELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLDRDQUE0QyxDQUFDO0FBRXBFLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDOzs7QUFPM0UsTUFBTSxPQUFPLHFCQUFxQjtJQVdoQyxZQUNVLHFCQUEyQztRQUEzQywwQkFBcUIsR0FBckIscUJBQXFCLENBQXNCO1FBSDdDLFVBQUssR0FBbUIsRUFBRSxDQUFDO1FBS2pDLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUNiLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBMEIsRUFBRSxFQUFFO1lBQzNFLElBQUksZ0JBQWdCLENBQUMsMEJBQTBCLElBQUksT0FBTyxFQUFFO2dCQUMxRCxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUM7YUFDekU7UUFDSCxDQUFDLENBQUMsQ0FDSCxDQUFDO0lBQ0osQ0FBQztJQUVELFdBQVc7UUFDVCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENB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QUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pKLENBQUM7O21IQXRJVSxxQkFBcUI7dUhBQXJCLHFCQUFxQixjQUZwQixNQUFNOzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7Q29sb3IsIFBlcnNwZWN0aXZlQ2FtZXJhLCBTY2VuZSwgV2ViR0xSZW5kZXJlcn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0VmZmVjdENvbXBvc2VyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvRWZmZWN0Q29tcG9zZXInO1xyXG5pbXBvcnQgR1VJIGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9saWJzL2xpbC1ndWkubW9kdWxlLm1pbic7XHJcbmltcG9ydCB7TjhBT1Bhc3N9IGZyb20gJ244YW8nO1xyXG5pbXBvcnQge1NNQUFQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvU01BQVBhc3MnO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25EYXRhfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jb25maWd1cmF0aW9uLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBQb3N0UHJvY2Vzc2luZ1NlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwcml2YXRlIF9jb21wb3NlcjogRWZmZWN0Q29tcG9zZXI7XHJcbiAgcHJpdmF0ZSBfbjhhb1Bhc3M6IE44QU9QYXNzO1xyXG4gIHByaXZhdGUgX3NjZW5lOiBTY2VuZTtcclxuICBwcml2YXRlIF9yZW5kZXJlcjogV2ViR0xSZW5kZXJlcjtcclxuICBwcml2YXRlIF9jYW1lcmE6IFBlcnNwZWN0aXZlQ2FtZXJhO1xyXG4gIHByaXZhdGUgX2VmZmVjdENvbnRyb2xsZXI7XHJcbiAgcHJpdmF0ZSBfcG9zdFByb2Nlc3NpbmdHdWk6IEdVSTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKENvbmZpZ3VyYXRpb25LZXkuU2hvd1Bvc3RQcm9jZXNzaW5nU2V0dGluZ3MgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc2hvd0hpZGVHdWkoY2hhbmdlZFtDb25maWd1cmF0aW9uS2V5LlNob3dQb3N0UHJvY2Vzc2luZ1NldHRpbmdzXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0KHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUsIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5fc2NlbmUgPSBzY2VuZTtcclxuICAgIHRoaXMuX2NhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICB0aGlzLl9jb21wb3NlciA9IG5ldyBFZmZlY3RDb21wb3NlcihyZW5kZXJlcik7XHJcbiAgICB0aGlzLl9uOGFvUGFzcyA9IG5ldyBOOEFPUGFzcyhzY2VuZSwgY2FtZXJhLCB3aWR0aCwgaGVpZ2h0KTtcclxuICAgIGNvbnN0IHNtYWFQYXNzID0gbmV3IFNNQUFQYXNzKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgdGhpcy5fY29tcG9zZXIuYWRkUGFzcyh0aGlzLl9uOGFvUGFzcyk7XHJcbiAgICB0aGlzLl9jb21wb3Nlci5hZGRQYXNzKHNtYWFQYXNzKTtcclxuXHJcbiAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyID0ge1xyXG4gICAgICBhb1NhbXBsZXM6IDMyLjAsXHJcbiAgICAgIGRlbm9pc2VTYW1wbGVzOiA4LjAsXHJcbiAgICAgIGRlbm9pc2VSYWRpdXM6IDEyLjAsXHJcbiAgICAgIGFvUmFkaXVzOiA1LjAsXHJcbiAgICAgIGRpc3RhbmNlRmFsbG9mZjogMS4wLFxyXG4gICAgICBzY3JlZW5TcGFjZVJhZGl1czogZmFsc2UsXHJcbiAgICAgIGhhbGZSZXM6IGZhbHNlLFxyXG4gICAgICBkZXB0aEF3YXJlVXBzYW1wbGluZzogdHJ1ZSxcclxuICAgICAgdHJhbnNwYXJlbmN5QXdhcmU6IHRydWUsXHJcbiAgICAgIGludGVuc2l0eTogMi41LFxyXG4gICAgICByZW5kZXJNb2RlOiAnQ29tYmluZWQnLFxyXG4gICAgICBjb2xvcjogWzAsIDAsIDBdLFxyXG4gICAgICBjb2xvck11bHRpcGx5OiB0cnVlLFxyXG4gICAgICBzdGVuY2lsOiB0cnVlLFxyXG4gICAgICBhY2N1bXVsYXRlOiBmYWxzZVxyXG4gICAgfTtcclxuICAgIHRoaXMuX2NyZWF0ZUd1aSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlUGFzcygpOiB2b2lkIHtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uYW9SYWRpdXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvUmFkaXVzO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5kaXN0YW5jZUZhbGxvZmYgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRpc3RhbmNlRmFsbG9mZjtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24udHJhbnNwYXJlbmN5QXdhcmUgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLnRyYW5zcGFyZW5jeUF3YXJlO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5pbnRlbnNpdHkgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmludGVuc2l0eTtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uYW9TYW1wbGVzID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5hb1NhbXBsZXM7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmRlbm9pc2VSYWRpdXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRlbm9pc2VSYWRpdXM7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmRlbm9pc2VTYW1wbGVzID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5kZW5vaXNlU2FtcGxlcztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uc3RlbmNpbCA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuc3RlbmNpbDtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24ucmVuZGVyTW9kZSA9IFsnQ29tYmluZWQnLCAnQU8nLCAnTm8gQU8nLCAnU3BsaXQnLCAnU3BsaXQgQU8nXS5pbmRleE9mKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIucmVuZGVyTW9kZSk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmNvbG9yID0gbmV3IENvbG9yKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuY29sb3JbMF0sIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuY29sb3JbMV0sIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuY29sb3JbMl0pO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5zY3JlZW5TcGFjZVJhZGl1cyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuc2NyZWVuU3BhY2VSYWRpdXM7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmhhbGZSZXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmhhbGZSZXM7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmRlcHRoQXdhcmVVcHNhbXBsaW5nID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5kZXB0aEF3YXJlVXBzYW1wbGluZztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uY29sb3JNdWx0aXBseSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuY29sb3JNdWx0aXBseTtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uYWNjdW11bGF0ZSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYWNjdW11bGF0ZTtcclxuICAgIHRoaXMucmVuZGVyKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgdGhpcy5fY29tcG9zZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXIoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21wb3Nlci5yZW5kZXIoKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzaG93R3VpKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuc2hvdyh0cnVlKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBoaWRlR3VpKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuaGlkZSgpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfc2hvd0hpZGVHdWkoc2hvdzogYm9vbGVhbik6IHZvaWQge1xyXG4gICAgc2hvdyA/IHRoaXMuc2hvd0d1aSgpIDogdGhpcy5oaWRlR3VpKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9jcmVhdGVHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aSA9IG5ldyBHVUkoKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmhpZGUoKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnYW9TYW1wbGVzJywgMS4wLCA2NC4wLCAxLjApLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2Rlbm9pc2VTYW1wbGVzJywgMS4wLCA2NC4wLCAxLjApLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2Rlbm9pc2VSYWRpdXMnLCAwLjAsIDI0LjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICBjb25zdCBhb3IgPSB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2FvUmFkaXVzJywgMS4wLCAxMC4wLCAwLjAxKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgY29uc3QgZGYgPSB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2Rpc3RhbmNlRmFsbG9mZicsIDAuMCwgMTAuMCwgMC4wMSkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnc2NyZWVuU3BhY2VSYWRpdXMnKS5vbkNoYW5nZSgodmFsdWUpID0+IHtcclxuICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5hb1JhZGl1cyA9IDQ4LjA7XHJcbiAgICAgICAgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5kaXN0YW5jZUZhbGxvZmYgPSAwLjI7XHJcbiAgICAgICAgYW9yLl9taW4gPSAwO1xyXG4gICAgICAgIGFvci5fbWF4ID0gNjQ7XHJcbiAgICAgICAgZGYuX21pbiA9IDA7XHJcbiAgICAgICAgZGYuX21heCA9IDE7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5hb1JhZGl1cyA9IDUuMDtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRpc3RhbmNlRmFsbG9mZiA9IDEuMDtcclxuICAgICAgICBhb3IuX21pbiA9IDE7XHJcbiAgICAgICAgYW9yLl9tYXggPSAxMDtcclxuICAgICAgICBkZi5fbWluID0gMDtcclxuICAgICAgICBkZi5fbWF4ID0gMTA7XHJcbiAgICAgIH1cclxuICAgICAgYW9yLnVwZGF0ZURpc3BsYXkoKTtcclxuICAgICAgZGYudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgICB0aGlzLl91cGRhdGVQYXNzKCk7XHJcbiAgICB9KTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnaGFsZlJlcycpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3RyYW5zcGFyZW5jeUF3YXJlJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGVwdGhBd2FyZVVwc2FtcGxpbmcnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdzdGVuY2lsJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnaW50ZW5zaXR5JywgMC4wLCAxMC4wLCAwLjAxKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkQ29sb3IodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2NvbG9yJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnY29sb3JNdWx0aXBseScpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ2FjY3VtdWxhdGUnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdyZW5kZXJNb2RlJywgWydDb21iaW5lZCcsICdBTycsICdObyBBTycsICdTcGxpdCcsICdTcGxpdCBBTyddKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
187
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdC1wcm9jZXNzaW5nLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL2NvcmUzZC9zZXJ2aWNlL3Bvc3QtcHJvY2Vzc2luZy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUNMLEtBQUssRUFDTCxXQUFXLEVBQUUsWUFBWSxFQUN6QixhQUFhLEVBRWIsVUFBVSxFQUVWLGNBQWMsRUFBRSxlQUFlLEVBRS9CLGlCQUFpQixFQUNsQixNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxrREFBa0QsQ0FBQztBQUNoRixPQUFPLEdBQUcsTUFBTSw0Q0FBNEMsQ0FBQztBQUM3RCxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBRTlCLE9BQU8sRUFBQyxnQkFBZ0IsRUFBQyxNQUFNLDJDQUEyQyxDQUFDO0FBRzNFLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpREFBaUQsQ0FBQztBQUM5RSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sOENBQThDLENBQUM7QUFDeEUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLDhDQUE4QyxDQUFDOzs7QUFReEUsTUFBTSxPQUFPLHFCQUFxQjtJQWdDaEMsWUFDVSxxQkFBMkM7UUFBM0MsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUFzQjtRQXRCN0Msc0JBQWlCLEdBQUc7WUFDMUIsU0FBUyxFQUFFLElBQUk7WUFDZixjQUFjLEVBQUUsR0FBRztZQUNuQixhQUFhLEVBQUUsSUFBSTtZQUNuQixRQUFRLEVBQUUsR0FBRztZQUNiLGVBQWUsRUFBRSxHQUFHO1lBQ3BCLGlCQUFpQixFQUFFLEtBQUs7WUFDeEIsT0FBTyxFQUFFLEtBQUs7WUFDZCxvQkFBb0IsRUFBRSxJQUFJO1lBQzFCLGlCQUFpQixFQUFFLElBQUk7WUFDdkIsU0FBUyxFQUFFLEdBQUc7WUFDZCxVQUFVLEVBQUUsVUFBVTtZQUN0QixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNoQixhQUFhLEVBQUUsSUFBSTtZQUNuQixPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSxLQUFLO1NBQ2xCLENBQUM7UUFHTSxVQUFLLEdBQW1CLEVBQUUsQ0FBQztRQUtqQyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDYixJQUFJLENBQUMscUJBQXFCLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQTBCLEVBQUUsRUFBRTtZQUMzRSxJQUFJLGdCQUFnQixDQUFDLDBCQUEwQixJQUFJLE9BQU8sRUFBRTtnQkFDMUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsMEJBQTBCLENBQUMsQ0FBQyxDQUFDO2FBQ3pFO1FBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQztJQUNKLENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0sSUFBSSxDQUFDLFFBQXVCLEVBQUUsS0FBWSxFQUFFLE1BQXlCLEVBQUUsS0FBYSxFQUFFLE1BQWM7UUFDekcsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7UUFDMUIsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7UUFDcEIsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7UUFFdEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUU7WUFDeEQsU0FBUyxFQUFFLGFBQWE7WUFDeEIsU0FBUyxFQUFFLGFBQWE7WUFDeEIsTUFBTSxFQUFFLFVBQVU7WUFDbEIsVUFBVSxFQUFFLGNBQWM7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLEtBQUssRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbkYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQztRQUNyRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hFLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsU0FBUyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDaEMsZ0RBQWdEO1FBQ2hELG9DQUFvQztRQUVwQywrQ0FBK0M7UUFDL0MscURBQXFEO1FBQ3JELGlGQUFpRjtRQUNqRixrRkFBa0Y7UUFFbEYsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBRXBDLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBRXBDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxVQUFVLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0Qsb0NBQW9DO1FBRXBDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUV6QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVPLFdBQVc7UUFDakIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLENBQUM7UUFDeEUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUM7UUFDdEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDO1FBQzFGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1FBQzFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsU0FBUyxDQUFDO1FBQzFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsYUFBYSxDQUFDO1FBQ2xGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsY0FBYyxDQUFDO1FBQ3BGLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDO1FBQ3RFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3RJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2xKLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUMxRixJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztRQUN0RSxJQUFJLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsb0JBQW9CLENBQUM7UUFDaEcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUM7UUFDbEYsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxVQUFVLENBQUM7UUFDNUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsTUFBTSxLQUFLLEdBQUcsRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLGNBQWMsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUNyRCxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBRSxLQUFLLEVBQUUsWUFBWSxFQUFFO1lBQ3pDLFVBQVUsRUFBRSxHQUFHO1lBQ2YsU0FBUyxFQUFFLEdBQUc7U0FDZixDQUFFLENBQUMsY0FBYyxDQUFFLEdBQUcsRUFBRTtZQUV2QixJQUFLLElBQUksQ0FBQyxjQUFjLEVBQUc7Z0JBQ3pCLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxHQUFHLENBQUUsS0FBSyxDQUFDLFVBQVUsS0FBSyxHQUFHLENBQUUsQ0FBQzthQUM1RDtZQUNELElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUUsQ0FBQztRQUVKLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFFLEtBQUssRUFBRSxnQkFBZ0IsRUFBRTtZQUM3QyxtQkFBbUIsRUFBRSxDQUFDO1lBQ3RCLG9CQUFvQixFQUFFLENBQUM7WUFDdkIsb0JBQW9CLEVBQUUsQ0FBQztZQUN2QixvQkFBb0IsRUFBRSxDQUFDO1lBQ3ZCLHFCQUFxQixFQUFFLENBQUM7WUFDeEIscUJBQXFCLEVBQUUsQ0FBQztTQUN6QixDQUFFLENBQUMsY0FBYyxDQUFFLEdBQUcsRUFBRTtZQUV2QixJQUFLLElBQUksQ0FBQyxjQUFjLEVBQUc7Z0JBRXpCLElBQUksQ0FBQyxjQUFjLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQyxjQUFjLENBQUM7YUFFeEQ7WUFDRCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDaEIsQ0FBQyxDQUFFLENBQUM7UUFFSixJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTSxPQUFPLENBQUMsS0FBYSxFQUFFLE1BQWM7UUFDMUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMxQixDQUFDO0lBRU0sT0FBTztRQUNaLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVNLE9BQU87UUFDWixJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVPLFlBQVksQ0FBQyxJQUFhO1FBQ2hDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDekMsQ0FBQztJQUVPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7UUFDcEMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNwSCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN6SCxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxlQUFlLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDekgsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2hJLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3RJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDMUYsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLEdBQUcsR0FBRyxDQUFDO2dCQUM3QyxHQUFHLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDYixHQUFHLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztnQkFDZCxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztnQkFDWixFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQzthQUNiO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDO2dCQUN0QyxJQUFJLENBQUMsaUJBQWlCLENBQUMsZUFBZSxHQUFHLEdBQUcsQ0FBQztnQkFDN0MsR0FBRyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ2IsR0FBRyxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7Z0JBQ2QsRUFBRSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7Z0JBQ1osRUFBRSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7YUFDZDtZQUNELEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNwQixFQUFFLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ2xHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLG1CQUFtQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQzVHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLHNCQUFzQixDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQy9HLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUNsRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxXQUFXLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckgsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBQ3JHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLGlCQUFpQixFQUFFLGVBQWUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxZQUFZLENBQUMsQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDckcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsWUFBWSxFQUFFLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO0lBQ3pKLENBQUM7O21IQTNNVSxxQkFBcUI7dUhBQXJCLHFCQUFxQixjQUZwQixNQUFNOzRGQUVQLHFCQUFxQjtrQkFIakMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29sb3IsXHJcbiAgRGVwdGhGb3JtYXQsIERlcHRoVGV4dHVyZSxcclxuICBOZWFyZXN0RmlsdGVyLFxyXG4gIFBlcnNwZWN0aXZlQ2FtZXJhLFxyXG4gIFJHQkFGb3JtYXQsXHJcbiAgU2NlbmUsXHJcbiAgU1JHQkNvbG9yU3BhY2UsIFVuc2lnbmVkSW50VHlwZSxcclxuICBXZWJHTFJlbmRlcmVyLFxyXG4gIFdlYkdMUmVuZGVyVGFyZ2V0XHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0VmZmVjdENvbXBvc2VyfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvRWZmZWN0Q29tcG9zZXInO1xyXG5pbXBvcnQgR1VJIGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9saWJzL2xpbC1ndWkubW9kdWxlLm1pbic7XHJcbmltcG9ydCB7TjhBT1Bhc3N9IGZyb20gJ244YW8nO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb25EYXRhfSBmcm9tICcuLi8uLi8uLi9jb3JlL2ludGVyZmFjZS9jb25maWd1cmF0aW9uLWRhdGEuaW50ZXJmYWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uS2V5fSBmcm9tICcuLi8uLi8uLi9jb3JlL2VudW0vY29uZmlndXJhdGlvbi1rZXkuZW51bSc7XHJcbmltcG9ydCB7U3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7VEFBUmVuZGVyUGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL1RBQVJlbmRlclBhc3MnO1xyXG5pbXBvcnQge091dHB1dFBhc3N9IGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9wb3N0cHJvY2Vzc2luZy9PdXRwdXRQYXNzJztcclxuaW1wb3J0IHtSZW5kZXJQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvUmVuZGVyUGFzcyc7XHJcbmltcG9ydCB7RlhBQVNoYWRlcn0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3NoYWRlcnMvRlhBQVNoYWRlcic7XHJcbmltcG9ydCB7U2hhZGVyUGFzc30gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL3Bvc3Rwcm9jZXNzaW5nL1NoYWRlclBhc3MnO1xyXG5pbXBvcnQge1NNQUFQYXNzfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcG9zdHByb2Nlc3NpbmcvU01BQVBhc3MnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgUG9zdFByb2Nlc3NpbmdTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcclxuXHJcbiAgcHJpdmF0ZSBfY29tcG9zZXI6IEVmZmVjdENvbXBvc2VyO1xyXG4gIHByaXZhdGUgX244YW9QYXNzOiBOOEFPUGFzcztcclxuICBwcml2YXRlIF90YWFSZW5kZXJQYXNzOiBUQUFSZW5kZXJQYXNzO1xyXG4gIHByaXZhdGUgX291dHB1dFBhc3M6IE91dHB1dFBhc3M7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyUGFzczogUmVuZGVyUGFzcztcclxuICBwcml2YXRlIF9zY2VuZTogU2NlbmU7XHJcbiAgcHJpdmF0ZSBfcmVuZGVyZXI6IFdlYkdMUmVuZGVyZXI7XHJcbiAgcHJpdmF0ZSBfY2FtZXJhOiBQZXJzcGVjdGl2ZUNhbWVyYTtcclxuICBwcml2YXRlIF9yZW5kZXJUYXJnZXQ6IFdlYkdMUmVuZGVyVGFyZ2V0O1xyXG4gIHByaXZhdGUgX2VmZmVjdENvbnRyb2xsZXIgPSB7XHJcbiAgICBhb1NhbXBsZXM6IDMyLjAsXHJcbiAgICBkZW5vaXNlU2FtcGxlczogOC4wLFxyXG4gICAgZGVub2lzZVJhZGl1czogMTIuMCxcclxuICAgIGFvUmFkaXVzOiA1LjAsXHJcbiAgICBkaXN0YW5jZUZhbGxvZmY6IDEuMCxcclxuICAgIHNjcmVlblNwYWNlUmFkaXVzOiBmYWxzZSxcclxuICAgIGhhbGZSZXM6IGZhbHNlLFxyXG4gICAgZGVwdGhBd2FyZVVwc2FtcGxpbmc6IHRydWUsXHJcbiAgICB0cmFuc3BhcmVuY3lBd2FyZTogdHJ1ZSxcclxuICAgIGludGVuc2l0eTogMi41LFxyXG4gICAgcmVuZGVyTW9kZTogJ0NvbWJpbmVkJyxcclxuICAgIGNvbG9yOiBbMCwgMCwgMF0sXHJcbiAgICBjb2xvck11bHRpcGx5OiB0cnVlLFxyXG4gICAgc3RlbmNpbDogdHJ1ZSxcclxuICAgIGFjY3VtdWxhdGU6IGZhbHNlXHJcbiAgfTtcclxuICBwcml2YXRlIF9wb3N0UHJvY2Vzc2luZ0d1aTogR1VJO1xyXG4gIHByaXZhdGUgX3RhYVBhc3NHdWk6IEdVSTtcclxuICBwcml2YXRlIF9zdWJzOiBTdWJzY3JpcHRpb25bXSA9IFtdO1xyXG5cclxuICBjb25zdHJ1Y3RvcihcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZVxyXG4gICkge1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9jb25maWd1cmF0aW9uU2VydmljZS5vbkNoYW5nZS5zdWJzY3JpYmUoKGNoYW5nZWQ6IENvbmZpZ3VyYXRpb25EYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKENvbmZpZ3VyYXRpb25LZXkuU2hvd1Bvc3RQcm9jZXNzaW5nU2V0dGluZ3MgaW4gY2hhbmdlZCkge1xyXG4gICAgICAgICAgdGhpcy5fc2hvd0hpZGVHdWkoY2hhbmdlZFtDb25maWd1cmF0aW9uS2V5LlNob3dQb3N0UHJvY2Vzc2luZ1NldHRpbmdzXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIG5nT25EZXN0cm95KCkge1xyXG4gICAgdGhpcy5fc3Vicy5mb3JFYWNoKHMgPT4gcy51bnN1YnNjcmliZSgpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBpbml0KHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUsIGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmEsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9yZW5kZXJlciA9IHJlbmRlcmVyO1xyXG4gICAgdGhpcy5fc2NlbmUgPSBzY2VuZTtcclxuICAgIHRoaXMuX2NhbWVyYSA9IGNhbWVyYTtcclxuXHJcbiAgICB0aGlzLl9yZW5kZXJUYXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQod2lkdGgsIGhlaWdodCwge1xyXG4gICAgICBtaW5GaWx0ZXI6IE5lYXJlc3RGaWx0ZXIsXHJcbiAgICAgIG1hZ0ZpbHRlcjogTmVhcmVzdEZpbHRlcixcclxuICAgICAgZm9ybWF0OiBSR0JBRm9ybWF0LFxyXG4gICAgICBjb2xvclNwYWNlOiBTUkdCQ29sb3JTcGFjZVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLl9yZW5kZXJUYXJnZXQuc2FtcGxlcyA9IDQ7XHJcbiAgICB0aGlzLl9yZW5kZXJUYXJnZXQuZGVwdGhUZXh0dXJlID0gbmV3IERlcHRoVGV4dHVyZSh3aWR0aCwgaGVpZ2h0LCBVbnNpZ25lZEludFR5cGUpO1xyXG4gICAgdGhpcy5fcmVuZGVyVGFyZ2V0LmRlcHRoVGV4dHVyZS5mb3JtYXQgPSBEZXB0aEZvcm1hdDtcclxuICAgIHRoaXMuX2NvbXBvc2VyID0gbmV3IEVmZmVjdENvbXBvc2VyKHRoaXMuX3JlbmRlcmVyLCB0aGlzLl9yZW5kZXJUYXJnZXQpO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MgPSBuZXcgTjhBT1Bhc3Moc2NlbmUsIGNhbWVyYSwgd2lkdGgsIGhlaWdodCk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmdhbW1hQ29ycmVjdGlvbiA9IGZhbHNlO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuZGVidWdNb2RlID0gdHJ1ZTtcclxuICAgIC8vIGNvbnN0IHNtYWFQYXNzID0gbmV3IFNNQUFQYXNzKHdpZHRoLCBoZWlnaHQpO1xyXG4gICAgLy8gdGhpcy5fY29tcG9zZXIuYWRkUGFzcyhzbWFhUGFzcyk7XHJcblxyXG4gICAgLy8gY29uc3QgZnhhYVBhc3MgPSBuZXcgU2hhZGVyUGFzcyhGWEFBU2hhZGVyKTtcclxuICAgIC8vIGNvbnN0IHBpeGVsUmF0aW8gPSB0aGlzLl9yZW5kZXJlci5nZXRQaXhlbFJhdGlvKCk7XHJcbiAgICAvLyBmeGFhUGFzcy5tYXRlcmlhbC51bmlmb3Jtc1sgJ3Jlc29sdXRpb24nIF0udmFsdWUueCA9IDEgLyAod2lkdGggKiBwaXhlbFJhdGlvKTtcclxuICAgIC8vIGZ4YWFQYXNzLm1hdGVyaWFsLnVuaWZvcm1zWyAncmVzb2x1dGlvbicgXS52YWx1ZS55ID0gMSAvIChoZWlnaHQgKiBwaXhlbFJhdGlvKTtcclxuXHJcbiAgICB0aGlzLl9vdXRwdXRQYXNzID0gbmV3IE91dHB1dFBhc3MoKTtcclxuXHJcbiAgICB0aGlzLl90YWFSZW5kZXJQYXNzID0gbmV3IFRBQVJlbmRlclBhc3ModGhpcy5fc2NlbmUsIHRoaXMuX2NhbWVyYSwgMHgwMDAwMDAsIDApO1xyXG4gICAgdGhpcy5fdGFhUmVuZGVyUGFzcy51bmJpYXNlZCA9IGZhbHNlO1xyXG4gICAgdGhpcy5fdGFhUmVuZGVyUGFzcy5zYW1wbGVMZXZlbCA9IDQ7XHJcblxyXG4gICAgdGhpcy5fcmVuZGVyUGFzcyA9IG5ldyBSZW5kZXJQYXNzKHRoaXMuX3NjZW5lLCB0aGlzLl9jYW1lcmEpO1xyXG4gICAgLy8gdGhpcy5fcmVuZGVyUGFzcy5lbmFibGVkID0gZmFsc2U7XHJcblxyXG4gICAgdGhpcy5fY29tcG9zZXIuYWRkUGFzcyh0aGlzLl9yZW5kZXJQYXNzKTtcclxuICAgIHRoaXMuX2NvbXBvc2VyLmFkZFBhc3ModGhpcy5fdGFhUmVuZGVyUGFzcyk7XHJcbiAgICB0aGlzLl9jb21wb3Nlci5hZGRQYXNzKHRoaXMuX244YW9QYXNzKTtcclxuICAgIHRoaXMuX2NvbXBvc2VyLmFkZFBhc3ModGhpcy5fb3V0cHV0UGFzcyk7XHJcblxyXG4gICAgdGhpcy5fY3JlYXRlR3VpKCk7XHJcbiAgICB0aGlzLl9jcmVhdGVHdWlUYWFQYXNzKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF91cGRhdGVQYXNzKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hb1JhZGl1cyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuYW9SYWRpdXM7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmRpc3RhbmNlRmFsbG9mZiA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGlzdGFuY2VGYWxsb2ZmO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi50cmFuc3BhcmVuY3lBd2FyZSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIudHJhbnNwYXJlbmN5QXdhcmU7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLmludGVuc2l0eSA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuaW50ZW5zaXR5O1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hb1NhbXBsZXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvU2FtcGxlcztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVub2lzZVJhZGl1cyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGVub2lzZVJhZGl1cztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVub2lzZVNhbXBsZXMgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRlbm9pc2VTYW1wbGVzO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5zdGVuY2lsID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5zdGVuY2lsO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5yZW5kZXJNb2RlID0gWydDb21iaW5lZCcsICdBTycsICdObyBBTycsICdTcGxpdCcsICdTcGxpdCBBTyddLmluZGV4T2YodGhpcy5fZWZmZWN0Q29udHJvbGxlci5yZW5kZXJNb2RlKTtcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uY29sb3IgPSBuZXcgQ29sb3IodGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclswXSwgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclsxXSwgdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvclsyXSk7XHJcbiAgICB0aGlzLl9uOGFvUGFzcy5jb25maWd1cmF0aW9uLnNjcmVlblNwYWNlUmFkaXVzID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5zY3JlZW5TcGFjZVJhZGl1cztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uaGFsZlJlcyA9IHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuaGFsZlJlcztcclxuICAgIHRoaXMuX244YW9QYXNzLmNvbmZpZ3VyYXRpb24uZGVwdGhBd2FyZVVwc2FtcGxpbmcgPSB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRlcHRoQXdhcmVVcHNhbXBsaW5nO1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5jb2xvck11bHRpcGx5ID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5jb2xvck11bHRpcGx5O1xyXG4gICAgdGhpcy5fbjhhb1Bhc3MuY29uZmlndXJhdGlvbi5hY2N1bXVsYXRlID0gdGhpcy5fZWZmZWN0Q29udHJvbGxlci5hY2N1bXVsYXRlO1xyXG4gICAgdGhpcy5yZW5kZXIoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUd1aVRhYVBhc3MoKTogdm9pZCB7XHJcbiAgICB0aGlzLl90YWFQYXNzR3VpID0gbmV3IEdVSSgpO1xyXG4gICAgdGhpcy5fdGFhUGFzc0d1aS5oaWRlKCk7XHJcbiAgICBjb25zdCBwYXJhbSA9IHsgVEFBRW5hYmxlZDogJzEnLCBUQUFTYW1wbGVMZXZlbDogMCB9O1xyXG4gICAgdGhpcy5fdGFhUGFzc0d1aS5hZGQoIHBhcmFtLCAnVEFBRW5hYmxlZCcsIHtcclxuICAgICAgJ0Rpc2FibGVkJzogJzAnLFxyXG4gICAgICAnRW5hYmxlZCc6ICcxJ1xyXG4gICAgfSApLm9uRmluaXNoQ2hhbmdlKCAoKSA9PiB7XHJcblxyXG4gICAgICBpZiAoIHRoaXMuX3RhYVJlbmRlclBhc3MgKSB7XHJcbiAgICAgICAgdGhpcy5fdGFhUmVuZGVyUGFzcy5lbmFibGVkID0gKCBwYXJhbS5UQUFFbmFibGVkID09PSAnMScgKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnJlbmRlcigpO1xyXG4gICAgfSApO1xyXG5cclxuICAgIHRoaXMuX3RhYVBhc3NHdWkuYWRkKCBwYXJhbSwgJ1RBQVNhbXBsZUxldmVsJywge1xyXG4gICAgICAnTGV2ZWwgMDogMSBTYW1wbGUnOiAwLFxyXG4gICAgICAnTGV2ZWwgMTogMiBTYW1wbGVzJzogMSxcclxuICAgICAgJ0xldmVsIDI6IDQgU2FtcGxlcyc6IDIsXHJcbiAgICAgICdMZXZlbCAzOiA4IFNhbXBsZXMnOiAzLFxyXG4gICAgICAnTGV2ZWwgNDogMTYgU2FtcGxlcyc6IDQsXHJcbiAgICAgICdMZXZlbCA1OiAzMiBTYW1wbGVzJzogNVxyXG4gICAgfSApLm9uRmluaXNoQ2hhbmdlKCAoKSA9PiB7XHJcblxyXG4gICAgICBpZiAoIHRoaXMuX3RhYVJlbmRlclBhc3MgKSB7XHJcblxyXG4gICAgICAgIHRoaXMuX3RhYVJlbmRlclBhc3Muc2FtcGxlTGV2ZWwgPSBwYXJhbS5UQUFTYW1wbGVMZXZlbDtcclxuXHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5yZW5kZXIoKTtcclxuICAgIH0gKTtcclxuXHJcbiAgICB0aGlzLl90YWFQYXNzR3VpLm9wZW4oKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jb21wb3Nlci5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcigpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NvbXBvc2VyLnJlbmRlcigpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNob3dHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5zaG93KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGhpZGVHdWkoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5oaWRlKCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zaG93SGlkZUd1aShzaG93OiBib29sZWFuKTogdm9pZCB7XHJcbiAgICBzaG93ID8gdGhpcy5zaG93R3VpKCkgOiB0aGlzLmhpZGVHdWkoKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2NyZWF0ZUd1aSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpID0gbmV3IEdVSSgpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuaGlkZSgpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdhb1NhbXBsZXMnLCAxLjAsIDY0LjAsIDEuMCkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGVub2lzZVNhbXBsZXMnLCAxLjAsIDY0LjAsIDEuMCkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGVub2lzZVJhZGl1cycsIDAuMCwgMjQuMCwgMC4wMSkub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIGNvbnN0IGFvciA9IHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnYW9SYWRpdXMnLCAxLjAsIDEwLjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICBjb25zdCBkZiA9IHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnZGlzdGFuY2VGYWxsb2ZmJywgMC4wLCAxMC4wLCAwLjAxKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdzY3JlZW5TcGFjZVJhZGl1cycpLm9uQ2hhbmdlKCh2YWx1ZSkgPT4ge1xyXG4gICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvUmFkaXVzID0gNDguMDtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmRpc3RhbmNlRmFsbG9mZiA9IDAuMjtcclxuICAgICAgICBhb3IuX21pbiA9IDA7XHJcbiAgICAgICAgYW9yLl9tYXggPSA2NDtcclxuICAgICAgICBkZi5fbWluID0gMDtcclxuICAgICAgICBkZi5fbWF4ID0gMTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLl9lZmZlY3RDb250cm9sbGVyLmFvUmFkaXVzID0gNS4wO1xyXG4gICAgICAgIHRoaXMuX2VmZmVjdENvbnRyb2xsZXIuZGlzdGFuY2VGYWxsb2ZmID0gMS4wO1xyXG4gICAgICAgIGFvci5fbWluID0gMTtcclxuICAgICAgICBhb3IuX21heCA9IDEwO1xyXG4gICAgICAgIGRmLl9taW4gPSAwO1xyXG4gICAgICAgIGRmLl9tYXggPSAxMDtcclxuICAgICAgfVxyXG4gICAgICBhb3IudXBkYXRlRGlzcGxheSgpO1xyXG4gICAgICBkZi51cGRhdGVEaXNwbGF5KCk7XHJcbiAgICAgIHRoaXMuX3VwZGF0ZVBhc3MoKTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdoYWxmUmVzJykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAndHJhbnNwYXJlbmN5QXdhcmUnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdkZXB0aEF3YXJlVXBzYW1wbGluZycpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3N0ZW5jaWwnKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdpbnRlbnNpdHknLCAwLjAsIDEwLjAsIDAuMDEpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGRDb2xvcih0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnY29sb3InKS5vbkNoYW5nZSgoKSA9PiB0aGlzLl91cGRhdGVQYXNzKCkpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmdHdWkuYWRkKHRoaXMuX2VmZmVjdENvbnRyb2xsZXIsICdjb2xvck11bHRpcGx5Jykub25DaGFuZ2UoKCkgPT4gdGhpcy5fdXBkYXRlUGFzcygpKTtcclxuICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nR3VpLmFkZCh0aGlzLl9lZmZlY3RDb250cm9sbGVyLCAnYWNjdW11bGF0ZScpLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0d1aS5hZGQodGhpcy5fZWZmZWN0Q29udHJvbGxlciwgJ3JlbmRlck1vZGUnLCBbJ0NvbWJpbmVkJywgJ0FPJywgJ05vIEFPJywgJ1NwbGl0JywgJ1NwbGl0IEFPJ10pLm9uQ2hhbmdlKCgpID0+IHRoaXMuX3VwZGF0ZVBhc3MoKSk7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -8,7 +8,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
8
8
|
});
|
|
9
9
|
};
|
|
10
10
|
import { Injectable } from '@angular/core';
|
|
11
|
-
import { Color, NoToneMapping, PCFSoftShadowMap, PerspectiveCamera, Scene, SRGBColorSpace, TextureLoader, WebGLRenderer } from 'three';
|
|
11
|
+
import { Color, NoToneMapping, OrthographicCamera, PCFSoftShadowMap, PerspectiveCamera, Scene, SRGBColorSpace, TextureLoader, WebGLRenderer } from 'three';
|
|
12
12
|
import { BehaviorSubject, Subject } from 'rxjs';
|
|
13
13
|
import * as TWEEN from '@tweenjs/tween.js';
|
|
14
14
|
import { ViewMode } from '../../../core/enum/view-mode.enum';
|
|
@@ -33,8 +33,9 @@ import * as i7 from "../../../core/service/view-mode.service";
|
|
|
33
33
|
import * as i8 from "./outline.service";
|
|
34
34
|
import * as i9 from "../../../core/service/homedecorator-settings.service";
|
|
35
35
|
import * as i10 from "./post-processing.service";
|
|
36
|
+
import * as i11 from "./ssr.service";
|
|
36
37
|
export class SceneService {
|
|
37
|
-
constructor(_cameraService, _configurationService, _xrService, _vrService, _arService, _messageBusService, _viewModeService, _outlineService, _settingsService, _postProcessing) {
|
|
38
|
+
constructor(_cameraService, _configurationService, _xrService, _vrService, _arService, _messageBusService, _viewModeService, _outlineService, _settingsService, _postProcessing, _ssrService) {
|
|
38
39
|
this._cameraService = _cameraService;
|
|
39
40
|
this._configurationService = _configurationService;
|
|
40
41
|
this._xrService = _xrService;
|
|
@@ -45,6 +46,7 @@ export class SceneService {
|
|
|
45
46
|
this._outlineService = _outlineService;
|
|
46
47
|
this._settingsService = _settingsService;
|
|
47
48
|
this._postProcessing = _postProcessing;
|
|
49
|
+
this._ssrService = _ssrService;
|
|
48
50
|
this.onBeforeRender = new Subject();
|
|
49
51
|
this.onAfterRender = new Subject();
|
|
50
52
|
this.sceneInitialized = new BehaviorSubject(false);
|
|
@@ -118,6 +120,7 @@ export class SceneService {
|
|
|
118
120
|
if (loaded) {
|
|
119
121
|
this._initPathTracer();
|
|
120
122
|
this._maxRenderSamples = this._settingsService.settings.options.maxRenderSamples;
|
|
123
|
+
this._ssrService.enabled = this._settingsService.settings.options.ssrEnabled;
|
|
121
124
|
}
|
|
122
125
|
})
|
|
123
126
|
// this._xrService.sessionStarted.subscribe((mode: XrMode) => {
|
|
@@ -179,6 +182,20 @@ export class SceneService {
|
|
|
179
182
|
});
|
|
180
183
|
this.needsRender = true;
|
|
181
184
|
}
|
|
185
|
+
createRenderWithOrthographicCamera() {
|
|
186
|
+
const aspect = window.innerWidth / window.innerHeight;
|
|
187
|
+
const frustumSize = 10;
|
|
188
|
+
const orthographicCamera = new OrthographicCamera(frustumSize * aspect / -2, frustumSize * aspect / 2, frustumSize / 2, frustumSize / -2, 0.1, 100);
|
|
189
|
+
orthographicCamera.position.set(0, 3, -2);
|
|
190
|
+
orthographicCamera.lookAt(0, 0, -2);
|
|
191
|
+
orthographicCamera.name = 'orthographiccamera';
|
|
192
|
+
this.scene.add(orthographicCamera);
|
|
193
|
+
this.renderer.render(this.scene, orthographicCamera);
|
|
194
|
+
const render = this.renderer.domElement.toDataURL('image/jpeg');
|
|
195
|
+
this.scene.getObjectByName('orthographiccamera').remove();
|
|
196
|
+
this.renderer.render(this.scene, this._cameraService.camera);
|
|
197
|
+
return render;
|
|
198
|
+
}
|
|
182
199
|
_initScene() {
|
|
183
200
|
this.scene = new Scene();
|
|
184
201
|
this._setSceneBackground();
|
|
@@ -238,13 +255,13 @@ export class SceneService {
|
|
|
238
255
|
// logarithmicDepthBuffer: true*/
|
|
239
256
|
// });
|
|
240
257
|
// this.renderer = new WebGLRenderer({alpha: true, antialias: false, preserveDrawingBuffer: true, premultipliedAlpha: true});
|
|
241
|
-
this.renderer = new WebGLRenderer({
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
});
|
|
258
|
+
this.renderer = new WebGLRenderer( /*{
|
|
259
|
+
precision: 'highp',
|
|
260
|
+
powerPreference: 'high-performance',
|
|
261
|
+
antialias: true,
|
|
262
|
+
stencil: false,
|
|
263
|
+
depth: false
|
|
264
|
+
}*/);
|
|
248
265
|
this.renderer.outputColorSpace = SRGBColorSpace;
|
|
249
266
|
this.renderer.autoClear = false;
|
|
250
267
|
this.renderer.setPixelRatio(window.devicePixelRatio);
|
|
@@ -308,8 +325,8 @@ export class SceneService {
|
|
|
308
325
|
this.renderer.render(this.scene, this._cameraService.camera);
|
|
309
326
|
}
|
|
310
327
|
else {
|
|
311
|
-
// this._outlineService.render();
|
|
312
328
|
this._postProcessing.render();
|
|
329
|
+
this._outlineService.render();
|
|
313
330
|
}
|
|
314
331
|
// this.renderer.render(this.scene, this._cameraService.camera);
|
|
315
332
|
}
|
|
@@ -355,12 +372,12 @@ export class SceneService {
|
|
|
355
372
|
return this.renderer.domElement.toDataURL('image/jpeg');
|
|
356
373
|
}
|
|
357
374
|
}
|
|
358
|
-
SceneService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SceneService, deps: [{ token: i1.CameraService }, { token: i2.ConfigurationService }, { token: i3.XrService }, { token: i4.VrService }, { token: i5.ArService }, { token: i6.MessageBusService }, { token: i7.ViewModeService }, { token: i8.OutlineService }, { token: i9.HomedecoratorSettingsService }, { token: i10.PostProcessingService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
375
|
+
SceneService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SceneService, deps: [{ token: i1.CameraService }, { token: i2.ConfigurationService }, { token: i3.XrService }, { token: i4.VrService }, { token: i5.ArService }, { token: i6.MessageBusService }, { token: i7.ViewModeService }, { token: i8.OutlineService }, { token: i9.HomedecoratorSettingsService }, { token: i10.PostProcessingService }, { token: i11.SsrService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
359
376
|
SceneService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SceneService, providedIn: 'root' });
|
|
360
377
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SceneService, decorators: [{
|
|
361
378
|
type: Injectable,
|
|
362
379
|
args: [{
|
|
363
380
|
providedIn: 'root'
|
|
364
381
|
}]
|
|
365
|
-
}], ctorParameters: function () { return [{ type: i1.CameraService }, { type: i2.ConfigurationService }, { type: i3.XrService }, { type: i4.VrService }, { type: i5.ArService }, { type: i6.MessageBusService }, { type: i7.ViewModeService }, { type: i8.OutlineService }, { type: i9.HomedecoratorSettingsService }, { type: i10.PostProcessingService }]; } });
|
|
366
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFDTCxLQUFLLEVBQWlCLGFBQWEsRUFFbkMsZ0JBQWdCLEVBQ2hCLGlCQUFpQixFQUNqQixLQUFLLEVBQ0wsY0FBYyxFQUNkLGFBQWEsRUFHYixhQUFhLEVBQ2QsTUFBTSxPQUFPLENBQUM7QUFDZixPQUFPLEVBQUMsZUFBZSxFQUFFLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUM1RCxPQUFPLEtBQUssS0FBSyxNQUFNLG1CQUFtQixDQUFDO0FBVzNDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzRCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sc0NBQXNDLENBQUM7QUFDakUsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLGdDQUFnQyxDQUFDO0FBQ3pELE9BQU8sRUFBQyxLQUFLLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDcEMsT0FBTyxFQUFDLFdBQVcsRUFBQyxNQUFNLDBEQUEwRCxDQUFDO0FBQ3JGLE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLDZDQUE2QyxDQUFDO0FBQ2xGLCtEQUErRDtBQUMvRCw2REFBNkQ7QUFDN0QsbUZBQW1GO0FBQ25GLE9BQU8sRUFBQyxlQUFlLEVBQUMsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRCxPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSxxREFBcUQsQ0FBQzs7Ozs7Ozs7Ozs7O0FBTTFGLE1BQU0sT0FBTyxZQUFZO0lBa0N2QixZQUNVLGNBQTZCLEVBQzdCLHFCQUEyQyxFQUMzQyxVQUFxQixFQUNyQixVQUFxQixFQUNy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UUFDSCxDQUFDLENBQ0YsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLG1CQUFtQjtRQUN4QixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDMUQsQ0FBQzs7MEdBeFdVLFlBQVk7OEdBQVosWUFBWSxjQUZYLE1BQU07NEZBRVAsWUFBWTtrQkFIeEIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7XHJcbiAgQ29sb3IsIEhhbGZGbG9hdFR5cGUsIE5vVG9uZU1hcHBpbmcsXHJcbiAgT2JqZWN0M0QsXHJcbiAgUENGU29mdFNoYWRvd01hcCxcclxuICBQZXJzcGVjdGl2ZUNhbWVyYSxcclxuICBTY2VuZSxcclxuICBTUkdCQ29sb3JTcGFjZSxcclxuICBUZXh0dXJlTG9hZGVyLFxyXG4gIFZlY3RvcjIsXHJcbiAgVmVjdG9yMyxcclxuICBXZWJHTFJlbmRlcmVyXHJcbn0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQge0JlaGF2aW9yU3ViamVjdCwgU3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tICdyeGpzJztcclxuaW1wb3J0ICogYXMgVFdFRU4gZnJvbSAnQHR3ZWVuanMvdHdlZW4uanMnO1xyXG5pbXBvcnQge0FDRVNGaWxtaWNUb25lTWFwcGluZ30gZnJvbSAndGhyZWUvc3JjL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7Q2FtZXJhU2VydmljZX0gZnJvbSAnLi9jYW1lcmEuc2VydmljZSc7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvblNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9jb25maWd1cmF0aW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQge1hyU2VydmljZX0gZnJvbSAnLi94ci5zZXJ2aWNlJztcclxuaW1wb3J0IHtWclNlcnZpY2V9IGZyb20gJy4vdnIuc2VydmljZSc7XHJcbmltcG9ydCB7QXJTZXJ2aWNlfSBmcm9tICcuL2FyLnNlcnZpY2UnO1xyXG5pbXBvcnQge01lc3NhZ2VCdXNTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvbWVzc2FnZS1idXMuc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGVTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2Uvdmlldy1tb2RlLnNlcnZpY2UnO1xyXG5pbXBvcnQge091dGxpbmVTZXJ2aWNlfSBmcm9tICcuL291dGxpbmUuc2VydmljZSc7XHJcbmltcG9ydCB7SG9tZWRlY29yYXRvclNldHRpbmdzU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2hvbWVkZWNvcmF0b3Itc2V0dGluZ3Muc2VydmljZSc7XHJcbmltcG9ydCB7Vmlld01vZGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS92aWV3LW1vZGUuZW51bSc7XHJcbmltcG9ydCB7TWVzc2FnZVR5cGV9IGZyb20gJy4uLy4uLy4uL2NvcmUvZW51bS9tZXNzYWdlLXR5cGUuZW51bSc7XHJcbmltcG9ydCB7RmlsZVV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL2ZpbGUudXRpbHMnO1xyXG5pbXBvcnQge1V0aWxzfSBmcm9tICcuLi9jb3JlL3V0aWxzJztcclxuaW1wb3J0IHtTY2VuZTNEVXRpbH0gZnJvbSAnLi4vLi4vdGhyZWVkc2VsZWN0b3IvdGhyZWVkc2VsZWN0b3IvdXRpbHMvc2NlbmUtM2QudXRpbHMnO1xyXG5pbXBvcnQge1JlbGF0aXZlUG9zaXRpb25VdGlsc30gZnJvbSAnLi4vLi4vLi4vY29yZS91dGlscy9yZWxhdGl2ZS1wb3NpdGlvbi51dGlscyc7XHJcbi8vIGltcG9ydCBXZWJHUFUgZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2NhcGFiaWxpdGllcy9XZWJHUFUnO1xyXG4vLyBpbXBvcnQgV2ViR0wgZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2NhcGFiaWxpdGllcy9XZWJHTCc7XHJcbi8vIGltcG9ydCBXZWJHUFVSZW5kZXJlciBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vcmVuZGVyZXJzL3dlYmdwdS9XZWJHUFVSZW5kZXJlcic7XHJcbmltcG9ydCB7V2ViR0xQYXRoVHJhY2VyfSBmcm9tICd0aHJlZS1ncHUtcGF0aHRyYWNlcic7XHJcbmltcG9ydCB7UGFyYWxsZWxNZXNoQlZIV29ya2VyfSBmcm9tICd0aHJlZS1tZXNoLWJ2aC9zcmMvd29ya2Vycy9QYXJhbGxlbE1lc2hCVkhXb3JrZXIuanMnO1xyXG5pbXBvcnQge1Bvc3RQcm9jZXNzaW5nU2VydmljZX0gZnJvbSAnLi9wb3N0LXByb2Nlc3Npbmcuc2VydmljZSc7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTY2VuZVNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgc2V0IG5lZWRzUmVuZGVyKHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9uZWVkc1JlbmRlciA9IHZhbHVlO1xyXG4gICAgaWYgKHRoaXMucGF0aFRyYWNlcikge1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIudXBkYXRlQ2FtZXJhKCk7XHJcbiAgICAgIHRoaXMucGF0aFRyYWNlci51cGRhdGVMaWdodHMoKTtcclxuICAgICAgdGhpcy5wYXRoVHJhY2VyLnVwZGF0ZU1hdGVyaWFscygpO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIudXBkYXRlRW52aXJvbm1lbnQoKTtcclxuICAgIH1cclxuICAgIHRoaXMuX251bWJlck9mU2FtcGxlc1JlbmRlcmVkID0gMDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgbmVlZHNSZW5kZXIoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fbmVlZHNSZW5kZXI7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2NlbmU6IFNjZW5lO1xyXG4gIHB1YmxpYyByZW5kZXJlcjogV2ViR0xSZW5kZXJlci8qIHwgV2ViR1BVUmVuZGVyZXIqLztcclxuICBwdWJsaWMgcGF0aFRyYWNlcjogV2ViR0xQYXRoVHJhY2VyO1xyXG5cclxuICBwdWJsaWMgb25CZWZvcmVSZW5kZXI6IFN1YmplY3Q8eyByZW5kZXJlcjogV2ViR0xSZW5kZXJlciwgc2NlbmU6IFNjZW5lIH0+ID0gbmV3IFN1YmplY3Q8eyByZW5kZXJlcjogV2ViR0xSZW5kZXJlciwgc2NlbmU6IFNjZW5lIH0+KCk7XHJcbiAgcHVibGljIG9uQWZ0ZXJSZW5kZXI6IFN1YmplY3Q8eyByZW5kZXJlcjogV2ViR0xSZW5kZXJlciwgc2NlbmU6IFNjZW5lIH0+ID0gbmV3IFN1YmplY3Q8eyByZW5kZXJlcjogV2ViR0xSZW5kZXJlciwgc2NlbmU6IFNjZW5lIH0+KCk7XHJcbiAgcHVibGljIHNjZW5lSW5pdGlhbGl6ZWQ6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPiA9IG5ldyBCZWhhdmlvclN1YmplY3QoZmFsc2UpO1xyXG4gIHB1YmxpYyByZW5kZXJpbmdUaHJvdWdoUG9zdFByb2Nlc3NpbmdQaXBlbGluZTogYm9vbGVhbiA9IHRydWU7XHJcbiAgcHVibGljIHdlYkdMMkF2YWlsYWJsZTogYm9vbGVhbjtcclxuICBwdWJsaWMgZG9tRWxlbWVudDogSFRNTEVsZW1lbnQ7XHJcblxyXG4gIHByaXZhdGUgX25lZWRzUmVuZGVyOiBib29sZWFuO1xyXG4gIHByaXZhdGUgX2FyTW9kZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBfbWF4UmVuZGVyU2FtcGxlczogbnVtYmVyO1xyXG4gIHByaXZhdGUgX251bWJlck9mU2FtcGxlc1JlbmRlcmVkOiBudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfY2FtZXJhU2VydmljZTogQ2FtZXJhU2VydmljZSxcclxuICAgIHByaXZhdGUgX2NvbmZpZ3VyYXRpb25TZXJ2aWNlOiBDb25maWd1cmF0aW9uU2VydmljZSxcclxuICAgIHByaXZhdGUgX3hyU2VydmljZTogWHJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdnJTZXJ2aWNlOiBWclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9hclNlcnZpY2U6IEFyU2VydmljZSxcclxuICAgIHByaXZhdGUgX21lc3NhZ2VCdXNTZXJ2aWNlOiBNZXNzYWdlQnVzU2VydmljZSxcclxuICAgIHByaXZhdGUgX3ZpZXdNb2RlU2VydmljZTogVmlld01vZGVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfb3V0bGluZVNlcnZpY2U6IE91dGxpbmVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfcG9zdFByb2Nlc3Npbmc6IFBvc3RQcm9jZXNzaW5nU2VydmljZVxyXG4gICkge1xyXG4gICAgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gKCkgPT4gdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNjZW5lKCk6IFNjZW5lIHtcclxuICAgIHJldHVybiB0aGlzLmFyTW9kZSA/IHRoaXMuX2FyU2VydmljZS5zY2VuZSA6IHRoaXMuc2NlbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFyTW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fYXJNb2RlID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fYXJNb2RlKSB7XHJcbiAgICAgIHRoaXMuX2FyU2VydmljZS5pbml0KHRoaXMucmVuZGVyZXIgYXMgV2ViR0xSZW5kZXJlcik7XHJcbiAgICAgIHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZSA9IFZpZXdNb2RlLkFSO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhck1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXJNb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZG9tRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLl9pbml0U2NlbmUoKTtcclxuICAgIHRoaXMuX2luaXRSZW5kZXJlcigpO1xyXG4gICAgdGhpcy5faW5pdENhbWVyYSgpO1xyXG4gICAgdGhpcy5faW5pdE91dGxpbmUoKTtcclxuICAgIHRoaXMuX2luaXRQb3N0UHJvY2Vzc2luZygpO1xyXG4gICAgdGhpcy5fYW5pbWF0ZSgpO1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYU1vdmVtZW50Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlRha2VTY3JlZW5zaG90LCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdNb2RlU2VydmljZS5pczNkVmlld0FjdGl2ZSgpIHx8IHRoaXMuX3ZpZXdNb2RlU2VydmljZS5pc1RvcFZpZXdBY3RpdmUoKSkge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEpO1xyXG4gICAgICAgICAgY29uc3QgZGF0YVVybCA9IHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudC50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTtcclxuICAgICAgICAgIEZpbGVVdGlscy5Eb3dubG9hZEZyb21EYXRhVXJpKGRhdGFVcmwsIGBNeVJvb21wbGFuJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LmpwZWdgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9hclNlcnZpY2Uuc2hvdWxkQWRkT2JqZWN0VG9TY2VuZS5zdWJzY3JpYmUoKG9iamVjdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXJNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hZGRPYmplY3Qob2JqZWN0KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZUNoYW5nZWQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuX2lzM0RNb2RlKG1vZGUpKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLl9hbmltYXRlKCk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgIHRoaXMuX3BhdXNlQW5pbWF0aW9uKCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGlmIChtb2RlID09PSBWaWV3TW9kZS5WUikge1xyXG4gICAgICAgICAgdGhpcy5fdnJTZXJ2aWNlLmluaXQodGhpcy5zY2VuZSwgdGhpcy5yZW5kZXJlciBhcyBXZWJHTFJlbmRlcmVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fdnJTZXJ2aWNlLmVuZFNlc3Npb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NMb2FkZWQuc3Vic2NyaWJlKChsb2FkZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAobG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9pbml0UGF0aFRyYWNlcigpO1xyXG4gICAgICAgICAgdGhpcy5fbWF4UmVuZGVyU2FtcGxlcyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLm1heFJlbmRlclNhbXBsZXM7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgICAvLyB0aGlzLl94clNlcnZpY2Uuc2Vzc2lvblN0YXJ0ZWQuc3Vic2NyaWJlKChtb2RlOiBYck1vZGUpID0+IHtcclxuICAgICAgLy8gICBpZiAobW9kZSA9PT0gWHJNb2RlLkFyTW9kZSkge1xyXG4gICAgICAvLyAgICAgdGhpcy5fYW5pbWF0ZUFyKCk7XHJcbiAgICAgIC8vICAgfVxyXG4gICAgICAvLyB9KVxyXG4gICAgKTtcclxuICAgIHRoaXMuX3hyU2VydmljZS5pbml0KHRoaXMucmVuZGVyZXIgYXMgV2ViR0xSZW5kZXJlciwgdGhpcy5zY2VuZSwgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEpO1xyXG4gICAgdGhpcy5zY2VuZUluaXRpYWxpemVkLm5leHQodHJ1ZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYWRkT2JqZWN0KG9iajogT2JqZWN0M0QsIGZvcmNlUmVuZGVyOiBib29sZWFuID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX2FyTW9kZSkge1xyXG4gICAgICB0aGlzLl9hclNlcnZpY2UuYWRkT2JqZWN0VG9BUlNjZW5lKG9iaik7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNjZW5lLmFkZChvYmopO1xyXG4gICAgICB0aGlzLnVwZGF0ZVBhdGhUcmFjZXIoKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoZm9yY2VSZW5kZXIpIHtcclxuICAgICAgdGhpcy5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlT2JqZWN0KG9iajogT2JqZWN0M0QsIGZvcmNlUmVuZGVyOiBib29sZWFuID0gdHJ1ZSwgY2xlYW5VcDogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIHRoaXMuc2NlbmUucmVtb3ZlKG9iaik7XHJcbiAgICBpZiAoZm9yY2VSZW5kZXIpIHtcclxuICAgICAgdGhpcy5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICB9XHJcbiAgICBpZiAoY2xlYW5VcCkge1xyXG4gICAgICBVdGlscy5EaXNwb3NlT2JqZWN0KG9iaik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlUGF0aFRyYWNlcigpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5wYXRoVHJhY2VyICYmIHRoaXMucGF0aFRyYWNlcikge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMucGF0aFRyYWNlci5zZXRTY2VuZSh0aGlzLnNjZW5lLCB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYSk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcG9zaXRpb25JblNjZW5lVG9TY3JlZW4ocG9zOiBWZWN0b3IzKTogVmVjdG9yMiB7XHJcbiAgICByZXR1cm4gU2NlbmUzRFV0aWwuQ29udmVydDNEUG9pbnRUb1NjcmVlblBvaW50KFxyXG4gICAgICBwb3MsIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLCB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbmRlcmVyUHJvcHNDaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNjZW5lLnRyYXZlcnNlKChub2RlOiBhbnkpID0+IHtcclxuICAgICAgaWYgKCFub2RlLmlzTWVzaCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlLm1hdGVyaWFsKSkge1xyXG4gICAgICAgIG5vZGUubWF0ZXJpYWwuZm9yRWFjaChmdW5jdGlvbiAobWF0ZXJpYWwpIHtcclxuICAgICAgICAgIG1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBub2RlLm1hdGVyaWFsLm5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICB0aGlzLm5lZWRzUmVuZGVyID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRTY2VuZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2NlbmUgPSBuZXcgU2NlbmUoKTtcclxuICAgIHRoaXMuX3NldFNjZW5lQmFja2dyb3VuZCgpO1xyXG4gICAgLy8gY29uc3QgYm94MWdlbyA9IG5ldyBCb3hHZW9tZXRyeSgxLCAxLCAxKTtcclxuICAgIC8vIGNvbnN0IGJveDEgPSBuZXcgTWVzaChib3gxZ2VvLCBuZXcgTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiAnZ3JlZW4nfSkpO1xyXG4gICAgLy8gYm94MS5wb3NpdGlvbi5zZXQoLTAuNSwgMC43LCAtMC41KTtcclxuICAgIC8vIGJveDEuY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAvLyBib3gxLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5zY2VuZS5hZGQoYm94MSk7XHJcbiAgICAvLyBjb25zdCBib3gyZ2VvID0gbmV3IEJveEdlb21ldHJ5KDAuNiwgMC42LCAwLjYpO1xyXG4gICAgLy8gY29uc3QgYm94MiA9IG5ldyBNZXNoKGJveDJnZW8sIG5ldyBNZXNoUGhvbmdNYXRlcmlhbCh7Y29sb3I6ICdyZWQnfSkpO1xyXG4gICAgLy8gYm94Mi5wb3NpdGlvbi5zZXQoMC41LCAxLjUsIDAuNSk7XHJcbiAgICAvLyBib3gyLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgLy8gYm94Mi5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuICAgIC8vIHRoaXMuc2NlbmUuYWRkKGJveDIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdENhbWVyYSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuaW5pdCh0aGlzLmRvbUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdE91dGxpbmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vdXRsaW5lU2VydmljZS5pbml0KHRoaXMucmVuZGVyZXIgYXMgV2ViR0xSZW5kZXJlciwgdGhpcy5zY2VuZSwgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEsXHJcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLFxyXG4gICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogd2luZG93LmRldmljZVBpeGVsUmF0aW8pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFBvc3RQcm9jZXNzaW5nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmcuaW5pdCh0aGlzLnJlbmRlcmVyIGFzIFdlYkdMUmVuZGVyZXIsIHRoaXMuc2NlbmUsIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLFxyXG4gICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxcclxuICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRQYXRoVHJhY2VyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnBhdGhUcmFjZXIpIHtcclxuICAgICAgdGhpcy5wYXRoVHJhY2VyID0gbmV3IFdlYkdMUGF0aFRyYWNlcih0aGlzLnJlbmRlcmVyIGFzIFdlYkdMUmVuZGVyZXIpO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIuc2V0QlZIV29ya2VyKG5ldyBQYXJhbGxlbE1lc2hCVkhXb3JrZXIoKSk7XHJcbiAgICAgIHRoaXMucGF0aFRyYWNlci5maWx0ZXJHbG9zc3lGYWN0b3IgPSAxO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIudGlsZXMuc2V0KDMsIDMpO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIubXVsdGlwbGVJbXBvcnRhbmNlU2FtcGxpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIudHJhbnNtaXNzaXZlQm91bmNlcyA9IDEwO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIucmVuZGVyU2NhbGUgPSAxO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIuc2V0U2NlbmUodGhpcy5zY2VuZSwgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEpO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIuZW5hYmxlUGF0aFRyYWNpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaW5pdFJlbmRlcmVyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gaWYgKFdlYkdQVS5pc0F2YWlsYWJsZSgpID09PSBmYWxzZSAmJiBXZWJHTC5pc1dlYkdMMkF2YWlsYWJsZSgpID09PSBmYWxzZSkge1xyXG4gICAgLy8gICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBXZWJHUFUuZ2V0RXJyb3JNZXNzYWdlKCkgKTtcclxuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKCdObyBXZWJHUFUgb3IgV2ViR0wyIHN1cHBvcnQnKTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQ6IEhUTUxDYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjb25zdCBjb250ZXh0OiBhbnkgPSBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJ3dlYmdsMicsIHthbnRpYWxpYXM6IHRydWV9KTtcclxuICAgIHRoaXMud2ViR0wyQXZhaWxhYmxlID0gY29udGV4dCAhPT0gdW5kZWZpbmVkO1xyXG4gICAgLy8gdGhpcy5yZW5kZXJlciA9IG5ldyBXZWJHUFVSZW5kZXJlcih7IGFscGhhOiB0cnVlLCBhbnRpYWxpYXM6IHRydWUgfSk7XHJcbiAgICAvLyB0aGlzLnJlbmRlcmVyID1cclxuICAgIC8vICAgbmV3IFdlYkdMUmVuZGVyZXIoe1xyXG4gICAgLy8gICAgIGNhbnZhczogY2FudmFzRWxlbWVudCxcclxuICAgIC8vICAgICBjb250ZXh0OiBjb250ZXh0LFxyXG4gICAgLy8gICAgIGFscGhhOiB0cnVlLFxyXG4gICAgLy8gICAgIGFudGlhbGlhczogdHJ1ZSxcclxuICAgIC8vICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRydWUsXHJcbiAgICAvLyAgICAgcHJlbXVsdGlwbGllZEFscGhhOiBmYWxzZS8qLFxyXG4gICAgLy8gICAgIGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6IHRydWUqL1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIHRoaXMucmVuZGVyZXIgPSBuZXcgV2ViR0xSZW5kZXJlcih7YWxwaGE6IHRydWUsIGFudGlhbGlhczogZmFsc2UsIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdHJ1ZSwgcHJlbXVsdGlwbGllZEFscGhhOiB0cnVlfSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gbmV3IFdlYkdMUmVuZGVyZXIoe1xyXG4gICAgICBwcmVjaXNpb246ICdoaWdocCcsXHJcbiAgICAgIHBvd2VyUHJlZmVyZW5jZTogJ2hpZ2gtcGVyZm9ybWFuY2UnLFxyXG4gICAgICBhbnRpYWxpYXM6IGZhbHNlLFxyXG4gICAgICBzdGVuY2lsOiBmYWxzZSxcclxuICAgICAgZGVwdGg6IGZhbHNlXHJcbiAgICB9KTtcclxuICAgIHRoaXMucmVuZGVyZXIub3V0cHV0Q29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgdGhpcy5yZW5kZXJlci5hdXRvQ2xlYXIgPSBmYWxzZTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnRvbmVNYXBwaW5nID0gTm9Ub25lTWFwcGluZzsgLy8gQUNFU0ZpbG1pY1RvbmVNYXBwaW5nOyAvLyBMaW5lYXJUb25lTWFwcGluZztcclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZG93TWFwLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkb3dNYXAudHlwZSA9IFBDRlNvZnRTaGFkb3dNYXA7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJlci5kb21FbGVtZW50KTtcclxuICAgIHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3RocmVlZF9jYW52YXMnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVJlbmRlcmVyVG9EaXNwbGF5U2l6ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U2l6ZSh0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQsIHRydWUpO1xyXG4gICAgdGhpcy5fb3V0bGluZVNlcnZpY2Uuc2V0U2l6ZSh0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3Npbmcuc2V0U2l6ZSh0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlV2luZG93U2l6ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVJlbmRlcmVyVG9EaXNwbGF5U2l6ZSgpO1xyXG4gICAgUmVsYXRpdmVQb3NpdGlvblV0aWxzLlNldEFwcGxpY2F0aW9uT2Zmc2V0KHRoaXMuZG9tRWxlbWVudCk7XHJcbiAgICBpZiAodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICBjb25zdCBhc3BlY3QgPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLnJlYWxBc3BlY3RSYXRpbyA9IGFzcGVjdDtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEuYXNwZWN0ID0gYXNwZWN0O1xyXG4gICAgICAodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEgYXMgUGVyc3BlY3RpdmVDYW1lcmEpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgIH1cclxuICAgIHRoaXMubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hlY2tDYW52YXNSZXNpemUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICE9PSB0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQud2lkdGggfHxcclxuICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAhPT0gdGhpcy5yZW5kZXJlci5kb21FbGVtZW50LmhlaWdodCkge1xyXG4gICAgICB0aGlzLl91cGRhdGVXaW5kb3dTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW5kZXIodCwgZnJhbWUpIHtcclxuICAgIGlmICghdGhpcy5yZW5kZXJlci54ci5lbmFibGVkKSB7XHJcbiAgICAgIFRXRUVOLnVwZGF0ZSgpO1xyXG4gICAgICB0aGlzLl9jaGVja0NhbnZhc1Jlc2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnBhdGhUcmFjZXIgJiYgdGhpcy5wYXRoVHJhY2VyKSB7XHJcbiAgICAgIGlmICh0aGlzLl9udW1iZXJPZlNhbXBsZXNSZW5kZXJlZCA+PSB0aGlzLl9tYXhSZW5kZXJTYW1wbGVzKSB7XHJcbiAgICAgICAgdGhpcy5wYXRoVHJhY2VyLmVuYWJsZVBhdGhUcmFjaW5nID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXRoVHJhY2VyLmVuYWJsZVBhdGhUcmFjaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5wYXRoVHJhY2VyLnJlbmRlclNhbXBsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX251bWJlck9mU2FtcGxlc1JlbmRlcmVkID0gTWF0aC5mbG9vcih0aGlzLnBhdGhUcmFjZXIuc2FtcGxlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fbmVlZHNSZW5kZXIgfHwgdGhpcy5hck1vZGUgfHwgdGhpcy5fdmlld01vZGVTZXJ2aWNlLmlzVlJWaWV3QWN0aXZlKCkgfHwgdGhpcy5fb3V0bGluZVNlcnZpY2UubmVlZHNSZW5kZXIpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmNsZWFyKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FyTW9kZSAmJiBmcmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5fYXJTZXJ2aWNlLmhhbmRsZUZyYW1lKGZyYW1lKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZXdNb2RlU2VydmljZS5pc1ZSVmlld0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLl92clNlcnZpY2UucmVuZGVyKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub25CZWZvcmVSZW5kZXIubmV4dCh7cmVuZGVyZXI6IHRoaXMucmVuZGVyZXIgYXMgV2ViR0xSZW5kZXJlciwgc2NlbmU6IHRoaXMuc2NlbmV9KTtcclxuICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJpbmdUaHJvdWdoUG9zdFByb2Nlc3NpbmdQaXBlbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAvLyB0aGlzLl9vdXRsaW5lU2VydmljZS5yZW5kZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5fcG9zdFByb2Nlc3NpbmcucmVuZGVyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlci5uZXh0KHtyZW5kZXJlcjogdGhpcy5yZW5kZXJlciBhcyBXZWJHTFJlbmRlcmVyLCBzY2VuZTogdGhpcy5zY2VuZX0pO1xyXG4gICAgICAgIHRoaXMuX291dGxpbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uZWVkc1JlbmRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hbmltYXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbmltYXRpb25Mb29wKCh0aW1lc3RhbXAsIGZyYW1lKSA9PiB0aGlzLl9yZW5kZXIodGltZXN0YW1wLCBmcmFtZSkpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3BhdXNlQW5pbWF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbmltYXRpb25Mb29wKG51bGwpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzM0RNb2RlKG1vZGU6IFZpZXdNb2RlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbW9kZSAhPT0gVmlld01vZGUuRmxvb3JQbGFuMkQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRTY2VuZUJhY2tncm91bmQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5nc0xvYWRlZC5zdWJzY3JpYmUoKGxvYWRlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGxvYWRlZCAmJiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2NlbmVCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuYmFja2dyb3VuZCA9IG5ldyBUZXh0dXJlTG9hZGVyKCkubG9hZCh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2NlbmVCYWNrZ3JvdW5kLCAobWF0ZXJpYWwpID0+IHtcclxuICAgICAgICAgICAgICBtYXRlcmlhbC5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChsb2FkZWQgJiYgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNjZW5lQmFja2dyb3VuZENvbG9yKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zY2VuZS5iYWNrZ3JvdW5kID0gbmV3IENvbG9yKHBhcnNlSW50KHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zY2VuZUJhY2tncm91bmRDb2xvciwgMCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNjZW5lQ2FudmFzSW1hZ2UoKTogc3RyaW5nIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhKTtcclxuICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
382
|
+
}], ctorParameters: function () { return [{ type: i1.CameraService }, { type: i2.ConfigurationService }, { type: i3.XrService }, { type: i4.VrService }, { type: i5.ArService }, { type: i6.MessageBusService }, { type: i7.ViewModeService }, { type: i8.OutlineService }, { type: i9.HomedecoratorSettingsService }, { type: i10.PostProcessingService }, { type: i11.SsrService }]; } });
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2NlbmUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9jbGllbnQvYXBwL3BsdWdpbnMvY29yZTNkL3NlcnZpY2Uvc2NlbmUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFDTCxLQUFLLEVBQ0wsYUFBYSxFQUViLGtCQUFrQixFQUNsQixnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ2pCLEtBQUssRUFDTCxjQUFjLEVBQ2QsYUFBYSxFQUdiLGFBQWEsRUFDZCxNQUFNLE9BQU8sQ0FBQztBQUNmLE9BQU8sRUFBQyxlQUFlLEVBQUUsT0FBTyxFQUFlLE1BQU0sTUFBTSxDQUFDO0FBQzVELE9BQU8sS0FBSyxLQUFLLE1BQU0sbUJBQW1CLENBQUM7QUFVM0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLG1DQUFtQyxDQUFDO0FBQzNELE9BQU8sRUFBQyxXQUFXLEVBQUMsTUFBTSxzQ0FBc0MsQ0FBQztBQUNqRSxPQUFPLEVBQUMsU0FBUyxFQUFDLE1BQU0sZ0NBQWdDLENBQUM7QUFDekQsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUNwQyxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sMERBQTBELENBQUM7QUFDckYsT0FBTyxFQUFDLHFCQUFxQixFQUFDLE1BQU0sNkNBQTZDLENBQUM7QUFDbEYsK0RBQStEO0FBQy9ELDZEQUE2RDtBQUM3RCxtRkFBbUY7QUFDbkYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQ3JELE9BQU8sRUFBQyxxQkFBcUIsRUFBQyxNQUFNLHFEQUFxRCxDQUFDOzs7Ozs7Ozs7Ozs7O0FBTzFGLE1BQU0sT0FBTyxZQUFZO0lBa0N2QixZQUNVLGNBQTZCLEVBQzdCLHFCQUEyQyxFQUMzQyxVQUFxQixFQUNy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QUFPLENBQUMsRUFBRTtpQkFDWDthQUNGO1FBQ0gsQ0FBQyxDQUNGLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxtQkFBbUI7UUFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQzFELENBQUM7OzBHQWhZVSxZQUFZOzhHQUFaLFlBQVksY0FGWCxNQUFNOzRGQUVQLFlBQVk7a0JBSHhCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge1xyXG4gIENvbG9yLFxyXG4gIE5vVG9uZU1hcHBpbmcsXHJcbiAgT2JqZWN0M0QsXHJcbiAgT3J0aG9ncmFwaGljQ2FtZXJhLFxyXG4gIFBDRlNvZnRTaGFkb3dNYXAsXHJcbiAgUGVyc3BlY3RpdmVDYW1lcmEsXHJcbiAgU2NlbmUsXHJcbiAgU1JHQkNvbG9yU3BhY2UsXHJcbiAgVGV4dHVyZUxvYWRlcixcclxuICBWZWN0b3IyLFxyXG4gIFZlY3RvcjMsXHJcbiAgV2ViR0xSZW5kZXJlclxyXG59IGZyb20gJ3RocmVlJztcclxuaW1wb3J0IHtCZWhhdmlvclN1YmplY3QsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCAqIGFzIFRXRUVOIGZyb20gJ0B0d2VlbmpzL3R3ZWVuLmpzJztcclxuaW1wb3J0IHtDYW1lcmFTZXJ2aWNlfSBmcm9tICcuL2NhbWVyYS5zZXJ2aWNlJztcclxuaW1wb3J0IHtDb25maWd1cmF0aW9uU2VydmljZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9zZXJ2aWNlL2NvbmZpZ3VyYXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7WHJTZXJ2aWNlfSBmcm9tICcuL3hyLnNlcnZpY2UnO1xyXG5pbXBvcnQge1ZyU2VydmljZX0gZnJvbSAnLi92ci5zZXJ2aWNlJztcclxuaW1wb3J0IHtBclNlcnZpY2V9IGZyb20gJy4vYXIuc2VydmljZSc7XHJcbmltcG9ydCB7TWVzc2FnZUJ1c1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9tZXNzYWdlLWJ1cy5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZVNlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS92aWV3LW1vZGUuc2VydmljZSc7XHJcbmltcG9ydCB7T3V0bGluZVNlcnZpY2V9IGZyb20gJy4vb3V0bGluZS5zZXJ2aWNlJztcclxuaW1wb3J0IHtIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlfSBmcm9tICcuLi8uLi8uLi9jb3JlL3NlcnZpY2UvaG9tZWRlY29yYXRvci1zZXR0aW5ncy5zZXJ2aWNlJztcclxuaW1wb3J0IHtWaWV3TW9kZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL3ZpZXctbW9kZS5lbnVtJztcclxuaW1wb3J0IHtNZXNzYWdlVHlwZX0gZnJvbSAnLi4vLi4vLi4vY29yZS9lbnVtL21lc3NhZ2UtdHlwZS5lbnVtJztcclxuaW1wb3J0IHtGaWxlVXRpbHN9IGZyb20gJy4uLy4uLy4uL2NvcmUvdXRpbHMvZmlsZS51dGlscyc7XHJcbmltcG9ydCB7VXRpbHN9IGZyb20gJy4uL2NvcmUvdXRpbHMnO1xyXG5pbXBvcnQge1NjZW5lM0RVdGlsfSBmcm9tICcuLi8uLi90aHJlZWRzZWxlY3Rvci90aHJlZWRzZWxlY3Rvci91dGlscy9zY2VuZS0zZC51dGlscyc7XHJcbmltcG9ydCB7UmVsYXRpdmVQb3NpdGlvblV0aWxzfSBmcm9tICcuLi8uLi8uLi9jb3JlL3V0aWxzL3JlbGF0aXZlLXBvc2l0aW9uLnV0aWxzJztcclxuLy8gaW1wb3J0IFdlYkdQVSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vY2FwYWJpbGl0aWVzL1dlYkdQVSc7XHJcbi8vIGltcG9ydCBXZWJHTCBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vY2FwYWJpbGl0aWVzL1dlYkdMJztcclxuLy8gaW1wb3J0IFdlYkdQVVJlbmRlcmVyIGZyb20gJ3RocmVlL2V4YW1wbGVzL2pzbS9yZW5kZXJlcnMvd2ViZ3B1L1dlYkdQVVJlbmRlcmVyJztcclxuaW1wb3J0IHtXZWJHTFBhdGhUcmFjZXJ9IGZyb20gJ3RocmVlLWdwdS1wYXRodHJhY2VyJztcclxuaW1wb3J0IHtQYXJhbGxlbE1lc2hCVkhXb3JrZXJ9IGZyb20gJ3RocmVlLW1lc2gtYnZoL3NyYy93b3JrZXJzL1BhcmFsbGVsTWVzaEJWSFdvcmtlci5qcyc7XHJcbmltcG9ydCB7UG9zdFByb2Nlc3NpbmdTZXJ2aWNlfSBmcm9tICcuL3Bvc3QtcHJvY2Vzc2luZy5zZXJ2aWNlJztcclxuaW1wb3J0IHtTc3JTZXJ2aWNlfSBmcm9tICcuL3Nzci5zZXJ2aWNlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNjZW5lU2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XHJcblxyXG4gIHB1YmxpYyBzZXQgbmVlZHNSZW5kZXIodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX25lZWRzUmVuZGVyID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5wYXRoVHJhY2VyKSB7XHJcbiAgICAgIHRoaXMucGF0aFRyYWNlci51cGRhdGVDYW1lcmEoKTtcclxuICAgICAgdGhpcy5wYXRoVHJhY2VyLnVwZGF0ZUxpZ2h0cygpO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIudXBkYXRlTWF0ZXJpYWxzKCk7XHJcbiAgICAgIHRoaXMucGF0aFRyYWNlci51cGRhdGVFbnZpcm9ubWVudCgpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5fbnVtYmVyT2ZTYW1wbGVzUmVuZGVyZWQgPSAwO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBuZWVkc1JlbmRlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9uZWVkc1JlbmRlcjtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzY2VuZTogU2NlbmU7XHJcbiAgcHVibGljIHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLyogfCBXZWJHUFVSZW5kZXJlciovO1xyXG4gIHB1YmxpYyBwYXRoVHJhY2VyOiBXZWJHTFBhdGhUcmFjZXI7XHJcblxyXG4gIHB1YmxpYyBvbkJlZm9yZVJlbmRlcjogU3ViamVjdDx7IHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUgfT4gPSBuZXcgU3ViamVjdDx7IHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUgfT4oKTtcclxuICBwdWJsaWMgb25BZnRlclJlbmRlcjogU3ViamVjdDx7IHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUgfT4gPSBuZXcgU3ViamVjdDx7IHJlbmRlcmVyOiBXZWJHTFJlbmRlcmVyLCBzY2VuZTogU2NlbmUgfT4oKTtcclxuICBwdWJsaWMgc2NlbmVJbml0aWFsaXplZDogQmVoYXZpb3JTdWJqZWN0PGJvb2xlYW4+ID0gbmV3IEJlaGF2aW9yU3ViamVjdChmYWxzZSk7XHJcbiAgcHVibGljIHJlbmRlcmluZ1Rocm91Z2hQb3N0UHJvY2Vzc2luZ1BpcGVsaW5lOiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgd2ViR0wyQXZhaWxhYmxlOiBib29sZWFuO1xyXG4gIHB1YmxpYyBkb21FbGVtZW50OiBIVE1MRWxlbWVudDtcclxuXHJcbiAgcHJpdmF0ZSBfbmVlZHNSZW5kZXI6IGJvb2xlYW47XHJcbiAgcHJpdmF0ZSBfYXJNb2RlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHJpdmF0ZSBfc3ViczogU3Vic2NyaXB0aW9uW10gPSBbXTtcclxuICBwcml2YXRlIF9tYXhSZW5kZXJTYW1wbGVzOiBudW1iZXI7XHJcbiAgcHJpdmF0ZSBfbnVtYmVyT2ZTYW1wbGVzUmVuZGVyZWQ6IG51bWJlcjtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIF9jYW1lcmFTZXJ2aWNlOiBDYW1lcmFTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfY29uZmlndXJhdGlvblNlcnZpY2U6IENvbmZpZ3VyYXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfeHJTZXJ2aWNlOiBYclNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF92clNlcnZpY2U6IFZyU2VydmljZSxcclxuICAgIHByaXZhdGUgX2FyU2VydmljZTogQXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfbWVzc2FnZUJ1c1NlcnZpY2U6IE1lc3NhZ2VCdXNTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfdmlld01vZGVTZXJ2aWNlOiBWaWV3TW9kZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9vdXRsaW5lU2VydmljZTogT3V0bGluZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9zZXR0aW5nc1NlcnZpY2U6IEhvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2UsXHJcbiAgICBwcml2YXRlIF9wb3N0UHJvY2Vzc2luZzogUG9zdFByb2Nlc3NpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBfc3NyU2VydmljZTogU3NyU2VydmljZVxyXG4gICkge1xyXG4gICAgd2luZG93Lm9uYmVmb3JldW5sb2FkID0gKCkgPT4gdGhpcy5uZ09uRGVzdHJveSgpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSB1bmRlZmluZWQ7XHJcbiAgICB0aGlzLl9zdWJzLmZvckVhY2gocyA9PiBzLnVuc3Vic2NyaWJlKCkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNjZW5lKCk6IFNjZW5lIHtcclxuICAgIHJldHVybiB0aGlzLmFyTW9kZSA/IHRoaXMuX2FyU2VydmljZS5zY2VuZSA6IHRoaXMuc2NlbmU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2V0IGFyTW9kZSh2YWx1ZTogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fYXJNb2RlID0gdmFsdWU7XHJcbiAgICBpZiAodGhpcy5fYXJNb2RlKSB7XHJcbiAgICAgIHRoaXMuX2FyU2VydmljZS5pbml0KHRoaXMucmVuZGVyZXIgYXMgV2ViR0xSZW5kZXJlcik7XHJcbiAgICAgIHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZSA9IFZpZXdNb2RlLkFSO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBhck1vZGUoKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXJNb2RlO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGluaXQoZWxlbWVudDogSFRNTEVsZW1lbnQpOiB2b2lkIHtcclxuICAgIHRoaXMuZG9tRWxlbWVudCA9IGVsZW1lbnQ7XHJcbiAgICB0aGlzLl9pbml0U2NlbmUoKTtcclxuICAgIHRoaXMuX2luaXRSZW5kZXJlcigpO1xyXG4gICAgdGhpcy5faW5pdENhbWVyYSgpO1xyXG4gICAgdGhpcy5faW5pdE91dGxpbmUoKTtcclxuICAgIHRoaXMuX2luaXRQb3N0UHJvY2Vzc2luZygpO1xyXG4gICAgdGhpcy5fYW5pbWF0ZSgpO1xyXG4gICAgdGhpcy5fc3Vicy5wdXNoKFxyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYU1vdmVtZW50Q2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xyXG4gICAgICAgIHRoaXMubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgICB9KSxcclxuICAgICAgdGhpcy5fbWVzc2FnZUJ1c1NlcnZpY2Uuc3Vic2NyaWJlKE1lc3NhZ2VUeXBlLlRha2VTY3JlZW5zaG90LCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuX3ZpZXdNb2RlU2VydmljZS5pczNkVmlld0FjdGl2ZSgpIHx8IHRoaXMuX3ZpZXdNb2RlU2VydmljZS5pc1RvcFZpZXdBY3RpdmUoKSkge1xyXG4gICAgICAgICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEpO1xyXG4gICAgICAgICAgY29uc3QgZGF0YVVybCA9IHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudC50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnKTtcclxuICAgICAgICAgIEZpbGVVdGlscy5Eb3dubG9hZEZyb21EYXRhVXJpKGRhdGFVcmwsIGBNeVJvb21wbGFuJHtuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCl9LmpwZWdgKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9hclNlcnZpY2Uuc2hvdWxkQWRkT2JqZWN0VG9TY2VuZS5zdWJzY3JpYmUoKG9iamVjdCkgPT4ge1xyXG4gICAgICAgIHRoaXMuYXJNb2RlID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5hZGRPYmplY3Qob2JqZWN0KTtcclxuICAgICAgfSksXHJcbiAgICAgIHRoaXMuX3ZpZXdNb2RlU2VydmljZS52aWV3TW9kZUNoYW5nZWQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XHJcbiAgICAgICAgLy8gaWYgKHRoaXMuX2lzM0RNb2RlKG1vZGUpKSB7XHJcbiAgICAgICAgLy8gICB0aGlzLl9hbmltYXRlKCk7XHJcbiAgICAgICAgLy8gfSBlbHNlIHtcclxuICAgICAgICAvLyAgIHRoaXMuX3BhdXNlQW5pbWF0aW9uKCk7XHJcbiAgICAgICAgLy8gfVxyXG4gICAgICAgIGlmIChtb2RlID09PSBWaWV3TW9kZS5WUikge1xyXG4gICAgICAgICAgdGhpcy5fdnJTZXJ2aWNlLmluaXQodGhpcy5zY2VuZSwgdGhpcy5yZW5kZXJlciBhcyBXZWJHTFJlbmRlcmVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5fdnJTZXJ2aWNlLmVuZFNlc3Npb24oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pLFxyXG4gICAgICB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3NMb2FkZWQuc3Vic2NyaWJlKChsb2FkZWQ6IGJvb2xlYW4pID0+IHtcclxuICAgICAgICBpZiAobG9hZGVkKSB7XHJcbiAgICAgICAgICB0aGlzLl9pbml0UGF0aFRyYWNlcigpO1xyXG4gICAgICAgICAgdGhpcy5fbWF4UmVuZGVyU2FtcGxlcyA9IHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLm1heFJlbmRlclNhbXBsZXM7XHJcbiAgICAgICAgICB0aGlzLl9zc3JTZXJ2aWNlLmVuYWJsZWQgPSB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Mub3B0aW9ucy5zc3JFbmFibGVkO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICAgLy8gdGhpcy5feHJTZXJ2aWNlLnNlc3Npb25TdGFydGVkLnN1YnNjcmliZSgobW9kZTogWHJNb2RlKSA9PiB7XHJcbiAgICAgIC8vICAgaWYgKG1vZGUgPT09IFhyTW9kZS5Bck1vZGUpIHtcclxuICAgICAgLy8gICAgIHRoaXMuX2FuaW1hdGVBcigpO1xyXG4gICAgICAvLyAgIH1cclxuICAgICAgLy8gfSlcclxuICAgICk7XHJcbiAgICB0aGlzLl94clNlcnZpY2UuaW5pdCh0aGlzLnJlbmRlcmVyIGFzIFdlYkdMUmVuZGVyZXIsIHRoaXMuc2NlbmUsIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhKTtcclxuICAgIHRoaXMuc2NlbmVJbml0aWFsaXplZC5uZXh0KHRydWUpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGFkZE9iamVjdChvYmo6IE9iamVjdDNELCBmb3JjZVJlbmRlcjogYm9vbGVhbiA9IHRydWUpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLl9hck1vZGUpIHtcclxuICAgICAgdGhpcy5fYXJTZXJ2aWNlLmFkZE9iamVjdFRvQVJTY2VuZShvYmopO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5zY2VuZS5hZGQob2JqKTtcclxuICAgICAgdGhpcy51cGRhdGVQYXRoVHJhY2VyKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGZvcmNlUmVuZGVyKSB7XHJcbiAgICAgIHRoaXMubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHJlbW92ZU9iamVjdChvYmo6IE9iamVjdDNELCBmb3JjZVJlbmRlcjogYm9vbGVhbiA9IHRydWUsIGNsZWFuVXA6IGJvb2xlYW4gPSB0cnVlKTogdm9pZCB7XHJcbiAgICB0aGlzLnNjZW5lLnJlbW92ZShvYmopO1xyXG4gICAgaWYgKGZvcmNlUmVuZGVyKSB7XHJcbiAgICAgIHRoaXMubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGNsZWFuVXApIHtcclxuICAgICAgVXRpbHMuRGlzcG9zZU9iamVjdChvYmopO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVBhdGhUcmFjZXIoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm9wdGlvbnMucGF0aFRyYWNlciAmJiB0aGlzLnBhdGhUcmFjZXIpIHtcclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLnBhdGhUcmFjZXIuc2V0U2NlbmUodGhpcy5zY2VuZSwgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEpO1xyXG4gICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHBvc2l0aW9uSW5TY2VuZVRvU2NyZWVuKHBvczogVmVjdG9yMyk6IFZlY3RvcjIge1xyXG4gICAgcmV0dXJuIFNjZW5lM0RVdGlsLkNvbnZlcnQzRFBvaW50VG9TY3JlZW5Qb2ludChcclxuICAgICAgcG9zLCB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYSwgdGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoLCB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyByZW5kZXJlclByb3BzQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zY2VuZS50cmF2ZXJzZSgobm9kZTogYW55KSA9PiB7XHJcbiAgICAgIGlmICghbm9kZS5pc01lc2gpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgaWYgKEFycmF5LmlzQXJyYXkobm9kZS5tYXRlcmlhbCkpIHtcclxuICAgICAgICBub2RlLm1hdGVyaWFsLmZvckVhY2goZnVuY3Rpb24gKG1hdGVyaWFsKSB7XHJcbiAgICAgICAgICBtYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgbm9kZS5tYXRlcmlhbC5uZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY3JlYXRlUmVuZGVyV2l0aE9ydGhvZ3JhcGhpY0NhbWVyYSgpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgYXNwZWN0OiBudW1iZXIgPSB3aW5kb3cuaW5uZXJXaWR0aCAvIHdpbmRvdy5pbm5lckhlaWdodDtcclxuICAgIGNvbnN0IGZydXN0dW1TaXplOiBudW1iZXIgPSAxMDtcclxuICAgIGNvbnN0IG9ydGhvZ3JhcGhpY0NhbWVyYTogT3J0aG9ncmFwaGljQ2FtZXJhID0gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYShcclxuICAgICAgZnJ1c3R1bVNpemUgKiBhc3BlY3QgLyAtMixcclxuICAgICAgZnJ1c3R1bVNpemUgKiBhc3BlY3QgLyAyLFxyXG4gICAgICBmcnVzdHVtU2l6ZSAvIDIsXHJcbiAgICAgIGZydXN0dW1TaXplIC8gLTIsXHJcbiAgICAgIDAuMSxcclxuICAgICAgMTAwXHJcbiAgICApO1xyXG4gICAgb3J0aG9ncmFwaGljQ2FtZXJhLnBvc2l0aW9uLnNldCgwLCAzLCAtMik7XHJcbiAgICBvcnRob2dyYXBoaWNDYW1lcmEubG9va0F0KDAsIDAsIC0yKTtcclxuICAgIG9ydGhvZ3JhcGhpY0NhbWVyYS5uYW1lID0gJ29ydGhvZ3JhcGhpY2NhbWVyYSc7XHJcbiAgICB0aGlzLnNjZW5lLmFkZChvcnRob2dyYXBoaWNDYW1lcmEpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgb3J0aG9ncmFwaGljQ2FtZXJhKTtcclxuICAgIGNvbnN0IHJlbmRlcjogc3RyaW5nID0gdGhpcy5yZW5kZXJlci5kb21FbGVtZW50LnRvRGF0YVVSTCgnaW1hZ2UvanBlZycpO1xyXG4gICAgdGhpcy5zY2VuZS5nZXRPYmplY3RCeU5hbWUoJ29ydGhvZ3JhcGhpY2NhbWVyYScpLnJlbW92ZSgpO1xyXG4gICAgdGhpcy5yZW5kZXJlci5yZW5kZXIodGhpcy5zY2VuZSwgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEpO1xyXG4gICAgcmV0dXJuIHJlbmRlcjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRTY2VuZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2NlbmUgPSBuZXcgU2NlbmUoKTtcclxuICAgIHRoaXMuX3NldFNjZW5lQmFja2dyb3VuZCgpO1xyXG4gICAgLy8gY29uc3QgYm94MWdlbyA9IG5ldyBCb3hHZW9tZXRyeSgxLCAxLCAxKTtcclxuICAgIC8vIGNvbnN0IGJveDEgPSBuZXcgTWVzaChib3gxZ2VvLCBuZXcgTWVzaFBob25nTWF0ZXJpYWwoe2NvbG9yOiAnZ3JlZW4nfSkpO1xyXG4gICAgLy8gYm94MS5wb3NpdGlvbi5zZXQoLTAuNSwgMC43LCAtMC41KTtcclxuICAgIC8vIGJveDEuY2FzdFNoYWRvdyA9IHRydWU7XHJcbiAgICAvLyBib3gxLnJlY2VpdmVTaGFkb3cgPSB0cnVlO1xyXG4gICAgLy8gdGhpcy5zY2VuZS5hZGQoYm94MSk7XHJcbiAgICAvLyBjb25zdCBib3gyZ2VvID0gbmV3IEJveEdlb21ldHJ5KDAuNiwgMC42LCAwLjYpO1xyXG4gICAgLy8gY29uc3QgYm94MiA9IG5ldyBNZXNoKGJveDJnZW8sIG5ldyBNZXNoUGhvbmdNYXRlcmlhbCh7Y29sb3I6ICdyZWQnfSkpO1xyXG4gICAgLy8gYm94Mi5wb3NpdGlvbi5zZXQoMC41LCAxLjUsIDAuNSk7XHJcbiAgICAvLyBib3gyLmNhc3RTaGFkb3cgPSB0cnVlO1xyXG4gICAgLy8gYm94Mi5yZWNlaXZlU2hhZG93ID0gdHJ1ZTtcclxuICAgIC8vIHRoaXMuc2NlbmUuYWRkKGJveDIpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdENhbWVyYSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX2NhbWVyYVNlcnZpY2UuaW5pdCh0aGlzLmRvbUVsZW1lbnQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdE91dGxpbmUoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9vdXRsaW5lU2VydmljZS5pbml0KHRoaXMucmVuZGVyZXIgYXMgV2ViR0xSZW5kZXJlciwgdGhpcy5zY2VuZSwgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEsXHJcbiAgICAgIHRoaXMuZG9tRWxlbWVudC5jbGllbnRXaWR0aCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvLFxyXG4gICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0ICogd2luZG93LmRldmljZVBpeGVsUmF0aW8pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfaW5pdFBvc3RQcm9jZXNzaW5nKCk6IHZvaWQge1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3NpbmcuaW5pdCh0aGlzLnJlbmRlcmVyIGFzIFdlYkdMUmVuZGVyZXIsIHRoaXMuc2NlbmUsIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhLFxyXG4gICAgICB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggKiB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyxcclxuICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAqIHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2luaXRQYXRoVHJhY2VyKCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnBhdGhUcmFjZXIpIHtcclxuICAgICAgdGhpcy5wYXRoVHJhY2VyID0gbmV3IFdlYkdMUGF0aFRyYWNlcih0aGlzLnJlbmRlcmVyIGFzIFdlYkdMUmVuZGVyZXIpO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIuc2V0QlZIV29ya2VyKG5ldyBQYXJhbGxlbE1lc2hCVkhXb3JrZXIoKSk7XHJcbiAgICAgIHRoaXMucGF0aFRyYWNlci5maWx0ZXJHbG9zc3lGYWN0b3IgPSAxO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIudGlsZXMuc2V0KDMsIDMpO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIubXVsdGlwbGVJbXBvcnRhbmNlU2FtcGxpbmcgPSB0cnVlO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIudHJhbnNtaXNzaXZlQm91bmNlcyA9IDEwO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIucmVuZGVyU2NhbGUgPSAxO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIuc2V0U2NlbmUodGhpcy5zY2VuZSwgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEpO1xyXG4gICAgICB0aGlzLnBhdGhUcmFjZXIuZW5hYmxlUGF0aFRyYWNpbmcgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyBfaW5pdFJlbmRlcmVyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgLy8gaWYgKFdlYkdQVS5pc0F2YWlsYWJsZSgpID09PSBmYWxzZSAmJiBXZWJHTC5pc1dlYkdMMkF2YWlsYWJsZSgpID09PSBmYWxzZSkge1xyXG4gICAgLy8gICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKCBXZWJHUFUuZ2V0RXJyb3JNZXNzYWdlKCkgKTtcclxuICAgIC8vICAgdGhyb3cgbmV3IEVycm9yKCdObyBXZWJHUFUgb3IgV2ViR0wyIHN1cHBvcnQnKTtcclxuICAgIC8vIH1cclxuICAgIGNvbnN0IGNhbnZhc0VsZW1lbnQ6IEhUTUxDYW52YXNFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7XHJcbiAgICBjb25zdCBjb250ZXh0OiBhbnkgPSBjYW52YXNFbGVtZW50LmdldENvbnRleHQoJ3dlYmdsMicsIHthbnRpYWxpYXM6IHRydWV9KTtcclxuICAgIHRoaXMud2ViR0wyQXZhaWxhYmxlID0gY29udGV4dCAhPT0gdW5kZWZpbmVkO1xyXG4gICAgLy8gdGhpcy5yZW5kZXJlciA9IG5ldyBXZWJHUFVSZW5kZXJlcih7IGFscGhhOiB0cnVlLCBhbnRpYWxpYXM6IHRydWUgfSk7XHJcbiAgICAvLyB0aGlzLnJlbmRlcmVyID1cclxuICAgIC8vICAgbmV3IFdlYkdMUmVuZGVyZXIoe1xyXG4gICAgLy8gICAgIGNhbnZhczogY2FudmFzRWxlbWVudCxcclxuICAgIC8vICAgICBjb250ZXh0OiBjb250ZXh0LFxyXG4gICAgLy8gICAgIGFscGhhOiB0cnVlLFxyXG4gICAgLy8gICAgIGFudGlhbGlhczogdHJ1ZSxcclxuICAgIC8vICAgICBwcmVzZXJ2ZURyYXdpbmdCdWZmZXI6IHRydWUsXHJcbiAgICAvLyAgICAgcHJlbXVsdGlwbGllZEFscGhhOiBmYWxzZS8qLFxyXG4gICAgLy8gICAgIGxvZ2FyaXRobWljRGVwdGhCdWZmZXI6IHRydWUqL1xyXG4gICAgLy8gICB9KTtcclxuICAgIC8vIHRoaXMucmVuZGVyZXIgPSBuZXcgV2ViR0xSZW5kZXJlcih7YWxwaGE6IHRydWUsIGFudGlhbGlhczogZmFsc2UsIHByZXNlcnZlRHJhd2luZ0J1ZmZlcjogdHJ1ZSwgcHJlbXVsdGlwbGllZEFscGhhOiB0cnVlfSk7XHJcbiAgICB0aGlzLnJlbmRlcmVyID0gbmV3IFdlYkdMUmVuZGVyZXIoLyp7XHJcbiAgICAgIHByZWNpc2lvbjogJ2hpZ2hwJyxcclxuICAgICAgcG93ZXJQcmVmZXJlbmNlOiAnaGlnaC1wZXJmb3JtYW5jZScsXHJcbiAgICAgIGFudGlhbGlhczogdHJ1ZSxcclxuICAgICAgc3RlbmNpbDogZmFsc2UsXHJcbiAgICAgIGRlcHRoOiBmYWxzZVxyXG4gICAgfSovKTtcclxuICAgIHRoaXMucmVuZGVyZXIub3V0cHV0Q29sb3JTcGFjZSA9IFNSR0JDb2xvclNwYWNlO1xyXG4gICAgdGhpcy5yZW5kZXJlci5hdXRvQ2xlYXIgPSBmYWxzZTtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0UGl4ZWxSYXRpbyh3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyk7XHJcbiAgICB0aGlzLnJlbmRlcmVyLnRvbmVNYXBwaW5nID0gTm9Ub25lTWFwcGluZzsgLy8gQUNFU0ZpbG1pY1RvbmVNYXBwaW5nOyAvLyBMaW5lYXJUb25lTWFwcGluZztcclxuICAgIHRoaXMucmVuZGVyZXIuc2hhZG93TWFwLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgdGhpcy5yZW5kZXJlci5zaGFkb3dNYXAudHlwZSA9IFBDRlNvZnRTaGFkb3dNYXA7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQuYXBwZW5kQ2hpbGQodGhpcy5yZW5kZXJlci5kb21FbGVtZW50KTtcclxuICAgIHRoaXMucmVuZGVyZXIuZG9tRWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2lkJywgJ3RocmVlZF9jYW52YXMnKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3Jlc2l6ZVJlbmRlcmVyVG9EaXNwbGF5U2l6ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMucmVuZGVyZXIuc2V0U2l6ZSh0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQsIHRydWUpO1xyXG4gICAgdGhpcy5fb3V0bGluZVNlcnZpY2Uuc2V0U2l6ZSh0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQpO1xyXG4gICAgdGhpcy5fcG9zdFByb2Nlc3Npbmcuc2V0U2l6ZSh0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGgsIHRoaXMuZG9tRWxlbWVudC5jbGllbnRIZWlnaHQpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfdXBkYXRlV2luZG93U2l6ZSgpOiB2b2lkIHtcclxuICAgIHRoaXMuX3Jlc2l6ZVJlbmRlcmVyVG9EaXNwbGF5U2l6ZSgpO1xyXG4gICAgUmVsYXRpdmVQb3NpdGlvblV0aWxzLlNldEFwcGxpY2F0aW9uT2Zmc2V0KHRoaXMuZG9tRWxlbWVudCk7XHJcbiAgICBpZiAodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEgaW5zdGFuY2VvZiBQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICBjb25zdCBhc3BlY3QgPSB0aGlzLmRvbUVsZW1lbnQuY2xpZW50V2lkdGggLyB0aGlzLmRvbUVsZW1lbnQuY2xpZW50SGVpZ2h0O1xyXG4gICAgICB0aGlzLl9jYW1lcmFTZXJ2aWNlLnJlYWxBc3BlY3RSYXRpbyA9IGFzcGVjdDtcclxuICAgICAgdGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEuYXNwZWN0ID0gYXNwZWN0O1xyXG4gICAgICAodGhpcy5fY2FtZXJhU2VydmljZS5jYW1lcmEgYXMgUGVyc3BlY3RpdmVDYW1lcmEpLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcclxuICAgIH1cclxuICAgIHRoaXMubmVlZHNSZW5kZXIgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2hlY2tDYW52YXNSZXNpemUoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5kb21FbGVtZW50LmNsaWVudFdpZHRoICE9PSB0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQud2lkdGggfHxcclxuICAgICAgdGhpcy5kb21FbGVtZW50LmNsaWVudEhlaWdodCAhPT0gdGhpcy5yZW5kZXJlci5kb21FbGVtZW50LmhlaWdodCkge1xyXG4gICAgICB0aGlzLl91cGRhdGVXaW5kb3dTaXplKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9yZW5kZXIodCwgZnJhbWUpIHtcclxuICAgIGlmICghdGhpcy5yZW5kZXJlci54ci5lbmFibGVkKSB7XHJcbiAgICAgIFRXRUVOLnVwZGF0ZSgpO1xyXG4gICAgICB0aGlzLl9jaGVja0NhbnZhc1Jlc2l6ZSgpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5vcHRpb25zLnBhdGhUcmFjZXIgJiYgdGhpcy5wYXRoVHJhY2VyKSB7XHJcbiAgICAgIGlmICh0aGlzLl9udW1iZXJPZlNhbXBsZXNSZW5kZXJlZCA+PSB0aGlzLl9tYXhSZW5kZXJTYW1wbGVzKSB7XHJcbiAgICAgICAgdGhpcy5wYXRoVHJhY2VyLmVuYWJsZVBhdGhUcmFjaW5nID0gZmFsc2U7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5wYXRoVHJhY2VyLmVuYWJsZVBhdGhUcmFjaW5nID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmNsZWFyKCk7XHJcbiAgICAgICAgdGhpcy5wYXRoVHJhY2VyLnJlbmRlclNhbXBsZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMuX251bWJlck9mU2FtcGxlc1JlbmRlcmVkID0gTWF0aC5mbG9vcih0aGlzLnBhdGhUcmFjZXIuc2FtcGxlcyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5fbmVlZHNSZW5kZXIgfHwgdGhpcy5hck1vZGUgfHwgdGhpcy5fdmlld01vZGVTZXJ2aWNlLmlzVlJWaWV3QWN0aXZlKCkgfHwgdGhpcy5fb3V0bGluZVNlcnZpY2UubmVlZHNSZW5kZXIpIHtcclxuICAgICAgICB0aGlzLnJlbmRlcmVyLmNsZWFyKCk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2FyTW9kZSAmJiBmcmFtZSkge1xyXG4gICAgICAgICAgdGhpcy5fYXJTZXJ2aWNlLmhhbmRsZUZyYW1lKGZyYW1lKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX3ZpZXdNb2RlU2VydmljZS5pc1ZSVmlld0FjdGl2ZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLl92clNlcnZpY2UucmVuZGVyKCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMub25CZWZvcmVSZW5kZXIubmV4dCh7cmVuZGVyZXI6IHRoaXMucmVuZGVyZXIgYXMgV2ViR0xSZW5kZXJlciwgc2NlbmU6IHRoaXMuc2NlbmV9KTtcclxuICAgICAgICAgIGlmICghdGhpcy5yZW5kZXJpbmdUaHJvdWdoUG9zdFByb2Nlc3NpbmdQaXBlbGluZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZy5yZW5kZXIoKTtcclxuICAgICAgICAgICAgdGhpcy5fb3V0bGluZVNlcnZpY2UucmVuZGVyKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyB0aGlzLnJlbmRlcmVyLnJlbmRlcih0aGlzLnNjZW5lLCB0aGlzLl9jYW1lcmFTZXJ2aWNlLmNhbWVyYSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25BZnRlclJlbmRlci5uZXh0KHtyZW5kZXJlcjogdGhpcy5yZW5kZXJlciBhcyBXZWJHTFJlbmRlcmVyLCBzY2VuZTogdGhpcy5zY2VuZX0pO1xyXG4gICAgICAgIHRoaXMuX291dGxpbmVTZXJ2aWNlLm5lZWRzUmVuZGVyID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5uZWVkc1JlbmRlciA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9hbmltYXRlKCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbmltYXRpb25Mb29wKCh0aW1lc3RhbXAsIGZyYW1lKSA9PiB0aGlzLl9yZW5kZXIodGltZXN0YW1wLCBmcmFtZSkpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX3BhdXNlQW5pbWF0aW9uKCk6IHZvaWQge1xyXG4gICAgdGhpcy5uZWVkc1JlbmRlciA9IHRydWU7XHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgdGhpcy5yZW5kZXJlci5zZXRBbmltYXRpb25Mb29wKG51bGwpO1xyXG4gICAgfSwgMjAwKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX2lzM0RNb2RlKG1vZGU6IFZpZXdNb2RlKTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gbW9kZSAhPT0gVmlld01vZGUuRmxvb3JQbGFuMkQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9zZXRTY2VuZUJhY2tncm91bmQoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9zdWJzLnB1c2goXHJcbiAgICAgIHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5nc0xvYWRlZC5zdWJzY3JpYmUoKGxvYWRlZDogYm9vbGVhbikgPT4ge1xyXG4gICAgICAgICAgaWYgKGxvYWRlZCAmJiB0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2NlbmVCYWNrZ3JvdW5kKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2NlbmUuYmFja2dyb3VuZCA9IG5ldyBUZXh0dXJlTG9hZGVyKCkubG9hZCh0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3Muc2NlbmVCYWNrZ3JvdW5kLCAobWF0ZXJpYWwpID0+IHtcclxuICAgICAgICAgICAgICBtYXRlcmlhbC5jb2xvclNwYWNlID0gU1JHQkNvbG9yU3BhY2U7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChsb2FkZWQgJiYgdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLnNjZW5lQmFja2dyb3VuZENvbG9yKSB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5zY2VuZS5iYWNrZ3JvdW5kID0gbmV3IENvbG9yKHBhcnNlSW50KHRoaXMuX3NldHRpbmdzU2VydmljZS5zZXR0aW5ncy5zY2VuZUJhY2tncm91bmRDb2xvciwgMCkpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICkpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFNjZW5lQ2FudmFzSW1hZ2UoKTogc3RyaW5nIHtcclxuICAgIHRoaXMucmVuZGVyZXIucmVuZGVyKHRoaXMuc2NlbmUsIHRoaXMuX2NhbWVyYVNlcnZpY2UuY2FtZXJhKTtcclxuICAgIHJldHVybiB0aGlzLnJlbmRlcmVyLmRvbUVsZW1lbnQudG9EYXRhVVJMKCdpbWFnZS9qcGVnJyk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
import * as i1 from "../../../core/service/homedecorator-settings.service";
|
|
4
|
+
export class SsrService {
|
|
5
|
+
constructor(_settingsService) {
|
|
6
|
+
this._settingsService = _settingsService;
|
|
7
|
+
this._enabled = false;
|
|
8
|
+
this._subs = [];
|
|
9
|
+
}
|
|
10
|
+
set enabled(value) {
|
|
11
|
+
this._enabled = value;
|
|
12
|
+
if (this._enabled) {
|
|
13
|
+
this._prepareWebsocket();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
get enabled() {
|
|
17
|
+
return this._enabled;
|
|
18
|
+
}
|
|
19
|
+
ngOnDestroy() {
|
|
20
|
+
this._subs.forEach(s => s.unsubscribe());
|
|
21
|
+
}
|
|
22
|
+
sceneChanged(scene) {
|
|
23
|
+
if (this._websocket.readyState === WebSocket.OPEN) {
|
|
24
|
+
const sceneClone = scene.clone(true);
|
|
25
|
+
this._websocket.send(JSON.stringify(sceneClone));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
_prepareWebsocket() {
|
|
29
|
+
if (!this._settingsService.settings.newRenderParameters.websocket) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const webSocketConnection = this._settingsService.settings.newRenderParameters.websocket;
|
|
33
|
+
this._websocket = new WebSocket(webSocketConnection);
|
|
34
|
+
// webSocket.onopen = () => {
|
|
35
|
+
// webSocket.send(JSON.stringify(data));
|
|
36
|
+
// };
|
|
37
|
+
this._websocket.onmessage = (event) => {
|
|
38
|
+
const result = JSON.parse(event.data);
|
|
39
|
+
if (result) {
|
|
40
|
+
console.log(result);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
SsrService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SsrService, deps: [{ token: i1.HomedecoratorSettingsService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
46
|
+
SsrService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SsrService, providedIn: 'root' });
|
|
47
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: SsrService, decorators: [{
|
|
48
|
+
type: Injectable,
|
|
49
|
+
args: [{
|
|
50
|
+
providedIn: 'root'
|
|
51
|
+
}]
|
|
52
|
+
}], ctorParameters: function () { return [{ type: i1.HomedecoratorSettingsService }]; } });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3NyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvY2xpZW50L2FwcC9wbHVnaW5zL2NvcmUzZC9zZXJ2aWNlL3Nzci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQVksTUFBTSxlQUFlLENBQUM7OztBQVFwRCxNQUFNLE9BQU8sVUFBVTtJQWlCckIsWUFDVSxnQkFBOEM7UUFBOUMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE4QjtRQUxoRCxhQUFRLEdBQVksS0FBSyxDQUFDO1FBQzFCLFVBQUssR0FBbUIsRUFBRSxDQUFDO0lBTW5DLENBQUM7SUFsQkQsSUFBVyxPQUFPLENBQUMsS0FBYztRQUMvQixJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztRQUN0QixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDakIsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7U0FDMUI7SUFDSCxDQUFDO0lBRUQsSUFBVyxPQUFPO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQztJQUN2QixDQUFDO0lBV0QsV0FBVztRQUNULElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVNLFlBQVksQ0FBQyxLQUFlO1FBQ2pDLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEtBQUssU0FBUyxDQUFDLElBQUksRUFBRTtZQUNqRCxNQUFNLFVBQVUsR0FBYSxLQUFLLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQy9DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUNsRDtJQUNILENBQUM7SUFFTyxpQkFBaUI7UUFDdkIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsbUJBQW1CLENBQUMsU0FBUyxFQUFFO1lBQ2pFLE9BQU87U0FDUjtRQUNELE1BQU0sbUJBQW1CLEdBQVcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLENBQUM7UUFDakcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFNBQVMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3JELDZCQUE2QjtRQUM3QiwwQ0FBMEM7UUFDMUMsS0FBSztRQUNMLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDcEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEMsSUFBSSxNQUFNLEVBQUU7Z0JBQ1YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQjtRQUNILENBQUMsQ0FBQztJQUNKLENBQUM7O3dHQWhEVSxVQUFVOzRHQUFWLFVBQVUsY0FGVCxNQUFNOzRGQUVQLFVBQVU7a0JBSHRCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3RhYmxlLCBPbkRlc3Ryb3l9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQge0hvbWVkZWNvcmF0b3JTZXR0aW5nc1NlcnZpY2V9IGZyb20gJy4uLy4uLy4uL2NvcmUvc2VydmljZS9ob21lZGVjb3JhdG9yLXNldHRpbmdzLnNlcnZpY2UnO1xyXG5pbXBvcnQge1N1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7T2JqZWN0M0R9IGZyb20gJ3RocmVlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNzclNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xyXG5cclxuICBwdWJsaWMgc2V0IGVuYWJsZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIHRoaXMuX2VuYWJsZWQgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9lbmFibGVkKSB7XHJcbiAgICAgIHRoaXMuX3ByZXBhcmVXZWJzb2NrZXQoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXQgZW5hYmxlZCgpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLl9lbmFibGVkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgX3N1YnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcHJpdmF0ZSBfd2Vic29ja2V0OiBXZWJTb2NrZXQ7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfc2V0dGluZ3NTZXJ2aWNlOiBIb21lZGVjb3JhdG9yU2V0dGluZ3NTZXJ2aWNlXHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX3N1YnMuZm9yRWFjaChzID0+IHMudW5zdWJzY3JpYmUoKSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2NlbmVDaGFuZ2VkKHNjZW5lOiBPYmplY3QzRCk6IHZvaWQge1xyXG4gICAgaWYgKHRoaXMuX3dlYnNvY2tldC5yZWFkeVN0YXRlID09PSBXZWJTb2NrZXQuT1BFTikge1xyXG4gICAgICBjb25zdCBzY2VuZUNsb25lOiBPYmplY3QzRCA9IHNjZW5lLmNsb25lKHRydWUpO1xyXG4gICAgICB0aGlzLl93ZWJzb2NrZXQuc2VuZChKU09OLnN0cmluZ2lmeShzY2VuZUNsb25lKSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIF9wcmVwYXJlV2Vic29ja2V0KCk6IHZvaWQge1xyXG4gICAgaWYgKCF0aGlzLl9zZXR0aW5nc1NlcnZpY2Uuc2V0dGluZ3MubmV3UmVuZGVyUGFyYW1ldGVycy53ZWJzb2NrZXQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgd2ViU29ja2V0Q29ubmVjdGlvbjogc3RyaW5nID0gdGhpcy5fc2V0dGluZ3NTZXJ2aWNlLnNldHRpbmdzLm5ld1JlbmRlclBhcmFtZXRlcnMud2Vic29ja2V0O1xyXG4gICAgdGhpcy5fd2Vic29ja2V0ID0gbmV3IFdlYlNvY2tldCh3ZWJTb2NrZXRDb25uZWN0aW9uKTtcclxuICAgIC8vIHdlYlNvY2tldC5vbm9wZW4gPSAoKSA9PiB7XHJcbiAgICAvLyAgIHdlYlNvY2tldC5zZW5kKEpTT04uc3RyaW5naWZ5KGRhdGEpKTtcclxuICAgIC8vIH07XHJcbiAgICB0aGlzLl93ZWJzb2NrZXQub25tZXNzYWdlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IHJlc3VsdCA9IEpTT04ucGFyc2UoZXZlbnQuZGF0YSk7XHJcbiAgICAgIGlmIChyZXN1bHQpIHtcclxuICAgICAgICBjb25zb2xlLmxvZyhyZXN1bHQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gIH1cclxufVxyXG4iXX0=
|