angular-three-postprocessing 2.0.0-beta.24 → 2.0.0-beta.240

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/esm2022/lib/effect-composer.mjs +135 -170
  2. package/esm2022/lib/effect.mjs +45 -70
  3. package/esm2022/lib/effects/ascii.mjs +121 -0
  4. package/esm2022/lib/effects/bloom.mjs +39 -0
  5. package/esm2022/lib/effects/brightness-contrast.mjs +48 -0
  6. package/esm2022/lib/effects/chromatic-abberation.mjs +48 -0
  7. package/esm2022/lib/effects/color-average.mjs +34 -0
  8. package/esm2022/lib/effects/color-depth.mjs +38 -0
  9. package/esm2022/lib/effects/depth-of-field.mjs +57 -0
  10. package/esm2022/lib/effects/depth.mjs +38 -0
  11. package/esm2022/lib/effects/dot-screen.mjs +38 -0
  12. package/esm2022/lib/effects/fxaa.mjs +38 -0
  13. package/esm2022/lib/effects/glitch.mjs +65 -0
  14. package/esm2022/lib/effects/god-rays.mjs +42 -0
  15. package/esm2022/lib/effects/grid.mjs +45 -0
  16. package/esm2022/lib/effects/hue-saturation.mjs +38 -0
  17. package/esm2022/lib/effects/index.mjs +27 -18
  18. package/esm2022/lib/effects/lens-flare.mjs +195 -0
  19. package/esm2022/lib/effects/lut.mjs +51 -0
  20. package/esm2022/lib/effects/noise.mjs +39 -0
  21. package/esm2022/lib/effects/pixelation.mjs +31 -0
  22. package/esm2022/lib/effects/scanline.mjs +43 -0
  23. package/esm2022/lib/effects/sepia.mjs +38 -0
  24. package/esm2022/lib/effects/shock-wave.mjs +38 -0
  25. package/esm2022/lib/effects/smaa.mjs +38 -0
  26. package/esm2022/lib/effects/tilt-shift-2.mjs +121 -0
  27. package/esm2022/lib/effects/tilt-shift.mjs +39 -0
  28. package/esm2022/lib/effects/vignette.mjs +38 -0
  29. package/esm2022/lib/effects/water.mjs +64 -0
  30. package/esm2022/lib/utils.mjs +14 -0
  31. package/fesm2022/angular-three-postprocessing.mjs +1205 -655
  32. package/fesm2022/angular-three-postprocessing.mjs.map +1 -1
  33. package/lib/effect-composer.d.ts +70 -66
  34. package/lib/effect.d.ts +55 -24
  35. package/lib/effects/ascii.d.ts +24 -0
  36. package/lib/effects/bloom.d.ts +10 -0
  37. package/lib/effects/brightness-contrast.d.ts +15 -0
  38. package/lib/effects/chromatic-abberation.d.ts +16 -0
  39. package/lib/effects/color-average.d.ts +12 -0
  40. package/lib/effects/color-depth.d.ts +14 -0
  41. package/lib/effects/depth-of-field.d.ts +30 -0
  42. package/lib/effects/depth.d.ts +14 -0
  43. package/lib/effects/dot-screen.d.ts +15 -0
  44. package/lib/effects/fxaa.d.ts +13 -0
  45. package/lib/effects/glitch.d.ts +30 -0
  46. package/lib/effects/god-rays.d.ts +38 -0
  47. package/lib/effects/grid.d.ts +24 -0
  48. package/lib/effects/hue-saturation.d.ts +15 -0
  49. package/lib/effects/index.d.ts +26 -17
  50. package/lib/effects/lens-flare.d.ts +111 -0
  51. package/lib/effects/lut.d.ts +20 -0
  52. package/lib/effects/noise.d.ts +14 -0
  53. package/lib/effects/pixelation.d.ts +17 -0
  54. package/lib/effects/scanline.d.ts +17 -0
  55. package/lib/effects/sepia.d.ts +14 -0
  56. package/lib/effects/shock-wave.d.ts +11 -0
  57. package/lib/effects/smaa.d.ts +15 -0
  58. package/lib/effects/tilt-shift-2.d.ts +35 -0
  59. package/lib/effects/tilt-shift.d.ts +22 -0
  60. package/lib/effects/vignette.d.ts +17 -0
  61. package/lib/effects/water.d.ts +20 -0
  62. package/lib/utils.d.ts +3 -0
  63. package/package.json +54 -46
  64. package/esm2022/lib/effects/bloom/bloom.mjs +0 -33
  65. package/esm2022/lib/effects/brightness-contrast/brightness-contrast.mjs +0 -29
  66. package/esm2022/lib/effects/color-depth/color-depth.mjs +0 -29
  67. package/esm2022/lib/effects/depth/depth.mjs +0 -29
  68. package/esm2022/lib/effects/dot-screen/dot-screen.mjs +0 -29
  69. package/esm2022/lib/effects/hue-saturation/hue-saturation.mjs +0 -29
  70. package/esm2022/lib/effects/lut/lut.mjs +0 -74
  71. package/esm2022/lib/effects/noise/noise.mjs +0 -33
  72. package/esm2022/lib/effects/pixelation/pixelation.mjs +0 -37
  73. package/esm2022/lib/effects/scanline/scanline.mjs +0 -33
  74. package/esm2022/lib/effects/sepia/sepia.mjs +0 -29
  75. package/esm2022/lib/effects/shock-wave/shock-wave.mjs +0 -29
  76. package/esm2022/lib/effects/smaa/smaa.mjs +0 -29
  77. package/esm2022/lib/effects/ssao/ssao.mjs +0 -217
  78. package/esm2022/lib/effects/tilt-shift/tilt-shift.mjs +0 -33
  79. package/esm2022/lib/effects/tone-mapping/tone-mapping.mjs +0 -29
  80. package/esm2022/lib/effects/vignette/vignette.mjs +0 -29
  81. package/lib/effects/bloom/bloom.d.ts +0 -13
  82. package/lib/effects/brightness-contrast/brightness-contrast.d.ts +0 -15
  83. package/lib/effects/color-depth/color-depth.d.ts +0 -14
  84. package/lib/effects/depth/depth.d.ts +0 -14
  85. package/lib/effects/dot-screen/dot-screen.d.ts +0 -15
  86. package/lib/effects/hue-saturation/hue-saturation.d.ts +0 -15
  87. package/lib/effects/lut/lut.d.ts +0 -29
  88. package/lib/effects/noise/noise.d.ts +0 -15
  89. package/lib/effects/pixelation/pixelation.d.ts +0 -20
  90. package/lib/effects/scanline/scanline.d.ts +0 -15
  91. package/lib/effects/sepia/sepia.d.ts +0 -14
  92. package/lib/effects/shock-wave/shock-wave.d.ts +0 -17
  93. package/lib/effects/smaa/smaa.d.ts +0 -16
  94. package/lib/effects/ssao/ssao.d.ts +0 -42
  95. package/lib/effects/tilt-shift/tilt-shift.d.ts +0 -23
  96. package/lib/effects/tone-mapping/tone-mapping.d.ts +0 -22
  97. package/lib/effects/vignette/vignette.d.ts +0 -17
@@ -1,148 +1,172 @@
1
- import { CUSTOM_ELEMENTS_SCHEMA, Component, Injector, Input, computed, effect, forwardRef, inject, } from '@angular/core';
2
- import { createInjectionToken, extend, injectBeforeRender, injectNgtRef, injectNgtStore, signalStore, } from 'angular-three';
3
- import { DepthDownsamplingPass, Effect, EffectComposer, EffectPass, NormalPass, Pass, RenderPass, } from 'postprocessing';
4
- import * as THREE from 'three';
5
- import { Group } from 'three';
1
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, Directive, Injector, TemplateRef, ViewContainerRef, afterNextRender, computed, contentChild, inject, input, viewChild, } from '@angular/core';
2
+ import { createApiToken, extend, getLocalState, injectBeforeRender, injectNgtStore, pick } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { mergeInputs } from 'ngxtension/inject-inputs';
5
+ import { DepthDownsamplingPass, Effect, EffectAttribute, EffectComposer, EffectPass, NormalPass, Pass, RenderPass, } from 'postprocessing';
6
+ import { Group, HalfFloatType, NoToneMapping } from 'three';
6
7
  import { isWebGL2Available } from 'three-stdlib';
7
8
  import * as i0 from "@angular/core";
8
9
  extend({ Group });
