textmode.js 0.0.2 → 0.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/textmode.esm.js +628 -491
- package/dist/textmode.umd.js +6 -6
- package/dist/types/Textmode.d.ts +35 -0
- package/dist/types/index.d.ts +3 -0
- package/dist/types/rendering/Renderer.d.ts +1 -0
- package/dist/types/textmode/ConversionPipeline.d.ts +18 -0
- package/dist/types/textmode/Textmodifier.d.ts +51 -10
- package/dist/types/textmode/converters/Converter.d.ts +23 -0
- package/dist/types/textmode/converters/FeatureConverter.d.ts +2 -17
- package/dist/types/textmode/converters/index.d.ts +3 -0
- package/package.json +5 -8
package/dist/textmode.esm.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var E = (
|
|
4
|
-
class
|
|
5
|
-
constructor(
|
|
1
|
+
var v = Object.defineProperty;
|
|
2
|
+
var F = (n, e, A) => e in n ? v(n, e, { enumerable: !0, configurable: !0, writable: !0, value: A }) : n[e] = A;
|
|
3
|
+
var E = (n, e, A) => F(n, typeof e != "symbol" ? e + "" : e, A);
|
|
4
|
+
class y {
|
|
5
|
+
constructor(e, A, t, r = {}) {
|
|
6
6
|
E(this, "gl");
|
|
7
7
|
E(this, "_framebuffer");
|
|
8
8
|
E(this, "_texture");
|
|
@@ -11,31 +11,31 @@ class x {
|
|
|
11
11
|
E(this, "options");
|
|
12
12
|
E(this, "previousFramebuffer", null);
|
|
13
13
|
E(this, "previousViewport", [0, 0, 0, 0]);
|
|
14
|
-
this.gl =
|
|
14
|
+
this.gl = e, this._width = A, this._height = t, this.options = {
|
|
15
15
|
filter: "nearest",
|
|
16
16
|
wrap: "clamp",
|
|
17
17
|
format: "rgba",
|
|
18
18
|
type: "unsigned_byte",
|
|
19
|
-
...
|
|
19
|
+
...r
|
|
20
20
|
}, this._texture = this.createTexture(), this._framebuffer = this.gl.createFramebuffer(), this.attachTexture();
|
|
21
21
|
}
|
|
22
22
|
createTexture() {
|
|
23
|
-
const
|
|
24
|
-
this.gl.bindTexture(this.gl.TEXTURE_2D,
|
|
25
|
-
const
|
|
26
|
-
this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER,
|
|
27
|
-
const
|
|
23
|
+
const e = this.gl.createTexture();
|
|
24
|
+
this.gl.bindTexture(this.gl.TEXTURE_2D, e);
|
|
25
|
+
const A = this.options.filter === "linear" ? this.gl.LINEAR : this.gl.NEAREST, t = this.options.wrap === "repeat" ? this.gl.REPEAT : this.gl.CLAMP_TO_EDGE;
|
|
26
|
+
this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, A), this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, A), this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, t), this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, t);
|
|
27
|
+
const r = this.options.format === "rgb" ? this.gl.RGB : this.gl.RGBA, B = this.options.type === "float" ? this.gl.FLOAT : this.gl.UNSIGNED_BYTE;
|
|
28
28
|
return this.gl.texImage2D(
|
|
29
29
|
this.gl.TEXTURE_2D,
|
|
30
30
|
0,
|
|
31
|
-
|
|
31
|
+
r,
|
|
32
32
|
this._width,
|
|
33
33
|
this._height,
|
|
34
34
|
0,
|
|
35
|
-
B,
|
|
36
35
|
r,
|
|
36
|
+
B,
|
|
37
37
|
null
|
|
38
|
-
), this.gl.bindTexture(this.gl.TEXTURE_2D, null),
|
|
38
|
+
), this.gl.bindTexture(this.gl.TEXTURE_2D, null), e;
|
|
39
39
|
}
|
|
40
40
|
attachTexture() {
|
|
41
41
|
this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this._framebuffer), this.gl.framebufferTexture2D(
|
|
@@ -49,22 +49,22 @@ class x {
|
|
|
49
49
|
/**
|
|
50
50
|
* Update the framebuffer texture with canvas content
|
|
51
51
|
*/
|
|
52
|
-
update(
|
|
52
|
+
update(e) {
|
|
53
53
|
this.gl.bindTexture(this.gl.TEXTURE_2D, this._texture), this.gl.texImage2D(
|
|
54
54
|
this.gl.TEXTURE_2D,
|
|
55
55
|
0,
|
|
56
56
|
this.gl.RGBA,
|
|
57
57
|
this.gl.RGBA,
|
|
58
58
|
this.gl.UNSIGNED_BYTE,
|
|
59
|
-
|
|
59
|
+
e
|
|
60
60
|
), this.gl.bindTexture(this.gl.TEXTURE_2D, null);
|
|
61
61
|
}
|
|
62
62
|
/**
|
|
63
63
|
* Resize the framebuffer
|
|
64
64
|
*/
|
|
65
|
-
resize(
|
|
66
|
-
this._width =
|
|
67
|
-
const t = this.options.format === "rgb" ? this.gl.RGB : this.gl.RGBA,
|
|
65
|
+
resize(e, A) {
|
|
66
|
+
this._width = e, this._height = A, this.gl.bindTexture(this.gl.TEXTURE_2D, this._texture);
|
|
67
|
+
const t = this.options.format === "rgb" ? this.gl.RGB : this.gl.RGBA, r = this.options.type === "float" ? this.gl.FLOAT : this.gl.UNSIGNED_BYTE;
|
|
68
68
|
this.gl.texImage2D(
|
|
69
69
|
this.gl.TEXTURE_2D,
|
|
70
70
|
0,
|
|
@@ -73,7 +73,7 @@ class x {
|
|
|
73
73
|
this._height,
|
|
74
74
|
0,
|
|
75
75
|
t,
|
|
76
|
-
|
|
76
|
+
r,
|
|
77
77
|
null
|
|
78
78
|
);
|
|
79
79
|
}
|
|
@@ -114,48 +114,48 @@ class x {
|
|
|
114
114
|
return this._height;
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
-
class
|
|
118
|
-
constructor(
|
|
117
|
+
class G {
|
|
118
|
+
constructor(e, A, t, r, B) {
|
|
119
119
|
/** The WebGL rendering context */
|
|
120
120
|
E(this, "gl");
|
|
121
121
|
/** The buffer containing the rectangle vertices */
|
|
122
122
|
E(this, "buffer");
|
|
123
123
|
/** The number of vertices in the rectangle */
|
|
124
124
|
E(this, "numVertices");
|
|
125
|
-
this.gl =
|
|
126
|
-
const Q =
|
|
125
|
+
this.gl = e;
|
|
126
|
+
const Q = e.getParameter(e.VIEWPORT), g = Q[2], i = Q[3];
|
|
127
127
|
if (g <= 0 || i <= 0)
|
|
128
128
|
throw new Error(`Invalid viewport dimensions: ${g}x${i}`);
|
|
129
|
-
const s =
|
|
130
|
-
(s < -1 || s > 1 ||
|
|
131
|
-
const c =
|
|
129
|
+
const s = A / g * 2 - 1, o = 1 - t / i * 2, a = (A + r) / g * 2 - 1, h = 1 - (t + B) / i * 2;
|
|
130
|
+
(s < -1 || s > 1 || a < -1 || a > 1 || o < -1 || o > 1 || h < -1 || h > 1) && console.warn(`Rectangle coordinates outside NDC range: x1=${s}, y1=${o}, x2=${a}, y2=${h}`);
|
|
131
|
+
const c = e.getParameter(e.FRAMEBUFFER_BINDING) !== null ? new Float32Array([
|
|
132
132
|
s,
|
|
133
133
|
h,
|
|
134
134
|
0,
|
|
135
135
|
0,
|
|
136
136
|
// bottom-left
|
|
137
|
-
|
|
137
|
+
a,
|
|
138
138
|
h,
|
|
139
139
|
1,
|
|
140
140
|
0,
|
|
141
141
|
// bottom-right
|
|
142
142
|
s,
|
|
143
|
-
|
|
143
|
+
o,
|
|
144
144
|
0,
|
|
145
145
|
1,
|
|
146
146
|
// top-left
|
|
147
147
|
s,
|
|
148
|
-
|
|
148
|
+
o,
|
|
149
149
|
0,
|
|
150
150
|
1,
|
|
151
151
|
// top-left
|
|
152
|
-
|
|
152
|
+
a,
|
|
153
153
|
h,
|
|
154
154
|
1,
|
|
155
155
|
0,
|
|
156
156
|
// bottom-right
|
|
157
|
+
a,
|
|
157
158
|
o,
|
|
158
|
-
n,
|
|
159
159
|
1,
|
|
160
160
|
1
|
|
161
161
|
// top-right
|
|
@@ -165,79 +165,79 @@ class F {
|
|
|
165
165
|
0,
|
|
166
166
|
1,
|
|
167
167
|
// bottom-left
|
|
168
|
-
|
|
168
|
+
a,
|
|
169
169
|
h,
|
|
170
170
|
1,
|
|
171
171
|
1,
|
|
172
172
|
// bottom-right
|
|
173
173
|
s,
|
|
174
|
-
|
|
174
|
+
o,
|
|
175
175
|
0,
|
|
176
176
|
0,
|
|
177
177
|
// top-left
|
|
178
178
|
s,
|
|
179
|
-
|
|
179
|
+
o,
|
|
180
180
|
0,
|
|
181
181
|
0,
|
|
182
182
|
// top-left
|
|
183
|
-
|
|
183
|
+
a,
|
|
184
184
|
h,
|
|
185
185
|
1,
|
|
186
186
|
1,
|
|
187
187
|
// bottom-right
|
|
188
|
+
a,
|
|
188
189
|
o,
|
|
189
|
-
n,
|
|
190
190
|
1,
|
|
191
191
|
0
|
|
192
192
|
// top-right
|
|
193
193
|
]);
|
|
194
|
-
this.numVertices = 6, this.buffer =
|
|
194
|
+
this.numVertices = 6, this.buffer = e.createBuffer(), e.bindBuffer(e.ARRAY_BUFFER, this.buffer), e.bufferData(e.ARRAY_BUFFER, c, e.STATIC_DRAW);
|
|
195
195
|
}
|
|
196
196
|
/**
|
|
197
197
|
* Draw the quad using attribute locations from the current shader
|
|
198
198
|
*/
|
|
199
199
|
draw() {
|
|
200
200
|
this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.buffer);
|
|
201
|
-
let
|
|
202
|
-
this.gl.enableVertexAttribArray(
|
|
201
|
+
let e = 0, A = 1;
|
|
202
|
+
this.gl.enableVertexAttribArray(e), this.gl.vertexAttribPointer(e, 2, this.gl.FLOAT, !1, 16, 0), this.gl.enableVertexAttribArray(A), this.gl.vertexAttribPointer(A, 2, this.gl.FLOAT, !1, 16, 8), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.numVertices), this.gl.disableVertexAttribArray(e), this.gl.disableVertexAttribArray(A);
|
|
203
203
|
}
|
|
204
204
|
}
|
|
205
205
|
class P {
|
|
206
|
-
constructor(
|
|
206
|
+
constructor(e, A, t) {
|
|
207
207
|
E(this, "gl");
|
|
208
208
|
E(this, "program");
|
|
209
209
|
E(this, "uniformLocations", /* @__PURE__ */ new Map());
|
|
210
210
|
E(this, "attributeLocations", /* @__PURE__ */ new Map());
|
|
211
211
|
E(this, "textureUnitCounter", 0);
|
|
212
|
-
this.gl =
|
|
212
|
+
this.gl = e, this.program = this.createProgram(A, t), this.cacheLocations();
|
|
213
213
|
}
|
|
214
|
-
createProgram(
|
|
215
|
-
const t = this.createShader(this.gl.VERTEX_SHADER,
|
|
216
|
-
if (this.gl.attachShader(
|
|
217
|
-
const Q = this.gl.getProgramInfoLog(
|
|
214
|
+
createProgram(e, A) {
|
|
215
|
+
const t = this.createShader(this.gl.VERTEX_SHADER, e), r = this.createShader(this.gl.FRAGMENT_SHADER, A), B = this.gl.createProgram();
|
|
216
|
+
if (this.gl.attachShader(B, t), this.gl.attachShader(B, r), this.gl.linkProgram(B), !this.gl.getProgramParameter(B, this.gl.LINK_STATUS)) {
|
|
217
|
+
const Q = this.gl.getProgramInfoLog(B);
|
|
218
218
|
throw new Error(`Shader program link error: ${Q}`);
|
|
219
219
|
}
|
|
220
|
-
return this.gl.deleteShader(t), this.gl.deleteShader(
|
|
220
|
+
return this.gl.deleteShader(t), this.gl.deleteShader(r), B;
|
|
221
221
|
}
|
|
222
|
-
createShader(
|
|
223
|
-
const t = this.gl.createShader(
|
|
224
|
-
return this.gl.shaderSource(t,
|
|
222
|
+
createShader(e, A) {
|
|
223
|
+
const t = this.gl.createShader(e);
|
|
224
|
+
return this.gl.shaderSource(t, A), this.gl.compileShader(t), t;
|
|
225
225
|
}
|
|
226
226
|
cacheLocations() {
|
|
227
|
-
const
|
|
228
|
-
for (let t = 0; t <
|
|
229
|
-
const
|
|
230
|
-
if (
|
|
231
|
-
const
|
|
232
|
-
|
|
227
|
+
const e = this.gl.getProgramParameter(this.program, this.gl.ACTIVE_UNIFORMS);
|
|
228
|
+
for (let t = 0; t < e; t++) {
|
|
229
|
+
const r = this.gl.getActiveUniform(this.program, t);
|
|
230
|
+
if (r) {
|
|
231
|
+
const B = this.gl.getUniformLocation(this.program, r.name);
|
|
232
|
+
B && this.uniformLocations.set(r.name, B);
|
|
233
233
|
}
|
|
234
234
|
}
|
|
235
|
-
const
|
|
236
|
-
for (let t = 0; t <
|
|
237
|
-
const
|
|
238
|
-
if (
|
|
239
|
-
const
|
|
240
|
-
this.attributeLocations.set(
|
|
235
|
+
const A = this.gl.getProgramParameter(this.program, this.gl.ACTIVE_ATTRIBUTES);
|
|
236
|
+
for (let t = 0; t < A; t++) {
|
|
237
|
+
const r = this.gl.getActiveAttrib(this.program, t);
|
|
238
|
+
if (r) {
|
|
239
|
+
const B = this.gl.getAttribLocation(this.program, r.name);
|
|
240
|
+
this.attributeLocations.set(r.name, B);
|
|
241
241
|
}
|
|
242
242
|
}
|
|
243
243
|
}
|
|
@@ -250,34 +250,34 @@ class P {
|
|
|
250
250
|
/**
|
|
251
251
|
* Set a single uniform value with automatic texture unit management
|
|
252
252
|
*/
|
|
253
|
-
setUniform(
|
|
254
|
-
const t = this.uniformLocations.get(
|
|
255
|
-
if (typeof
|
|
256
|
-
this.gl.uniform1f(t,
|
|
257
|
-
else if (typeof
|
|
258
|
-
this.gl.uniform1i(t,
|
|
259
|
-
else if (Array.isArray(
|
|
260
|
-
switch (
|
|
253
|
+
setUniform(e, A) {
|
|
254
|
+
const t = this.uniformLocations.get(e);
|
|
255
|
+
if (typeof A == "number")
|
|
256
|
+
this.gl.uniform1f(t, A);
|
|
257
|
+
else if (typeof A == "boolean")
|
|
258
|
+
this.gl.uniform1i(t, A ? 1 : 0);
|
|
259
|
+
else if (Array.isArray(A))
|
|
260
|
+
switch (A.length) {
|
|
261
261
|
case 2:
|
|
262
|
-
this.gl.uniform2f(t,
|
|
262
|
+
this.gl.uniform2f(t, A[0], A[1]);
|
|
263
263
|
break;
|
|
264
264
|
case 3:
|
|
265
|
-
this.gl.uniform3f(t,
|
|
265
|
+
this.gl.uniform3f(t, A[0], A[1], A[2]);
|
|
266
266
|
break;
|
|
267
267
|
case 4:
|
|
268
|
-
this.gl.uniform4f(t,
|
|
268
|
+
this.gl.uniform4f(t, A[0], A[1], A[2], A[3]);
|
|
269
269
|
break;
|
|
270
270
|
default:
|
|
271
|
-
console.warn(`Unsupported array length ${
|
|
271
|
+
console.warn(`Unsupported array length ${A.length} for uniform '${e}'`);
|
|
272
272
|
}
|
|
273
|
-
else if (
|
|
274
|
-
const
|
|
275
|
-
this.gl.uniform1i(t,
|
|
276
|
-
} else if (
|
|
277
|
-
const
|
|
278
|
-
this.gl.uniform1i(t,
|
|
273
|
+
else if (A instanceof WebGLTexture) {
|
|
274
|
+
const r = this.getNextTextureUnit();
|
|
275
|
+
this.gl.uniform1i(t, r), this.gl.activeTexture(this.gl.TEXTURE0 + r), this.gl.bindTexture(this.gl.TEXTURE_2D, A);
|
|
276
|
+
} else if (A && typeof A == "object" && "texture" in A) {
|
|
277
|
+
const r = this.getNextTextureUnit();
|
|
278
|
+
this.gl.uniform1i(t, r), this.gl.activeTexture(this.gl.TEXTURE0 + r), this.gl.bindTexture(this.gl.TEXTURE_2D, A.texture);
|
|
279
279
|
} else
|
|
280
|
-
console.warn(`Unsupported uniform type for '${
|
|
280
|
+
console.warn(`Unsupported uniform type for '${e}':`, typeof A);
|
|
281
281
|
}
|
|
282
282
|
getNextTextureUnit() {
|
|
283
283
|
return this.textureUnitCounter++;
|
|
@@ -289,13 +289,13 @@ class P {
|
|
|
289
289
|
this.textureUnitCounter = 0;
|
|
290
290
|
}
|
|
291
291
|
}
|
|
292
|
-
var u = "attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}",
|
|
293
|
-
class
|
|
294
|
-
constructor(
|
|
292
|
+
var u = "attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", M = "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}";
|
|
293
|
+
class U {
|
|
294
|
+
constructor(e) {
|
|
295
295
|
E(this, "gl");
|
|
296
296
|
E(this, "imageShader");
|
|
297
297
|
E(this, "currentShader", null);
|
|
298
|
-
this.gl =
|
|
298
|
+
this.gl = e, this.imageShader = new P(this.gl, u, M), this.setupDefaultState();
|
|
299
299
|
}
|
|
300
300
|
setupDefaultState() {
|
|
301
301
|
this.gl.enable(this.gl.BLEND), this.gl.blendFunc(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA), this.gl.disable(this.gl.DEPTH_TEST);
|
|
@@ -303,38 +303,41 @@ class y {
|
|
|
303
303
|
/**
|
|
304
304
|
* Set the current shader (p5.js-like API)
|
|
305
305
|
*/
|
|
306
|
-
shader(
|
|
307
|
-
this.currentShader =
|
|
306
|
+
shader(e) {
|
|
307
|
+
this.currentShader = e, e.use();
|
|
308
|
+
}
|
|
309
|
+
createShader(e, A) {
|
|
310
|
+
return new P(this.gl, e, A);
|
|
308
311
|
}
|
|
309
312
|
/**
|
|
310
313
|
* Set a uniform value for the current shader (p5.js-like API)
|
|
311
314
|
*/
|
|
312
|
-
setUniform(
|
|
313
|
-
this.currentShader.setUniform(
|
|
315
|
+
setUniform(e, A) {
|
|
316
|
+
this.currentShader.setUniform(e, A);
|
|
314
317
|
}
|
|
315
318
|
/**
|
|
316
319
|
* Draw a rectangle with the current shader (p5.js-like API)
|
|
317
320
|
*/
|
|
318
|
-
rect(
|
|
319
|
-
new
|
|
321
|
+
rect(e, A, t, r) {
|
|
322
|
+
new G(this.gl, e, A, t, r).draw();
|
|
320
323
|
}
|
|
321
324
|
/**
|
|
322
325
|
* Create a new framebuffer
|
|
323
326
|
*/
|
|
324
|
-
createFramebuffer(
|
|
325
|
-
return new
|
|
327
|
+
createFramebuffer(e, A, t = {}) {
|
|
328
|
+
return new y(this.gl, e, A, t);
|
|
326
329
|
}
|
|
327
330
|
/**
|
|
328
331
|
* Fill the current framebuffer with a solid color (p5.js-like API)
|
|
329
332
|
*/
|
|
330
|
-
background(
|
|
331
|
-
this.clear(
|
|
333
|
+
background(e, A = e, t = e, r = 1) {
|
|
334
|
+
this.clear(e / 255, A / 255, t / 255, r);
|
|
332
335
|
}
|
|
333
336
|
/**
|
|
334
337
|
* Clear the current framebuffer
|
|
335
338
|
*/
|
|
336
|
-
clear(
|
|
337
|
-
this.gl.clearColor(
|
|
339
|
+
clear(e = 0, A = 0, t = 0, r = 0) {
|
|
340
|
+
this.gl.clearColor(e, A, t, r), this.gl.clear(this.gl.COLOR_BUFFER_BIT);
|
|
338
341
|
}
|
|
339
342
|
/**
|
|
340
343
|
* Ensure viewport matches canvas dimensions
|
|
@@ -351,11 +354,11 @@ class y {
|
|
|
351
354
|
/**
|
|
352
355
|
* Render a framebuffer at a specific position with optional scaling
|
|
353
356
|
*/
|
|
354
|
-
image(
|
|
355
|
-
this.shader(this.imageShader), this.setUniform("u_texture",
|
|
357
|
+
image(e, A, t, r, B) {
|
|
358
|
+
this.shader(this.imageShader), this.setUniform("u_texture", e.texture), this.rect(A, t, r ?? e.width, B ?? e.height);
|
|
356
359
|
}
|
|
357
360
|
}
|
|
358
|
-
class
|
|
361
|
+
class T {
|
|
359
362
|
constructor() {
|
|
360
363
|
E(this, "bin");
|
|
361
364
|
this.bin = this.createBinaryReader();
|
|
@@ -363,98 +366,98 @@ class G {
|
|
|
363
366
|
/**
|
|
364
367
|
* Parse a font buffer and return font data
|
|
365
368
|
*/
|
|
366
|
-
parse(
|
|
367
|
-
const
|
|
369
|
+
parse(e) {
|
|
370
|
+
const A = new Uint8Array(e);
|
|
368
371
|
let t = 0;
|
|
369
|
-
if (this.bin.readASCII(
|
|
370
|
-
const
|
|
372
|
+
if (this.bin.readASCII(A, t, 4) === "ttcf") {
|
|
373
|
+
const B = this.bin.readUint(A, t + 8);
|
|
371
374
|
t += 12;
|
|
372
375
|
const Q = [];
|
|
373
|
-
for (let g = 0; g <
|
|
374
|
-
const i = this.bin.readUint(
|
|
375
|
-
t += 4, Q.push(this.readFont(
|
|
376
|
+
for (let g = 0; g < B; g++) {
|
|
377
|
+
const i = this.bin.readUint(A, t);
|
|
378
|
+
t += 4, Q.push(this.readFont(A, g, i));
|
|
376
379
|
}
|
|
377
380
|
return Q;
|
|
378
381
|
} else
|
|
379
|
-
return [this.readFont(
|
|
382
|
+
return [this.readFont(A, 0, 0)];
|
|
380
383
|
}
|
|
381
384
|
/**
|
|
382
385
|
* Find a table in the font data
|
|
383
386
|
*/
|
|
384
|
-
findTable(
|
|
385
|
-
const
|
|
386
|
-
let
|
|
387
|
-
for (let Q = 0; Q <
|
|
388
|
-
const g = this.bin.readASCII(
|
|
389
|
-
if (g ===
|
|
387
|
+
findTable(e, A, t) {
|
|
388
|
+
const r = this.bin.readUshort(e, t + 4);
|
|
389
|
+
let B = t + 12;
|
|
390
|
+
for (let Q = 0; Q < r; Q++) {
|
|
391
|
+
const g = this.bin.readASCII(e, B, 4), i = this.bin.readUint(e, B + 8), s = this.bin.readUint(e, B + 12);
|
|
392
|
+
if (g === A)
|
|
390
393
|
return [i, s];
|
|
391
|
-
|
|
394
|
+
B += 16;
|
|
392
395
|
}
|
|
393
396
|
return null;
|
|
394
397
|
}
|
|
395
398
|
/**
|
|
396
399
|
* Read font data from buffer
|
|
397
400
|
*/
|
|
398
|
-
readFont(
|
|
399
|
-
const
|
|
400
|
-
_data:
|
|
401
|
-
_index:
|
|
401
|
+
readFont(e, A, t) {
|
|
402
|
+
const r = {
|
|
403
|
+
_data: e,
|
|
404
|
+
_index: A,
|
|
402
405
|
_offset: t
|
|
403
|
-
},
|
|
406
|
+
}, B = /* @__PURE__ */ new Map(), Q = ["cmap", "head", "hhea", "maxp", "hmtx"];
|
|
404
407
|
for (const g of Q) {
|
|
405
|
-
const i = this.findTable(
|
|
408
|
+
const i = this.findTable(e, g, t);
|
|
406
409
|
if (i) {
|
|
407
|
-
const [s,
|
|
408
|
-
let
|
|
409
|
-
|
|
410
|
+
const [s, o] = i;
|
|
411
|
+
let a = B.get(s);
|
|
412
|
+
a || (a = this.parseTable(g, e, s, o, r), B.set(s, a)), r[g] = a;
|
|
410
413
|
}
|
|
411
414
|
}
|
|
412
|
-
return
|
|
415
|
+
return r;
|
|
413
416
|
}
|
|
414
417
|
/**
|
|
415
418
|
* Parse a specific table
|
|
416
419
|
*/
|
|
417
|
-
parseTable(
|
|
418
|
-
switch (
|
|
420
|
+
parseTable(e, A, t, r, B) {
|
|
421
|
+
switch (e) {
|
|
419
422
|
case "cmap":
|
|
420
|
-
return this.parseCmapTable(
|
|
423
|
+
return this.parseCmapTable(A, t, r);
|
|
421
424
|
case "head":
|
|
422
|
-
return this.parseHeadTable(
|
|
425
|
+
return this.parseHeadTable(A, t, r);
|
|
423
426
|
case "hhea":
|
|
424
|
-
return this.parseHheaTable(
|
|
427
|
+
return this.parseHheaTable(A, t, r);
|
|
425
428
|
case "hmtx":
|
|
426
|
-
return this.parseHmtxTable(
|
|
429
|
+
return this.parseHmtxTable(A, t, r, B);
|
|
427
430
|
case "maxp":
|
|
428
|
-
return this.parseMaxpTable(
|
|
431
|
+
return this.parseMaxpTable(A, t, r);
|
|
429
432
|
default:
|
|
430
|
-
throw new Error(`Unknown table: ${
|
|
433
|
+
throw new Error(`Unknown table: ${e}`);
|
|
431
434
|
}
|
|
432
435
|
}
|
|
433
436
|
/**
|
|
434
437
|
* Parse cmap table
|
|
435
438
|
*/
|
|
436
|
-
parseCmapTable(
|
|
437
|
-
const
|
|
438
|
-
let
|
|
439
|
-
|
|
440
|
-
const Q = this.bin.readUshort(
|
|
441
|
-
|
|
439
|
+
parseCmapTable(e, A, t) {
|
|
440
|
+
const r = new Uint8Array(e.buffer, A, t);
|
|
441
|
+
let B = 0;
|
|
442
|
+
B += 2;
|
|
443
|
+
const Q = this.bin.readUshort(r, B);
|
|
444
|
+
B += 2;
|
|
442
445
|
const g = {
|
|
443
446
|
tables: [],
|
|
444
447
|
ids: {},
|
|
445
|
-
off:
|
|
448
|
+
off: A
|
|
446
449
|
}, i = /* @__PURE__ */ new Set();
|
|
447
450
|
for (let s = 0; s < Q; s++) {
|
|
448
|
-
const
|
|
449
|
-
|
|
450
|
-
const
|
|
451
|
-
|
|
452
|
-
const h = this.bin.readUint(
|
|
453
|
-
|
|
454
|
-
const c = `p${
|
|
451
|
+
const o = this.bin.readUshort(r, B);
|
|
452
|
+
B += 2;
|
|
453
|
+
const a = this.bin.readUshort(r, B);
|
|
454
|
+
B += 2;
|
|
455
|
+
const h = this.bin.readUint(r, B);
|
|
456
|
+
B += 4;
|
|
457
|
+
const c = `p${o}e${a}`;
|
|
455
458
|
if (!i.has(h)) {
|
|
456
|
-
const
|
|
457
|
-
g.tables.push(
|
|
459
|
+
const _ = this.bin.readUshort(r, h), x = this.parseCmapSubtable(r, h, _);
|
|
460
|
+
g.tables.push(x), i.add(h);
|
|
458
461
|
}
|
|
459
462
|
g.ids[c] = Array.from(i).indexOf(h);
|
|
460
463
|
}
|
|
@@ -463,101 +466,101 @@ class G {
|
|
|
463
466
|
/**
|
|
464
467
|
* Parse cmap subtable based on format
|
|
465
468
|
*/
|
|
466
|
-
parseCmapSubtable(
|
|
467
|
-
const
|
|
469
|
+
parseCmapSubtable(e, A, t) {
|
|
470
|
+
const r = { format: t };
|
|
468
471
|
switch (t) {
|
|
469
472
|
case 0:
|
|
470
|
-
return this.parseCmapFormat0(
|
|
473
|
+
return this.parseCmapFormat0(e, A, r);
|
|
471
474
|
case 4:
|
|
472
|
-
return this.parseCmapFormat4(
|
|
475
|
+
return this.parseCmapFormat4(e, A, r);
|
|
473
476
|
case 6:
|
|
474
|
-
return this.parseCmapFormat6(
|
|
477
|
+
return this.parseCmapFormat6(e, A, r);
|
|
475
478
|
case 12:
|
|
476
|
-
return this.parseCmapFormat12(
|
|
479
|
+
return this.parseCmapFormat12(e, A, r);
|
|
477
480
|
default:
|
|
478
|
-
return
|
|
481
|
+
return r;
|
|
479
482
|
}
|
|
480
483
|
}
|
|
481
484
|
/**
|
|
482
485
|
* Parse cmap format 0
|
|
483
486
|
*/
|
|
484
|
-
parseCmapFormat0(
|
|
485
|
-
let
|
|
486
|
-
const
|
|
487
|
-
|
|
488
|
-
for (let Q = 0; Q <
|
|
489
|
-
t.map.push(
|
|
487
|
+
parseCmapFormat0(e, A, t) {
|
|
488
|
+
let r = A + 2;
|
|
489
|
+
const B = this.bin.readUshort(e, r);
|
|
490
|
+
r += 2, r += 2, t.map = [];
|
|
491
|
+
for (let Q = 0; Q < B - 6; Q++)
|
|
492
|
+
t.map.push(e[r + Q]);
|
|
490
493
|
return t;
|
|
491
494
|
}
|
|
492
495
|
/**
|
|
493
496
|
* Parse cmap format 4
|
|
494
497
|
*/
|
|
495
|
-
parseCmapFormat4(
|
|
496
|
-
const
|
|
497
|
-
let
|
|
498
|
-
const Q = this.bin.readUshort(
|
|
499
|
-
|
|
500
|
-
const g = this.bin.readUshort(
|
|
501
|
-
|
|
498
|
+
parseCmapFormat4(e, A, t) {
|
|
499
|
+
const r = A;
|
|
500
|
+
let B = A + 2;
|
|
501
|
+
const Q = this.bin.readUshort(e, B);
|
|
502
|
+
B += 2, B += 2;
|
|
503
|
+
const g = this.bin.readUshort(e, B);
|
|
504
|
+
B += 2;
|
|
502
505
|
const i = g >>> 1;
|
|
503
|
-
t.searchRange = this.bin.readUshort(
|
|
506
|
+
t.searchRange = this.bin.readUshort(e, B), B += 2, t.entrySelector = this.bin.readUshort(e, B), B += 2, t.rangeShift = this.bin.readUshort(e, B), B += 2, t.endCount = this.bin.readUshorts(e, B, i), B += i * 2, B += 2, t.startCount = this.bin.readUshorts(e, B, i), B += i * 2, t.idDelta = [];
|
|
504
507
|
for (let s = 0; s < i; s++)
|
|
505
|
-
t.idDelta.push(this.bin.readShort(
|
|
506
|
-
return t.idRangeOffset = this.bin.readUshorts(
|
|
508
|
+
t.idDelta.push(this.bin.readShort(e, B)), B += 2;
|
|
509
|
+
return t.idRangeOffset = this.bin.readUshorts(e, B, i), B += i * 2, t.glyphIdArray = this.bin.readUshorts(e, B, r + Q - B >> 1), t;
|
|
507
510
|
}
|
|
508
511
|
/**
|
|
509
512
|
* Parse cmap format 6
|
|
510
513
|
*/
|
|
511
|
-
parseCmapFormat6(
|
|
512
|
-
let
|
|
513
|
-
|
|
514
|
-
const
|
|
515
|
-
|
|
516
|
-
for (let Q = 0; Q <
|
|
517
|
-
t.glyphIdArray.push(this.bin.readUshort(
|
|
514
|
+
parseCmapFormat6(e, A, t) {
|
|
515
|
+
let r = A + 2;
|
|
516
|
+
r += 2, r += 2, t.firstCode = this.bin.readUshort(e, r), r += 2;
|
|
517
|
+
const B = this.bin.readUshort(e, r);
|
|
518
|
+
r += 2, t.glyphIdArray = [];
|
|
519
|
+
for (let Q = 0; Q < B; Q++)
|
|
520
|
+
t.glyphIdArray.push(this.bin.readUshort(e, r)), r += 2;
|
|
518
521
|
return t;
|
|
519
522
|
}
|
|
520
523
|
/**
|
|
521
524
|
* Parse cmap format 12
|
|
522
525
|
*/
|
|
523
|
-
parseCmapFormat12(
|
|
524
|
-
let
|
|
525
|
-
|
|
526
|
-
const
|
|
527
|
-
|
|
528
|
-
for (let Q = 0; Q <
|
|
529
|
-
t.groups[Q] = this.bin.readUint(
|
|
526
|
+
parseCmapFormat12(e, A, t) {
|
|
527
|
+
let r = A + 4;
|
|
528
|
+
r += 4, r += 4;
|
|
529
|
+
const B = this.bin.readUint(e, r) * 3;
|
|
530
|
+
r += 4, t.groups = new Uint32Array(B);
|
|
531
|
+
for (let Q = 0; Q < B; Q += 3)
|
|
532
|
+
t.groups[Q] = this.bin.readUint(e, r + (Q << 2)), t.groups[Q + 1] = this.bin.readUint(e, r + (Q << 2) + 4), t.groups[Q + 2] = this.bin.readUint(e, r + (Q << 2) + 8);
|
|
530
533
|
return t;
|
|
531
534
|
}
|
|
532
535
|
/**
|
|
533
536
|
* Parse head table
|
|
534
537
|
*/
|
|
535
|
-
parseHeadTable(
|
|
536
|
-
let
|
|
537
|
-
return
|
|
538
|
-
fontRevision: this.bin.readFixed(
|
|
539
|
-
flags: this.bin.readUshort(
|
|
540
|
-
unitsPerEm: this.bin.readUshort(
|
|
541
|
-
created: this.bin.readUint64(
|
|
542
|
-
modified: this.bin.readUint64(
|
|
543
|
-
xMin: this.bin.readShort(
|
|
544
|
-
yMin: this.bin.readShort(
|
|
545
|
-
xMax: this.bin.readShort(
|
|
546
|
-
yMax: this.bin.readShort(
|
|
547
|
-
macStyle: this.bin.readUshort(
|
|
548
|
-
lowestRecPPEM: this.bin.readUshort(
|
|
549
|
-
fontDirectionHint: this.bin.readShort(
|
|
550
|
-
indexToLocFormat: this.bin.readShort(
|
|
551
|
-
glyphDataFormat: this.bin.readShort(
|
|
538
|
+
parseHeadTable(e, A, t) {
|
|
539
|
+
let r = A;
|
|
540
|
+
return r += 4, {
|
|
541
|
+
fontRevision: this.bin.readFixed(e, r + 0),
|
|
542
|
+
flags: this.bin.readUshort(e, r + 8),
|
|
543
|
+
unitsPerEm: this.bin.readUshort(e, r + 10),
|
|
544
|
+
created: this.bin.readUint64(e, r + 12),
|
|
545
|
+
modified: this.bin.readUint64(e, r + 20),
|
|
546
|
+
xMin: this.bin.readShort(e, r + 28),
|
|
547
|
+
yMin: this.bin.readShort(e, r + 30),
|
|
548
|
+
xMax: this.bin.readShort(e, r + 32),
|
|
549
|
+
yMax: this.bin.readShort(e, r + 34),
|
|
550
|
+
macStyle: this.bin.readUshort(e, r + 36),
|
|
551
|
+
lowestRecPPEM: this.bin.readUshort(e, r + 38),
|
|
552
|
+
fontDirectionHint: this.bin.readShort(e, r + 40),
|
|
553
|
+
indexToLocFormat: this.bin.readShort(e, r + 42),
|
|
554
|
+
glyphDataFormat: this.bin.readShort(e, r + 44)
|
|
552
555
|
};
|
|
553
556
|
}
|
|
554
557
|
/**
|
|
555
558
|
* Parse hhea table
|
|
556
559
|
*/
|
|
557
|
-
parseHheaTable(
|
|
558
|
-
let
|
|
559
|
-
|
|
560
|
-
const
|
|
560
|
+
parseHheaTable(e, A, t) {
|
|
561
|
+
let r = A;
|
|
562
|
+
r += 4;
|
|
563
|
+
const B = [
|
|
561
564
|
"ascender",
|
|
562
565
|
"descender",
|
|
563
566
|
"lineGap",
|
|
@@ -575,123 +578,123 @@ class G {
|
|
|
575
578
|
"metricDataFormat",
|
|
576
579
|
"numberOfHMetrics"
|
|
577
580
|
], Q = {};
|
|
578
|
-
for (let g = 0; g <
|
|
579
|
-
const i =
|
|
580
|
-
Q[i] =
|
|
581
|
+
for (let g = 0; g < B.length; g++) {
|
|
582
|
+
const i = B[g], o = i === "advanceWidthMax" || i === "numberOfHMetrics" ? this.bin.readUshort : this.bin.readShort;
|
|
583
|
+
Q[i] = o(e, r + g * 2);
|
|
581
584
|
}
|
|
582
585
|
return Q;
|
|
583
586
|
}
|
|
584
587
|
/**
|
|
585
588
|
* Parse hmtx table
|
|
586
589
|
*/
|
|
587
|
-
parseHmtxTable(
|
|
588
|
-
const
|
|
589
|
-
let s =
|
|
590
|
+
parseHmtxTable(e, A, t, r) {
|
|
591
|
+
const B = r.maxp.numGlyphs, Q = r.hhea.numberOfHMetrics, g = [], i = [];
|
|
592
|
+
let s = A, o = 0, a = 0;
|
|
590
593
|
for (let h = 0; h < Q; h++)
|
|
591
|
-
|
|
592
|
-
for (let h = Q; h <
|
|
593
|
-
g.push(
|
|
594
|
+
o = this.bin.readUshort(e, s), a = this.bin.readShort(e, s + 2), g.push(o), i.push(a), s += 4;
|
|
595
|
+
for (let h = Q; h < B; h++)
|
|
596
|
+
g.push(o), i.push(a);
|
|
594
597
|
return { aWidth: g, lsBearing: i };
|
|
595
598
|
}
|
|
596
599
|
/**
|
|
597
600
|
* Parse maxp table
|
|
598
601
|
*/
|
|
599
|
-
parseMaxpTable(
|
|
600
|
-
let
|
|
601
|
-
|
|
602
|
-
const
|
|
603
|
-
return
|
|
602
|
+
parseMaxpTable(e, A, t) {
|
|
603
|
+
let r = A;
|
|
604
|
+
r += 4;
|
|
605
|
+
const B = this.bin.readUshort(e, r);
|
|
606
|
+
return r += 2, { numGlyphs: B };
|
|
604
607
|
}
|
|
605
608
|
/**
|
|
606
609
|
* Create optimized binary reader
|
|
607
610
|
*/
|
|
608
611
|
createBinaryReader() {
|
|
609
|
-
const
|
|
610
|
-
buff:
|
|
611
|
-
int8: new Int8Array(
|
|
612
|
-
uint8: new Uint8Array(
|
|
613
|
-
int16: new Int16Array(
|
|
614
|
-
uint16: new Uint16Array(
|
|
615
|
-
int32: new Int32Array(
|
|
616
|
-
uint32: new Uint32Array(
|
|
612
|
+
const e = new ArrayBuffer(8), A = {
|
|
613
|
+
buff: e,
|
|
614
|
+
int8: new Int8Array(e),
|
|
615
|
+
uint8: new Uint8Array(e),
|
|
616
|
+
int16: new Int16Array(e),
|
|
617
|
+
uint16: new Uint16Array(e),
|
|
618
|
+
int32: new Int32Array(e),
|
|
619
|
+
uint32: new Uint32Array(e)
|
|
617
620
|
};
|
|
618
621
|
return {
|
|
619
|
-
readFixed: (t,
|
|
620
|
-
readInt: (t,
|
|
621
|
-
readShort: (t,
|
|
622
|
-
readUshort: (t,
|
|
623
|
-
readUshorts: (t,
|
|
624
|
-
const Q = new Array(
|
|
625
|
-
for (let g = 0; g <
|
|
626
|
-
Q[g] = t[
|
|
622
|
+
readFixed: (t, r) => (t[r] << 8 | t[r + 1]) + (t[r + 2] << 8 | t[r + 3]) / (256 * 256 + 4),
|
|
623
|
+
readInt: (t, r) => (A.uint8[0] = t[r + 3], A.uint8[1] = t[r + 2], A.uint8[2] = t[r + 1], A.uint8[3] = t[r], A.int32[0]),
|
|
624
|
+
readShort: (t, r) => (A.uint16[0] = t[r] << 8 | t[r + 1], A.int16[0]),
|
|
625
|
+
readUshort: (t, r) => t[r] << 8 | t[r + 1],
|
|
626
|
+
readUshorts: (t, r, B) => {
|
|
627
|
+
const Q = new Array(B);
|
|
628
|
+
for (let g = 0; g < B; g++)
|
|
629
|
+
Q[g] = t[r + g * 2] << 8 | t[r + g * 2 + 1];
|
|
627
630
|
return Q;
|
|
628
631
|
},
|
|
629
|
-
readUint: (t,
|
|
630
|
-
readUint64: (t,
|
|
631
|
-
const
|
|
632
|
-
return
|
|
632
|
+
readUint: (t, r) => (A.uint8[3] = t[r], A.uint8[2] = t[r + 1], A.uint8[1] = t[r + 2], A.uint8[0] = t[r + 3], A.uint32[0]),
|
|
633
|
+
readUint64: (t, r) => {
|
|
634
|
+
const B = A.uint32[0] = t[r] << 24 | t[r + 1] << 16 | t[r + 2] << 8 | t[r + 3], Q = A.uint32[0] = t[r + 4] << 24 | t[r + 5] << 16 | t[r + 6] << 8 | t[r + 7];
|
|
635
|
+
return B * 4294967296 + Q;
|
|
633
636
|
},
|
|
634
|
-
readASCII: (t,
|
|
637
|
+
readASCII: (t, r, B) => {
|
|
635
638
|
let Q = "";
|
|
636
|
-
for (let g = 0; g <
|
|
637
|
-
Q += String.fromCharCode(t[
|
|
639
|
+
for (let g = 0; g < B; g++)
|
|
640
|
+
Q += String.fromCharCode(t[r + g]);
|
|
638
641
|
return Q;
|
|
639
642
|
},
|
|
640
|
-
t:
|
|
643
|
+
t: A
|
|
641
644
|
};
|
|
642
645
|
}
|
|
643
646
|
}
|
|
644
|
-
const
|
|
645
|
-
parse: (
|
|
646
|
-
findTable: (
|
|
647
|
-
}, M = `data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAA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AIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
|
|
647
|
+
const w = new T(), d = {
|
|
648
|
+
parse: (n) => w.parse(n),
|
|
649
|
+
findTable: (n, e, A) => w.findTable(n, e, A)
|
|
650
|
+
}, R = `data:font/truetype;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMs+QEyQAAAEoAAAAYGNtYXAg7yVJAAAFjAAACSBnbHlmuHLTdAAAErQAAGi0aGVhZFvXdUwAAACsAAAANmhoZWELAQUCAAAA5AAAACRobXR4BACDgAAAAYgAAAQEbG9jYQAy54AAAA6sAAAECG1heHABIgCCAAABCAAAACBuYW1lVs/OSgAAe2gAAAOicG9zdABpADQAAH8MAAAAIAABAAAAAQAAzOWHqV8PPPUAAAQAAAAAAHxiGCcAAAAAfGIYJwAAAAAEAAQAAAAACAACAAEAAAAAAAEAAAQAAAAAAAQAAAAAAAcAAAEAAAAAAAAAAAAAAAAAAAEBAAEAAAEBAIAAIAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAgQAAZAABQAEAgACAAAAAAACAAIAAAACAAAzAMwAAAAABAAAAAAAAACAAACLAABw4wAAAAAAAAAAWUFMLgBAACAmawQAAAAAAAQAAAAAAAFRAAAAAAMABAAAAAAgAAAEAAAABAAAAAQAAAAEAAGABAABAAQAAIAEAACABAAAgAQAAIAEAAGABAABAAQAAQAEAACABAABAAQAAIAEAACABAABAAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABAAQAAIAEAAEABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAAGABAAAgAQAAIAEAAGABAAAgAQAAIAEAACABAAAgAQAAIAEAAEABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAAAgAQAAIAEAACABAABgAQAAQAEAACABAAAAAQAAgAEAACABAAAgAQAAIAEAACABAACAAQAAAAEAAIABAABgAQAAgAEAACABAAAgAQAAAAEAACABAAAAAQAAAAEAAAABAAAAAQAAAAEAAIABAADAAQAAAAEAAAABAAAgAQAAYAEAAAABAAAAAQAAIAEAAAA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AIAAAACA/YAAgAAAAIAAAP8AAoABAAAA/4AAAP+A/4AAgAAAAIAAAP8AA4AAAP8AAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAP+AAAD/gAAAAAAAAP8AAAAAgAAAAAAAAP+AAAD/gAAAAAAAAwCAAIAEAAQAABcAHQAjAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAACAAAAAgAAA/4AAAACAAAD9AAAA/4AAAACAAAD/gAAAAIAAgAAAAIAAAACAAAD/AAAAAQAAAP+AAAAEAAAA/4AAAP8AAAD/gAAAAIAAAP8AAAD/gAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAP+AAAD/gAAAAQD+gP8AAAAAgAAAAIAAAAABAYACgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAP6AAAAAAAABAQAAgAMABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/oAAAP+AAAD/gAAAAIAAAACAAAABgAAAAIAAAAAAAAEBAACAAwAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAAAgAAAAIAAAAGAAAAAgAAAAAAABQCAAYADgAQAAAMABwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAIAAAP+AAYAAgAAA/4D/AAEAAAABAAAA/wAAAP8AAAD/AAAAAQD/gACAAAD/gAGAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP+AAAAAAAABAQAAgAOAAwAACwAAAQEBAQEBAQEBAQEBAgAAgAAAAQAAAP8AAAD/gAAA/wAAAAEAAwAAAP8AAAD/gAAA/wAAAAEAAAAAgAAAAAAAAQCAAAACAAGAAAcAAAEBAQEBAQEBAQABAAAA/4AAAP8AAAAAgAGAAAD/AAAA/4AAAACAAAAAAAABAIABgAOAAgAAAwAAAQEBAQCAAwAAAP0AAgAAAP+AAAAAAAABAQAAgAIAAYAAAwAAAQEBAQEAAQAAAP8AAYAAAP8AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAwCAAIADgAQAAAsAEQAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAD/gAAAAIAAgAAAAIAAAACAAAD/gAAA/4AAAAEAAAAEAAAA/4AAAP2AAAD/gAAAAIAAAAKAAAAAAP8AAAAAgAAAAID/AP+AAAD/AAAAAYAAAAABAIAAgAOABAAADQAAAQEBAQEBAQEBAQEBAQEBgAEAAAABAAAA/QAAAAEAAAD/AAAAAIAAAACABAAAAP0AAAD/gAAAAIAAAAGAAAAAgAAAAIAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAAAIAAAACAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAA/wAAAAEAAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/wAAAAEAAAD/AAAA/wAAAACABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAA/4AAAACAAAAAAAABAIAAgAOABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAP+AAAABAAAAAQAAAP8AAAD+AAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAAEAAAD9gAAAAQAAAAGAAAAAgAAAAAEAgACAA4AEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP4AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/gAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAP+AAAABAAAAAAAAAgCAAIADgAQAABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAYAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAP+AAAAAgAAAAoAAAP6A/wAAAAEAAAEAgACAA4AEAAAPAAABAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AEAAAA/oAAAP+AAAD+gAAAAYAAAACAAAABAAAA/4AAAAAAAAMAgACAA4AEAAATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAAAIAAAP+AAAD+AAAA/4AAAACAAAD/gAAAAIAAgAAAAQAAAP8AAAABAAAABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAA/wAAAAEA/oD/AAAAAQAAAAACAIAAgAOABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD+gAAA/4AAAACAAIAAAAEAAAAEAAAA/4AAAP0AAAABAAAAAIAAAAGAAAAAAP6AAAABgAACAQABAAIAA4AAAwAHAAABAQEBAQEBAQEAAQAAAP8AAAABAAAA/wADgAAA/wAAAP+AAAD/AAAAAAIAgACAAgADgAADAAsAAAEBAQEBAQEBAQEBAQEAAQAAAP8AAAABAAAA/4AAAP8AAAAAgAOAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAABAQAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQKAAQAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAACAIABgAOAAwAAAwAHAAABAQEBAQEBAQCAAwAAAP0AAAADAAAA/QADAAAA/4AAAP+AAAD/gAAAAAEAgACAAwAEAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAIAgACAA4AEAAATABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP8AAAD/AAAAAIAAgAEAAAD/AAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAA/4AAAACAAAD+AAAA/wAAAAACAIAAgAOABAAAEQAVAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP6AAAAAgAAA/wAAAAGAAAD+AAAA/4AAAACAAgAAgAAA/4AEAAAA/4AAAP6AAAABAAAAAIAAAP2AAAD/gAAAAIAAAAKAAAD+AAAA/4AAAAAAAAIAgACAA4AEAAAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAAAIAAAACAAAD/AAAA/wAAAP8AAAAAgAAAAIAAAAAAAQAAAAQAAAD/gAAA/4AAAP2AAAABAAAA/wAAAAKAAAAAgAAA/4D/AAAAAQAAAwCAAIADgAQAAAsADwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAAAIAAAP+AAAD9gAEAAAABAAAA/wAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/wAAAP+AAAADAP8AAAABAP6A/wAAAAEAAAAAAQCAAIADgAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP8AAAD/AAAAAQAAAAEAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAACAIAAgAOABAAACwATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAEAAAAAgAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+gAAA/4AAAP+AAAADAP2AAAAAgAAAAYAAAACAAAEAgACAA4AEAAAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/wAAAAEAAAABAAAA/4AAAP4AAAD/gAAAAIAEAAAA/4AAAP+AAAAAgAAA/wAAAP+AAAD/AAAAAIAAAP+AAAD/gAAAAIAAAAKAAAAAAAABAIAAgAOABAAACQAAAQEBAQEBAQEBAQCAAwAAAP4AAAABAAAA/wAAAP8ABAAAAP+AAAD/AAAA/4AAAP6AAAAAAQCAAIADgAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAA/4AAAAGAAAD/gAAA/gAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD9gAAAAQAAAACAAAD+gAAA/4AAAACAAAACgAAAAAEAgACAA4AEAAALAAABAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP8AAAD/AAAA/wAEAAAA/gAAAAIAAAD8gAAAAQAAAP8AAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIADAAAA/wAAAAEAAAD9AAAAAQAAAP8ABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAAAAQCAAIAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAMAAAD/gAAA/4AAAP4AAAD/gAAAAQAAAAEAAAD+gAQAAAD/gAAA/YAAAP+AAAAAgAAAAQAAAP8AAAACgAAAAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAAEAAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAQAAAD/AAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAAAAAQCAAIADgAQAAAUAAAEBAQEBAQCAAQAAAAIAAAD9AAQAAAD9AAAA/4AAAAABAIAAgAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8ABAAAAP+AAAD/gAAAAIAAAACAAAD8gAAAAgAAAP+AAAAAgAAA/gAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAEAAAA/4AAAP+AAAD/gAAAAYAAAPyAAAABAAAAAIAAAACAAAD+AAAAAAAAAgCAAIADgAQAAAsADwAAAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAD/gAAA/gAAAP+AAAAAgACAAAABAAAABAAAAP+AAAD9gAAA/4AAAACAAAACgAAAAAD9gAAAAoAAAgCAAIADgAQAAAkADQAAAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP6AAAD/AAEAAAABAAAABAAAAP+AAAD+gAAA/4AAAP8AAAADAP6AAAABgAAAAAIAgACABAAEAAAPABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAD/gAAAAIAAAAQAAAD/gAAA/gAAAP8AAAAAgAAA/4AAAACAAAACgAAAAAD9gAAAAIAAAACAAAABgAACAIAAgAOABAAAEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAKAAAAAgAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AAQAAAAEAAAAEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAD/AAAAAwD/AAAAAQAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABgAAAAIAAAP+AAAD+AAAA/4AAAAEAAAABAAAA/oAAAP+AAAAAgAQAAAD/gAAA/4AAAACAAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAD/gAAAAQAAAACAAAABAAAAAAAAAQCAAIADgAQAAAcAAAEBAQEBAQEBAIADAAAA/wAAAP8AAAD/AAQAAAD/gAAA/QAAAAMAAAAAAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAP+ABAAAAP0AAAADAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIADgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAD/gAAA/wAAAP+AAAD/gAQAAAD+AAAAAgAAAP4AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAIAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAQAAAP8AAAD/gAAA/4AAAP+AAAD/AAQAAAD+AAAAAIAAAP+AAAACAAAA/IAAAACAAAAAgAAA/4AAAP+AAAAAAAABAIAAgAOABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/AAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP8AAAABAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAA/wAAAAEAAAAAgAAAAIAAAACAAAAAAAABAIAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAACAAAAAAAABAIAAgAOABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADAAAA/4AAAP+AAAD/gAAA/4AAAAIAAAD9AAAAAIAAAACAAAAAgAAAAIAAAP4ABAAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/wAAAAEAAAD+AAQAAAD/gAAA/YAAAP+AAAAAAAABAIAAgAQAA4AAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AA4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADAAQAAAcAAAEBAQEBAQEBAQACAAAA/gAAAAEAAAD/AAQAAAD8gAAAAIAAAAKAAAAAAAABAIACAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAEAAAMAAAEBAQEAgAMAAAD9AAEAAAD/gAAAAAAAAQEAAoACgAQAAAkAAAEBAQEBAQEBAQEBAAEAAAAAgAAA/4AAAP+AAAD/gAQAAAD/gAAA/wAAAACAAAAAgAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQACgAAA/4AAAP+AAAD/AAAAAQAAAP6AAAD/gAAAAIADAAAA/YAAAACAAAABgAAA/oAAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/gAAA/YABAAAAAQAAAAQAAAD/AAAA/4AAAP6AAAD/gAAAAgD+gAAAAYAAAAABAIAAgAOAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP8AAAABAAAAAQAAAP+AAAD+AAAA/4AAAACAAwAAAP+AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAAAAAAIAgACAA4AEAAAJAA0AAAEBAQEBAQEBAQEBAQEBAoABAAAA/YAAAP+AAAAAgAAAAYD/AAAAAQAAAAQAAAD8gAAAAIAAAAGAAAAAgAAA/4D+gAAAAYAAAAACAIAAgAOAAwAADQARAAABAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/gAAAAGAAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP8AAAD/gAAA/4AAAACAAAABgAAAAAD/gAAAAIAAAAABAQAAgAOAA4AACwAAAQEBAQEBAQEBAQEBAYACAAAA/oAAAAEAAAD/AAAA/wAAAACAA4AAAP+AAAD/AAAA/4AAAP8AAAACgAAAAAAAAgCAAIADgAOAAA8AEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP4AAAABgAAA/oAAAP+AAAAAgACAAAABAAAAA4AAAP+AAAD+AAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAAP8AAAABAAABAIAAgAOABAAACwAAAQEBAQEBAQEBAQEBAIABAAAAAYAAAACAAAD/AAAA/wAAAP8ABAAAAP8AAAD/gAAA/gAAAAIAAAD+AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP+AAAD/gAAA/YAAAAACAIAAgAOABAAAAwAPAAABAQEBAQEBAQEBAQEBAQEBAoABAAAA/wAAAAEAAAD/gAAA/gAAAP+AAAABAAAAAQAEAAAA/4AAAP+AAAD+AAAA/4AAAACAAAABAAAA/wAAAAABAIAAgAOAA4AAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAQAAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP8AA4AAAP8AAAAAgAAA/4AAAP8AAAD/gAAA/4AAAACAAAAAgAAA/wAAAAAAAAEBgACAAwAEAAAHAAABAQEBAQEBAQGAAQAAAACAAAD/AAAA/4AEAAAA/QAAAP+AAAAAgAAAAAAAAQCAAIAEAAMAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP8AAAAAgAMAAAD/gAAAAIAAAP+AAAD+AAAAAYAAAP+AAAAAgAAA/oAAAAIAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAABAAAAAIAAAP8AAAD/gAAA/4AAAP8AAwAAAP+AAAAAgAAA/4AAAP4AAAABgAAA/4AAAP8AAAAAAAACAIAAgAOAAwAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADAAAA/4AAAP6AAAD/gAAAAIAAAAGAAAAAAP6AAAABgAACAIAAgAOAAwAACQANAAABAQEBAQEBAQEBAQEBAQCAAoAAAACAAAD/gAAA/oAAAP8AAQAAAAEAAAADAAAA/4AAAP+AAAD/gAAA/wAAAAIA/4AAAACAAAAAAgCAAIAEAAMAAA0AEQAAAQEBAQEBAQEBAQEBAQEBAQEBAQACgAAAAIAAAP+AAAD/AAAA/oAAAP+AAAAAgACAAAABAAAAAwAAAP6AAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAA/4AAAACAAAAAAQEAAIADgAMAAAkAAAEBAQEBAQEBAQEBAAIAAAAAgAAA/wAAAP+AAAD/AAMAAAD/gAAA/wAAAAEAAAD+AAAAAAEAgACABAADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP6AAAABgAAAAIAAAP+AAAD9AAAAAgAAAP6AAAD/gAAAAIADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAP8AAAAAgAAAAQAAAP+AAAD+gAAA/4AAAP+AAAAAgAOAAAD/gAAA/4AAAP6AAAAAgAAA/4AAAP+AAAAAgAAAAYAAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAACAAAAAgAAAAQAAAP+AAAD/gAAA/oAAAP+AAwAAAP4AAAAAgAAAAYAAAP2AAAAAgAAA/4AAAACAAAAAAAABAIAAgAOAAwAADwAAAQEBAQEBAQEBAQEBAQEBAQCAAQAAAAEAAAABAAAA/4AAAP+AAAD/AAAA/4AAAP+AAwAAAP6AAAABgAAA/oAAAP+AAAD/gAAAAIAAAACAAAAAAAABAIAAgAQAAwAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAAAgAAAAIAAAACAAAABAAAA/4AAAP8AAAD/gAAA/wAAAP+AAwAAAP6AAAAAgAAA/4AAAAGAAAD+AAAA/4AAAACAAAD/gAAAAIAAAAAAAAEAgACAA4ADAAAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP8AAAD/AAAAAIAAAACAAAD/gAAA/4ADAAAA/4AAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAD/gAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAIABAAAAAQAAAAEAAAD/gAAA/gAAAAGAAAD+gAAA/4ADAAAA/wAAAAEAAAD+AAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAgACAA4ADAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQCAAwAAAP+AAAD/gAAA/4AAAAGAAAD9AAAAAIAAAACAAAAAgAAA/oADAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIADAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAA/wAAAP+AAAAAgAAAAQAAAP6AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAAAAAIAAAAEAAAAAAAABAYAAgAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPyAAAAAAAABAQAAgAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAGAAAAAgAAAAIAAAP+AAAD/gAAA/oAAAAEAAAAAgAAA/4AAAP8ABAAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAQAAAAAAAAEAgAGAA4ADAAAPAAABAQEBAQEBAQEBAQEBAQEBAQABAAAAAQAAAACAAAD/gAAA/wAAAP8AAAD/gAAAAIADAAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAYAAAAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/AAAA/wAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAABAAAAAQAAAACAAAAAgAAAAAAAAQIAAAAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD8AAAAAAAAAgCAAIADgAQAABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP8AAAABAAAA/4AAAP+AAAABgAAA/QAAAACAAAAAgAAA/wAAAACAAAAAgAGAAIAAAP+ABAAAAP+AAAD/AAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAABAAAAAAAAAP+AAAAAAQCAAIADgAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAEAAAABAAAAAQAAAP+AAAAAgAAA/wAAAAEAAAD/AAAA/wAAAP8AAAABAAAA/wAAAACAAAD/gAQAAAD+gAAAAYAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABACAAIAEAAQAABcAGwAfACMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAoAAAP4AAAABgAAAAIAAAACAAAD/gAAA/YAAAAIAAAD+gAAA/4AAAP+AAAAAgAEAAAAAgAAAAQAAgAAA/4D9AACAAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/wAAAP+AAAAAgAAAAIAAAACAAAAAgAAAAQAAAP8A/4AAAACAAQAAAP+AAAD+gAAA/4AAAAAEAIAAgAQAA4AAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAQIAAAAEAAQAAAkAAAEBAQEBAQEBAQEDgACAAAD+AAAAAIAAAACAAAAAgAQAAAD8AAAAAQAAAAEAAAABAAAAAAgAAAAABAAEAAADAAcACwAPABMAFwAbAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAA/wACAAEAAAD/AP8AAQAAAP8AAgABAAAA/wD9AAEAAAD/AAIAAQAAAP8A/wABAAAA/wACAAEAAAD/AAQAAAD/AAAAAQAAAP8AAAAAAAAA/wAAAAEAAAD/AAAAAAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQIAAAADAAQAAAMAAAEBAQECAAEAAAD/AAQAAAD8AAAAAAAAAgGAAIACgAQAAAMABwAAAQEBAQEBAQEBgAEAAAD/AAAAAQAAAP8ABAAAAP6AAAD/gAAA/oAAAAABAgAAAAQAAgAAAwAAAQEBAQIAAgAAAP4AAgAAAP4AAAAAAAAEAIAAAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+ABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAAABAAAAPwAAAAAAQCAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAoABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAD/gAOAAAD+AAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAA/wAAAAEAAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAAAEAAAA/gAAAP+AAAD/gAAA/4AAAP+ABAAAAPwAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQCAAIAEAAOAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAOAAAD/gAAAAIAAAP8AAAABAAAA/oAAAAGAAAD9AAAAAIAAAP+AAAABAAAA/wAAAAGAAAD+gAAAAAAAAQAAAAACAAQAAAkAAAEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD+AAQAAAD/AAAA/wAAAP8AAAD/AAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQKAAYAAAP8AAAD/AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAEAAAA/wAAAP+AAAD/gAAA/wAAAP8AAAABgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD8AAAAAIAAAACAAAAAgAIAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgAAAAAEAAQAAAMABwAAAQEBAQEBAQEAAAIAAAD+AAIAAgAAAP4ABAAAAP4AAAAAAAAA/gAAAAAEAAACAAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8ABAAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAABAIAAAAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQECAAEAAAD/AAEAAQAAAP8A/wABAAAA/wABAAEAAAD/AAQAAAD/AAAAAAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAEDAAAABAAEAAADAAABAQEBAwABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD9AAAA/wAEAAAA/wAAAP0AAAAAAQAAAAABAAQAAAMAAAEBAQEAAAEAAAD/AAQAAAD8AAAAAAAAAwCAAIADAAOAAAMABwALAAABAQEBAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AAQAAgAAA/4ADgAAA/QAAAAMAAAD9AAAAAwAAAP0AAAAAAAABAYABgAQABAAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAAEAAAD+gAAA/4AAAP+ABAAAAP8AAAD/gAAA/wAAAACAAAAAgAAAAAAAAQAAAYACgAQAAAsAAAEBAQEBAQEBAQEBAQGAAQAAAP+AAAD/gAAA/oAAAAEAAAAAgAQAAAD+gAAA/4AAAP+AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAwABAAAA/AAAAAEAAAABAAAAAQAEAAAA/AAAAAKAAAAAgAAAAIAAAAABAIAAgAMABAAACwAAAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP0AAAD/gAAAAIAAAAEAAAAAgAAAAAAAAQAAAAAEAAQAAAUAAAEBAQEBAQAAAQAAAAMAAAD8AAQAAAD9AAAA/wAAAAACAIAAgAMAAoAACwAPAAABAQEBAQEBAQEBAQEBAQEBAQABgAAAAIAAAP+AAAD+gAAAAQAAAP8A/4AAgAAA/4ACgAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAMABAAACwAPAAABAQEBAQEBAQEBAQEBAQEBAgABAAAA/4AAAP6AAAABAAAA/wAAAAEA/oAAgAAA/4AEAAAA/QAAAP+AAAAAgAAAAQAAAACAAAD/gAAA/wAAAAABAIAAgAQABAAADQAAAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAA/4AAAP6AAAD/gAAAAIAAAAEABAAAAP+AAAD9gAAA/4AAAACAAAABAAAAAIAAAAACAAAAAAQABAAAAwAHAAABAQEBAQEBAQAABAAAAPwAAQAAAAIAAAAEAAAA/AAAAAMA/gAAAAIAAAEAgACABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAD/gAAA/oAAAP+AAAAAgAAAAQAEAAAA/4AAAP+AAAD/gAAA/oAAAP+AAAAAgAAAAQAAAACAAAAAAQAAAAACgAKAAAsAAAEBAQEBAQEBAQEBAQAAAYAAAACAAAAAgAAA/wAAAP+AAAD/AAKAAAD/gAAA/4AAAP6AAAABAAAAAIAAAAAAAAEAAAAABAAEAAAFAAABAQEBAQEAAAQAAAD/AAAA/QAEAAAA/AAAAAMAAAAAAQCAAIAEAAQAABUAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAAIAAAD/AAAAAQAAAP8AAAABAAAA/wAAAP+AAAD+gAAA/4AAAACAAAABAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAAEAAAAAgAAAAAEBgAAABAACgAALAAABAQEBAQEBAQEBAQECgAGAAAD/AAAA/4AAAP8AAAAAgAAAAIACgAAA/wAAAP+AAAD/AAAAAYAAAACAAAAAAAABAAAAAAQABAAAEQAAAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAPwABAAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAABAAADAAABAQEBAAAEAAAA/AABAAAA/wAAAAAAAAEAAAAABAAEAAARAAABAQEBAQEBAQEBAQEBAQEBAQEDgACAAAD8AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAEAAAA/AAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAQAAAgAEAAQAAAMAAAEBAQEAAAQAAAD8AAQAAAD+AAAAAAAAAgCAAIACAAOAAAMABwAAAQEBAQEBAQEAgACAAAD/gAEAAIAAAP+AA4AAAP0AAAADAAAA/QAAAAAEAIAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAABAAAAPyAAAADAP+AAAAAgP8A/4AAAACA/wD/gAAAAIAAAQAAAAAEAAQAAAUAAAEBAQEBAQMAAQAAAPwAAAADAAQAAAD8AAAAAQAAAAACAIAAgAQABAAAAwAHAAABAQEBAQEBAQCAA4AAAPyAAYAAAACAAAAEAAAA/IAAAAIA/4AAAACAAAMAgACABAAEAAADAAcACwAAAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgP4A/4AAAACAAAAABAAAAIAEAAQAAAMABwALAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD8AAAABAAAAPwAAAAEAAAA/AAAAAQAAAD8AAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAAYAgACABAAEAAADAAcACwAPABMAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/oAAAACAAAD+gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAID/AP+AAAAAgAAA/4AAAACAAAEAgACAAQADgAADAAABAQEBAIAAgAAA/4ADgAAA/QAAAAAAAAUAgACABAAEAAADAAcACwAPABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAIADgAAA/IAAgAAAAIAAAAGAAAAAgAAA/YAAAACAAAABgAAAAIAAAAQAAAD8gAAAAwD/gAAAAIAAAP+AAAAAgP4A/4AAAACAAAD/gAAAAIAAAAABAAADAAQABAAAAwAAAQEBAQAABAAAAPwABAAAAP8AAAAAAAAHAIAAgAQABAAAAwAHAAsADwATABcAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQCAA4AAAPyAAIAAAACAAAABgAAAAIAAAP2AAAAAgAAAAYAAAACAAAD9gAAAAIAAAAGAAAAAgAAABAAAAPyAAAADAP+AAAAAgAAA/4AAAACA/wD/gAAAAIAAAP+AAAAAgP8A/4AAAACAAAD/gAAAAIAAAAAEAAAAAAQAAgAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAgABAAAA/wD/AAEAAAD/AAIAAQAAAP8AAgAAAP8AAAABAAAA/wAAAAAAAAD/AAAAAQAAAP8AAAAAAQAAAAAEAAQAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAQAAAD/gAAA/4AAAP+AAAD9gAAAAAEBAAAAAgAEAAADAAABAQEBAQABAAAA/wAEAAAA/AAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQECgAGAAAD8AAAAAIAAAACAAAAAgAAAAQAEAAAA/AAAAAGAAAABAAAAAIAAAACAAAAAAAABAAABAAQAAgAAAwAAAQEBAQAABAAAAPwAAgAAAP8AAAAAAAABAAAAAAQABAAACwAAAQEBAQEBAQEBAQEBAgACAAAA/AAAAACAAAAAgAAAAIAAAACABAAAAPwAAAACAAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEDAAEAAAD8AAAAAQAAAAEAAAABAAIAAAD+AAAAAIAAAACAAAAAgAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAIAAAAAgAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/4AAAP4AAAAAAAADAAAAAAQABAAAGwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAIAAYAAAACAAAD/gAAA/4AAAP+AAAD/gP4AAIAAAACAAAAAgAAAAIAAAP6AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAQAAAP+AAAD+gAAAAIAAAACAAAAAgAAA/oAAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAAAAAQAAAAAEAAIAAAkAAAEBAQEBAQEBAQEAAAEAAAABAAAAAQAAAAEAAAD8AAIAAAD/gAAA/4AAAP+AAAD/gAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAGAAAABAAAAAIAAAACAAAAAgAAA/AAEAAAA/4AAAP+AAAD/gAAA/wAAAP6AAAAAAAAEAAAAgAQABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQCAAYAAAP6AAgABgAAA/oD9gAGAAAD+gAIAAYAAAP6ABAAAAP6AAAABgAAA/oAAAP+AAAD+gAAAAYAAAP6AAAAAAQIAAgAEAAQAAAMAAAEBAQECAAIAAAD+AAQAAAD+AAAAAAAABACAAIAEAAQAAAMABwAjACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAD/AAGAAQAAAP8A/gAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4ABgACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAAAAA/wAAAP+AAAD/gAAAAIAAAACAAAABAAAA/oAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAGAAAD/gAAAAAQAAAAABAAEAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ADgACAAAD/gPyAAIAAAP+AA4AAgAAA/4AEAAAA/4AAAACAAAD/gAAA/QAAAP+AAAAAgAAA/4AAAAABAAAAAAIAAgAAAwAAAQEBAQAAAgAAAP4AAgAAAP4AAAAAAAAEAAAAAAIABAAAAwAHAAsADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAP8AAQABAAAA/wD/AAEAAAD/AAEAAQAAAP8ABAAAAP8AAAAAAAAA/wAAAAAAAAD/AAAAAAAAAP8AAAAAAQCAAQADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAYABAAAA/4AAAAGAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAOAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAACAAAAAAAABAQABAAOABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACABAAAAP+AAAD/gAAA/wAAAACAAAD+gAAAAYAAAP+AAAABAAAAAIAAAAAAAAEBAAEABAADgAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQIAAQAAAACAAAAAgAAA/4AAAP+AAAD/AAAAAIAAAP6AAAABgAAA/4ADgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAOAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAOAAAD+gAAAAIAAAP8AAAD/gAAA/4AAAACAAAAAgAAAAQAAAP+AAAAAAAABAQAAgAOABAAADwAAAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAA/4AAAP6AAAD/gAAAAIAAAACABAAAAP8AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAAAACAIAAgAOAA4AAAwAJAAABAQEBAQEBAQEBAIADAAAA/QAAgAAAAgAAAP8AAAADgAAA/QAAAAKA/gAAAAEAAAABAAAAAAIAgACABAAEAAAbACcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAD/gAAAAIAAAACAAAAAgAAA/4AAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAA/4D/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAEAAAIABAADAAADAAABAQEBAAAEAAAA/AADAAAA/wAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/gAAA/gAEAAAA/gAAAP+AAAD/gAAA/4AAAP+AAAAAAAABAAACAAIABAAAAwAAAQEBAQAAAgAAAP4ABAAAAP4AAAAAAAACAQAAgAOAA4AAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP8AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAACAAAAAgAAA/wAAAACAAIAAAACAAAADgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgP+AAAAAgAADAAAAAAQABAAACwAnADMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAGAAAD/gAAA/4AAAP+AAAD/gAAAAIACgAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgACAAIAAAP+AAAD+gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAAAYAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAA/oAAAP6AAAD/gAAAAIAAAACAAAAAgAAAAAAAAgCAAIADgAQAAA8AHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAAABAAAAAIAAAP+AAAD/AAAA/wAAAP+AAAAAgAAAAQAAAAEAAAAAgAAA/4AAAP8AAAD/AAAA/4AAAACABAAAAP+AAAAAgAAA/wAAAP+AAAAAgAAA/4AAAAEAAAD+gAAA/4AAAACAAAD/AAAA/4AAAACAAAD/gAAAAQAAAAABAAAAAAQAA4AACwAAAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD8AAAAAIAAAACAA4AAAP+AAAD/gAAA/YAAAAKAAAAAgAAAAAAAAQAAAAACAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAAAAAQIAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDgACAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQCAAIAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP+AAAD/AAAA/4AAAP8AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/oAAAAEAAAD/AAAAAYAAAACAAAAAgAAAAIAAAAAAACAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AEMARwBLAE8AUwBXAFsAXwBjAGcAawBvAHMAdwB7AH8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gPyAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/YAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D8gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gP2AAIAAAP+AAQAAgAAA/4ABAACAAAD/gAEAAIAAAP+A/IAAgAAA/4ABAACAAAD/gAEAAIAAAP+AAQAAgAAA/4D9gACAAAD/gAEAAIAAAP+AAQAAgAAA/4ABAACAAAD/gAQAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAACAAAD/gAAAAIAAAP+AAAAAAQAAAAAEAAQAAAsAAAEBAQEBAQEBAQEBAQAABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAQAAAD8AAAAAIAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/oAEAAAA/oAAAP8AAAD/gAAA/4AAAP+AAAAAAAABAAABgAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAAAAAKABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP2AAAACAAAAAIAAAACAAAAAAAABAYAAAAQAAoAABQAAAQEBAQEBAYACgAAA/oAAAP8AAoAAAP8AAAD+gAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAAACgAAAAIAAAACAAAAAgAAA/AAEAAAA/wAAAP8AAAD/AAAA/wAAAAACAAAAAAQABAAAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAAAAAEAAAAEAAAA/4AAAP+AAAD/gAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAEAAAAAgAAAAIAAAP8A/wAAAAEAAAEBgAGABAAEAAAFAAABAQEBAQEBgAEAAAABgAAA/YAEAAAA/oAAAP8AAAAAAQAAAAACgAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD+AAAAAoAAAACAAAAAgAAAAAAAAQGAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQGAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAAEAAAAAgAAAAQAAAACAAAAAAAABAAABgAQABAAADwAAAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAgAAAP2AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAAAAAABAAABgAQAAoAAAwAAAQEBAQAABAAAAPwAAoAAAP8AAAAAAAABAYAAAAKABAAAAwAAAQEBAQGAAQAAAP8ABAAAAPwAAAAAAAABAYAAAAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACABAAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAQAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAKAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD+AAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAYAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD9gAAAAgAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQAAAgAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEAAAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAAAAAQAAAYACgAKAAAMAAAEBAQEAAAKAAAD9gAKAAAD/AAAAAAAAAQGAAAACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD9gAAAAAAAAQAAAYAEAAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAABAAAAAIAAAAEAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAQAAAD/gAAA/4AAAACAAAAAgAAA/wAAAP+AAAD/gAAA/4AAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAAJAAABAQEBAQEBAQEBAYACgAAA/AAAAACAAAAAgAAAAIAEAAAA/AAAAAEAAAABAAAAAQAAAAABAAAAAAQABAAAEwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/AAAA/oAAAAEAAAABAAAAAIAAAACABAAAAP6AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAQAAAAAAAAEAAAAABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAQAAAAEAAAD+gAAA/wAAAP+AAAD/gAAA/4AEAAAA/wAAAP8AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAACAAAABAAAAAAAAAQAAAAAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEDAAEAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQAAAAACgAQAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAP+AAAD/gAAA/4AAAP8AAAAAgAAAAIAAAP+AAAD/gAQAAAD/gAAA/4AAAP+AAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAABAAAAAIAAAAAAAAEAAAAABAAEAAAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAQAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQAAAAACgAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAQAAAD9gAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAAAEAAQAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAEAAAAAgAAAAIAAAACAAAD/AAAA/4AAAP+AAAD/gAQAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAAAAAAAAQAAAAAEAAKAAA8AAAEBAQEBAQEBAQEBAQEBAQEBgAKAAAD+AAAA/4AAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/AAAA/4AAAP+AAAD/gAAAAQAAAACAAAAAgAAAAAAAAQGAAYACgAQAAAMAAAEBAQEBgAEAAAD/AAQAAAD9gAAAAAAAAQGAAYAEAAKAAAMAAAEBAQEBgAKAAAD9gAKAAAD/AAAAAAAAAQAAAAAEAAQAAB8AAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAwABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAQAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAACAAAAAgAAAAIAAAACAAAAAAAABAAAAAAQABAAAIwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAABAAAAAIAAAAEAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAA/4AAAP+AAAABAAAAAIAAAAEAAAAAgAAAAAAAAQGAAYACgAKAAAMAAAEBAQEBgAEAAAD/AAKAAAD/AAAAAAAAAQAAAAAEAAKAABcAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAQAAAACAAAAAgAAAAIAAAP8AAAD/gAAA/wAAAP+AAAD/AAAAAIAAAACAAAAAgAKAAAD/gAAA/4AAAP+AAAD/AAAAAIAAAACAAAD/gAAA/4AAAAEAAAAAgAAAAIAAAAAAAAEAAAGAAoAEAAAFAAABAQEBAQEBgAEAAAD9gAAAAYAEAAAA/YAAAAEAAAAAAQAAAAACgAKAAAUAAAEBAQEBAQAAAoAAAP8AAAD+gAKAAAD9gAAAAYAAAAABAAAAAAQABAAAHwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAAEAAAAAgAAAAQAAAACAAAABAAAA/4AAAP+AAAAAgAAAAIAAAP8AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+ABAAAAP+AAAD/gAAAAIAAAACAAAD/AAAA/4AAAP8AAAD/gAAA/wAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAAAAAAEAAAAABAAEAAALAAABAQEBAQEBAQEBAQEBgAEAAAABgAAA/oAAAP8AAAD+gAAAAYAEAAAA/oAAAP8AAAD+gAAAAYAAAAEAAAAAAAABAAAAAAQAAoAABwAAAQEBAQEBAQEAAAQAAAD+gAAA/wAAAP6AAoAAAP8AAAD+gAAAAYAAAAAAAAEBgAAABAAEAAAHAAABAQEBAQEBAQGAAQAAAAGAAAD+gAAA/wAEAAAA/oAAAP8AAAD+gAAAAAAAAQAAAAACgAQAAAcAAAEBAQEBAQEBAYABAAAA/wAAAP6AAAABgAQAAAD8AAAAAYAAAAEAAAAAAAABAAABgAQABAAABwAAAQEBAQEBAQEBgAEAAAABgAAA/AAAAAGABAAAAP6AAAD/AAAAAQAAAAAAAAQBAAEAAwADAAADAAcACwAPAAABAQEBAQEBAQEBAQEBAQEBAYABAAAA/wD/gACAAAD/gAGAAIAAAP+A/wABAAAA/wADAAAA/4AAAAAAAAD/AAAAAQAAAP8AAAAAAAAA/4AAAAACAIAAgAOAA4AACwAPAAABAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAP+AAAD+AAAA/4AAAACAAIAAAAEAAAADgAAA/4AAAP4AAAD/gAAAAIAAAAIAAAD/gP8AAAABAAACAAAAAAQABAAAEwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAgAAAACAAAAAgAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAgAAA/4AAAACAAAABAAAAAIAAAP+AAAAEAAAA/4AAAP+AAAD+AAAA/4AAAP+AAAAAgAAAAIAAAAIAAAAAgAAA/4D/gAAA/wAAAP+AAAAAgAAAAQAAAACAABAAAAAABAAEAAADAAcACwAPABMAFwAbAB8AIwAnACsALwAzADcAOwA/AAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP+AAIAAAP+AAgAAgAAA/4D9gACAAAD/gAIAAIAAAP+A/YAAgAAA/4ACAACAAAD/gP2AAIAAAP+AAgAAgAAA/4AEAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAQAAAAAAQABAAAAwAHAAsADwATABcAGwAfACMAJwArAC8AMwA3ADsAPwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D8gACAAAD/gAIAAIAAAP+A/oAAgAAA/4ACAACAAAD/gP6AAIAAAP+AAgAAgAAA/4D+gACAAAD/gAIAAIAAAP+ABAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAAAA/4AAAACAAAD/gAAAAAAAAP+AAAAAgAAA/4AAAAAAAAD/gAAAAIAAAP+AAAAAAwCAAIADgAQAABcAGwAfAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAAEAAAD/AAAAAIAAAP+AAAABAAAA/wAAAP+AAAD/AAAA/4AAAACAAAABAP+AAAAAgAAA/4AAAACAAAAEAAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACAAAAAgAAAAYAAAACAAAD/gP+AAAAAgP8A/4AAAACAAAAAAQCAAIADgAOAAA8AAAEBAQEBAQEBAQEBAQEBAQEBAAIAAAAAgAAA/4AAAP+AAAD/AAAA/4AAAP+AAAAAgAOAAAD/gAAA/wAAAP+AAAD/AAAAAQAAAACAAAABAAAAAAAAAgCAAIADgAOAAAMACQAAAQEBAQEBAQEBAQCAAwAAAP0AAYAAAP8AAAACAAAAA4AAAP0AAAACgP8AAAD/AAAAAgAAAAABAIAAgAOAA4AAAwAAAQEBAQCAAwAAAP0AA4AAAP0AAAAAAAACAIAAgAOAA4AAAwALAAABAQEBAQEBAQEBAQEAgAMAAAD9AACAAAACAAAA/4AAAP8AAAADgAAA/QAAAAKA/gAAAAIAAAD/AAAAAQAAAQAAAAAEAAQAABMAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQACAAAAAIAAAACAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAQAAAD/gAAA/4AAAP4AAAD/gAAA/4AAAACAAAAAgAAAAgAAAACAAAAAAAABAQABAAMAAwAACwAAAQEBAQEBAQEBAQEBAYABAAAAAIAAAP+AAAD/AAAA/4AAAACAAwAAAP+AAAD/AAAA/4AAAACAAAABAAAAAAAAAQCAAQAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAQAAAP+AAAD/gAAAAIAAAP8AAAD/gAAA/wAAAACAAAD/gAAA/4AAAAEAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAAAgAAA/4AAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+AAAAAIAAAAGAAAAAgAAA/gAAAAGAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgAAA/4AAAACA/4D/gAAAAIAABgCAAIAEAAQAAAMABwALAA8AEwAXAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAgAOAAAD8gAEAAAAAgAAAAIAAAACAAAD+gAAAAYAAAP4AAAAAgAAAAYAAAACAAAAEAAAA/IAAAAMA/wAAAAEAAAD/AAAAAQD+gP+AAAAAgP+A/4AAAACAAAD/gAAAAIAABgCAAIAEAAQAABMAFwAbAB8AIwAnAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAgAAgAAAAIAAAAEAAAD/AAAA/4AAAP+AAAD/gAAA/wAAAAEAAAAAgAAAAAAAgAAA/oAAgAAA/4ACAACAAAD/gP4AAIAAAP+AAgAAgAAA/4AEAAAA/wAAAP+AAAD/gAAA/4AAAP8AAAABAAAAAIAAAACAAAAAgAAA/4D/gAAAAIABAAAA/4AAAACAAAD/gAAA/oAAAP+AAAAAgAAA/4AAAAACAQAAgAOABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYABgAAAAIAAAP+AAAD/gAAAAIAAAP+AAAD/gAAA/4AAAACAAAD/gAAAAQAAAP8A/4AAgAAA/4AEAAAA/4AAAP8AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAAEAAAAAAAAA/wAAAAACAIAAgAQABAAAFwAbAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAYACgAAA/4AAAP+AAAD/gAAAAIAAAP+AAAD+gAAAAQAAAP8AAAABAAAAAIAAAP8A/wAAgAAA/4AEAAAA/gAAAAEAAAD/gAAA/4AAAP8AAAD/gAAAAIAAAAEAAAAAgAAAAIAAAACAAAD+gAAA/wAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQIAAIAAAACAAAAAgAAAAIAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAAAgAAAAIAAAACABAAAAP+AAAD/gAAA/4AAAP8AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABAAAAAIAAAACAAAAAAAABAIAAgAQABAAAGwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQGAAYAAAP+AAAAAgAAAAQAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/4AAAP8AAAABAAAAAIAAAP+ABAAAAP8AAAD/gAAAAIAAAP6AAAAAgAAA/wAAAP+AAAAAgAAAAQAAAP+AAAABgAAA/4AAAACAAAAAAAABAIAAgAQABAAAFwAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAAAAAIAAAAEAAAAAgAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAA/4AAAACABAAAAP+AAAAAgAAA/4AAAP6AAAD/gAAA/4AAAP+AAAAAgAAAAIAAAACAAAABgAAAAAAAAQCAAIAEAAQAABsAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQECAACAAAAAgAAAAIAAAACAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAQAAAD/gAAA/4AAAP+AAAD/gAAA/4AAAP+AAAD/gAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAAAAAQEAAIADgAQAAAsAAAEBAQEBAQEBAQEBAQIAAYAAAP8AAAD/gAAA/wAAAACAAAAAgAQAAAD/AAAA/gAAAP+AAAABAAAAAIAAAAAAAAEAgACABAAEAAATAAABAQEBAQEBAQEBAQEBAQEBAQEBAQGAAoAAAP+AAAD/AAAAAIAAAACAAAD+gAAA/4AAAP8AAAAAgAAAAIAEAAAA/QAAAP+AAAABAAAAAIAAAAEAAAD+AAAA/4AAAAEAAAAAgAAAAAAAAAAYASYAAQAAAAAAAAAIAAAAAQAAAAAAAQAIAAgAAQAAAAAAAgAHABAAAQAAAAAAAwAIABcAAQAAAAAABAAQAB8AAQAAAAAABQALAC8AAQAAAAAABgAIADoAAQAAAAAACQAJAEIAAQAAAAAACgA6AEsAAQAAAAAADQARAIUAAQAAAAAADgAyAJYAAQAAAAAAEwAMAMgAAwABBAkAAAAQANQAAwABBAkAAQAQAOQAAwABBAkAAgAOAPQAAwABBAkAAwAQAQIAAwABBAkABAAgARIAAwABBAkABQAWATIAAwABBAkABgAQAUgAAwABBAkACQASAVgAAwABBAkACgB0AWoAAwABBAkADQAiAd4AAwABBAkADgBkAgAAAwABBAkAEwAYAmQoYykgMjAyMlVyc2FGb250UmVndWxhclVyc2FGb250VXJzYUZvbnQgUmVndWxhclZlcnNpb24gMS4wVXJzYUZvbnRVcnNhRnJhbmtBbiBvcGVuIGxpY2VuY2UgZ2VuZXJhbCBwdXJwb3NlIHRleHRtb2RlIGZvbnQgYnkgVXJzYUZyYW5rQ0MwIDEuMCBVbml2ZXJzYWxodHRwczovL2NyZWF0aXZlY29tbW9ucy5vcmcvcHVibGljZG9tYWluL3plcm8vMS4wL0hlbGxvIFdvcmxkIQAoAGMAKQAgADIAMAAyADIAVQByAHMAYQBGAG8AbgB0AFIAZQBnAHUAbABhAHIAVQByAHMAYQBGAG8AbgB0AFUAcgBzAGEARgBvAG4AdAAgAFIAZQBnAHUAbABhAHIAVgBlAHIAcwBpAG8AbgAgADEALgAwAFUAcgBzAGEARgBvAG4AdABVAHIAcwBhAEYAcgBhAG4AawBBAG4AIABvAHAAZQBuACAAbABpAGMAZQBuAGMAZQAgAGcAZQBuAGUAcgBhAGwAIABwAHUAcgBwAG8AcwBlACAAdABlAHgAdABtAG8AZABlACAAZgBvAG4AdAAgAGIAeQAgAFUAcgBzAGEARgByAGEAbgBrAEMAQwAwACAAMQAuADAAIABVAG4AaQB2AGUAcgBzAGEAbABoAHQAdABwAHMAOgAvAC8AYwByAGUAYQB0AGkAdgBlAGMAbwBtAG0AbwBuAHMALgBvAHIAZwAvAHAAdQBiAGwAaQBjAGQAbwBtAGEAaQBuAC8AegBlAHIAbwAvADEALgAwAC8ASABlAGwAbABvACAAVwBvAHIAbABkACEAAAADAAAAAAAAAGYAMwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==\r
|
|
648
651
|
`;
|
|
649
652
|
class C extends Error {
|
|
650
|
-
constructor(
|
|
651
|
-
const
|
|
652
|
-
super(
|
|
653
|
+
constructor(A, t, r = {}) {
|
|
654
|
+
const B = C.createFormattedMessage(A, r);
|
|
655
|
+
super(B);
|
|
653
656
|
E(this, "originalError");
|
|
654
657
|
E(this, "context");
|
|
655
|
-
this.name = "TextmodeError", this.originalError = t, this.context =
|
|
658
|
+
this.name = "TextmodeError", this.originalError = t, this.context = r;
|
|
656
659
|
}
|
|
657
660
|
/**
|
|
658
661
|
* Create a formatted error message that includes context
|
|
659
662
|
*/
|
|
660
|
-
static createFormattedMessage(
|
|
661
|
-
let
|
|
663
|
+
static createFormattedMessage(A, t) {
|
|
664
|
+
let r = A;
|
|
662
665
|
if (t && Object.keys(t).length > 0) {
|
|
663
|
-
|
|
666
|
+
r += `
|
|
664
667
|
|
|
665
668
|
📋 Context:`;
|
|
666
|
-
for (const [
|
|
669
|
+
for (const [B, Q] of Object.entries(t)) {
|
|
667
670
|
const g = C.formatValue(Q);
|
|
668
|
-
|
|
669
|
-
- ${
|
|
671
|
+
r += `
|
|
672
|
+
- ${B}: ${g}`;
|
|
670
673
|
}
|
|
671
674
|
}
|
|
672
|
-
return
|
|
675
|
+
return r += `
|
|
673
676
|
|
|
674
|
-
`,
|
|
675
|
-
`,
|
|
677
|
+
`, r += "↓".repeat(24) + `
|
|
678
|
+
`, r;
|
|
676
679
|
}
|
|
677
680
|
/**
|
|
678
681
|
* Format values for better display in error messages
|
|
679
682
|
*/
|
|
680
|
-
static formatValue(
|
|
681
|
-
if (
|
|
682
|
-
if (
|
|
683
|
-
if (typeof
|
|
684
|
-
if (typeof
|
|
685
|
-
if (Array.isArray(
|
|
686
|
-
return
|
|
687
|
-
if (typeof
|
|
688
|
-
const t = Object.keys(
|
|
689
|
-
return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((Q) => `${Q}: ${C.formatValue(
|
|
683
|
+
static formatValue(A) {
|
|
684
|
+
if (A === null) return "null";
|
|
685
|
+
if (A === void 0) return "undefined";
|
|
686
|
+
if (typeof A == "string") return `"${A}"`;
|
|
687
|
+
if (typeof A == "number" || typeof A == "boolean") return String(A);
|
|
688
|
+
if (Array.isArray(A))
|
|
689
|
+
return A.length === 0 ? "[]" : A.length <= 5 ? `[${A.map((t) => C.formatValue(t)).join(", ")}]` : `[${A.slice(0, 3).map((t) => C.formatValue(t)).join(", ")}, ... +${A.length - 3} more]`;
|
|
690
|
+
if (typeof A == "object") {
|
|
691
|
+
const t = Object.keys(A);
|
|
692
|
+
return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((Q) => `${Q}: ${C.formatValue(A[Q])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((B) => `${B}: ${C.formatValue(A[B])}`).join(", ")}, ... +${t.length - 2} more }`;
|
|
690
693
|
}
|
|
691
|
-
return String(
|
|
694
|
+
return String(A);
|
|
692
695
|
}
|
|
693
696
|
}
|
|
694
|
-
var
|
|
697
|
+
var Y = /* @__PURE__ */ ((n) => (n[n.SILENT = 0] = "SILENT", n[n.WARNING = 1] = "WARNING", n[n.ERROR = 2] = "ERROR", n[n.THROW = 3] = "THROW", n))(Y || {});
|
|
695
698
|
const l = class l {
|
|
696
699
|
constructor() {
|
|
697
700
|
E(this, "_options", {
|
|
@@ -706,29 +709,29 @@ const l = class l {
|
|
|
706
709
|
* Handle an error based on the configured settings
|
|
707
710
|
* @returns true if execution should continue, false if error was handled
|
|
708
711
|
*/
|
|
709
|
-
_handle(
|
|
710
|
-
const
|
|
712
|
+
_handle(e, A, t) {
|
|
713
|
+
const r = "[textmode.js]";
|
|
711
714
|
switch (this._options.globalLevel) {
|
|
712
715
|
case 0:
|
|
713
716
|
return !1;
|
|
714
717
|
// Validation failed, handled silently
|
|
715
718
|
case 1:
|
|
716
719
|
return console.group(
|
|
717
|
-
`%c${
|
|
720
|
+
`%c${r} 💥 Oops! Something went wrong in your code.`,
|
|
718
721
|
"color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;"
|
|
719
|
-
), console.warn(C.createFormattedMessage(
|
|
722
|
+
), console.warn(C.createFormattedMessage(e, A)), console.groupEnd(), !1;
|
|
720
723
|
case 2:
|
|
721
724
|
return console.group(
|
|
722
|
-
`%c${
|
|
725
|
+
`%c${r} 💥 Oops! Something went wrong in your code.`,
|
|
723
726
|
"color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;"
|
|
724
|
-
), console.error(C.createFormattedMessage(
|
|
727
|
+
), console.error(C.createFormattedMessage(e, A)), console.groupEnd(), !1;
|
|
725
728
|
case 3:
|
|
726
729
|
default:
|
|
727
|
-
const
|
|
730
|
+
const B = new C(e, t, A);
|
|
728
731
|
throw console.group(
|
|
729
|
-
`%c${
|
|
732
|
+
`%c${r} 💥 Oops! Something went wrong in your code.`,
|
|
730
733
|
"color: #d32f2f; font-weight: bold; background: #ffcdd2; padding: 2px 6px; border-radius: 3px;"
|
|
731
|
-
),
|
|
734
|
+
), B;
|
|
732
735
|
}
|
|
733
736
|
}
|
|
734
737
|
/**
|
|
@@ -738,27 +741,27 @@ const l = class l {
|
|
|
738
741
|
* @param context Additional context for debugging
|
|
739
742
|
* @returns true if validation passed, false if validation failed and was handled
|
|
740
743
|
*/
|
|
741
|
-
validate(
|
|
742
|
-
return
|
|
744
|
+
validate(e, A, t) {
|
|
745
|
+
return e ? !0 : (this._handle(A, t), !1);
|
|
743
746
|
}
|
|
744
747
|
/**
|
|
745
748
|
* Set global error level
|
|
746
749
|
*/
|
|
747
|
-
setGlobalLevel(
|
|
748
|
-
this._options.globalLevel =
|
|
750
|
+
setGlobalLevel(e) {
|
|
751
|
+
this._options.globalLevel = e;
|
|
749
752
|
}
|
|
750
753
|
};
|
|
751
754
|
E(l, "_instance", null);
|
|
752
755
|
let I = l;
|
|
753
756
|
const D = I.getInstance();
|
|
754
|
-
class
|
|
757
|
+
class S {
|
|
755
758
|
/**
|
|
756
759
|
* Creates a new FontManager instance
|
|
757
760
|
* @param renderer Renderer instance for texture creation
|
|
758
761
|
* @param fontSize Font size to use for the texture atlas
|
|
759
762
|
* @ignore
|
|
760
763
|
*/
|
|
761
|
-
constructor(
|
|
764
|
+
constructor(e, A = 16) {
|
|
762
765
|
E(this, "_font");
|
|
763
766
|
E(this, "_characters", []);
|
|
764
767
|
E(this, "_fontFramebuffer");
|
|
@@ -771,7 +774,7 @@ class T {
|
|
|
771
774
|
E(this, "_renderer");
|
|
772
775
|
E(this, "_fontFace");
|
|
773
776
|
E(this, "_fontFamilyName", "UrsaFont");
|
|
774
|
-
this._renderer =
|
|
777
|
+
this._renderer = e, this._fontSize = A, this._textureCanvas = document.createElement("canvas"), this._textureContext = this._textureCanvas.getContext("2d");
|
|
775
778
|
}
|
|
776
779
|
/**
|
|
777
780
|
* Initializes the font manager by loading the font and creating the texture atlas
|
|
@@ -779,53 +782,53 @@ class T {
|
|
|
779
782
|
* @ignore
|
|
780
783
|
*/
|
|
781
784
|
async initialize() {
|
|
782
|
-
const
|
|
783
|
-
this._fontFace = new FontFace(this._fontFamilyName,
|
|
785
|
+
const A = await (await fetch(R)).arrayBuffer();
|
|
786
|
+
this._fontFace = new FontFace(this._fontFamilyName, A), await this._fontFace.load(), document.fonts.add(this._fontFace), this._font = d.parse(A)[0], this._initializeCharacters(), this._calculateMaxGlyphDimensions(), await this._createTextureAtlas();
|
|
784
787
|
}
|
|
785
788
|
/**
|
|
786
789
|
* Initializes the characters array from the font's cmap table
|
|
787
790
|
*/
|
|
788
791
|
_initializeCharacters() {
|
|
789
|
-
const
|
|
790
|
-
this._font && this._font.cmap && this._font.cmap.tables && this._font.cmap.tables.forEach((
|
|
791
|
-
if (
|
|
792
|
-
for (let Q = 0; Q <
|
|
793
|
-
const g =
|
|
792
|
+
const e = [], A = /* @__PURE__ */ new Map();
|
|
793
|
+
this._font && this._font.cmap && this._font.cmap.tables && this._font.cmap.tables.forEach((B) => {
|
|
794
|
+
if (B.format === 4 && B.startCount && B.endCount && B.idRangeOffset && B.idDelta)
|
|
795
|
+
for (let Q = 0; Q < B.startCount.length; Q++) {
|
|
796
|
+
const g = B.startCount[Q], i = B.endCount[Q];
|
|
794
797
|
if (!(g === 65535 && i === 65535))
|
|
795
798
|
for (let s = g; s <= i; s++) {
|
|
796
|
-
const
|
|
797
|
-
let
|
|
798
|
-
if (
|
|
799
|
-
|
|
799
|
+
const o = String.fromCodePoint(s);
|
|
800
|
+
let a = 0;
|
|
801
|
+
if (B.idRangeOffset[Q] === 0)
|
|
802
|
+
a = s + B.idDelta[Q] & 65535;
|
|
800
803
|
else {
|
|
801
|
-
const h =
|
|
802
|
-
if (h >= 0 &&
|
|
803
|
-
const c =
|
|
804
|
-
c !== 0 && (
|
|
804
|
+
const h = B.idRangeOffset[Q] / 2 + (s - B.startCount[Q]) - (B.startCount.length - Q);
|
|
805
|
+
if (h >= 0 && B.glyphIdArray && h < B.glyphIdArray.length) {
|
|
806
|
+
const c = B.glyphIdArray[h];
|
|
807
|
+
c !== 0 && (a = c + B.idDelta[Q] & 65535);
|
|
805
808
|
}
|
|
806
809
|
}
|
|
807
|
-
|
|
810
|
+
a && a > 0 && (e.push(o), A.set(o, a));
|
|
808
811
|
}
|
|
809
812
|
}
|
|
810
|
-
else if (
|
|
811
|
-
for (let Q = 0; Q <
|
|
812
|
-
const g =
|
|
813
|
-
for (let
|
|
814
|
-
const
|
|
815
|
-
h > 0 && (
|
|
813
|
+
else if (B.format === 12 && B.groups)
|
|
814
|
+
for (let Q = 0; Q < B.groups.length; Q += 3) {
|
|
815
|
+
const g = B.groups[Q], i = B.groups[Q + 1], s = B.groups[Q + 2];
|
|
816
|
+
for (let o = g; o <= i; o++) {
|
|
817
|
+
const a = String.fromCodePoint(o), h = s + (o - g);
|
|
818
|
+
h > 0 && (e.push(a), A.set(a, h));
|
|
816
819
|
}
|
|
817
820
|
}
|
|
818
821
|
});
|
|
819
|
-
const
|
|
820
|
-
const Q =
|
|
822
|
+
const r = [...new Set(e)].filter((B) => {
|
|
823
|
+
const Q = B.codePointAt(0) || 0;
|
|
821
824
|
return !(Q >= 0 && Q <= 31 && Q !== 9 && Q !== 10 && Q !== 13 || Q >= 127 && Q <= 159);
|
|
822
825
|
});
|
|
823
|
-
this._characters =
|
|
824
|
-
const g =
|
|
826
|
+
this._characters = r.map((B, Q) => {
|
|
827
|
+
const g = B.codePointAt(0) || 0, i = Q % 256, s = Math.floor(Q / 256) % 256, o = Math.floor(Q / 65536) % 256;
|
|
825
828
|
return {
|
|
826
|
-
character:
|
|
829
|
+
character: B,
|
|
827
830
|
unicode: g,
|
|
828
|
-
color: [i, s,
|
|
831
|
+
color: [i, s, o]
|
|
829
832
|
};
|
|
830
833
|
});
|
|
831
834
|
}
|
|
@@ -838,27 +841,27 @@ class T {
|
|
|
838
841
|
return;
|
|
839
842
|
}
|
|
840
843
|
this._textureContext.font = `${this._fontSize}px ${this._fontFamilyName}`;
|
|
841
|
-
let
|
|
844
|
+
let e = 0, A = 0;
|
|
842
845
|
for (const { character: t } of this._characters) {
|
|
843
|
-
const
|
|
844
|
-
|
|
846
|
+
const r = this._textureContext.measureText(t), B = r.width, Q = r.actualBoundingBoxAscent !== void 0 && r.actualBoundingBoxDescent !== void 0 ? r.actualBoundingBoxAscent + r.actualBoundingBoxDescent : this._fontSize;
|
|
847
|
+
B > 0 && (e = Math.max(e, B), A = Math.max(A, Q));
|
|
845
848
|
}
|
|
846
849
|
this._maxGlyphDimensions = {
|
|
847
|
-
width: Math.ceil(
|
|
848
|
-
height: Math.ceil(
|
|
850
|
+
width: Math.ceil(e),
|
|
851
|
+
height: Math.ceil(A)
|
|
849
852
|
};
|
|
850
853
|
}
|
|
851
854
|
/**
|
|
852
855
|
* Creates the texture atlas containing all characters
|
|
853
856
|
*/
|
|
854
857
|
async _createTextureAtlas() {
|
|
855
|
-
const
|
|
856
|
-
this._textureColumns = Math.ceil(Math.sqrt(
|
|
857
|
-
const
|
|
858
|
-
this._textureCanvas.width =
|
|
859
|
-
for (let
|
|
860
|
-
const
|
|
861
|
-
this._textureContext.fillText(s,
|
|
858
|
+
const e = this._characters.length;
|
|
859
|
+
this._textureColumns = Math.ceil(Math.sqrt(e)), this._textureRows = Math.ceil(e / this._textureColumns);
|
|
860
|
+
const A = this._maxGlyphDimensions.width * this._textureColumns, t = this._maxGlyphDimensions.height * this._textureRows;
|
|
861
|
+
this._textureCanvas.width = A, this._textureCanvas.height = t, this._textureCanvas.style.imageRendering = "pixelated", this._textureContext.imageSmoothingEnabled = !1, this._textureContext.fillStyle = "black", this._textureContext.fillRect(0, 0, A, t), this._textureContext.font = `${this._fontSize}px ${this._fontFamilyName}`, this._textureContext.textBaseline = "top", this._textureContext.textAlign = "left", this._textureContext.fillStyle = "white";
|
|
862
|
+
for (let r = 0; r < this._characters.length; r++) {
|
|
863
|
+
const B = r % this._textureColumns, Q = Math.floor(r / this._textureColumns), g = B * this._maxGlyphDimensions.width + this._maxGlyphDimensions.width / 2, i = Q * this._maxGlyphDimensions.height + this._maxGlyphDimensions.height / 2, s = this._characters[r].character, o = g - this.maxGlyphDimensions.width / 2, a = i - this._fontSize / 2;
|
|
864
|
+
this._textureContext.fillText(s, o, a);
|
|
862
865
|
}
|
|
863
866
|
this._fontFramebuffer = this._renderer.createFramebuffer(this._textureCanvas.width, this._textureCanvas.height), this._fontFramebuffer.update(this._textureCanvas);
|
|
864
867
|
}
|
|
@@ -867,14 +870,14 @@ class T {
|
|
|
867
870
|
* @param character The character to get the color for.
|
|
868
871
|
* @returns The RGB color as an array `[r, g, b]`.
|
|
869
872
|
*/
|
|
870
|
-
getCharacterColor(
|
|
873
|
+
getCharacterColor(e) {
|
|
871
874
|
if (!D.validate(
|
|
872
|
-
typeof
|
|
875
|
+
typeof e == "string" && e.length === 1,
|
|
873
876
|
"Character must be a single character string.",
|
|
874
|
-
{ providedValue:
|
|
877
|
+
{ providedValue: e, method: "getCharacterColor" }
|
|
875
878
|
))
|
|
876
879
|
return [0, 0, 0];
|
|
877
|
-
const t = this._characters.find((
|
|
880
|
+
const t = this._characters.find((r) => r.character === e);
|
|
878
881
|
return t ? t.color : [0, 0, 0];
|
|
879
882
|
}
|
|
880
883
|
/**
|
|
@@ -883,23 +886,23 @@ class T {
|
|
|
883
886
|
* @returns An array of RGB colors for each character in the string.
|
|
884
887
|
* Each color is represented as an array `[r, g, b]`.
|
|
885
888
|
*/
|
|
886
|
-
getCharacterColors(
|
|
889
|
+
getCharacterColors(e) {
|
|
887
890
|
return D.validate(
|
|
888
|
-
typeof
|
|
891
|
+
typeof e == "string" && e.length > 0,
|
|
889
892
|
"Characters must be a string with at least one character.",
|
|
890
|
-
{ providedValue:
|
|
891
|
-
) ?
|
|
893
|
+
{ providedValue: e, method: "getCharacterColors" }
|
|
894
|
+
) ? e.split("").map((t) => this.getCharacterColor(t) || [0, 0, 0]) : [[0, 0, 0]];
|
|
892
895
|
}
|
|
893
896
|
/**
|
|
894
897
|
* Checks if all characters in the given string exist in the font.
|
|
895
898
|
* @param str The string to check.
|
|
896
899
|
* @returns `true` if all characters exist in the font, `false` otherwise.
|
|
897
900
|
*/
|
|
898
|
-
hasAllCharacters(
|
|
899
|
-
if (typeof
|
|
900
|
-
const
|
|
901
|
-
for (const t of
|
|
902
|
-
if (!
|
|
901
|
+
hasAllCharacters(e) {
|
|
902
|
+
if (typeof e != "string" || e.length === 0) return !1;
|
|
903
|
+
const A = new Set(this._characters.map((t) => t.character));
|
|
904
|
+
for (const t of e)
|
|
905
|
+
if (!A.has(t)) return !1;
|
|
903
906
|
return !0;
|
|
904
907
|
}
|
|
905
908
|
/**
|
|
@@ -909,19 +912,19 @@ class T {
|
|
|
909
912
|
* @returns Promise that resolves when font update is complete
|
|
910
913
|
* @ignore
|
|
911
914
|
*/
|
|
912
|
-
async loadFont(
|
|
915
|
+
async loadFont(e) {
|
|
913
916
|
try {
|
|
914
|
-
const
|
|
915
|
-
if (!
|
|
916
|
-
throw new C(`Failed to load font file: ${
|
|
917
|
-
const t = await
|
|
918
|
-
this._fontFamilyName = `CustomFont_${
|
|
919
|
-
const
|
|
920
|
-
if (!
|
|
917
|
+
const A = await fetch(e);
|
|
918
|
+
if (!A.ok)
|
|
919
|
+
throw new C(`Failed to load font file: ${A.status} ${A.statusText}`);
|
|
920
|
+
const t = await A.arrayBuffer(), r = Date.now();
|
|
921
|
+
this._fontFamilyName = `CustomFont_${r}`, this._fontFace = new FontFace(this._fontFamilyName, t), await this._fontFace.load(), document.fonts.add(this._fontFace);
|
|
922
|
+
const B = d.parse(t);
|
|
923
|
+
if (!B || B.length === 0)
|
|
921
924
|
throw new Error("Failed to parse font file");
|
|
922
|
-
this._font =
|
|
923
|
-
} catch (
|
|
924
|
-
throw new C(`Failed to load font: ${
|
|
925
|
+
this._font = B[0], this._initializeCharacters(), this._calculateMaxGlyphDimensions(), await this._createTextureAtlas();
|
|
926
|
+
} catch (A) {
|
|
927
|
+
throw new C(`Failed to load font: ${A instanceof Error ? A.message : "Unknown error"}`, A);
|
|
925
928
|
}
|
|
926
929
|
}
|
|
927
930
|
/**
|
|
@@ -937,7 +940,7 @@ class T {
|
|
|
937
940
|
}
|
|
938
941
|
/** Returns a string representation of all characters in the font.*/
|
|
939
942
|
get charactersString() {
|
|
940
|
-
return this._characters.map((
|
|
943
|
+
return this._characters.map((e) => e.character).join("");
|
|
941
944
|
}
|
|
942
945
|
/** Returns the number of columns in the texture atlas.*/
|
|
943
946
|
get textureColumns() {
|
|
@@ -956,7 +959,7 @@ class T {
|
|
|
956
959
|
return this._fontSize;
|
|
957
960
|
}
|
|
958
961
|
}
|
|
959
|
-
class
|
|
962
|
+
class O {
|
|
960
963
|
/**
|
|
961
964
|
* Create a new grid instance.
|
|
962
965
|
* @param canvas The canvas element used to determine the grid dimensions.
|
|
@@ -964,7 +967,7 @@ class Y {
|
|
|
964
967
|
* @param cellHeight The height of each cell in the grid.
|
|
965
968
|
* @ignore
|
|
966
969
|
*/
|
|
967
|
-
constructor(
|
|
970
|
+
constructor(e, A, t) {
|
|
968
971
|
/** The number of columns in the grid. */
|
|
969
972
|
E(this, "_cols");
|
|
970
973
|
/** The number of rows in the grid. */
|
|
@@ -985,7 +988,7 @@ class Y {
|
|
|
985
988
|
E(this, "_cellWidth");
|
|
986
989
|
/** The height of each cell in the grid. */
|
|
987
990
|
E(this, "_cellHeight");
|
|
988
|
-
this._canvas =
|
|
991
|
+
this._canvas = e, this._cellWidth = A, this._cellHeight = t, this.reset();
|
|
989
992
|
}
|
|
990
993
|
/**
|
|
991
994
|
* Reset the grid to the default number of columns and rows based on the current canvas dimensions, and the grid cell dimensions.
|
|
@@ -1006,8 +1009,8 @@ class Y {
|
|
|
1006
1009
|
* @param newCellHeight The new cell height.
|
|
1007
1010
|
* @ignore
|
|
1008
1011
|
*/
|
|
1009
|
-
resizeCellPixelDimensions(
|
|
1010
|
-
[this._cellWidth, this._cellHeight] = [
|
|
1012
|
+
resizeCellPixelDimensions(e, A) {
|
|
1013
|
+
[this._cellWidth, this._cellHeight] = [e, A], this.reset();
|
|
1011
1014
|
}
|
|
1012
1015
|
/**
|
|
1013
1016
|
* Re-assign the grid dimensions and resize the grid.
|
|
@@ -1017,8 +1020,8 @@ class Y {
|
|
|
1017
1020
|
* @param newRows The new number of rows.
|
|
1018
1021
|
* @ignore
|
|
1019
1022
|
*/
|
|
1020
|
-
resizeGridDimensions(
|
|
1021
|
-
this._fixedDimensions = !0, [this._cols, this._rows] = [
|
|
1023
|
+
resizeGridDimensions(e, A) {
|
|
1024
|
+
this._fixedDimensions = !0, [this._cols, this._rows] = [e, A], this._resizeGrid();
|
|
1022
1025
|
}
|
|
1023
1026
|
/**
|
|
1024
1027
|
* Make the grid dimensions flexible again, and `reset()` the grid.
|
|
@@ -1032,8 +1035,8 @@ class Y {
|
|
|
1032
1035
|
* @param canvas The new canvas element to use for the grid.
|
|
1033
1036
|
* @ignore
|
|
1034
1037
|
*/
|
|
1035
|
-
updateCanvas(
|
|
1036
|
-
this._canvas =
|
|
1038
|
+
updateCanvas(e) {
|
|
1039
|
+
this._canvas = e, this._fixedDimensions ? this._resizeGrid() : this.reset();
|
|
1037
1040
|
}
|
|
1038
1041
|
/**
|
|
1039
1042
|
* Returns the width of each cell in the grid.
|
|
@@ -1094,54 +1097,54 @@ class Y {
|
|
|
1094
1097
|
* @param value `true` to make the grid dimensions fixed, or `false` to make them responsive.
|
|
1095
1098
|
* @ignore
|
|
1096
1099
|
*/
|
|
1097
|
-
set fixedDimensions(
|
|
1098
|
-
this._fixedDimensions =
|
|
1100
|
+
set fixedDimensions(e) {
|
|
1101
|
+
this._fixedDimensions = e;
|
|
1099
1102
|
}
|
|
1100
1103
|
}
|
|
1101
|
-
class
|
|
1102
|
-
constructor(
|
|
1104
|
+
class z {
|
|
1105
|
+
constructor(e) {
|
|
1103
1106
|
E(this, "webglCanvas");
|
|
1104
1107
|
E(this, "captureCanvas");
|
|
1105
|
-
this.captureCanvas =
|
|
1108
|
+
this.captureCanvas = e, this.webglCanvas = this.createOverlayCanvas();
|
|
1106
1109
|
}
|
|
1107
1110
|
generateUniqueCanvasId() {
|
|
1108
|
-
let
|
|
1109
|
-
for (; document.getElementById(
|
|
1110
|
-
|
|
1111
|
-
return
|
|
1111
|
+
let e = 0, A = `textmodeCanvas${e}`;
|
|
1112
|
+
for (; document.getElementById(A); )
|
|
1113
|
+
e++, A = `textmodeCanvas${e}`;
|
|
1114
|
+
return A;
|
|
1112
1115
|
}
|
|
1113
1116
|
createOverlayCanvas() {
|
|
1114
|
-
var
|
|
1115
|
-
const
|
|
1116
|
-
|
|
1117
|
-
const
|
|
1118
|
-
let t = parseInt(
|
|
1119
|
-
isNaN(t) && (t = 0),
|
|
1120
|
-
const
|
|
1121
|
-
return
|
|
1122
|
-
}
|
|
1123
|
-
positionOverlayCanvas(
|
|
1124
|
-
const
|
|
1117
|
+
var B;
|
|
1118
|
+
const e = document.createElement("canvas");
|
|
1119
|
+
e.width = this.captureCanvas.width, e.height = this.captureCanvas.height, e.className = "textmodeCanvas", e.id = this.generateUniqueCanvasId(), e.style.position = "absolute", e.style.pointerEvents = "none";
|
|
1120
|
+
const A = window.getComputedStyle(this.captureCanvas);
|
|
1121
|
+
let t = parseInt(A.zIndex || "0", 10);
|
|
1122
|
+
isNaN(t) && (t = 0), e.style.zIndex = (t + 1).toString();
|
|
1123
|
+
const r = this.captureCanvas.getBoundingClientRect();
|
|
1124
|
+
return e.style.width = r.width + "px", e.style.height = r.height + "px", this.positionOverlayCanvas(e), (B = this.captureCanvas.parentNode) == null || B.insertBefore(e, this.captureCanvas.nextSibling), e;
|
|
1125
|
+
}
|
|
1126
|
+
positionOverlayCanvas(e) {
|
|
1127
|
+
const A = this.captureCanvas.getBoundingClientRect();
|
|
1125
1128
|
let t = this.captureCanvas.offsetParent;
|
|
1126
1129
|
if (t && t !== document.body) {
|
|
1127
|
-
const
|
|
1128
|
-
|
|
1130
|
+
const r = t.getBoundingClientRect();
|
|
1131
|
+
e.style.top = A.top - r.top + "px", e.style.left = A.left - r.left + "px";
|
|
1129
1132
|
} else
|
|
1130
|
-
|
|
1133
|
+
e.style.top = A.top + window.scrollY + "px", e.style.left = A.left + window.scrollX + "px";
|
|
1131
1134
|
}
|
|
1132
1135
|
resize() {
|
|
1133
1136
|
this.webglCanvas.width = this.captureCanvas.width, this.webglCanvas.height = this.captureCanvas.height;
|
|
1134
|
-
const
|
|
1135
|
-
this.webglCanvas.style.width =
|
|
1137
|
+
const e = this.captureCanvas.getBoundingClientRect();
|
|
1138
|
+
this.webglCanvas.style.width = e.width + "px", this.webglCanvas.style.height = e.height + "px", this.positionOverlayCanvas(this.webglCanvas);
|
|
1136
1139
|
}
|
|
1137
1140
|
/**
|
|
1138
1141
|
* Get the WebGL context for the overlay canvas
|
|
1139
1142
|
*/
|
|
1140
1143
|
getWebGLContext() {
|
|
1141
|
-
const
|
|
1142
|
-
if (!
|
|
1144
|
+
const e = { alpha: !0, premultipliedAlpha: !1, preserveDrawingBuffer: !0 }, A = this.webglCanvas.getContext("webgl2", e) || this.webglCanvas.getContext("webgl", e);
|
|
1145
|
+
if (!A)
|
|
1143
1146
|
throw new C("WebGL context could not be created. Ensure your browser supports WebGL.");
|
|
1144
|
-
return
|
|
1147
|
+
return A;
|
|
1145
1148
|
}
|
|
1146
1149
|
// Getters
|
|
1147
1150
|
get canvas() {
|
|
@@ -1154,19 +1157,50 @@ class R {
|
|
|
1154
1157
|
return this.webglCanvas.height;
|
|
1155
1158
|
}
|
|
1156
1159
|
}
|
|
1157
|
-
|
|
1160
|
+
class m {
|
|
1161
|
+
constructor(e, A, t, r = {}) {
|
|
1162
|
+
E(this, "renderer");
|
|
1163
|
+
E(this, "fontManager");
|
|
1164
|
+
E(this, "grid");
|
|
1165
|
+
E(this, "_characterFramebuffer");
|
|
1166
|
+
E(this, "_primaryColorFramebuffer");
|
|
1167
|
+
E(this, "_secondaryColorFramebuffer");
|
|
1168
|
+
E(this, "_rotationFramebuffer");
|
|
1169
|
+
E(this, "_transformFramebuffer");
|
|
1170
|
+
E(this, "options");
|
|
1171
|
+
this.renderer = e, this.fontManager = A, this.grid = t, this.options = r, this._characterFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._primaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._rotationFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._transformFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
|
|
1172
|
+
}
|
|
1173
|
+
resize() {
|
|
1174
|
+
this._characterFramebuffer.resize(this.grid.cols, this.grid.rows), this._primaryColorFramebuffer.resize(this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer.resize(this.grid.cols, this.grid.rows), this._rotationFramebuffer.resize(this.grid.cols, this.grid.rows), this._transformFramebuffer.resize(this.grid.cols, this.grid.rows);
|
|
1175
|
+
}
|
|
1176
|
+
get characterFramebuffer() {
|
|
1177
|
+
return this._characterFramebuffer;
|
|
1178
|
+
}
|
|
1179
|
+
get primaryColorFramebuffer() {
|
|
1180
|
+
return this._primaryColorFramebuffer;
|
|
1181
|
+
}
|
|
1182
|
+
get secondaryColorFramebuffer() {
|
|
1183
|
+
return this._secondaryColorFramebuffer;
|
|
1184
|
+
}
|
|
1185
|
+
get rotationFramebuffer() {
|
|
1186
|
+
return this._rotationFramebuffer;
|
|
1187
|
+
}
|
|
1188
|
+
get transformFramebuffer() {
|
|
1189
|
+
return this._transformFramebuffer;
|
|
1190
|
+
}
|
|
1191
|
+
}
|
|
1158
1192
|
class H {
|
|
1159
1193
|
/**
|
|
1160
1194
|
* Create a new color palette instance.
|
|
1161
1195
|
* @param renderer The renderer instance.
|
|
1162
1196
|
* @param colors The RGB colors to store as [r, g, b] arrays where values are 0-255.
|
|
1163
1197
|
*/
|
|
1164
|
-
constructor(
|
|
1198
|
+
constructor(e, A) {
|
|
1165
1199
|
/** The framebuffer used to store the color palette. */
|
|
1166
1200
|
E(this, "_framebuffer");
|
|
1167
1201
|
E(this, "_renderer");
|
|
1168
1202
|
E(this, "_colors");
|
|
1169
|
-
this._renderer =
|
|
1203
|
+
this._renderer = e, this._colors = A;
|
|
1170
1204
|
const t = Math.max(this._colors.length, 1);
|
|
1171
1205
|
this._framebuffer = this._renderer.createFramebuffer(t, 1, {
|
|
1172
1206
|
filter: "nearest",
|
|
@@ -1179,32 +1213,32 @@ class H {
|
|
|
1179
1213
|
*/
|
|
1180
1214
|
_updateFramebuffer() {
|
|
1181
1215
|
if (!this._framebuffer || !this._renderer) return;
|
|
1182
|
-
const
|
|
1183
|
-
this._framebuffer.width !==
|
|
1184
|
-
const t = new Uint8Array(
|
|
1185
|
-
for (let
|
|
1186
|
-
const Q =
|
|
1216
|
+
const e = Math.max(this._colors.length, 1), A = 1;
|
|
1217
|
+
this._framebuffer.width !== e && this._framebuffer.resize(e, A);
|
|
1218
|
+
const t = new Uint8Array(e * A * 4);
|
|
1219
|
+
for (let B = 0; B < e; B++) {
|
|
1220
|
+
const Q = B < this._colors.length ? this._colors[B] : [0, 0, 0], g = B * 4;
|
|
1187
1221
|
t[g] = Q[0], t[g + 1] = Q[1], t[g + 2] = Q[2], t[g + 3] = 255;
|
|
1188
1222
|
}
|
|
1189
|
-
const
|
|
1190
|
-
|
|
1191
|
-
|
|
1223
|
+
const r = this._renderer.context;
|
|
1224
|
+
r.bindTexture(r.TEXTURE_2D, this._framebuffer.texture), r.texImage2D(
|
|
1225
|
+
r.TEXTURE_2D,
|
|
1192
1226
|
0,
|
|
1193
|
-
|
|
1194
|
-
A,
|
|
1227
|
+
r.RGBA,
|
|
1195
1228
|
e,
|
|
1229
|
+
A,
|
|
1196
1230
|
0,
|
|
1197
|
-
|
|
1198
|
-
|
|
1231
|
+
r.RGBA,
|
|
1232
|
+
r.UNSIGNED_BYTE,
|
|
1199
1233
|
t
|
|
1200
|
-
),
|
|
1234
|
+
), r.bindTexture(r.TEXTURE_2D, null);
|
|
1201
1235
|
}
|
|
1202
1236
|
/**
|
|
1203
1237
|
* Sets the colors of the palette and updates the framebuffer.
|
|
1204
1238
|
* @param newColors The new RGB colors to set as [r, g, b] arrays.
|
|
1205
1239
|
*/
|
|
1206
|
-
setColors(
|
|
1207
|
-
this._colors =
|
|
1240
|
+
setColors(e) {
|
|
1241
|
+
this._colors = e, this._updateFramebuffer();
|
|
1208
1242
|
}
|
|
1209
1243
|
/**
|
|
1210
1244
|
* Get the colors of the palette.
|
|
@@ -1225,22 +1259,11 @@ class H {
|
|
|
1225
1259
|
return this._framebuffer.texture;
|
|
1226
1260
|
}
|
|
1227
1261
|
}
|
|
1228
|
-
class
|
|
1229
|
-
constructor(A,
|
|
1230
|
-
|
|
1231
|
-
E(this, "fontManager");
|
|
1232
|
-
E(this, "grid");
|
|
1233
|
-
E(this, "_characterFramebuffer");
|
|
1234
|
-
E(this, "_primaryColorFramebuffer");
|
|
1235
|
-
E(this, "_secondaryColorFramebuffer");
|
|
1236
|
-
E(this, "_rotationFramebuffer");
|
|
1237
|
-
E(this, "_transformFramebuffer");
|
|
1262
|
+
class p extends m {
|
|
1263
|
+
constructor(A, t, r, B = {}) {
|
|
1264
|
+
super(A, t, r, B);
|
|
1238
1265
|
E(this, "palette");
|
|
1239
|
-
|
|
1240
|
-
this.renderer = A, this.fontManager = e, this.grid = t, this.options = B, this._characterFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._primaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._rotationFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._transformFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this.palette = new H(this.renderer, this.fontManager.getCharacterColors("0123456789"));
|
|
1241
|
-
}
|
|
1242
|
-
resize() {
|
|
1243
|
-
this._characterFramebuffer.resize(this.grid.cols, this.grid.rows), this._primaryColorFramebuffer.resize(this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer.resize(this.grid.cols, this.grid.rows), this._rotationFramebuffer.resize(this.grid.cols, this.grid.rows), this._transformFramebuffer.resize(this.grid.cols, this.grid.rows);
|
|
1266
|
+
this.palette = new H(this.renderer, this.fontManager.getCharacterColors(" .:-=+*%@#"));
|
|
1244
1267
|
}
|
|
1245
1268
|
characters(A) {
|
|
1246
1269
|
D.validate(
|
|
@@ -1249,12 +1272,12 @@ class V {
|
|
|
1249
1272
|
{ method: "characters", providedValue: A }
|
|
1250
1273
|
) && (this.options.characters = A, this.palette.setColors(this.fontManager.getCharacterColors(A)));
|
|
1251
1274
|
}
|
|
1252
|
-
characterColor(A,
|
|
1275
|
+
characterColor(A, t = A, r = A, B = 255) {
|
|
1253
1276
|
D.validate(
|
|
1254
|
-
[A,
|
|
1277
|
+
[A, t, r, B].every((Q) => Q >= 0 && Q <= 255),
|
|
1255
1278
|
"Character color values must be between 0 and 255",
|
|
1256
|
-
{ method: "characterColor", providedValues: { r: A, g:
|
|
1257
|
-
) && (this.options.characterColor = [A,
|
|
1279
|
+
{ method: "characterColor", providedValues: { r: A, g: t, b: r, a: B } }
|
|
1280
|
+
) && (this.options.characterColor = [A, t, r, B]);
|
|
1258
1281
|
}
|
|
1259
1282
|
characterColorMode(A) {
|
|
1260
1283
|
D.validate(
|
|
@@ -1263,12 +1286,12 @@ class V {
|
|
|
1263
1286
|
{ method: "characterColorMode", providedValue: A }
|
|
1264
1287
|
) && (this.options.characterColorMode = A);
|
|
1265
1288
|
}
|
|
1266
|
-
backgroundColor(A,
|
|
1289
|
+
backgroundColor(A, t = A, r = A, B = 255) {
|
|
1267
1290
|
D.validate(
|
|
1268
|
-
[A,
|
|
1291
|
+
[A, t, r, B].every((Q) => Q >= 0 && Q <= 255),
|
|
1269
1292
|
"Background color values must be between 0 and 255",
|
|
1270
|
-
{ method: "backgroundColor", providedValues: { r: A, g:
|
|
1271
|
-
) && (this.options.backgroundColor = [A,
|
|
1293
|
+
{ method: "backgroundColor", providedValues: { r: A, g: t, b: r, a: B } }
|
|
1294
|
+
) && (this.options.backgroundColor = [A, t, r, B]);
|
|
1272
1295
|
}
|
|
1273
1296
|
backgroundColorMode(A) {
|
|
1274
1297
|
D.validate(
|
|
@@ -1305,22 +1328,8 @@ class V {
|
|
|
1305
1328
|
{ method: "flipVertically", providedValue: A }
|
|
1306
1329
|
) && (this.options.flipVertically = !!A);
|
|
1307
1330
|
}
|
|
1308
|
-
get characterFramebuffer() {
|
|
1309
|
-
return this._characterFramebuffer;
|
|
1310
|
-
}
|
|
1311
|
-
get primaryColorFramebuffer() {
|
|
1312
|
-
return this._primaryColorFramebuffer;
|
|
1313
|
-
}
|
|
1314
|
-
get secondaryColorFramebuffer() {
|
|
1315
|
-
return this._secondaryColorFramebuffer;
|
|
1316
|
-
}
|
|
1317
|
-
get rotationFramebuffer() {
|
|
1318
|
-
return this._rotationFramebuffer;
|
|
1319
|
-
}
|
|
1320
|
-
get transformFramebuffer() {
|
|
1321
|
-
return this._transformFramebuffer;
|
|
1322
|
-
}
|
|
1323
1331
|
}
|
|
1332
|
+
var L = "precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;void main(){vec2 cell=floor(gl_FragCoord.xy);vec2 texel=(cell+0.5)/u_gridCellDimensions;gl_FragColor=texture2D(u_sketchTexture,texel);}", V = "precision lowp float;uniform sampler2D u_colorSampleFramebuffer;uniform sampler2D u_charPaletteTexture;uniform vec2 u_charPaletteSize;uniform vec2 u_textureSize;uniform vec2 u_brightnessRange;void main(){vec2 uv=(floor(gl_FragCoord.xy)+0.5)/u_textureSize;vec4 color=texture2D(u_colorSampleFramebuffer,uv);if(color.a==0.0){gl_FragColor=vec4(0.0);return;}float brightness=dot(color.rgb,vec3(0.299,0.587,0.114))*255.0;if(brightness<u_brightnessRange.x||brightness>u_brightnessRange.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-u_brightnessRange.x)/(u_brightnessRange.y-u_brightnessRange.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);float u=(idx+0.5)/u_charPaletteSize.x;vec3 charColor=texture2D(u_charPaletteTexture,vec2(u,0.0)).rgb;gl_FragColor=vec4(charColor,color.a);}";
|
|
1324
1333
|
const k = {
|
|
1325
1334
|
/** Enable/disable the renderer */
|
|
1326
1335
|
enabled: !0,
|
|
@@ -1345,16 +1354,16 @@ const k = {
|
|
|
1345
1354
|
/** Range of brightness values to map to ASCII characters */
|
|
1346
1355
|
brightnessRange: [0, 255]
|
|
1347
1356
|
};
|
|
1348
|
-
class
|
|
1349
|
-
constructor(
|
|
1350
|
-
super(
|
|
1357
|
+
class b extends p {
|
|
1358
|
+
constructor(A, t, r) {
|
|
1359
|
+
super(A, t, r, { ...k });
|
|
1351
1360
|
E(this, "sampleShader");
|
|
1352
1361
|
E(this, "charMappingShader");
|
|
1353
1362
|
E(this, "sampleFramebuffer");
|
|
1354
|
-
this.sampleShader = new P(
|
|
1363
|
+
this.sampleShader = new P(A.context, u, L), this.charMappingShader = new P(A.context, u, V), this.sampleFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
|
|
1355
1364
|
}
|
|
1356
|
-
convert(
|
|
1357
|
-
this.sampleFramebuffer.begin(), this.renderer.clear(0, 0, 0, 0), this.renderer.shader(this.sampleShader), this.renderer.setUniform("u_sketchTexture",
|
|
1365
|
+
convert(A) {
|
|
1366
|
+
this.sampleFramebuffer.begin(), this.renderer.clear(0, 0, 0, 0), this.renderer.shader(this.sampleShader), this.renderer.setUniform("u_sketchTexture", A), this.renderer.setUniform("u_gridCellDimensions", [this.grid.cols, this.grid.rows]), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this.sampleFramebuffer.end(), this._primaryColorFramebuffer.begin(), this.options.characterColorMode === "fixed" ? this.renderer.background(this.options.characterColor[0], this.options.characterColor[1], this.options.characterColor[2], this.options.characterColor[3]) : (this.renderer.clear(0, 0, 0, 0), this.renderer.image(this.sampleFramebuffer, 0, 0, this.grid.cols, this.grid.rows)), this._primaryColorFramebuffer.end(), this._secondaryColorFramebuffer.begin(), this.options.backgroundColorMode === "fixed" ? this.renderer.background(this.options.backgroundColor[0], this.options.backgroundColor[1], this.options.backgroundColor[2], this.options.backgroundColor[3]) : (this.renderer.clear(0, 0, 0, 0), this.renderer.image(this.sampleFramebuffer, 0, 0, this.grid.cols, this.grid.rows)), this._secondaryColorFramebuffer.end(), this._transformFramebuffer.begin(), this.renderer.background(
|
|
1358
1367
|
this.options.invert ? 255 : 0,
|
|
1359
1368
|
this.options.flipHorizontally ? 255 : 0,
|
|
1360
1369
|
this.options.flipVertically ? 255 : 0
|
|
@@ -1363,43 +1372,87 @@ class L extends V {
|
|
|
1363
1372
|
resize() {
|
|
1364
1373
|
super.resize(), this.sampleFramebuffer.resize(this.grid.cols, this.grid.rows);
|
|
1365
1374
|
}
|
|
1366
|
-
brightnessRange(
|
|
1375
|
+
brightnessRange(A) {
|
|
1367
1376
|
D.validate(
|
|
1368
|
-
Array.isArray(
|
|
1377
|
+
Array.isArray(A) && A.length === 2 && A.every((t) => typeof t == "number" && t >= 0 && t <= 255),
|
|
1369
1378
|
"Brightness range must be an array of two numbers between 0 and 255.",
|
|
1370
|
-
{ method: "brightnessRange", providedValue:
|
|
1371
|
-
) && (this.options.brightnessRange =
|
|
1379
|
+
{ method: "brightnessRange", providedValue: A }
|
|
1380
|
+
) && (this.options.brightnessRange = A);
|
|
1372
1381
|
}
|
|
1373
1382
|
}
|
|
1374
|
-
|
|
1375
|
-
|
|
1383
|
+
const X = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1384
|
+
__proto__: null,
|
|
1385
|
+
TextmodeBrightnessConverter: b,
|
|
1386
|
+
TextmodeConverter: m,
|
|
1387
|
+
TextmodeFeatureConverter: p
|
|
1388
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1389
|
+
var N = "precision lowp float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_rotationTexture;uniform sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;uniform float u_pixelRatio;varying vec2 v_uv;mat2 rotate2D(float a){float s=sin(a),c=cos(a);return mat2(c,-s,s,c);}void main(){vec2 screen=v_uv*u_captureDimensions;vec2 cellSize=u_gridPixelDimensions/u_gridCellDimensions;vec2 cell=floor(screen/cellSize);vec2 frac=fract(screen/cellSize);vec2 charUV=(cell+0.5)/u_gridCellDimensions;vec4 charMap=texture2D(u_asciiCharacterTexture,charUV);if(charMap.a<0.01){gl_FragColor=u_backgroundMode==0? vec4(0,0,0,1): texture2D(u_captureTexture,v_uv);return;}vec4 fg=texture2D(u_primaryColorTexture,charUV);vec4 bg=texture2D(u_secondaryColorTexture,charUV);vec4 tf=texture2D(u_transformTexture,charUV);bool inv=tf.r>0.5,flipX=tf.g>0.5,flipY=tf.b>0.5;int idx=int(charMap.r*255.0+0.5)+int(charMap.g*255.0+0.5)*256;int col=int(mod(float(idx),u_charsetDimensions.x));int row=idx/int(u_charsetDimensions.x);vec2 base=vec2(float(col),float(row))/u_charsetDimensions;vec2 cellSz=1.0/u_charsetDimensions;vec2 f=frac;if(flipX)f.x=1.0-f.x;if(flipY)f.y=1.0-f.y;vec4 rot=texture2D(u_rotationTexture,charUV);float angle=((rot.r*255.0+rot.g)*360.0)/255.0*0.01745329252;if(abs(angle)>0.01){f=rotate2D(angle)*(f-0.5)+0.5;}if(f.x<0.0||f.x>1.0||f.y<0.0||f.y>1.0){gl_FragColor=inv ? fg : bg;return;}vec4 charTex=texture2D(u_characterTexture,base+f*cellSz);gl_FragColor=charTex.r>0.5? vec4(inv ? bg.rgb : fg.rgb,1.0): vec4(inv ? fg.rgb : bg.rgb,1.0);}";
|
|
1390
|
+
class J {
|
|
1391
|
+
constructor(e, A, t) {
|
|
1392
|
+
E(this, "renderer");
|
|
1393
|
+
E(this, "font");
|
|
1394
|
+
E(this, "grid");
|
|
1395
|
+
E(this, "converters");
|
|
1396
|
+
E(this, "_resultFramebuffer");
|
|
1397
|
+
E(this, "_asciiShader");
|
|
1398
|
+
this.renderer = e, this.font = A, this.grid = t, this._asciiShader = this.renderer.createShader(u, N), this.converters = {
|
|
1399
|
+
brightness: new b(e, A, t)
|
|
1400
|
+
}, this._resultFramebuffer = this.renderer.createFramebuffer(this.grid.width, this.grid.height);
|
|
1401
|
+
}
|
|
1402
|
+
render(e) {
|
|
1403
|
+
for (const A of Object.values(this.converters))
|
|
1404
|
+
A.convert(e);
|
|
1405
|
+
this._resultFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this._asciiShader), this.renderer.setUniform("u_characterTexture", this.font.fontFramebuffer), this.renderer.setUniform("u_charsetDimensions", [this.font.textureColumns, this.font.textureRows]), this.renderer.setUniform("u_asciiCharacterTexture", this.converters.brightness.characterFramebuffer.texture), this.renderer.setUniform("u_primaryColorTexture", this.converters.brightness.primaryColorFramebuffer.texture), this.renderer.setUniform("u_secondaryColorTexture", this.converters.brightness.secondaryColorFramebuffer.texture), this.renderer.setUniform("u_transformTexture", this.converters.brightness.transformFramebuffer.texture), this.renderer.setUniform("u_rotationTexture", this.converters.brightness.rotationFramebuffer.texture), this.renderer.setUniform("u_captureTexture", e.texture), this.renderer.setUniform("u_backgroundMode", !1), this.renderer.setUniform("u_captureDimensions", [this._resultFramebuffer.width, this._resultFramebuffer.height]), this.renderer.setUniform("u_gridCellDimensions", [this.grid.cols, this.grid.rows]), this.renderer.setUniform("u_gridPixelDimensions", [this.grid.width, this.grid.height]), this.renderer.setUniform("u_pixelRatio", 1), this.renderer.rect(0, 0, this._resultFramebuffer.width, this._resultFramebuffer.height), this._resultFramebuffer.end();
|
|
1406
|
+
}
|
|
1407
|
+
get(e) {
|
|
1408
|
+
const A = this.converters[e];
|
|
1409
|
+
if (!A)
|
|
1410
|
+
throw new Error(`Converter "${e}" not found in pipeline.`);
|
|
1411
|
+
return A;
|
|
1412
|
+
}
|
|
1413
|
+
get texture() {
|
|
1414
|
+
return this._resultFramebuffer;
|
|
1415
|
+
}
|
|
1416
|
+
resize() {
|
|
1417
|
+
this._resultFramebuffer.resize(this.grid.width, this.grid.height);
|
|
1418
|
+
for (const e of Object.values(this.converters))
|
|
1419
|
+
e.resize();
|
|
1420
|
+
}
|
|
1421
|
+
}
|
|
1422
|
+
class f {
|
|
1423
|
+
constructor(e, A = {}) {
|
|
1376
1424
|
/** The canvas element to capture content from */
|
|
1377
1425
|
E(this, "captureCanvas");
|
|
1378
1426
|
/** Our WebGL overlay canvas manager */
|
|
1379
1427
|
E(this, "textmodeCanvas");
|
|
1380
1428
|
/** Core WebGL renderer */
|
|
1381
1429
|
E(this, "renderer");
|
|
1382
|
-
E(this, "asciiShader");
|
|
1383
1430
|
E(this, "canvasFramebuffer");
|
|
1384
|
-
E(this, "
|
|
1385
|
-
E(this, "_fontManager");
|
|
1431
|
+
E(this, "_font");
|
|
1386
1432
|
E(this, "_grid");
|
|
1387
1433
|
E(this, "resizeObserver");
|
|
1388
|
-
|
|
1389
|
-
this
|
|
1390
|
-
|
|
1391
|
-
|
|
1434
|
+
// Auto-rendering properties
|
|
1435
|
+
E(this, "_mode");
|
|
1436
|
+
E(this, "_frameRateLimit");
|
|
1437
|
+
E(this, "animationFrameId", null);
|
|
1438
|
+
E(this, "lastFrameTime", 0);
|
|
1439
|
+
E(this, "frameInterval");
|
|
1440
|
+
E(this, "_frameRate", 0);
|
|
1441
|
+
E(this, "lastRenderTime", 0);
|
|
1442
|
+
E(this, "_pipeline");
|
|
1443
|
+
this.captureCanvas = e, this.textmodeCanvas = new z(e), this._mode = A.renderMode ?? "auto", this._frameRateLimit = A.frameRate ?? 120, this.frameInterval = 1e3 / this._frameRateLimit, this.renderer = new U(this.textmodeCanvas.getWebGLContext()), this.canvasFramebuffer = this.renderer.createFramebuffer(e.width, e.height), this._font = new S(this.renderer, A.fontSize ?? 16);
|
|
1392
1444
|
}
|
|
1393
1445
|
/**
|
|
1394
1446
|
* Static factory method for creating and initializing a Textmodifier instance.
|
|
1395
1447
|
* @param canvas The HTML canvas element to capture content from.
|
|
1396
1448
|
* @param opts Optional configuration options for the `Textmodifier` instance.
|
|
1449
|
+
* @ignore
|
|
1397
1450
|
*/
|
|
1398
|
-
static async create(
|
|
1399
|
-
const t = new
|
|
1400
|
-
await t.
|
|
1401
|
-
const
|
|
1402
|
-
return t._grid = new
|
|
1451
|
+
static async create(e, A = {}) {
|
|
1452
|
+
const t = new f(e, A);
|
|
1453
|
+
await t._font.initialize();
|
|
1454
|
+
const r = t._font.maxGlyphDimensions;
|
|
1455
|
+
return t._grid = new O(t.captureCanvas, r.width, r.height), t._pipeline = new J(t.renderer, t._font, t._grid), t.setupEventListeners(), t.startAutoRendering(), t;
|
|
1403
1456
|
}
|
|
1404
1457
|
setupEventListeners() {
|
|
1405
1458
|
window.addEventListener("resize", this.resize.bind(this)), window.ResizeObserver && (this.resizeObserver = new ResizeObserver(() => {
|
|
@@ -1410,39 +1463,123 @@ class d {
|
|
|
1410
1463
|
* Update the font used for rendering.
|
|
1411
1464
|
* @param fontUrl The URL of the font to load.
|
|
1412
1465
|
*/
|
|
1413
|
-
async loadFont(
|
|
1414
|
-
return this.
|
|
1415
|
-
const
|
|
1416
|
-
this._grid.resizeCellPixelDimensions(
|
|
1466
|
+
async loadFont(e) {
|
|
1467
|
+
return this._font.loadFont(e).then(() => {
|
|
1468
|
+
const A = this._font.maxGlyphDimensions;
|
|
1469
|
+
this._grid.resizeCellPixelDimensions(A.width, A.height), this._pipeline.resize(), this.renderer.resetViewport();
|
|
1417
1470
|
});
|
|
1418
1471
|
}
|
|
1419
1472
|
/**
|
|
1420
1473
|
* Apply textmode rendering to the canvas.
|
|
1474
|
+
*
|
|
1475
|
+
* **Note:** In `'auto'` mode, this is called automatically.
|
|
1476
|
+
* In `'manual'` mode, you need to call this method when you want to update the rendering.
|
|
1421
1477
|
*/
|
|
1422
1478
|
render() {
|
|
1423
|
-
this.
|
|
1479
|
+
this.measureFrameRate(), this.canvasFramebuffer.update(this.captureCanvas), this._pipeline.render(this.canvasFramebuffer), this.renderer.clear(), this.renderer.image(this._pipeline.texture, this._grid.offsetX, this._grid.offsetY, this._pipeline.texture.width, this._pipeline.texture.height);
|
|
1480
|
+
}
|
|
1481
|
+
resize() {
|
|
1482
|
+
this.textmodeCanvas.resize(), this.canvasFramebuffer.resize(this.textmodeCanvas.width, this.textmodeCanvas.height), this._grid.updateCanvas(this.textmodeCanvas.canvas), this._pipeline.resize(), this.renderer.resetViewport(), this._mode !== "manual" && this.render();
|
|
1424
1483
|
}
|
|
1425
1484
|
/**
|
|
1426
|
-
*
|
|
1427
|
-
* @param level The error handling level to set.
|
|
1485
|
+
* Start automatic rendering
|
|
1428
1486
|
*/
|
|
1429
|
-
|
|
1430
|
-
|
|
1487
|
+
startAutoRendering() {
|
|
1488
|
+
if (this._mode !== "auto") return;
|
|
1489
|
+
const e = (A) => {
|
|
1490
|
+
A - this.lastFrameTime >= this.frameInterval && (this.render(), this.lastFrameTime = A), this.animationFrameId = requestAnimationFrame(e);
|
|
1491
|
+
};
|
|
1492
|
+
this.animationFrameId = requestAnimationFrame(e);
|
|
1431
1493
|
}
|
|
1432
|
-
|
|
1433
|
-
|
|
1494
|
+
/**
|
|
1495
|
+
* Update FPS measurement - works for both auto and manual modes
|
|
1496
|
+
*/
|
|
1497
|
+
measureFrameRate() {
|
|
1498
|
+
const e = performance.now();
|
|
1499
|
+
if (this.lastRenderTime > 0) {
|
|
1500
|
+
const A = e - this.lastRenderTime;
|
|
1501
|
+
this._frameRate = 1e3 / A;
|
|
1502
|
+
}
|
|
1503
|
+
this.lastRenderTime = e;
|
|
1434
1504
|
}
|
|
1505
|
+
/**
|
|
1506
|
+
* Stop automatic rendering
|
|
1507
|
+
*/
|
|
1508
|
+
stopAutoRendering() {
|
|
1509
|
+
this.animationFrameId && (cancelAnimationFrame(this.animationFrameId), this.animationFrameId = null);
|
|
1510
|
+
}
|
|
1511
|
+
/**
|
|
1512
|
+
* Change the rendering mode.
|
|
1513
|
+
*/
|
|
1514
|
+
renderMode(e) {
|
|
1515
|
+
if (this._mode !== e) {
|
|
1516
|
+
if (e === void 0)
|
|
1517
|
+
return this._mode;
|
|
1518
|
+
this.stopAutoRendering(), this._mode = e, e === "auto" && this.startAutoRendering();
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
/**
|
|
1522
|
+
* Set the maximum frame rate for auto rendering. If called without arguments, returns the current measured frame rate.
|
|
1523
|
+
* @param fps The maximum frames per second for auto rendering.
|
|
1524
|
+
*/
|
|
1525
|
+
frameRate(e) {
|
|
1526
|
+
if (e === void 0)
|
|
1527
|
+
return this._frameRate;
|
|
1528
|
+
this._frameRateLimit = e, this.frameInterval = 1e3 / e;
|
|
1529
|
+
}
|
|
1530
|
+
converter() {
|
|
1531
|
+
return this._pipeline.get("brightness");
|
|
1532
|
+
}
|
|
1533
|
+
/** Get the current grid object used for rendering. */
|
|
1435
1534
|
get grid() {
|
|
1436
1535
|
return this._grid;
|
|
1437
1536
|
}
|
|
1438
|
-
|
|
1439
|
-
|
|
1537
|
+
/** Get the current font object used for rendering. */
|
|
1538
|
+
get font() {
|
|
1539
|
+
return this._font;
|
|
1540
|
+
}
|
|
1541
|
+
/** Get the current rendering mode.*/
|
|
1542
|
+
get mode() {
|
|
1543
|
+
return this._mode;
|
|
1544
|
+
}
|
|
1545
|
+
/** Get the current textmode conversion pipeline */
|
|
1546
|
+
get pipeline() {
|
|
1547
|
+
return this._pipeline;
|
|
1548
|
+
}
|
|
1549
|
+
}
|
|
1550
|
+
class K {
|
|
1551
|
+
/**
|
|
1552
|
+
* Create a {@link Textmodifier} instance to apply textmode rendering to a given canvas.
|
|
1553
|
+
* @param canvas The HTML canvas element to capture content from.
|
|
1554
|
+
* @param opts Optional configuration options for the Textmodifier instance.
|
|
1555
|
+
* @returns A Promise that resolves to a Textmodifier instance.
|
|
1556
|
+
*/
|
|
1557
|
+
static async create(e, A = {}) {
|
|
1558
|
+
return f.create(e, A);
|
|
1559
|
+
}
|
|
1560
|
+
/**
|
|
1561
|
+
* Set the global error handling level for the library. This applies to all `Textmodifier` instances.
|
|
1562
|
+
* @param level The error handling level to set.
|
|
1563
|
+
*/
|
|
1564
|
+
static setErrorLevel(e) {
|
|
1565
|
+
D.setGlobalLevel(e);
|
|
1566
|
+
}
|
|
1567
|
+
/**
|
|
1568
|
+
* The current version of the library.
|
|
1569
|
+
*/
|
|
1570
|
+
static get version() {
|
|
1571
|
+
return "0.0.3";
|
|
1572
|
+
}
|
|
1573
|
+
constructor() {
|
|
1574
|
+
throw new Error("Textmode is a static class and cannot be instantiated.");
|
|
1440
1575
|
}
|
|
1441
1576
|
}
|
|
1442
1577
|
export {
|
|
1443
|
-
|
|
1444
|
-
|
|
1445
|
-
|
|
1446
|
-
|
|
1447
|
-
|
|
1578
|
+
z as TextmodeCanvas,
|
|
1579
|
+
X as TextmodeConverters,
|
|
1580
|
+
Y as TextmodeErrorLevel,
|
|
1581
|
+
S as TextmodeFont,
|
|
1582
|
+
O as TextmodeGrid,
|
|
1583
|
+
f as Textmodifier,
|
|
1584
|
+
K as textmode
|
|
1448
1585
|
};
|