@paper-design/shaders 0.0.35 → 0.0.36
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.
|
@@ -3,7 +3,11 @@
|
|
|
3
3
|
* https://github.com/paper-design/shaders *
|
|
4
4
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import {
|
|
7
|
+
sizingVariablesDeclaration,
|
|
8
|
+
sizingDebugVariablesDeclaration,
|
|
9
|
+
sizingUniformsDeclaration
|
|
10
|
+
} from "../shader-sizing.js";
|
|
7
11
|
import { declareSimplexNoise, declarePI, declareRandom, declareValueNoise, colorBandingFix } from "../shader-utils.js";
|
|
8
12
|
const grainGradientMeta = {
|
|
9
13
|
maxColorCount: 7
|
|
@@ -24,6 +28,8 @@ uniform float u_noise;
|
|
|
24
28
|
uniform float u_shape;
|
|
25
29
|
|
|
26
30
|
${sizingVariablesDeclaration}
|
|
31
|
+
${sizingDebugVariablesDeclaration}
|
|
32
|
+
${sizingUniformsDeclaration}
|
|
27
33
|
|
|
28
34
|
out vec4 fragColor;
|
|
29
35
|
|
|
@@ -67,11 +73,47 @@ vec2 truchet(vec2 uv, float idx){
|
|
|
67
73
|
void main() {
|
|
68
74
|
|
|
69
75
|
float t = .1 * u_time;
|
|
70
|
-
|
|
71
|
-
vec2
|
|
72
|
-
vec2
|
|
73
|
-
|
|
74
|
-
|
|
76
|
+
|
|
77
|
+
vec2 shape_uv = vec2(0.);
|
|
78
|
+
vec2 grain_uv = vec2(0.);
|
|
79
|
+
|
|
80
|
+
if (u_shape > 3.5) {
|
|
81
|
+
shape_uv = v_objectUV;
|
|
82
|
+
grain_uv = shape_uv;
|
|
83
|
+
|
|
84
|
+
// apply inverse transform to grain_uv so it respects the originXY
|
|
85
|
+
float r = u_rotation * 3.14159265358979323846 / 180.;
|
|
86
|
+
mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));
|
|
87
|
+
vec2 graphicOffset = vec2(-u_offsetX, u_offsetY);
|
|
88
|
+
grain_uv = transpose(graphicRotation) * grain_uv;
|
|
89
|
+
grain_uv *= u_scale;
|
|
90
|
+
grain_uv -= graphicOffset;
|
|
91
|
+
grain_uv *= v_objectBoxSize;
|
|
92
|
+
grain_uv *= .5;
|
|
93
|
+
} else {
|
|
94
|
+
shape_uv = .005 * v_patternUV;
|
|
95
|
+
grain_uv = v_patternUV;
|
|
96
|
+
|
|
97
|
+
// apply inverse transform to grain_uv so it respects the originXY
|
|
98
|
+
float r = u_rotation * 3.14159265358979323846 / 180.;
|
|
99
|
+
mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));
|
|
100
|
+
vec2 graphicOffset = vec2(-u_offsetX, u_offsetY);
|
|
101
|
+
grain_uv = transpose(graphicRotation) * grain_uv;
|
|
102
|
+
grain_uv *= u_scale;
|
|
103
|
+
if (u_fit > 0.) {
|
|
104
|
+
vec2 givenBoxSize = vec2(u_worldWidth, u_worldHeight);
|
|
105
|
+
givenBoxSize = max(givenBoxSize, vec2(1.)) * u_pixelRatio;
|
|
106
|
+
float patternBoxRatio = givenBoxSize.x / givenBoxSize.y;
|
|
107
|
+
vec2 patternBoxGivenSize = vec2(
|
|
108
|
+
(u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,
|
|
109
|
+
(u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y
|
|
110
|
+
);
|
|
111
|
+
patternBoxRatio = patternBoxGivenSize.x / patternBoxGivenSize.y;
|
|
112
|
+
float patternBoxNoFitBoxWidth = patternBoxRatio * min(patternBoxGivenSize.x / patternBoxRatio, patternBoxGivenSize.y);
|
|
113
|
+
grain_uv /= (patternBoxNoFitBoxWidth / v_patternBoxSize.x);
|
|
114
|
+
}
|
|
115
|
+
vec2 patternBoxScale = u_resolution.xy / v_patternBoxSize;
|
|
116
|
+
grain_uv -= graphicOffset / patternBoxScale;
|
|
75
117
|
}
|
|
76
118
|
|
|
77
119
|
|
|
@@ -80,7 +122,7 @@ void main() {
|
|
|
80
122
|
if (u_shape < 1.5) {
|
|
81
123
|
// Sine wave
|
|
82
124
|
|
|
83
|
-
float wave = cos(.5 * shape_uv.x -
|
|
125
|
+
float wave = cos(.5 * shape_uv.x - 4. * t) * sin(1.5 * shape_uv.x + 2. * t) * (.75 + .25 * cos(6. * t));
|
|
84
126
|
shape = 1. - smoothstep(-1., 1., shape_uv.y + wave);
|
|
85
127
|
|
|
86
128
|
} else if (u_shape < 2.5) {
|
|
@@ -96,7 +138,7 @@ void main() {
|
|
|
96
138
|
} else if (u_shape < 3.5) {
|
|
97
139
|
// Truchet pattern
|
|
98
140
|
|
|
99
|
-
float n2 = valueNoise(shape_uv * .4 -
|
|
141
|
+
float n2 = valueNoise(shape_uv * .4 - 3.75 * t);
|
|
100
142
|
shape_uv.x += 10.;
|
|
101
143
|
shape_uv *= .6;
|
|
102
144
|
|
|
@@ -118,12 +160,12 @@ void main() {
|
|
|
118
160
|
shape_uv *= .6;
|
|
119
161
|
vec2 outer = vec2(.5);
|
|
120
162
|
|
|
121
|
-
vec2 bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(
|
|
163
|
+
vec2 bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(3. * t), .2 - .1 * sin(5.25 * t)));
|
|
122
164
|
vec2 tr = smoothstep(vec2(0.), outer, 1. - shape_uv);
|
|
123
165
|
shape = 1. - bl.x * bl.y * tr.x * tr.y;
|
|
124
166
|
|
|
125
167
|
shape_uv = -shape_uv;
|
|
126
|
-
bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(
|
|
168
|
+
bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(3. * t), .2 - .1 * cos(5.25 * t)));
|
|
127
169
|
tr = smoothstep(vec2(0.), outer, 1. - shape_uv);
|
|
128
170
|
shape -= bl.x * bl.y * tr.x * tr.y;
|
|
129
171
|
|
|
@@ -163,7 +205,7 @@ void main() {
|
|
|
163
205
|
float d = length(shape_uv);
|
|
164
206
|
float z = sqrt(1.0 - clamp(pow(d, 2.0), 0.0, 1.0));
|
|
165
207
|
vec3 pos = vec3(shape_uv, z);
|
|
166
|
-
vec3 lightPos = normalize(vec3(cos(
|
|
208
|
+
vec3 lightPos = normalize(vec3(cos(4.5 * t), 0.8, sin(3.75 * t)));
|
|
167
209
|
float lighting = dot(lightPos, pos);
|
|
168
210
|
float edge = smoothstep(1., .97, d);
|
|
169
211
|
shape = mix(.1, .5 + .5 * lighting, edge);
|
|
@@ -178,27 +220,25 @@ void main() {
|
|
|
178
220
|
|
|
179
221
|
float edge_w = fwidth(shape);
|
|
180
222
|
|
|
181
|
-
|
|
223
|
+
shape = clamp(shape - .5 / u_colorsCount, 0., 1.);
|
|
224
|
+
float totalShape = smoothstep(0., u_softness + 2. * edge_w, clamp(shape * u_colorsCount, 0., 1.));
|
|
225
|
+
float mixer = shape * (u_colorsCount - 1.);
|
|
226
|
+
|
|
182
227
|
vec4 gradient = u_colors[0];
|
|
183
228
|
gradient.rgb *= gradient.a;
|
|
184
|
-
|
|
185
229
|
for (int i = 1; i < ${grainGradientMeta.maxColorCount}; i++) {
|
|
186
230
|
if (i > int(u_colorsCount) - 1) break;
|
|
187
231
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
vec4 c = u_colors[i];
|
|
191
|
-
c.rgb *= c.a;
|
|
192
|
-
gradient = mix(gradient, c, localT);
|
|
193
|
-
}
|
|
232
|
+
float localT = clamp(mixer - float(i - 1), 0., 1.);
|
|
233
|
+
localT = smoothstep(.5 - .5 * u_softness, .5 + .5 * u_softness + edge_w, localT);
|
|
194
234
|
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
235
|
+
vec4 c = u_colors[i];
|
|
236
|
+
c.rgb *= c.a;
|
|
237
|
+
gradient = mix(gradient, c, localT);
|
|
238
|
+
}
|
|
199
239
|
|
|
200
|
-
vec3 color = gradient.rgb *
|
|
201
|
-
float opacity = gradient.a *
|
|
240
|
+
vec3 color = gradient.rgb * totalShape;
|
|
241
|
+
float opacity = gradient.a * totalShape;
|
|
202
242
|
|
|
203
243
|
vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
|
|
204
244
|
color = color + bgColor * (1.0 - opacity);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/shaders/grain-gradient.ts"],
|
|
4
|
-
"sourcesContent": ["import type { vec4 } from '../types.js';\nimport type { ShaderMotionParams } from '../shader-mount.js';\nimport {
|
|
5
|
-
"mappings": ";;;;;AAEA,
|
|
4
|
+
"sourcesContent": ["import type { vec4 } from '../types.js';\nimport type { ShaderMotionParams } from '../shader-mount.js';\nimport {\n sizingVariablesDeclaration,\n type ShaderSizingParams,\n type ShaderSizingUniforms,\n sizingDebugVariablesDeclaration,\n sizingUniformsDeclaration\n} from '../shader-sizing.js';\nimport { declareSimplexNoise, declarePI, declareRandom, declareValueNoise, colorBandingFix } from '../shader-utils.js';\n\nexport const grainGradientMeta = {\n maxColorCount: 7,\n} as const;\n\n/**\n * Multi-color gradient with noise & grain over animated abstract shapes\n *\n * Uniforms:\n * - u_colorBack (RGBA)\n * - u_colors (vec4[]), u_colorsCount (float used as integer)\n * - u_softness (0..1): blur between color bands\n * - u_intensity (0..1): distortion between color bands\n * - u_noise (0..1): grainy noise independent of softness\n * - u_shape (float used as integer):\n * ---- 1: single sine wave\n * ---- 2: dots pattern\n * ---- 3: truchet pattern\n * ---- 4: corners (2 rounded rectangles)\n * ---- 5: ripple\n * ---- 6: blob (metaballs)\n * ---- 7: circle imitating 3d look\n *\n * Note: grains are calculated using gl_FragCoord & u_resolution, meaning grains don't react to scaling and fit\n *\n */\nexport const grainGradientFragmentShader: string = `#version 300 es\nprecision mediump float;\n\nuniform float u_time;\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\n\nuniform vec4 u_colorBack;\nuniform vec4 u_colors[${grainGradientMeta.maxColorCount}];\nuniform float u_colorsCount;\nuniform float u_softness;\nuniform float u_intensity;\nuniform float u_noise;\nuniform float u_shape;\n\n${sizingVariablesDeclaration}\n${sizingDebugVariablesDeclaration}\n${sizingUniformsDeclaration}\n\nout vec4 fragColor;\n\n${declarePI}\n${declareSimplexNoise}\n${declareRandom}\n${declareValueNoise}\n\n\nfloat rand(vec2 n) {\n return fract(cos(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);\n}\nfloat noise(vec2 n) {\n const vec2 d = vec2(0.0, 1.0);\n vec2 b = floor(n), f = smoothstep(vec2(0.0), vec2(1.0), fract(n));\n return mix(mix(rand(b), rand(b + d.yx), f.x), mix(rand(b + d.xy), rand(b + d.yy), f.x), f.y);\n}\nfloat fbm_4(vec2 n) {\n float total = 0.0, amplitude = .2;\n for (int i = 0; i < 4; i++) {\n total += noise(n) * amplitude;\n n += n;\n amplitude *= 0.6;\n }\n return total;\n}\n\n\nvec2 truchet(vec2 uv, float idx){\n idx = fract(((idx - .5) * 2.));\n if (idx > 0.75) {\n uv = vec2(1.0) - uv;\n } else if (idx > 0.5) {\n uv = vec2(1.0 - uv.x, uv.y);\n } else if (idx > 0.25) {\n uv = 1.0 - vec2(1.0 - uv.x, uv.y);\n }\n return uv;\n}\n\nvoid main() {\n\n float t = .1 * u_time;\n \n vec2 shape_uv = vec2(0.);\n vec2 grain_uv = vec2(0.);\n\n if (u_shape > 3.5) {\n shape_uv = v_objectUV;\n grain_uv = shape_uv;\n\n // apply inverse transform to grain_uv so it respects the originXY\n float r = u_rotation * 3.14159265358979323846 / 180.;\n mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));\n vec2 graphicOffset = vec2(-u_offsetX, u_offsetY); \n grain_uv = transpose(graphicRotation) * grain_uv;\n grain_uv *= u_scale;\n grain_uv -= graphicOffset;\n grain_uv *= v_objectBoxSize;\n grain_uv *= .5;\n } else {\n shape_uv = .005 * v_patternUV;\n grain_uv = v_patternUV;\n \n // apply inverse transform to grain_uv so it respects the originXY\n float r = u_rotation * 3.14159265358979323846 / 180.;\n mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));\n vec2 graphicOffset = vec2(-u_offsetX, u_offsetY); \n grain_uv = transpose(graphicRotation) * grain_uv;\n grain_uv *= u_scale;\n if (u_fit > 0.) {\n vec2 givenBoxSize = vec2(u_worldWidth, u_worldHeight);\n givenBoxSize = max(givenBoxSize, vec2(1.)) * u_pixelRatio;\n float patternBoxRatio = givenBoxSize.x / givenBoxSize.y;\n vec2 patternBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n patternBoxRatio = patternBoxGivenSize.x / patternBoxGivenSize.y;\n float patternBoxNoFitBoxWidth = patternBoxRatio * min(patternBoxGivenSize.x / patternBoxRatio, patternBoxGivenSize.y);\n grain_uv /= (patternBoxNoFitBoxWidth / v_patternBoxSize.x);\n }\n vec2 patternBoxScale = u_resolution.xy / v_patternBoxSize;\n grain_uv -= graphicOffset / patternBoxScale;\n }\n\n\n float shape = 0.;\n\n if (u_shape < 1.5) {\n // Sine wave\n\n float wave = cos(.5 * shape_uv.x - 4. * t) * sin(1.5 * shape_uv.x + 2. * t) * (.75 + .25 * cos(6. * t));\n shape = 1. - smoothstep(-1., 1., shape_uv.y + wave);\n\n } else if (u_shape < 2.5) {\n // Grid (dots)\n\n float stripeIdx = floor(2. * shape_uv.x / TWO_PI);\n float rand = fract(sin(stripeIdx * 12.9898) * 43758.5453);\n\n float speed = sign(rand - .5) * ceil(2. + rand);\n shape = sin(shape_uv.x) * cos(shape_uv.y + speed * t);\n shape = pow(shape, 4.);\n\n } else if (u_shape < 3.5) {\n // Truchet pattern\n \n float n2 = valueNoise(shape_uv * .4 - 3.75 * t);\n shape_uv.x += 10.;\n shape_uv *= .6;\n\n vec2 tile = truchet(fract(shape_uv), random(floor(shape_uv)));\n\n float distance1 = length(tile);\n float distance2 = length(tile - vec2(1.));\n\n n2 -= .5;\n n2 *= .1;\n shape = smoothstep(.2, .55, distance1 + n2) * smoothstep(.8, .45, distance1 - n2);\n shape += smoothstep(.2, .55, distance2 + n2) * smoothstep(.8, .45, distance2 - n2);\n\n shape = pow(shape, 1.5);\n\n } else if (u_shape < 4.5) {\n // Corners\n\n shape_uv *= .6;\n vec2 outer = vec2(.5);\n\n vec2 bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(3. * t), .2 - .1 * sin(5.25 * t)));\n vec2 tr = smoothstep(vec2(0.), outer, 1. - shape_uv);\n shape = 1. - bl.x * bl.y * tr.x * tr.y;\n\n shape_uv = -shape_uv;\n bl = smoothstep(vec2(0.), outer, shape_uv + vec2(.1 + .1 * sin(3. * t), .2 - .1 * cos(5.25 * t)));\n tr = smoothstep(vec2(0.), outer, 1. - shape_uv);\n shape -= bl.x * bl.y * tr.x * tr.y;\n\n shape = 1. - smoothstep(0., 1., shape);\n\n } else if (u_shape < 5.5) {\n // Ripple\n\n shape_uv *= 2.;\n float dist = length(.4 * shape_uv);\n float waves = sin(pow(dist, 1.2) * 5. - 3. * t) * .5 + .5;\n shape = waves;\n\n } else if (u_shape < 6.5) {\n // Blob\n\n t *= 2.;\n\n vec2 f1_traj = .25 * vec2(1.3 * sin(t), .2 + 1.3 * cos(.6 * t + 4.));\n vec2 f2_traj = .2 * vec2(1.2 * sin(-t), 1.3 * sin(1.6 * t));\n vec2 f3_traj = .25 * vec2(1.7 * cos(-.6 * t), cos(-1.6 * t));\n vec2 f4_traj = .3 * vec2(1.4 * cos(.8 * t), 1.2 * sin(-.6 * t - 3.));\n\n shape = .5 * pow(1. - clamp(0., 1., length(shape_uv + f1_traj)), 5.);\n shape += .5 * pow(1. - clamp(0., 1., length(shape_uv + f2_traj)), 5.);\n shape += .5 * pow(1. - clamp(0., 1., length(shape_uv + f3_traj)), 5.);\n shape += .5 * pow(1. - clamp(0., 1., length(shape_uv + f4_traj)), 5.);\n\n shape = smoothstep(.0, .9, shape);\n float edge = smoothstep(.25, .3, shape);\n shape = mix(.0, shape, edge);\n\n } else {\n // Sphere\n\n shape_uv *= 2.;\n float d = length(shape_uv);\n float z = sqrt(1.0 - clamp(pow(d, 2.0), 0.0, 1.0));\n vec3 pos = vec3(shape_uv, z);\n vec3 lightPos = normalize(vec3(cos(4.5 * t), 0.8, sin(3.75 * t)));\n float lighting = dot(lightPos, pos);\n float edge = smoothstep(1., .97, d);\n shape = mix(.1, .5 + .5 * lighting, edge);\n }\n\n float snoise05 = snoise(grain_uv * .5);\n float grainDist = snoise(grain_uv * .2) * snoise05 - fbm_4(.002 * grain_uv + 10.) - fbm_4(.003 * grain_uv);\n float noise = clamp(.6 * snoise05 - fbm_4(.4 * grain_uv) - fbm_4(.001 * grain_uv), 0., 1.);\n\n shape += u_intensity * 2. / u_colorsCount * (grainDist + .5);\n shape += u_noise * 10. / u_colorsCount * noise;\n\n float edge_w = fwidth(shape);\n\n shape = clamp(shape - .5 / u_colorsCount, 0., 1.);\n float totalShape = smoothstep(0., u_softness + 2. * edge_w, clamp(shape * u_colorsCount, 0., 1.));\n float mixer = shape * (u_colorsCount - 1.);\n\n vec4 gradient = u_colors[0];\n gradient.rgb *= gradient.a;\n for (int i = 1; i < ${grainGradientMeta.maxColorCount}; i++) {\n if (i > int(u_colorsCount) - 1) break;\n\n float localT = clamp(mixer - float(i - 1), 0., 1.);\n localT = smoothstep(.5 - .5 * u_softness, .5 + .5 * u_softness + edge_w, localT);\n\n vec4 c = u_colors[i];\n c.rgb *= c.a;\n gradient = mix(gradient, c, localT);\n }\n\n vec3 color = gradient.rgb * totalShape;\n float opacity = gradient.a * totalShape;\n\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n color = color + bgColor * (1.0 - opacity);\n opacity = opacity + u_colorBack.a * (1.0 - opacity);\n\n ${colorBandingFix}\n\n fragColor = vec4(color, opacity);\n}\n`;\n\nexport interface GrainGradientUniforms extends ShaderSizingUniforms {\n u_colorBack: [number, number, number, number];\n u_colors: vec4[];\n u_colorsCount: number;\n u_softness: number;\n u_intensity: number;\n u_noise: number;\n u_shape: (typeof GrainGradientShapes)[GrainGradientShape];\n}\n\nexport interface GrainGradientParams extends ShaderSizingParams, ShaderMotionParams {\n colorBack?: string;\n colors?: string[];\n softness?: number;\n intensity?: number;\n noise?: number;\n shape?: GrainGradientShape;\n}\n\nexport const GrainGradientShapes = {\n wave: 1,\n dots: 2,\n truchet: 3,\n corners: 4,\n ripple: 5,\n blob: 6,\n sphere: 7,\n};\n\nexport type GrainGradientShape = keyof typeof GrainGradientShapes;\n"],
|
|
5
|
+
"mappings": ";;;;;AAEA;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,OACK;AACP,SAAS,qBAAqB,WAAW,eAAe,mBAAmB,uBAAuB;AAE3F,MAAM,oBAAoB;AAAA,EAC/B,eAAe;AACjB;AAuBO,MAAM,8BAAsC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAQ3B,kBAAkB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOrD,0BAA0B;AAAA,EAC1B,+BAA+B;AAAA,EAC/B,yBAAyB;AAAA;AAAA;AAAA;AAAA,EAIzB,SAAS;AAAA,EACT,mBAAmB;AAAA,EACnB,aAAa;AAAA,EACb,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBA8LK,kBAAkB,aAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAkBnD,eAAe;AAAA;AAAA;AAAA;AAAA;AAyBZ,MAAM,sBAAsB;AAAA,EACjC,MAAM;AAAA,EACN,MAAM;AAAA,EACN,SAAS;AAAA,EACT,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,QAAQ;AACV;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|