angular-three 2.0.0-beta.24 → 2.0.0-beta.241
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/esm2022/index.mjs +4 -11
- package/esm2022/lib/canvas.mjs +124 -190
- package/esm2022/lib/directives/args.mjs +13 -25
- package/esm2022/lib/directives/common.mjs +39 -15
- package/esm2022/lib/directives/parent.mjs +11 -26
- package/esm2022/lib/dom/events.mjs +2 -2
- package/esm2022/lib/events.mjs +33 -31
- package/esm2022/lib/instance.mjs +39 -34
- package/esm2022/lib/loader.mjs +50 -32
- package/esm2022/lib/loop.mjs +28 -25
- package/esm2022/lib/portal.mjs +133 -161
- package/esm2022/lib/ref.mjs +22 -20
- package/esm2022/lib/renderer/catalogue.mjs +2 -2
- package/esm2022/lib/renderer/constants.mjs +3 -2
- package/esm2022/lib/renderer/index.mjs +154 -122
- package/esm2022/lib/renderer/store.mjs +209 -178
- package/esm2022/lib/renderer/utils.mjs +52 -79
- package/esm2022/lib/roots.mjs +67 -56
- package/esm2022/lib/routed-scene.mjs +6 -7
- package/esm2022/lib/store.mjs +164 -190
- package/esm2022/lib/three-types.mjs +2 -2
- package/esm2022/lib/utils/apply-props.mjs +24 -28
- package/esm2022/lib/utils/attach.mjs +6 -6
- package/esm2022/lib/utils/before-render.mjs +22 -0
- package/esm2022/lib/utils/create-api-token.mjs +13 -0
- package/esm2022/lib/utils/is.mjs +6 -5
- package/esm2022/lib/utils/make.mjs +19 -17
- package/esm2022/lib/utils/parameters.mjs +56 -0
- package/esm2022/lib/utils/signal-store.mjs +67 -57
- package/esm2022/lib/utils/update.mjs +3 -2
- package/fesm2022/angular-three.mjs +2024 -2092
- package/fesm2022/angular-three.mjs.map +1 -1
- package/index.d.ts +6 -10
- package/lib/canvas.d.ts +1120 -52
- package/lib/directives/args.d.ts +5 -5
- package/lib/directives/common.d.ts +20 -4
- package/lib/directives/parent.d.ts +6 -6
- package/lib/dom/events.d.ts +3 -3
- package/lib/events.d.ts +15 -15
- package/lib/instance.d.ts +26 -16
- package/lib/loader.d.ts +17 -7
- package/lib/loop.d.ts +8 -55
- package/lib/portal.d.ts +32 -35
- package/lib/ref.d.ts +2 -3
- package/lib/renderer/catalogue.d.ts +5 -1
- package/lib/renderer/constants.d.ts +2 -1
- package/lib/renderer/index.d.ts +55 -4
- package/lib/renderer/store.d.ts +23 -25
- package/lib/renderer/utils.d.ts +3 -4
- package/lib/roots.d.ts +7 -6
- package/lib/store.d.ts +26 -28
- package/lib/three-types.d.ts +135 -141
- package/lib/utils/apply-props.d.ts +2 -3
- package/lib/utils/attach.d.ts +4 -4
- package/lib/utils/before-render.d.ts +10 -0
- package/lib/utils/create-api-token.d.ts +23 -0
- package/lib/utils/is.d.ts +13 -13
- package/lib/utils/make.d.ts +10 -9
- package/lib/utils/parameters.d.ts +18 -0
- package/lib/utils/signal-store.d.ts +17 -4
- package/lib/utils/update.d.ts +1 -1
- package/metadata.json +1 -1
- package/package.json +72 -52
- package/web-types.json +1 -1
- package/esm2022/lib/before-render.mjs +0 -13
- package/esm2022/lib/directives/key.mjs +0 -29
- package/esm2022/lib/directives/repeat.mjs +0 -17
- package/esm2022/lib/utils/assert-injection-context.mjs +0 -14
- package/esm2022/lib/utils/create-injection-token.mjs +0 -47
- package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
- package/lib/before-render.d.ts +0 -6
- package/lib/directives/key.d.ts +0 -10
- package/lib/directives/repeat.d.ts +0 -7
- package/lib/utils/assert-injection-context.d.ts +0 -2
- package/lib/utils/create-injection-token.d.ts +0 -27
- package/lib/utils/safe-detect-changes.d.ts +0 -2
- package/plugin/README.md +0 -11
- package/plugin/generators.json +0 -49
- package/plugin/package.json +0 -6
- package/plugin/src/generators/init/compat.d.ts +0 -4
- package/plugin/src/generators/init/compat.js +0 -6
- package/plugin/src/generators/init/compat.js.map +0 -1
- package/plugin/src/generators/init/files/experience/experience.component.html__tmpl__ +0 -4
- package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +0 -17
- package/plugin/src/generators/init/generator.d.ts +0 -6
- package/plugin/src/generators/init/generator.js +0 -155
- package/plugin/src/generators/init/generator.js.map +0 -1
- package/plugin/src/generators/init/schema.json +0 -17
- package/plugin/src/generators/init-cannon/compat.d.ts +0 -2
- package/plugin/src/generators/init-cannon/compat.js +0 -6
- package/plugin/src/generators/init-cannon/compat.js.map +0 -1
- package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
- package/plugin/src/generators/init-cannon/generator.js +0 -22
- package/plugin/src/generators/init-cannon/generator.js.map +0 -1
- package/plugin/src/generators/init-cannon/schema.json +0 -6
- package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
- package/plugin/src/generators/init-postprocessing/compat.js +0 -6
- package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
- package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
- package/plugin/src/generators/init-postprocessing/generator.js +0 -20
- package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
- package/plugin/src/generators/init-postprocessing/schema.json +0 -6
- package/plugin/src/generators/init-soba/compat.d.ts +0 -2
- package/plugin/src/generators/init-soba/compat.js +0 -6
- package/plugin/src/generators/init-soba/compat.js.map +0 -1
- package/plugin/src/generators/init-soba/generator.d.ts +0 -2
- package/plugin/src/generators/init-soba/generator.js +0 -26
- package/plugin/src/generators/init-soba/generator.js.map +0 -1
- package/plugin/src/generators/init-soba/schema.json +0 -6
- package/plugin/src/generators/utils.d.ts +0 -2
- package/plugin/src/generators/utils.js +0 -34
- package/plugin/src/generators/utils.js.map +0 -1
- package/plugin/src/generators/versions.d.ts +0 -12
- package/plugin/src/generators/versions.js +0 -16
- package/plugin/src/generators/versions.js.map +0 -1
- package/plugin/src/index.d.ts +0 -3
- package/plugin/src/index.js +0 -10
- package/plugin/src/index.js.map +0 -1
package/esm2022/lib/roots.mjs
CHANGED
|
@@ -1,21 +1,18 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
1
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
2
|
+
import { ACESFilmicToneMapping, BasicShadowMap, ColorManagement, NoToneMapping, PCFShadowMap, PCFSoftShadowMap, Raycaster, Scene, VSMShadowMap, Vector3, } from 'three';
|
|
3
3
|
import { prepare } from './instance';
|
|
4
4
|
import { injectNgtLoop } from './loop';
|
|
5
5
|
import { injectNgtStore } from './store';
|
|
6
6
|
import { applyProps } from './utils/apply-props';
|
|
7
|
-
import { assertInjectionContext } from './utils/assert-injection-context';
|
|
8
7
|
import { is } from './utils/is';
|
|
9
|
-
import {
|
|
8
|
+
import { makeCameraInstance, makeDpr, makeRendererInstance } from './utils/make';
|
|
10
9
|
import { checkNeedsUpdate } from './utils/update';
|
|
11
10
|
const shallowLoose = { objects: 'shallow', strict: false };
|
|
12
11
|
export const roots = new Map();
|
|
13
12
|
export function injectCanvasRootInitializer(injector) {
|
|
14
|
-
|
|
15
|
-
return runInInjectionContext(injector, () => {
|
|
13
|
+
return assertInjector(injectCanvasRootInitializer, injector, () => {
|
|
16
14
|
const injectedStore = injectNgtStore();
|
|
17
15
|
const loop = injectNgtLoop();
|
|
18
|
-
const destroyRef = inject(DestroyRef);
|
|
19
16
|
return (canvas) => {
|
|
20
17
|
const exist = roots.has(canvas);
|
|
21
18
|
let store = roots.get(canvas);
|
|
@@ -30,14 +27,13 @@ export function injectCanvasRootInitializer(injector) {
|
|
|
30
27
|
roots.set(canvas, store);
|
|
31
28
|
}
|
|
32
29
|
let isConfigured = false;
|
|
33
|
-
let
|
|
34
|
-
destroyRef.onDestroy(() => invalidateRef?.destroy());
|
|
30
|
+
let lastCamera;
|
|
35
31
|
return {
|
|
36
32
|
isConfigured,
|
|
37
33
|
destroy: (timeout = 500) => {
|
|
38
34
|
const root = roots.get(canvas);
|
|
39
35
|
if (root) {
|
|
40
|
-
root.
|
|
36
|
+
root.update((state) => ({ internal: { ...state.internal, active: false } }));
|
|
41
37
|
setTimeout(() => {
|
|
42
38
|
try {
|
|
43
39
|
const state = root.get();
|
|
@@ -56,39 +52,47 @@ export function injectCanvasRootInitializer(injector) {
|
|
|
56
52
|
}
|
|
57
53
|
},
|
|
58
54
|
configure: (inputs) => {
|
|
59
|
-
const { gl: glOptions, size: sizeOptions, camera: cameraOptions, raycaster: raycasterOptions, scene: sceneOptions, events,
|
|
60
|
-
const state = store.
|
|
55
|
+
const { shadows = false, linear = false, flat = false, legacy = false, orthographic = false, frameloop = 'always', dpr = [1, 2], gl: glOptions, size: sizeOptions, camera: cameraOptions, raycaster: raycasterOptions, scene: sceneOptions, events, lookAt, performance, } = inputs;
|
|
56
|
+
const state = store.snapshot;
|
|
61
57
|
const stateToUpdate = {};
|
|
62
58
|
// setup renderer
|
|
63
59
|
let gl = state.gl;
|
|
64
60
|
if (!state.gl)
|
|
65
|
-
stateToUpdate.gl = gl =
|
|
61
|
+
stateToUpdate.gl = gl = makeRendererInstance(glOptions, canvas);
|
|
66
62
|
// setup raycaster
|
|
67
63
|
let raycaster = state.raycaster;
|
|
68
64
|
if (!raycaster)
|
|
69
|
-
stateToUpdate.raycaster = raycaster = new
|
|
65
|
+
stateToUpdate.raycaster = raycaster = new Raycaster();
|
|
70
66
|
// set raycaster options
|
|
71
67
|
const { params, ...options } = raycasterOptions || {};
|
|
72
68
|
if (!is.equ(options, raycaster, shallowLoose))
|
|
73
|
-
applyProps(raycaster,
|
|
69
|
+
applyProps(raycaster, options);
|
|
74
70
|
if (!is.equ(params, raycaster.params, shallowLoose)) {
|
|
75
71
|
applyProps(raycaster, { params: { ...raycaster.params, ...(params || {}) } });
|
|
76
72
|
}
|
|
77
|
-
//
|
|
78
|
-
if (!state.camera) {
|
|
73
|
+
// Create default camera, don't overwrite any user-set state
|
|
74
|
+
if (!state.camera || (state.camera === lastCamera && !is.equ(lastCamera, cameraOptions, shallowLoose))) {
|
|
75
|
+
lastCamera = cameraOptions;
|
|
79
76
|
const isCamera = is.camera(cameraOptions);
|
|
80
|
-
let camera = isCamera ? cameraOptions :
|
|
77
|
+
let camera = isCamera ? cameraOptions : makeCameraInstance(orthographic, state.size);
|
|
81
78
|
if (!isCamera) {
|
|
82
|
-
|
|
79
|
+
camera.position.z = 5;
|
|
80
|
+
if (cameraOptions) {
|
|
83
81
|
applyProps(camera, cameraOptions);
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
if ('aspect' in cameraOptions ||
|
|
83
|
+
'left' in cameraOptions ||
|
|
84
|
+
'right' in cameraOptions ||
|
|
85
|
+
'top' in cameraOptions ||
|
|
86
|
+
'bottom' in cameraOptions) {
|
|
87
|
+
Object.assign(camera, { manual: true });
|
|
88
|
+
camera?.updateProjectionMatrix();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
87
91
|
// always look at center or passed-in lookAt by default
|
|
88
|
-
if (!cameraOptions?.rotation && !cameraOptions?.quaternion) {
|
|
92
|
+
if (!state.camera && !cameraOptions?.rotation && !cameraOptions?.quaternion) {
|
|
89
93
|
if (Array.isArray(lookAt))
|
|
90
94
|
camera.lookAt(lookAt[0], lookAt[1], lookAt[2]);
|
|
91
|
-
else if (lookAt instanceof
|
|
95
|
+
else if (lookAt instanceof Vector3)
|
|
92
96
|
camera.lookAt(lookAt);
|
|
93
97
|
else
|
|
94
98
|
camera.lookAt(0, 0, 0);
|
|
@@ -99,32 +103,35 @@ export function injectCanvasRootInitializer(injector) {
|
|
|
99
103
|
if (!is.instance(camera))
|
|
100
104
|
camera = prepare(camera, { store });
|
|
101
105
|
stateToUpdate.camera = camera;
|
|
106
|
+
// Configure raycaster
|
|
107
|
+
// https://github.com/pmndrs/react-xr/issues/300
|
|
108
|
+
raycaster.camera = camera;
|
|
102
109
|
}
|
|
103
110
|
// Set up scene (one time only!)
|
|
104
111
|
if (!state.scene) {
|
|
105
112
|
let scene;
|
|
106
|
-
if (sceneOptions instanceof
|
|
107
|
-
scene =
|
|
113
|
+
if (sceneOptions instanceof Scene) {
|
|
114
|
+
scene = sceneOptions;
|
|
108
115
|
}
|
|
109
116
|
else {
|
|
110
|
-
scene =
|
|
117
|
+
scene = new Scene();
|
|
111
118
|
if (sceneOptions)
|
|
112
119
|
applyProps(scene, sceneOptions);
|
|
113
120
|
}
|
|
114
|
-
stateToUpdate.scene = scene;
|
|
121
|
+
stateToUpdate.scene = prepare(scene, { store });
|
|
115
122
|
}
|
|
116
123
|
// Set up XR (one time only!)
|
|
117
124
|
if (!state.xr) {
|
|
118
125
|
// Handle frame behavior in WebXR
|
|
119
126
|
const handleXRFrame = (timestamp, frame) => {
|
|
120
|
-
const state = store.
|
|
127
|
+
const state = store.snapshot;
|
|
121
128
|
if (state.frameloop === 'never')
|
|
122
129
|
return;
|
|
123
130
|
loop.advance(timestamp, true, store, frame);
|
|
124
131
|
};
|
|
125
132
|
// Toggle render switching on session
|
|
126
133
|
const handleSessionChange = () => {
|
|
127
|
-
const state = store.
|
|
134
|
+
const state = store.snapshot;
|
|
128
135
|
state.gl.xr.enabled = state.gl.xr.isPresenting;
|
|
129
136
|
state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null);
|
|
130
137
|
if (!state.gl.xr.isPresenting)
|
|
@@ -152,16 +159,16 @@ export function injectCanvasRootInitializer(injector) {
|
|
|
152
159
|
const oldType = gl.shadowMap.type;
|
|
153
160
|
gl.shadowMap.enabled = !!shadows;
|
|
154
161
|
if (typeof shadows === 'boolean') {
|
|
155
|
-
gl.shadowMap.type =
|
|
162
|
+
gl.shadowMap.type = PCFSoftShadowMap;
|
|
156
163
|
}
|
|
157
164
|
else if (typeof shadows === 'string') {
|
|
158
165
|
const types = {
|
|
159
|
-
basic:
|
|
160
|
-
percentage:
|
|
161
|
-
soft:
|
|
162
|
-
variance:
|
|
166
|
+
basic: BasicShadowMap,
|
|
167
|
+
percentage: PCFShadowMap,
|
|
168
|
+
soft: PCFSoftShadowMap,
|
|
169
|
+
variance: VSMShadowMap,
|
|
163
170
|
};
|
|
164
|
-
gl.shadowMap.type = types[shadows] ??
|
|
171
|
+
gl.shadowMap.type = types[shadows] ?? PCFSoftShadowMap;
|
|
165
172
|
}
|
|
166
173
|
else if (is.obj(shadows)) {
|
|
167
174
|
Object.assign(gl.shadowMap, shadows);
|
|
@@ -170,21 +177,23 @@ export function injectCanvasRootInitializer(injector) {
|
|
|
170
177
|
checkNeedsUpdate(gl.shadowMap);
|
|
171
178
|
}
|
|
172
179
|
// Safely set color management if available.
|
|
173
|
-
// Avoid accessing
|
|
174
|
-
if (
|
|
175
|
-
const
|
|
176
|
-
if ('enabled' in
|
|
177
|
-
|
|
178
|
-
else if ('legacyMode' in
|
|
179
|
-
|
|
180
|
+
// Avoid accessing ColorManagement to play nice with older versions
|
|
181
|
+
if (ColorManagement) {
|
|
182
|
+
const colorManagement = ColorManagement;
|
|
183
|
+
if ('enabled' in colorManagement)
|
|
184
|
+
colorManagement['enabled'] = !legacy ?? false;
|
|
185
|
+
else if ('legacyMode' in colorManagement)
|
|
186
|
+
colorManagement['legacyMode'] = legacy ?? true;
|
|
187
|
+
}
|
|
188
|
+
if (!isConfigured) {
|
|
189
|
+
// set color space and tonemapping preferences once
|
|
190
|
+
const LinearEncoding = 3000;
|
|
191
|
+
const sRGBEncoding = 3001;
|
|
192
|
+
applyProps(gl, {
|
|
193
|
+
outputEncoding: linear ? LinearEncoding : sRGBEncoding,
|
|
194
|
+
toneMapping: flat ? NoToneMapping : ACESFilmicToneMapping,
|
|
195
|
+
});
|
|
180
196
|
}
|
|
181
|
-
// set color space and tonemapping preferences
|
|
182
|
-
const LinearEncoding = 3000;
|
|
183
|
-
const sRGBEncoding = 3001;
|
|
184
|
-
applyProps(gl, {
|
|
185
|
-
outputEncoding: linear ? LinearEncoding : sRGBEncoding,
|
|
186
|
-
toneMapping: flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping,
|
|
187
|
-
});
|
|
188
197
|
// Update color management state
|
|
189
198
|
if (state.legacy !== legacy)
|
|
190
199
|
stateToUpdate.legacy = legacy;
|
|
@@ -209,7 +218,7 @@ export function injectCanvasRootInitializer(injector) {
|
|
|
209
218
|
if (performance && !is.equ(performance, state.performance, shallowLoose)) {
|
|
210
219
|
stateToUpdate.performance = { ...state.performance, ...performance };
|
|
211
220
|
}
|
|
212
|
-
store.
|
|
221
|
+
store.update(stateToUpdate);
|
|
213
222
|
// Check size, allow it to take on container bounds initially
|
|
214
223
|
const size = computeInitialSize(canvas, sizeOptions);
|
|
215
224
|
if (!is.equ(size, state.size, shallowLoose)) {
|
|
@@ -222,19 +231,21 @@ export function injectCanvasRootInitializer(injector) {
|
|
|
222
231
|
if (state.frameloop !== frameloop)
|
|
223
232
|
state.setFrameloop(frameloop);
|
|
224
233
|
isConfigured = true;
|
|
225
|
-
invalidateRef?.destroy();
|
|
226
|
-
invalidateRef = effect(() => void store.state().invalidate(), { manualCleanup: true, injector });
|
|
227
234
|
},
|
|
228
235
|
};
|
|
229
236
|
};
|
|
230
237
|
});
|
|
231
238
|
}
|
|
232
239
|
function computeInitialSize(canvas, defaultSize) {
|
|
233
|
-
if (defaultSize)
|
|
240
|
+
if (defaultSize) {
|
|
234
241
|
return defaultSize;
|
|
235
|
-
|
|
242
|
+
}
|
|
243
|
+
if (typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement && canvas.parentElement) {
|
|
236
244
|
return canvas.parentElement.getBoundingClientRect();
|
|
237
245
|
}
|
|
246
|
+
if (typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {
|
|
247
|
+
return { width: canvas.width, height: canvas.height, top: 0, left: 0 };
|
|
248
|
+
}
|
|
238
249
|
return { width: 0, height: 0, top: 0, left: 0 };
|
|
239
250
|
}
|
|
240
251
|
// Disposes an object and all its properties
|
|
@@ -246,4 +257,4 @@ function dispose(obj) {
|
|
|
246
257
|
delete obj[p];
|
|
247
258
|
}
|
|
248
259
|
}
|
|
249
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yb290cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUscUJBQXFCLEVBQWlDLE1BQU0sZUFBZSxDQUFDO0FBQ2pILE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBRS9CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN2QyxPQUFPLEVBQUUsY0FBYyxFQUErQixNQUFNLFNBQVMsQ0FBQztBQUV0RSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDMUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRS9FLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxELE1BQU0sWUFBWSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBK0MsQ0FBQztBQUU1RSxNQUFNLFVBQVUsMkJBQTJCLENBQUMsUUFBbUI7SUFDOUQsUUFBUSxHQUFHLHNCQUFzQixDQUFDLDJCQUEyQixFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRXpFLE9BQU8scUJBQXFCLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUMzQyxNQUFNLGFBQWEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxNQUFN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ekIsYUFBYSxHQUFHLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQyxVQUFVLEVBQUUsRUFBRSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQztnQkFDbEcsQ0FBQzthQUNELENBQUM7UUFDSCxDQUFDLENBQUM7SUFDSCxDQUFDLENBQUMsQ0FBQztBQUNKLENBQUM7QUFJRCxTQUFTLGtCQUFrQixDQUFDLE1BQWlELEVBQUUsV0FBcUI7SUFDbkcsSUFBSSxXQUFXO1FBQUUsT0FBTyxXQUFXLENBQUM7SUFFcEMsSUFBSSxNQUFNLFlBQVksaUJBQWlCLElBQUksTUFBTSxDQUFDLGFBQWEsRUFBRTtRQUNoRSxPQUFPLE1BQU0sQ0FBQyxhQUFhLENBQUMscUJBQXFCLEVBQUUsQ0FBQztLQUNwRDtJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQsQ0FBQztBQUVELDRDQUE0QztBQUM1QyxTQUFTLE9BQU8sQ0FBMkUsR0FBUztJQUNuRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPO1FBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZELEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFO1FBQ25CLENBQVMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUFDO1FBQ3ZCLE9BQU8sR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ2Q7QUFDRixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVzdHJveVJlZiwgZWZmZWN0LCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgdHlwZSBFZmZlY3RSZWYsIHR5cGUgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCAqIGFzIFRIUkVFIGZyb20gJ3RocmVlJztcbmltcG9ydCB0eXBlIHsgTmd0Q2FudmFzSW5wdXRzIH0gZnJvbSAnLi9jYW52YXMnO1xuaW1wb3J0IHsgcHJlcGFyZSB9IGZyb20gJy4vaW5zdGFuY2UnO1xuaW1wb3J0IHsgaW5qZWN0Tmd0TG9vcCB9IGZyb20gJy4vbG9vcCc7XG5pbXBvcnQgeyBpbmplY3ROZ3RTdG9yZSwgdHlwZSBOZ3RTaXplLCB0eXBlIE5ndFN0YXRlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCwgTmd0RXF1Q29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi91dGlscy9hcHBseS1wcm9wcyc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3Rpb25Db250ZXh0IH0gZnJvbSAnLi91dGlscy9hc3NlcnQtaW5qZWN0aW9uLWNvbnRleHQnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IG1ha2VEZWZhdWx0Q2FtZXJhLCBtYWtlRGVmYXVsdFJlbmRlcmVyLCBtYWtlRHByIH0gZnJvbSAnLi91dGlscy9tYWtlJztcbmltcG9ydCB0eXBlIHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlIH0gZnJvbSAnLi91dGlscy91cGRhdGUnO1xuXG5jb25zdCBzaGFsbG93TG9vc2UgPSB7IG9iamVjdHM6ICdzaGFsbG93Jywgc3RyaWN0OiBmYWxzZSB9IGFzIE5ndEVxdUNvbmZpZztcblxuZXhwb3J0IGNvbnN0IHJvb3RzID0gbmV3IE1hcDxIVE1MQ2FudmFzRWxlbWVudCwgTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+PigpO1xuXG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0Q2FudmFzUm9vdEluaXRpYWxpemVyKGluamVjdG9yPzogSW5qZWN0b3IpIHtcblx0aW5qZWN0b3IgPSBhc3NlcnRJbmplY3Rpb25Db250ZXh0KGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplciwgaW5qZWN0b3IpO1xuXG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBpbmplY3RlZFN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0XHRjb25zdCBsb29wID0gaW5qZWN0Tmd0TG9vcCgpO1xuXHRcdGNvbnN0IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cblx0XHRyZXR1cm4gKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQpID0+IHtcblx0XHRcdGNvbnN0IGV4aXN0ID0gcm9vdHMuaGFzKGNhbnZhcyk7XG5cdFx0XHRsZXQgc3RvcmUgPSByb290cy5nZXQoY2FudmFzKSBhcyBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT47XG5cblx0XHRcdGlmIChzdG9yZSkge1xuXHRcdFx0XHRjb25zb2xlLndhcm4oJ1tOR1RdIFNhbWUgY2FudmFzIHJvb3QgaXMgYmVpbmcgY3JlYXRlZCB0d2ljZScpO1xuXHRcdFx0fVxuXG5cdFx0XHRzdG9yZSB8fD0gaW5qZWN0ZWRTdG9yZTtcblxuXHRcdFx0aWYgKCFzdG9yZSkge1xuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoJ1tOR1RdIE5vIHN0b3JlIGluaXRpYWxpemVkJyk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICghZXhpc3QpIHtcblx0XHRcdFx0cm9vdHMuc2V0KGNhbnZhcywgc3RvcmUpO1xuXHRcdFx0fVxuXG5cdFx0XHRsZXQgaXNDb25maWd1cmVkID0gZmFsc2U7XG5cdFx0XHRsZXQgaW52YWxpZGF0ZVJlZjogRWZmZWN0UmVmO1xuXG5cdFx0XHRkZXN0cm95UmVmLm9uRGVzdHJveSgoKSA9PiBpbnZhbGlkYXRlUmVmPy5kZXN0cm95KCkpO1xuXG5cdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRpc0NvbmZpZ3VyZWQsXG5cdFx0XHRcdGRlc3Ryb3k6ICh0aW1lb3V0ID0gNTAwKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qgcm9vdCA9IHJvb3RzLmdldChjYW52YXMpO1xuXHRcdFx0XHRcdGlmIChyb290KSB7XG5cdFx0XHRcdFx0XHRyb290LnNldCgoc3RhdGUpID0+ICh7IGludGVybmFsOiB7IC4uLnN0YXRlLmludGVybmFsLCBhY3RpdmU6IGZhbHNlIH0gfSkpO1xuXHRcdFx0XHRcdFx0c2V0VGltZW91dCgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3Qgc3RhdGUgPSByb290LmdldCgpO1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmV2ZW50cy5kaXNjb25uZWN0Py4oKTtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZS5nbD8ucmVuZGVyTGlzdHM/LmRpc3Bvc2U/LigpO1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmdsPy5mb3JjZUNvbnRleHRMb3NzPy4oKTtcblx0XHRcdFx0XHRcdFx0XHRpZiAoc3RhdGUuZ2w/LnhyKSBzdGF0ZS54ci5kaXNjb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRcdFx0ZGlzcG9zZShzdGF0ZSk7XG5cdFx0XHRcdFx0XHRcdFx0cm9vdHMuZGVsZXRlKGNhbnZhcyk7XG5cdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRcdFx0XHRjb25zb2xlLmVycm9yKCdbTkdUXSBVbmV4cGVjdGVkIGVycm9yIHdoaWxlIGRlc3Ryb3lpbmcgQ2FudmFzIFJvb3QnLCBlKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSwgdGltZW91dCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHRjb25maWd1cmU6IChpbnB1dHM6IE5ndENhbnZhc0lucHV0cykgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IHtcblx0XHRcdFx0XHRcdGdsOiBnbE9wdGlvbnMsXG5cdFx0XHRcdFx0XHRzaXplOiBzaXplT3B0aW9ucyxcblx0XHRcdFx0XHRcdGNhbWVyYTogY2FtZXJhT3B0aW9ucyxcblx0XHRcdFx0XHRcdHJheWNhc3RlcjogcmF5Y2FzdGVyT3B0aW9ucyxcblx0XHRcdFx0XHRcdHNjZW5lOiBzY2VuZU9wdGlvbnMsXG5cdFx0XHRcdFx0XHRldmVudHMsXG5cdFx0XHRcdFx0XHRvcnRob2dyYXBoaWMsXG5cdFx0XHRcdFx0XHRsb29rQXQsXG5cdFx0XHRcdFx0XHRzaGFkb3dzLFxuXHRcdFx0XHRcdFx0bGluZWFyLFxuXHRcdFx0XHRcdFx0bGVnYWN5LFxuXHRcdFx0XHRcdFx0ZmxhdCxcblx0XHRcdFx0XHRcdGRwcixcblx0XHRcdFx0XHRcdGZyYW1lbG9vcCxcblx0XHRcdFx0XHRcdHBlcmZvcm1hbmNlLFxuXHRcdFx0XHRcdH0gPSBpbnB1dHM7XG5cblx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLmdldCgpO1xuXHRcdFx0XHRcdGNvbnN0IHN0YXRlVG9VcGRhdGU6IFBhcnRpYWw8Tmd0U3RhdGU+ID0ge307XG5cblx0XHRcdFx0XHQvLyBzZXR1cCByZW5kZXJlclxuXHRcdFx0XHRcdGxldCBnbCA9IHN0YXRlLmdsO1xuXHRcdFx0XHRcdGlmICghc3RhdGUuZ2wpIHN0YXRlVG9VcGRhdGUuZ2wgPSBnbCA9IG1ha2VEZWZhdWx0UmVuZGVyZXIoZ2xPcHRpb25zLCBjYW52YXMpO1xuXG5cdFx0XHRcdFx0Ly8gc2V0dXAgcmF5Y2FzdGVyXG5cdFx0XHRcdFx0bGV0IHJheWNhc3RlciA9IHN0YXRlLnJheWNhc3Rlcjtcblx0XHRcdFx0XHRpZiAoIXJheWNhc3Rlcikgc3RhdGVUb1VwZGF0ZS5yYXljYXN0ZXIgPSByYXljYXN0ZXIgPSBuZXcgVEhSRUUuUmF5Y2FzdGVyKCk7XG5cblx0XHRcdFx0XHQvLyBzZXQgcmF5Y2FzdGVyIG9wdGlvbnNcblx0XHRcdFx0XHRjb25zdCB7IHBhcmFtcywgLi4ub3B0aW9ucyB9ID0gcmF5Y2FzdGVyT3B0aW9ucyB8fCB7fTtcblx0XHRcdFx0XHRpZiAoIWlzLmVxdShvcHRpb25zLCByYXljYXN0ZXIsIHNoYWxsb3dMb29zZSkpIGFwcGx5UHJvcHMocmF5Y2FzdGVyLCB7IC4uLm9wdGlvbnMgfSk7XG5cdFx0XHRcdFx0aWYgKCFpcy5lcXUocGFyYW1zLCByYXljYXN0ZXIucGFyYW1zLCBzaGFsbG93TG9vc2UpKSB7XG5cdFx0XHRcdFx0XHRhcHBseVByb3BzKHJheWNhc3RlciwgeyBwYXJhbXM6IHsgLi4ucmF5Y2FzdGVyLnBhcmFtcywgLi4uKHBhcmFtcyB8fCB7fSkgfSB9KTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBjcmVhdGUgZGVmYXVsdCBjYW1lcmFcblx0XHRcdFx0XHRpZiAoIXN0YXRlLmNhbWVyYSkge1xuXHRcdFx0XHRcdFx0Y29uc3QgaXNDYW1lcmEgPSBpcy5jYW1lcmEoY2FtZXJhT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHRsZXQgY2FtZXJhID0gaXNDYW1lcmEgPyBjYW1lcmFPcHRpb25zIDogbWFrZURlZmF1bHRDYW1lcmEob3J0aG9ncmFwaGljIHx8IGZhbHNlLCBzdGF0ZS5zaXplKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFpc0NhbWVyYSkge1xuXHRcdFx0XHRcdFx0XHRpZiAoY2FtZXJhT3B0aW9ucykgYXBwbHlQcm9wcyhjYW1lcmEsIGNhbWVyYU9wdGlvbnMpO1xuXG5cdFx0XHRcdFx0XHRcdC8vIHNldCBwb3NpdGlvbi56XG5cdFx0XHRcdFx0XHRcdGlmICghY2FtZXJhT3B0aW9ucz8ucG9zaXRpb24pIGNhbWVyYS5wb3NpdGlvbi56ID0gNTtcblxuXHRcdFx0XHRcdFx0XHQvLyBhbHdheXMgbG9vayBhdCBjZW50ZXIgb3IgcGFzc2VkLWluIGxvb2tBdCBieSBkZWZhdWx0XG5cdFx0XHRcdFx0XHRcdGlmICghY2FtZXJhT3B0aW9ucz8ucm90YXRpb24gJiYgIWNhbWVyYU9wdGlvbnM/LnF1YXRlcm5pb24pIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShsb29rQXQpKSBjYW1lcmEubG9va0F0KGxvb2tBdFswXSwgbG9va0F0WzFdLCBsb29rQXRbMl0pO1xuXHRcdFx0XHRcdFx0XHRcdGVsc2UgaWYgKGxvb2tBdCBpbnN0YW5jZW9mIFRIUkVFLlZlY3RvcjMpIGNhbWVyYS5sb29rQXQobG9va0F0KTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGNhbWVyYS5sb29rQXQoMCwgMCwgMCk7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB1cGRhdGUgcHJvamVjdGlvbiBtYXRyaXggYWZ0ZXIgYXBwbHlwcm9wc1xuXHRcdFx0XHRcdFx0XHRjYW1lcmEudXBkYXRlUHJvamVjdGlvbk1hdHJpeD8uKCk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmICghaXMuaW5zdGFuY2UoY2FtZXJhKSkgY2FtZXJhID0gcHJlcGFyZShjYW1lcmEsIHsgc3RvcmUgfSk7XG5cblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUuY2FtZXJhID0gY2FtZXJhO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNldCB1cCBzY2VuZSAob25lIHRpbWUgb25seSEpXG5cdFx0XHRcdFx0aWYgKCFzdGF0ZS5zY2VuZSkge1xuXHRcdFx0XHRcdFx0bGV0IHNjZW5lOiBUSFJFRS5TY2VuZTtcblxuXHRcdFx0XHRcdFx0aWYgKHNjZW5lT3B0aW9ucyBpbnN0YW5jZW9mIFRIUkVFLlNjZW5lKSB7XG5cdFx0XHRcdFx0XHRcdHNjZW5lID0gcHJlcGFyZShzY2VuZU9wdGlvbnMsIHsgc3RvcmUgfSk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRzY2VuZSA9IHByZXBhcmUobmV3IFRIUkVFLlNjZW5lKCksIHsgc3RvcmUgfSk7XG5cdFx0XHRcdFx0XHRcdGlmIChzY2VuZU9wdGlvbnMpIGFwcGx5UHJvcHMoc2NlbmUsIHNjZW5lT3B0aW9ucyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUuc2NlbmUgPSBzY2VuZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTZXQgdXAgWFIgKG9uZSB0aW1lIG9ubHkhKVxuXHRcdFx0XHRcdGlmICghc3RhdGUueHIpIHtcblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmcmFtZSBiZWhhdmlvciBpbiBXZWJYUlxuXHRcdFx0XHRcdFx0Y29uc3QgaGFuZGxlWFJGcmFtZTogWFJGcmFtZVJlcXVlc3RDYWxsYmFjayA9ICh0aW1lc3RhbXA6IG51bWJlciwgZnJhbWU/OiBYUkZyYW1lKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cdFx0XHRcdFx0XHRcdGlmIChzdGF0ZS5mcmFtZWxvb3AgPT09ICduZXZlcicpIHJldHVybjtcblx0XHRcdFx0XHRcdFx0bG9vcC5hZHZhbmNlKHRpbWVzdGFtcCwgdHJ1ZSwgc3RvcmUsIGZyYW1lKTtcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdC8vIFRvZ2dsZSByZW5kZXIgc3dpdGNoaW5nIG9uIHNlc3Npb25cblx0XHRcdFx0XHRcdGNvbnN0IGhhbmRsZVNlc3Npb25DaGFuZ2UgPSAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG5cdFx0XHRcdFx0XHRcdHN0YXRlLmdsLnhyLmVuYWJsZWQgPSBzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmc7XG5cblx0XHRcdFx0XHRcdFx0c3RhdGUuZ2wueHIuc2V0QW5pbWF0aW9uTG9vcChzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcgPyBoYW5kbGVYUkZyYW1lIDogbnVsbCk7XG5cdFx0XHRcdFx0XHRcdGlmICghc3RhdGUuZ2wueHIuaXNQcmVzZW50aW5nKSBsb29wLmludmFsaWRhdGUoc3RvcmUpO1xuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Ly8gV2ViWFIgc2Vzc2lvbiBtYW5hZ2VyXG5cdFx0XHRcdFx0XHRjb25zdCB4ciA9IHtcblx0XHRcdFx0XHRcdFx0Y29ubmVjdDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25lbmQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0ZGlzY29ubmVjdDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGdsLnhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25zdGFydCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHRcdGdsLnhyLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Nlc3Npb25lbmQnLCBoYW5kbGVTZXNzaW9uQ2hhbmdlKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdC8vIFN1YnNjcmliZSB0byBXZWJYUiBzZXNzaW9uIGV2ZW50c1xuXHRcdFx0XHRcdFx0aWYgKGdsLnhyICYmIHR5cGVvZiBnbC54ci5hZGRFdmVudExpc3RlbmVyID09PSAnZnVuY3Rpb24nKSB4ci5jb25uZWN0KCk7XG5cdFx0XHRcdFx0XHRzdGF0ZVRvVXBkYXRlLnhyID0geHI7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU2V0IHNoYWRvd21hcFxuXHRcdFx0XHRcdGlmIChnbC5zaGFkb3dNYXApIHtcblx0XHRcdFx0XHRcdGNvbnN0IG9sZEVuYWJsZWQgPSBnbC5zaGFkb3dNYXAuZW5hYmxlZDtcblx0XHRcdFx0XHRcdGNvbnN0IG9sZFR5cGUgPSBnbC5zaGFkb3dNYXAudHlwZTtcblx0XHRcdFx0XHRcdGdsLnNoYWRvd01hcC5lbmFibGVkID0gISFzaGFkb3dzO1xuXG5cdFx0XHRcdFx0XHRpZiAodHlwZW9mIHNoYWRvd3MgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRcdFx0XHRnbC5zaGFkb3dNYXAudHlwZSA9IFRIUkVFLlBDRlNvZnRTaGFkb3dNYXA7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKHR5cGVvZiBzaGFkb3dzID09PSAnc3RyaW5nJykge1xuXHRcdFx0XHRcdFx0XHRjb25zdCB0eXBlcyA9IHtcblx0XHRcdFx0XHRcdFx0XHRiYXNpYzogVEhSRUUuQmFzaWNTaGFkb3dNYXAsXG5cdFx0XHRcdFx0XHRcdFx0cGVyY2VudGFnZTogVEhSRUUuUENGU2hhZG93TWFwLFxuXHRcdFx0XHRcdFx0XHRcdHNvZnQ6IFRIUkVFLlBDRlNvZnRTaGFkb3dNYXAsXG5cdFx0XHRcdFx0XHRcdFx0dmFyaWFuY2U6IFRIUkVFLlZTTVNoYWRvd01hcCxcblx0XHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHRcdFx0Z2wuc2hhZG93TWFwLnR5cGUgPSB0eXBlc1tzaGFkb3dzXSA/PyBUSFJFRS5QQ0ZTb2Z0U2hhZG93TWFwO1xuXHRcdFx0XHRcdFx0fSBlbHNlIGlmIChpcy5vYmooc2hhZG93cykpIHtcblx0XHRcdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihnbC5zaGFkb3dNYXAsIHNoYWRvd3MpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAob2xkRW5hYmxlZCAhPT0gZ2wuc2hhZG93TWFwLmVuYWJsZWQgfHwgb2xkVHlwZSAhPT0gZ2wuc2hhZG93TWFwLnR5cGUpXG5cdFx0XHRcdFx0XHRcdGNoZWNrTmVlZHNVcGRhdGUoZ2wuc2hhZG93TWFwKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTYWZlbHkgc2V0IGNvbG9yIG1hbmFnZW1lbnQgaWYgYXZhaWxhYmxlLlxuXHRcdFx0XHRcdC8vIEF2b2lkIGFjY2Vzc2luZyBUSFJFRS5Db2xvck1hbmFnZW1lbnQgdG8gcGxheSBuaWNlIHdpdGggb2xkZXIgdmVyc2lvbnNcblx0XHRcdFx0XHRpZiAoVEhSRUUuQ29sb3JNYW5hZ2VtZW50KSB7XG5cdFx0XHRcdFx0XHRjb25zdCBDb2xvck1hbmFnZW1lbnQgPSBUSFJFRS5Db2xvck1hbmFnZW1lbnQgYXMgTmd0QW55UmVjb3JkO1xuXHRcdFx0XHRcdFx0aWYgKCdlbmFibGVkJyBpbiBDb2xvck1hbmFnZW1lbnQpIENvbG9yTWFuYWdlbWVudFsnZW5hYmxlZCddID0gIWxlZ2FjeSA/PyBmYWxzZTtcblx0XHRcdFx0XHRcdGVsc2UgaWYgKCdsZWdhY3lNb2RlJyBpbiBDb2xvck1hbmFnZW1lbnQpIENvbG9yTWFuYWdlbWVudFsnbGVnYWN5TW9kZSddID0gbGVnYWN5ID8/IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gc2V0IGNvbG9yIHNwYWNlIGFuZCB0b25lbWFwcGluZyBwcmVmZXJlbmNlc1xuXHRcdFx0XHRcdGNvbnN0IExpbmVhckVuY29kaW5nID0gMzAwMDtcblx0XHRcdFx0XHRjb25zdCBzUkdCRW5jb2RpbmcgPSAzMDAxO1xuXHRcdFx0XHRcdGFwcGx5UHJvcHMoZ2wsIHtcblx0XHRcdFx0XHRcdG91dHB1dEVuY29kaW5nOiBsaW5lYXIgPyBMaW5lYXJFbmNvZGluZyA6IHNSR0JFbmNvZGluZyxcblx0XHRcdFx0XHRcdHRvbmVNYXBwaW5nOiBmbGF0ID8gVEhSRUUuTm9Ub25lTWFwcGluZyA6IFRIUkVFLkFDRVNGaWxtaWNUb25lTWFwcGluZyxcblx0XHRcdFx0XHR9KTtcblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBjb2xvciBtYW5hZ2VtZW50IHN0YXRlXG5cdFx0XHRcdFx0aWYgKHN0YXRlLmxlZ2FjeSAhPT0gbGVnYWN5KSBzdGF0ZVRvVXBkYXRlLmxlZ2FjeSA9IGxlZ2FjeTtcblx0XHRcdFx0XHRpZiAoc3RhdGUubGluZWFyICE9PSBsaW5lYXIpIHN0YXRlVG9VcGRhdGUubGluZWFyID0gbGluZWFyO1xuXHRcdFx0XHRcdGlmIChzdGF0ZS5mbGF0ICE9PSBmbGF0KSBzdGF0ZVRvVXBkYXRlLmZsYXQgPSBmbGF0O1xuXG5cdFx0XHRcdFx0Ly8gU2V0IGdsIHByb3BzXG5cdFx0XHRcdFx0Z2wuc2V0Q2xlYXJBbHBoYSgwKTtcblx0XHRcdFx0XHRnbC5zZXRQaXhlbFJhdGlvKG1ha2VEcHIoc3RhdGUudmlld3BvcnQuZHByKSk7XG5cdFx0XHRcdFx0Z2wuc2V0U2l6ZShzdGF0ZS5zaXplLndpZHRoLCBzdGF0ZS5zaXplLmhlaWdodCk7XG5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpcy5vYmooZ2xPcHRpb25zKSAmJlxuXHRcdFx0XHRcdFx0ISh0eXBlb2YgZ2xPcHRpb25zID09PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0XHRcdFx0IWlzLnJlbmRlcmVyKGdsT3B0aW9ucykgJiZcblx0XHRcdFx0XHRcdCFpcy5lcXUoZ2xPcHRpb25zLCBnbCwgc2hhbGxvd0xvb3NlKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0YXBwbHlQcm9wcyhnbCwgZ2xPcHRpb25zKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBldmVudHMgaW50ZXJuYWxseVxuXHRcdFx0XHRcdGlmIChldmVudHMgJiYgIXN0YXRlLmV2ZW50cy5oYW5kbGVycykgc3RhdGVUb1VwZGF0ZS5ldmVudHMgPSBldmVudHMoc3RvcmUpO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgcGVyZm9ybWFuY2Vcblx0XHRcdFx0XHRpZiAocGVyZm9ybWFuY2UgJiYgIWlzLmVxdShwZXJmb3JtYW5jZSwgc3RhdGUucGVyZm9ybWFuY2UsIHNoYWxsb3dMb29zZSkpIHtcblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUucGVyZm9ybWFuY2UgPSB7IC4uLnN0YXRlLnBlcmZvcm1hbmNlLCAuLi5wZXJmb3JtYW5jZSB9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN0b3JlLnNldChzdGF0ZVRvVXBkYXRlKTtcblxuXHRcdFx0XHRcdC8vIENoZWNrIHNpemUsIGFsbG93IGl0IHRvIHRha2Ugb24gY29udGFpbmVyIGJvdW5kcyBpbml0aWFsbHlcblx0XHRcdFx0XHRjb25zdCBzaXplID0gY29tcHV0ZUluaXRpYWxTaXplKGNhbnZhcywgc2l6ZU9wdGlvbnMpO1xuXHRcdFx0XHRcdGlmICghaXMuZXF1KHNpemUsIHN0YXRlLnNpemUsIHNoYWxsb3dMb29zZSkpIHtcblx0XHRcdFx0XHRcdHN0YXRlLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIHNpemUudG9wLCBzaXplLmxlZnQpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHQvLyBDaGVjayBwaXhlbHJhdGlvXG5cdFx0XHRcdFx0aWYgKGRwciAmJiBzdGF0ZS52aWV3cG9ydC5kcHIgIT09IG1ha2VEcHIoZHByKSkgc3RhdGUuc2V0RHByKGRwcik7XG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZnJhbWVsb29wXG5cdFx0XHRcdFx0aWYgKHN0YXRlLmZyYW1lbG9vcCAhPT0gZnJhbWVsb29wKSBzdGF0ZS5zZXRGcmFtZWxvb3AoZnJhbWVsb29wKTtcblxuXHRcdFx0XHRcdGlzQ29uZmlndXJlZCA9IHRydWU7XG5cblx0XHRcdFx0XHRpbnZhbGlkYXRlUmVmPy5kZXN0cm95KCk7XG5cdFx0XHRcdFx0aW52YWxpZGF0ZVJlZiA9IGVmZmVjdCgoKSA9PiB2b2lkIHN0b3JlLnN0YXRlKCkuaW52YWxpZGF0ZSgpLCB7IG1hbnVhbENsZWFudXA6IHRydWUsIGluamVjdG9yIH0pO1xuXHRcdFx0XHR9LFxuXHRcdFx0fTtcblx0XHR9O1xuXHR9KTtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Q2FudmFzQ29uZmlndXJhdG9yID0gUmV0dXJuVHlwZTxSZXR1cm5UeXBlPHR5cGVvZiBpbmplY3RDYW52YXNSb290SW5pdGlhbGl6ZXI+PjtcblxuZnVuY3Rpb24gY29tcHV0ZUluaXRpYWxTaXplKGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgfCBUSFJFRS5PZmZzY3JlZW5DYW52YXMsIGRlZmF1bHRTaXplPzogTmd0U2l6ZSk6IE5ndFNpemUge1xuXHRpZiAoZGVmYXVsdFNpemUpIHJldHVybiBkZWZhdWx0U2l6ZTtcblxuXHRpZiAoY2FudmFzIGluc3RhbmNlb2YgSFRNTENhbnZhc0VsZW1lbnQgJiYgY2FudmFzLnBhcmVudEVsZW1lbnQpIHtcblx0XHRyZXR1cm4gY2FudmFzLnBhcmVudEVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdH1cblxuXHRyZXR1cm4geyB3aWR0aDogMCwgaGVpZ2h0OiAwLCB0b3A6IDAsIGxlZnQ6IDAgfTtcbn1cblxuLy8gRGlzcG9zZXMgYW4gb2JqZWN0IGFuZCBhbGwgaXRzIHByb3BlcnRpZXNcbmZ1bmN0aW9uIGRpc3Bvc2U8VE9iaiBleHRlbmRzIHsgZGlzcG9zZT86ICgpID0+IHZvaWQ7IHR5cGU/OiBzdHJpbmc7IFtrZXk6IHN0cmluZ106IGFueSB9PihvYmo6IFRPYmopIHtcblx0aWYgKG9iai5kaXNwb3NlICYmIG9iai50eXBlICE9PSAnU2NlbmUnKSBvYmouZGlzcG9zZSgpO1xuXHRmb3IgKGNvbnN0IHAgaW4gb2JqKSB7XG5cdFx0KHAgYXMgYW55KS5kaXNwb3NlPy4oKTtcblx0XHRkZWxldGUgb2JqW3BdO1xuXHR9XG59XG4iXX0=
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9vdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9yb290cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUNOLHFCQUFxQixFQUNyQixjQUFjLEVBQ2QsZUFBZSxFQUNmLGFBQWEsRUFDYixZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFNBQVMsRUFDVCxLQUFLLEVBQ0wsWUFBWSxFQUNaLE9BQU8sR0FDUCxNQUFNLE9BQU8sQ0FBQztBQUVmLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDckMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUN2QyxPQUFPLEVBQXFCLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUU1RCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDakQsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNoQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRWpGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBSWxELE1BQU0sWUFBWSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFrQixDQUFDO0FBRTNFLE1BQU0sQ0FBQyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsRUFBOEMsQ0FBQztBQUUzRSxNQUFNLFVBQVUsMkJBQTJCLENBQUMsUUFBbUI7SUFDOUQsT0FBTyxjQUFjLENBQUMsMkJBQTJCLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUNqRSxNQUFNLGFBQWEsR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN2QyxNQUFNLElBQUksR0FBRyxhQUFhLEVBQUUs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QUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakQsQ0FBQztBQUVELDRDQUE0QztBQUM1QyxTQUFTLE9BQU8sQ0FBMkUsR0FBUztJQUNuRyxJQUFJLEdBQUcsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPO1FBQUUsR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ3ZELEtBQUssTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUM7UUFDcEIsQ0FBUyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDdkIsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDZixDQUFDO0FBQ0YsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCB7XG5cdEFDRVNGaWxtaWNUb25lTWFwcGluZyxcblx0QmFzaWNTaGFkb3dNYXAsXG5cdENvbG9yTWFuYWdlbWVudCxcblx0Tm9Ub25lTWFwcGluZyxcblx0UENGU2hhZG93TWFwLFxuXHRQQ0ZTb2Z0U2hhZG93TWFwLFxuXHRSYXljYXN0ZXIsXG5cdFNjZW5lLFxuXHRWU01TaGFkb3dNYXAsXG5cdFZlY3RvcjMsXG59IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndENhbnZhc0lucHV0cyB9IGZyb20gJy4vY2FudmFzJztcbmltcG9ydCB7IHByZXBhcmUgfSBmcm9tICcuL2luc3RhbmNlJztcbmltcG9ydCB7IGluamVjdE5ndExvb3AgfSBmcm9tICcuL2xvb3AnO1xuaW1wb3J0IHsgTmd0U2l6ZSwgTmd0U3RhdGUsIGluamVjdE5ndFN0b3JlIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgeyBOZ3RBbnlSZWNvcmQsIE5ndEVxdUNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYXBwbHlQcm9wcyB9IGZyb20gJy4vdXRpbHMvYXBwbHktcHJvcHMnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuL3V0aWxzL2lzJztcbmltcG9ydCB7IG1ha2VDYW1lcmFJbnN0YW5jZSwgbWFrZURwciwgbWFrZVJlbmRlcmVySW5zdGFuY2UgfSBmcm9tICcuL3V0aWxzL21ha2UnO1xuaW1wb3J0IHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5pbXBvcnQgeyBjaGVja05lZWRzVXBkYXRlIH0gZnJvbSAnLi91dGlscy91cGRhdGUnO1xuXG5leHBvcnQgdHlwZSBOZ3RDYW52YXNFbGVtZW50ID0gSFRNTENhbnZhc0VsZW1lbnQgfCBPZmZzY3JlZW5DYW52YXM7XG5cbmNvbnN0IHNoYWxsb3dMb29zZSA9IHsgb2JqZWN0czogJ3NoYWxsb3cnLCBzdHJpY3Q6IGZhbHNlIH0gYXMgTmd0RXF1Q29uZmlnO1xuXG5leHBvcnQgY29uc3Qgcm9vdHMgPSBuZXcgTWFwPE5ndENhbnZhc0VsZW1lbnQsIE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPj4oKTtcblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdENhbnZhc1Jvb3RJbml0aWFsaXplcihpbmplY3Rvcj86IEluamVjdG9yKSB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RDYW52YXNSb290SW5pdGlhbGl6ZXIsIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgaW5qZWN0ZWRTdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdFx0Y29uc3QgbG9vcCA9IGluamVjdE5ndExvb3AoKTtcblxuXHRcdHJldHVybiAoY2FudmFzOiBOZ3RDYW52YXNFbGVtZW50KSA9PiB7XG5cdFx0XHRjb25zdCBleGlzdCA9IHJvb3RzLmhhcyhjYW52YXMpO1xuXHRcdFx0bGV0IHN0b3JlID0gcm9vdHMuZ2V0KGNhbnZhcykgYXMgTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+O1xuXG5cdFx0XHRpZiAoc3RvcmUpIHtcblx0XHRcdFx0Y29uc29sZS53YXJuKCdbTkdUXSBTYW1lIGNhbnZhcyByb290IGlzIGJlaW5nIGNyZWF0ZWQgdHdpY2UnKTtcblx0XHRcdH1cblxuXHRcdFx0c3RvcmUgfHw9IGluamVjdGVkU3RvcmU7XG5cblx0XHRcdGlmICghc3RvcmUpIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKCdbTkdUXSBObyBzdG9yZSBpbml0aWFsaXplZCcpO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWV4aXN0KSB7XG5cdFx0XHRcdHJvb3RzLnNldChjYW52YXMsIHN0b3JlKTtcblx0XHRcdH1cblxuXHRcdFx0bGV0IGlzQ29uZmlndXJlZCA9IGZhbHNlO1xuXHRcdFx0bGV0IGxhc3RDYW1lcmE6IE5ndENhbnZhc0lucHV0c1snY2FtZXJhJ107XG5cblx0XHRcdHJldHVybiB7XG5cdFx0XHRcdGlzQ29uZmlndXJlZCxcblx0XHRcdFx0ZGVzdHJveTogKHRpbWVvdXQgPSA1MDApID0+IHtcblx0XHRcdFx0XHRjb25zdCByb290ID0gcm9vdHMuZ2V0KGNhbnZhcyk7XG5cdFx0XHRcdFx0aWYgKHJvb3QpIHtcblx0XHRcdFx0XHRcdHJvb3QudXBkYXRlKChzdGF0ZSkgPT4gKHsgaW50ZXJuYWw6IHsgLi4uc3RhdGUuaW50ZXJuYWwsIGFjdGl2ZTogZmFsc2UgfSB9KSk7XG5cdFx0XHRcdFx0XHRzZXRUaW1lb3V0KCgpID0+IHtcblx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHJvb3QuZ2V0KCk7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGUuZXZlbnRzLmRpc2Nvbm5lY3Q/LigpO1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlLmdsPy5yZW5kZXJMaXN0cz8uZGlzcG9zZT8uKCk7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdGUuZ2w/LmZvcmNlQ29udGV4dExvc3M/LigpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChzdGF0ZS5nbD8ueHIpIHN0YXRlLnhyLmRpc2Nvbm5lY3QoKTtcblx0XHRcdFx0XHRcdFx0XHRkaXNwb3NlKHN0YXRlKTtcblx0XHRcdFx0XHRcdFx0XHRyb290cy5kZWxldGUoY2FudmFzKTtcblx0XHRcdFx0XHRcdFx0fSBjYXRjaCAoZSkge1xuXHRcdFx0XHRcdFx0XHRcdGNvbnNvbGUuZXJyb3IoJ1tOR1RdIFVuZXhwZWN0ZWQgZXJyb3Igd2hpbGUgZGVzdHJveWluZyBDYW52YXMgUm9vdCcsIGUpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9LCB0aW1lb3V0KTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGNvbmZpZ3VyZTogKGlucHV0czogTmd0Q2FudmFzSW5wdXRzKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3Qge1xuXHRcdFx0XHRcdFx0c2hhZG93cyA9IGZhbHNlLFxuXHRcdFx0XHRcdFx0bGluZWFyID0gZmFsc2UsXG5cdFx0XHRcdFx0XHRmbGF0ID0gZmFsc2UsXG5cdFx0XHRcdFx0XHRsZWdhY3kgPSBmYWxzZSxcblx0XHRcdFx0XHRcdG9ydGhvZ3JhcGhpYyA9IGZhbHNlLFxuXHRcdFx0XHRcdFx0ZnJhbWVsb29wID0gJ2Fsd2F5cycsXG5cdFx0XHRcdFx0XHRkcHIgPSBbMSwgMl0sXG5cdFx0XHRcdFx0XHRnbDogZ2xPcHRpb25zLFxuXHRcdFx0XHRcdFx0c2l6ZTogc2l6ZU9wdGlvbnMsXG5cdFx0XHRcdFx0XHRjYW1lcmE6IGNhbWVyYU9wdGlvbnMsXG5cdFx0XHRcdFx0XHRyYXljYXN0ZXI6IHJheWNhc3Rlck9wdGlvbnMsXG5cdFx0XHRcdFx0XHRzY2VuZTogc2NlbmVPcHRpb25zLFxuXHRcdFx0XHRcdFx0ZXZlbnRzLFxuXHRcdFx0XHRcdFx0bG9va0F0LFxuXHRcdFx0XHRcdFx0cGVyZm9ybWFuY2UsXG5cdFx0XHRcdFx0fSA9IGlucHV0cztcblxuXHRcdFx0XHRcdGNvbnN0IHN0YXRlID0gc3RvcmUuc25hcHNob3Q7XG5cdFx0XHRcdFx0Y29uc3Qgc3RhdGVUb1VwZGF0ZTogUGFydGlhbDxOZ3RTdGF0ZT4gPSB7fTtcblxuXHRcdFx0XHRcdC8vIHNldHVwIHJlbmRlcmVyXG5cdFx0XHRcdFx0bGV0IGdsID0gc3RhdGUuZ2w7XG5cdFx0XHRcdFx0aWYgKCFzdGF0ZS5nbCkgc3RhdGVUb1VwZGF0ZS5nbCA9IGdsID0gbWFrZVJlbmRlcmVySW5zdGFuY2UoZ2xPcHRpb25zLCBjYW52YXMpO1xuXG5cdFx0XHRcdFx0Ly8gc2V0dXAgcmF5Y2FzdGVyXG5cdFx0XHRcdFx0bGV0IHJheWNhc3RlciA9IHN0YXRlLnJheWNhc3Rlcjtcblx0XHRcdFx0XHRpZiAoIXJheWNhc3Rlcikgc3RhdGVUb1VwZGF0ZS5yYXljYXN0ZXIgPSByYXljYXN0ZXIgPSBuZXcgUmF5Y2FzdGVyKCk7XG5cblx0XHRcdFx0XHQvLyBzZXQgcmF5Y2FzdGVyIG9wdGlvbnNcblx0XHRcdFx0XHRjb25zdCB7IHBhcmFtcywgLi4ub3B0aW9ucyB9ID0gcmF5Y2FzdGVyT3B0aW9ucyB8fCB7fTtcblx0XHRcdFx0XHRpZiAoIWlzLmVxdShvcHRpb25zLCByYXljYXN0ZXIsIHNoYWxsb3dMb29zZSkpIGFwcGx5UHJvcHMocmF5Y2FzdGVyLCBvcHRpb25zKTtcblx0XHRcdFx0XHRpZiAoIWlzLmVxdShwYXJhbXMsIHJheWNhc3Rlci5wYXJhbXMsIHNoYWxsb3dMb29zZSkpIHtcblx0XHRcdFx0XHRcdGFwcGx5UHJvcHMocmF5Y2FzdGVyLCB7IHBhcmFtczogeyAuLi5yYXljYXN0ZXIucGFyYW1zLCAuLi4ocGFyYW1zIHx8IHt9KSB9IH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENyZWF0ZSBkZWZhdWx0IGNhbWVyYSwgZG9uJ3Qgb3ZlcndyaXRlIGFueSB1c2VyLXNldCBzdGF0ZVxuXHRcdFx0XHRcdGlmICghc3RhdGUuY2FtZXJhIHx8IChzdGF0ZS5jYW1lcmEgPT09IGxhc3RDYW1lcmEgJiYgIWlzLmVxdShsYXN0Q2FtZXJhLCBjYW1lcmFPcHRpb25zLCBzaGFsbG93TG9vc2UpKSkge1xuXHRcdFx0XHRcdFx0bGFzdENhbWVyYSA9IGNhbWVyYU9wdGlvbnM7XG5cdFx0XHRcdFx0XHRjb25zdCBpc0NhbWVyYSA9IGlzLmNhbWVyYShjYW1lcmFPcHRpb25zKTtcblx0XHRcdFx0XHRcdGxldCBjYW1lcmEgPSBpc0NhbWVyYSA/IGNhbWVyYU9wdGlvbnMgOiBtYWtlQ2FtZXJhSW5zdGFuY2Uob3J0aG9ncmFwaGljLCBzdGF0ZS5zaXplKTtcblxuXHRcdFx0XHRcdFx0aWYgKCFpc0NhbWVyYSkge1xuXHRcdFx0XHRcdFx0XHRjYW1lcmEucG9zaXRpb24ueiA9IDU7XG5cdFx0XHRcdFx0XHRcdGlmIChjYW1lcmFPcHRpb25zKSB7XG5cdFx0XHRcdFx0XHRcdFx0YXBwbHlQcm9wcyhjYW1lcmEsIGNhbWVyYU9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0XHRcdGlmIChcblx0XHRcdFx0XHRcdFx0XHRcdCdhc3BlY3QnIGluIGNhbWVyYU9wdGlvbnMgfHxcblx0XHRcdFx0XHRcdFx0XHRcdCdsZWZ0JyBpbiBjYW1lcmFPcHRpb25zIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQncmlnaHQnIGluIGNhbWVyYU9wdGlvbnMgfHxcblx0XHRcdFx0XHRcdFx0XHRcdCd0b3AnIGluIGNhbWVyYU9wdGlvbnMgfHxcblx0XHRcdFx0XHRcdFx0XHRcdCdib3R0b20nIGluIGNhbWVyYU9wdGlvbnNcblx0XHRcdFx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oY2FtZXJhLCB7IG1hbnVhbDogdHJ1ZSB9KTtcblx0XHRcdFx0XHRcdFx0XHRcdGNhbWVyYT8udXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdC8vIGFsd2F5cyBsb29rIGF0IGNlbnRlciBvciBwYXNzZWQtaW4gbG9va0F0IGJ5IGRlZmF1bHRcblx0XHRcdFx0XHRcdFx0aWYgKCFzdGF0ZS5jYW1lcmEgJiYgIWNhbWVyYU9wdGlvbnM/LnJvdGF0aW9uICYmICFjYW1lcmFPcHRpb25zPy5xdWF0ZXJuaW9uKSB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkobG9va0F0KSkgY2FtZXJhLmxvb2tBdChsb29rQXRbMF0sIGxvb2tBdFsxXSwgbG9va0F0WzJdKTtcblx0XHRcdFx0XHRcdFx0XHRlbHNlIGlmIChsb29rQXQgaW5zdGFuY2VvZiBWZWN0b3IzKSBjYW1lcmEubG9va0F0KGxvb2tBdCk7XG5cdFx0XHRcdFx0XHRcdFx0ZWxzZSBjYW1lcmEubG9va0F0KDAsIDAsIDApO1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8gdXBkYXRlIHByb2plY3Rpb24gbWF0cml4IGFmdGVyIGFwcGx5cHJvcHNcblx0XHRcdFx0XHRcdFx0Y2FtZXJhLnVwZGF0ZVByb2plY3Rpb25NYXRyaXg/LigpO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRpZiAoIWlzLmluc3RhbmNlKGNhbWVyYSkpIGNhbWVyYSA9IHByZXBhcmUoY2FtZXJhLCB7IHN0b3JlIH0pO1xuXG5cdFx0XHRcdFx0XHRzdGF0ZVRvVXBkYXRlLmNhbWVyYSA9IGNhbWVyYTtcblxuXHRcdFx0XHRcdFx0Ly8gQ29uZmlndXJlIHJheWNhc3RlclxuXHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3BtbmRycy9yZWFjdC14ci9pc3N1ZXMvMzAwXG5cdFx0XHRcdFx0XHRyYXljYXN0ZXIuY2FtZXJhID0gY2FtZXJhO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNldCB1cCBzY2VuZSAob25lIHRpbWUgb25seSEpXG5cdFx0XHRcdFx0aWYgKCFzdGF0ZS5zY2VuZSkge1xuXHRcdFx0XHRcdFx0bGV0IHNjZW5lOiBTY2VuZTtcblxuXHRcdFx0XHRcdFx0aWYgKHNjZW5lT3B0aW9ucyBpbnN0YW5jZW9mIFNjZW5lKSB7XG5cdFx0XHRcdFx0XHRcdHNjZW5lID0gc2NlbmVPcHRpb25zO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0c2NlbmUgPSBuZXcgU2NlbmUoKTtcblx0XHRcdFx0XHRcdFx0aWYgKHNjZW5lT3B0aW9ucykgYXBwbHlQcm9wcyhzY2VuZSwgc2NlbmVPcHRpb25zKTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhdGVUb1VwZGF0ZS5zY2VuZSA9IHByZXBhcmUoc2NlbmUsIHsgc3RvcmUgfSk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gU2V0IHVwIFhSIChvbmUgdGltZSBvbmx5ISlcblx0XHRcdFx0XHRpZiAoIXN0YXRlLnhyKSB7XG5cdFx0XHRcdFx0XHQvLyBIYW5kbGUgZnJhbWUgYmVoYXZpb3IgaW4gV2ViWFJcblx0XHRcdFx0XHRcdGNvbnN0IGhhbmRsZVhSRnJhbWU6IFhSRnJhbWVSZXF1ZXN0Q2FsbGJhY2sgPSAodGltZXN0YW1wOiBudW1iZXIsIGZyYW1lPzogWFJGcmFtZSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0XHRcdFx0XHRpZiAoc3RhdGUuZnJhbWVsb29wID09PSAnbmV2ZXInKSByZXR1cm47XG5cdFx0XHRcdFx0XHRcdGxvb3AuYWR2YW5jZSh0aW1lc3RhbXAsIHRydWUsIHN0b3JlLCBmcmFtZSk7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHQvLyBUb2dnbGUgcmVuZGVyIHN3aXRjaGluZyBvbiBzZXNzaW9uXG5cdFx0XHRcdFx0XHRjb25zdCBoYW5kbGVTZXNzaW9uQ2hhbmdlID0gKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlLnNuYXBzaG90O1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS5nbC54ci5lbmFibGVkID0gc3RhdGUuZ2wueHIuaXNQcmVzZW50aW5nO1xuXHRcdFx0XHRcdFx0XHRzdGF0ZS5nbC54ci5zZXRBbmltYXRpb25Mb29wKHN0YXRlLmdsLnhyLmlzUHJlc2VudGluZyA/IGhhbmRsZVhSRnJhbWUgOiBudWxsKTtcblx0XHRcdFx0XHRcdFx0aWYgKCFzdGF0ZS5nbC54ci5pc1ByZXNlbnRpbmcpIGxvb3AuaW52YWxpZGF0ZShzdG9yZSk7XG5cdFx0XHRcdFx0XHR9O1xuXG5cdFx0XHRcdFx0XHQvLyBXZWJYUiBzZXNzaW9uIG1hbmFnZXJcblx0XHRcdFx0XHRcdGNvbnN0IHhyID0ge1xuXHRcdFx0XHRcdFx0XHRjb25uZWN0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIuYWRkRXZlbnRMaXN0ZW5lcignc2Vzc2lvbnN0YXJ0JywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIuYWRkRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRkaXNjb25uZWN0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbnN0YXJ0JywgaGFuZGxlU2Vzc2lvbkNoYW5nZSk7XG5cdFx0XHRcdFx0XHRcdFx0Z2wueHIucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Vzc2lvbmVuZCcsIGhhbmRsZVNlc3Npb25DaGFuZ2UpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0Ly8gU3Vic2NyaWJlIHRvIFdlYlhSIHNlc3Npb24gZXZlbnRzXG5cdFx0XHRcdFx0XHRpZiAoZ2wueHIgJiYgdHlwZW9mIGdsLnhyLmFkZEV2ZW50TGlzdGVuZXIgPT09ICdmdW5jdGlvbicpIHhyLmNvbm5lY3QoKTtcblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUueHIgPSB4cjtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTZXQgc2hhZG93bWFwXG5cdFx0XHRcdFx0aWYgKGdsLnNoYWRvd01hcCkge1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2xkRW5hYmxlZCA9IGdsLnNoYWRvd01hcC5lbmFibGVkO1xuXHRcdFx0XHRcdFx0Y29uc3Qgb2xkVHlwZSA9IGdsLnNoYWRvd01hcC50eXBlO1xuXHRcdFx0XHRcdFx0Z2wuc2hhZG93TWFwLmVuYWJsZWQgPSAhIXNoYWRvd3M7XG5cblx0XHRcdFx0XHRcdGlmICh0eXBlb2Ygc2hhZG93cyA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdFx0XHRcdGdsLnNoYWRvd01hcC50eXBlID0gUENGU29mdFNoYWRvd01hcDtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAodHlwZW9mIHNoYWRvd3MgPT09ICdzdHJpbmcnKSB7XG5cdFx0XHRcdFx0XHRcdGNvbnN0IHR5cGVzID0ge1xuXHRcdFx0XHRcdFx0XHRcdGJhc2ljOiBCYXNpY1NoYWRvd01hcCxcblx0XHRcdFx0XHRcdFx0XHRwZXJjZW50YWdlOiBQQ0ZTaGFkb3dNYXAsXG5cdFx0XHRcdFx0XHRcdFx0c29mdDogUENGU29mdFNoYWRvd01hcCxcblx0XHRcdFx0XHRcdFx0XHR2YXJpYW5jZTogVlNNU2hhZG93TWFwLFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0XHRnbC5zaGFkb3dNYXAudHlwZSA9IHR5cGVzW3NoYWRvd3NdID8/IFBDRlNvZnRTaGFkb3dNYXA7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKGlzLm9iaihzaGFkb3dzKSkge1xuXHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGdsLnNoYWRvd01hcCwgc2hhZG93cyk7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdGlmIChvbGRFbmFibGVkICE9PSBnbC5zaGFkb3dNYXAuZW5hYmxlZCB8fCBvbGRUeXBlICE9PSBnbC5zaGFkb3dNYXAudHlwZSkgY2hlY2tOZWVkc1VwZGF0ZShnbC5zaGFkb3dNYXApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFNhZmVseSBzZXQgY29sb3IgbWFuYWdlbWVudCBpZiBhdmFpbGFibGUuXG5cdFx0XHRcdFx0Ly8gQXZvaWQgYWNjZXNzaW5nIENvbG9yTWFuYWdlbWVudCB0byBwbGF5IG5pY2Ugd2l0aCBvbGRlciB2ZXJzaW9uc1xuXHRcdFx0XHRcdGlmIChDb2xvck1hbmFnZW1lbnQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGNvbG9yTWFuYWdlbWVudCA9IENvbG9yTWFuYWdlbWVudCBhcyBOZ3RBbnlSZWNvcmQ7XG5cdFx0XHRcdFx0XHRpZiAoJ2VuYWJsZWQnIGluIGNvbG9yTWFuYWdlbWVudCkgY29sb3JNYW5hZ2VtZW50WydlbmFibGVkJ10gPSAhbGVnYWN5ID8/IGZhbHNlO1xuXHRcdFx0XHRcdFx0ZWxzZSBpZiAoJ2xlZ2FjeU1vZGUnIGluIGNvbG9yTWFuYWdlbWVudCkgY29sb3JNYW5hZ2VtZW50WydsZWdhY3lNb2RlJ10gPSBsZWdhY3kgPz8gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRpZiAoIWlzQ29uZmlndXJlZCkge1xuXHRcdFx0XHRcdFx0Ly8gc2V0IGNvbG9yIHNwYWNlIGFuZCB0b25lbWFwcGluZyBwcmVmZXJlbmNlcyBvbmNlXG5cdFx0XHRcdFx0XHRjb25zdCBMaW5lYXJFbmNvZGluZyA9IDMwMDA7XG5cdFx0XHRcdFx0XHRjb25zdCBzUkdCRW5jb2RpbmcgPSAzMDAxO1xuXHRcdFx0XHRcdFx0YXBwbHlQcm9wcyhnbCwge1xuXHRcdFx0XHRcdFx0XHRvdXRwdXRFbmNvZGluZzogbGluZWFyID8gTGluZWFyRW5jb2RpbmcgOiBzUkdCRW5jb2RpbmcsXG5cdFx0XHRcdFx0XHRcdHRvbmVNYXBwaW5nOiBmbGF0ID8gTm9Ub25lTWFwcGluZyA6IEFDRVNGaWxtaWNUb25lTWFwcGluZyxcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFVwZGF0ZSBjb2xvciBtYW5hZ2VtZW50IHN0YXRlXG5cdFx0XHRcdFx0aWYgKHN0YXRlLmxlZ2FjeSAhPT0gbGVnYWN5KSBzdGF0ZVRvVXBkYXRlLmxlZ2FjeSA9IGxlZ2FjeTtcblx0XHRcdFx0XHRpZiAoc3RhdGUubGluZWFyICE9PSBsaW5lYXIpIHN0YXRlVG9VcGRhdGUubGluZWFyID0gbGluZWFyO1xuXHRcdFx0XHRcdGlmIChzdGF0ZS5mbGF0ICE9PSBmbGF0KSBzdGF0ZVRvVXBkYXRlLmZsYXQgPSBmbGF0O1xuXG5cdFx0XHRcdFx0Ly8gU2V0IGdsIHByb3BzXG5cdFx0XHRcdFx0Z2wuc2V0Q2xlYXJBbHBoYSgwKTtcblx0XHRcdFx0XHRnbC5zZXRQaXhlbFJhdGlvKG1ha2VEcHIoc3RhdGUudmlld3BvcnQuZHByKSk7XG5cdFx0XHRcdFx0Z2wuc2V0U2l6ZShzdGF0ZS5zaXplLndpZHRoLCBzdGF0ZS5zaXplLmhlaWdodCk7XG5cblx0XHRcdFx0XHRpZiAoXG5cdFx0XHRcdFx0XHRpcy5vYmooZ2xPcHRpb25zKSAmJlxuXHRcdFx0XHRcdFx0ISh0eXBlb2YgZ2xPcHRpb25zID09PSAnZnVuY3Rpb24nKSAmJlxuXHRcdFx0XHRcdFx0IWlzLnJlbmRlcmVyKGdsT3B0aW9ucykgJiZcblx0XHRcdFx0XHRcdCFpcy5lcXUoZ2xPcHRpb25zLCBnbCwgc2hhbGxvd0xvb3NlKVxuXHRcdFx0XHRcdCkge1xuXHRcdFx0XHRcdFx0YXBwbHlQcm9wcyhnbCwgZ2xPcHRpb25zKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBldmVudHMgaW50ZXJuYWxseVxuXHRcdFx0XHRcdGlmIChldmVudHMgJiYgIXN0YXRlLmV2ZW50cy5oYW5kbGVycykgc3RhdGVUb1VwZGF0ZS5ldmVudHMgPSBldmVudHMoc3RvcmUpO1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgcGVyZm9ybWFuY2Vcblx0XHRcdFx0XHRpZiAocGVyZm9ybWFuY2UgJiYgIWlzLmVxdShwZXJmb3JtYW5jZSwgc3RhdGUucGVyZm9ybWFuY2UsIHNoYWxsb3dMb29zZSkpIHtcblx0XHRcdFx0XHRcdHN0YXRlVG9VcGRhdGUucGVyZm9ybWFuY2UgPSB7IC4uLnN0YXRlLnBlcmZvcm1hbmNlLCAuLi5wZXJmb3JtYW5jZSB9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHN0b3JlLnVwZGF0ZShzdGF0ZVRvVXBkYXRlKTtcblxuXHRcdFx0XHRcdC8vIENoZWNrIHNpemUsIGFsbG93IGl0IHRvIHRha2Ugb24gY29udGFpbmVyIGJvdW5kcyBpbml0aWFsbHlcblx0XHRcdFx0XHRjb25zdCBzaXplID0gY29tcHV0ZUluaXRpYWxTaXplKGNhbnZhcywgc2l6ZU9wdGlvbnMpO1xuXHRcdFx0XHRcdGlmICghaXMuZXF1KHNpemUsIHN0YXRlLnNpemUsIHNoYWxsb3dMb29zZSkpIHtcblx0XHRcdFx0XHRcdHN0YXRlLnNldFNpemUoc2l6ZS53aWR0aCwgc2l6ZS5oZWlnaHQsIHNpemUudG9wLCBzaXplLmxlZnQpO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIENoZWNrIHBpeGVscmF0aW9cblx0XHRcdFx0XHRpZiAoZHByICYmIHN0YXRlLnZpZXdwb3J0LmRwciAhPT0gbWFrZURwcihkcHIpKSBzdGF0ZS5zZXREcHIoZHByKTtcblx0XHRcdFx0XHQvLyBDaGVjayBmcmFtZWxvb3Bcblx0XHRcdFx0XHRpZiAoc3RhdGUuZnJhbWVsb29wICE9PSBmcmFtZWxvb3ApIHN0YXRlLnNldEZyYW1lbG9vcChmcmFtZWxvb3ApO1xuXG5cdFx0XHRcdFx0aXNDb25maWd1cmVkID0gdHJ1ZTtcblx0XHRcdFx0fSxcblx0XHRcdH07XG5cdFx0fTtcblx0fSk7XG59XG5cbmV4cG9ydCB0eXBlIE5ndENhbnZhc0NvbmZpZ3VyYXRvciA9IFJldHVyblR5cGU8UmV0dXJuVHlwZTx0eXBlb2YgaW5qZWN0Q2FudmFzUm9vdEluaXRpYWxpemVyPj47XG5cbmZ1bmN0aW9uIGNvbXB1dGVJbml0aWFsU2l6ZShjYW52YXM6IE5ndENhbnZhc0VsZW1lbnQsIGRlZmF1bHRTaXplPzogTmd0U2l6ZSk6IE5ndFNpemUge1xuXHRpZiAoZGVmYXVsdFNpemUpIHtcblx0XHRyZXR1cm4gZGVmYXVsdFNpemU7XG5cdH1cblxuXHRpZiAodHlwZW9mIEhUTUxDYW52YXNFbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBjYW52YXMgaW5zdGFuY2VvZiBIVE1MQ2FudmFzRWxlbWVudCAmJiBjYW52YXMucGFyZW50RWxlbWVudCkge1xuXHRcdHJldHVybiBjYW52YXMucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblx0fVxuXG5cdGlmICh0eXBlb2YgT2Zmc2NyZWVuQ2FudmFzICE9PSAndW5kZWZpbmVkJyAmJiBjYW52YXMgaW5zdGFuY2VvZiBPZmZzY3JlZW5DYW52YXMpIHtcblx0XHRyZXR1cm4geyB3aWR0aDogY2FudmFzLndpZHRoLCBoZWlnaHQ6IGNhbnZhcy5oZWlnaHQsIHRvcDogMCwgbGVmdDogMCB9O1xuXHR9XG5cblx0cmV0dXJuIHsgd2lkdGg6IDAsIGhlaWdodDogMCwgdG9wOiAwLCBsZWZ0OiAwIH07XG59XG5cbi8vIERpc3Bvc2VzIGFuIG9iamVjdCBhbmQgYWxsIGl0cyBwcm9wZXJ0aWVzXG5mdW5jdGlvbiBkaXNwb3NlPFRPYmogZXh0ZW5kcyB7IGRpc3Bvc2U/OiAoKSA9PiB2b2lkOyB0eXBlPzogc3RyaW5nOyBba2V5OiBzdHJpbmddOiBhbnkgfT4ob2JqOiBUT2JqKSB7XG5cdGlmIChvYmouZGlzcG9zZSAmJiBvYmoudHlwZSAhPT0gJ1NjZW5lJykgb2JqLmRpc3Bvc2UoKTtcblx0Zm9yIChjb25zdCBwIGluIG9iaikge1xuXHRcdChwIGFzIGFueSkuZGlzcG9zZT8uKCk7XG5cdFx0ZGVsZXRlIG9ialtwXTtcblx0fVxufVxuIl19
|
|
@@ -4,7 +4,6 @@ import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
|
4
4
|
import { ActivationEnd, Router, RouterOutlet } from '@angular/router';
|
|
5
5
|
import { filter } from 'rxjs';
|
|
6
6
|
import { ROUTED_SCENE } from './renderer/constants';
|
|
7
|
-
import { safeDetectChanges } from './utils/safe-detect-changes';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
8
|
import * as i1 from "@angular/router";
|
|
10
9
|
export class NgtRoutedScene {
|
|
@@ -13,14 +12,14 @@ export class NgtRoutedScene {
|
|
|
13
12
|
constructor(router, cdr) {
|
|
14
13
|
router.events
|
|
15
14
|
.pipe(filter((event) => event instanceof ActivationEnd), takeUntilDestroyed())
|
|
16
|
-
.subscribe((
|
|
15
|
+
.subscribe(cdr.detectChanges.bind(cdr));
|
|
17
16
|
}
|
|
18
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
19
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "
|
|
17
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtRoutedScene, deps: [{ token: i1.Router }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
18
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.0.3", type: NgtRoutedScene, isStandalone: true, selector: "ngt-routed-scene", ngImport: i0, template: `
|
|
20
19
|
<router-outlet />
|
|
21
20
|
`, isInline: true, dependencies: [{ kind: "directive", type: RouterOutlet, selector: "router-outlet", inputs: ["name"], outputs: ["activate", "deactivate", "attach", "detach"], exportAs: ["outlet"] }] }); }
|
|
22
21
|
}
|
|
23
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
22
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtRoutedScene, decorators: [{
|
|
24
23
|
type: Component,
|
|
25
24
|
args: [{
|
|
26
25
|
standalone: true,
|
|
@@ -30,5 +29,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImpor
|
|
|
30
29
|
`,
|
|
31
30
|
imports: [RouterOutlet],
|
|
32
31
|
}]
|
|
33
|
-
}], ctorParameters:
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
32
|
+
}], ctorParameters: () => [{ type: i1.Router }, { type: i0.ChangeDetectorRef }] });
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGVkLXNjZW5lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcm91dGVkLXNjZW5lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHNCQUFzQixDQUFDOzs7QUFVcEQsTUFBTSxPQUFPLGNBQWM7a0JBQ2xCLFlBQVk7YUFBYixRQUFjLEdBQUcsSUFBSSxBQUFQLENBQVE7SUFFN0IsWUFBWSxNQUFjLEVBQUUsR0FBc0I7UUFDakQsTUFBTSxDQUFDLE1BQU07YUFDWCxJQUFJLENBQ0osTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLFlBQVksYUFBYSxDQUFDLEVBQ2pELGtCQUFrQixFQUFFLENBQ3BCO2FBQ0EsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDMUMsQ0FBQzs4R0FWVyxjQUFjO2tHQUFkLGNBQWMsNEVBTGhCOztFQUVULDREQUNTLFlBQVk7OzJGQUVWLGNBQWM7a0JBUjFCLFNBQVM7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxrQkFBa0I7b0JBQzVCLFFBQVEsRUFBRTs7RUFFVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxZQUFZLENBQUM7aUJBQ3ZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgQWN0aXZhdGlvbkVuZCwgUm91dGVyLCBSb3V0ZXJPdXRsZXQgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBST1VURURfU0NFTkUgfSBmcm9tICcuL3JlbmRlcmVyL2NvbnN0YW50cyc7XG5cbkBDb21wb25lbnQoe1xuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHRzZWxlY3RvcjogJ25ndC1yb3V0ZWQtc2NlbmUnLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxyb3V0ZXItb3V0bGV0IC8+XG5cdGAsXG5cdGltcG9ydHM6IFtSb3V0ZXJPdXRsZXRdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RSb3V0ZWRTY2VuZSB7XG5cdHN0YXRpYyBbUk9VVEVEX1NDRU5FXSA9IHRydWU7XG5cblx0Y29uc3RydWN0b3Iocm91dGVyOiBSb3V0ZXIsIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcblx0XHRyb3V0ZXIuZXZlbnRzXG5cdFx0XHQucGlwZShcblx0XHRcdFx0ZmlsdGVyKChldmVudCkgPT4gZXZlbnQgaW5zdGFuY2VvZiBBY3RpdmF0aW9uRW5kKSxcblx0XHRcdFx0dGFrZVVudGlsRGVzdHJveWVkKCksXG5cdFx0XHQpXG5cdFx0XHQuc3Vic2NyaWJlKGNkci5kZXRlY3RDaGFuZ2VzLmJpbmQoY2RyKSk7XG5cdH1cbn1cbiJdfQ==
|