9
- export const [injectNgtpEffectComposerApi, provideNgtpEffectComposerApi] = createInjectionToken((composer) => composer.api, { isRoot: false, deps: [forwardRef(() => NgtpEffectComposer)] });
10
+ export const [injectEffectComposerApi, provideEffectComposerApi] = createApiToken(() => NgtpEffectComposer);
11
+ const defaultOptions = {
12
+ enabled: true,
13
+ renderPriority: 1,
14
+ autoClear: true,
15
+ multisampling: 8,
16
+ frameBufferType: HalfFloatType,
17
+ };
18
+ function isConvolution(effect) {
19
+ return (effect.getAttributes() & EffectAttribute.CONVOLUTION) === EffectAttribute.CONVOLUTION;
20
+ }
21
+ export class NgtpEffects {
22
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffects, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
23
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.0.3", type: NgtpEffects, isStandalone: true, selector: "ng-template[effects]", ngImport: i0 }); }
24
+ }
25
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffects, decorators: [{
26
+ type: Directive,
27
+ args: [{ selector: 'ng-template[effects]', standalone: true }]
28
+ }] });
10
29
  export class NgtpEffectComposer {
11
- set _enabled(enabled) {
12
- this.inputs.set({ enabled });
13
- }
14
- set _depthBuffer(depthBuffer) {
15
- this.inputs.set({ depthBuffer });
16
- }
17
- set _disableNormalPass(disableNormalPass) {
18
- this.inputs.set({ disableNormalPass });
19
- }
20
- set _stencilBuffer(stencilBuffer) {
21
- this.inputs.set({ stencilBuffer });
22
- }
23
- set _autoClear(autoClear) {
24
- this.inputs.set({ autoClear });
25
- }
26
- set _resolutionScale(resolutionScale) {
27
- this.inputs.set({ resolutionScale });
28
- }
29
- set _multisampling(multisampling) {
30
- this.inputs.set({ multisampling });
31
- }
32
- set _frameBufferType(frameBufferType) {
33
- this.inputs.set({ frameBufferType });
34
- }
35
- set _renderPriority(renderPriority) {
36
- this.inputs.set({ renderPriority });
37
- }
38
- set _camera(camera) {
39
- this.inputs.set({ camera });
40
- }
41
- set _scene(scene) {
42
- this.inputs.set({ scene });
43
- }
44
30
  constructor() {
45
- this.inputs = signalStore({
46
- enabled: true,
47
- renderPriority: 1,
48
- autoClear: true,
49
- multisampling: 8,
50
- frameBufferType: THREE.HalfFloatType,
51
- });
52
- this.composerRef = injectNgtRef();
31
+ this.options = input(defaultOptions, { transform: mergeInputs(defaultOptions) });
53
32
  this.injector = inject(Injector);
33
+ this.autoEffect = injectAutoEffect();
54
34
  this.store = injectNgtStore();
35
+ this.size = this.store.select('size');
55
36
  this.gl = this.store.select('gl');
56
37
  this.defaultScene = this.store.select('scene');
57
38
  this.defaultCamera = this.store.select('camera');
58
- this.size = this.store.select('size');
59
- this.depthBuffer = this.inputs.select('depthBuffer');
60
- this.stencilBuffer = this.inputs.select('stencilBuffer');
61
- this.multisampling = this.inputs.select('multisampling');
62
- this.frameBufferType = this.inputs.select('frameBufferType');
63
- this.scene = this.inputs.select('scene');
64
- this.camera = this.inputs.select('camera');
65
- this.disableNormalPass = this.inputs.select('disableNormalPass');
66
- this.resolutionScale = this.inputs.select('resolutionScale');
67
- this.autoClear = this.inputs.select('autoClear');
68
- this.activeScene = computed(() => this.scene() || this.defaultScene());
69
- this.activeCamera = computed(() => this.camera() || this.defaultCamera());
70
- this.composerEntities = computed(() => {
39
+ this.depthBuffer = pick(this.options, 'depthBuffer');
40
+ this.stencilBuffer = pick(this.options, 'stencilBuffer');
41
+ this.multisampling = pick(this.options, 'multisampling');
42
+ this.frameBufferType = pick(this.options, 'frameBufferType');
43
+ this.scene = computed(() => this.options().scene ?? this.defaultScene());
44
+ this.camera = computed(() => this.options().camera ?? this.defaultCamera());
45
+ this.enableNormalPass = pick(this.options, 'enableNormalPass');
46
+ this.resolutionScale = pick(this.options, 'resolutionScale');
47
+ this.group = viewChild.required('group');
48
+ this.groupAnchor = viewChild.required('group', { read: ViewContainerRef });
49
+ this.content = contentChild.required(NgtpEffects, { read: TemplateRef });
50
+ this.composerData = computed(() => {
71
51
  const webGL2Available = isWebGL2Available();
72
- const [gl, depthBuffer, stencilBuffer, multisampling, frameBufferType, scene, camera, disableNormalPass, resolutionScale,] = [
52
+ const [gl, scene, camera, depthBuffer, stencilBuffer, multisampling, frameBufferType, enableNormalPass, resolutionScale,] = [
73
53
  this.gl(),
54
+ this.scene(),
55
+ this.camera(),
74
56
  this.depthBuffer(),
75
57
  this.stencilBuffer(),
76
58
  this.multisampling(),
77
59
  this.frameBufferType(),
78
- this.activeScene(),
79
- this.activeCamera(),
80
- this.disableNormalPass(),
60
+ this.enableNormalPass(),
81
61
  this.resolutionScale(),
82
62
  ];
83
- // Initialize composer
84
- const effectComposer = new EffectComposer(gl, {
63
+ // initialize composer
64
+ const composer = new EffectComposer(gl, {
85
65
  depthBuffer,
86
66
  stencilBuffer,
87
67
  multisampling: multisampling > 0 && webGL2Available ? multisampling : 0,
88
68
  frameBufferType,
89
69
  });
90
- // Add render pass
91
- effectComposer.addPass(new RenderPass(scene, camera));
92
- // Create normal pass
70
+ // add render pass
71
+ composer.addPass(new RenderPass(scene, camera));
72
+ // create normal pass
93
73
  let downSamplingPass = null;
94
74
  let normalPass = null;
95
- if (!disableNormalPass) {
75
+ if (enableNormalPass) {
96
76
  normalPass = new NormalPass(scene, camera);
97
77
  normalPass.enabled = false;
98
- effectComposer.addPass(normalPass);
78
+ composer.addPass(normalPass);
99
79
  if (resolutionScale !== undefined && webGL2Available) {
100
80
  downSamplingPass = new DepthDownsamplingPass({ normalBuffer: normalPass.texture, resolutionScale });
101
81
  downSamplingPass.enabled = false;
102
- effectComposer.addPass(downSamplingPass);
82
+ composer.addPass(downSamplingPass);
103
83
  }
104
84
  }
105
- return { effectComposer, normalPass, downSamplingPass };
85
+ return { composer, normalPass, downSamplingPass };
106
86
  });
107
- this.composer = computed(() => this.composerEntities().effectComposer);
108
87
  this.api = computed(() => {
109
- const [{ effectComposer: composer, normalPass, downSamplingPass }, resolutionScale, camera, scene] = [
110
- this.composerEntities(),
88
+ const [{ composer, normalPass, downSamplingPass }, camera, scene, resolutionScale] = [
89
+ this.composerData(),
90
+ this.camera(),
91
+ this.scene(),
111
92
  this.resolutionScale(),
112
- this.activeCamera(),
113
- this.activeScene(),
114
93
  ];
115
- return { composer, normalPass, downSamplingPass, resolutionScale, camera, scene };
94
+ return { composer, camera, scene, normalPass, downSamplingPass, resolutionScale };
95
+ });
96
+ afterNextRender(() => {
97
+ this.disableToneMapping();
98
+ this.setComposerSize();
99
+ this.render();
100
+ this.updatePasses();
101
+ injectBeforeRender(({ delta }) => {
102
+ const [{ composer }, { enabled, autoClear, stencilBuffer }, gl] = [
103
+ this.composerData(),
104
+ this.options(),
105
+ this.gl(),
106
+ ];
107
+ if (enabled) {
108
+ const currentAutoClear = gl.autoClear;
109
+ gl.autoClear = autoClear;
110
+ if (stencilBuffer && !autoClear)
111
+ gl.clearStencil();
112
+ composer.render(delta);
113
+ gl.autoClear = currentAutoClear;
114
+ }
115
+ }, { injector: this.injector, priority: this.options().enabled ? this.options().renderPriority : 0 });
116
116
  });
117
- this.setComposerSize();
118
- this.updatePasses();
119
117
  }
120
- ngOnInit() {
121
- this.beforeRender();
118
+ // NOTE: Disable tone mapping because threejs disallows tonemapping on render targets
119
+ disableToneMapping() {
120
+ this.autoEffect(() => {
121
+ const gl = this.gl();
122
+ const currentTonemapping = gl.toneMapping;
123
+ gl.toneMapping = NoToneMapping;
124
+ return () => {
125
+ gl.toneMapping = currentTonemapping;
126
+ };
127
+ });
122
128
  }
123
129
  setComposerSize() {
124
- effect(() => {
125
- const [composer, size] = [this.composer(), this.size()];
126
- composer.setSize(size.width, size.height);
130
+ this.autoEffect(() => {
131
+ const [{ composer }, { width, height }] = [this.composerData(), this.size()];
132
+ if (composer) {
133
+ composer.setSize(width, height);
134
+ }
127
135
  });
128
136
  }
137
+ render() {
138
+ this.autoEffect((injector) => {
139
+ const ref = this.groupAnchor().createEmbeddedView(this.content(), {}, { injector });
140
+ ref.detectChanges();
141
+ return () => ref.destroy();
142
+ }, { allowSignalWrites: true });
143
+ }
129
144
  updatePasses() {
130
- effect((onCleanup) => {
131
- const [{ effectComposer: composer, normalPass, downSamplingPass }, instance, children, camera] = [
132
- this.composerEntities(),
133
- this.composerRef.nativeElement,
134
- this.composerRef.children('nonObjects')(),
135
- this.activeCamera(),
145
+ this.autoEffect(() => {
146
+ const [group, { composer, normalPass, downSamplingPass }, camera] = [
147
+ this.group(),
148
+ this.composerData(),
149
+ this.camera(),
136
150
  ];
137
151
  const passes = [];
138
- if (instance && composer && children.length) {
152
+ if (group.nativeElement && composer) {
153
+ const localState = getLocalState(group.nativeElement);
154
+ if (!localState)
155
+ return;
156
+ const children = localState.nonObjects();
139
157
  for (let i = 0; i < children.length; i++) {
140
158
  const child = children[i];
141
159
  if (child instanceof Effect) {
142
- const effects = [];
143
- while (children[i] instanceof Effect)
144
- effects.push(children[i++]);
145
- i--;
160
+ const effects = [child];
161
+ if (!isConvolution(child)) {
162
+ let next = null;
163
+ while ((next = children[i + 1]) instanceof Effect) {
164
+ if (isConvolution(next))
165
+ break;
166
+ effects.push(next);
167
+ i++;
168
+ }
169
+ }
146
170
  const pass = new EffectPass(camera, ...effects);
147
171
  passes.push(pass);
148
172
  }
@@ -150,99 +174,40 @@ export class NgtpEffectComposer {
150
174
  passes.push(child);
151
175
  }
152
176
  }
153
- for (const pass of passes)
177
+ for (const pass of passes) {
154
178
  composer.addPass(pass);
179
+ }
155
180
  if (normalPass)
156
181
  normalPass.enabled = true;
157
182
  if (downSamplingPass)
158
183
  downSamplingPass.enabled = true;
159
184
  }
160
- onCleanup(() => {
185
+ return () => {
161
186
  for (const pass of passes)
162
187
  composer?.removePass(pass);
163
188
  if (normalPass)
164
189
  normalPass.enabled = false;
165
190
  if (downSamplingPass)
166
191
  downSamplingPass.enabled = false;
167
- });
168
- });
169
- }
170
- beforeRender() {
171
- injectBeforeRender(({ delta }) => {
172
- const [enabled, gl, autoClear, stencilBuffer, composer] = [
173
- this.inputs.get('enabled'),
174
- this.gl(),
175
- this.autoClear(),
176
- this.stencilBuffer(),
177
- this.composer(),
178
- ];
179
- if (enabled) {
180
- const currentAutoClear = gl.autoClear;
181
- gl.autoClear = autoClear;
182
- if (stencilBuffer && !autoClear)
183
- gl.clearStencil();
184
- composer.render(delta);
185
- gl.autoClear = currentAutoClear;
186
- }
187
- }, {
188
- injector: this.injector,
189
- priority: this.inputs.get('enabled') ? this.inputs.get('renderPriority') : 0,
192
+ };
190
193
  });
191
194
  }
192
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpEffectComposer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
193
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.2", type: NgtpEffectComposer, isStandalone: true, selector: "ngtp-effect-composer", inputs: { composerRef: "composerRef", _enabled: ["enabled", "_enabled"], _depthBuffer: ["depthBuffer", "_depthBuffer"], _disableNormalPass: ["disableNormalPass", "_disableNormalPass"], _stencilBuffer: ["stencilBuffer", "_stencilBuffer"], _autoClear: ["autoClear", "_autoClear"], _resolutionScale: ["resolutionScale", "_resolutionScale"], _multisampling: ["multisampling", "_multisampling"], _frameBufferType: ["frameBufferType", "_frameBufferType"], _renderPriority: ["renderPriority", "_renderPriority"], _camera: ["camera", "_camera"], _scene: ["scene", "_scene"] }, providers: [provideNgtpEffectComposerApi()], ngImport: i0, template: `
194
- <ngt-group [ref]="composerRef">
195
- <ng-content />
196
- </ngt-group>
197
- `, isInline: true }); }
195
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffectComposer, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
196
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.2.0", version: "18.0.3", type: NgtpEffectComposer, isStandalone: true, selector: "ngtp-effect-composer", inputs: { options: { classPropertyName: "options", publicName: "options", isSignal: true, isRequired: false, transformFunction: null } }, providers: [provideEffectComposerApi()], queries: [{ propertyName: "content", first: true, predicate: NgtpEffects, descendants: true, read: TemplateRef, isSignal: true }], viewQueries: [{ propertyName: "group", first: true, predicate: ["group"], descendants: true, isSignal: true }, { propertyName: "groupAnchor", first: true, predicate: ["group"], descendants: true, read: ViewContainerRef, isSignal: true }], ngImport: i0, template: `
197
+ <ngt-group #group ngtCompound></ngt-group>
198
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
198
199
  }
199
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpEffectComposer, decorators: [{
200
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffectComposer, decorators: [{
200
201
  type: Component,
201
202
  args: [{
202
203
  selector: 'ngtp-effect-composer',
203
204
  standalone: true,
204
205
  template: `
205
- <ngt-group [ref]="composerRef">
206
- <ng-content />
207
- </ngt-group>
206
+ <ngt-group #group ngtCompound></ngt-group>
208
207
  `,
209
- providers: [provideNgtpEffectComposerApi()],
208
+ providers: [provideEffectComposerApi()],
210
209
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
210
+ changeDetection: ChangeDetectionStrategy.OnPush,
211
211
  }]
212
- }], ctorParameters: function () { return []; }, propDecorators: { composerRef: [{
213
- type: Input
214
- }], _enabled: [{
215
- type: Input,
216
- args: [{ alias: 'enabled' }]
217
- }], _depthBuffer: [{
218
- type: Input,
219
- args: [{ alias: 'depthBuffer' }]
220
- }], _disableNormalPass: [{
221
- type: Input,
222
- args: [{ alias: 'disableNormalPass' }]
223
- }], _stencilBuffer: [{
224
- type: Input,
225
- args: [{ alias: 'stencilBuffer' }]
226
- }], _autoClear: [{
227
- type: Input,
228
- args: [{ alias: 'autoClear' }]
229
- }], _resolutionScale: [{
230
- type: Input,
231
- args: [{ alias: 'resolutionScale' }]
232
- }], _multisampling: [{
233
- type: Input,
234
- args: [{ alias: 'multisampling' }]
235
- }], _frameBufferType: [{
236
- type: Input,
237
- args: [{ alias: 'frameBufferType' }]
238
- }], _renderPriority: [{
239
- type: Input,
240
- args: [{ alias: 'renderPriority' }]
241
- }], _camera: [{
242
- type: Input,
243
- args: [{ alias: 'camera' }]
244
- }], _scene: [{
245
- type: Input,
246
- args: [{ alias: 'scene' }]
247
- }] } });
248
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdC1jb21wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLFNBQVMsRUFDVCxRQUFRLEVBQ1IsS0FBSyxFQUNMLFFBQVEsRUFDUixNQUFNLEVBQ04sVUFBVSxFQUNWLE1BQU0sR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQ04sb0JBQW9CLEVBQ3BCLE1BQU0sRUFDTixrQkFBa0IsRUFDbEIsWUFBWSxFQUNaLGNBQWMsRUFDZCxXQUFXLEdBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUNOLHFCQUFxQixFQUNyQixNQUFNLEVBQ04sY0FBYyxFQUNkLFVBQVUsRUFDVixVQUFVLEVBQ1YsSUFBSSxFQUNKLFVBQVUsR0FDVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDO0FBQy9CLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFDOUIsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUVqRCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBZ0JsQixNQUFNLENBQUMsTUFBTSxDQUFDLDJCQUEyQixFQUFFLDRCQUE0QixDQUFDLEdBQUcsb0JBQW9CLENBQzlGLENBQUMsUUFBNEIsRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsRUFDOUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLEVBQUUsQ0FDL0QsQ0FBQztBQWFGLE1BQU0sT0FBTyxrQkFBa0I7SUFXOUIsSUFBaUMsUUFBUSxDQUFDLE9BQWdCO1FBQ3pELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztJQUM5QixDQUFDO0lBRUQsSUFBcUMsWUFBWSxDQUFDLFdBQW9CO1FBQ3JFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsSUFBMkMsa0JBQWtCLENBQUMsaUJBQTBCO1FBQ3ZGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLENBQUM7SUFFRCxJQUF1QyxjQUFjLENBQUMsYUFBc0I7UUFDM0UsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxhQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxJQUFtQyxVQUFVLENBQUMsU0FBa0I7UUFDL0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRCxJQUF5QyxnQkFBZ0IsQ0FBQyxlQUF1QjtRQUNoRixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGVBQWUsRUFBRSxDQUFDLENBQUM7SUFDdEMsQ0FBQztJQUVELElBQXVDLGNBQWMsQ0FBQyxhQUFxQjtRQUMxRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLGFBQWEsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELElBQXlDLGdCQUFnQixDQUFDLGVBQXNDO1FBQy9GLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsZUFBZSxFQUFFLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBd0MsZUFBZSxDQUFDLGNBQXNCO1FBQzdFLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsSUFBZ0MsT0FBTyxDQUFDLE1BQW9CO1FBQzNELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBK0IsTUFBTSxDQUFDLEtBQWtCO1FBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBdUZEO1FBM0lRLFdBQU0sR0FBRyxXQUFXLENBQTBCO1lBQ3JELE9BQU8sRUFBRSxJQUFJO1lBQ2IsY0FBYyxFQUFFLENBQUM7WUFDakIsU0FBUyxFQUFFLElBQUk7WUFDZixhQUFhLEVBQUUsQ0FBQztZQUNoQixlQUFlLEVBQUUsS0FBSyxDQUFDLGFBQWE7U0FDcEMsQ0FBQyxDQUFDO1FBRU0sZ0JBQVcsR0FBRyxZQUFZLEVBQVMsQ0FBQztRQThDckMsYUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QixVQUFLLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDekIsT0FBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQzdCLGlCQUFZLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUM1QyxTQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFakMsZ0JBQVcsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNoRCxrQkFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BELGtCQUFhLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDcEQsb0JBQWUsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ3hELFVBQUssR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNwQyxXQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDdEMsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUM1RCxvQkFBZSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDeEQsY0FBUyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVDLGdCQUFXLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUNsRSxpQkFBWSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7UUFFckUscUJBQWdCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUN4QyxNQUFNLGVBQWUsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1lBQzVDLE1BQU0sQ0FDTCxFQUFFLEVBQ0YsV0FBVyxFQUNYLGFBQWEsRUFDYixhQUFhLEVBQ2IsZUFBZSxFQUNmLEtBQUssRUFDTCxNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLGVBQWUsRUFDZixHQUFHO2dCQUNILElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDcEIsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLGlCQUFpQixFQUFFO2dCQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFO2FBQ3RCLENBQUM7WUFFRixzQkFBc0I7WUFDdEIsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLENBQUMsRUFBRSxFQUFFO2dCQUM3QyxXQUFXO2dCQUNYLGFBQWE7Z0JBQ2IsYUFBYSxFQUFFLGFBQWEsR0FBRyxDQUFDLElBQUksZUFBZSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZFLGVBQWU7YUFDZixDQUFDLENBQUM7WUFFSCxrQkFBa0I7WUFDbEIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFVBQVUsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztZQUV0RCxxQkFBcUI7WUFDckIsSUFBSSxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7WUFDNUIsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1lBQ3RCLElBQUksQ0FBQyxpQkFBaUIsRUFBRTtnQkFDdkIsVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQztnQkFDM0MsVUFBVSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7Z0JBQzNCLGNBQWMsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ25DLElBQUksZUFBZSxLQUFLLFNBQVMsSUFBSSxlQUFlLEVBQUU7b0JBQ3JELGdCQUFnQixHQUFHLElBQUkscUJBQXFCLENBQUMsRUFBRSxZQUFZLEVBQUUsVUFBVSxDQUFDLE9BQU8sRUFBRSxlQUFlLEVBQUUsQ0FBQyxDQUFDO29CQUNwRyxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO29CQUNqQyxjQUFjLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7aUJBQ3pDO2FBQ0Q7WUFFRCxPQUFPLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pELENBQUMsQ0FBQyxDQUFDO1FBRUssYUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUUxRSxRQUFHLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUNuQixNQUFNLENBQUMsRUFBRSxjQUFjLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLGVBQWUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUc7Z0JBQ3BHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLGVBQWUsRUFBRTtnQkFDdEIsSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFdBQVcsRUFBRTthQUNsQixDQUFDO1lBQ0YsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNuRixDQUFDLENBQUMsQ0FBQztRQUdGLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztRQUN2QixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVELFFBQVE7UUFDUCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDckIsQ0FBQztJQUVPLGVBQWU7UUFDdEIsTUFBTSxDQUFDLEdBQUcsRUFBRTtZQUNYLE1BQU0sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7WUFDeEQsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxDQUFDLENBQUMsQ0FBQztJQUNKLENBQUM7SUFFTyxZQUFZO1FBQ25CLE1BQU0sQ0FBQyxDQUFDLFNBQVMsRUFBRSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxNQUFNLENBQUMsR0FBRztnQkFDaEcsSUFBSSxDQUFDLGdCQUFnQixFQUFFO2dCQUN2QixJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWE7Z0JBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsWUFBWSxFQUFFO2FBQ25CLENBQUM7WUFFRixNQUFNLE1BQU0sR0FBVyxFQUFFLENBQUM7WUFFMUIsSUFBSSxRQUFRLElBQUksUUFBUSxJQUFJLFFBQVEsQ0FBQyxNQUFNLEVBQUU7Z0JBQzVDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUN6QyxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzFCLElBQUksS0FBSyxZQUFZLE1BQU0sRUFBRTt3QkFDNUIsTUFBTSxPQUFPLEdBQWEsRUFBRSxDQUFDO3dCQUU3QixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWSxNQUFNOzRCQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFXLENBQUMsQ0FBQzt3QkFDNUUsQ0FBQyxFQUFFLENBQUM7d0JBRUosTUFBTSxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDLENBQUM7d0JBQ2hELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7cUJBQ2xCO3lCQUFNLElBQUksS0FBSyxZQUFZLElBQUksRUFBRTt3QkFDakMsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztxQkFDbkI7aUJBQ0Q7Z0JBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNO29CQUFFLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ2xELElBQUksVUFBVTtvQkFBRSxVQUFVLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQztnQkFDMUMsSUFBSSxnQkFBZ0I7b0JBQUUsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUN0RDtZQUVELFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2QsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNO29CQUFFLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RELElBQUksVUFBVTtvQkFBRSxVQUFVLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztnQkFDM0MsSUFBSSxnQkFBZ0I7b0JBQUUsZ0JBQWdCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUN4RCxDQUFDLENBQUMsQ0FBQztRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQztJQUVPLFlBQVk7UUFDbkIsa0JBQWtCLENBQ2pCLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFO1lBQ2IsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUMsR0FBRztnQkFDekQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO2dCQUMxQixJQUFJLENBQUMsRUFBRSxFQUFFO2dCQUNULElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxhQUFhLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxRQUFRLEVBQUU7YUFDZixDQUFDO1lBQ0YsSUFBSSxPQUFPLEVBQUU7Z0JBQ1osTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsU0FBUyxDQUFDO2dCQUN0QyxFQUFFLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztnQkFDekIsSUFBSSxhQUFhLElBQUksQ0FBQyxTQUFTO29CQUFFLEVBQUUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztnQkFDbkQsUUFBUSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdkIsRUFBRSxDQUFDLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQzthQUNoQztRQUNGLENBQUMsRUFDRDtZQUNDLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixRQUFRLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDNUUsQ0FDRCxDQUFDO0lBQ0gsQ0FBQzs4R0EzTlcsa0JBQWtCO2tHQUFsQixrQkFBa0IsNG5CQUhuQixDQUFDLDRCQUE0QixFQUFFLENBQUMsMEJBTGpDOzs7O0VBSVQ7OzJGQUlXLGtCQUFrQjtrQkFYOUIsU0FBUzttQkFBQztvQkFDVixRQUFRLEVBQUUsc0JBQXNCO29CQUNoQyxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsUUFBUSxFQUFFOzs7O0VBSVQ7b0JBQ0QsU0FBUyxFQUFFLENBQUMsNEJBQTRCLEVBQUUsQ0FBQztvQkFDM0MsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ2pDOzBFQVVTLFdBQVc7c0JBQW5CLEtBQUs7Z0JBRTJCLFFBQVE7c0JBQXhDLEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFO2dCQUlVLFlBQVk7c0JBQWhELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsYUFBYSxFQUFFO2dCQUlZLGtCQUFrQjtzQkFBNUQsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxtQkFBbUIsRUFBRTtnQkFJRSxjQUFjO3NCQUFwRCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGVBQWUsRUFBRTtnQkFJRSxVQUFVO3NCQUE1QyxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRTtnQkFJWSxnQkFBZ0I7c0JBQXhELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUU7Z0JBSUksY0FBYztzQkFBcEQsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxlQUFlLEVBQUU7Z0JBSVEsZ0JBQWdCO3NCQUF4RCxLQUFLO3VCQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFO2dCQUlLLGVBQWU7c0JBQXRELEtBQUs7dUJBQUMsRUFBRSxLQUFLLEVBQUUsZ0JBQWdCLEVBQUU7Z0JBSUYsT0FBTztzQkFBdEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBSUssTUFBTTtzQkFBcEMsS0FBSzt1QkFBQyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRDVVNUT01fRUxFTUVOVFNfU0NIRU1BLFxuXHRDb21wb25lbnQsXG5cdEluamVjdG9yLFxuXHRJbnB1dCxcblx0Y29tcHV0ZWQsXG5cdGVmZmVjdCxcblx0Zm9yd2FyZFJlZixcblx0aW5qZWN0LFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG5cdGNyZWF0ZUluamVjdGlvblRva2VuLFxuXHRleHRlbmQsXG5cdGluamVjdEJlZm9yZVJlbmRlcixcblx0aW5qZWN0Tmd0UmVmLFxuXHRpbmplY3ROZ3RTdG9yZSxcblx0c2lnbmFsU3RvcmUsXG59IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHtcblx0RGVwdGhEb3duc2FtcGxpbmdQYXNzLFxuXHRFZmZlY3QsXG5cdEVmZmVjdENvbXBvc2VyLFxuXHRFZmZlY3RQYXNzLFxuXHROb3JtYWxQYXNzLFxuXHRQYXNzLFxuXHRSZW5kZXJQYXNzLFxufSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBHcm91cCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IGlzV2ViR0wyQXZhaWxhYmxlIH0gZnJvbSAndGhyZWUtc3RkbGliJztcblxuZXh0ZW5kKHsgR3JvdXAgfSk7XG5cbmV4cG9ydCB0eXBlIE5ndHBFZmZlY3RDb21wb3NlclN0YXRlID0ge1xuXHRlbmFibGVkOiBib29sZWFuO1xuXHRkZXB0aEJ1ZmZlcj86IGJvb2xlYW47XG5cdGRpc2FibGVOb3JtYWxQYXNzPzogYm9vbGVhbjtcblx0c3RlbmNpbEJ1ZmZlcj86IGJvb2xlYW47XG5cdGF1dG9DbGVhcjogYm9vbGVhbjtcblx0cmVzb2x1dGlvblNjYWxlPzogbnVtYmVyO1xuXHRtdWx0aXNhbXBsaW5nOiBudW1iZXI7XG5cdGZyYW1lQnVmZmVyVHlwZTogVEhSRUUuVGV4dHVyZURhdGFUeXBlO1xuXHRyZW5kZXJQcmlvcml0eTogbnVtYmVyO1xuXHRjYW1lcmE/OiBUSFJFRS5DYW1lcmE7XG5cdHNjZW5lPzogVEhSRUUuU2NlbmU7XG59O1xuXG5leHBvcnQgY29uc3QgW2luamVjdE5ndHBFZmZlY3RDb21wb3NlckFwaSwgcHJvdmlkZU5ndHBFZmZlY3RDb21wb3NlckFwaV0gPSBjcmVhdGVJbmplY3Rpb25Ub2tlbihcblx0KGNvbXBvc2VyOiBOZ3RwRWZmZWN0Q29tcG9zZXIpID0+IGNvbXBvc2VyLmFwaSxcblx0eyBpc1Jvb3Q6IGZhbHNlLCBkZXBzOiBbZm9yd2FyZFJlZigoKSA9PiBOZ3RwRWZmZWN0Q29tcG9zZXIpXSB9LFxuKTtcblxuQENvbXBvbmVudCh7XG5cdHNlbGVjdG9yOiAnbmd0cC1lZmZlY3QtY29tcG9zZXInLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdDxuZ3QtZ3JvdXAgW3JlZl09XCJjb21wb3NlclJlZlwiPlxuXHRcdFx0PG5nLWNvbnRlbnQgLz5cblx0XHQ8L25ndC1ncm91cD5cblx0YCxcblx0cHJvdmlkZXJzOiBbcHJvdmlkZU5ndHBFZmZlY3RDb21wb3NlckFwaSgpXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RwRWZmZWN0Q29tcG9zZXIge1xuXHRwcml2YXRlIGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHBFZmZlY3RDb21wb3NlclN0YXRlPih7XG5cdFx0ZW5hYmxlZDogdHJ1ZSxcblx0XHRyZW5kZXJQcmlvcml0eTogMSxcblx0XHRhdXRvQ2xlYXI6IHRydWUsXG5cdFx0bXVsdGlzYW1wbGluZzogOCxcblx0XHRmcmFtZUJ1ZmZlclR5cGU6IFRIUkVFLkhhbGZGbG9hdFR5cGUsXG5cdH0pO1xuXG5cdEBJbnB1dCgpIGNvbXBvc2VyUmVmID0gaW5qZWN0Tmd0UmVmPEdyb3VwPigpO1xuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZW5hYmxlZCcgfSkgc2V0IF9lbmFibGVkKGVuYWJsZWQ6IGJvb2xlYW4pIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBlbmFibGVkIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdkZXB0aEJ1ZmZlcicgfSkgc2V0IF9kZXB0aEJ1ZmZlcihkZXB0aEJ1ZmZlcjogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGRlcHRoQnVmZmVyIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdkaXNhYmxlTm9ybWFsUGFzcycgfSkgc2V0IF9kaXNhYmxlTm9ybWFsUGFzcyhkaXNhYmxlTm9ybWFsUGFzczogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGRpc2FibGVOb3JtYWxQYXNzIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdzdGVuY2lsQnVmZmVyJyB9KSBzZXQgX3N0ZW5jaWxCdWZmZXIoc3RlbmNpbEJ1ZmZlcjogYm9vbGVhbikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHN0ZW5jaWxCdWZmZXIgfSk7XG5cdH1cblxuXHRASW5wdXQoeyBhbGlhczogJ2F1dG9DbGVhcicgfSkgc2V0IF9hdXRvQ2xlYXIoYXV0b0NsZWFyOiBib29sZWFuKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYXV0b0NsZWFyIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdyZXNvbHV0aW9uU2NhbGUnIH0pIHNldCBfcmVzb2x1dGlvblNjYWxlKHJlc29sdXRpb25TY2FsZTogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgcmVzb2x1dGlvblNjYWxlIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdtdWx0aXNhbXBsaW5nJyB9KSBzZXQgX211bHRpc2FtcGxpbmcobXVsdGlzYW1wbGluZzogbnVtYmVyKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgbXVsdGlzYW1wbGluZyB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnZnJhbWVCdWZmZXJUeXBlJyB9KSBzZXQgX2ZyYW1lQnVmZmVyVHlwZShmcmFtZUJ1ZmZlclR5cGU6IFRIUkVFLlRleHR1cmVEYXRhVHlwZSkge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IGZyYW1lQnVmZmVyVHlwZSB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAncmVuZGVyUHJpb3JpdHknIH0pIHNldCBfcmVuZGVyUHJpb3JpdHkocmVuZGVyUHJpb3JpdHk6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IHJlbmRlclByaW9yaXR5IH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdjYW1lcmEnIH0pIHNldCBfY2FtZXJhKGNhbWVyYTogVEhSRUUuQ2FtZXJhKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgY2FtZXJhIH0pO1xuXHR9XG5cblx0QElucHV0KHsgYWxpYXM6ICdzY2VuZScgfSkgc2V0IF9zY2VuZShzY2VuZTogVEhSRUUuU2NlbmUpIHtcblx0XHR0aGlzLmlucHV0cy5zZXQoeyBzY2VuZSB9KTtcblx0fVxuXG5cdHByaXZhdGUgaW5qZWN0b3IgPSBpbmplY3QoSW5qZWN0b3IpO1xuXG5cdHByaXZhdGUgc3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRwcml2YXRlIGdsID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2dsJyk7XG5cdHByaXZhdGUgZGVmYXVsdFNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdHByaXZhdGUgZGVmYXVsdENhbWVyYSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblx0cHJpdmF0ZSBzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblxuXHRwcml2YXRlIGRlcHRoQnVmZmVyID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdkZXB0aEJ1ZmZlcicpO1xuXHRwcml2YXRlIHN0ZW5jaWxCdWZmZXIgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ3N0ZW5jaWxCdWZmZXInKTtcblx0cHJpdmF0ZSBtdWx0aXNhbXBsaW5nID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdtdWx0aXNhbXBsaW5nJyk7XG5cdHByaXZhdGUgZnJhbWVCdWZmZXJUeXBlID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdmcmFtZUJ1ZmZlclR5cGUnKTtcblx0cHJpdmF0ZSBzY2VuZSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnc2NlbmUnKTtcblx0cHJpdmF0ZSBjYW1lcmEgPSB0aGlzLmlucHV0cy5zZWxlY3QoJ2NhbWVyYScpO1xuXHRwcml2YXRlIGRpc2FibGVOb3JtYWxQYXNzID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdkaXNhYmxlTm9ybWFsUGFzcycpO1xuXHRwcml2YXRlIHJlc29sdXRpb25TY2FsZSA9IHRoaXMuaW5wdXRzLnNlbGVjdCgncmVzb2x1dGlvblNjYWxlJyk7XG5cdHByaXZhdGUgYXV0b0NsZWFyID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdhdXRvQ2xlYXInKTtcblxuXHRwcml2YXRlIGFjdGl2ZVNjZW5lID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zY2VuZSgpIHx8IHRoaXMuZGVmYXVsdFNjZW5lKCkpO1xuXHRwcml2YXRlIGFjdGl2ZUNhbWVyYSA9IGNvbXB1dGVkKCgpID0+IHRoaXMuY2FtZXJhKCkgfHwgdGhpcy5kZWZhdWx0Q2FtZXJhKCkpO1xuXG5cdHByaXZhdGUgY29tcG9zZXJFbnRpdGllcyA9IGNvbXB1dGVkKCgpID0+IHtcblx0XHRjb25zdCB3ZWJHTDJBdmFpbGFibGUgPSBpc1dlYkdMMkF2YWlsYWJsZSgpO1xuXHRcdGNvbnN0IFtcblx0XHRcdGdsLFxuXHRcdFx0ZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsQnVmZmVyLFxuXHRcdFx0bXVsdGlzYW1wbGluZyxcblx0XHRcdGZyYW1lQnVmZmVyVHlwZSxcblx0XHRcdHNjZW5lLFxuXHRcdFx0Y2FtZXJhLFxuXHRcdFx0ZGlzYWJsZU5vcm1hbFBhc3MsXG5cdFx0XHRyZXNvbHV0aW9uU2NhbGUsXG5cdFx0XSA9IFtcblx0XHRcdHRoaXMuZ2woKSxcblx0XHRcdHRoaXMuZGVwdGhCdWZmZXIoKSxcblx0XHRcdHRoaXMuc3RlbmNpbEJ1ZmZlcigpLFxuXHRcdFx0dGhpcy5tdWx0aXNhbXBsaW5nKCksXG5cdFx0XHR0aGlzLmZyYW1lQnVmZmVyVHlwZSgpLFxuXHRcdFx0dGhpcy5hY3RpdmVTY2VuZSgpLFxuXHRcdFx0dGhpcy5hY3RpdmVDYW1lcmEoKSxcblx0XHRcdHRoaXMuZGlzYWJsZU5vcm1hbFBhc3MoKSxcblx0XHRcdHRoaXMucmVzb2x1dGlvblNjYWxlKCksXG5cdFx0XTtcblxuXHRcdC8vIEluaXRpYWxpemUgY29tcG9zZXJcblx0XHRjb25zdCBlZmZlY3RDb21wb3NlciA9IG5ldyBFZmZlY3RDb21wb3NlcihnbCwge1xuXHRcdFx0ZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsQnVmZmVyLFxuXHRcdFx0bXVsdGlzYW1wbGluZzogbXVsdGlzYW1wbGluZyA+IDAgJiYgd2ViR0wyQXZhaWxhYmxlID8gbXVsdGlzYW1wbGluZyA6IDAsXG5cdFx0XHRmcmFtZUJ1ZmZlclR5cGUsXG5cdFx0fSk7XG5cblx0XHQvLyBBZGQgcmVuZGVyIHBhc3Ncblx0XHRlZmZlY3RDb21wb3Nlci5hZGRQYXNzKG5ldyBSZW5kZXJQYXNzKHNjZW5lLCBjYW1lcmEpKTtcblxuXHRcdC8vIENyZWF0ZSBub3JtYWwgcGFzc1xuXHRcdGxldCBkb3duU2FtcGxpbmdQYXNzID0gbnVsbDtcblx0XHRsZXQgbm9ybWFsUGFzcyA9IG51bGw7XG5cdFx0aWYgKCFkaXNhYmxlTm9ybWFsUGFzcykge1xuXHRcdFx0bm9ybWFsUGFzcyA9IG5ldyBOb3JtYWxQYXNzKHNjZW5lLCBjYW1lcmEpO1xuXHRcdFx0bm9ybWFsUGFzcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHRlZmZlY3RDb21wb3Nlci5hZGRQYXNzKG5vcm1hbFBhc3MpO1xuXHRcdFx0aWYgKHJlc29sdXRpb25TY2FsZSAhPT0gdW5kZWZpbmVkICYmIHdlYkdMMkF2YWlsYWJsZSkge1xuXHRcdFx0XHRkb3duU2FtcGxpbmdQYXNzID0gbmV3IERlcHRoRG93bnNhbXBsaW5nUGFzcyh7IG5vcm1hbEJ1ZmZlcjogbm9ybWFsUGFzcy50ZXh0dXJlLCByZXNvbHV0aW9uU2NhbGUgfSk7XG5cdFx0XHRcdGRvd25TYW1wbGluZ1Bhc3MuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRlZmZlY3RDb21wb3Nlci5hZGRQYXNzKGRvd25TYW1wbGluZ1Bhc3MpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB7IGVmZmVjdENvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzIH07XG5cdH0pO1xuXG5cdHByaXZhdGUgY29tcG9zZXIgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNvbXBvc2VyRW50aXRpZXMoKS5lZmZlY3RDb21wb3Nlcik7XG5cblx0YXBpID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFt7IGVmZmVjdENvbXBvc2VyOiBjb21wb3Nlciwgbm9ybWFsUGFzcywgZG93blNhbXBsaW5nUGFzcyB9LCByZXNvbHV0aW9uU2NhbGUsIGNhbWVyYSwgc2NlbmVdID0gW1xuXHRcdFx0dGhpcy5jb21wb3NlckVudGl0aWVzKCksXG5cdFx0XHR0aGlzLnJlc29sdXRpb25TY2FsZSgpLFxuXHRcdFx0dGhpcy5hY3RpdmVDYW1lcmEoKSxcblx0XHRcdHRoaXMuYWN0aXZlU2NlbmUoKSxcblx0XHRdO1xuXHRcdHJldHVybiB7IGNvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzLCByZXNvbHV0aW9uU2NhbGUsIGNhbWVyYSwgc2NlbmUgfTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5zZXRDb21wb3NlclNpemUoKTtcblx0XHR0aGlzLnVwZGF0ZVBhc3NlcygpO1xuXHR9XG5cblx0bmdPbkluaXQoKSB7XG5cdFx0dGhpcy5iZWZvcmVSZW5kZXIoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0Q29tcG9zZXJTaXplKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbY29tcG9zZXIsIHNpemVdID0gW3RoaXMuY29tcG9zZXIoKSwgdGhpcy5zaXplKCldO1xuXHRcdFx0Y29tcG9zZXIuc2V0U2l6ZShzaXplLndpZHRoLCBzaXplLmhlaWdodCk7XG5cdFx0fSk7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZVBhc3NlcygpIHtcblx0XHRlZmZlY3QoKG9uQ2xlYW51cCkgPT4ge1xuXHRcdFx0Y29uc3QgW3sgZWZmZWN0Q29tcG9zZXI6IGNvbXBvc2VyLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzIH0sIGluc3RhbmNlLCBjaGlsZHJlbiwgY2FtZXJhXSA9IFtcblx0XHRcdFx0dGhpcy5jb21wb3NlckVudGl0aWVzKCksXG5cdFx0XHRcdHRoaXMuY29tcG9zZXJSZWYubmF0aXZlRWxlbWVudCxcblx0XHRcdFx0dGhpcy5jb21wb3NlclJlZi5jaGlsZHJlbignbm9uT2JqZWN0cycpKCksXG5cdFx0XHRcdHRoaXMuYWN0aXZlQ2FtZXJhKCksXG5cdFx0XHRdO1xuXG5cdFx0XHRjb25zdCBwYXNzZXM6IFBhc3NbXSA9IFtdO1xuXG5cdFx0XHRpZiAoaW5zdGFuY2UgJiYgY29tcG9zZXIgJiYgY2hpbGRyZW4ubGVuZ3RoKSB7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuXHRcdFx0XHRcdGlmIChjaGlsZCBpbnN0YW5jZW9mIEVmZmVjdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZWZmZWN0czogRWZmZWN0W10gPSBbXTtcblxuXHRcdFx0XHRcdFx0d2hpbGUgKGNoaWxkcmVuW2ldIGluc3RhbmNlb2YgRWZmZWN0KSBlZmZlY3RzLnB1c2goY2hpbGRyZW5baSsrXSBhcyBFZmZlY3QpO1xuXHRcdFx0XHRcdFx0aS0tO1xuXG5cdFx0XHRcdFx0XHRjb25zdCBwYXNzID0gbmV3IEVmZmVjdFBhc3MoY2FtZXJhLCAuLi5lZmZlY3RzKTtcblx0XHRcdFx0XHRcdHBhc3Nlcy5wdXNoKHBhc3MpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBQYXNzKSB7XG5cdFx0XHRcdFx0XHRwYXNzZXMucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXNzIG9mIHBhc3NlcykgY29tcG9zZXIuYWRkUGFzcyhwYXNzKTtcblx0XHRcdFx0aWYgKG5vcm1hbFBhc3MpIG5vcm1hbFBhc3MuZW5hYmxlZCA9IHRydWU7XG5cdFx0XHRcdGlmIChkb3duU2FtcGxpbmdQYXNzKSBkb3duU2FtcGxpbmdQYXNzLmVuYWJsZWQgPSB0cnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRmb3IgKGNvbnN0IHBhc3Mgb2YgcGFzc2VzKSBjb21wb3Nlcj8ucmVtb3ZlUGFzcyhwYXNzKTtcblx0XHRcdFx0aWYgKG5vcm1hbFBhc3MpIG5vcm1hbFBhc3MuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0XHRpZiAoZG93blNhbXBsaW5nUGFzcykgZG93blNhbXBsaW5nUGFzcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHR9KTtcblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgYmVmb3JlUmVuZGVyKCkge1xuXHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdCh7IGRlbHRhIH0pID0+IHtcblx0XHRcdFx0Y29uc3QgW2VuYWJsZWQsIGdsLCBhdXRvQ2xlYXIsIHN0ZW5jaWxCdWZmZXIsIGNvbXBvc2VyXSA9IFtcblx0XHRcdFx0XHR0aGlzLmlucHV0cy5nZXQoJ2VuYWJsZWQnKSxcblx0XHRcdFx0XHR0aGlzLmdsKCksXG5cdFx0XHRcdFx0dGhpcy5hdXRvQ2xlYXIoKSxcblx0XHRcdFx0XHR0aGlzLnN0ZW5jaWxCdWZmZXIoKSxcblx0XHRcdFx0XHR0aGlzLmNvbXBvc2VyKCksXG5cdFx0XHRcdF07XG5cdFx0XHRcdGlmIChlbmFibGVkKSB7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudEF1dG9DbGVhciA9IGdsLmF1dG9DbGVhcjtcblx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBhdXRvQ2xlYXI7XG5cdFx0XHRcdFx0aWYgKHN0ZW5jaWxCdWZmZXIgJiYgIWF1dG9DbGVhcikgZ2wuY2xlYXJTdGVuY2lsKCk7XG5cdFx0XHRcdFx0Y29tcG9zZXIucmVuZGVyKGRlbHRhKTtcblx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBjdXJyZW50QXV0b0NsZWFyO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRpbmplY3RvcjogdGhpcy5pbmplY3Rvcixcblx0XHRcdFx0cHJpb3JpdHk6IHRoaXMuaW5wdXRzLmdldCgnZW5hYmxlZCcpID8gdGhpcy5pbnB1dHMuZ2V0KCdyZW5kZXJQcmlvcml0eScpIDogMCxcblx0XHRcdH0sXG5cdFx0KTtcblx0fVxufVxuIl19
212
+ }], ctorParameters: () => [] });
213
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LWNvbXBvc2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdC1jb21wb3Nlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ04sc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixTQUFTLEVBQ1QsU0FBUyxFQUVULFFBQVEsRUFDUixXQUFXLEVBQ1gsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixRQUFRLEVBQ1IsWUFBWSxFQUNaLE1BQU0sRUFDTixLQUFLLEVBQ0wsU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRSxrQkFBa0IsRUFBRSxjQUFjLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUN2RCxPQUFPLEVBQ04scUJBQXFCLEVBQ3JCLE1BQU0sRUFDTixlQUFlLEVBQ2YsY0FBYyxFQUNkLFVBQVUsRUFDVixVQUFVLEVBQ1YsSUFBSSxFQUNKLFVBQVUsR0FDVixNQUFNLGdCQUFnQixDQUFDO0FBQ3hCLE9BQU8sRUFBVSxLQUFLLEVBQUUsYUFBYSxFQUFFLGFBQWEsRUFBMEIsTUFBTSxPQUFPLENBQUM7QUFDNUYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFDOztBQUVqRCxNQUFNLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBV2xCLE1BQU0sQ0FBQyxNQUFNLENBQUMsdUJBQXVCLEVBQUUsd0JBQXdCLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxFQUFFLENBQUMsa0JBQWtCLENBQUMsQ0FBQztBQWlCNUcsTUFBTSxjQUFjLEdBQThCO0lBQ2pELE9BQU8s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LGdCQUFnQjtvQkFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO1lBQ3ZELENBQUM7WUFFRCxPQUFPLEdBQUcsRUFBRTtnQkFDWCxLQUFLLE1BQU0sSUFBSSxJQUFJLE1BQU07b0JBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDdEQsSUFBSSxVQUFVO29CQUFFLFVBQVUsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO2dCQUMzQyxJQUFJLGdCQUFnQjtvQkFBRSxnQkFBZ0IsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ3hELENBQUMsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQzs4R0FyTVcsa0JBQWtCO2tHQUFsQixrQkFBa0IsNk1BSm5CLENBQUMsd0JBQXdCLEVBQUUsQ0FBQywrREEwQlAsV0FBVywyQkFBVSxXQUFXLCtOQURkLGdCQUFnQiw2Q0E1QnhEOztFQUVUOzsyRkFLVyxrQkFBa0I7a0JBVjlCLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHNCQUFzQjtvQkFDaEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7RUFFVDtvQkFDRCxTQUFTLEVBQUUsQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO29CQUN2QyxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcblx0Q1VTVE9NX0VMRU1FTlRTX1NDSEVNQSxcblx0Q2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG5cdENvbXBvbmVudCxcblx0RGlyZWN0aXZlLFxuXHRFbGVtZW50UmVmLFxuXHRJbmplY3Rvcixcblx0VGVtcGxhdGVSZWYsXG5cdFZpZXdDb250YWluZXJSZWYsXG5cdGFmdGVyTmV4dFJlbmRlcixcblx0Y29tcHV0ZWQsXG5cdGNvbnRlbnRDaGlsZCxcblx0aW5qZWN0LFxuXHRpbnB1dCxcblx0dmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGNyZWF0ZUFwaVRva2VuLCBleHRlbmQsIGdldExvY2FsU3RhdGUsIGluamVjdEJlZm9yZVJlbmRlciwgaW5qZWN0Tmd0U3RvcmUsIHBpY2sgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IG1lcmdlSW5wdXRzIH0gZnJvbSAnbmd4dGVuc2lvbi9pbmplY3QtaW5wdXRzJztcbmltcG9ydCB7XG5cdERlcHRoRG93bnNhbXBsaW5nUGFzcyxcblx0RWZmZWN0LFxuXHRFZmZlY3RBdHRyaWJ1dGUsXG5cdEVmZmVjdENvbXBvc2VyLFxuXHRFZmZlY3RQYXNzLFxuXHROb3JtYWxQYXNzLFxuXHRQYXNzLFxuXHRSZW5kZXJQYXNzLFxufSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5pbXBvcnQgeyBDYW1lcmEsIEdyb3VwLCBIYWxmRmxvYXRUeXBlLCBOb1RvbmVNYXBwaW5nLCBTY2VuZSwgVGV4dHVyZURhdGFUeXBlIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgaXNXZWJHTDJBdmFpbGFibGUgfSBmcm9tICd0aHJlZS1zdGRsaWInO1xuXG5leHRlbmQoeyBHcm91cCB9KTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RwRWZmZWN0Q29tcG9zZXJBcGkge1xuXHRjb21wb3NlcjogRWZmZWN0Q29tcG9zZXI7XG5cdGNhbWVyYTogQ2FtZXJhO1xuXHRzY2VuZTogU2NlbmU7XG5cdG5vcm1hbFBhc3M6IE5vcm1hbFBhc3MgfCBudWxsO1xuXHRkb3duU2FtcGxpbmdQYXNzOiBEZXB0aERvd25zYW1wbGluZ1Bhc3MgfCBudWxsO1xuXHRyZXNvbHV0aW9uU2NhbGU/OiBudW1iZXI7XG59XG5cbmV4cG9ydCBjb25zdCBbaW5qZWN0RWZmZWN0Q29tcG9zZXJBcGksIHByb3ZpZGVFZmZlY3RDb21wb3NlckFwaV0gPSBjcmVhdGVBcGlUb2tlbigoKSA9PiBOZ3RwRWZmZWN0Q29tcG9zZXIpO1xuXG5pbnRlcmZhY2UgTmd0cEVmZmVjdENvbXBvc2VyT3B0aW9ucyB7XG5cdGVuYWJsZWQ6IGJvb2xlYW47XG5cdGRlcHRoQnVmZmVyPzogYm9vbGVhbjtcblx0LyoqIE9ubHkgdXNlZCBmb3IgU1NHSSBjdXJyZW50bHksIGxlYXZlIGl0IGRpc2FibGVkIGZvciBldmVyeXRoaW5nIGVsc2UgdW5sZXNzIGl0J3MgbmVlZGVkICovXG5cdGVuYWJsZU5vcm1hbFBhc3M/OiBib29sZWFuO1xuXHRzdGVuY2lsQnVmZmVyPzogYm9vbGVhbjtcblx0YXV0b0NsZWFyOiBib29sZWFuO1xuXHRyZXNvbHV0aW9uU2NhbGU/OiBudW1iZXI7XG5cdG11bHRpc2FtcGxpbmc6IG51bWJlcjtcblx0ZnJhbWVCdWZmZXJUeXBlOiBUZXh0dXJlRGF0YVR5cGU7XG5cdHJlbmRlclByaW9yaXR5OiBudW1iZXI7XG5cdGNhbWVyYT86IENhbWVyYTtcblx0c2NlbmU/OiBTY2VuZTtcbn1cblxuY29uc3QgZGVmYXVsdE9wdGlvbnM6IE5ndHBFZmZlY3RDb21wb3Nlck9wdGlvbnMgPSB7XG5cdGVuYWJsZWQ6IHRydWUsXG5cdHJlbmRlclByaW9yaXR5OiAxLFxuXHRhdXRvQ2xlYXI6IHRydWUsXG5cdG11bHRpc2FtcGxpbmc6IDgsXG5cdGZyYW1lQnVmZmVyVHlwZTogSGFsZkZsb2F0VHlwZSxcbn07XG5cbmZ1bmN0aW9uIGlzQ29udm9sdXRpb24oZWZmZWN0OiBFZmZlY3QpIHtcblx0cmV0dXJuIChlZmZlY3QuZ2V0QXR0cmlidXRlcygpICYgRWZmZWN0QXR0cmlidXRlLkNPTlZPTFVUSU9OKSA9PT0gRWZmZWN0QXR0cmlidXRlLkNPTlZPTFVUSU9OO1xufVxuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICduZy10ZW1wbGF0ZVtlZmZlY3RzXScsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RwRWZmZWN0cyB7fVxuXG5AQ29tcG9uZW50KHtcblx0c2VsZWN0b3I6ICduZ3RwLWVmZmVjdC1jb21wb3NlcicsXG5cdHN0YW5kYWxvbmU6IHRydWUsXG5cdHRlbXBsYXRlOiBgXG5cdFx0PG5ndC1ncm91cCAjZ3JvdXAgbmd0Q29tcG91bmQ+PC9uZ3QtZ3JvdXA+XG5cdGAsXG5cdHByb3ZpZGVyczogW3Byb3ZpZGVFZmZlY3RDb21wb3NlckFwaSgpXSxcblx0c2NoZW1hczogW0NVU1RPTV9FTEVNRU5UU19TQ0hFTUFdLFxuXHRjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgTmd0cEVmZmVjdENvbXBvc2VyIHtcblx0b3B0aW9ucyA9IGlucHV0KGRlZmF1bHRPcHRpb25zLCB7IHRyYW5zZm9ybTogbWVyZ2VJbnB1dHMoZGVmYXVsdE9wdGlvbnMpIH0pO1xuXG5cdGluamVjdG9yID0gaW5qZWN0KEluamVjdG9yKTtcblx0YXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0c3RvcmUgPSBpbmplY3ROZ3RTdG9yZSgpO1xuXHRzaXplID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NpemUnKTtcblx0Z2wgPSB0aGlzLnN0b3JlLnNlbGVjdCgnZ2wnKTtcblx0ZGVmYXVsdFNjZW5lID0gdGhpcy5zdG9yZS5zZWxlY3QoJ3NjZW5lJyk7XG5cdGRlZmF1bHRDYW1lcmEgPSB0aGlzLnN0b3JlLnNlbGVjdCgnY2FtZXJhJyk7XG5cblx0ZGVwdGhCdWZmZXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2RlcHRoQnVmZmVyJyk7XG5cdHN0ZW5jaWxCdWZmZXIgPSBwaWNrKHRoaXMub3B0aW9ucywgJ3N0ZW5jaWxCdWZmZXInKTtcblx0bXVsdGlzYW1wbGluZyA9IHBpY2sodGhpcy5vcHRpb25zLCAnbXVsdGlzYW1wbGluZycpO1xuXHRmcmFtZUJ1ZmZlclR5cGUgPSBwaWNrKHRoaXMub3B0aW9ucywgJ2ZyYW1lQnVmZmVyVHlwZScpO1xuXHRzY2VuZSA9IGNvbXB1dGVkKCgpID0+IHRoaXMub3B0aW9ucygpLnNjZW5lID8/IHRoaXMuZGVmYXVsdFNjZW5lKCkpO1xuXHRjYW1lcmEgPSBjb21wdXRlZCgoKSA9PiB0aGlzLm9wdGlvbnMoKS5jYW1lcmEgPz8gdGhpcy5kZWZhdWx0Q2FtZXJhKCkpO1xuXHRlbmFibGVOb3JtYWxQYXNzID0gcGljayh0aGlzLm9wdGlvbnMsICdlbmFibGVOb3JtYWxQYXNzJyk7XG5cdHJlc29sdXRpb25TY2FsZSA9IHBpY2sodGhpcy5vcHRpb25zLCAncmVzb2x1dGlvblNjYWxlJyk7XG5cblx0Z3JvdXAgPSB2aWV3Q2hpbGQucmVxdWlyZWQ8RWxlbWVudFJlZjxHcm91cD4+KCdncm91cCcpO1xuXHRncm91cEFuY2hvciA9IHZpZXdDaGlsZC5yZXF1aXJlZCgnZ3JvdXAnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSk7XG5cdGNvbnRlbnQgPSBjb250ZW50Q2hpbGQucmVxdWlyZWQoTmd0cEVmZmVjdHMsIHsgcmVhZDogVGVtcGxhdGVSZWYgfSk7XG5cblx0Y29tcG9zZXJEYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IHdlYkdMMkF2YWlsYWJsZSA9IGlzV2ViR0wyQXZhaWxhYmxlKCk7XG5cdFx0Y29uc3QgW1xuXHRcdFx0Z2wsXG5cdFx0XHRzY2VuZSxcblx0XHRcdGNhbWVyYSxcblx0XHRcdGRlcHRoQnVmZmVyLFxuXHRcdFx0c3RlbmNpbEJ1ZmZlcixcblx0XHRcdG11bHRpc2FtcGxpbmcsXG5cdFx0XHRmcmFtZUJ1ZmZlclR5cGUsXG5cdFx0XHRlbmFibGVOb3JtYWxQYXNzLFxuXHRcdFx0cmVzb2x1dGlvblNjYWxlLFxuXHRcdF0gPSBbXG5cdFx0XHR0aGlzLmdsKCksXG5cdFx0XHR0aGlzLnNjZW5lKCksXG5cdFx0XHR0aGlzLmNhbWVyYSgpLFxuXHRcdFx0dGhpcy5kZXB0aEJ1ZmZlcigpLFxuXHRcdFx0dGhpcy5zdGVuY2lsQnVmZmVyKCksXG5cdFx0XHR0aGlzLm11bHRpc2FtcGxpbmcoKSxcblx0XHRcdHRoaXMuZnJhbWVCdWZmZXJUeXBlKCksXG5cdFx0XHR0aGlzLmVuYWJsZU5vcm1hbFBhc3MoKSxcblx0XHRcdHRoaXMucmVzb2x1dGlvblNjYWxlKCksXG5cdFx0XTtcblxuXHRcdC8vIGluaXRpYWxpemUgY29tcG9zZXJcblx0XHRjb25zdCBjb21wb3NlciA9IG5ldyBFZmZlY3RDb21wb3NlcihnbCwge1xuXHRcdFx0ZGVwdGhCdWZmZXIsXG5cdFx0XHRzdGVuY2lsQnVmZmVyLFxuXHRcdFx0bXVsdGlzYW1wbGluZzogbXVsdGlzYW1wbGluZyA+IDAgJiYgd2ViR0wyQXZhaWxhYmxlID8gbXVsdGlzYW1wbGluZyA6IDAsXG5cdFx0XHRmcmFtZUJ1ZmZlclR5cGUsXG5cdFx0fSk7XG5cblx0XHQvLyBhZGQgcmVuZGVyIHBhc3Ncblx0XHRjb21wb3Nlci5hZGRQYXNzKG5ldyBSZW5kZXJQYXNzKHNjZW5lLCBjYW1lcmEpKTtcblxuXHRcdC8vIGNyZWF0ZSBub3JtYWwgcGFzc1xuXHRcdGxldCBkb3duU2FtcGxpbmdQYXNzID0gbnVsbDtcblx0XHRsZXQgbm9ybWFsUGFzcyA9IG51bGw7XG5cdFx0aWYgKGVuYWJsZU5vcm1hbFBhc3MpIHtcblx0XHRcdG5vcm1hbFBhc3MgPSBuZXcgTm9ybWFsUGFzcyhzY2VuZSwgY2FtZXJhKTtcblx0XHRcdG5vcm1hbFBhc3MuZW5hYmxlZCA9IGZhbHNlO1xuXHRcdFx0Y29tcG9zZXIuYWRkUGFzcyhub3JtYWxQYXNzKTtcblx0XHRcdGlmIChyZXNvbHV0aW9uU2NhbGUgIT09IHVuZGVmaW5lZCAmJiB3ZWJHTDJBdmFpbGFibGUpIHtcblx0XHRcdFx0ZG93blNhbXBsaW5nUGFzcyA9IG5ldyBEZXB0aERvd25zYW1wbGluZ1Bhc3MoeyBub3JtYWxCdWZmZXI6IG5vcm1hbFBhc3MudGV4dHVyZSwgcmVzb2x1dGlvblNjYWxlIH0pO1xuXHRcdFx0XHRkb3duU2FtcGxpbmdQYXNzLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdFx0Y29tcG9zZXIuYWRkUGFzcyhkb3duU2FtcGxpbmdQYXNzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4geyBjb21wb3Nlciwgbm9ybWFsUGFzcywgZG93blNhbXBsaW5nUGFzcyB9O1xuXHR9KTtcblxuXHRhcGkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0Y29uc3QgW3sgY29tcG9zZXIsIG5vcm1hbFBhc3MsIGRvd25TYW1wbGluZ1Bhc3MgfSwgY2FtZXJhLCBzY2VuZSwgcmVzb2x1dGlvblNjYWxlXSA9IFtcblx0XHRcdHRoaXMuY29tcG9zZXJEYXRhKCksXG5cdFx0XHR0aGlzLmNhbWVyYSgpLFxuXHRcdFx0dGhpcy5zY2VuZSgpLFxuXHRcdFx0dGhpcy5yZXNvbHV0aW9uU2NhbGUoKSxcblx0XHRdO1xuXHRcdHJldHVybiB7IGNvbXBvc2VyLCBjYW1lcmEsIHNjZW5lLCBub3JtYWxQYXNzLCBkb3duU2FtcGxpbmdQYXNzLCByZXNvbHV0aW9uU2NhbGUgfTtcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdHRoaXMuZGlzYWJsZVRvbmVNYXBwaW5nKCk7XG5cdFx0XHR0aGlzLnNldENvbXBvc2VyU2l6ZSgpO1xuXHRcdFx0dGhpcy5yZW5kZXIoKTtcblx0XHRcdHRoaXMudXBkYXRlUGFzc2VzKCk7XG5cblx0XHRcdGluamVjdEJlZm9yZVJlbmRlcihcblx0XHRcdFx0KHsgZGVsdGEgfSkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IFt7IGNvbXBvc2VyIH0sIHsgZW5hYmxlZCwgYXV0b0NsZWFyLCBzdGVuY2lsQnVmZmVyIH0sIGdsXSA9IFtcblx0XHRcdFx0XHRcdHRoaXMuY29tcG9zZXJEYXRhKCksXG5cdFx0XHRcdFx0XHR0aGlzLm9wdGlvbnMoKSxcblx0XHRcdFx0XHRcdHRoaXMuZ2woKSxcblx0XHRcdFx0XHRdO1xuXG5cdFx0XHRcdFx0aWYgKGVuYWJsZWQpIHtcblx0XHRcdFx0XHRcdGNvbnN0IGN1cnJlbnRBdXRvQ2xlYXIgPSBnbC5hdXRvQ2xlYXI7XG5cdFx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBhdXRvQ2xlYXI7XG5cdFx0XHRcdFx0XHRpZiAoc3RlbmNpbEJ1ZmZlciAmJiAhYXV0b0NsZWFyKSBnbC5jbGVhclN0ZW5jaWwoKTtcblx0XHRcdFx0XHRcdGNvbXBvc2VyLnJlbmRlcihkZWx0YSk7XG5cdFx0XHRcdFx0XHRnbC5hdXRvQ2xlYXIgPSBjdXJyZW50QXV0b0NsZWFyO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0eyBpbmplY3RvcjogdGhpcy5pbmplY3RvciwgcHJpb3JpdHk6IHRoaXMub3B0aW9ucygpLmVuYWJsZWQgPyB0aGlzLm9wdGlvbnMoKS5yZW5kZXJQcmlvcml0eSA6IDAgfSxcblx0XHRcdCk7XG5cdFx0fSk7XG5cdH1cblxuXHQvLyBOT1RFOiBEaXNhYmxlIHRvbmUgbWFwcGluZyBiZWNhdXNlIHRocmVlanMgZGlzYWxsb3dzIHRvbmVtYXBwaW5nIG9uIHJlbmRlciB0YXJnZXRzXG5cdHByaXZhdGUgZGlzYWJsZVRvbmVNYXBwaW5nKCkge1xuXHRcdHRoaXMuYXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBnbCA9IHRoaXMuZ2woKTtcblx0XHRcdGNvbnN0IGN1cnJlbnRUb25lbWFwcGluZyA9IGdsLnRvbmVNYXBwaW5nO1xuXHRcdFx0Z2wudG9uZU1hcHBpbmcgPSBOb1RvbmVNYXBwaW5nO1xuXHRcdFx0cmV0dXJuICgpID0+IHtcblx0XHRcdFx0Z2wudG9uZU1hcHBpbmcgPSBjdXJyZW50VG9uZW1hcHBpbmc7XG5cdFx0XHR9O1xuXHRcdH0pO1xuXHR9XG5cblx0cHJpdmF0ZSBzZXRDb21wb3NlclNpemUoKSB7XG5cdFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IFt7IGNvbXBvc2VyIH0sIHsgd2lkdGgsIGhlaWdodCB9XSA9IFt0aGlzLmNvbXBvc2VyRGF0YSgpLCB0aGlzLnNpemUoKV07XG5cdFx0XHRpZiAoY29tcG9zZXIpIHtcblx0XHRcdFx0Y29tcG9zZXIuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXG5cdHByaXZhdGUgcmVuZGVyKCkge1xuXHRcdHRoaXMuYXV0b0VmZmVjdChcblx0XHRcdChpbmplY3RvcikgPT4ge1xuXHRcdFx0XHRjb25zdCByZWYgPSB0aGlzLmdyb3VwQW5jaG9yKCkuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuY29udGVudCgpLCB7fSwgeyBpbmplY3RvciB9KTtcblx0XHRcdFx0cmVmLmRldGVjdENoYW5nZXMoKTtcblxuXHRcdFx0XHRyZXR1cm4gKCkgPT4gcmVmLmRlc3Ryb3koKTtcblx0XHRcdH0sXG5cdFx0XHR7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH0sXG5cdFx0KTtcblx0fVxuXG5cdHByaXZhdGUgdXBkYXRlUGFzc2VzKCkge1xuXHRcdHRoaXMuYXV0b0VmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbZ3JvdXAsIHsgY29tcG9zZXIsIG5vcm1hbFBhc3MsIGRvd25TYW1wbGluZ1Bhc3MgfSwgY2FtZXJhXSA9IFtcblx0XHRcdFx0dGhpcy5ncm91cCgpLFxuXHRcdFx0XHR0aGlzLmNvbXBvc2VyRGF0YSgpLFxuXHRcdFx0XHR0aGlzLmNhbWVyYSgpLFxuXHRcdFx0XTtcblxuXHRcdFx0Y29uc3QgcGFzc2VzOiBQYXNzW10gPSBbXTtcblxuXHRcdFx0aWYgKGdyb3VwLm5hdGl2ZUVsZW1lbnQgJiYgY29tcG9zZXIpIHtcblx0XHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoZ3JvdXAubmF0aXZlRWxlbWVudCk7XG5cdFx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IGNoaWxkcmVuID0gbG9jYWxTdGF0ZS5ub25PYmplY3RzKCk7XG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgY2hpbGRyZW4ubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHRjb25zdCBjaGlsZCA9IGNoaWxkcmVuW2ldO1xuXHRcdFx0XHRcdGlmIChjaGlsZCBpbnN0YW5jZW9mIEVmZmVjdCkge1xuXHRcdFx0XHRcdFx0Y29uc3QgZWZmZWN0czogRWZmZWN0W10gPSBbY2hpbGRdO1xuXG5cdFx0XHRcdFx0XHRpZiAoIWlzQ29udm9sdXRpb24oY2hpbGQpKSB7XG5cdFx0XHRcdFx0XHRcdGxldCBuZXh0OiB1bmtub3duID0gbnVsbDtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKChuZXh0ID0gY2hpbGRyZW5baSArIDFdKSBpbnN0YW5jZW9mIEVmZmVjdCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmIChpc0NvbnZvbHV0aW9uKG5leHQpKSBicmVhaztcblx0XHRcdFx0XHRcdFx0XHRlZmZlY3RzLnB1c2gobmV4dCBhcyBFZmZlY3QpO1xuXHRcdFx0XHRcdFx0XHRcdGkrKztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRjb25zdCBwYXNzID0gbmV3IEVmZmVjdFBhc3MoY2FtZXJhLCAuLi5lZmZlY3RzKTtcblx0XHRcdFx0XHRcdHBhc3Nlcy5wdXNoKHBhc3MpO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoY2hpbGQgaW5zdGFuY2VvZiBQYXNzKSB7XG5cdFx0XHRcdFx0XHRwYXNzZXMucHVzaChjaGlsZCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Zm9yIChjb25zdCBwYXNzIG9mIHBhc3Nlcykge1xuXHRcdFx0XHRcdGNvbXBvc2VyLmFkZFBhc3MocGFzcyk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAobm9ybWFsUGFzcykgbm9ybWFsUGFzcy5lbmFibGVkID0gdHJ1ZTtcblx0XHRcdFx0aWYgKGRvd25TYW1wbGluZ1Bhc3MpIGRvd25TYW1wbGluZ1Bhc3MuZW5hYmxlZCA9IHRydWU7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdGZvciAoY29uc3QgcGFzcyBvZiBwYXNzZXMpIGNvbXBvc2VyPy5yZW1vdmVQYXNzKHBhc3MpO1xuXHRcdFx0XHRpZiAobm9ybWFsUGFzcykgbm9ybWFsUGFzcy5lbmFibGVkID0gZmFsc2U7XG5cdFx0XHRcdGlmIChkb3duU2FtcGxpbmdQYXNzKSBkb3duU2FtcGxpbmdQYXNzLmVuYWJsZWQgPSBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSk7XG5cdH1cbn1cbiJdfQ==
@@ -1,78 +1,53 @@
1
- import { Directive, Input, computed, effect } from '@angular/core';
2
- import { getLocalState, injectNgtRef, injectNgtStore, is, signalStore } from 'angular-three';
3
- import { BlendFunction, Effect } from 'postprocessing';
1
+ import { CUSTOM_ELEMENTS_SCHEMA, ChangeDetectionStrategy, Component, Directive, inject, input } from '@angular/core';
2
+ import { injectNgtRef, injectNgtStore } from 'angular-three';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
4
+ import { createNoopInjectionToken } from 'ngxtension/create-injection-token';
4
5
  import * as i0 from "@angular/core";
5
- export class NgtpEffect {
6
- set _blendFunction(blendFunction) {
7
- this.inputs.set({ blendFunction });
8
- }
9
- set _opacity(opacity) {
10
- this.inputs.set({ opacity });
6
+ export const [injectDefaultEffectOptions, provideDefaultEffectOptions] = createNoopInjectionToken('Default Effect options');
7
+ export class NgtpEffectBlendMode {
8
+ constructor() {
9
+ this.effect = inject(NgtpEffect, { optional: true });
11
10
  }
11
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffectBlendMode, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
12
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.0.3", type: NgtpEffectBlendMode, isStandalone: true, selector: "ngtp-effect-blend-mode", ngImport: i0, template: `
13
+ @if (effect) {
14
+ <ngt-value [rawValue]="effect.blendFunction()" attach="blendMode.blendFunction" />
15
+ <ngt-value [rawValue]="effect.opacity()" attach="blendMode.opacity.value" />
16
+ }
17
+ `, isInline: true, changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
18
+ }
19
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffectBlendMode, decorators: [{
20
+ type: Component,
21
+ args: [{
22
+ selector: 'ngtp-effect-blend-mode',
23
+ standalone: true,
24
+ template: `
25
+ @if (effect) {
26
+ <ngt-value [rawValue]="effect.blendFunction()" attach="blendMode.blendFunction" />
27
+ <ngt-value [rawValue]="effect.opacity()" attach="blendMode.opacity.value" />
28
+ }
29
+ `,
30
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
31
+ changeDetection: ChangeDetectionStrategy.OnPush,
32
+ }]
33
+ }] });
34
+ export class NgtpEffect {
12
35
  constructor() {
13
- this.inputs = signalStore();
14
- this.effectRef = injectNgtRef();
15
- this.defaultBlendFunction = BlendFunction.NORMAL;
16
- this.nativeArgs = () => [];
17
- this.blendFunction = this.inputs.select('blendFunction');
18
- this.opacity = this.inputs.select('opacity');
36
+ this.defaultEffectOptions = injectDefaultEffectOptions({ optional: true });
37
+ this.effectRef = input(injectNgtRef());
38
+ this.blendFunction = input(this.defaultEffectOptions?.blendFunction);
39
+ this.opacity = input(this.defaultEffectOptions?.opacity);
40
+ this.autoEffect = injectAutoEffect();
19
41
  this.store = injectNgtStore();
20
42
  this.camera = this.store.select('camera');
21
43
  this.invalidate = this.store.select('invalidate');
22
- this.nativeInputs = computed(() => {
23
- const effect = this.effectRef.nativeElement;
24
- if (!effect)
25
- return this.previousInputs || null;
26
- const localState = getLocalState(effect);
27
- if (!localState)
28
- return this.previousInputs || null;
29
- const nativeProps = localState.nativeProps.state();
30
- delete nativeProps['__ngt_dummy_state__'];
31
- if ('camera' in nativeProps) {
32
- delete nativeProps['camera'];
33
- }
34
- if (!Object.keys(nativeProps).length)
35
- return this.previousInputs || null;
36
- return (this.previousInputs = nativeProps);
37
- }, { equal: (a, b) => is.equ(a, b, { objects: 'shallow' }) });
38
- this.args = computed(() => {
39
- const [nativeInputs, nativeArgs] = [this.nativeInputs(), this.nativeArgs()];
40
- if (nativeInputs) {
41
- nativeArgs.push(nativeInputs);
42
- }
43
- return nativeArgs;
44
- });
45
- this.setBlendMode();
46
- }
47
- setBlendMode() {
48
- effect(() => {
49
- const [blendFunction, opacity, effect, invalidate] = [
50
- this.blendFunction(),
51
- this.opacity(),
52
- this.effectRef.nativeElement,
53
- this.invalidate(),
54
- ];
55
- if (!effect)
56
- return;
57
- effect.blendMode.blendFunction =
58
- !blendFunction && blendFunction !== 0 ? this.defaultBlendFunction : blendFunction;
59
- if (opacity !== undefined)
60
- effect.blendMode.opacity.value = opacity;
61
- invalidate();
62
- });
63
44
  }
64
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpEffect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
65
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: NgtpEffect, inputs: { effectRef: "effectRef", _blendFunction: ["blendFunction", "_blendFunction"], _opacity: ["opacity", "_opacity"] }, ngImport: i0 }); }
45
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffect, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
46
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.0.3", type: NgtpEffect, isStandalone: true, inputs: { effectRef: { classPropertyName: "effectRef", publicName: "effectRef", isSignal: true, isRequired: false, transformFunction: null }, blendFunction: { classPropertyName: "blendFunction", publicName: "blendFunction", isSignal: true, isRequired: false, transformFunction: null }, opacity: { classPropertyName: "opacity", publicName: "opacity", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
66
47
  }
67
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: NgtpEffect, decorators: [{
68
- type: Directive
69
- }], ctorParameters: function () { return []; }, propDecorators: { effectRef: [{
70
- type: Input
71
- }], _blendFunction: [{
72
- type: Input,
73
- args: [{ alias: 'blendFunction' }]
74
- }], _opacity: [{
75
- type: Input,
76
- args: [{ alias: 'opacity' }]
77
- }] } });
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxFQUFFLEVBQUUsV0FBVyxFQUFxQixNQUFNLGVBQWUsQ0FBQztBQUNoSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDOztBQVF2RCxNQUFNLE9BQWdCLFVBQVU7SUFLL0IsSUFBdUMsY0FBYyxDQUFDLGFBQTRCO1FBQ2pGLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsYUFBYSxFQUFFLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQsSUFBaUMsUUFBUSxDQUFDLE9BQWU7UUFDeEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUF3Q0Q7UUFsREEsV0FBTSxHQUFHLFdBQVcsRUFBbUIsQ0FBQztRQUUvQixjQUFTLEdBQUcsWUFBWSxFQUFXLENBQUM7UUFVbkMseUJBQW9CLEdBQUcsYUFBYSxDQUFDLE1BQU0sQ0FBQztRQUM1QyxlQUFVLEdBQXlCLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztRQUV0RCxrQkFBYSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3BELFlBQU8sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUU5QixVQUFLLEdBQUcsY0FBYyxFQUFFLENBQUM7UUFDekIsV0FBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENB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bnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCwgY29tcHV0ZWQsIGVmZmVjdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSwgaW5qZWN0Tmd0UmVmLCBpbmplY3ROZ3RTdG9yZSwgaXMsIHNpZ25hbFN0b3JlLCB0eXBlIE5ndEFueVJlY29yZCB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgQmxlbmRGdW5jdGlvbiwgRWZmZWN0IH0gZnJvbSAncG9zdHByb2Nlc3NpbmcnO1xuXG5leHBvcnQgdHlwZSBOZ3RwRWZmZWN0U3RhdGUgPSB7XG5cdGJsZW5kRnVuY3Rpb24/OiBCbGVuZEZ1bmN0aW9uO1xuXHRvcGFjaXR5PzogbnVtYmVyO1xufTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTmd0cEVmZmVjdDxURWZmZWN0IGV4dGVuZHMgRWZmZWN0PiB7XG5cdGlucHV0cyA9IHNpZ25hbFN0b3JlPE5ndHBFZmZlY3RTdGF0ZT4oKTtcblxuXHRASW5wdXQoKSBlZmZlY3RSZWYgPSBpbmplY3ROZ3RSZWY8VEVmZmVjdD4oKTtcblxuXHRASW5wdXQoeyBhbGlhczogJ2JsZW5kRnVuY3Rpb24nIH0pIHNldCBfYmxlbmRGdW5jdGlvbihibGVuZEZ1bmN0aW9uOiBCbGVuZEZ1bmN0aW9uKSB7XG5cdFx0dGhpcy5pbnB1dHMuc2V0KHsgYmxlbmRGdW5jdGlvbiB9KTtcblx0fVxuXG5cdEBJbnB1dCh7IGFsaWFzOiAnb3BhY2l0eScgfSkgc2V0IF9vcGFjaXR5KG9wYWNpdHk6IG51bWJlcikge1xuXHRcdHRoaXMuaW5wdXRzLnNldCh7IG9wYWNpdHkgfSk7XG5cdH1cblxuXHRwcm90ZWN0ZWQgZGVmYXVsdEJsZW5kRnVuY3Rpb24gPSBCbGVuZEZ1bmN0aW9uLk5PUk1BTDtcblx0cHJvdGVjdGVkIG5hdGl2ZUFyZ3M6ICgpID0+IE5ndEFueVJlY29yZFtdID0gKCkgPT4gW107XG5cblx0YmxlbmRGdW5jdGlvbiA9IHRoaXMuaW5wdXRzLnNlbGVjdCgnYmxlbmRGdW5jdGlvbicpO1xuXHRvcGFjaXR5ID0gdGhpcy5pbnB1dHMuc2VsZWN0KCdvcGFjaXR5Jyk7XG5cblx0cHJvdGVjdGVkIHN0b3JlID0gaW5qZWN0Tmd0U3RvcmUoKTtcblx0cHJvdGVjdGVkIGNhbWVyYSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblx0cHJpdmF0ZSBpbnZhbGlkYXRlID0gdGhpcy5zdG9yZS5zZWxlY3QoJ2ludmFsaWRhdGUnKTtcblxuXHRwcml2YXRlIHByZXZpb3VzSW5wdXRzPzogTmd0QW55UmVjb3JkO1xuXG5cdHByaXZhdGUgbmF0aXZlSW5wdXRzID0gY29tcHV0ZWQoXG5cdFx0KCkgPT4ge1xuXHRcdFx0Y29uc3QgZWZmZWN0ID0gdGhpcy5lZmZlY3RSZWYubmF0aXZlRWxlbWVudDtcblx0XHRcdGlmICghZWZmZWN0KSByZXR1cm4gdGhpcy5wcmV2aW91c0lucHV0cyB8fCBudWxsO1xuXHRcdFx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoZWZmZWN0KTtcblx0XHRcdGlmICghbG9jYWxTdGF0ZSkgcmV0dXJuIHRoaXMucHJldmlvdXNJbnB1dHMgfHwgbnVsbDtcblx0XHRcdGNvbnN0IG5hdGl2ZVByb3BzID0gbG9jYWxTdGF0ZS5uYXRpdmVQcm9wcy5zdGF0ZSgpO1xuXHRcdFx0ZGVsZXRlIG5hdGl2ZVByb3BzWydfX25ndF9kdW1teV9zdGF0ZV9fJ107XG5cdFx0XHRpZiAoJ2NhbWVyYScgaW4gbmF0aXZlUHJvcHMpIHtcblx0XHRcdFx0ZGVsZXRlIG5hdGl2ZVByb3BzWydjYW1lcmEnXTtcblx0XHRcdH1cblx0XHRcdGlmICghT2JqZWN0LmtleXMobmF0aXZlUHJvcHMpLmxlbmd0aCkgcmV0dXJuIHRoaXMucHJldmlvdXNJbnB1dHMgfHwgbnVsbDtcblx0XHRcdHJldHVybiAodGhpcy5wcmV2aW91c0lucHV0cyA9IG5hdGl2ZVByb3BzKTtcblx0XHR9LFxuXHRcdHsgZXF1YWw6IChhLCBiKSA9PiBpcy5lcXUoYSwgYiwgeyBvYmplY3RzOiAnc2hhbGxvdycgfSkgfSxcblx0KTtcblxuXHRhcmdzID0gY29tcHV0ZWQoKCkgPT4ge1xuXHRcdGNvbnN0IFtuYXRpdmVJbnB1dHMsIG5hdGl2ZUFyZ3NdID0gW3RoaXMubmF0aXZlSW5wdXRzKCksIHRoaXMubmF0aXZlQXJncygpXTtcblx0XHRpZiAobmF0aXZlSW5wdXRzKSB7XG5cdFx0XHRuYXRpdmVBcmdzLnB1c2gobmF0aXZlSW5wdXRzKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbmF0aXZlQXJncztcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5zZXRCbGVuZE1vZGUoKTtcblx0fVxuXG5cdHByaXZhdGUgc2V0QmxlbmRNb2RlKCkge1xuXHRcdGVmZmVjdCgoKSA9PiB7XG5cdFx0XHRjb25zdCBbYmxlbmRGdW5jdGlvbiwgb3BhY2l0eSwgZWZmZWN0LCBpbnZhbGlkYXRlXSA9IFtcblx0XHRcdFx0dGhpcy5ibGVuZEZ1bmN0aW9uKCksXG5cdFx0XHRcdHRoaXMub3BhY2l0eSgpLFxuXHRcdFx0XHR0aGlzLmVmZmVjdFJlZi5uYXRpdmVFbGVtZW50LFxuXHRcdFx0XHR0aGlzLmludmFsaWRhdGUoKSxcblx0XHRcdF07XG5cblx0XHRcdGlmICghZWZmZWN0KSByZXR1cm47XG5cdFx0XHRlZmZlY3QuYmxlbmRNb2RlLmJsZW5kRnVuY3Rpb24gPVxuXHRcdFx0XHQhYmxlbmRGdW5jdGlvbiAmJiBibGVuZEZ1bmN0aW9uICE9PSAwID8gdGhpcy5kZWZhdWx0QmxlbmRGdW5jdGlvbiA6IGJsZW5kRnVuY3Rpb247XG5cdFx0XHRpZiAob3BhY2l0eSAhPT0gdW5kZWZpbmVkKSBlZmZlY3QuYmxlbmRNb2RlLm9wYWNpdHkudmFsdWUgPSBvcGFjaXR5O1xuXHRcdFx0aW52YWxpZGF0ZSgpO1xuXHRcdH0pO1xuXHR9XG59XG4iXX0=
48
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.0.3", ngImport: i0, type: NgtpEffect, decorators: [{
49
+ type: Directive,
50
+ args: [{ standalone: true }]
51
+ }] });
52
+ export const NgtpEffectHostDirective = { directive: NgtpEffect, inputs: ['blendFunction', 'opacity', 'effectRef'] };
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWZmZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9wb3N0cHJvY2Vzc2luZy9zcmMvbGliL2VmZmVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3JILE9BQU8sRUFBRSxZQUFZLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLG1DQUFtQyxDQUFDOztBQUc3RSxNQUFNLENBQUMsTUFBTSxDQUFDLDBCQUEwQixFQUFFLDJCQUEyQixDQUFDLEdBQUcsd0JBQXdCLENBRzlGLHdCQUF3QixDQUFDLENBQUM7QUFjN0IsTUFBTSxPQUFPLG1CQUFtQjtJQVpoQztRQWFDLFdBQU0sR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7S0FDaEQ7OEdBRlksbUJBQW1CO2tHQUFuQixtQkFBbUIsa0ZBVHJCOzs7OztFQUtUOzsyRkFJVyxtQkFBbUI7a0JBWi9CLFNBQVM7bUJBQUM7b0JBQ1YsUUFBUSxFQUFFLHdCQUF3QjtvQkFDbEMsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRTs7Ozs7RUFLVDtvQkFDRCxPQUFPLEVBQUUsQ0FBQyxzQkFBc0IsQ0FBQztvQkFDakMsZUFBZSxFQUFFLHVCQUF1QixDQUFDLE1BQU07aUJBQy9DOztBQU1ELE1BQU0sT0FBTyxVQUFVO0lBRHZCO1FBRUMseUJBQW9CLEdBQUcsMEJBQTBCLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUV0RSxjQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksRUFBVSxDQUFDLENBQUM7UUFDMUMsa0JBQWEsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQ2hFLFlBQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRXBELGVBQVUsR0FBRyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ2hDLFVBQUssR0FBRyxjQUFjLEVBQUUsQ0FBQztRQUN6QixXQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDckMsZUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDO0tBNkI3Qzs4R0F2Q1ksVUFBVTtrR0FBVixVQUFVOzsyRkFBVixVQUFVO2tCQUR0QixTQUFTO21CQUFDLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTs7QUEwQy9CLE1BQU0sQ0FBQyxNQUFNLHVCQUF1QixHQUFHLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsQ0FBQyxlQUFlLEVBQUUsU0FBUyxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDVVNUT01fRUxFTUVOVFNfU0NIRU1BLCBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBEaXJlY3RpdmUsIGluamVjdCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGluamVjdE5ndFJlZiwgaW5qZWN0Tmd0U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IGNyZWF0ZU5vb3BJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ25neHRlbnNpb24vY3JlYXRlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQgeyBCbGVuZEZ1bmN0aW9uLCBFZmZlY3QgfSBmcm9tICdwb3N0cHJvY2Vzc2luZyc7XG5cbmV4cG9ydCBjb25zdCBbaW5qZWN0RGVmYXVsdEVmZmVjdE9wdGlvbnMsIHByb3ZpZGVEZWZhdWx0RWZmZWN0T3B0aW9uc10gPSBjcmVhdGVOb29wSW5qZWN0aW9uVG9rZW48e1xuXHRibGVuZEZ1bmN0aW9uPzogQmxlbmRGdW5jdGlvbjtcblx0b3BhY2l0eT86IG51bWJlcjtcbn0+KCdEZWZhdWx0IEVmZmVjdCBvcHRpb25zJyk7XG5cbkBDb21wb25lbnQoe1xuXHRzZWxlY3RvcjogJ25ndHAtZWZmZWN0LWJsZW5kLW1vZGUnLFxuXHRzdGFuZGFsb25lOiB0cnVlLFxuXHR0ZW1wbGF0ZTogYFxuXHRcdEBpZiAoZWZmZWN0KSB7XG5cdFx0XHQ8bmd0LXZhbHVlIFtyYXdWYWx1ZV09XCJlZmZlY3QuYmxlbmRGdW5jdGlvbigpXCIgYXR0YWNoPVwiYmxlbmRNb2RlLmJsZW5kRnVuY3Rpb25cIiAvPlxuXHRcdFx0PG5ndC12YWx1ZSBbcmF3VmFsdWVdPVwiZWZmZWN0Lm9wYWNpdHkoKVwiIGF0dGFjaD1cImJsZW5kTW9kZS5vcGFjaXR5LnZhbHVlXCIgLz5cblx0XHR9XG5cdGAsXG5cdHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcblx0Y2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIE5ndHBFZmZlY3RCbGVuZE1vZGUge1xuXHRlZmZlY3QgPSBpbmplY3QoTmd0cEVmZmVjdCwgeyBvcHRpb25hbDogdHJ1ZSB9KTtcbn1cblxuQERpcmVjdGl2ZSh7IHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RwRWZmZWN0IHtcblx0ZGVmYXVsdEVmZmVjdE9wdGlvbnMgPSBpbmplY3REZWZhdWx0RWZmZWN0T3B0aW9ucyh7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdGVmZmVjdFJlZiA9IGlucHV0KGluamVjdE5ndFJlZjxFZmZlY3Q+KCkpO1xuXHRibGVuZEZ1bmN0aW9uID0gaW5wdXQodGhpcy5kZWZhdWx0RWZmZWN0T3B0aW9ucz8uYmxlbmRGdW5jdGlvbik7XG5cdG9wYWNpdHkgPSBpbnB1dCh0aGlzLmRlZmF1bHRFZmZlY3RPcHRpb25zPy5vcGFjaXR5KTtcblxuXHRhdXRvRWZmZWN0ID0gaW5qZWN0QXV0b0VmZmVjdCgpO1xuXHRzdG9yZSA9IGluamVjdE5ndFN0b3JlKCk7XG5cdGNhbWVyYSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdjYW1lcmEnKTtcblx0aW52YWxpZGF0ZSA9IHRoaXMuc3RvcmUuc2VsZWN0KCdpbnZhbGlkYXRlJyk7XG5cblx0Ly8gY29uc3RydWN0b3IoKSB7XG5cdC8vIFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0Ly8gXHRcdHRoaXMuc2V0QmxlbmRNb2RlKCk7XG5cdC8vIFx0fSk7XG5cdC8vIH1cblx0Ly9cblx0Ly8gcHJpdmF0ZSBzZXRCbGVuZE1vZGUoKSB7XG5cdC8vIFx0dGhpcy5hdXRvRWZmZWN0KCgpID0+IHtcblx0Ly8gXHRcdGNvbnN0IFtlZmZlY3QsIGJsZW5kRnVuY3Rpb24sIG9wYWNpdHksIGludmFsaWRhdGVdID0gW1xuXHQvLyBcdFx0XHR0aGlzLmVmZmVjdFJlZigpLm5hdGl2ZUVsZW1lbnQsXG5cdC8vIFx0XHRcdHRoaXMuYmxlbmRGdW5jdGlvbigpLFxuXHQvLyBcdFx0XHR0aGlzLm9wYWNpdHkoKSxcblx0Ly8gXHRcdFx0dGhpcy5pbnZhbGlkYXRlKCksXG5cdC8vIFx0XHRdO1xuXHQvLyBcdFx0aWYgKCFlZmZlY3QpIHJldHVybjtcblx0Ly9cblx0Ly8gXHRcdGlmIChibGVuZEZ1bmN0aW9uICE9PSB1bmRlZmluZWQpIHtcblx0Ly8gXHRcdFx0ZWZmZWN0LmJsZW5kTW9kZS5ibGVuZEZ1bmN0aW9uID0gYmxlbmRGdW5jdGlvbjtcblx0Ly8gXHRcdH1cblx0Ly9cblx0Ly8gXHRcdGlmIChvcGFjaXR5ICE9PSB1bmRlZmluZWQpIHtcblx0Ly8gXHRcdFx0ZWZmZWN0LmJsZW5kTW9kZS5vcGFjaXR5LnZhbHVlID0gb3BhY2l0eTtcblx0Ly8gXHRcdH1cblx0Ly9cblx0Ly8gXHRcdGludmFsaWRhdGUoKTtcblx0Ly8gXHR9KTtcblx0Ly8gfVxufVxuXG5leHBvcnQgY29uc3QgTmd0cEVmZmVjdEhvc3REaXJlY3RpdmUgPSB7IGRpcmVjdGl2ZTogTmd0cEVmZmVjdCwgaW5wdXRzOiBbJ2JsZW5kRnVuY3Rpb24nLCAnb3BhY2l0eScsICdlZmZlY3RSZWYnXSB9O1xuIl19