textmode.js 0.0.10-beta.5 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/textmode.esm.js +1194 -878
- package/dist/textmode.umd.js +12 -12
- package/dist/types/Textmode.d.ts +21 -1
- package/dist/types/errors/ErrorHandler.d.ts +2 -5
- package/dist/types/export/svg/SVGPathGenerator.d.ts +1 -1
- package/dist/types/export/svg/types.d.ts +3 -3
- package/dist/types/index.d.ts +2 -2
- package/dist/types/rendering/webgl/Renderer.d.ts +14 -1
- package/dist/types/rendering/webgl/geometries/Rectangle.d.ts +23 -8
- package/dist/types/rendering/webgl/primitives/SolidRectangle.d.ts +1 -0
- package/dist/types/textmode/ConversionPipeline.d.ts +54 -0
- package/dist/types/textmode/Textmodifier.d.ts +139 -3
- package/dist/types/textmode/converters/BrightnessConverter.d.ts +14 -4
- package/dist/types/textmode/converters/Converter.d.ts +13 -6
- package/dist/types/textmode/converters/FeatureConverter.d.ts +15 -6
- package/dist/types/textmode/font/CharacterColorMapper.d.ts +1 -2
- package/dist/types/textmode/font/CharacterExtractor.d.ts +1 -1
- package/dist/types/textmode/font/TextmodeFont.d.ts +5 -4
- package/dist/types/textmode/font/index.d.ts +1 -1
- package/dist/types/textmode/font/types.d.ts +110 -0
- package/dist/types/types/index.d.ts +4 -0
- package/package.json +1 -1
- package/dist/types/lib/Typr.min.d.ts +0 -85
package/dist/textmode.esm.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
var BA = Object.defineProperty;
|
|
2
|
-
var
|
|
3
|
-
var
|
|
2
|
+
var oA = (i, A, r) => A in i ? BA(i, A, { enumerable: !0, configurable: !0, writable: !0, value: r }) : i[A] = r;
|
|
3
|
+
var E = (i, A, r) => oA(i, typeof A != "symbol" ? A + "" : A, r);
|
|
4
4
|
class T extends Error {
|
|
5
5
|
constructor(r, e, t = {}) {
|
|
6
6
|
const n = T.createFormattedMessage(r, t);
|
|
7
7
|
super(n);
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
E(this, "originalError");
|
|
9
|
+
E(this, "context");
|
|
10
10
|
this.name = "TextmodeError", this.originalError = e, this.context = t;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
@@ -19,9 +19,9 @@ class T extends Error {
|
|
|
19
19
|
|
|
20
20
|
📋 Context:`;
|
|
21
21
|
for (const [n, a] of Object.entries(e)) {
|
|
22
|
-
const
|
|
22
|
+
const s = T.formatValue(a);
|
|
23
23
|
t += `
|
|
24
|
-
- ${n}: ${
|
|
24
|
+
- ${n}: ${s}`;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
return t += `
|
|
@@ -47,15 +47,15 @@ class T extends Error {
|
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
var gA = /* @__PURE__ */ ((i) => (i[i.SILENT = 0] = "SILENT", i[i.WARNING = 1] = "WARNING", i[i.ERROR = 2] = "ERROR", i[i.THROW = 3] = "THROW", i))(gA || {});
|
|
50
|
-
const
|
|
50
|
+
const z = class z {
|
|
51
51
|
constructor() {
|
|
52
|
-
|
|
52
|
+
E(this, "_options", {
|
|
53
53
|
globalLevel: 3
|
|
54
54
|
/* THROW */
|
|
55
55
|
});
|
|
56
56
|
}
|
|
57
57
|
static getInstance() {
|
|
58
|
-
return
|
|
58
|
+
return z._instance || (z._instance = new z()), z._instance;
|
|
59
59
|
}
|
|
60
60
|
/**
|
|
61
61
|
* Handle an error based on the configured settings
|
|
@@ -103,19 +103,19 @@ const Y = class Y {
|
|
|
103
103
|
this._options.globalLevel = A;
|
|
104
104
|
}
|
|
105
105
|
};
|
|
106
|
-
|
|
107
|
-
let
|
|
108
|
-
const
|
|
106
|
+
E(z, "_instance", null);
|
|
107
|
+
let rA = z;
|
|
108
|
+
const F = rA.getInstance();
|
|
109
109
|
class EA {
|
|
110
110
|
constructor(A, r, e = r, t = {}) {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
111
|
+
E(this, "gl");
|
|
112
|
+
E(this, "_framebuffer");
|
|
113
|
+
E(this, "_texture");
|
|
114
|
+
E(this, "_width");
|
|
115
|
+
E(this, "_height");
|
|
116
|
+
E(this, "options");
|
|
117
|
+
E(this, "previousState", null);
|
|
118
|
+
E(this, "_pixels", null);
|
|
119
119
|
this.gl = A, this._width = r, this._height = e, this.options = {
|
|
120
120
|
filter: "nearest",
|
|
121
121
|
wrap: "clamp",
|
|
@@ -188,16 +188,16 @@ class EA {
|
|
|
188
188
|
get(A, r, e, t) {
|
|
189
189
|
const { gl: n } = this;
|
|
190
190
|
if (A === void 0 && r === void 0) {
|
|
191
|
-
const a = new Uint8Array(this._width * this._height * 4),
|
|
192
|
-
return n.bindFramebuffer(n.FRAMEBUFFER, this._framebuffer), n.readPixels(0, 0, this._width, this._height, n.RGBA, n.UNSIGNED_BYTE, a), n.bindFramebuffer(n.FRAMEBUFFER,
|
|
191
|
+
const a = new Uint8Array(this._width * this._height * 4), s = n.getParameter(n.FRAMEBUFFER_BINDING);
|
|
192
|
+
return n.bindFramebuffer(n.FRAMEBUFFER, this._framebuffer), n.readPixels(0, 0, this._width, this._height, n.RGBA, n.UNSIGNED_BYTE, a), n.bindFramebuffer(n.FRAMEBUFFER, s), a;
|
|
193
193
|
} else if (e === void 0 && t === void 0) {
|
|
194
194
|
(A < 0 || r < 0 || A >= this._width || r >= this._height) && (console.warn("The x and y values passed to Framebuffer.get are outside of its range and will be clamped."), A = Math.max(0, Math.min(A, this._width - 1)), r = Math.max(0, Math.min(r, this._height - 1)));
|
|
195
|
-
const a = new Uint8Array(4),
|
|
196
|
-
return n.bindFramebuffer(n.FRAMEBUFFER, this._framebuffer), n.readPixels(A, r, 1, 1, n.RGBA, n.UNSIGNED_BYTE, a), n.bindFramebuffer(n.FRAMEBUFFER,
|
|
195
|
+
const a = new Uint8Array(4), s = n.getParameter(n.FRAMEBUFFER_BINDING);
|
|
196
|
+
return n.bindFramebuffer(n.FRAMEBUFFER, this._framebuffer), n.readPixels(A, r, 1, 1, n.RGBA, n.UNSIGNED_BYTE, a), n.bindFramebuffer(n.FRAMEBUFFER, s), [a[0], a[1], a[2], a[3]];
|
|
197
197
|
} else {
|
|
198
198
|
A = Math.max(0, Math.min(A, this._width - 1)), r = Math.max(0, Math.min(r, this._height - 1)), e = Math.max(1, Math.min(e, this._width - A)), t = Math.max(1, Math.min(t, this._height - r));
|
|
199
|
-
const a = new Uint8Array(e * t * 4),
|
|
200
|
-
return n.bindFramebuffer(n.FRAMEBUFFER, this._framebuffer), n.readPixels(A, r, e, t, n.RGBA, n.UNSIGNED_BYTE, a), n.bindFramebuffer(n.FRAMEBUFFER,
|
|
199
|
+
const a = new Uint8Array(e * t * 4), s = n.getParameter(n.FRAMEBUFFER_BINDING);
|
|
200
|
+
return n.bindFramebuffer(n.FRAMEBUFFER, this._framebuffer), n.readPixels(A, r, e, t, n.RGBA, n.UNSIGNED_BYTE, a), n.bindFramebuffer(n.FRAMEBUFFER, s), a;
|
|
201
201
|
}
|
|
202
202
|
}
|
|
203
203
|
// Getters
|
|
@@ -217,101 +217,100 @@ class EA {
|
|
|
217
217
|
return this._pixels;
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
|
-
class
|
|
221
|
-
constructor(A, r, e, t, n) {
|
|
220
|
+
class aA {
|
|
221
|
+
constructor(A, r, e, t, n, a = {}) {
|
|
222
222
|
/** The WebGL rendering context */
|
|
223
|
-
|
|
224
|
-
/** The buffer containing
|
|
225
|
-
|
|
226
|
-
/** The number of vertices in
|
|
227
|
-
|
|
223
|
+
E(this, "gl");
|
|
224
|
+
/** The vertex buffer containing position and optional texture coordinates */
|
|
225
|
+
E(this, "vertexBuffer");
|
|
226
|
+
/** The number of vertices in this geometry (always 6 for two triangles) */
|
|
227
|
+
E(this, "vertexCount", 6);
|
|
228
|
+
/** The rendering mode: textured or solid color */
|
|
229
|
+
E(this, "renderMode");
|
|
230
|
+
/** Bytes per vertex: 8 for position-only, 16 for position+texture */
|
|
231
|
+
E(this, "bytesPerVertex");
|
|
228
232
|
this.gl = A;
|
|
229
|
-
const
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
const
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
233
|
+
const s = a.textured ?? !0;
|
|
234
|
+
this.renderMode = s ? "textured" : "solid", this.bytesPerVertex = s ? 16 : 8;
|
|
235
|
+
const B = A.getParameter(A.VIEWPORT), g = B[2], o = B[3], u = A.getParameter(A.FRAMEBUFFER_BINDING) !== null, h = r / g * 2 - 1, c = (r + t) / g * 2 - 1;
|
|
236
|
+
let D, l;
|
|
237
|
+
u ? (D = e / o * 2 - 1, l = (e + n) / o * 2 - 1) : (D = 1 - e / o * 2, l = 1 - (e + n) / o * 2);
|
|
238
|
+
const C = this.generateVertices(h, D, c, l, s);
|
|
239
|
+
this.vertexBuffer = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.vertexBuffer), A.bufferData(A.ARRAY_BUFFER, C, A.STATIC_DRAW);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Generate vertex data for the rectangle
|
|
243
|
+
* @private
|
|
244
|
+
*/
|
|
245
|
+
generateVertices(A, r, e, t, n) {
|
|
246
|
+
return n ? new Float32Array([
|
|
247
|
+
A,
|
|
248
|
+
t,
|
|
238
249
|
0,
|
|
250
|
+
1,
|
|
239
251
|
// bottom-left
|
|
240
|
-
|
|
241
|
-
|
|
252
|
+
e,
|
|
253
|
+
t,
|
|
254
|
+
1,
|
|
242
255
|
1,
|
|
243
|
-
0,
|
|
244
256
|
// bottom-right
|
|
245
|
-
|
|
246
|
-
|
|
257
|
+
A,
|
|
258
|
+
r,
|
|
259
|
+
0,
|
|
247
260
|
0,
|
|
248
|
-
1,
|
|
249
261
|
// top-left
|
|
250
|
-
|
|
251
|
-
|
|
262
|
+
A,
|
|
263
|
+
r,
|
|
264
|
+
0,
|
|
252
265
|
0,
|
|
253
|
-
1,
|
|
254
266
|
// top-left
|
|
255
|
-
|
|
256
|
-
|
|
267
|
+
e,
|
|
268
|
+
t,
|
|
269
|
+
1,
|
|
257
270
|
1,
|
|
258
|
-
0,
|
|
259
271
|
// bottom-right
|
|
260
|
-
|
|
261
|
-
|
|
272
|
+
e,
|
|
273
|
+
r,
|
|
262
274
|
1,
|
|
263
|
-
|
|
275
|
+
0
|
|
264
276
|
// top-right
|
|
265
277
|
]) : new Float32Array([
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
0,
|
|
269
|
-
1,
|
|
278
|
+
A,
|
|
279
|
+
t,
|
|
270
280
|
// bottom-left
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
1,
|
|
274
|
-
1,
|
|
281
|
+
e,
|
|
282
|
+
t,
|
|
275
283
|
// bottom-right
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
0,
|
|
279
|
-
0,
|
|
284
|
+
A,
|
|
285
|
+
r,
|
|
280
286
|
// top-left
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
0,
|
|
284
|
-
0,
|
|
287
|
+
A,
|
|
288
|
+
r,
|
|
285
289
|
// top-left
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
1,
|
|
289
|
-
1,
|
|
290
|
+
e,
|
|
291
|
+
t,
|
|
290
292
|
// bottom-right
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
1,
|
|
294
|
-
0
|
|
293
|
+
e,
|
|
294
|
+
r
|
|
295
295
|
// top-right
|
|
296
296
|
]);
|
|
297
|
-
this.numVertices = 6, this.buffer = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.buffer), A.bufferData(A.ARRAY_BUFFER, u, A.STATIC_DRAW);
|
|
298
297
|
}
|
|
299
298
|
/**
|
|
300
|
-
*
|
|
299
|
+
* Render the rectangle using the appropriate vertex attributes
|
|
301
300
|
*/
|
|
302
|
-
|
|
303
|
-
this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.
|
|
304
|
-
|
|
305
|
-
this.gl.enableVertexAttribArray(A), this.gl.vertexAttribPointer(A, 2, this.gl.FLOAT, !1,
|
|
301
|
+
render() {
|
|
302
|
+
this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.vertexBuffer);
|
|
303
|
+
const A = 0, r = 1;
|
|
304
|
+
this.gl.enableVertexAttribArray(A), this.gl.vertexAttribPointer(A, 2, this.gl.FLOAT, !1, this.bytesPerVertex, 0), this.renderMode === "textured" && (this.gl.enableVertexAttribArray(r), this.gl.vertexAttribPointer(r, 2, this.gl.FLOAT, !1, this.bytesPerVertex, 8)), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.vertexCount), this.gl.disableVertexAttribArray(A), this.renderMode === "textured" && this.gl.disableVertexAttribArray(r);
|
|
306
305
|
}
|
|
307
306
|
}
|
|
308
|
-
class
|
|
307
|
+
class R {
|
|
309
308
|
constructor(A, r, e) {
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
309
|
+
E(this, "gl");
|
|
310
|
+
E(this, "program");
|
|
311
|
+
E(this, "uniformLocations", /* @__PURE__ */ new Map());
|
|
312
|
+
E(this, "attributeLocations", /* @__PURE__ */ new Map());
|
|
313
|
+
E(this, "textureUnitCounter", 0);
|
|
315
314
|
this.gl = A, this.program = this.createProgram(r, e), this.cacheLocations();
|
|
316
315
|
}
|
|
317
316
|
createProgram(A, r) {
|
|
@@ -324,7 +323,11 @@ class X {
|
|
|
324
323
|
}
|
|
325
324
|
createShader(A, r) {
|
|
326
325
|
const e = this.gl.createShader(A);
|
|
327
|
-
|
|
326
|
+
if (this.gl.shaderSource(e, r), this.gl.compileShader(e), !this.gl.getShaderParameter(e, this.gl.COMPILE_STATUS)) {
|
|
327
|
+
const t = this.gl.getShaderInfoLog(e);
|
|
328
|
+
throw this.gl.deleteShader(e), new Error(`Shader compilation error: ${t}`);
|
|
329
|
+
}
|
|
330
|
+
return e;
|
|
328
331
|
}
|
|
329
332
|
cacheLocations() {
|
|
330
333
|
const A = this.gl.getProgramParameter(this.program, this.gl.ACTIVE_UNIFORMS);
|
|
@@ -355,6 +358,10 @@ class X {
|
|
|
355
358
|
*/
|
|
356
359
|
setUniform(A, r) {
|
|
357
360
|
const e = this.uniformLocations.get(A);
|
|
361
|
+
if (!e) {
|
|
362
|
+
console.warn(`Uniform '${A}' not found in shader`);
|
|
363
|
+
return;
|
|
364
|
+
}
|
|
358
365
|
if (typeof r == "number")
|
|
359
366
|
this.gl.uniform1f(e, r);
|
|
360
367
|
else if (typeof r == "boolean")
|
|
@@ -392,14 +399,18 @@ class X {
|
|
|
392
399
|
this.textureUnitCounter = 0;
|
|
393
400
|
}
|
|
394
401
|
}
|
|
395
|
-
var
|
|
396
|
-
class
|
|
402
|
+
var O = "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);}", QA = "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}", hA = "precision lowp float;uniform vec4 u_color;void main(){gl_FragColor=u_color;}";
|
|
403
|
+
class lA {
|
|
397
404
|
constructor(A) {
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
405
|
+
E(this, "gl");
|
|
406
|
+
E(this, "imageShader");
|
|
407
|
+
E(this, "solidColorShader");
|
|
408
|
+
E(this, "currentShader", null);
|
|
409
|
+
E(this, "currentBlendMode", "normal");
|
|
410
|
+
// Fill state management
|
|
411
|
+
E(this, "currentFillColor", [1, 1, 1, 1]);
|
|
412
|
+
E(this, "fillMode", !1);
|
|
413
|
+
this.gl = A, this.imageShader = new R(this.gl, O, QA), this.solidColorShader = new R(this.gl, O, hA), this.gl.enable(this.gl.BLEND), this.gl.blendEquation(this.gl.FUNC_ADD), this.gl.blendFunc(this.gl.SRC_ALPHA, this.gl.ONE_MINUS_SRC_ALPHA);
|
|
403
414
|
}
|
|
404
415
|
/**
|
|
405
416
|
* Set the current shader (p5.js-like API)
|
|
@@ -407,8 +418,30 @@ class hA {
|
|
|
407
418
|
shader(A) {
|
|
408
419
|
this.currentShader = A, A.use();
|
|
409
420
|
}
|
|
421
|
+
/**
|
|
422
|
+
* Set fill color for subsequent shape drawing (p5.js-like API)
|
|
423
|
+
* This only stores the color state and sets the fill mode.
|
|
424
|
+
* No WebGL operations should happen here.
|
|
425
|
+
*/
|
|
426
|
+
fill(A, r, e, t) {
|
|
427
|
+
if (this.fillMode = !0, r === void 0 && e === void 0 && t === void 0) {
|
|
428
|
+
const n = A / 255;
|
|
429
|
+
this.currentFillColor = [n, n, n, 1];
|
|
430
|
+
} else if (e !== void 0 && t === void 0)
|
|
431
|
+
this.currentFillColor = [A / 255, r / 255, e / 255, 1];
|
|
432
|
+
else if (e !== void 0 && t !== void 0)
|
|
433
|
+
this.currentFillColor = [A / 255, r / 255, e / 255, t / 255];
|
|
434
|
+
else
|
|
435
|
+
throw new Error("Invalid fill parameters. Use fill(gray), fill(r,g,b), or fill(r,g,b,a)");
|
|
436
|
+
}
|
|
437
|
+
/**
|
|
438
|
+
* Reset fill mode - called automatically after each frame
|
|
439
|
+
*/
|
|
440
|
+
reset() {
|
|
441
|
+
this.fillMode = !1;
|
|
442
|
+
}
|
|
410
443
|
createShader(A, r) {
|
|
411
|
-
return new
|
|
444
|
+
return new R(this.gl, A, r);
|
|
412
445
|
}
|
|
413
446
|
/**
|
|
414
447
|
* Set a uniform value for the current shader (p5.js-like API)
|
|
@@ -417,10 +450,18 @@ class hA {
|
|
|
417
450
|
this.currentShader.setUniform(A, r);
|
|
418
451
|
}
|
|
419
452
|
/**
|
|
420
|
-
* Draw a rectangle with the current shader (p5.js-like API)
|
|
453
|
+
* Draw a rectangle with the current shader or fill color (p5.js-like API)
|
|
421
454
|
*/
|
|
422
455
|
rect(A, r, e, t) {
|
|
423
|
-
|
|
456
|
+
if (this.fillMode && this.currentShader === null) {
|
|
457
|
+
const n = this.currentBlendMode;
|
|
458
|
+
this.setBlendMode(
|
|
459
|
+
"premultiplied"
|
|
460
|
+
/* PREMULTIPLIED */
|
|
461
|
+
), this.shader(this.solidColorShader), this.setUniform("u_color", this.currentFillColor), new aA(this.gl, A, r, e, t, { textured: !1 }).render(), this.setBlendMode(n);
|
|
462
|
+
} else
|
|
463
|
+
new aA(this.gl, A, r, e, t, { textured: !0 }).render();
|
|
464
|
+
this.currentShader = null;
|
|
424
465
|
}
|
|
425
466
|
/**
|
|
426
467
|
* Create a new framebuffer
|
|
@@ -477,119 +518,119 @@ class hA {
|
|
|
477
518
|
), this.shader(this.imageShader), this.setUniform("u_texture", A.texture), this.rect(r, e, t ?? A.width, n ?? A.height), this.setBlendMode(a);
|
|
478
519
|
}
|
|
479
520
|
}
|
|
480
|
-
var
|
|
481
|
-
|
|
482
|
-
var A =
|
|
483
|
-
var
|
|
484
|
-
cmap:
|
|
485
|
-
head:
|
|
486
|
-
hhea:
|
|
487
|
-
maxp:
|
|
488
|
-
hmtx:
|
|
489
|
-
name:
|
|
490
|
-
"OS/2":
|
|
491
|
-
post:
|
|
492
|
-
loca:
|
|
493
|
-
kern:
|
|
494
|
-
glyf:
|
|
495
|
-
"CFF ":
|
|
521
|
+
var Q = {};
|
|
522
|
+
Q.parse = function(i) {
|
|
523
|
+
var A = Q.B, r = function(I, v, p, w) {
|
|
524
|
+
var d = Q.T, f = {
|
|
525
|
+
cmap: d.cmap,
|
|
526
|
+
head: d.head,
|
|
527
|
+
hhea: d.hhea,
|
|
528
|
+
maxp: d.maxp,
|
|
529
|
+
hmtx: d.hmtx,
|
|
530
|
+
name: d.name,
|
|
531
|
+
"OS/2": d.OS2,
|
|
532
|
+
post: d.post,
|
|
533
|
+
loca: d.loca,
|
|
534
|
+
kern: d.kern,
|
|
535
|
+
glyf: d.glyf,
|
|
536
|
+
"CFF ": d.CFF,
|
|
496
537
|
/*
|
|
497
538
|
"GPOS",
|
|
498
539
|
"GSUB",
|
|
499
540
|
"GDEF",*/
|
|
500
|
-
GSUB:
|
|
501
|
-
CBLC:
|
|
502
|
-
CBDT:
|
|
503
|
-
"SVG ":
|
|
504
|
-
COLR:
|
|
505
|
-
CPAL:
|
|
506
|
-
sbix:
|
|
507
|
-
fvar:
|
|
508
|
-
gvar:
|
|
509
|
-
avar:
|
|
510
|
-
HVAR:
|
|
541
|
+
GSUB: d.GSUB,
|
|
542
|
+
CBLC: d.CBLC,
|
|
543
|
+
CBDT: d.CBDT,
|
|
544
|
+
"SVG ": d.SVG,
|
|
545
|
+
COLR: d.colr,
|
|
546
|
+
CPAL: d.cpal,
|
|
547
|
+
sbix: d.sbix,
|
|
548
|
+
fvar: d.fvar,
|
|
549
|
+
gvar: d.gvar,
|
|
550
|
+
avar: d.avar,
|
|
551
|
+
HVAR: d.HVAR
|
|
511
552
|
//"VORG",
|
|
512
|
-
},
|
|
513
|
-
for (var
|
|
514
|
-
var
|
|
515
|
-
if (
|
|
516
|
-
var S =
|
|
517
|
-
|
|
553
|
+
}, _ = { _data: I, _index: v, _offset: p };
|
|
554
|
+
for (var b in f) {
|
|
555
|
+
var U = Q.findTable(I, b, p);
|
|
556
|
+
if (U) {
|
|
557
|
+
var S = U[0], y = w[S];
|
|
558
|
+
y == null && (y = f[b].parseTab(I, S, U[1], _)), _[b] = w[S] = y;
|
|
518
559
|
}
|
|
519
560
|
}
|
|
520
|
-
return
|
|
561
|
+
return _;
|
|
521
562
|
};
|
|
522
|
-
function e(
|
|
523
|
-
var
|
|
524
|
-
A.writeASCII(
|
|
525
|
-
for (var
|
|
526
|
-
var
|
|
527
|
-
|
|
528
|
-
var
|
|
529
|
-
S !=
|
|
530
|
-
var G = 12 +
|
|
531
|
-
A.writeASCII(
|
|
563
|
+
function e(I) {
|
|
564
|
+
var v = A.readUshort(I, 12), p = A.readUint(I, 16), w = new Uint8Array(p), d = 12 + v * 16;
|
|
565
|
+
A.writeASCII(w, 0, "OTTO"), A.writeUshort(w, 4, v);
|
|
566
|
+
for (var f = 44, _ = 0; _ < v; _++) {
|
|
567
|
+
var b = A.readASCII(I, f, 4), U = A.readUint(I, f + 4), S = A.readUint(I, f + 8), y = A.readUint(I, f + 12);
|
|
568
|
+
f += 20;
|
|
569
|
+
var x = I.slice(U, U + S);
|
|
570
|
+
S != y && (x = pako.inflate(x));
|
|
571
|
+
var G = 12 + _ * 16;
|
|
572
|
+
A.writeASCII(w, G, b), A.writeUint(w, G + 8, d), A.writeUint(w, G + 12, y), w.set(x, d), d += y;
|
|
532
573
|
}
|
|
533
|
-
return
|
|
574
|
+
return w;
|
|
534
575
|
}
|
|
535
576
|
var t = new Uint8Array(i);
|
|
536
577
|
t[0] == 119 && (t = e(t));
|
|
537
578
|
var n = {}, a = A.readASCII(t, 0, 4);
|
|
538
579
|
if (a == "ttcf") {
|
|
539
|
-
var
|
|
540
|
-
A.readUshort(t,
|
|
541
|
-
var
|
|
542
|
-
|
|
543
|
-
for (var
|
|
544
|
-
var
|
|
545
|
-
|
|
580
|
+
var s = 4;
|
|
581
|
+
A.readUshort(t, s), s += 2, A.readUshort(t, s), s += 2;
|
|
582
|
+
var B = A.readUint(t, s);
|
|
583
|
+
s += 4;
|
|
584
|
+
for (var g = [], o = 0; o < B; o++) {
|
|
585
|
+
var u = A.readUint(t, s);
|
|
586
|
+
s += 4, g.push(r(t, o, u, n));
|
|
546
587
|
}
|
|
547
|
-
return
|
|
548
|
-
}
|
|
549
|
-
var
|
|
550
|
-
if (
|
|
551
|
-
for (var
|
|
552
|
-
var l =
|
|
553
|
-
|
|
554
|
-
for (var
|
|
555
|
-
C._index =
|
|
556
|
-
var
|
|
557
|
-
|
|
588
|
+
return g;
|
|
589
|
+
}
|
|
590
|
+
var h = r(t, 0, 0, n), c = h.fvar;
|
|
591
|
+
if (c) {
|
|
592
|
+
for (var D = [h], o = 0; o < c[1].length; o++) {
|
|
593
|
+
var l = c[1][o], C = {};
|
|
594
|
+
D.push(C);
|
|
595
|
+
for (var P in h) C[P] = h[P];
|
|
596
|
+
C._index = o;
|
|
597
|
+
var m = C.name = JSON.parse(JSON.stringify(C.name));
|
|
598
|
+
m.fontSubfamily = l[0], l[3] == null && (l[3] = (m.fontFamily + "-" + m.fontSubfamily).replaceAll(" ", "")), m.postScriptName = l[3];
|
|
558
599
|
}
|
|
559
|
-
return
|
|
600
|
+
return D;
|
|
560
601
|
}
|
|
561
|
-
return [
|
|
602
|
+
return [h];
|
|
562
603
|
};
|
|
563
|
-
|
|
564
|
-
for (var e =
|
|
565
|
-
var
|
|
604
|
+
Q.findTable = function(i, A, r) {
|
|
605
|
+
for (var e = Q.B, t = e.readUshort(i, r + 4), n = r + 12, a = 0; a < t; a++) {
|
|
606
|
+
var s = e.readASCII(i, n, 4);
|
|
566
607
|
e.readUint(i, n + 4);
|
|
567
|
-
var
|
|
568
|
-
if (
|
|
608
|
+
var B = e.readUint(i, n + 8), g = e.readUint(i, n + 12);
|
|
609
|
+
if (s == A) return [B, g];
|
|
569
610
|
n += 16;
|
|
570
611
|
}
|
|
571
612
|
return null;
|
|
572
613
|
};
|
|
573
|
-
|
|
574
|
-
|
|
614
|
+
Q.T = {};
|
|
615
|
+
Q.B = {
|
|
575
616
|
readFixed: function(i, A) {
|
|
576
617
|
return (i[A] << 8 | i[A + 1]) + (i[A + 2] << 8 | i[A + 3]) / (256 * 256 + 4);
|
|
577
618
|
},
|
|
578
619
|
readF2dot14: function(i, A) {
|
|
579
|
-
var r =
|
|
620
|
+
var r = Q.B.readShort(i, A);
|
|
580
621
|
return r / 16384;
|
|
581
622
|
},
|
|
582
623
|
readInt: function(i, A) {
|
|
583
|
-
var r =
|
|
584
|
-
return r[0] = i[A + 3], r[1] = i[A + 2], r[2] = i[A + 1], r[3] = i[A],
|
|
624
|
+
var r = Q.B.t.uint8;
|
|
625
|
+
return r[0] = i[A + 3], r[1] = i[A + 2], r[2] = i[A + 1], r[3] = i[A], Q.B.t.int32[0];
|
|
585
626
|
},
|
|
586
627
|
readInt8: function(i, A) {
|
|
587
|
-
var r =
|
|
588
|
-
return r[0] = i[A],
|
|
628
|
+
var r = Q.B.t.uint8;
|
|
629
|
+
return r[0] = i[A], Q.B.t.int8[0];
|
|
589
630
|
},
|
|
590
631
|
readShort: function(i, A) {
|
|
591
|
-
var r =
|
|
592
|
-
return r[0] = i[A] << 8 | i[A + 1],
|
|
632
|
+
var r = Q.B.t.uint16;
|
|
633
|
+
return r[0] = i[A] << 8 | i[A + 1], Q.B.t.int16[0];
|
|
593
634
|
},
|
|
594
635
|
readUshort: function(i, A) {
|
|
595
636
|
return i[A] << 8 | i[A + 1];
|
|
@@ -599,20 +640,20 @@ o.B = {
|
|
|
599
640
|
},
|
|
600
641
|
readUshorts: function(i, A, r) {
|
|
601
642
|
for (var e = [], t = 0; t < r; t++) {
|
|
602
|
-
var n =
|
|
643
|
+
var n = Q.B.readUshort(i, A + t * 2);
|
|
603
644
|
e.push(n);
|
|
604
645
|
}
|
|
605
646
|
return e;
|
|
606
647
|
},
|
|
607
648
|
readUint: function(i, A) {
|
|
608
|
-
var r =
|
|
609
|
-
return r[3] = i[A], r[2] = i[A + 1], r[1] = i[A + 2], r[0] = i[A + 3],
|
|
649
|
+
var r = Q.B.t.uint8;
|
|
650
|
+
return r[3] = i[A], r[2] = i[A + 1], r[1] = i[A + 2], r[0] = i[A + 3], Q.B.t.uint32[0];
|
|
610
651
|
},
|
|
611
652
|
writeUint: function(i, A, r) {
|
|
612
653
|
i[A] = r >> 24 & 255, i[A + 1] = r >> 16 & 255, i[A + 2] = r >> 8 & 255, i[A + 3] = r >> 0 & 255;
|
|
613
654
|
},
|
|
614
655
|
readUint64: function(i, A) {
|
|
615
|
-
return
|
|
656
|
+
return Q.B.readUint(i, A) * 4294967296 + Q.B.readUint(i, A + 4);
|
|
616
657
|
},
|
|
617
658
|
readASCII: function(i, A, r) {
|
|
618
659
|
for (var e = "", t = 0; t < r; t++) e += String.fromCharCode(i[A + t]);
|
|
@@ -631,8 +672,8 @@ o.B = {
|
|
|
631
672
|
},
|
|
632
673
|
_tdec: window.TextDecoder ? new window.TextDecoder() : null,
|
|
633
674
|
readUTF8: function(i, A, r) {
|
|
634
|
-
var e =
|
|
635
|
-
return e && A == 0 && r == i.length ? e.decode(i) :
|
|
675
|
+
var e = Q.B._tdec;
|
|
676
|
+
return e && A == 0 && r == i.length ? e.decode(i) : Q.B.readASCII(i, A, r);
|
|
636
677
|
},
|
|
637
678
|
readBytes: function(i, A, r) {
|
|
638
679
|
for (var e = [], t = 0; t < r; t++) e.push(i[A + t]);
|
|
@@ -656,57 +697,57 @@ o.B = {
|
|
|
656
697
|
};
|
|
657
698
|
}()
|
|
658
699
|
};
|
|
659
|
-
|
|
700
|
+
Q.T.CFF = {
|
|
660
701
|
parseTab: function(i, A, r) {
|
|
661
|
-
var e =
|
|
702
|
+
var e = Q.B, t = Q.T.CFF;
|
|
662
703
|
i = new Uint8Array(i.buffer, A, r), A = 0, i[A], A++, i[A], A++, i[A], A++, i[A], A++;
|
|
663
704
|
var n = [];
|
|
664
705
|
A = t.readIndex(i, A, n);
|
|
665
|
-
for (var a = [],
|
|
706
|
+
for (var a = [], s = 0; s < n.length - 1; s++) a.push(e.readASCII(i, A + n[s], n[s + 1] - n[s]));
|
|
666
707
|
A += n[n.length - 1];
|
|
667
|
-
var
|
|
668
|
-
A = t.readIndex(i, A,
|
|
669
|
-
for (var
|
|
670
|
-
A +=
|
|
671
|
-
var
|
|
672
|
-
A = t.readIndex(i, A,
|
|
673
|
-
for (var
|
|
674
|
-
if (A +=
|
|
675
|
-
A =
|
|
676
|
-
var
|
|
677
|
-
A = t.readIndex(i, A,
|
|
678
|
-
for (var
|
|
679
|
-
var
|
|
680
|
-
t._readFDict(i,
|
|
708
|
+
var B = [];
|
|
709
|
+
A = t.readIndex(i, A, B);
|
|
710
|
+
for (var g = [], s = 0; s < B.length - 1; s++) g.push(t.readDict(i, A + B[s], A + B[s + 1]));
|
|
711
|
+
A += B[B.length - 1];
|
|
712
|
+
var o = g[0], u = [];
|
|
713
|
+
A = t.readIndex(i, A, u);
|
|
714
|
+
for (var h = [], s = 0; s < u.length - 1; s++) h.push(e.readASCII(i, A + u[s], u[s + 1] - u[s]));
|
|
715
|
+
if (A += u[u.length - 1], t.readSubrs(i, A, o), o.CharStrings && (o.CharStrings = t.readBytes(i, o.CharStrings)), o.ROS) {
|
|
716
|
+
A = o.FDArray;
|
|
717
|
+
var c = [];
|
|
718
|
+
A = t.readIndex(i, A, c), o.FDArray = [];
|
|
719
|
+
for (var s = 0; s < c.length - 1; s++) {
|
|
720
|
+
var D = t.readDict(i, A + c[s], A + c[s + 1]);
|
|
721
|
+
t._readFDict(i, D, h), o.FDArray.push(D);
|
|
681
722
|
}
|
|
682
|
-
A +=
|
|
723
|
+
A += c[c.length - 1], A = o.FDSelect, o.FDSelect = [];
|
|
683
724
|
var l = i[A];
|
|
684
725
|
if (A++, l == 3) {
|
|
685
726
|
var C = e.readUshort(i, A);
|
|
686
727
|
A += 2;
|
|
687
|
-
for (var
|
|
688
|
-
|
|
728
|
+
for (var s = 0; s < C + 1; s++)
|
|
729
|
+
o.FDSelect.push(e.readUshort(i, A), i[A + 2]), A += 3;
|
|
689
730
|
} else throw l;
|
|
690
731
|
}
|
|
691
|
-
return
|
|
732
|
+
return o.charset && (o.charset = t.readCharset(i, o.charset, o.CharStrings.length)), t._readFDict(i, o, h), o;
|
|
692
733
|
},
|
|
693
734
|
_readFDict: function(i, A, r) {
|
|
694
|
-
var e =
|
|
735
|
+
var e = Q.T.CFF, t;
|
|
695
736
|
A.Private && (t = A.Private[1], A.Private = e.readDict(i, t, t + A.Private[0]), A.Private.Subrs && e.readSubrs(i, t + A.Private.Subrs, A.Private));
|
|
696
737
|
for (var n in A) ["FamilyName", "FontName", "FullName", "Notice", "version", "Copyright"].indexOf(n) != -1 && (A[n] = r[A[n] - 426 + 35]);
|
|
697
738
|
},
|
|
698
739
|
readSubrs: function(i, A, r) {
|
|
699
|
-
r.Subrs =
|
|
740
|
+
r.Subrs = Q.T.CFF.readBytes(i, A);
|
|
700
741
|
var e, t = r.Subrs.length + 1;
|
|
701
742
|
t < 1240 ? e = 107 : t < 33900 ? e = 1131 : e = 32768, r.Bias = e;
|
|
702
743
|
},
|
|
703
744
|
readBytes: function(i, A) {
|
|
704
|
-
|
|
745
|
+
Q.B;
|
|
705
746
|
var r = [];
|
|
706
|
-
A =
|
|
747
|
+
A = Q.T.CFF.readIndex(i, A, r);
|
|
707
748
|
for (var e = [], t = r.length - 1, n = i.byteOffset + A, a = 0; a < t; a++) {
|
|
708
|
-
var
|
|
709
|
-
e.push(new Uint8Array(i.buffer, n +
|
|
749
|
+
var s = r[a];
|
|
750
|
+
e.push(new Uint8Array(i.buffer, n + s, r[a + 1] - s));
|
|
710
751
|
}
|
|
711
752
|
return e;
|
|
712
753
|
},
|
|
@@ -973,7 +1014,7 @@ o.T.CFF = {
|
|
|
973
1014
|
return -1;
|
|
974
1015
|
},
|
|
975
1016
|
glyphBySE: function(i, A) {
|
|
976
|
-
return A < 0 || A > 255 ? -1 :
|
|
1017
|
+
return A < 0 || A > 255 ? -1 : Q.T.CFF.glyphByUnicode(i, Q.T.CFF.tableSE[A]);
|
|
977
1018
|
},
|
|
978
1019
|
/*readEncoding : function(data, offset, num)
|
|
979
1020
|
{
|
|
@@ -1007,26 +1048,26 @@ o.T.CFF = {
|
|
|
1007
1048
|
return array;
|
|
1008
1049
|
},*/
|
|
1009
1050
|
readCharset: function(i, A, r) {
|
|
1010
|
-
var e =
|
|
1051
|
+
var e = Q.B, t = [".notdef"], n = i[A];
|
|
1011
1052
|
if (A++, n == 0)
|
|
1012
1053
|
for (var a = 0; a < r; a++) {
|
|
1013
|
-
var
|
|
1014
|
-
A += 2, t.push(
|
|
1054
|
+
var s = e.readUshort(i, A);
|
|
1055
|
+
A += 2, t.push(s);
|
|
1015
1056
|
}
|
|
1016
1057
|
else if (n == 1 || n == 2)
|
|
1017
1058
|
for (; t.length < r; ) {
|
|
1018
|
-
var
|
|
1059
|
+
var s = e.readUshort(i, A);
|
|
1019
1060
|
A += 2;
|
|
1020
|
-
var
|
|
1021
|
-
n == 1 ? (
|
|
1022
|
-
for (var a = 0; a <=
|
|
1023
|
-
t.push(
|
|
1061
|
+
var B = 0;
|
|
1062
|
+
n == 1 ? (B = i[A], A++) : (B = e.readUshort(i, A), A += 2);
|
|
1063
|
+
for (var a = 0; a <= B; a++)
|
|
1064
|
+
t.push(s), s++;
|
|
1024
1065
|
}
|
|
1025
1066
|
else throw "error: format: " + n;
|
|
1026
1067
|
return t;
|
|
1027
1068
|
},
|
|
1028
1069
|
readIndex: function(i, A, r) {
|
|
1029
|
-
var e =
|
|
1070
|
+
var e = Q.B, t = e.readUshort(i, A) + 1;
|
|
1030
1071
|
A += 2;
|
|
1031
1072
|
var n = i[A];
|
|
1032
1073
|
if (A++, n == 1) for (var a = 0; a < t; a++) r.push(i[A + a]);
|
|
@@ -1037,40 +1078,40 @@ o.T.CFF = {
|
|
|
1037
1078
|
return A += t * n, A - 1;
|
|
1038
1079
|
},
|
|
1039
1080
|
getCharString: function(i, A, r) {
|
|
1040
|
-
var e =
|
|
1081
|
+
var e = Q.B, t = i[A], n = i[A + 1];
|
|
1041
1082
|
i[A + 2], i[A + 3], i[A + 4];
|
|
1042
|
-
var a = 1,
|
|
1043
|
-
t <= 20 && (
|
|
1083
|
+
var a = 1, s = null, B = null;
|
|
1084
|
+
t <= 20 && (s = t, a = 1), t == 12 && (s = t * 100 + n, a = 2), 21 <= t && t <= 27 && (s = t, a = 1), t == 28 && (B = e.readShort(i, A + 1), a = 3), 29 <= t && t <= 31 && (s = t, a = 1), 32 <= t && t <= 246 && (B = t - 139, a = 1), 247 <= t && t <= 250 && (B = (t - 247) * 256 + n + 108, a = 2), 251 <= t && t <= 254 && (B = -(t - 251) * 256 - n - 108, a = 2), t == 255 && (B = e.readInt(i, A + 1) / 65535, a = 5), r.val = B ?? "o" + s, r.size = a;
|
|
1044
1085
|
},
|
|
1045
1086
|
readCharString: function(i, A, r) {
|
|
1046
|
-
for (var e = A + r, t =
|
|
1047
|
-
var a = i[A],
|
|
1087
|
+
for (var e = A + r, t = Q.B, n = []; A < e; ) {
|
|
1088
|
+
var a = i[A], s = i[A + 1];
|
|
1048
1089
|
i[A + 2], i[A + 3], i[A + 4];
|
|
1049
|
-
var
|
|
1050
|
-
a <= 20 && (
|
|
1090
|
+
var B = 1, g = null, o = null;
|
|
1091
|
+
a <= 20 && (g = a, B = 1), a == 12 && (g = a * 100 + s, B = 2), (a == 19 || a == 20) && (g = a, B = 2), 21 <= a && a <= 27 && (g = a, B = 1), a == 28 && (o = t.readShort(i, A + 1), B = 3), 29 <= a && a <= 31 && (g = a, B = 1), 32 <= a && a <= 246 && (o = a - 139, B = 1), 247 <= a && a <= 250 && (o = (a - 247) * 256 + s + 108, B = 2), 251 <= a && a <= 254 && (o = -(a - 251) * 256 - s - 108, B = 2), a == 255 && (o = t.readInt(i, A + 1) / 65535, B = 5), n.push(o ?? "o" + g), A += B;
|
|
1051
1092
|
}
|
|
1052
1093
|
return n;
|
|
1053
1094
|
},
|
|
1054
1095
|
readDict: function(i, A, r) {
|
|
1055
|
-
for (var e =
|
|
1056
|
-
var a = i[A],
|
|
1096
|
+
for (var e = Q.B, t = {}, n = []; A < r; ) {
|
|
1097
|
+
var a = i[A], s = i[A + 1];
|
|
1057
1098
|
i[A + 2], i[A + 3], i[A + 4];
|
|
1058
|
-
var
|
|
1059
|
-
if (a == 28 && (
|
|
1060
|
-
throw
|
|
1099
|
+
var B = 1, g = null, o = null;
|
|
1100
|
+
if (a == 28 && (o = e.readShort(i, A + 1), B = 3), a == 29 && (o = e.readInt(i, A + 1), B = 5), 32 <= a && a <= 246 && (o = a - 139, B = 1), 247 <= a && a <= 250 && (o = (a - 247) * 256 + s + 108, B = 2), 251 <= a && a <= 254 && (o = -(a - 251) * 256 - s - 108, B = 2), a == 255)
|
|
1101
|
+
throw o = e.readInt(i, A + 1) / 65535, B = 5, "unknown number";
|
|
1061
1102
|
if (a == 30) {
|
|
1062
|
-
var
|
|
1063
|
-
for (
|
|
1064
|
-
var
|
|
1065
|
-
|
|
1066
|
-
var
|
|
1067
|
-
if (
|
|
1103
|
+
var u = [];
|
|
1104
|
+
for (B = 1; ; ) {
|
|
1105
|
+
var h = i[A + B];
|
|
1106
|
+
B++;
|
|
1107
|
+
var c = h >> 4, D = h & 15;
|
|
1108
|
+
if (c != 15 && u.push(c), D != 15 && u.push(D), D == 15) break;
|
|
1068
1109
|
}
|
|
1069
|
-
for (var l = "", C = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ".", "e", "e-", "reserved", "-", "endOfNumber"],
|
|
1070
|
-
|
|
1110
|
+
for (var l = "", C = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ".", "e", "e-", "reserved", "-", "endOfNumber"], P = 0; P < u.length; P++) l += C[u[P]];
|
|
1111
|
+
o = parseFloat(l);
|
|
1071
1112
|
}
|
|
1072
1113
|
if (a <= 21) {
|
|
1073
|
-
var
|
|
1114
|
+
var m = [
|
|
1074
1115
|
"version",
|
|
1075
1116
|
"Notice",
|
|
1076
1117
|
"FullName",
|
|
@@ -1094,8 +1135,8 @@ o.T.CFF = {
|
|
|
1094
1135
|
"defaultWidthX",
|
|
1095
1136
|
"nominalWidthX"
|
|
1096
1137
|
];
|
|
1097
|
-
if (
|
|
1098
|
-
var
|
|
1138
|
+
if (g = m[a], B = 1, a == 12) {
|
|
1139
|
+
var m = [
|
|
1099
1140
|
"Copyright",
|
|
1100
1141
|
"isFixedPitch",
|
|
1101
1142
|
"ItalicAngle",
|
|
@@ -1136,43 +1177,43 @@ o.T.CFF = {
|
|
|
1136
1177
|
"FDSelect",
|
|
1137
1178
|
"FontName"
|
|
1138
1179
|
];
|
|
1139
|
-
|
|
1180
|
+
g = m[s], B = 2;
|
|
1140
1181
|
}
|
|
1141
1182
|
}
|
|
1142
|
-
|
|
1183
|
+
g != null ? (t[g] = n.length == 1 ? n[0] : n, n = []) : n.push(o), A += B;
|
|
1143
1184
|
}
|
|
1144
1185
|
return t;
|
|
1145
1186
|
}
|
|
1146
1187
|
};
|
|
1147
|
-
|
|
1188
|
+
Q.T.cmap = {
|
|
1148
1189
|
parseTab: function(i, A, r) {
|
|
1149
1190
|
var e = { tables: [], ids: {}, off: A };
|
|
1150
1191
|
i = new Uint8Array(i.buffer, A, r), A = 0;
|
|
1151
|
-
var t =
|
|
1192
|
+
var t = Q.B, n = t.readUshort, a = Q.T.cmap;
|
|
1152
1193
|
n(i, A), A += 2;
|
|
1153
|
-
var
|
|
1194
|
+
var s = n(i, A);
|
|
1154
1195
|
A += 2;
|
|
1155
|
-
for (var
|
|
1156
|
-
var
|
|
1196
|
+
for (var B = [], g = 0; g < s; g++) {
|
|
1197
|
+
var o = n(i, A);
|
|
1157
1198
|
A += 2;
|
|
1158
|
-
var
|
|
1199
|
+
var u = n(i, A);
|
|
1159
1200
|
A += 2;
|
|
1160
|
-
var
|
|
1201
|
+
var h = t.readUint(i, A);
|
|
1161
1202
|
A += 4;
|
|
1162
|
-
var
|
|
1163
|
-
if (
|
|
1164
|
-
|
|
1203
|
+
var c = "p" + o + "e" + u, D = B.indexOf(h);
|
|
1204
|
+
if (D == -1) {
|
|
1205
|
+
D = e.tables.length;
|
|
1165
1206
|
var l = {};
|
|
1166
|
-
|
|
1167
|
-
var C = l.format = n(i,
|
|
1168
|
-
C == 0 ? l = a.parse0(i,
|
|
1207
|
+
B.push(h);
|
|
1208
|
+
var C = l.format = n(i, h);
|
|
1209
|
+
C == 0 ? l = a.parse0(i, h, l) : C == 4 ? l = a.parse4(i, h, l) : C == 6 ? l = a.parse6(i, h, l) : C == 12 && (l = a.parse12(i, h, l)), e.tables.push(l);
|
|
1169
1210
|
}
|
|
1170
|
-
e.ids[
|
|
1211
|
+
e.ids[c] != null && console.log("multiple tables for one platform+encoding: " + c), e.ids[c] = D;
|
|
1171
1212
|
}
|
|
1172
1213
|
return e;
|
|
1173
1214
|
},
|
|
1174
1215
|
parse0: function(i, A, r) {
|
|
1175
|
-
var e =
|
|
1216
|
+
var e = Q.B;
|
|
1176
1217
|
A += 2;
|
|
1177
1218
|
var t = e.readUshort(i, A);
|
|
1178
1219
|
A += 2, e.readUshort(i, A), A += 2, r.map = [];
|
|
@@ -1180,20 +1221,20 @@ o.T.cmap = {
|
|
|
1180
1221
|
return r;
|
|
1181
1222
|
},
|
|
1182
1223
|
parse4: function(i, A, r) {
|
|
1183
|
-
var e =
|
|
1224
|
+
var e = Q.B, t = e.readUshort, n = e.readUshorts, a = A;
|
|
1184
1225
|
A += 2;
|
|
1185
|
-
var B = t(i, A);
|
|
1186
|
-
A += 2, t(i, A), A += 2;
|
|
1187
1226
|
var s = t(i, A);
|
|
1227
|
+
A += 2, t(i, A), A += 2;
|
|
1228
|
+
var B = t(i, A);
|
|
1188
1229
|
A += 2;
|
|
1189
|
-
var
|
|
1190
|
-
r.searchRange = t(i, A), A += 2, r.entrySelector = t(i, A), A += 2, r.rangeShift = t(i, A), A += 2, r.endCount = n(i, A,
|
|
1191
|
-
for (var
|
|
1230
|
+
var g = B >>> 1;
|
|
1231
|
+
r.searchRange = t(i, A), A += 2, r.entrySelector = t(i, A), A += 2, r.rangeShift = t(i, A), A += 2, r.endCount = n(i, A, g), A += g * 2, A += 2, r.startCount = n(i, A, g), A += g * 2, r.idDelta = [];
|
|
1232
|
+
for (var o = 0; o < g; o++)
|
|
1192
1233
|
r.idDelta.push(e.readShort(i, A)), A += 2;
|
|
1193
|
-
return r.idRangeOffset = n(i, A,
|
|
1234
|
+
return r.idRangeOffset = n(i, A, g), A += g * 2, r.glyphIdArray = n(i, A, a + s - A >> 1), r;
|
|
1194
1235
|
},
|
|
1195
1236
|
parse6: function(i, A, r) {
|
|
1196
|
-
var e =
|
|
1237
|
+
var e = Q.B;
|
|
1197
1238
|
A += 2, e.readUshort(i, A), A += 2, e.readUshort(i, A), A += 2, r.firstCode = e.readUshort(i, A), A += 2;
|
|
1198
1239
|
var t = e.readUshort(i, A);
|
|
1199
1240
|
A += 2, r.glyphIdArray = [];
|
|
@@ -1202,131 +1243,131 @@ o.T.cmap = {
|
|
|
1202
1243
|
return r;
|
|
1203
1244
|
},
|
|
1204
1245
|
parse12: function(i, A, r) {
|
|
1205
|
-
var e =
|
|
1246
|
+
var e = Q.B, t = e.readUint;
|
|
1206
1247
|
A += 4, t(i, A), A += 4, t(i, A), A += 4;
|
|
1207
1248
|
var n = t(i, A) * 3;
|
|
1208
1249
|
A += 4;
|
|
1209
|
-
for (var a = r.groups = new Uint32Array(n),
|
|
1210
|
-
a[
|
|
1250
|
+
for (var a = r.groups = new Uint32Array(n), s = 0; s < n; s += 3)
|
|
1251
|
+
a[s] = t(i, A + (s << 2)), a[s + 1] = t(i, A + (s << 2) + 4), a[s + 2] = t(i, A + (s << 2) + 8);
|
|
1211
1252
|
return r;
|
|
1212
1253
|
}
|
|
1213
1254
|
};
|
|
1214
|
-
|
|
1255
|
+
Q.T.CBLC = {
|
|
1215
1256
|
parseTab: function(i, A, r) {
|
|
1216
|
-
var e =
|
|
1257
|
+
var e = Q.B, t = A;
|
|
1217
1258
|
e.readUshort(i, A), A += 2, e.readUshort(i, A), A += 2;
|
|
1218
1259
|
var n = e.readUint(i, A);
|
|
1219
1260
|
A += 4;
|
|
1220
|
-
for (var a = [],
|
|
1221
|
-
var
|
|
1261
|
+
for (var a = [], s = 0; s < n; s++) {
|
|
1262
|
+
var B = e.readUint(i, A);
|
|
1222
1263
|
A += 4, e.readUint(i, A), A += 4, e.readUint(i, A), A += 4, A += 4, A += 2 * 12, e.readUshort(i, A), A += 2, e.readUshort(i, A), A += 2, A += 4;
|
|
1223
|
-
for (var
|
|
1224
|
-
var
|
|
1225
|
-
|
|
1226
|
-
var
|
|
1227
|
-
|
|
1228
|
-
var
|
|
1229
|
-
|
|
1230
|
-
var
|
|
1264
|
+
for (var g = t + B, o = 0; o < 3; o++) {
|
|
1265
|
+
var u = e.readUshort(i, g);
|
|
1266
|
+
g += 2;
|
|
1267
|
+
var h = e.readUshort(i, g);
|
|
1268
|
+
g += 2;
|
|
1269
|
+
var c = e.readUint(i, g);
|
|
1270
|
+
g += 4;
|
|
1271
|
+
var D = h - u + 1, l = t + B + c, C = e.readUshort(i, l);
|
|
1231
1272
|
if (l += 2, C != 1) throw C;
|
|
1232
|
-
var
|
|
1273
|
+
var P = e.readUshort(i, l);
|
|
1233
1274
|
l += 2;
|
|
1234
|
-
var
|
|
1275
|
+
var m = e.readUint(i, l);
|
|
1235
1276
|
l += 4;
|
|
1236
|
-
for (var
|
|
1237
|
-
var p = e.readUint(i, l +
|
|
1238
|
-
|
|
1277
|
+
for (var I = [], v = 0; v < D; v++) {
|
|
1278
|
+
var p = e.readUint(i, l + v * 4);
|
|
1279
|
+
I.push(m + p);
|
|
1239
1280
|
}
|
|
1240
|
-
a.push([
|
|
1281
|
+
a.push([u, h, P, I]);
|
|
1241
1282
|
}
|
|
1242
1283
|
}
|
|
1243
1284
|
return a;
|
|
1244
1285
|
}
|
|
1245
1286
|
};
|
|
1246
|
-
|
|
1287
|
+
Q.T.CBDT = {
|
|
1247
1288
|
parseTab: function(i, A, r) {
|
|
1248
|
-
return
|
|
1289
|
+
return Q.B, new Uint8Array(i.buffer, i.byteOffset + A, r);
|
|
1249
1290
|
}
|
|
1250
1291
|
};
|
|
1251
|
-
|
|
1292
|
+
Q.T.glyf = {
|
|
1252
1293
|
parseTab: function(i, A, r, e) {
|
|
1253
1294
|
for (var t = [], n = e.maxp.numGlyphs, a = 0; a < n; a++) t.push(null);
|
|
1254
1295
|
return t;
|
|
1255
1296
|
},
|
|
1256
1297
|
_parseGlyf: function(i, A) {
|
|
1257
|
-
var r =
|
|
1298
|
+
var r = Q.B, e = i._data, t = i.loca;
|
|
1258
1299
|
if (t[A] == t[A + 1]) return null;
|
|
1259
|
-
var n =
|
|
1300
|
+
var n = Q.findTable(e, "glyf", i._offset)[0] + t[A], a = {};
|
|
1260
1301
|
if (a.noc = r.readShort(e, n), n += 2, a.xMin = r.readShort(e, n), n += 2, a.yMin = r.readShort(e, n), n += 2, a.xMax = r.readShort(e, n), n += 2, a.yMax = r.readShort(e, n), n += 2, a.xMin >= a.xMax || a.yMin >= a.yMax) return null;
|
|
1261
1302
|
if (a.noc > 0) {
|
|
1262
1303
|
a.endPts = [];
|
|
1263
|
-
for (var
|
|
1304
|
+
for (var s = 0; s < a.noc; s++)
|
|
1264
1305
|
a.endPts.push(r.readUshort(e, n)), n += 2;
|
|
1265
|
-
var
|
|
1266
|
-
if (n += 2, e.length - n <
|
|
1267
|
-
a.instructions = r.readBytes(e, n,
|
|
1268
|
-
var
|
|
1306
|
+
var B = r.readUshort(e, n);
|
|
1307
|
+
if (n += 2, e.length - n < B) return null;
|
|
1308
|
+
a.instructions = r.readBytes(e, n, B), n += B;
|
|
1309
|
+
var g = a.endPts[a.noc - 1] + 1;
|
|
1269
1310
|
a.flags = [];
|
|
1270
|
-
for (var
|
|
1271
|
-
var
|
|
1272
|
-
if (n++, a.flags.push(
|
|
1273
|
-
var
|
|
1311
|
+
for (var s = 0; s < g; s++) {
|
|
1312
|
+
var o = e[n];
|
|
1313
|
+
if (n++, a.flags.push(o), (o & 8) != 0) {
|
|
1314
|
+
var u = e[n];
|
|
1274
1315
|
n++;
|
|
1275
|
-
for (var
|
|
1276
|
-
a.flags.push(
|
|
1316
|
+
for (var h = 0; h < u; h++)
|
|
1317
|
+
a.flags.push(o), s++;
|
|
1277
1318
|
}
|
|
1278
1319
|
}
|
|
1279
1320
|
a.xs = [];
|
|
1280
|
-
for (var
|
|
1281
|
-
var
|
|
1282
|
-
|
|
1321
|
+
for (var s = 0; s < g; s++) {
|
|
1322
|
+
var c = (a.flags[s] & 2) != 0, D = (a.flags[s] & 16) != 0;
|
|
1323
|
+
c ? (a.xs.push(D ? e[n] : -e[n]), n++) : D ? a.xs.push(0) : (a.xs.push(r.readShort(e, n)), n += 2);
|
|
1283
1324
|
}
|
|
1284
1325
|
a.ys = [];
|
|
1285
|
-
for (var
|
|
1286
|
-
var
|
|
1287
|
-
|
|
1326
|
+
for (var s = 0; s < g; s++) {
|
|
1327
|
+
var c = (a.flags[s] & 4) != 0, D = (a.flags[s] & 32) != 0;
|
|
1328
|
+
c ? (a.ys.push(D ? e[n] : -e[n]), n++) : D ? a.ys.push(0) : (a.ys.push(r.readShort(e, n)), n += 2);
|
|
1288
1329
|
}
|
|
1289
|
-
for (var l = 0, C = 0,
|
|
1290
|
-
l += a.xs[
|
|
1330
|
+
for (var l = 0, C = 0, s = 0; s < g; s++)
|
|
1331
|
+
l += a.xs[s], C += a.ys[s], a.xs[s] = l, a.ys[s] = C;
|
|
1291
1332
|
} else {
|
|
1292
|
-
var
|
|
1333
|
+
var P = 1, m = 2, I = 8, v = 32, p = 64, w = 128, d = 256;
|
|
1293
1334
|
a.parts = [];
|
|
1294
|
-
var
|
|
1335
|
+
var f;
|
|
1295
1336
|
do {
|
|
1296
|
-
|
|
1297
|
-
var
|
|
1298
|
-
if (a.parts.push(
|
|
1299
|
-
var
|
|
1337
|
+
f = r.readUshort(e, n), n += 2;
|
|
1338
|
+
var _ = { m: { a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0 }, p1: -1, p2: -1 };
|
|
1339
|
+
if (a.parts.push(_), _.glyphIndex = r.readUshort(e, n), n += 2, f & P) {
|
|
1340
|
+
var b = r.readShort(e, n);
|
|
1300
1341
|
n += 2;
|
|
1301
|
-
var
|
|
1342
|
+
var U = r.readShort(e, n);
|
|
1302
1343
|
n += 2;
|
|
1303
1344
|
} else {
|
|
1304
|
-
var
|
|
1345
|
+
var b = r.readInt8(e, n);
|
|
1305
1346
|
n++;
|
|
1306
|
-
var
|
|
1347
|
+
var U = r.readInt8(e, n);
|
|
1307
1348
|
n++;
|
|
1308
1349
|
}
|
|
1309
|
-
|
|
1310
|
-
} while (
|
|
1311
|
-
if (
|
|
1350
|
+
f & m ? (_.m.tx = b, _.m.ty = U) : (_.p1 = b, _.p2 = U), f & I ? (_.m.a = _.m.d = r.readF2dot14(e, n), n += 2) : f & p ? (_.m.a = r.readF2dot14(e, n), n += 2, _.m.d = r.readF2dot14(e, n), n += 2) : f & w && (_.m.a = r.readF2dot14(e, n), n += 2, _.m.b = r.readF2dot14(e, n), n += 2, _.m.c = r.readF2dot14(e, n), n += 2, _.m.d = r.readF2dot14(e, n), n += 2);
|
|
1351
|
+
} while (f & v);
|
|
1352
|
+
if (f & d) {
|
|
1312
1353
|
var S = r.readUshort(e, n);
|
|
1313
1354
|
n += 2, a.instr = [];
|
|
1314
|
-
for (var
|
|
1355
|
+
for (var s = 0; s < S; s++)
|
|
1315
1356
|
a.instr.push(e[n]), n++;
|
|
1316
1357
|
}
|
|
1317
1358
|
}
|
|
1318
1359
|
return a;
|
|
1319
1360
|
}
|
|
1320
1361
|
};
|
|
1321
|
-
|
|
1362
|
+
Q.T.head = {
|
|
1322
1363
|
parseTab: function(i, A, r) {
|
|
1323
|
-
var e =
|
|
1364
|
+
var e = Q.B, t = {};
|
|
1324
1365
|
return e.readFixed(i, A), A += 4, t.fontRevision = e.readFixed(i, A), A += 4, e.readUint(i, A), A += 4, e.readUint(i, A), A += 4, t.flags = e.readUshort(i, A), A += 2, t.unitsPerEm = e.readUshort(i, A), A += 2, t.created = e.readUint64(i, A), A += 8, t.modified = e.readUint64(i, A), A += 8, t.xMin = e.readShort(i, A), A += 2, t.yMin = e.readShort(i, A), A += 2, t.xMax = e.readShort(i, A), A += 2, t.yMax = e.readShort(i, A), A += 2, t.macStyle = e.readUshort(i, A), A += 2, t.lowestRecPPEM = e.readUshort(i, A), A += 2, t.fontDirectionHint = e.readShort(i, A), A += 2, t.indexToLocFormat = e.readShort(i, A), A += 2, t.glyphDataFormat = e.readShort(i, A), A += 2, t;
|
|
1325
1366
|
}
|
|
1326
1367
|
};
|
|
1327
|
-
|
|
1368
|
+
Q.T.hhea = {
|
|
1328
1369
|
parseTab: function(i, A, r) {
|
|
1329
|
-
var e =
|
|
1370
|
+
var e = Q.B, t = {};
|
|
1330
1371
|
e.readFixed(i, A), A += 4;
|
|
1331
1372
|
for (var n = [
|
|
1332
1373
|
"ascender",
|
|
@@ -1346,91 +1387,91 @@ o.T.hhea = {
|
|
|
1346
1387
|
"metricDataFormat",
|
|
1347
1388
|
"numberOfHMetrics"
|
|
1348
1389
|
], a = 0; a < n.length; a++) {
|
|
1349
|
-
var
|
|
1350
|
-
t[
|
|
1390
|
+
var s = n[a], B = s == "advanceWidthMax" || s == "numberOfHMetrics" ? e.readUshort : e.readShort;
|
|
1391
|
+
t[s] = B(i, A + a * 2);
|
|
1351
1392
|
}
|
|
1352
1393
|
return t;
|
|
1353
1394
|
}
|
|
1354
1395
|
};
|
|
1355
|
-
|
|
1396
|
+
Q.T.hmtx = {
|
|
1356
1397
|
parseTab: function(i, A, r, e) {
|
|
1357
|
-
for (var t =
|
|
1358
|
-
|
|
1359
|
-
for (;
|
|
1360
|
-
n.push(
|
|
1398
|
+
for (var t = Q.B, n = [], a = [], s = e.maxp.numGlyphs, B = e.hhea.numberOfHMetrics, g = 0, o = 0, u = 0; u < B; )
|
|
1399
|
+
g = t.readUshort(i, A + (u << 2)), o = t.readShort(i, A + (u << 2) + 2), n.push(g), a.push(o), u++;
|
|
1400
|
+
for (; u < s; )
|
|
1401
|
+
n.push(g), a.push(o), u++;
|
|
1361
1402
|
return { aWidth: n, lsBearing: a };
|
|
1362
1403
|
}
|
|
1363
1404
|
};
|
|
1364
|
-
|
|
1405
|
+
Q.T.kern = {
|
|
1365
1406
|
parseTab: function(i, A, r, e) {
|
|
1366
|
-
var t =
|
|
1407
|
+
var t = Q.B, n = Q.T.kern, a = t.readUshort(i, A);
|
|
1367
1408
|
if (a == 1) return n.parseV1(i, A, r, e);
|
|
1368
|
-
var
|
|
1409
|
+
var s = t.readUshort(i, A + 2);
|
|
1369
1410
|
A += 4;
|
|
1370
|
-
for (var
|
|
1411
|
+
for (var B = { glyph1: [], rval: [] }, g = 0; g < s; g++) {
|
|
1371
1412
|
A += 2;
|
|
1372
1413
|
var r = t.readUshort(i, A);
|
|
1373
1414
|
A += 2;
|
|
1374
|
-
var
|
|
1415
|
+
var o = t.readUshort(i, A);
|
|
1375
1416
|
A += 2;
|
|
1376
|
-
var
|
|
1377
|
-
|
|
1417
|
+
var u = o >>> 8;
|
|
1418
|
+
u &= 15, u == 0 && (A = n.readFormat0(i, A, B));
|
|
1378
1419
|
}
|
|
1379
|
-
return
|
|
1420
|
+
return B;
|
|
1380
1421
|
},
|
|
1381
1422
|
parseV1: function(i, A, r, e) {
|
|
1382
|
-
var t =
|
|
1423
|
+
var t = Q.B, n = Q.T.kern;
|
|
1383
1424
|
t.readFixed(i, A);
|
|
1384
1425
|
var a = t.readUint(i, A + 4);
|
|
1385
1426
|
A += 8;
|
|
1386
|
-
for (var
|
|
1427
|
+
for (var s = { glyph1: [], rval: [] }, B = 0; B < a; B++) {
|
|
1387
1428
|
t.readUint(i, A), A += 4;
|
|
1388
|
-
var
|
|
1429
|
+
var g = t.readUshort(i, A);
|
|
1389
1430
|
A += 2, t.readUshort(i, A), A += 2;
|
|
1390
|
-
var
|
|
1391
|
-
|
|
1431
|
+
var o = g & 255;
|
|
1432
|
+
o == 0 && (A = n.readFormat0(i, A, s));
|
|
1392
1433
|
}
|
|
1393
|
-
return
|
|
1434
|
+
return s;
|
|
1394
1435
|
},
|
|
1395
1436
|
readFormat0: function(i, A, r) {
|
|
1396
|
-
var e =
|
|
1437
|
+
var e = Q.B, t = e.readUshort, n = -1, a = t(i, A);
|
|
1397
1438
|
t(i, A + 2), t(i, A + 4), t(i, A + 6), A += 8;
|
|
1398
|
-
for (var
|
|
1399
|
-
var
|
|
1439
|
+
for (var s = 0; s < a; s++) {
|
|
1440
|
+
var B = t(i, A);
|
|
1400
1441
|
A += 2;
|
|
1401
|
-
var
|
|
1442
|
+
var g = t(i, A);
|
|
1402
1443
|
A += 2;
|
|
1403
|
-
var
|
|
1404
|
-
A += 2,
|
|
1405
|
-
var
|
|
1406
|
-
|
|
1444
|
+
var o = e.readShort(i, A);
|
|
1445
|
+
A += 2, B != n && (r.glyph1.push(B), r.rval.push({ glyph2: [], vals: [] }));
|
|
1446
|
+
var u = r.rval[r.rval.length - 1];
|
|
1447
|
+
u.glyph2.push(g), u.vals.push(o), n = B;
|
|
1407
1448
|
}
|
|
1408
1449
|
return A;
|
|
1409
1450
|
}
|
|
1410
1451
|
};
|
|
1411
|
-
|
|
1452
|
+
Q.T.loca = {
|
|
1412
1453
|
parseTab: function(i, A, r, e) {
|
|
1413
|
-
var t =
|
|
1414
|
-
if (a == 0) for (var
|
|
1415
|
-
if (a == 1) for (var
|
|
1454
|
+
var t = Q.B, n = [], a = e.head.indexToLocFormat, s = e.maxp.numGlyphs + 1;
|
|
1455
|
+
if (a == 0) for (var B = 0; B < s; B++) n.push(t.readUshort(i, A + (B << 1)) << 1);
|
|
1456
|
+
if (a == 1) for (var B = 0; B < s; B++) n.push(t.readUint(i, A + (B << 2)));
|
|
1416
1457
|
return n;
|
|
1417
1458
|
}
|
|
1418
1459
|
};
|
|
1419
|
-
|
|
1460
|
+
Q.T.maxp = {
|
|
1420
1461
|
parseTab: function(i, A, r) {
|
|
1421
|
-
var e =
|
|
1462
|
+
var e = Q.B, t = e.readUshort, n = {};
|
|
1422
1463
|
return e.readUint(i, A), A += 4, n.numGlyphs = t(i, A), A += 2, n;
|
|
1423
1464
|
}
|
|
1424
1465
|
};
|
|
1425
|
-
|
|
1466
|
+
Q.T.name = {
|
|
1426
1467
|
parseTab: function(i, A, r) {
|
|
1427
|
-
var e =
|
|
1468
|
+
var e = Q.B, t = {};
|
|
1428
1469
|
e.readUshort(i, A), A += 2;
|
|
1429
1470
|
var n = e.readUshort(i, A);
|
|
1430
1471
|
A += 2;
|
|
1431
1472
|
var a = e.readUshort(i, A);
|
|
1432
1473
|
A += 2;
|
|
1433
|
-
for (var
|
|
1474
|
+
for (var s = A - 6 + a, B = [
|
|
1434
1475
|
"copyright",
|
|
1435
1476
|
"fontFamily",
|
|
1436
1477
|
"fontSubfamily",
|
|
@@ -1456,28 +1497,28 @@ o.T.name = {
|
|
|
1456
1497
|
"wwsSubfamilyName",
|
|
1457
1498
|
"lightPalette",
|
|
1458
1499
|
"darkPalette"
|
|
1459
|
-
],
|
|
1460
|
-
var
|
|
1500
|
+
], g = e.readUshort, o = 0; o < n; o++) {
|
|
1501
|
+
var u = g(i, A);
|
|
1461
1502
|
A += 2;
|
|
1462
|
-
var
|
|
1503
|
+
var h = g(i, A);
|
|
1463
1504
|
A += 2;
|
|
1464
|
-
var
|
|
1505
|
+
var c = g(i, A);
|
|
1465
1506
|
A += 2;
|
|
1466
|
-
var
|
|
1507
|
+
var D = g(i, A);
|
|
1467
1508
|
A += 2;
|
|
1468
|
-
var l =
|
|
1509
|
+
var l = g(i, A);
|
|
1469
1510
|
A += 2;
|
|
1470
|
-
var C =
|
|
1511
|
+
var C = g(i, A);
|
|
1471
1512
|
A += 2;
|
|
1472
|
-
var
|
|
1473
|
-
|
|
1474
|
-
var
|
|
1475
|
-
t[
|
|
1476
|
-
var
|
|
1477
|
-
|
|
1513
|
+
var P = s + C, m;
|
|
1514
|
+
u == 0 || u == 3 && h == 0 || u == 1 && h == 25 ? m = e.readUnicode(i, P, l / 2) : h == 0 ? m = e.readASCII(i, P, l) : h == 1 || h == 3 || h == 4 || h == 5 || h == 10 ? m = e.readUnicode(i, P, l / 2) : u == 1 ? (m = e.readASCII(i, P, l), console.log("reading unknown MAC encoding " + h + " as ASCII")) : (console.log("unknown encoding " + h + ", platformID: " + u), m = e.readASCII(i, P, l));
|
|
1515
|
+
var I = "p" + u + "," + c.toString(16);
|
|
1516
|
+
t[I] == null && (t[I] = {});
|
|
1517
|
+
var v = B[D];
|
|
1518
|
+
v == null && (v = "_" + D), t[I][v] = m, t[I]._lang = c;
|
|
1478
1519
|
}
|
|
1479
|
-
var p =
|
|
1480
|
-
if (p[
|
|
1520
|
+
var p = Q.T.name.selectOne(t), w = "fontFamily";
|
|
1521
|
+
if (p[w] == null) for (var d in t) t[d][w] != null && (p[w] = t[d][w]);
|
|
1481
1522
|
return p;
|
|
1482
1523
|
},
|
|
1483
1524
|
selectOne: function(i) {
|
|
@@ -1494,11 +1535,11 @@ o.T.name = {
|
|
|
1494
1535
|
return console.log("returning name table with languageID " + e._lang), e[A] == null && e.ID != null && (e[A] = e.ID), e;
|
|
1495
1536
|
}
|
|
1496
1537
|
};
|
|
1497
|
-
|
|
1538
|
+
Q.T.OS2 = {
|
|
1498
1539
|
parseTab: function(i, A, r) {
|
|
1499
|
-
var e =
|
|
1540
|
+
var e = Q.B, t = e.readUshort(i, A);
|
|
1500
1541
|
A += 2;
|
|
1501
|
-
var n =
|
|
1542
|
+
var n = Q.T.OS2, a = {};
|
|
1502
1543
|
if (t == 0) n.version0(i, A, a);
|
|
1503
1544
|
else if (t == 1) n.version1(i, A, a);
|
|
1504
1545
|
else if (t == 2 || t == 3 || t == 4) n.version2(i, A, a);
|
|
@@ -1507,327 +1548,327 @@ o.T.OS2 = {
|
|
|
1507
1548
|
return a;
|
|
1508
1549
|
},
|
|
1509
1550
|
version0: function(i, A, r) {
|
|
1510
|
-
var e =
|
|
1551
|
+
var e = Q.B;
|
|
1511
1552
|
return r.xAvgCharWidth = e.readShort(i, A), A += 2, r.usWeightClass = e.readUshort(i, A), A += 2, r.usWidthClass = e.readUshort(i, A), A += 2, r.fsType = e.readUshort(i, A), A += 2, r.ySubscriptXSize = e.readShort(i, A), A += 2, r.ySubscriptYSize = e.readShort(i, A), A += 2, r.ySubscriptXOffset = e.readShort(i, A), A += 2, r.ySubscriptYOffset = e.readShort(i, A), A += 2, r.ySuperscriptXSize = e.readShort(i, A), A += 2, r.ySuperscriptYSize = e.readShort(i, A), A += 2, r.ySuperscriptXOffset = e.readShort(i, A), A += 2, r.ySuperscriptYOffset = e.readShort(i, A), A += 2, r.yStrikeoutSize = e.readShort(i, A), A += 2, r.yStrikeoutPosition = e.readShort(i, A), A += 2, r.sFamilyClass = e.readShort(i, A), A += 2, r.panose = e.readBytes(i, A, 10), A += 10, r.ulUnicodeRange1 = e.readUint(i, A), A += 4, r.ulUnicodeRange2 = e.readUint(i, A), A += 4, r.ulUnicodeRange3 = e.readUint(i, A), A += 4, r.ulUnicodeRange4 = e.readUint(i, A), A += 4, r.achVendID = e.readASCII(i, A, 4), A += 4, r.fsSelection = e.readUshort(i, A), A += 2, r.usFirstCharIndex = e.readUshort(i, A), A += 2, r.usLastCharIndex = e.readUshort(i, A), A += 2, r.sTypoAscender = e.readShort(i, A), A += 2, r.sTypoDescender = e.readShort(i, A), A += 2, r.sTypoLineGap = e.readShort(i, A), A += 2, r.usWinAscent = e.readUshort(i, A), A += 2, r.usWinDescent = e.readUshort(i, A), A += 2, A;
|
|
1512
1553
|
},
|
|
1513
1554
|
version1: function(i, A, r) {
|
|
1514
|
-
var e =
|
|
1515
|
-
return A =
|
|
1555
|
+
var e = Q.B;
|
|
1556
|
+
return A = Q.T.OS2.version0(i, A, r), r.ulCodePageRange1 = e.readUint(i, A), A += 4, r.ulCodePageRange2 = e.readUint(i, A), A += 4, A;
|
|
1516
1557
|
},
|
|
1517
1558
|
version2: function(i, A, r) {
|
|
1518
|
-
var e =
|
|
1519
|
-
return A =
|
|
1559
|
+
var e = Q.B, t = e.readUshort;
|
|
1560
|
+
return A = Q.T.OS2.version1(i, A, r), r.sxHeight = e.readShort(i, A), A += 2, r.sCapHeight = e.readShort(i, A), A += 2, r.usDefault = t(i, A), A += 2, r.usBreak = t(i, A), A += 2, r.usMaxContext = t(i, A), A += 2, A;
|
|
1520
1561
|
},
|
|
1521
1562
|
version5: function(i, A, r) {
|
|
1522
|
-
var e =
|
|
1523
|
-
return A =
|
|
1563
|
+
var e = Q.B.readUshort;
|
|
1564
|
+
return A = Q.T.OS2.version2(i, A, r), r.usLowerOpticalPointSize = e(i, A), A += 2, r.usUpperOpticalPointSize = e(i, A), A += 2, A;
|
|
1524
1565
|
}
|
|
1525
1566
|
};
|
|
1526
|
-
|
|
1567
|
+
Q.T.post = {
|
|
1527
1568
|
parseTab: function(i, A, r) {
|
|
1528
|
-
var e =
|
|
1569
|
+
var e = Q.B, t = {};
|
|
1529
1570
|
return t.version = e.readFixed(i, A), A += 4, t.italicAngle = e.readFixed(i, A), A += 4, t.underlinePosition = e.readShort(i, A), A += 2, t.underlineThickness = e.readShort(i, A), A += 2, t;
|
|
1530
1571
|
}
|
|
1531
1572
|
};
|
|
1532
|
-
|
|
1573
|
+
Q.T.SVG = {
|
|
1533
1574
|
parseTab: function(i, A, r) {
|
|
1534
|
-
var e =
|
|
1575
|
+
var e = Q.B, t = { entries: [], svgs: [] }, n = A;
|
|
1535
1576
|
e.readUshort(i, A), A += 2;
|
|
1536
1577
|
var a = e.readUint(i, A);
|
|
1537
1578
|
A += 4, e.readUint(i, A), A += 4, A = a + n;
|
|
1538
|
-
var
|
|
1579
|
+
var s = e.readUshort(i, A);
|
|
1539
1580
|
A += 2;
|
|
1540
|
-
for (var
|
|
1541
|
-
var E = e.readUshort(i, A);
|
|
1542
|
-
A += 2;
|
|
1581
|
+
for (var B = 0; B < s; B++) {
|
|
1543
1582
|
var g = e.readUshort(i, A);
|
|
1544
1583
|
A += 2;
|
|
1545
|
-
var
|
|
1584
|
+
var o = e.readUshort(i, A);
|
|
1585
|
+
A += 2;
|
|
1586
|
+
var u = e.readUint(i, A);
|
|
1546
1587
|
A += 4;
|
|
1547
|
-
var
|
|
1588
|
+
var h = e.readUint(i, A);
|
|
1548
1589
|
A += 4;
|
|
1549
|
-
var
|
|
1550
|
-
|
|
1551
|
-
for (var
|
|
1590
|
+
var c = new Uint8Array(i.buffer, n + u + a, h);
|
|
1591
|
+
c[0] == 31 && c[1] == 139 && c[2] == 8 && (c = pako.inflate(c));
|
|
1592
|
+
for (var D = e.readUTF8(c, 0, c.length), l = g; l <= o; l++)
|
|
1552
1593
|
t.entries[l] = t.svgs.length;
|
|
1553
|
-
t.svgs.push(
|
|
1594
|
+
t.svgs.push(D);
|
|
1554
1595
|
}
|
|
1555
1596
|
return t;
|
|
1556
1597
|
}
|
|
1557
1598
|
};
|
|
1558
|
-
|
|
1599
|
+
Q.T.sbix = {
|
|
1559
1600
|
parseTab: function(i, A, r, e) {
|
|
1560
|
-
for (var t = e.maxp.numGlyphs, n = A, a =
|
|
1561
|
-
for (var
|
|
1562
|
-
var
|
|
1563
|
-
if (
|
|
1564
|
-
|
|
1601
|
+
for (var t = e.maxp.numGlyphs, n = A, a = Q.B, s = a.readUint(i, A + 4), B = [], g = s - 1; g < s; g++)
|
|
1602
|
+
for (var o = n + a.readUint(i, A + 8 + g * 4), u = 0; u < t; u++) {
|
|
1603
|
+
var h = a.readUint(i, o + 4 + u * 4), c = a.readUint(i, o + 4 + u * 4 + 4);
|
|
1604
|
+
if (h == c) {
|
|
1605
|
+
B[u] = null;
|
|
1565
1606
|
continue;
|
|
1566
1607
|
}
|
|
1567
|
-
var
|
|
1608
|
+
var D = o + h, l = a.readASCII(i, D + 4, 4);
|
|
1568
1609
|
if (l != "png ") throw l;
|
|
1569
|
-
|
|
1610
|
+
B[u] = new Uint8Array(i.buffer, i.byteOffset + D + 8, c - h - 8);
|
|
1570
1611
|
}
|
|
1571
|
-
return
|
|
1612
|
+
return B;
|
|
1572
1613
|
}
|
|
1573
1614
|
};
|
|
1574
|
-
|
|
1615
|
+
Q.T.colr = {
|
|
1575
1616
|
parseTab: function(i, A, r) {
|
|
1576
|
-
var e =
|
|
1617
|
+
var e = Q.B, t = A;
|
|
1577
1618
|
A += 2;
|
|
1578
1619
|
var n = e.readUshort(i, A);
|
|
1579
1620
|
A += 2;
|
|
1580
1621
|
var a = e.readUint(i, A);
|
|
1581
1622
|
A += 4;
|
|
1582
|
-
var
|
|
1623
|
+
var s = e.readUint(i, A);
|
|
1583
1624
|
A += 4;
|
|
1584
|
-
var
|
|
1625
|
+
var B = e.readUshort(i, A);
|
|
1585
1626
|
A += 2;
|
|
1586
|
-
for (var
|
|
1587
|
-
|
|
1588
|
-
var
|
|
1589
|
-
|
|
1590
|
-
for (var
|
|
1591
|
-
|
|
1592
|
-
return [
|
|
1627
|
+
for (var g = {}, o = t + a, u = 0; u < n; u++)
|
|
1628
|
+
g["g" + e.readUshort(i, o)] = [e.readUshort(i, o + 2), e.readUshort(i, o + 4)], o += 6;
|
|
1629
|
+
var h = [];
|
|
1630
|
+
o = t + s;
|
|
1631
|
+
for (var u = 0; u < B; u++)
|
|
1632
|
+
h.push(e.readUshort(i, o), e.readUshort(i, o + 2)), o += 4;
|
|
1633
|
+
return [g, h];
|
|
1593
1634
|
}
|
|
1594
1635
|
};
|
|
1595
|
-
|
|
1636
|
+
Q.T.cpal = {
|
|
1596
1637
|
parseTab: function(i, A, r) {
|
|
1597
|
-
var e =
|
|
1638
|
+
var e = Q.B, t = A, n = e.readUshort(i, A);
|
|
1598
1639
|
if (A += 2, n == 0) {
|
|
1599
1640
|
e.readUshort(i, A), A += 2, e.readUshort(i, A), A += 2;
|
|
1600
1641
|
var a = e.readUshort(i, A);
|
|
1601
1642
|
A += 2;
|
|
1602
|
-
var
|
|
1603
|
-
return A += 4, new Uint8Array(i.buffer, t +
|
|
1643
|
+
var s = e.readUint(i, A);
|
|
1644
|
+
return A += 4, new Uint8Array(i.buffer, t + s, a * 4);
|
|
1604
1645
|
} else throw n;
|
|
1605
1646
|
}
|
|
1606
1647
|
};
|
|
1607
|
-
|
|
1648
|
+
Q.T.GSUB = {
|
|
1608
1649
|
parseTab: function(i, A, r, e) {
|
|
1609
|
-
var t =
|
|
1650
|
+
var t = Q.B, n = t.readUshort;
|
|
1610
1651
|
t.readUint;
|
|
1611
1652
|
var a = A;
|
|
1612
1653
|
n(i, a), a += 2, n(i, a), a += 2, n(i, a), a += 2;
|
|
1613
|
-
var
|
|
1614
|
-
a += 2, n(i, a), a += 2, a = A +
|
|
1615
|
-
var
|
|
1654
|
+
var s = n(i, a);
|
|
1655
|
+
a += 2, n(i, a), a += 2, a = A + s;
|
|
1656
|
+
var B = {}, g = n(i, a);
|
|
1616
1657
|
a += 2;
|
|
1617
|
-
for (var
|
|
1618
|
-
var
|
|
1619
|
-
a += 4, n(i, a), a += 2,
|
|
1658
|
+
for (var o = 0; o < g; o++) {
|
|
1659
|
+
var u = t.readASCII(i, a, 4);
|
|
1660
|
+
a += 4, n(i, a), a += 2, B[u] = !0;
|
|
1620
1661
|
}
|
|
1621
|
-
return
|
|
1662
|
+
return B;
|
|
1622
1663
|
}
|
|
1623
1664
|
};
|
|
1624
|
-
|
|
1665
|
+
Q.T.fvar = {
|
|
1625
1666
|
parseTab: function(i, A, r, e) {
|
|
1626
|
-
var t = e.name, n = A, a =
|
|
1667
|
+
var t = e.name, n = A, a = Q.B, s = [], B = [];
|
|
1627
1668
|
n += 8;
|
|
1628
|
-
var E = a.readUshort(i, n);
|
|
1629
|
-
n += 2, n += 2;
|
|
1630
1669
|
var g = a.readUshort(i, n);
|
|
1670
|
+
n += 2, n += 2;
|
|
1671
|
+
var o = a.readUshort(i, n);
|
|
1631
1672
|
n += 2;
|
|
1632
|
-
var
|
|
1673
|
+
var u = a.readUshort(i, n);
|
|
1633
1674
|
n += 2;
|
|
1634
|
-
for (var
|
|
1635
|
-
var
|
|
1636
|
-
|
|
1675
|
+
for (var h = 0; h < g; h++) {
|
|
1676
|
+
var c = a.readASCII(i, n, 4), D = a.readFixed(i, n + 4), l = a.readFixed(i, n + 8), C = a.readFixed(i, n + 12), P = a.readUshort(i, n + 16), m = a.readUshort(i, n + 18);
|
|
1677
|
+
s.push([c, D, l, C, P, t["_" + m]]), n += 20;
|
|
1637
1678
|
}
|
|
1638
|
-
for (var
|
|
1639
|
-
for (var
|
|
1640
|
-
n += 4 +
|
|
1679
|
+
for (var h = 0; h < o; h++) {
|
|
1680
|
+
for (var I = a.readUshort(i, n), v = null, P = a.readUshort(i, n + 2), p = [], w = 0; w < g; w++) p.push(a.readFixed(i, n + 4 + w * 4));
|
|
1681
|
+
n += 4 + g * 4, (u & 3) == 2 && (v = a.readUshort(i, n), n += 2), B.push([t["_" + I], P, p, v]);
|
|
1641
1682
|
}
|
|
1642
|
-
return [
|
|
1683
|
+
return [s, B];
|
|
1643
1684
|
}
|
|
1644
1685
|
};
|
|
1645
|
-
|
|
1646
|
-
var i = 32768, A = 16384, r = 8192, e = 128, t = 64, n = 128, a = 32768,
|
|
1647
|
-
function
|
|
1648
|
-
for (var l = [], C = 0; C <
|
|
1686
|
+
Q.T.gvar = function() {
|
|
1687
|
+
var i = 32768, A = 16384, r = 8192, e = 128, t = 64, n = 128, a = 32768, s = Q.B;
|
|
1688
|
+
function B(h, c, D) {
|
|
1689
|
+
for (var l = [], C = 0; C < D; C++) l.push(s.readF2dot14(h, c + C * 2));
|
|
1649
1690
|
return l;
|
|
1650
1691
|
}
|
|
1651
|
-
function
|
|
1652
|
-
for (var
|
|
1653
|
-
var
|
|
1654
|
-
|
|
1655
|
-
var
|
|
1656
|
-
|
|
1657
|
-
var
|
|
1658
|
-
p & i && (
|
|
1692
|
+
function g(h, c, D, l, C) {
|
|
1693
|
+
for (var P = [], m = 0; m < D; m++) {
|
|
1694
|
+
var I = s.readUshort(h, c);
|
|
1695
|
+
c += 2;
|
|
1696
|
+
var v = s.readUshort(h, c), p = v & 61440;
|
|
1697
|
+
v = v & 4095, c += 2;
|
|
1698
|
+
var w = null, d = null, f = null;
|
|
1699
|
+
p & i && (w = B(h, c, l), c += l * 2), p & A && (d = B(h, c, l), c += l * 2), p & A && (f = B(h, c, l), c += l * 2), P.push([I, v, p, d, w, f]);
|
|
1659
1700
|
}
|
|
1660
|
-
return
|
|
1661
|
-
}
|
|
1662
|
-
function
|
|
1663
|
-
var l =
|
|
1664
|
-
if (
|
|
1665
|
-
127 < l && (l = (l & 127) << 8 |
|
|
1666
|
-
for (var C = [],
|
|
1667
|
-
var
|
|
1668
|
-
|
|
1669
|
-
var
|
|
1670
|
-
|
|
1671
|
-
for (var
|
|
1701
|
+
return P;
|
|
1702
|
+
}
|
|
1703
|
+
function o(h, c, D) {
|
|
1704
|
+
var l = h[c];
|
|
1705
|
+
if (c++, l == 0) return [[], c];
|
|
1706
|
+
127 < l && (l = (l & 127) << 8 | h[c++]);
|
|
1707
|
+
for (var C = [], P = 0; C.length < l; ) {
|
|
1708
|
+
var m = h[c];
|
|
1709
|
+
c++;
|
|
1710
|
+
var I = (m & n) != 0;
|
|
1711
|
+
m = (m & 127) + 1;
|
|
1712
|
+
for (var v = 0; v < m; v++) {
|
|
1672
1713
|
var p = 0;
|
|
1673
|
-
|
|
1714
|
+
I ? (p = s.readUshort(h, c), c += 2) : (p = h[c], c++), P += p, C.push(P);
|
|
1674
1715
|
}
|
|
1675
1716
|
}
|
|
1676
|
-
return [C,
|
|
1717
|
+
return [C, c];
|
|
1677
1718
|
}
|
|
1678
|
-
function
|
|
1679
|
-
var C =
|
|
1719
|
+
function u(h, c, D, l) {
|
|
1720
|
+
var C = c + 4, P = s.readUshort(h, C);
|
|
1680
1721
|
C += 2;
|
|
1681
|
-
var
|
|
1722
|
+
var m = s.readUshort(h, C);
|
|
1682
1723
|
C += 2;
|
|
1683
|
-
var
|
|
1724
|
+
var I = s.readUint(h, C);
|
|
1684
1725
|
C += 4;
|
|
1685
|
-
var
|
|
1686
|
-
C += 2,
|
|
1687
|
-
var p =
|
|
1726
|
+
var v = s.readUshort(h, C);
|
|
1727
|
+
C += 2, s.readUshort(h, C), C += 2;
|
|
1728
|
+
var p = s.readUint(h, C);
|
|
1688
1729
|
C += 4;
|
|
1689
|
-
for (var
|
|
1690
|
-
var
|
|
1691
|
-
C =
|
|
1692
|
-
for (var
|
|
1693
|
-
var
|
|
1694
|
-
|
|
1695
|
-
for (var
|
|
1696
|
-
S[
|
|
1730
|
+
for (var w = [], d = 0; d < v + 1; d++) w.push(s.readUint(h, C + d * 4));
|
|
1731
|
+
var f = [], _ = [], b = [];
|
|
1732
|
+
C = c + I;
|
|
1733
|
+
for (var d = 0; d < m; d++) {
|
|
1734
|
+
var U = B(h, C + d * P * 2, P), S = [], y = [];
|
|
1735
|
+
f.push(U), _.push(S), b.push(y);
|
|
1736
|
+
for (var x = 0; x < P; x++)
|
|
1737
|
+
S[x] = Math.min(U[x], 0), y[x] = Math.max(U[x], 0);
|
|
1697
1738
|
}
|
|
1698
|
-
for (var G = new Int8Array(
|
|
1699
|
-
C =
|
|
1700
|
-
var
|
|
1739
|
+
for (var G = new Int8Array(h.buffer), N = [], d = 0; d < v; d++) {
|
|
1740
|
+
C = c + p + w[d];
|
|
1741
|
+
var H = s.readUshort(h, C);
|
|
1701
1742
|
C += 2;
|
|
1702
|
-
var
|
|
1703
|
-
|
|
1704
|
-
var
|
|
1743
|
+
var K = H & a;
|
|
1744
|
+
H &= 4095;
|
|
1745
|
+
var Z = s.readUshort(h, C);
|
|
1705
1746
|
C += 2;
|
|
1706
|
-
var
|
|
1707
|
-
|
|
1708
|
-
var
|
|
1709
|
-
if (
|
|
1710
|
-
var
|
|
1711
|
-
|
|
1747
|
+
var q = g(h, C, H, P), L = [];
|
|
1748
|
+
N.push(L), C = c + p + w[d] + Z;
|
|
1749
|
+
var Y = null;
|
|
1750
|
+
if (K) {
|
|
1751
|
+
var V = o(h, C);
|
|
1752
|
+
Y = V[0], C = V[1];
|
|
1712
1753
|
}
|
|
1713
|
-
for (var
|
|
1714
|
-
var M =
|
|
1754
|
+
for (var $ = 0; $ < H; $++) {
|
|
1755
|
+
var M = q[$], sA = C + M[0], W = Y;
|
|
1715
1756
|
if (M[2] & r) {
|
|
1716
|
-
var
|
|
1717
|
-
|
|
1757
|
+
var V = o(h, C);
|
|
1758
|
+
W = V[0], C = V[1];
|
|
1718
1759
|
}
|
|
1719
|
-
for (var
|
|
1720
|
-
var
|
|
1721
|
-
if (
|
|
1722
|
-
for (var
|
|
1723
|
-
else if (
|
|
1724
|
-
for (var
|
|
1725
|
-
C +=
|
|
1760
|
+
for (var X = []; C < sA; ) {
|
|
1761
|
+
var j = h[C++], J = (j & 63) + 1;
|
|
1762
|
+
if (j & e)
|
|
1763
|
+
for (var x = 0; x < J; x++) X.push(0);
|
|
1764
|
+
else if (j & t) {
|
|
1765
|
+
for (var x = 0; x < J; x++) X.push(s.readShort(h, C + x * 2));
|
|
1766
|
+
C += J * 2;
|
|
1726
1767
|
} else {
|
|
1727
|
-
for (var
|
|
1728
|
-
C +=
|
|
1768
|
+
for (var x = 0; x < J; x++) X.push(G[C + x]);
|
|
1769
|
+
C += J;
|
|
1729
1770
|
}
|
|
1730
1771
|
}
|
|
1731
|
-
var
|
|
1732
|
-
if (
|
|
1733
|
-
M[3] ? M[3] :
|
|
1734
|
-
M[4] ? M[4] :
|
|
1735
|
-
M[5] ? M[5] :
|
|
1736
|
-
],
|
|
1772
|
+
var AA = M[1];
|
|
1773
|
+
if (L.push([[
|
|
1774
|
+
M[3] ? M[3] : _[AA],
|
|
1775
|
+
M[4] ? M[4] : f[AA],
|
|
1776
|
+
M[5] ? M[5] : b[AA]
|
|
1777
|
+
], X, W.length == 0 ? null : W]), W.length != 0 && W.length * 2 != X.length) throw "e";
|
|
1737
1778
|
}
|
|
1738
1779
|
}
|
|
1739
|
-
return
|
|
1780
|
+
return N;
|
|
1740
1781
|
}
|
|
1741
|
-
return { parseTab:
|
|
1782
|
+
return { parseTab: u };
|
|
1742
1783
|
}();
|
|
1743
|
-
|
|
1784
|
+
Q.T.avar = {
|
|
1744
1785
|
parseTab: function(i, A, r, e) {
|
|
1745
|
-
var t = A, n =
|
|
1786
|
+
var t = A, n = Q.B, a = [];
|
|
1746
1787
|
t += 6;
|
|
1747
|
-
var
|
|
1788
|
+
var s = n.readUshort(i, t);
|
|
1748
1789
|
t += 2;
|
|
1749
|
-
for (var
|
|
1750
|
-
var
|
|
1790
|
+
for (var B = 0; B < s; B++) {
|
|
1791
|
+
var g = n.readUshort(i, t);
|
|
1751
1792
|
t += 2;
|
|
1752
|
-
var
|
|
1753
|
-
a.push(
|
|
1754
|
-
for (var
|
|
1755
|
-
var
|
|
1756
|
-
t += 4,
|
|
1793
|
+
var o = [];
|
|
1794
|
+
a.push(o);
|
|
1795
|
+
for (var u = 0; u < g; u++) {
|
|
1796
|
+
var h = n.readF2dot14(i, t), c = n.readF2dot14(i, t + 2);
|
|
1797
|
+
t += 4, o.push(h, c);
|
|
1757
1798
|
}
|
|
1758
1799
|
}
|
|
1759
1800
|
return a;
|
|
1760
1801
|
}
|
|
1761
1802
|
};
|
|
1762
|
-
|
|
1803
|
+
Q.T.HVAR = {
|
|
1763
1804
|
parseTab: function(i, A, r, e) {
|
|
1764
|
-
var t = A, n = A, a =
|
|
1765
|
-
t += 4;
|
|
1766
|
-
var B = a.readUint(i, t);
|
|
1805
|
+
var t = A, n = A, a = Q.B;
|
|
1767
1806
|
t += 4;
|
|
1768
1807
|
var s = a.readUint(i, t);
|
|
1769
1808
|
t += 4;
|
|
1770
|
-
var
|
|
1809
|
+
var B = a.readUint(i, t);
|
|
1771
1810
|
t += 4;
|
|
1772
1811
|
var g = a.readUint(i, t);
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1812
|
+
t += 4;
|
|
1813
|
+
var o = a.readUint(i, t);
|
|
1814
|
+
if (t += 4, g != 0 || o != 0) throw g;
|
|
1815
|
+
t = n + s;
|
|
1816
|
+
var u = t, G = a.readUshort(i, t);
|
|
1776
1817
|
if (t += 2, G != 1) throw "e";
|
|
1777
|
-
var
|
|
1818
|
+
var h = a.readUint(i, t);
|
|
1778
1819
|
t += 4;
|
|
1779
|
-
var
|
|
1820
|
+
var c = a.readUshort(i, t);
|
|
1780
1821
|
t += 2;
|
|
1781
|
-
for (var
|
|
1782
|
-
t +=
|
|
1822
|
+
for (var D = [], l = 0; l < c; l++) D.push(a.readUint(i, t + l * 4));
|
|
1823
|
+
t += c * 4, t = u + h;
|
|
1783
1824
|
var C = a.readUshort(i, t);
|
|
1784
1825
|
t += 2;
|
|
1785
|
-
var
|
|
1826
|
+
var P = a.readUshort(i, t);
|
|
1786
1827
|
t += 2;
|
|
1787
|
-
for (var
|
|
1788
|
-
var
|
|
1789
|
-
|
|
1790
|
-
for (var
|
|
1791
|
-
|
|
1828
|
+
for (var m = [], l = 0; l < P; l++) {
|
|
1829
|
+
var I = [[], [], []];
|
|
1830
|
+
m.push(I);
|
|
1831
|
+
for (var v = 0; v < C; v++)
|
|
1832
|
+
I[0].push(a.readF2dot14(i, t + 0)), I[1].push(a.readF2dot14(i, t + 2)), I[2].push(a.readF2dot14(i, t + 4)), t += 6;
|
|
1792
1833
|
}
|
|
1793
|
-
for (var p = new Int8Array(i.buffer),
|
|
1794
|
-
t = n +
|
|
1795
|
-
var
|
|
1796
|
-
|
|
1797
|
-
var
|
|
1834
|
+
for (var p = new Int8Array(i.buffer), w = [], l = 0; l < D.length; l++) {
|
|
1835
|
+
t = n + s + D[l];
|
|
1836
|
+
var d = [];
|
|
1837
|
+
w.push(d);
|
|
1838
|
+
var f = a.readUshort(i, t);
|
|
1798
1839
|
t += 2;
|
|
1799
|
-
var
|
|
1800
|
-
if (t += 2,
|
|
1801
|
-
var
|
|
1840
|
+
var _ = a.readUshort(i, t);
|
|
1841
|
+
if (t += 2, _ & 32768) throw "e";
|
|
1842
|
+
var P = a.readUshort(i, t);
|
|
1802
1843
|
t += 2;
|
|
1803
|
-
for (var
|
|
1804
|
-
t +=
|
|
1805
|
-
for (var
|
|
1806
|
-
for (var S = [],
|
|
1807
|
-
S.push(
|
|
1808
|
-
var
|
|
1809
|
-
|
|
1810
|
-
for (var
|
|
1844
|
+
for (var b = [], v = 0; v < P; v++) b.push(a.readUshort(i, t + v * 2));
|
|
1845
|
+
t += P * 2;
|
|
1846
|
+
for (var U = 0; U < f; U++) {
|
|
1847
|
+
for (var S = [], y = 0; y < P; y++)
|
|
1848
|
+
S.push(y < _ ? a.readShort(i, t) : p[t]), t += y < _ ? 2 : 1;
|
|
1849
|
+
var x = new Array(m.length);
|
|
1850
|
+
x.fill(0), d.push(x);
|
|
1851
|
+
for (var v = 0; v < b.length; v++) x[b[v]] = S[v];
|
|
1811
1852
|
}
|
|
1812
1853
|
}
|
|
1813
|
-
t = n +
|
|
1854
|
+
t = n + B;
|
|
1814
1855
|
var G = i[t++];
|
|
1815
1856
|
if (G != 0) throw "e";
|
|
1816
|
-
var
|
|
1857
|
+
var N = i[t++], H = a.readUshort(i, t);
|
|
1817
1858
|
t += 2;
|
|
1818
|
-
for (var
|
|
1819
|
-
var
|
|
1820
|
-
|
|
1821
|
-
var
|
|
1822
|
-
|
|
1859
|
+
for (var K = 15, Z = 48, q = ((N & Z) >> 4) + 1, L = [], l = 0; l < H; l++) {
|
|
1860
|
+
var Y = 0;
|
|
1861
|
+
q == 1 ? Y = i[t++] : (Y = a.readUshort(i, t), t += 2);
|
|
1862
|
+
var V = Y >> (N & K) + 1, $ = Y & (1 << (N & K) + 1) - 1;
|
|
1863
|
+
L.push(w[V][$]);
|
|
1823
1864
|
}
|
|
1824
|
-
return [
|
|
1865
|
+
return [m, L];
|
|
1825
1866
|
}
|
|
1826
1867
|
};
|
|
1827
|
-
typeof module < "u" && module.exports ? module.exports =
|
|
1828
|
-
const lA = `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
|
|
1868
|
+
typeof module < "u" && module.exports ? module.exports = Q : typeof window < "u" && (window.Typr = Q);
|
|
1869
|
+
const cA = `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
|
|
1829
1870
|
`;
|
|
1830
|
-
class
|
|
1871
|
+
class uA {
|
|
1831
1872
|
/**
|
|
1832
1873
|
* Extracts all available characters from a font's cmap tables.
|
|
1833
1874
|
* @param font The parsed font object from Typr
|
|
@@ -1860,8 +1901,8 @@ class cA {
|
|
|
1860
1901
|
if (!(t === 65535 && n === 65535)) {
|
|
1861
1902
|
for (let a = t; a <= n; a++)
|
|
1862
1903
|
if (this._calculateGlyphIndexFormat4(A, a, e) > 0) {
|
|
1863
|
-
const
|
|
1864
|
-
r.push(
|
|
1904
|
+
const B = String.fromCodePoint(a);
|
|
1905
|
+
r.push(B);
|
|
1865
1906
|
}
|
|
1866
1907
|
}
|
|
1867
1908
|
}
|
|
@@ -1878,10 +1919,10 @@ class cA {
|
|
|
1878
1919
|
return r;
|
|
1879
1920
|
for (let e = 0; e < A.groups.length; e += 3) {
|
|
1880
1921
|
const t = A.groups[e], n = A.groups[e + 1], a = A.groups[e + 2];
|
|
1881
|
-
for (let
|
|
1882
|
-
if (a + (
|
|
1883
|
-
const
|
|
1884
|
-
r.push(
|
|
1922
|
+
for (let s = t; s <= n; s++)
|
|
1923
|
+
if (a + (s - t) > 0) {
|
|
1924
|
+
const g = String.fromCodePoint(s);
|
|
1925
|
+
r.push(g);
|
|
1885
1926
|
}
|
|
1886
1927
|
}
|
|
1887
1928
|
return r;
|
|
@@ -1924,15 +1965,15 @@ class cA {
|
|
|
1924
1965
|
return !(r >= 0 && r <= 31 && r !== 9 && r !== 10 && r !== 13 || r >= 127 && r <= 159);
|
|
1925
1966
|
}
|
|
1926
1967
|
}
|
|
1927
|
-
class
|
|
1968
|
+
class CA {
|
|
1928
1969
|
/**
|
|
1929
1970
|
* Creates a new TextureAtlasCreation instance.
|
|
1930
1971
|
* @param renderer The WebGL renderer instance
|
|
1931
1972
|
*/
|
|
1932
1973
|
constructor(A) {
|
|
1933
|
-
|
|
1934
|
-
|
|
1935
|
-
|
|
1974
|
+
E(this, "_textureCanvas");
|
|
1975
|
+
E(this, "_textureContext");
|
|
1976
|
+
E(this, "_renderer");
|
|
1936
1977
|
this._renderer = A, this._textureCanvas = document.createElement("canvas"), this._textureContext = this._textureCanvas.getContext("2d", { willReadFrequently: !0, alpha: !1 });
|
|
1937
1978
|
}
|
|
1938
1979
|
/**
|
|
@@ -1944,13 +1985,13 @@ class uA {
|
|
|
1944
1985
|
* @returns Object containing framebuffer, columns, and rows
|
|
1945
1986
|
*/
|
|
1946
1987
|
createTextureAtlas(A, r, e, t) {
|
|
1947
|
-
const n = A.length, a = Math.ceil(Math.sqrt(n)),
|
|
1948
|
-
this._setupCanvas(
|
|
1949
|
-
const
|
|
1950
|
-
return
|
|
1951
|
-
framebuffer:
|
|
1988
|
+
const n = A.length, a = Math.ceil(Math.sqrt(n)), s = Math.ceil(n / a), B = r.width * a, g = r.height * s;
|
|
1989
|
+
this._setupCanvas(B, g, e, t), this._renderCharactersToCanvas(A, r, a, e), this._applyBlackWhiteThreshold();
|
|
1990
|
+
const o = this._renderer.createFramebuffer(B, g, { filter: "nearest" });
|
|
1991
|
+
return o.update(this._textureCanvas), {
|
|
1992
|
+
framebuffer: o,
|
|
1952
1993
|
columns: a,
|
|
1953
|
-
rows:
|
|
1994
|
+
rows: s
|
|
1954
1995
|
};
|
|
1955
1996
|
}
|
|
1956
1997
|
/**
|
|
@@ -1974,8 +2015,8 @@ class uA {
|
|
|
1974
2015
|
*/
|
|
1975
2016
|
_renderCharactersToCanvas(A, r, e, t) {
|
|
1976
2017
|
for (let n = 0; n < A.length; n++) {
|
|
1977
|
-
const a = n % e,
|
|
1978
|
-
this._textureContext.fillText(A[n].character,
|
|
2018
|
+
const a = n % e, s = Math.floor(n / e), B = a * r.width + r.width * 0.5, g = s * r.height + r.height * 0.5, o = Math.round(B - r.width * 0.5), u = Math.round(g - t * 0.5);
|
|
2019
|
+
this._textureContext.fillText(A[n].character, o, u);
|
|
1979
2020
|
}
|
|
1980
2021
|
}
|
|
1981
2022
|
/**
|
|
@@ -1987,19 +2028,19 @@ class uA {
|
|
|
1987
2028
|
_applyBlackWhiteThreshold(A = 128) {
|
|
1988
2029
|
const r = this._textureContext.getImageData(0, 0, this._textureCanvas.width, this._textureCanvas.height), e = r.data;
|
|
1989
2030
|
for (let t = 0; t < e.length; t += 4) {
|
|
1990
|
-
const n = 0.299 * e[t] + 0.587 * e[t + 1] + 0.114 * e[t + 2], a = A + 32,
|
|
1991
|
-
e[t] =
|
|
2031
|
+
const n = 0.299 * e[t] + 0.587 * e[t + 1] + 0.114 * e[t + 2], a = A + 32, s = n > a ? 255 : 0;
|
|
2032
|
+
e[t] = s, e[t + 1] = s, e[t + 2] = s;
|
|
1992
2033
|
}
|
|
1993
2034
|
this._textureContext.putImageData(r, 0, 0);
|
|
1994
2035
|
}
|
|
1995
2036
|
}
|
|
1996
|
-
class
|
|
2037
|
+
class dA {
|
|
1997
2038
|
/**
|
|
1998
2039
|
* Creates a new MetricsCalculation instance.
|
|
1999
2040
|
*/
|
|
2000
2041
|
constructor() {
|
|
2001
|
-
|
|
2002
|
-
|
|
2042
|
+
E(this, "_tempCanvas");
|
|
2043
|
+
E(this, "_tempContext");
|
|
2003
2044
|
this._tempCanvas = document.createElement("canvas"), this._tempContext = this._tempCanvas.getContext("2d");
|
|
2004
2045
|
}
|
|
2005
2046
|
/**
|
|
@@ -2014,8 +2055,8 @@ class CA {
|
|
|
2014
2055
|
this._tempContext.font = `${r}px ${e}`;
|
|
2015
2056
|
let t = 0, n = 0;
|
|
2016
2057
|
for (const a of A) {
|
|
2017
|
-
const
|
|
2018
|
-
|
|
2058
|
+
const s = this._tempContext.measureText(a), B = s.width, g = s.actualBoundingBoxAscent + s.actualBoundingBoxDescent;
|
|
2059
|
+
B > 0 && (t = Math.max(t, B), n = Math.max(n, g));
|
|
2019
2060
|
}
|
|
2020
2061
|
return {
|
|
2021
2062
|
width: Math.ceil(t),
|
|
@@ -2033,16 +2074,16 @@ class DA {
|
|
|
2033
2074
|
createCharacterObjects(A, r) {
|
|
2034
2075
|
return A.map((e, t) => {
|
|
2035
2076
|
const n = e.codePointAt(0) || 0, a = this._generateCharacterColor(t);
|
|
2036
|
-
let
|
|
2077
|
+
let s = 0;
|
|
2037
2078
|
if (r.hmtx && r.hmtx.aWidth) {
|
|
2038
|
-
const
|
|
2039
|
-
|
|
2079
|
+
const B = this._getGlyphIndex(r, n);
|
|
2080
|
+
B > 0 && r.hmtx.aWidth[B] !== void 0 && (s = r.hmtx.aWidth[B]);
|
|
2040
2081
|
}
|
|
2041
2082
|
return {
|
|
2042
2083
|
character: e,
|
|
2043
2084
|
unicode: n,
|
|
2044
2085
|
color: a,
|
|
2045
|
-
advanceWidth:
|
|
2086
|
+
advanceWidth: s
|
|
2046
2087
|
};
|
|
2047
2088
|
});
|
|
2048
2089
|
}
|
|
@@ -2065,9 +2106,9 @@ class DA {
|
|
|
2065
2106
|
{
|
|
2066
2107
|
const a = t.idRangeOffset[n] / 2 + (r - t.startCount[n]) - (t.startCount.length - n);
|
|
2067
2108
|
if (a >= 0 && a < t.glyphIdArray.length) {
|
|
2068
|
-
const
|
|
2069
|
-
if (
|
|
2070
|
-
return
|
|
2109
|
+
const s = t.glyphIdArray[a];
|
|
2110
|
+
if (s !== 0)
|
|
2111
|
+
return s + t.idDelta[n] & 65535;
|
|
2071
2112
|
}
|
|
2072
2113
|
}
|
|
2073
2114
|
}
|
|
@@ -2090,6 +2131,12 @@ class DA {
|
|
|
2090
2131
|
* @returns RGB color as a tuple [r, g, b], or [0, 0, 0] if not found
|
|
2091
2132
|
*/
|
|
2092
2133
|
getCharacterColor(A, r) {
|
|
2134
|
+
if (!F.validate(
|
|
2135
|
+
typeof A == "string" && A.length === 1,
|
|
2136
|
+
"Character must be a single character string.",
|
|
2137
|
+
{ method: "getCharacterColor", providedValue: A }
|
|
2138
|
+
))
|
|
2139
|
+
return [0, 0, 0];
|
|
2093
2140
|
const e = r.find((t) => t.character === A);
|
|
2094
2141
|
return e ? e.color : [0, 0, 0];
|
|
2095
2142
|
}
|
|
@@ -2100,10 +2147,14 @@ class DA {
|
|
|
2100
2147
|
* @returns Array of RGB colors for each character
|
|
2101
2148
|
*/
|
|
2102
2149
|
getCharacterColors(A, r) {
|
|
2103
|
-
return
|
|
2150
|
+
return F.validate(
|
|
2151
|
+
typeof A == "string" && A.length > 0,
|
|
2152
|
+
"Characters must be a string with at least one character.",
|
|
2153
|
+
{ method: "getCharacterColors", providedValue: A }
|
|
2154
|
+
) ? A.split("").map((e) => this.getCharacterColor(e, r) || [0, 0, 0]) : [[0, 0, 0]];
|
|
2104
2155
|
}
|
|
2105
2156
|
}
|
|
2106
|
-
class
|
|
2157
|
+
class PA {
|
|
2107
2158
|
/**
|
|
2108
2159
|
* Creates a new TextmodeFont instance.
|
|
2109
2160
|
* @param renderer Renderer instance for texture creation
|
|
@@ -2111,21 +2162,21 @@ class dA {
|
|
|
2111
2162
|
* @ignore
|
|
2112
2163
|
*/
|
|
2113
2164
|
constructor(A, r = 16) {
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2165
|
+
E(this, "_font");
|
|
2166
|
+
E(this, "_characters", []);
|
|
2167
|
+
E(this, "_fontFramebuffer");
|
|
2168
|
+
E(this, "_fontSize", 16);
|
|
2169
|
+
E(this, "_textureColumns", 0);
|
|
2170
|
+
E(this, "_textureRows", 0);
|
|
2171
|
+
E(this, "_maxGlyphDimensions", { width: 0, height: 0 });
|
|
2172
|
+
E(this, "_fontFace");
|
|
2173
|
+
E(this, "_fontFamilyName", "UrsaFont");
|
|
2123
2174
|
// Component classes
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
|
|
2128
|
-
this._fontSize = r, this._characterExtractor = new
|
|
2175
|
+
E(this, "_characterExtractor");
|
|
2176
|
+
E(this, "_textureAtlas");
|
|
2177
|
+
E(this, "_metricsCalculator");
|
|
2178
|
+
E(this, "_characterColorMapper");
|
|
2179
|
+
this._fontSize = r, this._characterExtractor = new uA(), this._textureAtlas = new CA(A), this._metricsCalculator = new dA(), this._characterColorMapper = new DA();
|
|
2129
2180
|
}
|
|
2130
2181
|
/**
|
|
2131
2182
|
* Initializes the font manager by loading the font and creating the texture atlas.
|
|
@@ -2133,8 +2184,8 @@ class dA {
|
|
|
2133
2184
|
* @ignore
|
|
2134
2185
|
*/
|
|
2135
2186
|
async initialize() {
|
|
2136
|
-
const r = await (await fetch(
|
|
2137
|
-
await this._loadFontFace(r), this._font =
|
|
2187
|
+
const r = await (await fetch(cA)).arrayBuffer();
|
|
2188
|
+
await this._loadFontFace(r), this._font = Q.parse(r)[0], await this._initializeFont();
|
|
2138
2189
|
}
|
|
2139
2190
|
/**
|
|
2140
2191
|
* Sets the font size for rendering.
|
|
@@ -2169,7 +2220,7 @@ class dA {
|
|
|
2169
2220
|
throw new T(`Failed to load font file: ${r.status} ${r.statusText}`);
|
|
2170
2221
|
const e = await r.arrayBuffer();
|
|
2171
2222
|
await this._loadFontFace(e);
|
|
2172
|
-
const t =
|
|
2223
|
+
const t = Q.parse(e);
|
|
2173
2224
|
if (!t || t.length === 0)
|
|
2174
2225
|
throw new Error("Failed to parse font file");
|
|
2175
2226
|
this._font = t[0], await this._initializeFont();
|
|
@@ -2209,11 +2260,7 @@ class dA {
|
|
|
2209
2260
|
* @returns The RGB color as an array `[r, g, b]`.
|
|
2210
2261
|
*/
|
|
2211
2262
|
getCharacterColor(A) {
|
|
2212
|
-
return
|
|
2213
|
-
typeof A == "string" && A.length === 1,
|
|
2214
|
-
"Character must be a single character string.",
|
|
2215
|
-
{ providedValue: A, method: "getCharacterColor" }
|
|
2216
|
-
) ? this._characterColorMapper.getCharacterColor(A, this._characters) : [0, 0, 0];
|
|
2263
|
+
return this._characterColorMapper.getCharacterColor(A, this._characters);
|
|
2217
2264
|
}
|
|
2218
2265
|
/**
|
|
2219
2266
|
* Get the colors associated with a string of characters.
|
|
@@ -2222,11 +2269,7 @@ class dA {
|
|
|
2222
2269
|
* Each color is represented as an array `[r, g, b]`.
|
|
2223
2270
|
*/
|
|
2224
2271
|
getCharacterColors(A) {
|
|
2225
|
-
return
|
|
2226
|
-
typeof A == "string" && A.length > 0,
|
|
2227
|
-
"Characters must be a string with at least one character.",
|
|
2228
|
-
{ providedValue: A, method: "getCharacterColors" }
|
|
2229
|
-
) ? this._characterColorMapper.getCharacterColors(A, this._characters) : [[0, 0, 0]];
|
|
2272
|
+
return this._characterColorMapper.getCharacterColors(A, this._characters);
|
|
2230
2273
|
}
|
|
2231
2274
|
/**
|
|
2232
2275
|
* Checks if all characters in the given string exist in the font.
|
|
@@ -2251,10 +2294,6 @@ class dA {
|
|
|
2251
2294
|
get characters() {
|
|
2252
2295
|
return this._characters;
|
|
2253
2296
|
}
|
|
2254
|
-
/** Returns a string representation of all characters in the font. */
|
|
2255
|
-
get charactersString() {
|
|
2256
|
-
return this._characters.map((A) => A.character).join("");
|
|
2257
|
-
}
|
|
2258
2297
|
/** Returns the number of columns in the texture atlas. */
|
|
2259
2298
|
get textureColumns() {
|
|
2260
2299
|
return this._textureColumns;
|
|
@@ -2272,7 +2311,7 @@ class dA {
|
|
|
2272
2311
|
return this._fontSize;
|
|
2273
2312
|
}
|
|
2274
2313
|
}
|
|
2275
|
-
class
|
|
2314
|
+
class mA {
|
|
2276
2315
|
/**
|
|
2277
2316
|
* Create a new grid instance.
|
|
2278
2317
|
* @param canvas The canvas element used to determine the grid dimensions.
|
|
@@ -2282,25 +2321,25 @@ class PA {
|
|
|
2282
2321
|
*/
|
|
2283
2322
|
constructor(A, r, e) {
|
|
2284
2323
|
/** The number of columns in the grid. */
|
|
2285
|
-
|
|
2324
|
+
E(this, "_cols");
|
|
2286
2325
|
/** The number of rows in the grid. */
|
|
2287
|
-
|
|
2326
|
+
E(this, "_rows");
|
|
2288
2327
|
/** The total width of the grid in pixels. */
|
|
2289
|
-
|
|
2328
|
+
E(this, "_width");
|
|
2290
2329
|
/** The total height of the grid in pixels. */
|
|
2291
|
-
|
|
2330
|
+
E(this, "_height");
|
|
2292
2331
|
/** The offset to the outer canvas on the x-axis when centering the grid. */
|
|
2293
|
-
|
|
2332
|
+
E(this, "_offsetX");
|
|
2294
2333
|
/** The offset to the outer canvas on the y-axis when centering the grid. */
|
|
2295
|
-
|
|
2334
|
+
E(this, "_offsetY");
|
|
2296
2335
|
/** Whether the grid dimensions are fixed, or responsive based on the canvas dimensions. */
|
|
2297
|
-
|
|
2336
|
+
E(this, "_fixedDimensions", !1);
|
|
2298
2337
|
/** The canvas element used to determine the grid dimensions. */
|
|
2299
|
-
|
|
2338
|
+
E(this, "_canvas");
|
|
2300
2339
|
/** The width of each cell in the grid. */
|
|
2301
|
-
|
|
2340
|
+
E(this, "_cellWidth");
|
|
2302
2341
|
/** The height of each cell in the grid. */
|
|
2303
|
-
|
|
2342
|
+
E(this, "_cellHeight");
|
|
2304
2343
|
this._canvas = A, this._cellWidth = r, this._cellHeight = e, this.reset();
|
|
2305
2344
|
}
|
|
2306
2345
|
/**
|
|
@@ -2402,8 +2441,8 @@ class PA {
|
|
|
2402
2441
|
}
|
|
2403
2442
|
class IA {
|
|
2404
2443
|
constructor(A) {
|
|
2405
|
-
|
|
2406
|
-
|
|
2444
|
+
E(this, "webglCanvas");
|
|
2445
|
+
E(this, "captureCanvas");
|
|
2407
2446
|
this.captureCanvas = A, this.webglCanvas = this.createOverlayCanvas();
|
|
2408
2447
|
}
|
|
2409
2448
|
generateUniqueCanvasId() {
|
|
@@ -2413,12 +2452,12 @@ class IA {
|
|
|
2413
2452
|
return r;
|
|
2414
2453
|
}
|
|
2415
2454
|
createOverlayCanvas() {
|
|
2416
|
-
var
|
|
2455
|
+
var s;
|
|
2417
2456
|
const A = document.createElement("canvas"), r = this.captureCanvas.getBoundingClientRect(), e = Math.round(r.width), t = Math.round(r.height);
|
|
2418
2457
|
A.width = e, A.height = t, A.className = "textmodeCanvas", A.id = this.generateUniqueCanvasId(), A.style.position = "absolute", A.style.pointerEvents = "none";
|
|
2419
2458
|
const n = window.getComputedStyle(this.captureCanvas);
|
|
2420
2459
|
let a = parseInt(n.zIndex || "0", 10);
|
|
2421
|
-
return isNaN(a) && (a = 0), A.style.zIndex = (a + 1).toString(), A.style.width = e + "px", A.style.height = t + "px", this.positionOverlayCanvas(A), (
|
|
2460
|
+
return isNaN(a) && (a = 0), A.style.zIndex = (a + 1).toString(), A.style.width = e + "px", A.style.height = t + "px", this.positionOverlayCanvas(A), (s = this.captureCanvas.parentNode) == null || s.insertBefore(A, this.captureCanvas.nextSibling), A;
|
|
2422
2461
|
}
|
|
2423
2462
|
positionOverlayCanvas(A) {
|
|
2424
2463
|
const r = this.captureCanvas.getBoundingClientRect();
|
|
@@ -2461,17 +2500,25 @@ class IA {
|
|
|
2461
2500
|
return this.webglCanvas.height;
|
|
2462
2501
|
}
|
|
2463
2502
|
}
|
|
2464
|
-
class
|
|
2503
|
+
class k {
|
|
2504
|
+
/**
|
|
2505
|
+
* Creates a new TextmodeConverter instance.
|
|
2506
|
+
* @param renderer Renderer instance for texture creation
|
|
2507
|
+
* @param fontManager Font manager for character extraction and color mapping
|
|
2508
|
+
* @param grid Grid instance for managing textmode layout
|
|
2509
|
+
* @param options Additional options for the converter
|
|
2510
|
+
* @ignore
|
|
2511
|
+
*/
|
|
2465
2512
|
constructor(A, r, e, t = {}) {
|
|
2466
|
-
|
|
2467
|
-
|
|
2468
|
-
|
|
2469
|
-
|
|
2470
|
-
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2513
|
+
E(this, "renderer");
|
|
2514
|
+
E(this, "fontManager");
|
|
2515
|
+
E(this, "grid");
|
|
2516
|
+
E(this, "_characterFramebuffer");
|
|
2517
|
+
E(this, "_primaryColorFramebuffer");
|
|
2518
|
+
E(this, "_secondaryColorFramebuffer");
|
|
2519
|
+
E(this, "_rotationFramebuffer");
|
|
2520
|
+
E(this, "_transformFramebuffer");
|
|
2521
|
+
E(this, "options");
|
|
2475
2522
|
this.renderer = A, this.fontManager = r, this.grid = e, this.options = t, 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);
|
|
2476
2523
|
}
|
|
2477
2524
|
/**
|
|
@@ -2481,23 +2528,28 @@ class rA {
|
|
|
2481
2528
|
resize() {
|
|
2482
2529
|
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);
|
|
2483
2530
|
}
|
|
2531
|
+
/** Returns the framebuffer containing character data. */
|
|
2484
2532
|
get characterFramebuffer() {
|
|
2485
2533
|
return this._characterFramebuffer;
|
|
2486
2534
|
}
|
|
2535
|
+
/** Returns the framebuffer containing primary color data. */
|
|
2487
2536
|
get primaryColorFramebuffer() {
|
|
2488
2537
|
return this._primaryColorFramebuffer;
|
|
2489
2538
|
}
|
|
2539
|
+
/** Returns the framebuffer containing secondary color data. */
|
|
2490
2540
|
get secondaryColorFramebuffer() {
|
|
2491
2541
|
return this._secondaryColorFramebuffer;
|
|
2492
2542
|
}
|
|
2543
|
+
/** Returns the framebuffer containing rotation data. */
|
|
2493
2544
|
get rotationFramebuffer() {
|
|
2494
2545
|
return this._rotationFramebuffer;
|
|
2495
2546
|
}
|
|
2547
|
+
/** Returns the framebuffer containing transformation data. */
|
|
2496
2548
|
get transformFramebuffer() {
|
|
2497
2549
|
return this._transformFramebuffer;
|
|
2498
2550
|
}
|
|
2499
2551
|
}
|
|
2500
|
-
class
|
|
2552
|
+
class vA {
|
|
2501
2553
|
/**
|
|
2502
2554
|
* Create a new color palette instance.
|
|
2503
2555
|
* @param renderer The renderer instance.
|
|
@@ -2505,9 +2557,9 @@ class mA {
|
|
|
2505
2557
|
*/
|
|
2506
2558
|
constructor(A, r) {
|
|
2507
2559
|
/** The framebuffer used to store the color palette. */
|
|
2508
|
-
|
|
2509
|
-
|
|
2510
|
-
|
|
2560
|
+
E(this, "_framebuffer");
|
|
2561
|
+
E(this, "_renderer");
|
|
2562
|
+
E(this, "_colors");
|
|
2511
2563
|
this._renderer = A, this._colors = r;
|
|
2512
2564
|
const e = Math.max(this._colors.length, 1);
|
|
2513
2565
|
this._framebuffer = this._renderer.createFramebuffer(e, 1), this._updateFramebuffer();
|
|
@@ -2552,32 +2604,33 @@ class mA {
|
|
|
2552
2604
|
return this._framebuffer.texture;
|
|
2553
2605
|
}
|
|
2554
2606
|
}
|
|
2555
|
-
class
|
|
2607
|
+
class tA extends k {
|
|
2556
2608
|
constructor(r, e, t, n = {}) {
|
|
2557
2609
|
super(r, e, t, n);
|
|
2558
|
-
|
|
2559
|
-
this.palette = new
|
|
2610
|
+
E(this, "palette");
|
|
2611
|
+
this.palette = new vA(this.renderer, this.fontManager.getCharacterColors(" .:-=+*%@#"));
|
|
2560
2612
|
}
|
|
2561
2613
|
/**
|
|
2562
|
-
* Sets the characters used for
|
|
2563
|
-
* @param characters The characters to use for
|
|
2614
|
+
* Sets the characters used for mapping.
|
|
2615
|
+
* @param characters The characters to use for mapping, usually ordered from darkest to brightest.
|
|
2564
2616
|
*/
|
|
2565
2617
|
characters(r) {
|
|
2566
|
-
|
|
2618
|
+
F.validate(
|
|
2567
2619
|
this.fontManager.hasAllCharacters(r),
|
|
2568
2620
|
"One or more characters do not exist in the current font.",
|
|
2569
2621
|
{ method: "characters", providedValue: r }
|
|
2570
2622
|
) && (this.options.characters = r, this.palette.setColors(this.fontManager.getCharacterColors(r)));
|
|
2571
2623
|
}
|
|
2572
2624
|
/**
|
|
2573
|
-
* Sets
|
|
2625
|
+
* Sets the color of the characters affected by the converter.
|
|
2626
|
+
* This is only used when `characterColorMode` is set to `'fixed'`.
|
|
2574
2627
|
* @param r Red component (0-255).
|
|
2575
2628
|
* @param g Green component (0-255).
|
|
2576
2629
|
* @param b Blue component (0-255).
|
|
2577
2630
|
* @param a Alpha component (0-255).
|
|
2578
2631
|
*/
|
|
2579
2632
|
characterColor(r, e = r, t = r, n = 255) {
|
|
2580
|
-
|
|
2633
|
+
F.validate(
|
|
2581
2634
|
[r, e, t, n].every((a) => a >= 0 && a <= 255),
|
|
2582
2635
|
"Character color values must be between 0 and 255",
|
|
2583
2636
|
{ method: "characterColor", providedValues: { r, g: e, b: t, a: n } }
|
|
@@ -2590,45 +2643,46 @@ class iA extends rA {
|
|
|
2590
2643
|
* @param mode The color mode to use for characters.
|
|
2591
2644
|
*/
|
|
2592
2645
|
characterColorMode(r) {
|
|
2593
|
-
|
|
2646
|
+
F.validate(
|
|
2594
2647
|
["sampled", "fixed"].includes(r),
|
|
2595
2648
|
"Invalid character color mode. Must be 'sampled' or 'fixed'.",
|
|
2596
2649
|
{ method: "characterColorMode", providedValue: r }
|
|
2597
2650
|
) && (this.options.characterColorMode = r);
|
|
2598
2651
|
}
|
|
2599
2652
|
/**
|
|
2600
|
-
* Sets the cell color
|
|
2653
|
+
* Sets the cell color for all cells affected by the converter.
|
|
2654
|
+
* This is only used when `cellColorMode` is set to `'fixed'`.
|
|
2601
2655
|
* @param r Red component (0-255).
|
|
2602
2656
|
* @param g Green component (0-255).
|
|
2603
2657
|
* @param b Blue component (0-255).
|
|
2604
2658
|
* @param a Alpha component (0-255).
|
|
2605
2659
|
*/
|
|
2606
2660
|
cellColor(r, e = r, t = r, n = 255) {
|
|
2607
|
-
|
|
2661
|
+
F.validate(
|
|
2608
2662
|
[r, e, t, n].every((a) => a >= 0 && a <= 255),
|
|
2609
2663
|
"Cell color values must be between 0 and 255",
|
|
2610
2664
|
{ method: "cellColor", providedValues: { r, g: e, b: t, a: n } }
|
|
2611
|
-
) && (this.options.
|
|
2665
|
+
) && (this.options.cellColor = [r, e, t, n]);
|
|
2612
2666
|
}
|
|
2613
2667
|
/**
|
|
2614
|
-
* Sets the
|
|
2668
|
+
* Sets the cell color mode.
|
|
2615
2669
|
* - `'sampled'`: Uses sampled colors from the source texture.
|
|
2616
|
-
* - `'fixed'`: Uses a fixed color set
|
|
2670
|
+
* - `'fixed'`: Uses a fixed color set via {@link cellColor}.
|
|
2617
2671
|
* @param mode The color mode to use for background cells.
|
|
2618
2672
|
*/
|
|
2619
2673
|
cellColorMode(r) {
|
|
2620
|
-
|
|
2674
|
+
F.validate(
|
|
2621
2675
|
["sampled", "fixed"].includes(r),
|
|
2622
2676
|
"Invalid cell color mode. Must be 'sampled' or 'fixed'.",
|
|
2623
2677
|
{ method: "cellColorMode", providedValue: r }
|
|
2624
|
-
) && (this.options.
|
|
2678
|
+
) && (this.options.cellColorMode = r);
|
|
2625
2679
|
}
|
|
2626
2680
|
/**
|
|
2627
2681
|
* Swaps the character and cell color.
|
|
2628
2682
|
* @param invert If `true`, the character color becomes the cell color and vice versa.
|
|
2629
2683
|
*/
|
|
2630
2684
|
invert(r) {
|
|
2631
|
-
|
|
2685
|
+
F.validate(
|
|
2632
2686
|
typeof r == "boolean" || typeof r == "number" && Number.isInteger(r),
|
|
2633
2687
|
"Invert must be a boolean value or an integer (0 for false, any other number for true).",
|
|
2634
2688
|
{ method: "invert", providedValue: r }
|
|
@@ -2639,18 +2693,22 @@ class iA extends rA {
|
|
|
2639
2693
|
* @param angle The rotation angle in degrees.
|
|
2640
2694
|
*/
|
|
2641
2695
|
rotation(r) {
|
|
2642
|
-
|
|
2696
|
+
if (!F.validate(
|
|
2643
2697
|
typeof r == "number",
|
|
2644
2698
|
"Rotation angle must be a number.",
|
|
2645
2699
|
{ method: "rotation", providedValue: r }
|
|
2646
|
-
)
|
|
2700
|
+
))
|
|
2701
|
+
return;
|
|
2702
|
+
r = r % 360, r < 0 && (r += 360);
|
|
2703
|
+
const e = r * 255 / 360, t = Math.floor(e) / 255, n = Math.round(e - t);
|
|
2704
|
+
this.options.rotation = [t, n, 0, 1];
|
|
2647
2705
|
}
|
|
2648
2706
|
/**
|
|
2649
2707
|
* Flips the characters horizontally.
|
|
2650
2708
|
* @param flip If `true`, characters are flipped horizontally. If `false`, no flip is applied.
|
|
2651
2709
|
*/
|
|
2652
2710
|
flipHorizontally(r) {
|
|
2653
|
-
|
|
2711
|
+
F.validate(
|
|
2654
2712
|
typeof r == "boolean" || typeof r == "number" && Number.isInteger(r),
|
|
2655
2713
|
"Flip horizontally must be a boolean value or an integer (0 for false, any other number for true).",
|
|
2656
2714
|
{ method: "flipHorizontally", providedValue: r }
|
|
@@ -2661,15 +2719,15 @@ class iA extends rA {
|
|
|
2661
2719
|
* @param flip If `true`, characters are flipped vertically. If `false`, no flip is applied.
|
|
2662
2720
|
*/
|
|
2663
2721
|
flipVertically(r) {
|
|
2664
|
-
|
|
2722
|
+
F.validate(
|
|
2665
2723
|
typeof r == "boolean" || typeof r == "number" && Number.isInteger(r),
|
|
2666
2724
|
"Flip vertically must be a boolean value or an integer (0 for false, any other number for true).",
|
|
2667
2725
|
{ method: "flipVertically", providedValue: r }
|
|
2668
2726
|
) && (this.options.flipVertically = !!r);
|
|
2669
2727
|
}
|
|
2670
2728
|
}
|
|
2671
|
-
var wA = "precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;varying vec2 v_uv;void main(){vec2 cellCenter=(floor(v_uv*u_gridCellDimensions)+vec2(0.5))/u_gridCellDimensions;
|
|
2672
|
-
const
|
|
2729
|
+
var wA = "precision lowp float;uniform sampler2D u_sketchTexture;uniform vec2 u_gridCellDimensions;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec2 cellCenter=(floor(v_uv*u_gridCellDimensions)+vec2(0.5))/u_gridCellDimensions;vec4 color=texture2D(u_sketchTexture,cellCenter);float brightness=dot(color.rgb,vec3(0.299,0.587,0.114));float brightnessValue=brightness*255.0;if(brightnessValue>=u_brightnessRange.x&&brightnessValue<=u_brightnessRange.y){gl_FragColor=color;}else{gl_FragColor=vec4(0.0);}}", pA = "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_fillColor;uniform bool u_useFixedColor;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){if(u_useFixedColor){gl_FragColor=u_fillColor;}else{gl_FragColor=sampleColor;}}else{gl_FragColor=vec4(0.0);}}", _A = "precision lowp float;uniform sampler2D u_sampleTexture;uniform bool u_invert;uniform bool u_flipHorizontally;uniform bool u_flipVertically;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){float invertValue=u_invert ? 1.0 : 0.0;float flipHValue=u_flipHorizontally ? 1.0 : 0.0;float flipVValue=u_flipVertically ? 1.0 : 0.0;gl_FragColor=vec4(invertValue,flipHValue,flipVValue,1.0);}else{gl_FragColor=vec4(0.0);}}", fA = "precision lowp float;uniform sampler2D u_sampleTexture;uniform vec4 u_rotation;varying vec2 v_uv;void main(){vec4 sampleColor=texture2D(u_sampleTexture,v_uv);if(sampleColor.a>0.0){gl_FragColor=u_rotation;}else{gl_FragColor=vec4(0.0);}}", xA = "precision lowp float;uniform sampler2D u_colorSampleFramebuffer;uniform sampler2D u_charPaletteTexture;uniform vec2 u_charPaletteSize;uniform vec2 u_brightnessRange;varying vec2 v_uv;void main(){vec4 color=texture2D(u_colorSampleFramebuffer,v_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;vec2 range=u_brightnessRange;if(brightness<range.x||brightness>range.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-range.x)/(range.y-range.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);vec3 charColor=texture2D(u_charPaletteTexture,vec2((idx+0.5)/u_charPaletteSize.x,0.0)).rgb;gl_FragColor=vec4(charColor,1.0);}";
|
|
2730
|
+
const FA = {
|
|
2673
2731
|
/** Enable/disable the renderer */
|
|
2674
2732
|
enabled: !0,
|
|
2675
2733
|
/** Characters used for brightness mapping (from darkest to brightest) */
|
|
@@ -2679,13 +2737,13 @@ const pA = {
|
|
|
2679
2737
|
/** Character color mode */
|
|
2680
2738
|
characterColorMode: "sampled",
|
|
2681
2739
|
/** Cell background color. Only used when `characterColorMode` is set to `fixed` */
|
|
2682
|
-
|
|
2740
|
+
cellColor: [0, 0, 0, 255],
|
|
2683
2741
|
/** Background color mode */
|
|
2684
|
-
|
|
2742
|
+
cellColorMode: "fixed",
|
|
2685
2743
|
/** Swap the cells ASCII character colors with it's cell background colors */
|
|
2686
2744
|
invert: !1,
|
|
2687
2745
|
/** Rotation angle of all characters in the grid in degrees */
|
|
2688
|
-
rotation: 0,
|
|
2746
|
+
rotation: [0, 0, 0, 255],
|
|
2689
2747
|
/** Flip the ASCII characters horizontally */
|
|
2690
2748
|
flipHorizontally: !1,
|
|
2691
2749
|
/** Flip the ASCII characters vertically */
|
|
@@ -2693,20 +2751,26 @@ const pA = {
|
|
|
2693
2751
|
/** Range of brightness values to map to ASCII characters */
|
|
2694
2752
|
brightnessRange: [0, 255]
|
|
2695
2753
|
};
|
|
2696
|
-
class
|
|
2754
|
+
class eA extends tA {
|
|
2755
|
+
/**
|
|
2756
|
+
* Creates a new TextmodeBrightnessConverter instance.
|
|
2757
|
+
* @param renderer Renderer instance for texture creation
|
|
2758
|
+
* @param fontManager Font manager for character extraction and color mapping
|
|
2759
|
+
* @param grid Grid manager for layout and positioning
|
|
2760
|
+
* @ignore
|
|
2761
|
+
*/
|
|
2697
2762
|
constructor(r, e, t) {
|
|
2698
|
-
super(r, e, t, { ...
|
|
2699
|
-
|
|
2700
|
-
|
|
2701
|
-
|
|
2702
|
-
|
|
2763
|
+
super(r, e, t, { ...FA });
|
|
2764
|
+
E(this, "sampleShader");
|
|
2765
|
+
E(this, "colorFillShader");
|
|
2766
|
+
E(this, "charMappingShader");
|
|
2767
|
+
E(this, "transformFillShader");
|
|
2768
|
+
E(this, "rotationFillShader");
|
|
2769
|
+
E(this, "sampleFramebuffer");
|
|
2770
|
+
this.sampleShader = new R(r.context, O, wA), this.colorFillShader = new R(r.context, O, pA), this.transformFillShader = new R(r.context, O, _A), this.rotationFillShader = new R(r.context, O, fA), this.charMappingShader = new R(r.context, O, xA), this.sampleFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
|
|
2703
2771
|
}
|
|
2704
2772
|
convert(r) {
|
|
2705
|
-
this.sampleFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.sampleShader), this.renderer.setUniform("u_sketchTexture", r), 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.
|
|
2706
|
-
this.options.invert ? 255 : 0,
|
|
2707
|
-
this.options.flipHorizontally ? 255 : 0,
|
|
2708
|
-
this.options.flipVertically ? 255 : 0
|
|
2709
|
-
), this._transformFramebuffer.end(), this._rotationFramebuffer.begin(), this.renderer.background(this.options.rotation, this.options.rotation, this.options.rotation), this._rotationFramebuffer.end(), this._characterFramebuffer.begin(), this.renderer.clear(0, 0, 0, 0), this.renderer.shader(this.charMappingShader), this.renderer.setUniform("u_colorSampleFramebuffer", this.sampleFramebuffer.texture), this.renderer.setUniform("u_charPaletteTexture", this.palette.texture), this.renderer.setUniform("u_charPaletteSize", [this.palette.colors.length, 1]), this.renderer.setUniform("u_textureSize", [this.grid.cols, this.grid.rows]), this.renderer.setUniform("u_brightnessRange", this.options.brightnessRange), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._characterFramebuffer.end();
|
|
2773
|
+
this.sampleFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.sampleShader), this.renderer.setUniform("u_sketchTexture", r), this.renderer.setUniform("u_gridCellDimensions", [this.grid.cols, this.grid.rows]), this.renderer.setUniform("u_brightnessRange", this.options.brightnessRange), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this.sampleFramebuffer.end(), this._primaryColorFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.colorFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_fillColor", this.options.characterColor), this.renderer.setUniform("u_useFixedColor", this.options.characterColorMode === "fixed"), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._primaryColorFramebuffer.end(), this._secondaryColorFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.colorFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_fillColor", this.options.cellColor), this.renderer.setUniform("u_useFixedColor", this.options.cellColorMode === "fixed"), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer.end(), this._transformFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.transformFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_invert", this.options.invert), this.renderer.setUniform("u_flipHorizontally", this.options.flipHorizontally), this.renderer.setUniform("u_flipVertically", this.options.flipVertically), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._transformFramebuffer.end(), this._rotationFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.rotationFillShader), this.renderer.setUniform("u_sampleTexture", this.sampleFramebuffer.texture), this.renderer.setUniform("u_rotation", this.options.rotation), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._rotationFramebuffer.end(), this._characterFramebuffer.begin(), this.renderer.clear(0, 0, 0, 0), this.renderer.shader(this.charMappingShader), this.renderer.setUniform("u_colorSampleFramebuffer", this.sampleFramebuffer.texture), this.renderer.setUniform("u_charPaletteTexture", this.palette.texture), this.renderer.setUniform("u_charPaletteSize", [this.palette.colors.length, 1]), this.renderer.setUniform("u_brightnessRange", this.options.brightnessRange), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this._characterFramebuffer.end();
|
|
2710
2774
|
}
|
|
2711
2775
|
resize() {
|
|
2712
2776
|
super.resize(), this.sampleFramebuffer.resize(this.grid.cols, this.grid.rows);
|
|
@@ -2719,86 +2783,182 @@ class nA extends iA {
|
|
|
2719
2783
|
* @param range Array of two numbers `[min, max]`, where `min` is darkest and `max` is brightest.
|
|
2720
2784
|
*/
|
|
2721
2785
|
brightnessRange(r) {
|
|
2722
|
-
|
|
2786
|
+
F.validate(
|
|
2723
2787
|
Array.isArray(r) && r.length === 2 && r.every((e) => typeof e == "number" && e >= 0 && e <= 255),
|
|
2724
2788
|
"Brightness range must be an array of two numbers between 0 and 255.",
|
|
2725
2789
|
{ method: "brightnessRange", providedValue: r }
|
|
2726
2790
|
) && (this.options.brightnessRange = r);
|
|
2727
2791
|
}
|
|
2728
2792
|
}
|
|
2729
|
-
const
|
|
2793
|
+
const OA = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2730
2794
|
__proto__: null,
|
|
2731
|
-
TextmodeBrightnessConverter:
|
|
2732
|
-
TextmodeConverter:
|
|
2733
|
-
TextmodeFeatureConverter:
|
|
2795
|
+
TextmodeBrightnessConverter: eA,
|
|
2796
|
+
TextmodeConverter: k,
|
|
2797
|
+
TextmodeFeatureConverter: tA
|
|
2734
2798
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
2735
|
-
var
|
|
2736
|
-
class
|
|
2799
|
+
var UA = "precision mediump float;uniform sampler2D u_characterTexture;uniform vec2 u_charsetDimensions;uniform sampler2D u_primaryColorTexture;uniform sampler2D u_secondaryColorTexture;uniform sampler2D u_transformTexture;uniform sampler2D u_asciiCharacterTexture;uniform sampler2D u_rotationTexture;uniform sampler2D u_captureTexture;uniform vec2 u_captureDimensions;uniform int u_backgroundMode;uniform vec2 u_gridCellDimensions;uniform vec2 u_gridPixelDimensions;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 adjustedCoord=gl_FragCoord.xy/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,charIndexTexCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,charIndexTexCoord);vec4 transformColor=texture2D(u_transformTexture,charIndexTexCoord);bool isInverted=transformColor.r>0.5;bool flipHorizontal=transformColor.g>0.5;bool flipVertical=transformColor.b>0.5;vec4 encodedIndexVec=texture2D(u_asciiCharacterTexture,charIndexTexCoord);if(encodedIndexVec.a<0.01){gl_FragColor=(u_backgroundMode==0)? vec4(0.0):texture2D(u_captureTexture,gl_FragCoord.xy/u_captureDimensions);return;}int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=int(mod(float(charIndex),u_charsetDimensions.x));int charRow=charIndex/int(u_charsetDimensions.x);vec2 charCoord=vec2(charCol,charRow)/u_charsetDimensions;vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float scaledAngle=rotationColor.r*255.0+rotationColor.g;float rotationAngle=(scaledAngle*360.0/255.0)*0.017453292;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal)fractionalPart.x=-fractionalPart.x;if(flipVertical)fractionalPart.y=-fractionalPart.y;fractionalPart=rotate2D(rotationAngle)*fractionalPart+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 texCoord=charCoord+fractionalPart*cellSize;vec2 cellMax=charCoord+cellSize;if(any(lessThan(texCoord,charCoord))||any(greaterThan(texCoord,cellMax))){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);if(isInverted)charTexel.rgb=1.0-charTexel.rgb;gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}";
|
|
2800
|
+
class bA {
|
|
2801
|
+
/**
|
|
2802
|
+
* Creates an instance of TextmodeConversionPipeline.
|
|
2803
|
+
* @param renderer The renderer to use for the pipeline.
|
|
2804
|
+
* @param font The textmode font to use.
|
|
2805
|
+
* @param grid The textmode grid to use.
|
|
2806
|
+
* @ignore
|
|
2807
|
+
*/
|
|
2737
2808
|
constructor(A, r, e) {
|
|
2738
|
-
|
|
2739
|
-
|
|
2740
|
-
|
|
2741
|
-
|
|
2742
|
-
|
|
2743
|
-
|
|
2744
|
-
|
|
2745
|
-
|
|
2746
|
-
|
|
2747
|
-
|
|
2748
|
-
|
|
2749
|
-
this.renderer = A, this.font = r, this.grid = e, this._asciiShader = this.renderer.createShader(
|
|
2750
|
-
brightness: new
|
|
2751
|
-
|
|
2752
|
-
|
|
2809
|
+
E(this, "renderer");
|
|
2810
|
+
E(this, "font");
|
|
2811
|
+
E(this, "grid");
|
|
2812
|
+
E(this, "converters");
|
|
2813
|
+
E(this, "_resultFramebuffer");
|
|
2814
|
+
E(this, "_asciiShader");
|
|
2815
|
+
E(this, "_characterFramebuffer");
|
|
2816
|
+
E(this, "_primaryColorFramebuffer");
|
|
2817
|
+
E(this, "_secondaryColorFramebuffer");
|
|
2818
|
+
E(this, "_rotationFramebuffer");
|
|
2819
|
+
E(this, "_transformFramebuffer");
|
|
2820
|
+
this.renderer = A, this.font = r, this.grid = e, this._asciiShader = this.renderer.createShader(O, UA), this.converters = [
|
|
2821
|
+
{ name: "brightness", converter: new eA(A, r, e) },
|
|
2822
|
+
{ name: "custom", converter: new k(A, r, e) }
|
|
2823
|
+
], this._characterFramebuffer = this.renderer.createFramebuffer(e.cols, e.rows), this._primaryColorFramebuffer = this.renderer.createFramebuffer(e.cols, e.rows), this._secondaryColorFramebuffer = this.renderer.createFramebuffer(e.cols, e.rows), this._rotationFramebuffer = this.renderer.createFramebuffer(e.cols, e.rows), this._transformFramebuffer = this.renderer.createFramebuffer(e.cols, e.rows), this._resultFramebuffer = this.renderer.createFramebuffer(this.grid.width, this.grid.height);
|
|
2824
|
+
}
|
|
2825
|
+
/**
|
|
2826
|
+
* Performs the conversion process by applying all converters in the pipeline.
|
|
2827
|
+
* @param sourceFramebuffer The source framebuffer to convert.
|
|
2828
|
+
* @ignore
|
|
2829
|
+
*/
|
|
2753
2830
|
render(A) {
|
|
2754
|
-
for (const e of
|
|
2755
|
-
e.
|
|
2831
|
+
for (const e of this.converters) {
|
|
2832
|
+
const t = e.converter;
|
|
2833
|
+
t instanceof tA && t.convert(A);
|
|
2834
|
+
}
|
|
2756
2835
|
const r = (e, t) => {
|
|
2757
2836
|
e.begin(), this.renderer.clear();
|
|
2758
|
-
for (const n of
|
|
2759
|
-
this.renderer.image(t(n), 0, 0);
|
|
2837
|
+
for (const n of this.converters)
|
|
2838
|
+
this.renderer.image(t(n.converter), 0, 0);
|
|
2760
2839
|
e.end();
|
|
2761
2840
|
};
|
|
2762
2841
|
r(this._characterFramebuffer, (e) => e.characterFramebuffer), r(this._primaryColorFramebuffer, (e) => e.primaryColorFramebuffer), r(this._secondaryColorFramebuffer, (e) => e.secondaryColorFramebuffer), r(this._rotationFramebuffer, (e) => e.rotationFramebuffer), r(this._transformFramebuffer, (e) => e.transformFramebuffer), 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._characterFramebuffer.texture), this.renderer.setUniform("u_primaryColorTexture", this._primaryColorFramebuffer.texture), this.renderer.setUniform("u_secondaryColorTexture", this._secondaryColorFramebuffer.texture), this.renderer.setUniform("u_transformTexture", this._transformFramebuffer.texture), this.renderer.setUniform("u_rotationTexture", this._rotationFramebuffer.texture), this.renderer.setUniform("u_captureTexture", A.texture), this.renderer.setUniform("u_backgroundMode", !1), this.renderer.setUniform("u_captureDimensions", [A.width, A.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.rect(0, 0, this._resultFramebuffer.width, this._resultFramebuffer.height), this._resultFramebuffer.end();
|
|
2763
2842
|
}
|
|
2843
|
+
/**
|
|
2844
|
+
* Retrieves a converter by name. Useful for accessing the pre-defined converters in the pipeline.
|
|
2845
|
+
* @param name The name of the converter to retrieve.
|
|
2846
|
+
* @returns The requested {@link TextmodeConverter} instance or `void` if not found.
|
|
2847
|
+
*/
|
|
2764
2848
|
get(A) {
|
|
2765
|
-
if (!
|
|
2849
|
+
if (!F.validate(
|
|
2766
2850
|
typeof A == "string" && A.length > 0,
|
|
2767
2851
|
"Converter name must be a non-empty string.",
|
|
2768
2852
|
{ method: "converter", providedValue: A }
|
|
2769
2853
|
))
|
|
2770
2854
|
return;
|
|
2771
|
-
const r = this.converters
|
|
2772
|
-
if (
|
|
2773
|
-
|
|
2855
|
+
const r = this.converters.find((t) => t.name === A), e = r == null ? void 0 : r.converter;
|
|
2856
|
+
if (F.validate(
|
|
2857
|
+
e instanceof k,
|
|
2774
2858
|
`Converter "${A}" is not a valid TextmodeConverter.`,
|
|
2775
|
-
{ method: "converter", providedValue: A, converterInstance:
|
|
2859
|
+
{ method: "converter", providedValue: A, converterInstance: e }
|
|
2776
2860
|
))
|
|
2777
|
-
return
|
|
2861
|
+
return e;
|
|
2862
|
+
}
|
|
2863
|
+
/**
|
|
2864
|
+
* Adds a new converter to the pipeline.
|
|
2865
|
+
* @param name A unique name for the converter.
|
|
2866
|
+
* @param type The type of converter to add. Can be either "brightness" or "custom".
|
|
2867
|
+
* @returns The newly created {@link TextmodeConverter} instance or `void` if the addition failed.
|
|
2868
|
+
*/
|
|
2869
|
+
add(A, r) {
|
|
2870
|
+
if (!F.validate(
|
|
2871
|
+
typeof A == "string" && A.length > 0,
|
|
2872
|
+
"Converter name must be a non-empty string.",
|
|
2873
|
+
{ method: "add", providedValue: A }
|
|
2874
|
+
) || !F.validate(
|
|
2875
|
+
r === "brightness" || r === "custom",
|
|
2876
|
+
`Converter type must be either "brightness" or "custom". Provided: ${r}`,
|
|
2877
|
+
{ method: "add", providedValue: r }
|
|
2878
|
+
))
|
|
2879
|
+
return;
|
|
2880
|
+
let e;
|
|
2881
|
+
return r === "brightness" ? e = new eA(this.renderer, this.font, this.grid) : e = new k(this.renderer, this.font, this.grid), this.converters.push({ name: A, converter: e }), e;
|
|
2882
|
+
}
|
|
2883
|
+
/**
|
|
2884
|
+
* Removes a converter from the pipeline by name or instance.
|
|
2885
|
+
* @param nameOrInstance The unique name of the converter or the converter instance to remove.
|
|
2886
|
+
* @returns `true` if the converter was successfully removed, `false` otherwise.
|
|
2887
|
+
*/
|
|
2888
|
+
remove(A) {
|
|
2889
|
+
if (!F.validate(
|
|
2890
|
+
typeof A == "string" || A instanceof k,
|
|
2891
|
+
"Parameter must be either a string (converter name) or a TextmodeConverter instance.",
|
|
2892
|
+
{ method: "remove", providedValue: A }
|
|
2893
|
+
))
|
|
2894
|
+
return !1;
|
|
2895
|
+
let r = -1;
|
|
2896
|
+
if (typeof A == "string") {
|
|
2897
|
+
if (!F.validate(
|
|
2898
|
+
A.length > 0,
|
|
2899
|
+
"Converter name must be a non-empty string.",
|
|
2900
|
+
{ method: "remove", providedValue: A }
|
|
2901
|
+
))
|
|
2902
|
+
return !1;
|
|
2903
|
+
r = this.converters.findIndex((e) => e.name === A);
|
|
2904
|
+
} else
|
|
2905
|
+
r = this.converters.findIndex((e) => e.converter === A);
|
|
2906
|
+
return F.validate(
|
|
2907
|
+
r !== -1,
|
|
2908
|
+
typeof A == "string" ? `Converter with name "${A}" not found in pipeline.` : "Converter instance not found in pipeline.",
|
|
2909
|
+
{ method: "remove", providedValue: A, convertersCount: this.converters.length }
|
|
2910
|
+
) ? (this.converters.splice(r, 1), !0) : !1;
|
|
2778
2911
|
}
|
|
2912
|
+
/**
|
|
2913
|
+
* Returns the framebuffer containing the textmode conversion result.
|
|
2914
|
+
*/
|
|
2779
2915
|
get texture() {
|
|
2780
2916
|
return this._resultFramebuffer;
|
|
2781
2917
|
}
|
|
2918
|
+
/**
|
|
2919
|
+
* Resizes all internal framebuffers.
|
|
2920
|
+
* @ignore
|
|
2921
|
+
*/
|
|
2782
2922
|
resize() {
|
|
2783
2923
|
this._resultFramebuffer.resize(this.grid.width, this.grid.height), 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);
|
|
2784
|
-
for (const A of
|
|
2785
|
-
A.resize();
|
|
2924
|
+
for (const A of this.converters)
|
|
2925
|
+
A.converter.resize();
|
|
2926
|
+
}
|
|
2927
|
+
/** Returns the character framebuffer containing the combined result of all converters. @ignore */
|
|
2928
|
+
get characterFramebuffer() {
|
|
2929
|
+
return this._characterFramebuffer;
|
|
2930
|
+
}
|
|
2931
|
+
/** Returns the primary color framebuffer containing the combined result of all converters. @ignore */
|
|
2932
|
+
get primaryColorFramebuffer() {
|
|
2933
|
+
return this._primaryColorFramebuffer;
|
|
2934
|
+
}
|
|
2935
|
+
/** Returns the secondary color framebuffer containing the combined result of all converters. @ignore */
|
|
2936
|
+
get secondaryColorFramebuffer() {
|
|
2937
|
+
return this._secondaryColorFramebuffer;
|
|
2938
|
+
}
|
|
2939
|
+
/** Returns the rotation framebuffer containing the combined result of all converters. @ignore */
|
|
2940
|
+
get rotationFramebuffer() {
|
|
2941
|
+
return this._rotationFramebuffer;
|
|
2942
|
+
}
|
|
2943
|
+
/** Returns the transform framebuffer containing the combined result of all converters. @ignore */
|
|
2944
|
+
get transformFramebuffer() {
|
|
2945
|
+
return this._transformFramebuffer;
|
|
2786
2946
|
}
|
|
2787
2947
|
}
|
|
2788
|
-
class
|
|
2948
|
+
class yA {
|
|
2789
2949
|
/**
|
|
2790
2950
|
* Extracts pixel data from all framebuffers needed for SVG export
|
|
2791
2951
|
* @param pipeline The conversion pipeline containing framebuffers
|
|
2792
2952
|
* @returns Object containing all pixel data arrays
|
|
2793
2953
|
*/
|
|
2794
2954
|
extractFramebufferData(A) {
|
|
2795
|
-
const r = A.get("brightness"), e = r == null ? void 0 : r.characterFramebuffer, t = r == null ? void 0 : r.primaryColorFramebuffer, n = r == null ? void 0 : r.secondaryColorFramebuffer, a = r == null ? void 0 : r.transformFramebuffer,
|
|
2796
|
-
return e == null || e.loadPixels(), t == null || t.loadPixels(), n == null || n.loadPixels(), a == null || a.loadPixels(),
|
|
2955
|
+
const r = A.get("brightness"), e = r == null ? void 0 : r.characterFramebuffer, t = r == null ? void 0 : r.primaryColorFramebuffer, n = r == null ? void 0 : r.secondaryColorFramebuffer, a = r == null ? void 0 : r.transformFramebuffer, s = r == null ? void 0 : r.rotationFramebuffer;
|
|
2956
|
+
return e == null || e.loadPixels(), t == null || t.loadPixels(), n == null || n.loadPixels(), a == null || a.loadPixels(), s == null || s.loadPixels(), {
|
|
2797
2957
|
characterPixels: (e == null ? void 0 : e.pixels) || new Uint8Array(0),
|
|
2798
2958
|
primaryColorPixels: (t == null ? void 0 : t.pixels) || new Uint8Array(0),
|
|
2799
2959
|
secondaryColorPixels: (n == null ? void 0 : n.pixels) || new Uint8Array(0),
|
|
2800
2960
|
transformPixels: (a == null ? void 0 : a.pixels) || new Uint8Array(0),
|
|
2801
|
-
rotationPixels: (
|
|
2961
|
+
rotationPixels: (s == null ? void 0 : s.pixels) || new Uint8Array(0)
|
|
2802
2962
|
};
|
|
2803
2963
|
}
|
|
2804
2964
|
/**
|
|
@@ -2850,12 +3010,12 @@ class fA {
|
|
|
2850
3010
|
* @returns Transform data object
|
|
2851
3011
|
*/
|
|
2852
3012
|
extractTransformData(A, r, e) {
|
|
2853
|
-
const t = A[e], n = A[e + 1], a = A[e + 2],
|
|
3013
|
+
const t = A[e], n = A[e + 1], a = A[e + 2], s = t === 255, B = n === 255, g = a === 255, o = r[e], u = r[e + 1], h = o + u / 255, c = Math.round(h * 360 / 255 * 100) / 100;
|
|
2854
3014
|
return {
|
|
2855
|
-
isInverted:
|
|
2856
|
-
flipHorizontal:
|
|
2857
|
-
flipVertical:
|
|
2858
|
-
rotation:
|
|
3015
|
+
isInverted: s,
|
|
3016
|
+
flipHorizontal: B,
|
|
3017
|
+
flipVertical: g,
|
|
3018
|
+
rotation: c
|
|
2859
3019
|
};
|
|
2860
3020
|
}
|
|
2861
3021
|
/**
|
|
@@ -2884,26 +3044,26 @@ class fA {
|
|
|
2884
3044
|
const t = [];
|
|
2885
3045
|
let n = 0;
|
|
2886
3046
|
for (let a = 0; a < r.rows; a++)
|
|
2887
|
-
for (let
|
|
2888
|
-
const
|
|
2889
|
-
let
|
|
2890
|
-
|
|
2891
|
-
let
|
|
2892
|
-
const
|
|
3047
|
+
for (let s = 0; s < r.cols; s++) {
|
|
3048
|
+
const B = n * 4, g = A.characterPixels[B], o = A.characterPixels[B + 1];
|
|
3049
|
+
let u = g + (o << 8);
|
|
3050
|
+
u >= e.characters.length && (u = e.characters.length - 1);
|
|
3051
|
+
let h = this.pixelsToRGBA(A.primaryColorPixels, B), c = this.pixelsToRGBA(A.secondaryColorPixels, B);
|
|
3052
|
+
const D = this.extractTransformData(
|
|
2893
3053
|
A.transformPixels,
|
|
2894
3054
|
A.rotationPixels,
|
|
2895
|
-
|
|
3055
|
+
B
|
|
2896
3056
|
);
|
|
2897
|
-
if (
|
|
2898
|
-
const C =
|
|
2899
|
-
|
|
3057
|
+
if (D.isInverted) {
|
|
3058
|
+
const C = h;
|
|
3059
|
+
h = c, c = C;
|
|
2900
3060
|
}
|
|
2901
|
-
const l = this.calculateCellPosition(
|
|
3061
|
+
const l = this.calculateCellPosition(s, a, r);
|
|
2902
3062
|
t.push({
|
|
2903
|
-
charIndex:
|
|
2904
|
-
primaryColor:
|
|
2905
|
-
secondaryColor:
|
|
2906
|
-
transform:
|
|
3063
|
+
charIndex: u,
|
|
3064
|
+
primaryColor: h,
|
|
3065
|
+
secondaryColor: c,
|
|
3066
|
+
transform: D,
|
|
2907
3067
|
position: l
|
|
2908
3068
|
}), n++;
|
|
2909
3069
|
}
|
|
@@ -2927,7 +3087,7 @@ class fA {
|
|
|
2927
3087
|
return A.characterPixels.length !== t ? (console.error("Pixel data length does not match grid dimensions"), !1) : !0;
|
|
2928
3088
|
}
|
|
2929
3089
|
}
|
|
2930
|
-
class
|
|
3090
|
+
class SA {
|
|
2931
3091
|
/**
|
|
2932
3092
|
* Gets the glyph index for a given Unicode code point in a Typr.js font
|
|
2933
3093
|
* @param fontData The Typr.js font data
|
|
@@ -2946,9 +3106,9 @@ class FA {
|
|
|
2946
3106
|
{
|
|
2947
3107
|
const a = t.idRangeOffset[n] / 2 + (r - t.startCount[n]) - (t.startCount.length - n);
|
|
2948
3108
|
if (a >= 0 && a < t.glyphIdArray.length) {
|
|
2949
|
-
const
|
|
2950
|
-
if (
|
|
2951
|
-
return
|
|
3109
|
+
const s = t.glyphIdArray[a];
|
|
3110
|
+
if (s !== 0)
|
|
3111
|
+
return s + t.idDelta[n] & 65535;
|
|
2952
3112
|
}
|
|
2953
3113
|
}
|
|
2954
3114
|
}
|
|
@@ -2998,37 +3158,37 @@ class FA {
|
|
|
2998
3158
|
*/
|
|
2999
3159
|
glyphToSVGPath(A, r, e, t) {
|
|
3000
3160
|
if (!A || !A.xs) return "";
|
|
3001
|
-
const { xs: n, ys: a, endPts:
|
|
3002
|
-
if (!n || !a || !
|
|
3003
|
-
let
|
|
3004
|
-
for (let
|
|
3005
|
-
const
|
|
3006
|
-
if (!(
|
|
3007
|
-
if (
|
|
3008
|
-
const
|
|
3009
|
-
|
|
3010
|
-
let l =
|
|
3011
|
-
for (; l <=
|
|
3012
|
-
if ((
|
|
3013
|
-
const
|
|
3014
|
-
|
|
3161
|
+
const { xs: n, ys: a, endPts: s, flags: B } = A;
|
|
3162
|
+
if (!n || !a || !s || !B) return "";
|
|
3163
|
+
let g = "", o = 0;
|
|
3164
|
+
for (let u = 0; u < s.length; u++) {
|
|
3165
|
+
const h = s[u];
|
|
3166
|
+
if (!(h < o)) {
|
|
3167
|
+
if (h >= o) {
|
|
3168
|
+
const c = r + n[o] * t, D = e - a[o] * t;
|
|
3169
|
+
g += `M${c.toFixed(2)},${D.toFixed(2)}`;
|
|
3170
|
+
let l = o + 1;
|
|
3171
|
+
for (; l <= h; )
|
|
3172
|
+
if ((B[l] & 1) !== 0) {
|
|
3173
|
+
const P = r + n[l] * t, m = e - a[l] * t;
|
|
3174
|
+
g += `L${P.toFixed(2)},${m.toFixed(2)}`, l++;
|
|
3015
3175
|
} else {
|
|
3016
|
-
const
|
|
3017
|
-
let
|
|
3018
|
-
if ((
|
|
3019
|
-
const p = r + n[
|
|
3020
|
-
|
|
3176
|
+
const P = r + n[l] * t, m = e - a[l] * t;
|
|
3177
|
+
let I = l + 1 > h ? o : l + 1;
|
|
3178
|
+
if ((B[I] & 1) !== 0) {
|
|
3179
|
+
const p = r + n[I] * t, w = e - a[I] * t;
|
|
3180
|
+
g += `Q${P.toFixed(2)},${m.toFixed(2)} ${p.toFixed(2)},${w.toFixed(2)}`, l = I + 1;
|
|
3021
3181
|
} else {
|
|
3022
|
-
const p = r + n[
|
|
3023
|
-
|
|
3182
|
+
const p = r + n[I] * t, w = e - a[I] * t, d = (P + p) / 2, f = (m + w) / 2;
|
|
3183
|
+
g += `Q${P.toFixed(2)},${m.toFixed(2)} ${d.toFixed(2)},${f.toFixed(2)}`, l = I;
|
|
3024
3184
|
}
|
|
3025
3185
|
}
|
|
3026
|
-
|
|
3186
|
+
g += "Z";
|
|
3027
3187
|
}
|
|
3028
|
-
|
|
3188
|
+
o = h + 1;
|
|
3029
3189
|
}
|
|
3030
3190
|
}
|
|
3031
|
-
return
|
|
3191
|
+
return g;
|
|
3032
3192
|
}
|
|
3033
3193
|
/**
|
|
3034
3194
|
* Generates an SVG path for a character glyph
|
|
@@ -3041,16 +3201,16 @@ class FA {
|
|
|
3041
3201
|
*/
|
|
3042
3202
|
generateCharacterPath(A, r, e, t, n) {
|
|
3043
3203
|
try {
|
|
3044
|
-
const a = A.codePointAt(0) || 0,
|
|
3045
|
-
if (
|
|
3204
|
+
const a = A.codePointAt(0) || 0, s = this.getGlyphIndex(r, a);
|
|
3205
|
+
if (s === 0)
|
|
3046
3206
|
return this.createEmptyPath();
|
|
3047
|
-
let
|
|
3207
|
+
let B = null;
|
|
3048
3208
|
try {
|
|
3049
|
-
r.glyf && r.glyf[
|
|
3050
|
-
} catch (
|
|
3051
|
-
console.warn(`Failed to parse glyph ${
|
|
3209
|
+
r.glyf && r.glyf[s] !== null ? B = r.glyf[s] : Q && Q.T && Q.T.glyf && Q.T.glyf._parseGlyf && (B = Q.T.glyf._parseGlyf(r, s), r.glyf && B && (r.glyf[s] = B));
|
|
3210
|
+
} catch (g) {
|
|
3211
|
+
console.warn(`Failed to parse glyph ${s}:`, g);
|
|
3052
3212
|
}
|
|
3053
|
-
return
|
|
3213
|
+
return B ? this.createGlyphPath(r, B, e, t, n) : this.createEmptyPath();
|
|
3054
3214
|
} catch (a) {
|
|
3055
3215
|
return console.warn(`Failed to generate path for character "${A}":`, a), this.createEmptyPath();
|
|
3056
3216
|
}
|
|
@@ -3067,19 +3227,19 @@ class FA {
|
|
|
3067
3227
|
* @param advanceWidth Character advance width
|
|
3068
3228
|
* @returns SVG path data string or null if generation fails
|
|
3069
3229
|
*/
|
|
3070
|
-
generatePositionedCharacterPath(A, r, e, t, n, a,
|
|
3230
|
+
generatePositionedCharacterPath(A, r, e, t, n, a, s, B) {
|
|
3071
3231
|
try {
|
|
3072
|
-
const
|
|
3073
|
-
return this.generateCharacterPath(A, r,
|
|
3074
|
-
} catch (
|
|
3075
|
-
return console.warn(`Failed to generate positioned character path for "${A}":`,
|
|
3232
|
+
const g = s / r.head.unitsPerEm, o = B * g, u = e + (n - o) / 2, h = t + (a + s * 0.7) / 2;
|
|
3233
|
+
return this.generateCharacterPath(A, r, u, h, s).toSVG() || null;
|
|
3234
|
+
} catch (g) {
|
|
3235
|
+
return console.warn(`Failed to generate positioned character path for "${A}":`, g), null;
|
|
3076
3236
|
}
|
|
3077
3237
|
}
|
|
3078
3238
|
}
|
|
3079
|
-
class
|
|
3239
|
+
class TA {
|
|
3080
3240
|
constructor() {
|
|
3081
|
-
|
|
3082
|
-
this.pathGenerator = new
|
|
3241
|
+
E(this, "pathGenerator");
|
|
3242
|
+
this.pathGenerator = new SA();
|
|
3083
3243
|
}
|
|
3084
3244
|
/**
|
|
3085
3245
|
* Generates the SVG header with metadata
|
|
@@ -3131,12 +3291,12 @@ class UA {
|
|
|
3131
3291
|
* @returns Transform attribute string or empty string
|
|
3132
3292
|
*/
|
|
3133
3293
|
generateTransformAttribute(A, r) {
|
|
3134
|
-
const { transform: e, position: t } = A, n = t.cellX + r.cellWidth / 2, a = t.cellY + r.cellHeight / 2,
|
|
3294
|
+
const { transform: e, position: t } = A, n = t.cellX + r.cellWidth / 2, a = t.cellY + r.cellHeight / 2, s = [];
|
|
3135
3295
|
if (e.flipHorizontal || e.flipVertical) {
|
|
3136
|
-
const
|
|
3137
|
-
|
|
3296
|
+
const B = e.flipHorizontal ? -1 : 1, g = e.flipVertical ? -1 : 1;
|
|
3297
|
+
s.push(`translate(${n} ${a})`), s.push(`scale(${B} ${g})`), s.push(`translate(${-n} ${-a})`);
|
|
3138
3298
|
}
|
|
3139
|
-
return e.rotation &&
|
|
3299
|
+
return e.rotation && s.push(`rotate(${e.rotation} ${n} ${a})`), s.length ? ` transform="${s.join(" ")}"` : "";
|
|
3140
3300
|
}
|
|
3141
3301
|
/**
|
|
3142
3302
|
* Generates background rectangle for a cell
|
|
@@ -3177,10 +3337,10 @@ class UA {
|
|
|
3177
3337
|
);
|
|
3178
3338
|
if (!a)
|
|
3179
3339
|
return "";
|
|
3180
|
-
const
|
|
3340
|
+
const s = this.rgbaToColorString(A.primaryColor);
|
|
3181
3341
|
return t.drawMode === "stroke" ? `
|
|
3182
|
-
<path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${a}" stroke="${
|
|
3183
|
-
<path d="${a}" fill="${
|
|
3342
|
+
<path id="${`path-${A.charIndex}-${A.position.cellX}-${A.position.cellY}`.replace(/\./g, "-")}" d="${a}" stroke="${s}" stroke-width="${t.strokeWidth}" fill="none" />` : `
|
|
3343
|
+
<path d="${a}" fill="${s}" />`;
|
|
3184
3344
|
}
|
|
3185
3345
|
/**
|
|
3186
3346
|
* Generates complete SVG content for a single cell
|
|
@@ -3193,10 +3353,10 @@ class UA {
|
|
|
3193
3353
|
generateCellContent(A, r, e, t) {
|
|
3194
3354
|
let n = "";
|
|
3195
3355
|
n += this.generateCellBackground(A, r, t);
|
|
3196
|
-
const a = this.generateTransformAttribute(A, r),
|
|
3197
|
-
return
|
|
3198
|
-
<g${a}>`, n +=
|
|
3199
|
-
</g>`) : n +=
|
|
3356
|
+
const a = this.generateTransformAttribute(A, r), s = this.generateCharacterPath(A, r, e, t);
|
|
3357
|
+
return s && (a ? (n += `
|
|
3358
|
+
<g${a}>`, n += s, n += `
|
|
3359
|
+
</g>`) : n += s), n;
|
|
3200
3360
|
}
|
|
3201
3361
|
/**
|
|
3202
3362
|
* Generates the complete SVG content from cell data
|
|
@@ -3224,7 +3384,7 @@ class UA {
|
|
|
3224
3384
|
`).replace(/[ \t]+$/gm, "");
|
|
3225
3385
|
}
|
|
3226
3386
|
}
|
|
3227
|
-
class
|
|
3387
|
+
class GA {
|
|
3228
3388
|
/**
|
|
3229
3389
|
* Generates a default filename for SVG export
|
|
3230
3390
|
* @param prefix Optional prefix for the filename
|
|
@@ -3310,12 +3470,12 @@ class bA {
|
|
|
3310
3470
|
return !A || typeof A != "string" ? (console.error("SVG content is empty or not a string"), !1) : !A.includes("<svg") || !A.includes("</svg>") ? (console.error("SVG content does not contain valid SVG tags"), !1) : (A.startsWith("<?xml") || console.warn("SVG content missing XML declaration"), !0);
|
|
3311
3471
|
}
|
|
3312
3472
|
}
|
|
3313
|
-
class
|
|
3473
|
+
class MA {
|
|
3314
3474
|
constructor() {
|
|
3315
|
-
|
|
3316
|
-
|
|
3317
|
-
|
|
3318
|
-
this.dataExtractor = new
|
|
3475
|
+
E(this, "dataExtractor");
|
|
3476
|
+
E(this, "contentGenerator");
|
|
3477
|
+
E(this, "fileHandler");
|
|
3478
|
+
this.dataExtractor = new yA(), this.contentGenerator = new TA(), this.fileHandler = new GA();
|
|
3319
3479
|
}
|
|
3320
3480
|
/**
|
|
3321
3481
|
* Applies default values to SVG export options
|
|
@@ -3340,17 +3500,17 @@ class yA {
|
|
|
3340
3500
|
const e = this.applyDefaultOptions(r), t = this.dataExtractor.extractFramebufferData(A.pipeline), n = this.dataExtractor.extractGridInfo(A.grid), a = this.dataExtractor.extractFontInfo(A.font);
|
|
3341
3501
|
if (!this.dataExtractor.validateExportData(t, n, a))
|
|
3342
3502
|
throw new Error("Invalid data extracted from textmodifier");
|
|
3343
|
-
const
|
|
3503
|
+
const s = this.dataExtractor.extractSVGCellData(
|
|
3344
3504
|
t,
|
|
3345
3505
|
n,
|
|
3346
3506
|
a
|
|
3347
|
-
),
|
|
3348
|
-
|
|
3507
|
+
), B = this.contentGenerator.generateSVGContent(
|
|
3508
|
+
s,
|
|
3349
3509
|
n,
|
|
3350
3510
|
a,
|
|
3351
3511
|
e
|
|
3352
3512
|
);
|
|
3353
|
-
return this.contentGenerator.optimizeSVGContent(
|
|
3513
|
+
return this.contentGenerator.optimizeSVGContent(B);
|
|
3354
3514
|
}
|
|
3355
3515
|
/**
|
|
3356
3516
|
* Exports SVG content to a downloadable file
|
|
@@ -3369,28 +3529,29 @@ class yA {
|
|
|
3369
3529
|
}
|
|
3370
3530
|
}
|
|
3371
3531
|
}
|
|
3372
|
-
class
|
|
3532
|
+
class iA {
|
|
3373
3533
|
constructor(A, r = {}) {
|
|
3374
3534
|
/** The canvas element to capture content from */
|
|
3375
|
-
|
|
3535
|
+
E(this, "captureCanvas");
|
|
3376
3536
|
/** Our WebGL overlay canvas manager */
|
|
3377
|
-
|
|
3537
|
+
E(this, "textmodeCanvas");
|
|
3378
3538
|
/** Core WebGL renderer */
|
|
3379
|
-
|
|
3380
|
-
|
|
3381
|
-
|
|
3382
|
-
|
|
3383
|
-
|
|
3539
|
+
E(this, "renderer");
|
|
3540
|
+
E(this, "canvasFramebuffer");
|
|
3541
|
+
E(this, "_font");
|
|
3542
|
+
E(this, "_grid");
|
|
3543
|
+
E(this, "resizeObserver");
|
|
3384
3544
|
// Auto-rendering properties
|
|
3385
|
-
|
|
3386
|
-
|
|
3387
|
-
|
|
3388
|
-
|
|
3389
|
-
|
|
3390
|
-
|
|
3391
|
-
|
|
3392
|
-
|
|
3393
|
-
this
|
|
3545
|
+
E(this, "_mode");
|
|
3546
|
+
E(this, "_frameRateLimit");
|
|
3547
|
+
E(this, "animationFrameId", null);
|
|
3548
|
+
E(this, "lastFrameTime", 0);
|
|
3549
|
+
E(this, "frameInterval");
|
|
3550
|
+
E(this, "_frameRate", 0);
|
|
3551
|
+
E(this, "lastRenderTime", 0);
|
|
3552
|
+
E(this, "_frameCount", 0);
|
|
3553
|
+
E(this, "_pipeline");
|
|
3554
|
+
this.captureCanvas = A, this.textmodeCanvas = new IA(A), this._mode = r.renderMode ?? "auto", this._frameRateLimit = r.frameRate ?? 120, this.frameInterval = 1e3 / this._frameRateLimit, this.renderer = new lA(this.textmodeCanvas.getWebGLContext()), this.canvasFramebuffer = this.renderer.createFramebuffer(this.textmodeCanvas.width, this.textmodeCanvas.height), this._font = new PA(this.renderer, r.fontSize ?? 16);
|
|
3394
3555
|
}
|
|
3395
3556
|
/**
|
|
3396
3557
|
* Static factory method for creating and initializing a Textmodifier instance.
|
|
@@ -3399,10 +3560,10 @@ class eA {
|
|
|
3399
3560
|
* @ignore
|
|
3400
3561
|
*/
|
|
3401
3562
|
static async create(A, r = {}) {
|
|
3402
|
-
const e = new
|
|
3563
|
+
const e = new iA(A, r);
|
|
3403
3564
|
await e._font.initialize();
|
|
3404
3565
|
const t = e._font.maxGlyphDimensions;
|
|
3405
|
-
return e._grid = new
|
|
3566
|
+
return e._grid = new mA(e.captureCanvas, t.width, t.height), e._pipeline = new bA(e.renderer, e._font, e._grid), e.setupEventListeners(), e.startAutoRendering(), e;
|
|
3406
3567
|
}
|
|
3407
3568
|
setupEventListeners() {
|
|
3408
3569
|
window.addEventListener("resize", this.resize.bind(this)), window.ResizeObserver && (this.resizeObserver = new ResizeObserver(() => {
|
|
@@ -3410,15 +3571,47 @@ class eA {
|
|
|
3410
3571
|
}), this.resizeObserver.observe(this.captureCanvas));
|
|
3411
3572
|
}
|
|
3412
3573
|
/**
|
|
3413
|
-
* Export the current
|
|
3574
|
+
* Export the current textmode rendering to an SVG file.
|
|
3414
3575
|
* @param options Options for SVG export
|
|
3576
|
+
*
|
|
3577
|
+
* @example
|
|
3578
|
+
* ```javascript
|
|
3579
|
+
* // Fetch a canvas element to apply textmode rendering to
|
|
3580
|
+
* const canvas = document.querySelector('canvas#myCanvas');
|
|
3581
|
+
*
|
|
3582
|
+
* // Create a Textmodifier instance
|
|
3583
|
+
* const textmodifier = await textmode.create(canvas, {renderMode: 'manual'});
|
|
3584
|
+
*
|
|
3585
|
+
* // Render a single frame
|
|
3586
|
+
* textmodifier.render();
|
|
3587
|
+
*
|
|
3588
|
+
* // Export the current rendering to an SVG file
|
|
3589
|
+
* textmodifier.saveSVG({
|
|
3590
|
+
* filename: 'my_textmode_rendering',
|
|
3591
|
+
* });
|
|
3592
|
+
* ```
|
|
3415
3593
|
*/
|
|
3416
3594
|
saveSVG(A = {}) {
|
|
3417
|
-
new
|
|
3595
|
+
new MA().saveSVG(this, A);
|
|
3418
3596
|
}
|
|
3419
3597
|
/**
|
|
3420
3598
|
* Update the font used for rendering.
|
|
3421
3599
|
* @param fontUrl The URL of the font to load.
|
|
3600
|
+
*
|
|
3601
|
+
* @example
|
|
3602
|
+
* ```javascript
|
|
3603
|
+
* // Fetch a canvas element to apply textmode rendering to
|
|
3604
|
+
* const canvas = document.querySelector('canvas#myCanvas');
|
|
3605
|
+
*
|
|
3606
|
+
* // Create a Textmodifier instance
|
|
3607
|
+
* const textmodifier = await textmode.create(canvas);
|
|
3608
|
+
*
|
|
3609
|
+
* // Load a custom font from a URL
|
|
3610
|
+
* textmodifier.loadFont('https://example.com/fonts/myfont.ttf');
|
|
3611
|
+
*
|
|
3612
|
+
* // Local font example
|
|
3613
|
+
* // textmodifier.loadFont('./fonts/myfont.ttf');
|
|
3614
|
+
* ```
|
|
3422
3615
|
*/
|
|
3423
3616
|
async loadFont(A) {
|
|
3424
3617
|
return this._font.loadFont(A).then(() => {
|
|
@@ -3431,9 +3624,41 @@ class eA {
|
|
|
3431
3624
|
*
|
|
3432
3625
|
* **Note:** In `'auto'` mode, this is called automatically.
|
|
3433
3626
|
* In `'manual'` mode, you need to call this method when you want to update the textmode rendering.
|
|
3627
|
+
*
|
|
3628
|
+
* @example
|
|
3629
|
+
* ```javascript
|
|
3630
|
+
* // p5.js example
|
|
3631
|
+
*
|
|
3632
|
+
* let textmodifier;
|
|
3633
|
+
*
|
|
3634
|
+
* // p5.js setup function
|
|
3635
|
+
* async function setup() {
|
|
3636
|
+
*
|
|
3637
|
+
* // Create a p5.js canvas
|
|
3638
|
+
* const canvas = createCanvas(800, 600);
|
|
3639
|
+
*
|
|
3640
|
+
* // Create a Textmodifier instance
|
|
3641
|
+
* textmodifier = await textmode.create(canvas.elt);
|
|
3642
|
+
*
|
|
3643
|
+
* // Update the rendering mode to 'manual'
|
|
3644
|
+
* textmodifier.renderMode('manual');
|
|
3645
|
+
* }
|
|
3646
|
+
*
|
|
3647
|
+
* // p5.js draw function
|
|
3648
|
+
* function draw() {
|
|
3649
|
+
*
|
|
3650
|
+
* // Draw something on the p5.js canvas
|
|
3651
|
+
* background(220);
|
|
3652
|
+
* fill(255, 0, 0);
|
|
3653
|
+
* rect(50, 50, 100, 100);
|
|
3654
|
+
*
|
|
3655
|
+
* // Apply textmode rendering
|
|
3656
|
+
* textmodifier.render();
|
|
3657
|
+
* }
|
|
3658
|
+
* ```
|
|
3434
3659
|
*/
|
|
3435
3660
|
render() {
|
|
3436
|
-
this.measureFrameRate(), this.canvasFramebuffer.update(this.captureCanvas), this._pipeline.render(this.canvasFramebuffer), this.renderer.background(0, 0, 0, 1), this.renderer.image(this._pipeline.texture, this._grid.offsetX, this._grid.offsetY, this._pipeline.texture.width, this._pipeline.texture.height);
|
|
3661
|
+
this.measureFrameRate(), this._frameCount++, this.canvasFramebuffer.update(this.captureCanvas), this._pipeline.render(this.canvasFramebuffer), this.renderer.background(0, 0, 0, 1), this.renderer.image(this._pipeline.texture, this._grid.offsetX, this._grid.offsetY, this._pipeline.texture.width, this._pipeline.texture.height), this.renderer.reset();
|
|
3437
3662
|
}
|
|
3438
3663
|
resize() {
|
|
3439
3664
|
this.textmodeCanvas.resize(), this.canvasFramebuffer.resize(this.textmodeCanvas.width, this.textmodeCanvas.height), this._grid.resize(), this._pipeline.resize(), this.renderer.resetViewport(), this._mode !== "manual" && this.render();
|
|
@@ -3466,7 +3691,28 @@ class eA {
|
|
|
3466
3691
|
this.animationFrameId && (cancelAnimationFrame(this.animationFrameId), this.animationFrameId = null);
|
|
3467
3692
|
}
|
|
3468
3693
|
/**
|
|
3469
|
-
*
|
|
3694
|
+
* Update the rendering mode.
|
|
3695
|
+
*
|
|
3696
|
+
* If called without arguments, returns the current mode.
|
|
3697
|
+
*
|
|
3698
|
+
* - `'manual'`: Requires manual [render](#render) calls
|
|
3699
|
+
* - `'auto'`: Automatically renders using [requestAnimationFrame](https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame)
|
|
3700
|
+
*
|
|
3701
|
+
* @param mode The new rendering mode to set.
|
|
3702
|
+
*
|
|
3703
|
+
* @example
|
|
3704
|
+
* ```javascript
|
|
3705
|
+
* // Fetch a canvas element to apply textmode rendering to
|
|
3706
|
+
* const canvas = document.querySelector('canvas#myCanvas');
|
|
3707
|
+
*
|
|
3708
|
+
* // Create a Textmodifier instance
|
|
3709
|
+
* const textmodifier = await textmode.create(canvas);
|
|
3710
|
+
*
|
|
3711
|
+
* // Update the rendering mode to 'manual'
|
|
3712
|
+
* textmodifier.renderMode('manual');
|
|
3713
|
+
*
|
|
3714
|
+
* // Now you need to call textmodifier.render() manually in your animation loop
|
|
3715
|
+
* ```
|
|
3470
3716
|
*/
|
|
3471
3717
|
renderMode(A) {
|
|
3472
3718
|
if (this._mode !== A) {
|
|
@@ -3478,12 +3724,42 @@ class eA {
|
|
|
3478
3724
|
/**
|
|
3479
3725
|
* Set the maximum frame rate for auto rendering. If called without arguments, returns the current measured frame rate.
|
|
3480
3726
|
* @param fps The maximum frames per second for auto rendering.
|
|
3727
|
+
*
|
|
3728
|
+
* @example
|
|
3729
|
+
* ```javascript
|
|
3730
|
+
* // Fetch a canvas element to apply textmode rendering to
|
|
3731
|
+
* const canvas = document.querySelector('canvas#myCanvas');
|
|
3732
|
+
*
|
|
3733
|
+
* // Create a Textmodifier instance
|
|
3734
|
+
* const textmodifier = await textmode.create(canvas);
|
|
3735
|
+
*
|
|
3736
|
+
* // Set the maximum frame rate to 60 FPS
|
|
3737
|
+
* textmodifier.frameRate(60);
|
|
3738
|
+
* ```
|
|
3481
3739
|
*/
|
|
3482
3740
|
frameRate(A) {
|
|
3483
3741
|
if (A === void 0)
|
|
3484
3742
|
return this._frameRate;
|
|
3485
3743
|
this._frameRateLimit = A, this.frameInterval = 1e3 / A;
|
|
3486
3744
|
}
|
|
3745
|
+
/**
|
|
3746
|
+
* Get or set the font size used for rendering.
|
|
3747
|
+
* If called without arguments, returns the current font size.
|
|
3748
|
+
* @param size The font size to set. If undefined, returns the current font size.
|
|
3749
|
+
* @returns `void` if setting the size, or the current font size if called without arguments.
|
|
3750
|
+
*
|
|
3751
|
+
* @example
|
|
3752
|
+
* ```javascript
|
|
3753
|
+
* // Fetch a canvas element to apply textmode rendering to
|
|
3754
|
+
* const canvas = document.querySelector('canvas#myCanvas');
|
|
3755
|
+
*
|
|
3756
|
+
* // Create a Textmodifier instance
|
|
3757
|
+
* const textmodifier = await textmode.create(canvas);
|
|
3758
|
+
*
|
|
3759
|
+
* // Set the font size to 24
|
|
3760
|
+
* textmodifier.fontSize(24);
|
|
3761
|
+
* ```
|
|
3762
|
+
*/
|
|
3487
3763
|
fontSize(A) {
|
|
3488
3764
|
if (A === void 0)
|
|
3489
3765
|
return this._font.fontSize;
|
|
@@ -3493,6 +3769,22 @@ class eA {
|
|
|
3493
3769
|
* Get a specific converter by name.
|
|
3494
3770
|
* @param name The name of the converter to retrieve.
|
|
3495
3771
|
* @returns The requested `TextmodeConverter` instance.
|
|
3772
|
+
*
|
|
3773
|
+
* @example
|
|
3774
|
+
* ```javascript
|
|
3775
|
+
* // Fetch a canvas element to apply textmode rendering to
|
|
3776
|
+
* const canvas = document.querySelector('canvas#myCanvas');
|
|
3777
|
+
*
|
|
3778
|
+
* // Create a Textmodifier instance
|
|
3779
|
+
* const textmodifier = await textmode.create(canvas);
|
|
3780
|
+
*
|
|
3781
|
+
* // Get the pre-defined brightness converter from the pipeline
|
|
3782
|
+
* const brightnessConverter = textmodifier.converter('brightness');
|
|
3783
|
+
*
|
|
3784
|
+
* // Update properties of the brightness converter
|
|
3785
|
+
* brightnessConverter.invert(true);
|
|
3786
|
+
* brightnessConverter.characters(" .,;:*");
|
|
3787
|
+
* ```
|
|
3496
3788
|
*/
|
|
3497
3789
|
converter(A) {
|
|
3498
3790
|
return this._pipeline.get(A);
|
|
@@ -3513,45 +3805,69 @@ class eA {
|
|
|
3513
3805
|
get pipeline() {
|
|
3514
3806
|
return this._pipeline;
|
|
3515
3807
|
}
|
|
3808
|
+
/** Get the current frame count. */
|
|
3809
|
+
get frameCount() {
|
|
3810
|
+
return this._frameCount;
|
|
3811
|
+
}
|
|
3516
3812
|
}
|
|
3517
|
-
class
|
|
3813
|
+
class nA {
|
|
3518
3814
|
/**
|
|
3519
3815
|
* Create a {@link Textmodifier} instance to apply textmode rendering to a given canvas.
|
|
3520
3816
|
* @param canvas The HTML canvas element to capture content from.
|
|
3521
3817
|
* @param opts Optional configuration options for the Textmodifier instance.
|
|
3522
3818
|
* @returns A Promise that resolves to a Textmodifier instance.
|
|
3819
|
+
*
|
|
3820
|
+
* @example
|
|
3821
|
+
* ```javascript
|
|
3822
|
+
* // Fetch a canvas element to apply textmode rendering to
|
|
3823
|
+
* const canvas = document.querySelector('canvas#myCanvas');
|
|
3824
|
+
*
|
|
3825
|
+
* // Create a Textmodifier instance with default options
|
|
3826
|
+
* const textmodifier = await textmode.create(canvas);
|
|
3827
|
+
* ```
|
|
3523
3828
|
*/
|
|
3524
3829
|
static async create(A, r = {}) {
|
|
3525
|
-
return
|
|
3830
|
+
return iA.create(A, r);
|
|
3526
3831
|
}
|
|
3527
3832
|
/**
|
|
3528
3833
|
* Set the global error handling level for the library. This applies to all `Textmodifier` instances.
|
|
3529
3834
|
* @param level The error handling level to set.
|
|
3835
|
+
*
|
|
3836
|
+
* @example
|
|
3837
|
+
* ```javascript
|
|
3838
|
+
* // Set error level to WARNING
|
|
3839
|
+
* textmode.setErrorLevel(TextmodeErrorLevel.WARNING);
|
|
3840
|
+
* ```
|
|
3530
3841
|
*/
|
|
3531
3842
|
static setErrorLevel(A) {
|
|
3532
|
-
|
|
3843
|
+
F.setGlobalLevel(A);
|
|
3533
3844
|
}
|
|
3534
3845
|
/**
|
|
3535
|
-
*
|
|
3846
|
+
* Returns the current version of the `textmode.js` library.
|
|
3847
|
+
*
|
|
3848
|
+
* @example
|
|
3849
|
+
* ```javascript
|
|
3850
|
+
* console.log(textmode.version); // "1.0.0"
|
|
3851
|
+
* ```
|
|
3536
3852
|
*/
|
|
3537
3853
|
static get version() {
|
|
3538
|
-
return "0.0
|
|
3854
|
+
return "0.1.0";
|
|
3539
3855
|
}
|
|
3540
3856
|
constructor() {
|
|
3541
3857
|
throw new Error("Textmode is a static class and cannot be instantiated.");
|
|
3542
3858
|
}
|
|
3543
3859
|
}
|
|
3544
|
-
const
|
|
3860
|
+
const YA = nA.create, VA = nA.setErrorLevel, zA = nA.version;
|
|
3545
3861
|
export {
|
|
3546
|
-
yA as SVGExporter,
|
|
3547
3862
|
IA as TextmodeCanvas,
|
|
3548
|
-
|
|
3863
|
+
bA as TextmodeConversionPipeline,
|
|
3864
|
+
OA as TextmodeConverters,
|
|
3549
3865
|
gA as TextmodeErrorLevel,
|
|
3550
|
-
|
|
3551
|
-
|
|
3552
|
-
|
|
3553
|
-
|
|
3554
|
-
|
|
3555
|
-
|
|
3556
|
-
|
|
3866
|
+
PA as TextmodeFont,
|
|
3867
|
+
mA as TextmodeGrid,
|
|
3868
|
+
iA as Textmodifier,
|
|
3869
|
+
YA as create,
|
|
3870
|
+
VA as setErrorLevel,
|
|
3871
|
+
nA as textmode,
|
|
3872
|
+
zA as version
|
|
3557
3873
|
};
|