angular-three-soba 2.8.1 → 2.10.0

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.
@@ -135,7 +135,7 @@ export declare class NgtsCatmullRomLine {
135
135
  id?: number | undefined;
136
136
  uuid?: string | undefined;
137
137
  name?: string | undefined;
138
- type?: string | undefined;
138
+ readonly type?: string | undefined;
139
139
  visible?: boolean | undefined;
140
140
  userData?: Record<string, any> | undefined;
141
141
  onBeforeRender?: ((renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: import("three").Camera, geometry: import("three").BufferGeometry, object: import("three").Object3D, group: import("three").Group) => void) | undefined;
@@ -342,7 +342,7 @@ export declare class NgtsCatmullRomLine {
342
342
  id?: number | undefined;
343
343
  uuid?: string | undefined;
344
344
  name?: string | undefined;
345
- type?: string | undefined;
345
+ readonly type?: string | undefined;
346
346
  visible?: boolean | undefined;
347
347
  userData?: Record<string, any> | undefined;
348
348
  onBeforeRender?: ((renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: import("three").Camera, geometry: import("three").BufferGeometry, object: import("three").Object3D, group: import("three").Group) => void) | undefined;
@@ -220,7 +220,7 @@ export declare class NgtsEdges {
220
220
  id?: number | undefined;
221
221
  uuid?: string | undefined;
222
222
  name?: string | undefined;
223
- type?: string | undefined;
223
+ readonly type?: string | undefined;
224
224
  visible?: boolean | undefined;
225
225
  userData?: Record<string, any> | undefined;
226
226
  onBeforeRender?: ((renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: import("three").Camera, geometry: BufferGeometry, object: import("three").Object3D, group: import("three").Group) => void) | undefined;
@@ -520,7 +520,7 @@ export declare class NgtsEdges {
520
520
  id?: number | undefined;
521
521
  uuid?: string | undefined;
522
522
  name?: string | undefined;
523
- type?: string | undefined;
523
+ readonly type?: string | undefined;
524
524
  visible?: boolean | undefined;
525
525
  userData?: Record<string, any> | undefined;
526
526
  onBeforeRender?: ((renderer: import("three").WebGLRenderer, scene: import("three").Scene, camera: import("three").Camera, geometry: BufferGeometry, object: import("three").Object3D, group: import("three").Group) => void) | undefined;
@@ -1,8 +1,9 @@
1
1
  export * from './lib/custom-shader-material';
2
2
  export * from './lib/mesh-distort-material';
3
+ export * from './lib/mesh-portal-material';
3
4
  export * from './lib/mesh-reflector-material';
4
5
  export * from './lib/mesh-refraction-material';
5
6
  export * from './lib/mesh-transmission-material';
6
7
  export * from './lib/mesh-wobble-material';
7
8
  export * from './lib/point-material';
8
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLHNCQUFzQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvY3VzdG9tLXNoYWRlci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLWRpc3RvcnQtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1yZWZsZWN0b3ItbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC1yZWZyYWN0aW9uLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtdHJhbnNtaXNzaW9uLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtd29iYmxlLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3BvaW50LW1hdGVyaWFsJztcbiJdfQ==
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNkJBQTZCLENBQUM7QUFDNUMsY0FBYyw0QkFBNEIsQ0FBQztBQUMzQyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2xpYi9jdXN0b20tc2hhZGVyLW1hdGVyaWFsJztcbmV4cG9ydCAqIGZyb20gJy4vbGliL21lc2gtZGlzdG9ydC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXBvcnRhbC1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZmxlY3Rvci1tYXRlcmlhbCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi9tZXNoLXJlZnJhY3Rpb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC10cmFuc21pc3Npb24tbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvbWVzaC13b2JibGUtbWF0ZXJpYWwnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvcG9pbnQtbWF0ZXJpYWwnO1xuIl19
@@ -0,0 +1,294 @@
1
+ import { NgTemplateOutlet } from '@angular/common';
2
+ import { afterNextRender, ChangeDetectionStrategy, Component, computed, contentChild, CUSTOM_ELEMENTS_SCHEMA, Directive, effect, inject, Injector, input, signal, TemplateRef, viewChild, } from '@angular/core';
3
+ import { extend, getLocalState, injectBeforeRender, injectStore, omit, pick, } from 'angular-three';
4
+ import { getVersion, injectFBO, injectIntersect } from 'angular-three-soba/misc';
5
+ import { NgtsRenderTexture, NgtsRenderTextureContent } from 'angular-three-soba/staging';
6
+ import { MeshPortalMaterial, meshPortalMaterialApplySDF, } from 'angular-three-soba/vanilla-exports';
7
+ import { mergeInputs } from 'ngxtension/inject-inputs';
8
+ import { Mesh, ShaderMaterial } from 'three';
9
+ import { FullScreenQuad } from 'three-stdlib';
10
+ import * as i0 from "@angular/core";
11
+ /**
12
+ * This directive is used inside of the render texture, hence has access to the render texture store (a portal store)
13
+ */
14
+ export class ManagePortalScene {
15
+ constructor() {
16
+ this.events = input();
17
+ this.rootScene = input.required();
18
+ this.material = input.required();
19
+ this.priority = input.required();
20
+ this.worldUnits = input.required();
21
+ const injector = inject(Injector);
22
+ const renderTextureStore = injectStore();
23
+ const portalScene = renderTextureStore.select('scene');
24
+ const portalSetEvents = renderTextureStore.select('setEvents');
25
+ const buffer1 = injectFBO();
26
+ const buffer2 = injectFBO();
27
+ const fullScreenQuad = computed(() => {
28
+ // This fullscreen-quad is used to blend the two textures
29
+ const blend = { value: 0 };
30
+ const quad = new FullScreenQuad(new ShaderMaterial({
31
+ uniforms: {
32
+ a: { value: buffer1().texture },
33
+ b: { value: buffer2().texture },
34
+ blend,
35
+ },
36
+ vertexShader: /*glsl*/ `
37
+ varying vec2 vUv;
38
+ void main() {
39
+ vUv = uv;
40
+ gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
41
+ }`,
42
+ fragmentShader: /*glsl*/ `
43
+ uniform sampler2D a;
44
+ uniform sampler2D b;
45
+ uniform float blend;
46
+ varying vec2 vUv;
47
+ #include <packing>
48
+ void main() {
49
+ vec4 ta = texture2D(a, vUv);
50
+ vec4 tb = texture2D(b, vUv);
51
+ gl_FragColor = mix(tb, ta, blend);
52
+ #include <tonemapping_fragment>
53
+ #include <${getVersion() >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>
54
+ }`,
55
+ }));
56
+ return [quad, blend];
57
+ });
58
+ effect(() => {
59
+ const [events, setEvents] = [this.events(), portalSetEvents()];
60
+ if (!events)
61
+ return;
62
+ setEvents({ enabled: events });
63
+ });
64
+ afterNextRender(() => {
65
+ portalScene().matrixAutoUpdate = false;
66
+ // we start the before render in afterNextRender because we need the priority input to be resolved
67
+ injectBeforeRender(({ gl, camera }) => {
68
+ const material = this.material();
69
+ const localState = getLocalState(material);
70
+ if (!localState)
71
+ return;
72
+ const parent = localState.parent();
73
+ if (!parent)
74
+ return;
75
+ const materialBlend = 'blend' in material && typeof material.blend === 'number' ? material.blend : 0;
76
+ const [worldUnits, priority, rootScene, scene, [quad, blend]] = [
77
+ this.worldUnits(),
78
+ this.priority(),
79
+ this.rootScene(),
80
+ portalScene(),
81
+ fullScreenQuad(),
82
+ ];
83
+ // Move portal contents along with the parent if worldUnits is true
84
+ if (!worldUnits) {
85
+ // If the portal renders exclusively the original scene needs to be updated
86
+ if (priority && materialBlend === 1)
87
+ parent.updateWorldMatrix(true, false);
88
+ scene.matrixWorld.copy(parent.matrixWorld);
89
+ }
90
+ else {
91
+ scene.matrixWorld.identity();
92
+ }
93
+ // This bit is only necessary if the portal is blended, now it has a render-priority
94
+ // and will take over the render loop
95
+ if (priority) {
96
+ if (materialBlend > 0 && materialBlend < 1) {
97
+ // If blend is ongoing (> 0 and < 1) then we need to render both the root scene
98
+ // and the portal scene, both will then be mixed in the quad from above
99
+ blend.value = materialBlend;
100
+ gl.setRenderTarget(buffer1());
101
+ gl.render(scene, camera);
102
+ gl.setRenderTarget(buffer2());
103
+ gl.render(rootScene, camera);
104
+ gl.setRenderTarget(null);
105
+ quad.render(gl);
106
+ }
107
+ else if (materialBlend === 1) {
108
+ // However if blend is 1 we only need to render the portal scene
109
+ gl.render(scene, camera);
110
+ }
111
+ }
112
+ }, { injector, priority: this.priority() });
113
+ });
114
+ }
115
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ManagePortalScene, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
116
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.11", type: ManagePortalScene, isStandalone: true, selector: "ngts-manage-portal-scene", inputs: { events: { classPropertyName: "events", publicName: "events", isSignal: true, isRequired: false, transformFunction: null }, rootScene: { classPropertyName: "rootScene", publicName: "rootScene", isSignal: true, isRequired: true, transformFunction: null }, material: { classPropertyName: "material", publicName: "material", isSignal: true, isRequired: true, transformFunction: null }, priority: { classPropertyName: "priority", publicName: "priority", isSignal: true, isRequired: true, transformFunction: null }, worldUnits: { classPropertyName: "worldUnits", publicName: "worldUnits", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0 }); }
117
+ }
118
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: ManagePortalScene, decorators: [{
119
+ type: Directive,
120
+ args: [{ selector: 'ngts-manage-portal-scene', standalone: true }]
121
+ }], ctorParameters: () => [] });
122
+ const defaultOptions = {
123
+ blend: 0.5,
124
+ blur: 0,
125
+ resolution: 512,
126
+ worldUnits: false,
127
+ eventPriority: 0,
128
+ renderPriority: 0,
129
+ events: false,
130
+ };
131
+ export class NgtsMeshPortalMaterial {
132
+ constructor() {
133
+ this.attach = input('material');
134
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
135
+ this.parameters = omit(this.options, ['blur', 'resolution', 'worldUnits', 'eventPriority', 'renderPriority', 'events']);
136
+ this.blur = pick(this.options, 'blur');
137
+ this.eventPriority = pick(this.options, 'eventPriority');
138
+ this.renderPriority = pick(this.options, 'renderPriority');
139
+ this.events = pick(this.options, 'events');
140
+ this.worldUnits = pick(this.options, 'worldUnits');
141
+ this.materialRef = viewChild.required('material');
142
+ this.content = contentChild.required(TemplateRef);
143
+ this.store = injectStore();
144
+ this.size = this.store.select('size');
145
+ this.viewport = this.store.select('viewport');
146
+ this.gl = this.store.select('gl');
147
+ this.setEvents = this.store.select('setEvents');
148
+ this.rootScene = this.store.select('scene');
149
+ this.materialResolution = computed(() => [
150
+ this.size().width * this.viewport().dpr,
151
+ this.size().height * this.viewport().dpr,
152
+ ]);
153
+ this.resolution = pick(this.options, 'resolution');
154
+ this.parent = signal(null);
155
+ this.visible = injectIntersect(this.parent, { source: signal(true) });
156
+ this.renderTextureFrames = computed(() => (this.visible() ? Infinity : 0));
157
+ this.renderTextureCompute = computed(() => {
158
+ const [parent, material] = [this.parent(), this.materialRef().nativeElement];
159
+ const computeFn = (event, state) => {
160
+ if (!parent)
161
+ return false;
162
+ state.snapshot.pointer.set((event.offsetX / state.snapshot.size.width) * 2 - 1, -(event.offsetY / state.snapshot.size.height) * 2 + 1);
163
+ state.snapshot.raycaster.setFromCamera(state.snapshot.pointer, state.snapshot.camera);
164
+ if ('blend' in material && material.blend === 0) {
165
+ // We run a quick check against the parent, if it isn't hit there's no need to raycast at all
166
+ const [intersection] = state.snapshot.raycaster.intersectObject(parent);
167
+ if (!intersection) {
168
+ // Cancel out the raycast camera if the parent mesh isn't hit
169
+ Object.assign(state.snapshot.raycaster, { camera: undefined });
170
+ return false;
171
+ }
172
+ }
173
+ return;
174
+ };
175
+ return computeFn;
176
+ });
177
+ this.priority = signal(0);
178
+ extend({ MeshPortalMaterial });
179
+ afterNextRender(() => {
180
+ const material = this.materialRef().nativeElement;
181
+ const localState = getLocalState(material);
182
+ if (!localState)
183
+ return;
184
+ const materialParent = localState.parent();
185
+ if (!materialParent || !(materialParent instanceof Mesh))
186
+ return;
187
+ // Since the ref above is not tied to a mesh directly (we're inside a material),
188
+ // it has to be tied to the parent mesh here
189
+ this.parent.set(materialParent);
190
+ });
191
+ effect(() => {
192
+ const events = this.events();
193
+ if (!events)
194
+ return;
195
+ const setEvents = this.setEvents();
196
+ setEvents({ enabled: !events });
197
+ });
198
+ // React.useEffect(() => {
199
+ // if (events !== undefined) setEvents({ enabled: !events })
200
+ // }, [events])
201
+ effect(() => {
202
+ const [material, parent] = [this.materialRef().nativeElement, this.parent()];
203
+ if (!parent)
204
+ return;
205
+ const [resolution, blur, gl] = [this.resolution(), this.blur(), this.gl()];
206
+ // apply the SDF mask once
207
+ if (blur && material.sdf == null) {
208
+ meshPortalMaterialApplySDF(parent, resolution, gl);
209
+ }
210
+ });
211
+ injectBeforeRender(() => {
212
+ const material = this.materialRef().nativeElement;
213
+ const priority = 'blend' in material && typeof material.blend === 'number' && material.blend > 0
214
+ ? Math.max(1, this.renderPriority())
215
+ : 0;
216
+ // If blend is > 0 then the portal is being entered, the render-priority must change
217
+ if (this.priority() !== priority) {
218
+ this.priority.set(priority);
219
+ }
220
+ });
221
+ }
222
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsMeshPortalMaterial, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
223
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.2.11", type: NgtsMeshPortalMaterial, isStandalone: true, selector: "ngts-mesh-portal-material", inputs: { attach: { classPropertyName: "attach", publicName: "attach", isSignal: true, isRequired: false, transformFunction: null }, options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, queries: [{ propertyName: "content", first: true, predicate: TemplateRef, descendants: true, isSignal: true }], viewQueries: [{ propertyName: "materialRef", first: true, predicate: ["material"], descendants: true, isSignal: true }], ngImport: i0, template: `
224
+ <ngt-mesh-portal-material
225
+ #material
226
+ [attach]="attach()"
227
+ [blur]="blur()"
228
+ [blend]="0"
229
+ [resolution]="materialResolution()"
230
+ [parameters]="parameters()"
231
+ >
232
+ <ngts-render-texture
233
+ [options]="{
234
+ frames: renderTextureFrames(),
235
+ eventPriority: eventPriority(),
236
+ renderPriority: renderPriority(),
237
+ compute: renderTextureCompute(),
238
+ }"
239
+ >
240
+ <ng-template renderTextureContent let-injector="injector">
241
+ <ng-container *ngTemplateOutlet="content(); injector: injector" />
242
+ <ngts-manage-portal-scene
243
+ [events]="events()"
244
+ [rootScene]="rootScene()"
245
+ [priority]="priority()"
246
+ [material]="material"
247
+ [worldUnits]="worldUnits()"
248
+ />
249
+ </ng-template>
250
+ </ngts-render-texture>
251
+ </ngt-mesh-portal-material>
252
+ `, isInline: true, dependencies: [{ kind: "component", type: NgtsRenderTexture, selector: "ngts-render-texture", inputs: ["attach", "options"] }, { kind: "directive", type: NgtsRenderTextureContent, selector: "ng-template[renderTextureContent]" }, { kind: "directive", type: ManagePortalScene, selector: "ngts-manage-portal-scene", inputs: ["events", "rootScene", "material", "priority", "worldUnits"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
253
+ }
254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImport: i0, type: NgtsMeshPortalMaterial, decorators: [{
255
+ type: Component,
256
+ args: [{
257
+ selector: 'ngts-mesh-portal-material',
258
+ standalone: true,
259
+ template: `
260
+ <ngt-mesh-portal-material
261
+ #material
262
+ [attach]="attach()"
263
+ [blur]="blur()"
264
+ [blend]="0"
265
+ [resolution]="materialResolution()"
266
+ [parameters]="parameters()"
267
+ >
268
+ <ngts-render-texture
269
+ [options]="{
270
+ frames: renderTextureFrames(),
271
+ eventPriority: eventPriority(),
272
+ renderPriority: renderPriority(),
273
+ compute: renderTextureCompute(),
274
+ }"
275
+ >
276
+ <ng-template renderTextureContent let-injector="injector">
277
+ <ng-container *ngTemplateOutlet="content(); injector: injector" />
278
+ <ngts-manage-portal-scene
279
+ [events]="events()"
280
+ [rootScene]="rootScene()"
281
+ [priority]="priority()"
282
+ [material]="material"
283
+ [worldUnits]="worldUnits()"
284
+ />
285
+ </ng-template>
286
+ </ngts-render-texture>
287
+ </ngt-mesh-portal-material>
288
+ `,
289
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
290
+ changeDetection: ChangeDetectionStrategy.OnPush,
291
+ imports: [NgtsRenderTexture, NgtsRenderTextureContent, ManagePortalScene, NgTemplateOutlet],
292
+ }]
293
+ }], ctorParameters: () => [] });
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVzaC1wb3J0YWwtbWF0ZXJpYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvbWF0ZXJpYWxzL3NyYy9saWIvbWVzaC1wb3J0YWwtbWF0ZXJpYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDbkQsT0FBTyxFQUNOLGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixZQUFZLEVBQ1osc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxNQUFNLEVBRU4sTUFBTSxFQUNOLFFBQVEsRUFDUixLQUFLLEVBQ0wsTUFBTSxFQUNOLFdBQVcsRUFDWCxTQUFTLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNOLE1BQU0sRUFDTixhQUFhLEVBQ2Isa0JBQWtCLEVBQ2xCLFdBQVcsRUFJWCxJQUFJLEVBQ0osSUFBSSxHQUNKLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsU0FBUyxFQUFFLGVBQWUsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3pGLE9BQU8sRUFDTixrQkFBa0IsRUFDbEIsMEJBQTBCLEdBRTFCLE1BQU0sb0NBQW9DLENBQUM7QUFDNUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxJQUFJLEVBQVMsY0FBYyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQ3BELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBRTlDOztHQUVHO0FBRUgsTUFBTSxPQUFPLGlCQUFpQjtJQU83QjtRQU5BLFdBQU0sR0FBRyxLQUFLLEVBQVcsQ0FBQztRQUMxQixjQUFTLEdBQUcsS0FBSyxDQUFDLFFBQVEs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QUFDO2dCQUNsQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUM3QixDQUFDO1FBQ0YsQ0FBQyxDQUFDLENBQUM7SUFDSixDQUFDOytHQWhIVyxzQkFBc0I7bUdBQXRCLHNCQUFzQiwrWEFZRixXQUFXLHlMQTlDakM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNkJULDREQUdTLGlCQUFpQiwrRkFBRSx3QkFBd0IsOEVBL0t6QyxpQkFBaUIsNElBK0s2QyxnQkFBZ0I7OzRGQUU5RSxzQkFBc0I7a0JBckNsQyxTQUFTO21CQUFDO29CQUNWLFFBQVEsRUFBRSwyQkFBMkI7b0JBQ3JDLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBNkJUO29CQUNELE9BQU8sRUFBRSxDQUFDLHNCQUFzQixDQUFDO29CQUNqQyxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtvQkFDL0MsT0FBTyxFQUFFLENBQUMsaUJBQWlCLEVBQUUsd0JBQXdCLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLENBQUM7aUJBQzNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdUZW1wbGF0ZU91dGxldCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQge1xuXHRhZnRlck5leHRSZW5kZXIsXG5cdENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuXHRDb21wb25lbnQsXG5cdGNvbXB1dGVkLFxuXHRjb250ZW50Q2hpbGQsXG5cdENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsXG5cdERpcmVjdGl2ZSxcblx0ZWZmZWN0LFxuXHRFbGVtZW50UmVmLFxuXHRpbmplY3QsXG5cdEluamVjdG9yLFxuXHRpbnB1dCxcblx0c2lnbmFsLFxuXHRUZW1wbGF0ZVJlZixcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdGV4dGVuZCxcblx0Z2V0TG9jYWxTdGF0ZSxcblx0aW5qZWN0QmVmb3JlUmVuZGVyLFxuXHRpbmplY3RTdG9yZSxcblx0Tmd0QXR0YWNoYWJsZSxcblx0Tmd0Q29tcHV0ZUZ1bmN0aW9uLFxuXHROZ3RTaGFkZXJNYXRlcmlhbCxcblx0b21pdCxcblx0cGljayxcbn0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBnZXRWZXJzaW9uLCBpbmplY3RGQk8sIGluamVjdEludGVyc2VjdCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS9taXNjJztcbmltcG9ydCB7IE5ndHNSZW5kZXJUZXh0dXJlLCBOZ3RzUmVuZGVyVGV4dHVyZUNvbnRlbnQgfSBmcm9tICdhbmd1bGFyLXRocmVlLXNvYmEvc3RhZ2luZyc7XG5pbXBvcnQge1xuXHRNZXNoUG9ydGFsTWF0ZXJpYWwsXG5cdG1lc2hQb3J0YWxNYXRlcmlhbEFwcGx5U0RGLFxuXHROZ3RNZXNoUG9ydGFsTWF0ZXJpYWwsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUtc29iYS92YW5pbGxhLWV4cG9ydHMnO1xuaW1wb3J0IHsgbWVyZ2VJbnB1dHMgfSBmcm9tICduZ3h0ZW5zaW9uL2luamVjdC1pbnB1dHMnO1xuaW1wb3J0IHsgTWVzaCwgU2NlbmUsIFNoYWRlck1hdGVyaWFsIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgRnVsbFNjcmVlblF1YWQgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG4vKipcbiAqIFRoaXMgZGlyZWN0aXZlIGlzIHVzZWQgaW5zaWRlIG9mIHRoZSByZW5kZXIgdGV4dHVyZSwgaGVuY2UgaGFzIGFjY2VzcyB0byB0aGUgcmVuZGVyIHRleHR1cmUgc3RvcmUgKGEgcG9ydGFsIHN0b3JlKVxuICovXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZ3RzLW1hbmFnZS1wb3J0YWwtc2NlbmUnLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTWFuYWdlUG9ydGFsU2NlbmUge1xuXHRldmVudHMgPSBpbnB1dDxib29sZWFuPigpO1xuXHRyb290U2NlbmUgPSBpbnB1dC5yZXF1aXJlZDxTY2VuZT4oKTtcblx0bWF0ZXJpYWwgPSBpbnB1dC5yZXF1aXJlZDxOZ3RNZXNoUG9ydGFsTWF0ZXJpYWw+KCk7XG5cdHByaW9yaXR5ID0gaW5wdXQucmVxdWlyZWQ8bnVtYmVyPigpO1xuXHR3b3JsZFVuaXRzID0gaW5wdXQucmVxdWlyZWQ8Ym9vbGVhbj4oKTtcblxuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBpbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cdFx0Y29uc3QgcmVuZGVyVGV4dHVyZVN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0XHRjb25zdCBwb3J0YWxTY2VuZSA9IHJlbmRlclRleHR1cmVTdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdFx0Y29uc3QgcG9ydGFsU2V0RXZlbnRzID0gcmVuZGVyVGV4dHVyZVN0b3JlLnNlbGVjdCgnc2V0RXZlbnRzJyk7XG5cblx0XHRjb25zdCBidWZmZXIxID0gaW5qZWN0RkJPKCk7XG5cdFx0Y29uc3QgYnVmZmVyMiA9IGluamVjdEZCTygpO1xuXG5cdFx0Y29uc3QgZnVsbFNjcmVlblF1YWQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHQvLyBUaGlzIGZ1bGxzY3JlZW4tcXVhZCBpcyB1c2VkIHRvIGJsZW5kIHRoZSB0d28gdGV4dHVyZXNcblx0XHRcdGNvbnN0IGJsZW5kID0geyB2YWx1ZTogMCB9O1xuXHRcdFx0Y29uc3QgcXVhZCA9IG5ldyBGdWxsU2NyZWVuUXVhZChcblx0XHRcdFx0bmV3IFNoYWRlck1hdGVyaWFsKHtcblx0XHRcdFx0XHR1bmlmb3Jtczoge1xuXHRcdFx0XHRcdFx0YTogeyB2YWx1ZTogYnVmZmVyMSgpLnRleHR1cmUgfSxcblx0XHRcdFx0XHRcdGI6IHsgdmFsdWU6IGJ1ZmZlcjIoKS50ZXh0dXJlIH0sXG5cdFx0XHRcdFx0XHRibGVuZCxcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdHZlcnRleFNoYWRlcjogLypnbHNsKi8gYFxuXHRcdCAgICAgIHZhcnlpbmcgdmVjMiB2VXY7XG5cdFx0ICAgICAgdm9pZCBtYWluKCkge1xuXHRcdCAgICAgICAgdlV2ID0gdXY7XG5cdFx0ICAgICAgICBnbF9Qb3NpdGlvbiA9IHByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXdNYXRyaXggKiB2ZWM0KCBwb3NpdGlvbiwgMS4wICk7XG5cdFx0ICAgICAgfWAsXG5cdFx0XHRcdFx0ZnJhZ21lbnRTaGFkZXI6IC8qZ2xzbCovIGBcblx0XHQgICAgICB1bmlmb3JtIHNhbXBsZXIyRCBhO1xuXHRcdCAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIGI7XG5cdFx0ICAgICAgdW5pZm9ybSBmbG9hdCBibGVuZDtcblx0XHQgICAgICB2YXJ5aW5nIHZlYzIgdlV2O1xuXHRcdCAgICAgICNpbmNsdWRlIDxwYWNraW5nPlxuXHRcdCAgICAgIHZvaWQgbWFpbigpIHtcblx0XHQgICAgICAgIHZlYzQgdGEgPSB0ZXh0dXJlMkQoYSwgdlV2KTtcblx0XHQgICAgICAgIHZlYzQgdGIgPSB0ZXh0dXJlMkQoYiwgdlV2KTtcblx0XHQgICAgICAgIGdsX0ZyYWdDb2xvciA9IG1peCh0YiwgdGEsIGJsZW5kKTtcblx0XHQgICAgICAgICNpbmNsdWRlIDx0b25lbWFwcGluZ19mcmFnbWVudD5cblx0XHQgICAgICAgICNpbmNsdWRlIDwke2dldFZlcnNpb24oKSA+PSAxNTQgPyAnY29sb3JzcGFjZV9mcmFnbWVudCcgOiAnZW5jb2RpbmdzX2ZyYWdtZW50J30+XG5cdFx0ICAgICAgfWAsXG5cdFx0XHRcdH0pLFxuXHRcdFx0KTtcblx0XHRcdHJldHVybiBbcXVhZCwgYmxlbmRdIGFzIGNvbnN0O1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFtldmVudHMsIHNldEV2ZW50c10gPSBbdGhpcy5ldmVudHMoKSwgcG9ydGFsU2V0RXZlbnRzKCldO1xuXHRcdFx0aWYgKCFldmVudHMpIHJldHVybjtcblx0XHRcdHNldEV2ZW50cyh7IGVuYWJsZWQ6IGV2ZW50cyB9KTtcblx0XHR9KTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRwb3J0YWxTY2VuZSgpLm1hdHJpeEF1dG9VcGRhdGUgPSBmYWxzZTtcblxuXHRcdFx0Ly8gd2Ugc3RhcnQgdGhlIGJlZm9yZSByZW5kZXIgaW4gYWZ0ZXJOZXh0UmVuZGVyIGJlY2F1c2Ugd2UgbmVlZCB0aGUgcHJpb3JpdHkgaW5wdXQgdG8gYmUgcmVzb2x2ZWRcblx0XHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdFx0KHsgZ2wsIGNhbWVyYSB9KSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsKCk7XG5cblx0XHRcdFx0XHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShtYXRlcmlhbCk7XG5cdFx0XHRcdFx0aWYgKCFsb2NhbFN0YXRlKSByZXR1cm47XG5cblx0XHRcdFx0XHRjb25zdCBwYXJlbnQgPSBsb2NhbFN0YXRlLnBhcmVudCgpO1xuXHRcdFx0XHRcdGlmICghcGFyZW50KSByZXR1cm47XG5cblx0XHRcdFx0XHRjb25zdCBtYXRlcmlhbEJsZW5kID0gJ2JsZW5kJyBpbiBtYXRlcmlhbCAmJiB0eXBlb2YgbWF0ZXJpYWwuYmxlbmQgPT09ICdudW1iZXInID8gbWF0ZXJpYWwuYmxlbmQgOiAwO1xuXHRcdFx0XHRcdGNvbnN0IFt3b3JsZFVuaXRzLCBwcmlvcml0eSwgcm9vdFNjZW5lLCBzY2VuZSwgW3F1YWQsIGJsZW5kXV0gPSBbXG5cdFx0XHRcdFx0XHR0aGlzLndvcmxkVW5pdHMoKSxcblx0XHRcdFx0XHRcdHRoaXMucHJpb3JpdHkoKSxcblx0XHRcdFx0XHRcdHRoaXMucm9vdFNjZW5lKCksXG5cdFx0XHRcdFx0XHRwb3J0YWxTY2VuZSgpLFxuXHRcdFx0XHRcdFx0ZnVsbFNjcmVlblF1YWQoKSxcblx0XHRcdFx0XHRdO1xuXHRcdFx0XHRcdC8vIE1vdmUgcG9ydGFsIGNvbnRlbnRzIGFsb25nIHdpdGggdGhlIHBhcmVudCBpZiB3b3JsZFVuaXRzIGlzIHRydWVcblx0XHRcdFx0XHRpZiAoIXdvcmxkVW5pdHMpIHtcblx0XHRcdFx0XHRcdC8vIElmIHRoZSBwb3J0YWwgcmVuZGVycyBleGNsdXNpdmVseSB0aGUgb3JpZ2luYWwgc2NlbmUgbmVlZHMgdG8gYmUgdXBkYXRlZFxuXHRcdFx0XHRcdFx0aWYgKHByaW9yaXR5ICYmIG1hdGVyaWFsQmxlbmQgPT09IDEpIHBhcmVudC51cGRhdGVXb3JsZE1hdHJpeCh0cnVlLCBmYWxzZSk7XG5cdFx0XHRcdFx0XHRzY2VuZS5tYXRyaXhXb3JsZC5jb3B5KHBhcmVudC5tYXRyaXhXb3JsZCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHNjZW5lLm1hdHJpeFdvcmxkLmlkZW50aXR5KCk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gVGhpcyBiaXQgaXMgb25seSBuZWNlc3NhcnkgaWYgdGhlIHBvcnRhbCBpcyBibGVuZGVkLCBub3cgaXQgaGFzIGEgcmVuZGVyLXByaW9yaXR5XG5cdFx0XHRcdFx0Ly8gYW5kIHdpbGwgdGFrZSBvdmVyIHRoZSByZW5kZXIgbG9vcFxuXHRcdFx0XHRcdGlmIChwcmlvcml0eSkge1xuXHRcdFx0XHRcdFx0aWYgKG1hdGVyaWFsQmxlbmQgPiAwICYmIG1hdGVyaWFsQmxlbmQgPCAxKSB7XG5cdFx0XHRcdFx0XHRcdC8vIElmIGJsZW5kIGlzIG9uZ29pbmcgKD4gMCBhbmQgPCAxKSB0aGVuIHdlIG5lZWQgdG8gcmVuZGVyIGJvdGggdGhlIHJvb3Qgc2NlbmVcblx0XHRcdFx0XHRcdFx0Ly8gYW5kIHRoZSBwb3J0YWwgc2NlbmUsIGJvdGggd2lsbCB0aGVuIGJlIG1peGVkIGluIHRoZSBxdWFkIGZyb20gYWJvdmVcblx0XHRcdFx0XHRcdFx0YmxlbmQudmFsdWUgPSBtYXRlcmlhbEJsZW5kO1xuXHRcdFx0XHRcdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQoYnVmZmVyMSgpKTtcblx0XHRcdFx0XHRcdFx0Z2wucmVuZGVyKHNjZW5lLCBjYW1lcmEpO1xuXHRcdFx0XHRcdFx0XHRnbC5zZXRSZW5kZXJUYXJnZXQoYnVmZmVyMigpKTtcblx0XHRcdFx0XHRcdFx0Z2wucmVuZGVyKHJvb3RTY2VuZSwgY2FtZXJhKTtcblx0XHRcdFx0XHRcdFx0Z2wuc2V0UmVuZGVyVGFyZ2V0KG51bGwpO1xuXHRcdFx0XHRcdFx0XHRxdWFkLnJlbmRlcihnbCk7XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKG1hdGVyaWFsQmxlbmQgPT09IDEpIHtcblx0XHRcdFx0XHRcdFx0Ly8gSG93ZXZlciBpZiBibGVuZCBpcyAxIHdlIG9ubHkgbmVlZCB0byByZW5kZXIgdGhlIHBvcnRhbCBzY2VuZVxuXHRcdFx0XHRcdFx0XHRnbC5yZW5kZXIoc2NlbmUsIGNhbWVyYSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7IGluamVjdG9yLCBwcmlvcml0eTogdGhpcy5wcmlvcml0eSgpIH0sXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c01lc2hQb3J0YWxNYXRlcmlhbE9wdGlvbnMgZXh0ZW5kcyBQYXJ0aWFsPE5ndFNoYWRlck1hdGVyaWFsPiB7XG5cdC8qKiBNaXggdGhlIHBvcnRhbHMgb3duIHNjZW5lIHdpdGggdGhlIHdvcmxkIHNjZW5lLCAwID0gd29ybGQgc2NlbmUgcmVuZGVyLFxuXHQgKiAgMC41ID0gYm90aCBzY2VuZXMgcmVuZGVyLCAxID0gcG9ydGFsIHNjZW5lIHJlbmRlcnMsIGRlZmF1bHRzIHRvIDAgKi9cblx0YmxlbmQ6IG51bWJlcjtcblx0LyoqIEVkZ2UgZmFkZSBibHVyLCAwID0gbm8gYmx1ciAoZGVmYXVsdCkgKi9cblx0Ymx1cjogbnVtYmVyO1xuXHQvKiogU0RGIHJlc29sdXRpb24sIHRoZSBzbWFsbGVyIHRoZSBmYXN0ZXIgaXMgdGhlIHN0YXJ0LXVwIHRpbWUgKGRlZmF1bHQ6IDUxMikgKi9cblx0cmVzb2x1dGlvbjogbnVtYmVyO1xuXHQvKiogQnkgZGVmYXVsdCBwb3J0YWxzIHVzZSByZWxhdGl2ZSBjb29yZGluYXRlcywgY29udGVudHMgYXJlIGFmZmVjdHMgYnkgdGhlIGxvY2FsIG1hdHJpeCB0cmFuc2Zvcm0gKi9cblx0d29ybGRVbml0czogYm9vbGVhbjtcblx0LyoqIE9wdGlvbmFsIGV2ZW50IHByaW9yaXR5LCBkZWZhdWx0cyB0byAwICovXG5cdGV2ZW50UHJpb3JpdHk6IG51bWJlcjtcblx0LyoqIE9wdGlvbmFsIHJlbmRlciBwcmlvcml0eSwgZGVmYXVsdHMgdG8gMCAqL1xuXHRyZW5kZXJQcmlvcml0eTogbnVtYmVyO1xuXHQvKiogT3B0aW9uYWxseSBkaWFibGUgZXZlbnRzIGluc2lkZSB0aGUgcG9ydGFsLCBkZWZhdWx0cyB0byBmYWxzZSAqL1xuXHRldmVudHM6IGJvb2xlYW47XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRpb25zOiBOZ3RzTWVzaFBvcnRhbE1hdGVyaWFsT3B0aW9ucyA9IHtcblx0YmxlbmQ6IDAuNSxcblx0Ymx1cjogMCxcblx0cmVzb2x1dGlvbjogNTEyLFxuXHR3b3JsZFVuaXRzOiBmYWxzZSxcblx0ZXZlbnRQcmlvcml0eTogMCxcblx0cmVuZGVyUHJpb3JpdHk6IDAsXG5cdGV2ZW50czogZmFsc2UsXG59O1xuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RzLW1lc2gtcG9ydGFsLW1hdGVyaWFsJyxcblx0c3RhbmRhbG9uZTogdHJ1ZSxcblx0dGVtcGxhdGU6IGBcblx0XHQ8bmd0LW1lc2gtcG9ydGFsLW1hdGVyaWFsXG5cdFx0XHQjbWF0ZXJpYWxcblx0XHRcdFthdHRhY2hdPVwiYXR0YWNoKClcIlxuXHRcdFx0W2JsdXJdPVwiYmx1cigpXCJcblx0XHRcdFtibGVuZF09XCIwXCJcblx0XHRcdFtyZXNvbHV0aW9uXT1cIm1hdGVyaWFsUmVzb2x1dGlvbigpXCJcblx0XHRcdFtwYXJhbWV0ZXJzXT1cInBhcmFtZXRlcnMoKVwiXG5cdFx0PlxuXHRcdFx0PG5ndHMtcmVuZGVyLXRleHR1cmVcblx0XHRcdFx0W29wdGlvbnNdPVwie1xuXHRcdFx0XHRcdGZyYW1lczogcmVuZGVyVGV4dHVyZUZyYW1lcygpLFxuXHRcdFx0XHRcdGV2ZW50UHJpb3JpdHk6IGV2ZW50UHJpb3JpdHkoKSxcblx0XHRcdFx0XHRyZW5kZXJQcmlvcml0eTogcmVuZGVyUHJpb3JpdHkoKSxcblx0XHRcdFx0XHRjb21wdXRlOiByZW5kZXJUZXh0dXJlQ29tcHV0ZSgpLFxuXHRcdFx0XHR9XCJcblx0XHRcdD5cblx0XHRcdFx0PG5nLXRlbXBsYXRlIHJlbmRlclRleHR1cmVDb250ZW50IGxldC1pbmplY3Rvcj1cImluamVjdG9yXCI+XG5cdFx0XHRcdFx0PG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImNvbnRlbnQoKTsgaW5qZWN0b3I6IGluamVjdG9yXCIgLz5cblx0XHRcdFx0XHQ8bmd0cy1tYW5hZ2UtcG9ydGFsLXNjZW5lXG5cdFx0XHRcdFx0XHRbZXZlbnRzXT1cImV2ZW50cygpXCJcblx0XHRcdFx0XHRcdFtyb290U2NlbmVdPVwicm9vdFNjZW5lKClcIlxuXHRcdFx0XHRcdFx0W3ByaW9yaXR5XT1cInByaW9yaXR5KClcIlxuXHRcdFx0XHRcdFx0W21hdGVyaWFsXT1cIm1hdGVyaWFsXCJcblx0XHRcdFx0XHRcdFt3b3JsZFVuaXRzXT1cIndvcmxkVW5pdHMoKVwiXG5cdFx0XHRcdFx0Lz5cblx0XHRcdFx0PC9uZy10ZW1wbGF0ZT5cblx0XHRcdDwvbmd0cy1yZW5kZXItdGV4dHVyZT5cblx0XHQ8L25ndC1tZXNoLXBvcnRhbC1tYXRlcmlhbD5cblx0YCxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcblx0aW1wb3J0czogW05ndHNSZW5kZXJUZXh0dXJlLCBOZ3RzUmVuZGVyVGV4dHVyZUNvbnRlbnQsIE1hbmFnZVBvcnRhbFNjZW5lLCBOZ1RlbXBsYXRlT3V0bGV0XSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0c01lc2hQb3J0YWxNYXRlcmlhbCB7XG5cdGF0dGFjaCA9IGlucHV0PE5ndEF0dGFjaGFibGU+KCdtYXRlcmlhbCcpO1xuXHRvcHRpb25zID0gaW5wdXQoZGVmYXVsdE9wdGlvbnMsIHsgdHJhbnNmb3JtOiBtZXJnZUlucHV0cyhkZWZhdWx0T3B0aW9ucykgfSk7XG5cdHBhcmFtZXRlcnMgPSBvbWl0KHRoaXMub3B0aW9ucywgWydibHVyJywgJ3Jlc29sdXRpb24nLCAnd29ybGRVbml0cycsICdldmVudFByaW9yaXR5JywgJ3JlbmRlclByaW9yaXR5JywgJ2V2ZW50cyddKTtcblxuXHRibHVyID0gcGljayh0aGlzLm9wdGlvbnMsICdibHVyJyk7XG5cdGV2ZW50UHJpb3JpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2V2ZW50UHJpb3JpdHknKTtcblx0cmVuZGVyUHJpb3JpdHkgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3JlbmRlclByaW9yaXR5Jyk7XG5cdGV2ZW50cyA9IHBpY2sodGhpcy5vcHRpb25zLCAnZXZlbnRzJyk7XG5cdHdvcmxkVW5pdHMgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3dvcmxkVW5pdHMnKTtcblxuXHRtYXRlcmlhbFJlZiA9IHZpZXdDaGlsZC5yZXF1aXJlZDxFbGVtZW50UmVmPEluc3RhbmNlVHlwZTx0eXBlb2YgTWVzaFBvcnRhbE1hdGVyaWFsPj4+KCdtYXRlcmlhbCcpO1xuXHRjb250ZW50ID0gY29udGVudENoaWxkLnJlcXVpcmVkKFRlbXBsYXRlUmVmKTtcblxuXHRwcml2YXRlIHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblx0cHJpdmF0ZSB2aWV3cG9ydCA9IHRoaXMuc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgc2V0RXZlbnRzID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NldEV2ZW50cycpO1xuXHRyb290U2NlbmUgPSB0aGlzLnN0b3JlLnNlbGVjdCgnc2NlbmUnKTtcblxuXHRtYXRlcmlhbFJlc29sdXRpb24gPSBjb21wdXRlZCgoKSA9PiBbXG5cdFx0dGhpcy5zaXplKCkud2lkdGggKiB0aGlzLnZpZXdwb3J0KCkuZHByLFxuXHRcdHRoaXMuc2l6ZSgpLmhlaWdodCAqIHRoaXMudmlld3BvcnQoKS5kcHIsXG5cdF0pO1xuXHRwcml2YXRlIHJlc29sdXRpb24gPSBwaWNrKHRoaXMub3B0aW9ucywgJ3Jlc29sdXRpb24nKTtcblxuXHRwcml2YXRlIHBhcmVudCA9IHNpZ25hbDxNZXNoIHwgbnVsbD4obnVsbCk7XG5cdHByaXZhdGUgdmlzaWJsZSA9IGluamVjdEludGVyc2VjdCh0aGlzLnBhcmVudCwgeyBzb3VyY2U6IHNpZ25hbCh0cnVlKSB9KTtcblxuXHRyZW5kZXJUZXh0dXJlRnJhbWVzID0gY29tcHV0ZWQoKCkgPT4gKHRoaXMudmlzaWJsZSgpID8gSW5maW5pdHkgOiAwKSk7XG5cdHJlbmRlclRleHR1cmVDb21wdXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtwYXJlbnQsIG1hdGVyaWFsXSA9IFt0aGlzLnBhcmVudCgpLCB0aGlzLm1hdGVyaWFsUmVmKCkubmF0aXZlRWxlbWVudF07XG5cblx0XHRjb25zdCBjb21wdXRlRm46ICguLi5hcmdzOiBQYXJhbWV0ZXJzPE5ndENvbXB1dGVGdW5jdGlvbj4pID0+IGZhbHNlIHwgdW5kZWZpbmVkID0gKGV2ZW50LCBzdGF0ZSkgPT4ge1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybiBmYWxzZTtcblx0XHRcdHN0YXRlLnNuYXBzaG90LnBvaW50ZXIuc2V0KFxuXHRcdFx0XHQoZXZlbnQub2Zmc2V0WCAvIHN0YXRlLnNuYXBzaG90LnNpemUud2lkdGgpICogMiAtIDEsXG5cdFx0XHRcdC0oZXZlbnQub2Zmc2V0WSAvIHN0YXRlLnNuYXBzaG90LnNpemUuaGVpZ2h0KSAqIDIgKyAxLFxuXHRcdFx0KTtcblx0XHRcdHN0YXRlLnNuYXBzaG90LnJheWNhc3Rlci5zZXRGcm9tQ2FtZXJhKHN0YXRlLnNuYXBzaG90LnBvaW50ZXIsIHN0YXRlLnNuYXBzaG90LmNhbWVyYSk7XG5cblx0XHRcdGlmICgnYmxlbmQnIGluIG1hdGVyaWFsICYmIG1hdGVyaWFsLmJsZW5kID09PSAwKSB7XG5cdFx0XHRcdC8vIFdlIHJ1biBhIHF1aWNrIGNoZWNrIGFnYWluc3QgdGhlIHBhcmVudCwgaWYgaXQgaXNuJ3QgaGl0IHRoZXJlJ3Mgbm8gbmVlZCB0byByYXljYXN0IGF0IGFsbFxuXHRcdFx0XHRjb25zdCBbaW50ZXJzZWN0aW9uXSA9IHN0YXRlLnNuYXBzaG90LnJheWNhc3Rlci5pbnRlcnNlY3RPYmplY3QocGFyZW50KTtcblx0XHRcdFx0aWYgKCFpbnRlcnNlY3Rpb24pIHtcblx0XHRcdFx0XHQvLyBDYW5jZWwgb3V0IHRoZSByYXljYXN0IGNhbWVyYSBpZiB0aGUgcGFyZW50IG1lc2ggaXNuJ3QgaGl0XG5cdFx0XHRcdFx0T2JqZWN0LmFzc2lnbihzdGF0ZS5zbmFwc2hvdC5yYXljYXN0ZXIsIHsgY2FtZXJhOiB1bmRlZmluZWQgfSk7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9O1xuXG5cdFx0cmV0dXJuIGNvbXB1dGVGbjtcblx0fSk7XG5cblx0cHJpb3JpdHkgPSBzaWduYWwoMCk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0ZXh0ZW5kKHsgTWVzaFBvcnRhbE1hdGVyaWFsIH0pO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGNvbnN0IG1hdGVyaWFsID0gdGhpcy5tYXRlcmlhbFJlZigpLm5hdGl2ZUVsZW1lbnQ7XG5cblx0XHRcdGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG1hdGVyaWFsKTtcblx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0XHRjb25zdCBtYXRlcmlhbFBhcmVudCA9IGxvY2FsU3RhdGUucGFyZW50KCk7XG5cdFx0XHRpZiAoIW1hdGVyaWFsUGFyZW50IHx8ICEobWF0ZXJpYWxQYXJlbnQgaW5zdGFuY2VvZiBNZXNoKSkgcmV0dXJuO1xuXG5cdFx0XHQvLyBTaW5jZSB0aGUgcmVmIGFib3ZlIGlzIG5vdCB0aWVkIHRvIGEgbWVzaCBkaXJlY3RseSAod2UncmUgaW5zaWRlIGEgbWF0ZXJpYWwpLFxuXHRcdFx0Ly8gaXQgaGFzIHRvIGJlIHRpZWQgdG8gdGhlIHBhcmVudCBtZXNoIGhlcmVcblx0XHRcdHRoaXMucGFyZW50LnNldChtYXRlcmlhbFBhcmVudCk7XG5cdFx0fSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3QgZXZlbnRzID0gdGhpcy5ldmVudHMoKTtcblx0XHRcdGlmICghZXZlbnRzKSByZXR1cm47XG5cblx0XHRcdGNvbnN0IHNldEV2ZW50cyA9IHRoaXMuc2V0RXZlbnRzKCk7XG5cdFx0XHRzZXRFdmVudHMoeyBlbmFibGVkOiAhZXZlbnRzIH0pO1xuXHRcdH0pO1xuXG5cdFx0Ly8gUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcblx0XHQvLyAgIGlmIChldmVudHMgIT09IHVuZGVmaW5lZCkgc2V0RXZlbnRzKHsgZW5hYmxlZDogIWV2ZW50cyB9KVxuXHRcdC8vIH0sIFtldmVudHNdKVxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbbWF0ZXJpYWwsIHBhcmVudF0gPSBbdGhpcy5tYXRlcmlhbFJlZigpLm5hdGl2ZUVsZW1lbnQsIHRoaXMucGFyZW50KCldO1xuXHRcdFx0aWYgKCFwYXJlbnQpIHJldHVybjtcblxuXHRcdFx0Y29uc3QgW3Jlc29sdXRpb24sIGJsdXIsIGdsXSA9IFt0aGlzLnJlc29sdXRpb24oKSwgdGhpcy5ibHVyKCksIHRoaXMuZ2woKV07XG5cblx0XHRcdC8vIGFwcGx5IHRoZSBTREYgbWFzayBvbmNlXG5cdFx0XHRpZiAoYmx1ciAmJiBtYXRlcmlhbC5zZGYgPT0gbnVsbCkge1xuXHRcdFx0XHRtZXNoUG9ydGFsTWF0ZXJpYWxBcHBseVNERihwYXJlbnQsIHJlc29sdXRpb24sIGdsKTtcblx0XHRcdH1cblx0XHR9KTtcblxuXHRcdGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBtYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxSZWYoKS5uYXRpdmVFbGVtZW50O1xuXHRcdFx0Y29uc3QgcHJpb3JpdHkgPVxuXHRcdFx0XHQnYmxlbmQnIGluIG1hdGVyaWFsICYmIHR5cGVvZiBtYXRlcmlhbC5ibGVuZCA9PT0gJ251bWJlcicgJiYgbWF0ZXJpYWwuYmxlbmQgPiAwXG5cdFx0XHRcdFx0PyBNYXRoLm1heCgxLCB0aGlzLnJlbmRlclByaW9yaXR5KCkpXG5cdFx0XHRcdFx0OiAwO1xuXG5cdFx0XHQvLyBJZiBibGVuZCBpcyA+IDAgdGhlbiB0aGUgcG9ydGFsIGlzIGJlaW5nIGVudGVyZWQsIHRoZSByZW5kZXItcHJpb3JpdHkgbXVzdCBjaGFuZ2Vcblx0XHRcdGlmICh0aGlzLnByaW9yaXR5KCkgIT09IHByaW9yaXR5KSB7XG5cdFx0XHRcdHRoaXMucHJpb3JpdHkuc2V0KHByaW9yaXR5KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIl19
@@ -3,7 +3,7 @@ import { injectStore } from 'angular-three';
3
3
  import { assertInjector } from 'ngxtension/assert-injector';
4
4
  import { DepthTexture, FloatType, HalfFloatType, LinearFilter, WebGLRenderTarget, } from 'three';
5
5
  import * as i0 from "@angular/core";
6
- export function injectFBO(params, { injector } = {}) {
6
+ export function injectFBO(params = () => ({}), { injector } = {}) {
7
7
  return assertInjector(injectFBO, injector, () => {
8
8
  const store = injectStore();
9
9
  const size = store.select('size');
@@ -83,4 +83,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.11", ngImpo
83
83
  type: Directive,
84
84
  args: [{ selector: 'ng-template[fbo]', standalone: true }]
85
85
  }], ctorParameters: () => [] });
86
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmJvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21pc2Mvc3JjL2xpYi9mYm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFVBQVUsRUFDVixTQUFTLEVBR1QsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBRU4sWUFBWSxFQUNaLFNBQVMsRUFDVCxhQUFhLEVBQ2IsWUFBWSxFQUlaLGlCQUFpQixHQUVqQixNQUFNLE9BQU8sQ0FBQzs7QUErQmYsTUFBTSxVQUFVLFNBQVMsQ0FBQyxNQUEyQixFQUFFLEVBQUUsUUFBUSxLQUE4QixFQUFFO0lBQ2hHLE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQy9DLE1BQU0sS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzNCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUMzQixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUcsUUFBUSxFQUFFLENBQUMsR0FBRyxDQUFDO1FBQzFFLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM1QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUM7WUFDNUIsT0FBTyxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLFFBQVEsRUFBRSxDQUFDLEdBQUcsQ0FBQztRQUM3RSxDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDOUIsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFNBQVMsR0FBRyxDQUFDLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBRSxLQUFxQixDQUFDLElBQUksRUFBRSxDQUFDO1lBQ3hGLElBQUksU0FBUyxDQUFDLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztnQkFDckMsU0FBUyxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7WUFDdkIsQ0FBQztZQUNELE9BQU8sU0FBUyxDQUFDO1FBQ2xCLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUM1QixNQUFNLENBQUMsRUFBRSxPQUFPLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxHQUFHLGNBQWMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsR0FBRztnQkFDcEUsU0FBUyxDQUFDLFFBQVEsQ0FBQztnQkFDbkIsU0FBUyxDQUFDLEtBQUssQ0FBQztnQkFDaEIsU0FBUyxDQUFDLE1BQU0sQ0FBQzthQUNqQixDQUFDO1lBQ0YsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxFQUFFO2dCQUNyRCxTQUFTLEVBQUUsWUFBWTtnQkFDdkIsU0FBUyxFQUFFLFlBQVk7Z0JBQ3ZCLElBQUksRUFBRSxhQUFhO2dCQUNuQixHQUFHLGNBQWM7YUFDakIsQ0FBQyxDQUFDO1lBRUgsSUFBSSxLQUFLLEVBQUUsQ0FBQztnQkFDWCxNQUFNLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDcEUsQ0FBQztZQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQ3pCLE9BQU8sTUFBTSxDQUFDO1FBQ2YsQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsR0FBRyxFQUFFO1lBQ1gsTUFBTSxDQUFDLEVBQUUsT0FBTyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsRUFBRSxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1lBQzlGLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ2pDLElBQUksT0FBTztnQkFBRSxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN4QyxDQUFDLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsTUFBTSxFQUFFLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUV2RCxPQUFPLE1BQU0sQ0FBQztJQUNmLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUdELE1BQU0sT0FBTyxPQUFPO0lBTW5CO1FBTEEsUUFBRyxHQUFHLEtBQUssQ0FBQyxFQUFzRixDQUFDLENBQUM7UUFFNUYsYUFBUSxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMvQixxQkFBZ0IsR0FBRyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUduRCxJQUFJLEdBQWlFLENBQUM7UUFFdEUsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsMENBQTBDO1lBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hGLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFVLEVBQUUsR0FBWTtRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7K0dBN0JXLE9BQU87bUdBQVAsT0FBTzs7NEZBQVAsT0FBTztrQkFEbkIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RGVzdHJveVJlZixcblx0RGlyZWN0aXZlLFxuXHRFbWJlZGRlZFZpZXdSZWYsXG5cdEluamVjdG9yLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHtcblx0Q29sb3JTcGFjZSxcblx0RGVwdGhUZXh0dXJlLFxuXHRGbG9hdFR5cGUsXG5cdEhhbGZGbG9hdFR5cGUsXG5cdExpbmVhckZpbHRlcixcblx0TWFnbmlmaWNhdGlvblRleHR1cmVGaWx0ZXIsXG5cdE1pbmlmaWNhdGlvblRleHR1cmVGaWx0ZXIsXG5cdFRleHR1cmVEYXRhVHlwZSxcblx0V2ViR0xSZW5kZXJUYXJnZXQsXG5cdFdyYXBwaW5nLFxufSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBUZXh0dXJlRW5jb2RpbmcgfSBmcm9tICcuL2RlcHJlY2F0ZWQnO1xuXG5pbnRlcmZhY2UgRkJPU2V0dGluZ3Mge1xuXHQvKiogRGVmaW5lcyB0aGUgY291bnQgb2YgTVNBQSBzYW1wbGVzLiBDYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wgMi4gRGVmYXVsdDogMCAqL1xuXHRzYW1wbGVzPzogbnVtYmVyO1xuXHQvKiogSWYgc2V0LCB0aGUgc2NlbmUgZGVwdGggd2lsbCBiZSByZW5kZXJlZCBpbnRvIGJ1ZmZlci5kZXB0aFRleHR1cmUuIERlZmF1bHQ6IGZhbHNlICovXG5cdGRlcHRoPzogYm9vbGVhbjtcblxuXHQvLyBXZWJHTFJlbmRlclRhcmdldE9wdGlvbnMgPT4gUmVuZGVyVGFyZ2V0T3B0aW9uc1xuXHR3cmFwUz86IFdyYXBwaW5nIHwgdW5kZWZpbmVkO1xuXHR3cmFwVD86IFdyYXBwaW5nIHwgdW5kZWZpbmVkO1xuXHRtYWdGaWx0ZXI/OiBNYWduaWZpY2F0aW9uVGV4dHVyZUZpbHRlciB8IHVuZGVmaW5lZDtcblx0bWluRmlsdGVyPzogTWluaWZpY2F0aW9uVGV4dHVyZUZpbHRlciB8IHVuZGVmaW5lZDtcblx0Zm9ybWF0PzogbnVtYmVyIHwgdW5kZWZpbmVkOyAvLyBSR0JBRm9ybWF0O1xuXHR0eXBlPzogVGV4dHVyZURhdGFUeXBlIHwgdW5kZWZpbmVkOyAvLyBVbnNpZ25lZEJ5dGVUeXBlO1xuXHRhbmlzb3Ryb3B5PzogbnVtYmVyIHwgdW5kZWZpbmVkOyAvLyAxO1xuXHRkZXB0aEJ1ZmZlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7IC8vIHRydWU7XG5cdHN0ZW5jaWxCdWZmZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkOyAvLyBmYWxzZTtcblx0Z2VuZXJhdGVNaXBtYXBzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsgLy8gdHJ1ZTtcblx0ZGVwdGhUZXh0dXJlPzogRGVwdGhUZXh0dXJlIHwgdW5kZWZpbmVkO1xuXHRlbmNvZGluZz86IFRleHR1cmVFbmNvZGluZyB8IHVuZGVmaW5lZDtcblx0Y29sb3JTcGFjZT86IENvbG9yU3BhY2UgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0ZCT1BhcmFtcyB7XG5cdHdpZHRoPzogbnVtYmVyIHwgRkJPU2V0dGluZ3M7XG5cdGhlaWdodD86IG51bWJlcjtcblx0c2V0dGluZ3M/OiBGQk9TZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEZCTyhwYXJhbXM6ICgpID0+IE5ndHNGQk9QYXJhbXMsIHsgaW5qZWN0b3IgfTogeyBpbmplY3Rvcj86IEluamVjdG9yIH0gPSB7fSkge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoaW5qZWN0RkJPLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHN0b3JlID0gaW5qZWN0U3RvcmUoKTtcblx0XHRjb25zdCBzaXplID0gc3RvcmUuc2VsZWN0KCdzaXplJyk7XG5cdFx0Y29uc3Qgdmlld3BvcnQgPSBzdG9yZS5zZWxlY3QoJ3ZpZXdwb3J0Jyk7XG5cblx0XHRjb25zdCB3aWR0aCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHsgd2lkdGggfSA9IHBhcmFtcygpO1xuXHRcdFx0cmV0dXJuIHR5cGVvZiB3aWR0aCA9PT0gJ251bWJlcicgPyB3aWR0aCA6IHNpemUoKS53aWR0aCAqIHZpZXdwb3J0KCkuZHByO1xuXHRcdH0pO1xuXHRcdGNvbnN0IGhlaWdodCA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHsgaGVpZ2h0IH0gPSBwYXJhbXMoKTtcblx0XHRcdHJldHVybiB0eXBlb2YgaGVpZ2h0ID09PSAnbnVtYmVyJyA/IGhlaWdodCA6IHNpemUoKS5oZWlnaHQgKiB2aWV3cG9ydCgpLmRwcjtcblx0XHR9KTtcblx0XHRjb25zdCBzZXR0aW5ncyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRcdGNvbnN0IHsgd2lkdGgsIHNldHRpbmdzIH0gPSBwYXJhbXMoKTtcblx0XHRcdGNvbnN0IF9zZXR0aW5ncyA9ICh0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInID8gc2V0dGluZ3MgOiAod2lkdGggYXMgRkJPU2V0dGluZ3MpKSB8fCB7fTtcblx0XHRcdGlmIChfc2V0dGluZ3Muc2FtcGxlcyA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdF9zZXR0aW5ncy5zYW1wbGVzID0gMDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBfc2V0dGluZ3M7XG5cdFx0fSk7XG5cblx0XHRjb25zdCB0YXJnZXQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbeyBzYW1wbGVzID0gMCwgZGVwdGgsIC4uLnRhcmdldFNldHRpbmdzIH0sIF93aWR0aCwgX2hlaWdodF0gPSBbXG5cdFx0XHRcdHVudHJhY2tlZChzZXR0aW5ncyksXG5cdFx0XHRcdHVudHJhY2tlZCh3aWR0aCksXG5cdFx0XHRcdHVudHJhY2tlZChoZWlnaHQpLFxuXHRcdFx0XTtcblx0XHRcdGNvbnN0IHRhcmdldCA9IG5ldyBXZWJHTFJlbmRlclRhcmdldChfd2lkdGgsIF9oZWlnaHQsIHtcblx0XHRcdFx0bWluRmlsdGVyOiBMaW5lYXJGaWx0ZXIsXG5cdFx0XHRcdG1hZ0ZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRcdFx0XHR0eXBlOiBIYWxmRmxvYXRUeXBlLFxuXHRcdFx0XHQuLi50YXJnZXRTZXR0aW5ncyxcblx0XHRcdH0pO1xuXG5cdFx0XHRpZiAoZGVwdGgpIHtcblx0XHRcdFx0dGFyZ2V0LmRlcHRoVGV4dHVyZSA9IG5ldyBEZXB0aFRleHR1cmUoX3dpZHRoLCBfaGVpZ2h0LCBGbG9hdFR5cGUpO1xuXHRcdFx0fVxuXG5cdFx0XHR0YXJnZXQuc2FtcGxlcyA9IHNhbXBsZXM7XG5cdFx0XHRyZXR1cm4gdGFyZ2V0O1xuXHRcdH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFt7IHNhbXBsZXMgPSAwIH0sIF93aWR0aCwgX2hlaWdodCwgX3RhcmdldF0gPSBbc2V0dGluZ3MoKSwgd2lkdGgoKSwgaGVpZ2h0KCksIHRhcmdldCgpXTtcblx0XHRcdF90YXJnZXQuc2V0U2l6ZShfd2lkdGgsIF9oZWlnaHQpO1xuXHRcdFx0aWYgKHNhbXBsZXMpIF90YXJnZXQuc2FtcGxlcyA9IHNhbXBsZXM7XG5cdFx0fSk7XG5cblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHRhcmdldCgpLmRpc3Bvc2UoKSk7XG5cblx0XHRyZXR1cm4gdGFyZ2V0O1xuXHR9KTtcbn1cblxuQERpcmVjdGl2ZSh7IHNlbGVjdG9yOiAnbmctdGVtcGxhdGVbZmJvXScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RzRkJPIHtcblx0ZmJvID0gaW5wdXQoe30gYXMgeyB3aWR0aDogTmd0c0ZCT1BhcmFtc1snd2lkdGgnXTsgaGVpZ2h0OiBOZ3RzRkJPUGFyYW1zWydoZWlnaHQnXSB9ICYgRkJPU2V0dGluZ3MpO1xuXG5cdHByaXZhdGUgdGVtcGxhdGUgPSBpbmplY3QoVGVtcGxhdGVSZWYpO1xuXHRwcml2YXRlIHZpZXdDb250YWluZXJSZWYgPSBpbmplY3QoVmlld0NvbnRhaW5lclJlZik7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0bGV0IHJlZjogRW1iZWRkZWRWaWV3UmVmPHsgJGltcGxpY2l0OiBSZXR1cm5UeXBlPHR5cGVvZiBpbmplY3RGQk8+IH0+O1xuXG5cdFx0Y29uc3QgZmJvVGFyZ2V0ID0gaW5qZWN0RkJPKCgpID0+IHtcblx0XHRcdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgLi4uc2V0dGluZ3MgfSA9IHRoaXMuZmJvKCk7XG5cdFx0XHRyZXR1cm4geyB3aWR0aCwgaGVpZ2h0LCBzZXR0aW5ncyB9O1xuXHRcdH0pO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdC8vIFRPRE86IGRvdWJsZSBjaGVjayBpZiB3ZSBuZWVkIHVudHJhY2tlZFxuXHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0cmVmID0gdGhpcy52aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUVtYmVkZGVkVmlldyh0aGlzLnRlbXBsYXRlLCB7ICRpbXBsaWNpdDogZmJvVGFyZ2V0IH0pO1xuXHRcdFx0XHRyZWYuZGV0ZWN0Q2hhbmdlcygpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRpbmplY3QoRGVzdHJveVJlZikub25EZXN0cm95KCgpID0+IHtcblx0XHRcdHJlZj8uZGVzdHJveSgpO1xuXHRcdH0pO1xuXHR9XG5cblx0c3RhdGljIG5nVGVtcGxhdGVDb250ZXh0R3VhcmQoXzogTmd0c0ZCTywgY3R4OiB1bmtub3duKTogY3R4IGlzIHsgJGltcGxpY2l0OiBSZXR1cm5UeXBlPHR5cGVvZiBpbmplY3RGQk8+IH0ge1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG4iXX0=
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmJvLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9zb2JhL21pc2Mvc3JjL2xpYi9mYm8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNOLFVBQVUsRUFDVixTQUFTLEVBR1QsV0FBVyxFQUNYLGdCQUFnQixFQUNoQixlQUFlLEVBQ2YsUUFBUSxFQUNSLE1BQU0sRUFDTixNQUFNLEVBQ04sS0FBSyxFQUNMLFNBQVMsR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBRU4sWUFBWSxFQUNaLFNBQVMsRUFDVCxhQUFhLEVBQ2IsWUFBWSxFQUlaLGlCQUFpQixHQUVqQixNQUFNLE9BQU8sQ0FBQzs7QUErQmYsTUFBTSxVQUFVLFNBQVMsQ0FBQyxTQUE4QixHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsUUFBUSxLQUE4QixFQUFFO0lBQzdHLE9BQU8sY0FBYyxDQUFDLFNBQVMsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQy9DLE1BQU0sS0FBSyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBQzVCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbEMsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUUxQyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFO1lBQzNCLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUMzQixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEdBQUcsUUFB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TSxTQUFTLEdBQUcsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNoQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNsRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUNwQyxDQUFDLENBQUMsQ0FBQztRQUVILGVBQWUsQ0FBQyxHQUFHLEVBQUU7WUFDcEIsMENBQTBDO1lBQzFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsR0FBRyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBQ3hGLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQixDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDakMsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDO1FBQ2hCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVELE1BQU0sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFVLEVBQUUsR0FBWTtRQUNyRCxPQUFPLElBQUksQ0FBQztJQUNiLENBQUM7K0dBN0JXLE9BQU87bUdBQVAsT0FBTzs7NEZBQVAsT0FBTztrQkFEbkIsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0RGVzdHJveVJlZixcblx0RGlyZWN0aXZlLFxuXHRFbWJlZGRlZFZpZXdSZWYsXG5cdEluamVjdG9yLFxuXHRUZW1wbGF0ZVJlZixcblx0Vmlld0NvbnRhaW5lclJlZixcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0ZWZmZWN0LFxuXHRpbmplY3QsXG5cdGlucHV0LFxuXHR1bnRyYWNrZWQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgaW5qZWN0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHtcblx0Q29sb3JTcGFjZSxcblx0RGVwdGhUZXh0dXJlLFxuXHRGbG9hdFR5cGUsXG5cdEhhbGZGbG9hdFR5cGUsXG5cdExpbmVhckZpbHRlcixcblx0TWFnbmlmaWNhdGlvblRleHR1cmVGaWx0ZXIsXG5cdE1pbmlmaWNhdGlvblRleHR1cmVGaWx0ZXIsXG5cdFRleHR1cmVEYXRhVHlwZSxcblx0V2ViR0xSZW5kZXJUYXJnZXQsXG5cdFdyYXBwaW5nLFxufSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBUZXh0dXJlRW5jb2RpbmcgfSBmcm9tICcuL2RlcHJlY2F0ZWQnO1xuXG5pbnRlcmZhY2UgRkJPU2V0dGluZ3Mge1xuXHQvKiogRGVmaW5lcyB0aGUgY291bnQgb2YgTVNBQSBzYW1wbGVzLiBDYW4gb25seSBiZSB1c2VkIHdpdGggV2ViR0wgMi4gRGVmYXVsdDogMCAqL1xuXHRzYW1wbGVzPzogbnVtYmVyO1xuXHQvKiogSWYgc2V0LCB0aGUgc2NlbmUgZGVwdGggd2lsbCBiZSByZW5kZXJlZCBpbnRvIGJ1ZmZlci5kZXB0aFRleHR1cmUuIERlZmF1bHQ6IGZhbHNlICovXG5cdGRlcHRoPzogYm9vbGVhbjtcblxuXHQvLyBXZWJHTFJlbmRlclRhcmdldE9wdGlvbnMgPT4gUmVuZGVyVGFyZ2V0T3B0aW9uc1xuXHR3cmFwUz86IFdyYXBwaW5nIHwgdW5kZWZpbmVkO1xuXHR3cmFwVD86IFdyYXBwaW5nIHwgdW5kZWZpbmVkO1xuXHRtYWdGaWx0ZXI/OiBNYWduaWZpY2F0aW9uVGV4dHVyZUZpbHRlciB8IHVuZGVmaW5lZDtcblx0bWluRmlsdGVyPzogTWluaWZpY2F0aW9uVGV4dHVyZUZpbHRlciB8IHVuZGVmaW5lZDtcblx0Zm9ybWF0PzogbnVtYmVyIHwgdW5kZWZpbmVkOyAvLyBSR0JBRm9ybWF0O1xuXHR0eXBlPzogVGV4dHVyZURhdGFUeXBlIHwgdW5kZWZpbmVkOyAvLyBVbnNpZ25lZEJ5dGVUeXBlO1xuXHRhbmlzb3Ryb3B5PzogbnVtYmVyIHwgdW5kZWZpbmVkOyAvLyAxO1xuXHRkZXB0aEJ1ZmZlcj86IGJvb2xlYW4gfCB1bmRlZmluZWQ7IC8vIHRydWU7XG5cdHN0ZW5jaWxCdWZmZXI/OiBib29sZWFuIHwgdW5kZWZpbmVkOyAvLyBmYWxzZTtcblx0Z2VuZXJhdGVNaXBtYXBzPzogYm9vbGVhbiB8IHVuZGVmaW5lZDsgLy8gdHJ1ZTtcblx0ZGVwdGhUZXh0dXJlPzogRGVwdGhUZXh0dXJlIHwgdW5kZWZpbmVkO1xuXHRlbmNvZGluZz86IFRleHR1cmVFbmNvZGluZyB8IHVuZGVmaW5lZDtcblx0Y29sb3JTcGFjZT86IENvbG9yU3BhY2UgfCB1bmRlZmluZWQ7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0c0ZCT1BhcmFtcyB7XG5cdHdpZHRoPzogbnVtYmVyIHwgRkJPU2V0dGluZ3M7XG5cdGhlaWdodD86IG51bWJlcjtcblx0c2V0dGluZ3M/OiBGQk9TZXR0aW5ncztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEZCTyhwYXJhbXM6ICgpID0+IE5ndHNGQk9QYXJhbXMgPSAoKSA9PiAoe30pLCB7IGluamVjdG9yIH06IHsgaW5qZWN0b3I/OiBJbmplY3RvciB9ID0ge30pIHtcblx0cmV0dXJuIGFzc2VydEluamVjdG9yKGluamVjdEZCTywgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBzdG9yZSA9IGluamVjdFN0b3JlKCk7XG5cdFx0Y29uc3Qgc2l6ZSA9IHN0b3JlLnNlbGVjdCgnc2l6ZScpO1xuXHRcdGNvbnN0IHZpZXdwb3J0ID0gc3RvcmUuc2VsZWN0KCd2aWV3cG9ydCcpO1xuXG5cdFx0Y29uc3Qgd2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB7IHdpZHRoIH0gPSBwYXJhbXMoKTtcblx0XHRcdHJldHVybiB0eXBlb2Ygd2lkdGggPT09ICdudW1iZXInID8gd2lkdGggOiBzaXplKCkud2lkdGggKiB2aWV3cG9ydCgpLmRwcjtcblx0XHR9KTtcblx0XHRjb25zdCBoZWlnaHQgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB7IGhlaWdodCB9ID0gcGFyYW1zKCk7XG5cdFx0XHRyZXR1cm4gdHlwZW9mIGhlaWdodCA9PT0gJ251bWJlcicgPyBoZWlnaHQgOiBzaXplKCkuaGVpZ2h0ICogdmlld3BvcnQoKS5kcHI7XG5cdFx0fSk7XG5cdFx0Y29uc3Qgc2V0dGluZ3MgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCB7IHdpZHRoLCBzZXR0aW5ncyB9ID0gcGFyYW1zKCk7XG5cdFx0XHRjb25zdCBfc2V0dGluZ3MgPSAodHlwZW9mIHdpZHRoID09PSAnbnVtYmVyJyA/IHNldHRpbmdzIDogKHdpZHRoIGFzIEZCT1NldHRpbmdzKSkgfHwge307XG5cdFx0XHRpZiAoX3NldHRpbmdzLnNhbXBsZXMgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRfc2V0dGluZ3Muc2FtcGxlcyA9IDA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gX3NldHRpbmdzO1xuXHRcdH0pO1xuXG5cdFx0Y29uc3QgdGFyZ2V0ID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdFx0Y29uc3QgW3sgc2FtcGxlcyA9IDAsIGRlcHRoLCAuLi50YXJnZXRTZXR0aW5ncyB9LCBfd2lkdGgsIF9oZWlnaHRdID0gW1xuXHRcdFx0XHR1bnRyYWNrZWQoc2V0dGluZ3MpLFxuXHRcdFx0XHR1bnRyYWNrZWQod2lkdGgpLFxuXHRcdFx0XHR1bnRyYWNrZWQoaGVpZ2h0KSxcblx0XHRcdF07XG5cdFx0XHRjb25zdCB0YXJnZXQgPSBuZXcgV2ViR0xSZW5kZXJUYXJnZXQoX3dpZHRoLCBfaGVpZ2h0LCB7XG5cdFx0XHRcdG1pbkZpbHRlcjogTGluZWFyRmlsdGVyLFxuXHRcdFx0XHRtYWdGaWx0ZXI6IExpbmVhckZpbHRlcixcblx0XHRcdFx0dHlwZTogSGFsZkZsb2F0VHlwZSxcblx0XHRcdFx0Li4udGFyZ2V0U2V0dGluZ3MsXG5cdFx0XHR9KTtcblxuXHRcdFx0aWYgKGRlcHRoKSB7XG5cdFx0XHRcdHRhcmdldC5kZXB0aFRleHR1cmUgPSBuZXcgRGVwdGhUZXh0dXJlKF93aWR0aCwgX2hlaWdodCwgRmxvYXRUeXBlKTtcblx0XHRcdH1cblxuXHRcdFx0dGFyZ2V0LnNhbXBsZXMgPSBzYW1wbGVzO1xuXHRcdFx0cmV0dXJuIHRhcmdldDtcblx0XHR9KTtcblxuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbeyBzYW1wbGVzID0gMCB9LCBfd2lkdGgsIF9oZWlnaHQsIF90YXJnZXRdID0gW3NldHRpbmdzKCksIHdpZHRoKCksIGhlaWdodCgpLCB0YXJnZXQoKV07XG5cdFx0XHRfdGFyZ2V0LnNldFNpemUoX3dpZHRoLCBfaGVpZ2h0KTtcblx0XHRcdGlmIChzYW1wbGVzKSBfdGFyZ2V0LnNhbXBsZXMgPSBzYW1wbGVzO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB0YXJnZXQoKS5kaXNwb3NlKCkpO1xuXG5cdFx0cmV0dXJuIHRhcmdldDtcblx0fSk7XG59XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ25nLXRlbXBsYXRlW2Zib10nLCBzdGFuZGFsb25lOiB0cnVlIH0pXG5leHBvcnQgY2xhc3MgTmd0c0ZCTyB7XG5cdGZibyA9IGlucHV0KHt9IGFzIHsgd2lkdGg6IE5ndHNGQk9QYXJhbXNbJ3dpZHRoJ107IGhlaWdodDogTmd0c0ZCT1BhcmFtc1snaGVpZ2h0J10gfSAmIEZCT1NldHRpbmdzKTtcblxuXHRwcml2YXRlIHRlbXBsYXRlID0gaW5qZWN0KFRlbXBsYXRlUmVmKTtcblx0cHJpdmF0ZSB2aWV3Q29udGFpbmVyUmVmID0gaW5qZWN0KFZpZXdDb250YWluZXJSZWYpO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGxldCByZWY6IEVtYmVkZGVkVmlld1JlZjx7ICRpbXBsaWNpdDogUmV0dXJuVHlwZTx0eXBlb2YgaW5qZWN0RkJPPiB9PjtcblxuXHRcdGNvbnN0IGZib1RhcmdldCA9IGluamVjdEZCTygoKSA9PiB7XG5cdFx0XHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIC4uLnNldHRpbmdzIH0gPSB0aGlzLmZibygpO1xuXHRcdFx0cmV0dXJuIHsgd2lkdGgsIGhlaWdodCwgc2V0dGluZ3MgfTtcblx0XHR9KTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHQvLyBUT0RPOiBkb3VibGUgY2hlY2sgaWYgd2UgbmVlZCB1bnRyYWNrZWRcblx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdHJlZiA9IHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy50ZW1wbGF0ZSwgeyAkaW1wbGljaXQ6IGZib1RhcmdldCB9KTtcblx0XHRcdFx0cmVmLmRldGVjdENoYW5nZXMoKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0aW5qZWN0KERlc3Ryb3lSZWYpLm9uRGVzdHJveSgoKSA9PiB7XG5cdFx0XHRyZWY/LmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXG5cdHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKF86IE5ndHNGQk8sIGN0eDogdW5rbm93bik6IGN0eCBpcyB7ICRpbXBsaWNpdDogUmV0dXJuVHlwZTx0eXBlb2YgaW5qZWN0RkJPPiB9IHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuIl19
@@ -1,3 +1,3 @@
1
- import { BlurPass, CausticsMaterial, CausticsProjectionMaterial, MeshDiscardMaterial, MeshDistortMaterial, MeshReflectorMaterial, MeshTransmissionMaterial, MeshWobbleMaterial, ProgressiveLightMap, SoftShadowMaterial, SpotLightMaterial, createCausticsUpdate, shaderMaterial, } from '@pmndrs/vanilla';
2
- export { BlurPass, CausticsMaterial, CausticsProjectionMaterial, MeshDiscardMaterial, MeshDistortMaterial, MeshReflectorMaterial, MeshTransmissionMaterial, MeshWobbleMaterial, ProgressiveLightMap, SoftShadowMaterial, SpotLightMaterial, createCausticsUpdate, shaderMaterial, };
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvdmFuaWxsYS1leHBvcnRzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sUUFBUSxFQUNSLGdCQUFnQixFQUNoQiwwQkFBMEIsRUFFMUIsbUJBQW1CLEVBQ25CLG1CQUFtQixFQUVuQixxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUVsQixtQkFBbUIsRUFDbkIsa0JBQWtCLEVBQ2xCLGlCQUFpQixFQUNqQixvQkFBb0IsRUFDcEIsY0FBYyxHQUNkLE1BQU0saUJBQWlCLENBQUM7QUE4QnpCLE9BQU8sRUFDTixRQUFRLEVBQ1IsZ0JBQWdCLEVBQ2hCLDBCQUEwQixFQUUxQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBRW5CLHFCQUFxQixFQUNyQix3QkFBd0IsRUFDeEIsa0JBQWtCLEVBRWxCLG1CQUFtQixFQUNuQixrQkFBa0IsRUFDbEIsaUJBQWlCLEVBQ2pCLG9CQUFvQixFQUNwQixjQUFjLEdBQ2QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEJsdXJQYXNzLFxuXHRDYXVzdGljc01hdGVyaWFsLFxuXHRDYXVzdGljc1Byb2plY3Rpb25NYXRlcmlhbCxcblx0Q2F1c3RpY3NQcm9qZWN0aW9uTWF0ZXJpYWxUeXBlLFxuXHRNZXNoRGlzY2FyZE1hdGVyaWFsLFxuXHRNZXNoRGlzdG9ydE1hdGVyaWFsLFxuXHRNZXNoRGlzdG9ydE1hdGVyaWFsUGFyYW1ldGVycyxcblx0TWVzaFJlZmxlY3Rvck1hdGVyaWFsLFxuXHRNZXNoVHJhbnNtaXNzaW9uTWF0ZXJpYWwsXG5cdE1lc2hXb2JibGVNYXRlcmlhbCxcblx0TWVzaFdvYmJsZU1hdGVyaWFsUGFyYW1ldGVycyxcblx0UHJvZ3Jlc3NpdmVMaWdodE1hcCxcblx0U29mdFNoYWRvd01hdGVyaWFsLFxuXHRTcG90TGlnaHRNYXRlcmlhbCxcblx0Y3JlYXRlQ2F1c3RpY3NVcGRhdGUsXG5cdHNoYWRlck1hdGVyaWFsLFxufSBmcm9tICdAcG1uZHJzL3ZhbmlsbGEnO1xuaW1wb3J0IHsgTmd0TWF0ZXJpYWwgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcblxuZXhwb3J0IHR5cGUgTmd0U3BvdExpZ2h0TWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxJbnN0YW5jZVR5cGU8dHlwZW9mIFNwb3RMaWdodE1hdGVyaWFsPiwgdHlwZW9mIFNwb3RMaWdodE1hdGVyaWFsPjtcbmV4cG9ydCB0eXBlIE5ndFNvZnRTaGFkb3dNYXRlcmlhbCA9IE5ndE1hdGVyaWFsPEluc3RhbmNlVHlwZTx0eXBlb2YgU29mdFNoYWRvd01hdGVyaWFsPiwgdHlwZW9mIFNvZnRTaGFkb3dNYXRlcmlhbD47XG5leHBvcnQgdHlwZSBOZ3RDYXVzdGljc1Byb2plY3Rpb25NYXRlcmlhbCA9IE5ndE1hdGVyaWFsPFxuXHRDYXVzdGljc1Byb2plY3Rpb25NYXRlcmlhbFR5cGUsXG5cdFtDYXVzdGljc1Byb2plY3Rpb25NYXRlcmlhbFR5cGVdXG4+O1xuXG5kZWNsYXJlIGdsb2JhbCB7XG5cdGludGVyZmFjZSBIVE1MRWxlbWVudFRhZ05hbWVNYXAge1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1tZXNoLXN0YW5kYXJkLW1hdGVyaWFsXG5cdFx0ICogQHJhd09wdGlvbnMgY29sb3J8YmxlbmR8b3BhY2l0eXxhbHBoYVRlc3R8bWFwXG5cdFx0ICovXG5cdFx0J25ndC1zb2Z0LXNoYWRvdy1tYXRlcmlhbCc6IE5ndFNvZnRTaGFkb3dNYXRlcmlhbDtcblx0XHQvKipcblx0XHQgKiBAZXh0ZW5kcyBuZ3Qtc2hhZGVyLW1hdGVyaWFsXG5cdFx0ICogQHJhd09wdGlvbnMgZGVwdGh8b3BhY2l0eXxhdHRlbnVhdGlvbnxhbmdsZVBvd2VyfHNwb3RQb3NpdGlvbnxsaWdodENvbG9yfGNhbWVyYU5lYXJ8Y2FtZXJhRmFyfHJlc29sdXRpb258dHJhbnNwYXJlbnR8ZGVwdGhXcml0ZVxuXHRcdCAqL1xuXHRcdCduZ3Qtc3BvdC1saWdodC1tYXRlcmlhbCc6IE5ndFNwb3RMaWdodE1hdGVyaWFsO1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1zaGFkZXItbWF0ZXJpYWxcblx0XHQgKiBAcmF3T3B0aW9ucyBjb2xvcnxjYXVzdGljc1RleHR1cmV8Y2F1c3RpY3NUZXh0dXJlQnxsaWdodFByb2pNYXRyaXh8bGlnaHRWaWV3TWF0cml4XG5cdFx0ICovXG5cdFx0J25ndC1jYXVzdGljcy1wcm9qZWN0aW9uLW1hdGVyaWFsJzogTmd0Q2F1c3RpY3NQcm9qZWN0aW9uTWF0ZXJpYWw7XG5cdH1cbn1cblxuZXhwb3J0IHtcblx0Qmx1clBhc3MsXG5cdENhdXN0aWNzTWF0ZXJpYWwsXG5cdENhdXN0aWNzUHJvamVjdGlvbk1hdGVyaWFsLFxuXHRDYXVzdGljc1Byb2plY3Rpb25NYXRlcmlhbFR5cGUsXG5cdE1lc2hEaXNjYXJkTWF0ZXJpYWwsXG5cdE1lc2hEaXN0b3J0TWF0ZXJpYWwsXG5cdE1lc2hEaXN0b3J0TWF0ZXJpYWxQYXJhbWV0ZXJzLFxuXHRNZXNoUmVmbGVjdG9yTWF0ZXJpYWwsXG5cdE1lc2hUcmFuc21pc3Npb25NYXRlcmlhbCxcblx0TWVzaFdvYmJsZU1hdGVyaWFsLFxuXHRNZXNoV29iYmxlTWF0ZXJpYWxQYXJhbWV0ZXJzLFxuXHRQcm9ncmVzc2l2ZUxpZ2h0TWFwLFxuXHRTb2Z0U2hhZG93TWF0ZXJpYWwsXG5cdFNwb3RMaWdodE1hdGVyaWFsLFxuXHRjcmVhdGVDYXVzdGljc1VwZGF0ZSxcblx0c2hhZGVyTWF0ZXJpYWwsXG59O1xuIl19
1
+ import { BlurPass, CausticsMaterial, CausticsProjectionMaterial, createCausticsUpdate, MeshDiscardMaterial, MeshDistortMaterial, MeshPortalMaterial, meshPortalMaterialApplySDF, MeshReflectorMaterial, MeshTransmissionMaterial, MeshWobbleMaterial, ProgressiveLightMap, shaderMaterial, SoftShadowMaterial, SpotLightMaterial, } from '@pmndrs/vanilla';
2
+ export { BlurPass, CausticsMaterial, CausticsProjectionMaterial, createCausticsUpdate, MeshDiscardMaterial, MeshDistortMaterial, MeshPortalMaterial, meshPortalMaterialApplySDF, MeshReflectorMaterial, MeshTransmissionMaterial, MeshWobbleMaterial, ProgressiveLightMap, shaderMaterial, SoftShadowMaterial, SpotLightMaterial, };
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3NvYmEvdmFuaWxsYS1leHBvcnRzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sUUFBUSxFQUNSLGdCQUFnQixFQUNoQiwwQkFBMEIsRUFFMUIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUNuQixtQkFBbUIsRUFFbkIsa0JBQWtCLEVBQ2xCLDBCQUEwQixFQUMxQixxQkFBcUIsRUFDckIsd0JBQXdCLEVBQ3hCLGtCQUFrQixFQUVsQixtQkFBbUIsRUFDbkIsY0FBYyxFQUNkLGtCQUFrQixFQUNsQixpQkFBaUIsR0FDakIsTUFBTSxpQkFBaUIsQ0FBQztBQW9DekIsT0FBTyxFQUNOLFFBQVEsRUFDUixnQkFBZ0IsRUFDaEIsMEJBQTBCLEVBRTFCLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsbUJBQW1CLEVBRW5CLGtCQUFrQixFQUNsQiwwQkFBMEIsRUFDMUIscUJBQXFCLEVBQ3JCLHdCQUF3QixFQUN4QixrQkFBa0IsRUFFbEIsbUJBQW1CLEVBQ25CLGNBQWMsRUFDZCxrQkFBa0IsRUFDbEIsaUJBQWlCLEdBQ2pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRCbHVyUGFzcyxcblx0Q2F1c3RpY3NNYXRlcmlhbCxcblx0Q2F1c3RpY3NQcm9qZWN0aW9uTWF0ZXJpYWwsXG5cdENhdXN0aWNzUHJvamVjdGlvbk1hdGVyaWFsVHlwZSxcblx0Y3JlYXRlQ2F1c3RpY3NVcGRhdGUsXG5cdE1lc2hEaXNjYXJkTWF0ZXJpYWwsXG5cdE1lc2hEaXN0b3J0TWF0ZXJpYWwsXG5cdE1lc2hEaXN0b3J0TWF0ZXJpYWxQYXJhbWV0ZXJzLFxuXHRNZXNoUG9ydGFsTWF0ZXJpYWwsXG5cdG1lc2hQb3J0YWxNYXRlcmlhbEFwcGx5U0RGLFxuXHRNZXNoUmVmbGVjdG9yTWF0ZXJpYWwsXG5cdE1lc2hUcmFuc21pc3Npb25NYXRlcmlhbCxcblx0TWVzaFdvYmJsZU1hdGVyaWFsLFxuXHRNZXNoV29iYmxlTWF0ZXJpYWxQYXJhbWV0ZXJzLFxuXHRQcm9ncmVzc2l2ZUxpZ2h0TWFwLFxuXHRzaGFkZXJNYXRlcmlhbCxcblx0U29mdFNoYWRvd01hdGVyaWFsLFxuXHRTcG90TGlnaHRNYXRlcmlhbCxcbn0gZnJvbSAnQHBtbmRycy92YW5pbGxhJztcbmltcG9ydCB7IE5ndE1hdGVyaWFsIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5cbmV4cG9ydCB0eXBlIE5ndFNwb3RMaWdodE1hdGVyaWFsID0gTmd0TWF0ZXJpYWw8SW5zdGFuY2VUeXBlPHR5cGVvZiBTcG90TGlnaHRNYXRlcmlhbD4sIHR5cGVvZiBTcG90TGlnaHRNYXRlcmlhbD47XG5leHBvcnQgdHlwZSBOZ3RTb2Z0U2hhZG93TWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxJbnN0YW5jZVR5cGU8dHlwZW9mIFNvZnRTaGFkb3dNYXRlcmlhbD4sIHR5cGVvZiBTb2Z0U2hhZG93TWF0ZXJpYWw+O1xuZXhwb3J0IHR5cGUgTmd0Q2F1c3RpY3NQcm9qZWN0aW9uTWF0ZXJpYWwgPSBOZ3RNYXRlcmlhbDxcblx0Q2F1c3RpY3NQcm9qZWN0aW9uTWF0ZXJpYWxUeXBlLFxuXHRbQ2F1c3RpY3NQcm9qZWN0aW9uTWF0ZXJpYWxUeXBlXVxuPjtcbmV4cG9ydCB0eXBlIE5ndE1lc2hQb3J0YWxNYXRlcmlhbCA9IE5ndE1hdGVyaWFsPEluc3RhbmNlVHlwZTx0eXBlb2YgTWVzaFBvcnRhbE1hdGVyaWFsPiwgdHlwZW9mIE1lc2hQb3J0YWxNYXRlcmlhbD47XG5cbmRlY2xhcmUgZ2xvYmFsIHtcblx0aW50ZXJmYWNlIEhUTUxFbGVtZW50VGFnTmFtZU1hcCB7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LW1lc2gtc3RhbmRhcmQtbWF0ZXJpYWxcblx0XHQgKiBAcmF3T3B0aW9ucyBjb2xvcnxibGVuZHxvcGFjaXR5fGFscGhhVGVzdHxtYXBcblx0XHQgKi9cblx0XHQnbmd0LXNvZnQtc2hhZG93LW1hdGVyaWFsJzogTmd0U29mdFNoYWRvd01hdGVyaWFsO1xuXHRcdC8qKlxuXHRcdCAqIEBleHRlbmRzIG5ndC1zaGFkZXItbWF0ZXJpYWxcblx0XHQgKiBAcmF3T3B0aW9ucyBkZXB0aHxvcGFjaXR5fGF0dGVudWF0aW9ufGFuZ2xlUG93ZXJ8c3BvdFBvc2l0aW9ufGxpZ2h0Q29sb3J8Y2FtZXJhTmVhcnxjYW1lcmFGYXJ8cmVzb2x1dGlvbnx0cmFuc3BhcmVudHxkZXB0aFdyaXRlXG5cdFx0ICovXG5cdFx0J25ndC1zcG90LWxpZ2h0LW1hdGVyaWFsJzogTmd0U3BvdExpZ2h0TWF0ZXJpYWw7XG5cdFx0LyoqXG5cdFx0ICogQGV4dGVuZHMgbmd0LXNoYWRlci1tYXRlcmlhbFxuXHRcdCAqIEByYXdPcHRpb25zIGNvbG9yfGNhdXN0aWNzVGV4dHVyZXxjYXVzdGljc1RleHR1cmVCfGxpZ2h0UHJvak1hdHJpeHxsaWdodFZpZXdNYXRyaXhcblx0XHQgKi9cblx0XHQnbmd0LWNhdXN0aWNzLXByb2plY3Rpb24tbWF0ZXJpYWwnOiBOZ3RDYXVzdGljc1Byb2plY3Rpb25NYXRlcmlhbDtcblx0XHQvKipcblx0XHQgKiBAZXh0ZW5kcyBuZ3Qtc2hhZGVyLW1hdGVyaWFsXG5cdFx0ICogQHJhd09wdGlvbnMgcmVzb2x1dGlvbnxibHVyfHNpemV8c2RmfG1hcFxuXHRcdCAqL1xuXHRcdCduZ3QtbWVzaC1wb3J0YWwtbWF0ZXJpYWwnOiBOZ3RNZXNoUG9ydGFsTWF0ZXJpYWw7XG5cdH1cbn1cblxuZXhwb3J0IHtcblx0Qmx1clBhc3MsXG5cdENhdXN0aWNzTWF0ZXJpYWwsXG5cdENhdXN0aWNzUHJvamVjdGlvbk1hdGVyaWFsLFxuXHRDYXVzdGljc1Byb2plY3Rpb25NYXRlcmlhbFR5cGUsXG5cdGNyZWF0ZUNhdXN0aWNzVXBkYXRlLFxuXHRNZXNoRGlzY2FyZE1hdGVyaWFsLFxuXHRNZXNoRGlzdG9ydE1hdGVyaWFsLFxuXHRNZXNoRGlzdG9ydE1hdGVyaWFsUGFyYW1ldGVycyxcblx0TWVzaFBvcnRhbE1hdGVyaWFsLFxuXHRtZXNoUG9ydGFsTWF0ZXJpYWxBcHBseVNERixcblx0TWVzaFJlZmxlY3Rvck1hdGVyaWFsLFxuXHRNZXNoVHJhbnNtaXNzaW9uTWF0ZXJpYWwsXG5cdE1lc2hXb2JibGVNYXRlcmlhbCxcblx0TWVzaFdvYmJsZU1hdGVyaWFsUGFyYW1ldGVycyxcblx0UHJvZ3Jlc3NpdmVMaWdodE1hcCxcblx0c2hhZGVyTWF0ZXJpYWwsXG5cdFNvZnRTaGFkb3dNYXRlcmlhbCxcblx0U3BvdExpZ2h0TWF0ZXJpYWwsXG59O1xuIl19