textmode.js 0.0.6 → 0.0.8

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.
@@ -1,9 +1,9 @@
1
1
  var F = Object.defineProperty;
2
- var y = (s, e, A) => e in s ? F(s, e, { enumerable: !0, configurable: !0, writable: !0, value: A }) : s[e] = A;
3
- var Q = (s, e, A) => y(s, typeof e != "symbol" ? e + "" : e, A);
4
- class l extends Error {
5
- constructor(A, t, r = {}) {
6
- const B = l.createFormattedMessage(A, r);
2
+ var y = (s, A, e) => A in s ? F(s, A, { enumerable: !0, configurable: !0, writable: !0, value: e }) : s[A] = e;
3
+ var Q = (s, A, e) => y(s, typeof A != "symbol" ? A + "" : A, e);
4
+ class D extends Error {
5
+ constructor(e, t, r = {}) {
6
+ const B = D.createFormattedMessage(e, r);
7
7
  super(B);
8
8
  Q(this, "originalError");
9
9
  Q(this, "context");
@@ -12,14 +12,14 @@ class l extends Error {
12
12
  /**
13
13
  * Create a formatted error message that includes context
14
14
  */
15
- static createFormattedMessage(A, t) {
16
- let r = A;
15
+ static createFormattedMessage(e, t) {
16
+ let r = e;
17
17
  if (t && Object.keys(t).length > 0) {
18
18
  r += `
19
19
 
20
20
  📋 Context:`;
21
21
  for (const [B, E] of Object.entries(t)) {
22
- const g = l.formatValue(E);
22
+ const g = D.formatValue(E);
23
23
  r += `
24
24
  - ${B}: ${g}`;
25
25
  }
@@ -32,22 +32,22 @@ class l extends Error {
32
32
  /**
33
33
  * Format values for better display in error messages
34
34
  */
35
- static formatValue(A) {
36
- if (A === null) return "null";
37
- if (A === void 0) return "undefined";
38
- if (typeof A == "string") return `"${A}"`;
39
- if (typeof A == "number" || typeof A == "boolean") return String(A);
40
- if (Array.isArray(A))
41
- return A.length === 0 ? "[]" : A.length <= 5 ? `[${A.map((t) => l.formatValue(t)).join(", ")}]` : `[${A.slice(0, 3).map((t) => l.formatValue(t)).join(", ")}, ... +${A.length - 3} more]`;
42
- if (typeof A == "object") {
43
- const t = Object.keys(A);
44
- return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((E) => `${E}: ${l.formatValue(A[E])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((B) => `${B}: ${l.formatValue(A[B])}`).join(", ")}, ... +${t.length - 2} more }`;
35
+ static formatValue(e) {
36
+ if (e === null) return "null";
37
+ if (e === void 0) return "undefined";
38
+ if (typeof e == "string") return `"${e}"`;
39
+ if (typeof e == "number" || typeof e == "boolean") return String(e);
40
+ if (Array.isArray(e))
41
+ return e.length === 0 ? "[]" : e.length <= 5 ? `[${e.map((t) => D.formatValue(t)).join(", ")}]` : `[${e.slice(0, 3).map((t) => D.formatValue(t)).join(", ")}, ... +${e.length - 3} more]`;
42
+ if (typeof e == "object") {
43
+ const t = Object.keys(e);
44
+ return t.length === 0 ? "{}" : t.length <= 3 ? `{ ${t.map((E) => `${E}: ${D.formatValue(e[E])}`).join(", ")} }` : `{ ${t.slice(0, 2).map((B) => `${B}: ${D.formatValue(e[B])}`).join(", ")}, ... +${t.length - 2} more }`;
45
45
  }
46
- return String(A);
46
+ return String(e);
47
47
  }
48
48
  }
49
- var T = /* @__PURE__ */ ((s) => (s[s.SILENT = 0] = "SILENT", s[s.WARNING = 1] = "WARNING", s[s.ERROR = 2] = "ERROR", s[s.THROW = 3] = "THROW", s))(T || {});
50
- const D = class D {
49
+ var M = /* @__PURE__ */ ((s) => (s[s.SILENT = 0] = "SILENT", s[s.WARNING = 1] = "WARNING", s[s.ERROR = 2] = "ERROR", s[s.THROW = 3] = "THROW", s))(M || {});
50
+ const c = class c {
51
51
  constructor() {
52
52
  Q(this, "_options", {
53
53
  globalLevel: 3
@@ -55,13 +55,13 @@ const D = class D {
55
55
  });
56
56
  }
57
57
  static getInstance() {
58
- return D._instance || (D._instance = new D()), D._instance;
58
+ return c._instance || (c._instance = new c()), c._instance;
59
59
  }
60
60
  /**
61
61
  * Handle an error based on the configured settings
62
62
  * @returns true if execution should continue, false if error was handled
63
63
  */
64
- _handle(e, A, t) {
64
+ _handle(A, e, t) {
65
65
  const r = "[textmode.js]";
66
66
  switch (this._options.globalLevel) {
67
67
  case 0:
@@ -71,15 +71,15 @@ const D = class D {
71
71
  return console.group(
72
72
  `%c${r} Oops! (╯°□°)╯︵ Something went wrong in your code.`,
73
73
  "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;"
74
- ), console.warn(l.createFormattedMessage(e, A)), console.groupEnd(), !1;
74
+ ), console.warn(D.createFormattedMessage(A, e)), console.groupEnd(), !1;
75
75
  case 2:
76
76
  return console.group(
77
77
  `%c${r} Oops! (╯°□°)╯︵ Something went wrong in your code.`,
78
78
  "color: #f44336; font-weight: bold; background: #ffebee; padding: 2px 6px; border-radius: 3px;"
79
- ), console.error(l.createFormattedMessage(e, A)), console.groupEnd(), !1;
79
+ ), console.error(D.createFormattedMessage(A, e)), console.groupEnd(), !1;
80
80
  case 3:
81
81
  default:
82
- const B = new l(e, t, A);
82
+ const B = new D(A, t, e);
83
83
  throw console.group(
84
84
  `%c${r} Oops! (╯°□°)╯︵ Something went wrong in your code.`,
85
85
  "color: #d32f2f; font-weight: bold; background: #ffcdd2; padding: 2px 6px; border-radius: 3px;"
@@ -93,133 +93,87 @@ const D = class D {
93
93
  * @param context Additional context for debugging
94
94
  * @returns true if validation passed, false if validation failed and was handled
95
95
  */
96
- validate(e, A, t) {
97
- return e ? !0 : (this._handle(A, t), !1);
96
+ validate(A, e, t) {
97
+ return A ? !0 : (this._handle(e, t), !1);
98
98
  }
99
99
  /**
100
100
  * Set global error level
101
101
  */
102
- setGlobalLevel(e) {
103
- this._options.globalLevel = e;
102
+ setGlobalLevel(A) {
103
+ this._options.globalLevel = A;
104
104
  }
105
105
  };
106
- Q(D, "_instance", null);
107
- let I = D;
106
+ Q(c, "_instance", null);
107
+ let I = c;
108
108
  const C = I.getInstance();
109
- class M {
110
- constructor(e, A, t, r = {}) {
109
+ class T {
110
+ constructor(A, e, t = e, r = {}) {
111
111
  Q(this, "gl");
112
112
  Q(this, "_framebuffer");
113
113
  Q(this, "_texture");
114
114
  Q(this, "_width");
115
115
  Q(this, "_height");
116
116
  Q(this, "options");
117
- Q(this, "previousFramebuffer", null);
118
- Q(this, "previousViewport", [0, 0, 0, 0]);
119
- this.gl = e, this._width = A, this._height = t, this.options = {
117
+ Q(this, "previousState", null);
118
+ this.gl = A, this._width = e, this._height = t, this.options = {
120
119
  filter: "nearest",
121
120
  wrap: "clamp",
122
121
  format: "rgba",
123
122
  type: "unsigned_byte",
124
123
  ...r
125
- }, this._texture = this.createTexture(), this._framebuffer = this.gl.createFramebuffer(), this.attachTexture();
124
+ }, this._texture = this.createTexture(), this._framebuffer = A.createFramebuffer(), this.attachTexture();
126
125
  }
127
126
  createTexture() {
128
- const e = this.gl.createTexture();
129
- this.gl.bindTexture(this.gl.TEXTURE_2D, e);
130
- const A = this.options.filter === "linear" ? this.gl.LINEAR : this.gl.NEAREST, t = this.options.wrap === "repeat" ? this.gl.REPEAT : this.gl.CLAMP_TO_EDGE;
131
- this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, A), this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, A), this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, t), this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, t);
132
- const r = this.options.format === "rgb" ? this.gl.RGB : this.gl.RGBA, B = this.options.type === "float" ? this.gl.FLOAT : this.gl.UNSIGNED_BYTE;
133
- return this.gl.texImage2D(
134
- this.gl.TEXTURE_2D,
135
- 0,
136
- r,
137
- this._width,
138
- this._height,
139
- 0,
140
- r,
141
- B,
142
- null
143
- ), this.gl.bindTexture(this.gl.TEXTURE_2D, null), e;
127
+ const { gl: A } = this, e = A.createTexture();
128
+ A.bindTexture(A.TEXTURE_2D, e);
129
+ const t = this.options.filter === "linear" ? A.LINEAR : A.NEAREST, r = this.options.wrap === "repeat" ? A.REPEAT : A.CLAMP_TO_EDGE;
130
+ return A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MIN_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_MAG_FILTER, t), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_S, r), A.texParameteri(A.TEXTURE_2D, A.TEXTURE_WRAP_T, r), this.updateTextureSize(), e;
131
+ }
132
+ updateTextureSize() {
133
+ const { gl: A } = this, e = this.options.format === "rgb" ? A.RGB : A.RGBA, t = this.options.type === "float" ? A.FLOAT : A.UNSIGNED_BYTE;
134
+ A.texImage2D(A.TEXTURE_2D, 0, e, this._width, this._height, 0, e, t, null);
144
135
  }
145
136
  attachTexture() {
146
- this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this._framebuffer), this.gl.framebufferTexture2D(
147
- this.gl.FRAMEBUFFER,
148
- this.gl.COLOR_ATTACHMENT0,
149
- this.gl.TEXTURE_2D,
150
- this._texture,
151
- 0
152
- ), this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);
137
+ const { gl: A } = this;
138
+ A.bindFramebuffer(A.FRAMEBUFFER, this._framebuffer), A.framebufferTexture2D(A.FRAMEBUFFER, A.COLOR_ATTACHMENT0, A.TEXTURE_2D, this._texture, 0), A.bindFramebuffer(A.FRAMEBUFFER, null);
153
139
  }
154
140
  /**
155
141
  * Update the framebuffer texture with canvas content
156
142
  */
157
- update(e) {
158
- this.gl.bindTexture(this.gl.TEXTURE_2D, this._texture), this.gl.texImage2D(
159
- this.gl.TEXTURE_2D,
160
- 0,
161
- this.gl.RGBA,
162
- this.gl.RGBA,
163
- this.gl.UNSIGNED_BYTE,
164
- e
165
- ), this.gl.bindTexture(this.gl.TEXTURE_2D, null);
143
+ update(A) {
144
+ const { gl: e } = this;
145
+ e.bindTexture(e.TEXTURE_2D, this._texture), e.texImage2D(e.TEXTURE_2D, 0, e.RGBA, e.RGBA, e.UNSIGNED_BYTE, A), e.bindTexture(e.TEXTURE_2D, null);
166
146
  }
167
147
  /**
168
148
  * Update the framebuffer texture with pixel data
169
149
  */
170
- updateWithPixelData(e, A, t) {
171
- this.gl.bindTexture(this.gl.TEXTURE_2D, this._texture), this.gl.texImage2D(
172
- this.gl.TEXTURE_2D,
173
- 0,
174
- this.gl.RGBA,
175
- A,
176
- t,
177
- 0,
178
- this.gl.RGBA,
179
- this.gl.UNSIGNED_BYTE,
180
- e
181
- ), this.gl.bindTexture(this.gl.TEXTURE_2D, null);
150
+ updatePixels(A, e, t) {
151
+ const { gl: r } = this;
152
+ r.bindTexture(r.TEXTURE_2D, this._texture), r.texImage2D(r.TEXTURE_2D, 0, r.RGBA, e, t, 0, r.RGBA, r.UNSIGNED_BYTE, A), r.bindTexture(r.TEXTURE_2D, null);
182
153
  }
183
154
  /**
184
155
  * Resize the framebuffer
185
156
  */
186
- resize(e, A) {
187
- this._width = e, this._height = A, this.gl.bindTexture(this.gl.TEXTURE_2D, this._texture);
188
- const t = this.options.format === "rgb" ? this.gl.RGB : this.gl.RGBA, r = this.options.type === "float" ? this.gl.FLOAT : this.gl.UNSIGNED_BYTE;
189
- this.gl.texImage2D(
190
- this.gl.TEXTURE_2D,
191
- 0,
192
- t,
193
- this._width,
194
- this._height,
195
- 0,
196
- t,
197
- r,
198
- null
199
- );
157
+ resize(A, e) {
158
+ this._width = A, this._height = e, this.gl.bindTexture(this.gl.TEXTURE_2D, this._texture), this.updateTextureSize(), this.gl.bindTexture(this.gl.TEXTURE_2D, null);
200
159
  }
201
160
  /**
202
- * Begin rendering to this framebuffer (p5.js-like API)
161
+ * Begin rendering to this framebuffer
203
162
  */
204
163
  begin() {
205
- this.previousFramebuffer = this.gl.getParameter(this.gl.FRAMEBUFFER_BINDING), this.previousViewport = this.gl.getParameter(this.gl.VIEWPORT), this.bind();
164
+ const { gl: A } = this;
165
+ this.previousState = {
166
+ framebuffer: A.getParameter(A.FRAMEBUFFER_BINDING),
167
+ viewport: A.getParameter(A.VIEWPORT)
168
+ }, A.bindFramebuffer(A.FRAMEBUFFER, this._framebuffer), A.viewport(0, 0, this._width, this._height);
206
169
  }
207
170
  /**
208
- * End rendering to this framebuffer and restore previous state (p5.js-like API)
171
+ * End rendering to this framebuffer and restore previous state
209
172
  */
210
173
  end() {
211
- this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this.previousFramebuffer), this.gl.viewport(
212
- this.previousViewport[0],
213
- this.previousViewport[1],
214
- this.previousViewport[2],
215
- this.previousViewport[3]
216
- );
217
- }
218
- /**
219
- * Bind this framebuffer for rendering
220
- */
221
- bind() {
222
- this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, this._framebuffer), this.gl.viewport(0, 0, this._width, this._height);
174
+ if (!this.previousState) return;
175
+ const { gl: A } = this;
176
+ A.bindFramebuffer(A.FRAMEBUFFER, this.previousState.framebuffer), A.viewport(...this.previousState.viewport), this.previousState = null;
223
177
  }
224
178
  // Getters
225
179
  get framebuffer() {
@@ -236,20 +190,20 @@ class M {
236
190
  }
237
191
  }
238
192
  class G {
239
- constructor(e, A, t, r, B) {
193
+ constructor(A, e, t, r, B) {
240
194
  /** The WebGL rendering context */
241
195
  Q(this, "gl");
242
196
  /** The buffer containing the rectangle vertices */
243
197
  Q(this, "buffer");
244
198
  /** The number of vertices in the rectangle */
245
199
  Q(this, "numVertices");
246
- this.gl = e;
247
- const E = e.getParameter(e.VIEWPORT), g = E[2], i = E[3];
200
+ this.gl = A;
201
+ const E = A.getParameter(A.VIEWPORT), g = E[2], i = E[3];
248
202
  if (g <= 0 || i <= 0)
249
203
  throw new Error(`Invalid viewport dimensions: ${g}x${i}`);
250
- const o = A / g * 2 - 1, n = 1 - t / i * 2, a = (A + r) / g * 2 - 1, h = 1 - (t + B) / i * 2;
204
+ const o = e / g * 2 - 1, n = 1 - t / i * 2, a = (e + r) / g * 2 - 1, h = 1 - (t + B) / i * 2;
251
205
  (o < -1 || o > 1 || a < -1 || a > 1 || n < -1 || n > 1 || h < -1 || h > 1) && console.warn(`Rectangle coordinates outside NDC range: x1=${o}, y1=${n}, x2=${a}, y2=${h}`);
252
- const P = e.getParameter(e.FRAMEBUFFER_BINDING) !== null ? new Float32Array([
206
+ const u = A.getParameter(A.FRAMEBUFFER_BINDING) !== null ? new Float32Array([
253
207
  o,
254
208
  h,
255
209
  0,
@@ -312,49 +266,49 @@ class G {
312
266
  0
313
267
  // top-right
314
268
  ]);
315
- this.numVertices = 6, this.buffer = e.createBuffer(), e.bindBuffer(e.ARRAY_BUFFER, this.buffer), e.bufferData(e.ARRAY_BUFFER, P, e.STATIC_DRAW);
269
+ this.numVertices = 6, this.buffer = A.createBuffer(), A.bindBuffer(A.ARRAY_BUFFER, this.buffer), A.bufferData(A.ARRAY_BUFFER, u, A.STATIC_DRAW);
316
270
  }
317
271
  /**
318
272
  * Draw the quad using attribute locations from the current shader
319
273
  */
320
274
  draw() {
321
275
  this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.buffer);
322
- let e = 0, A = 1;
323
- this.gl.enableVertexAttribArray(e), this.gl.vertexAttribPointer(e, 2, this.gl.FLOAT, !1, 16, 0), this.gl.enableVertexAttribArray(A), this.gl.vertexAttribPointer(A, 2, this.gl.FLOAT, !1, 16, 8), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.numVertices), this.gl.disableVertexAttribArray(e), this.gl.disableVertexAttribArray(A);
276
+ let A = 0, e = 1;
277
+ this.gl.enableVertexAttribArray(A), this.gl.vertexAttribPointer(A, 2, this.gl.FLOAT, !1, 16, 0), this.gl.enableVertexAttribArray(e), this.gl.vertexAttribPointer(e, 2, this.gl.FLOAT, !1, 16, 8), this.gl.drawArrays(this.gl.TRIANGLES, 0, this.numVertices), this.gl.disableVertexAttribArray(A), this.gl.disableVertexAttribArray(e);
324
278
  }
325
279
  }
326
- class c {
327
- constructor(e, A, t) {
280
+ class l {
281
+ constructor(A, e, t) {
328
282
  Q(this, "gl");
329
283
  Q(this, "program");
330
284
  Q(this, "uniformLocations", /* @__PURE__ */ new Map());
331
285
  Q(this, "attributeLocations", /* @__PURE__ */ new Map());
332
286
  Q(this, "textureUnitCounter", 0);
333
- this.gl = e, this.program = this.createProgram(A, t), this.cacheLocations();
287
+ this.gl = A, this.program = this.createProgram(e, t), this.cacheLocations();
334
288
  }
335
- createProgram(e, A) {
336
- const t = this.createShader(this.gl.VERTEX_SHADER, e), r = this.createShader(this.gl.FRAGMENT_SHADER, A), B = this.gl.createProgram();
289
+ createProgram(A, e) {
290
+ const t = this.createShader(this.gl.VERTEX_SHADER, A), r = this.createShader(this.gl.FRAGMENT_SHADER, e), B = this.gl.createProgram();
337
291
  if (this.gl.attachShader(B, t), this.gl.attachShader(B, r), this.gl.linkProgram(B), !this.gl.getProgramParameter(B, this.gl.LINK_STATUS)) {
338
292
  const E = this.gl.getProgramInfoLog(B);
339
293
  throw new Error(`Shader program link error: ${E}`);
340
294
  }
341
295
  return this.gl.deleteShader(t), this.gl.deleteShader(r), B;
342
296
  }
343
- createShader(e, A) {
344
- const t = this.gl.createShader(e);
345
- return this.gl.shaderSource(t, A), this.gl.compileShader(t), t;
297
+ createShader(A, e) {
298
+ const t = this.gl.createShader(A);
299
+ return this.gl.shaderSource(t, e), this.gl.compileShader(t), t;
346
300
  }
347
301
  cacheLocations() {
348
- const e = this.gl.getProgramParameter(this.program, this.gl.ACTIVE_UNIFORMS);
349
- for (let t = 0; t < e; t++) {
302
+ const A = this.gl.getProgramParameter(this.program, this.gl.ACTIVE_UNIFORMS);
303
+ for (let t = 0; t < A; t++) {
350
304
  const r = this.gl.getActiveUniform(this.program, t);
351
305
  if (r) {
352
306
  const B = this.gl.getUniformLocation(this.program, r.name);
353
307
  B && this.uniformLocations.set(r.name, B);
354
308
  }
355
309
  }
356
- const A = this.gl.getProgramParameter(this.program, this.gl.ACTIVE_ATTRIBUTES);
357
- for (let t = 0; t < A; t++) {
310
+ const e = this.gl.getProgramParameter(this.program, this.gl.ACTIVE_ATTRIBUTES);
311
+ for (let t = 0; t < e; t++) {
358
312
  const r = this.gl.getActiveAttrib(this.program, t);
359
313
  if (r) {
360
314
  const B = this.gl.getAttribLocation(this.program, r.name);
@@ -371,34 +325,34 @@ class c {
371
325
  /**
372
326
  * Set a single uniform value with automatic texture unit management
373
327
  */
374
- setUniform(e, A) {
375
- const t = this.uniformLocations.get(e);
376
- if (typeof A == "number")
377
- this.gl.uniform1f(t, A);
378
- else if (typeof A == "boolean")
379
- this.gl.uniform1i(t, A ? 1 : 0);
380
- else if (Array.isArray(A))
381
- switch (A.length) {
328
+ setUniform(A, e) {
329
+ const t = this.uniformLocations.get(A);
330
+ if (typeof e == "number")
331
+ this.gl.uniform1f(t, e);
332
+ else if (typeof e == "boolean")
333
+ this.gl.uniform1i(t, e ? 1 : 0);
334
+ else if (Array.isArray(e))
335
+ switch (e.length) {
382
336
  case 2:
383
- this.gl.uniform2f(t, A[0], A[1]);
337
+ this.gl.uniform2f(t, e[0], e[1]);
384
338
  break;
385
339
  case 3:
386
- this.gl.uniform3f(t, A[0], A[1], A[2]);
340
+ this.gl.uniform3f(t, e[0], e[1], e[2]);
387
341
  break;
388
342
  case 4:
389
- this.gl.uniform4f(t, A[0], A[1], A[2], A[3]);
343
+ this.gl.uniform4f(t, e[0], e[1], e[2], e[3]);
390
344
  break;
391
345
  default:
392
- console.warn(`Unsupported array length ${A.length} for uniform '${e}'`);
346
+ console.warn(`Unsupported array length ${e.length} for uniform '${A}'`);
393
347
  }
394
- else if (A instanceof WebGLTexture) {
348
+ else if (e instanceof WebGLTexture) {
395
349
  const r = this.getNextTextureUnit();
396
- this.gl.uniform1i(t, r), this.gl.activeTexture(this.gl.TEXTURE0 + r), this.gl.bindTexture(this.gl.TEXTURE_2D, A);
397
- } else if (A && typeof A == "object" && "texture" in A) {
350
+ this.gl.uniform1i(t, r), this.gl.activeTexture(this.gl.TEXTURE0 + r), this.gl.bindTexture(this.gl.TEXTURE_2D, e);
351
+ } else if (e && typeof e == "object" && "texture" in e) {
398
352
  const r = this.getNextTextureUnit();
399
- this.gl.uniform1i(t, r), this.gl.activeTexture(this.gl.TEXTURE0 + r), this.gl.bindTexture(this.gl.TEXTURE_2D, A.texture);
353
+ this.gl.uniform1i(t, r), this.gl.activeTexture(this.gl.TEXTURE0 + r), this.gl.bindTexture(this.gl.TEXTURE_2D, e.texture);
400
354
  } else
401
- console.warn(`Unsupported uniform type for '${e}':`, typeof A);
355
+ console.warn(`Unsupported uniform type for '${A}':`, typeof e);
402
356
  }
403
357
  getNextTextureUnit() {
404
358
  return this.textureUnitCounter++;
@@ -410,55 +364,52 @@ class c {
410
364
  this.textureUnitCounter = 0;
411
365
  }
412
366
  }
413
- var u = "attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 v_uv;void main(){v_uv=a_texCoord;gl_Position=vec4(a_position,0.0,1.0);}", U = "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}";
367
+ var P = "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);}", U = "precision lowp float;uniform sampler2D u_texture;varying vec2 v_uv;void main(){gl_FragColor=texture2D(u_texture,v_uv);}";
414
368
  class R {
415
- constructor(e) {
369
+ constructor(A) {
416
370
  Q(this, "gl");
417
371
  Q(this, "imageShader");
418
372
  Q(this, "currentShader", null);
419
- this.gl = e, this.imageShader = new c(this.gl, u, U), this.setupDefaultState();
420
- }
421
- setupDefaultState() {
422
- this.gl.enable(this.gl.BLEND), this.gl.blendFunc(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA), this.gl.disable(this.gl.DEPTH_TEST), this.gl.disable(this.gl.CULL_FACE), this.gl.disable(this.gl.STENCIL_TEST), this.gl.disable(this.gl.SCISSOR_TEST), this.gl.disable(this.gl.DITHER), this.gl.depthFunc(this.gl.ALWAYS), this.gl.depthMask(!1);
373
+ this.gl = A, this.imageShader = new l(this.gl, P, U), this.gl.enable(this.gl.BLEND), this.gl.blendFunc(this.gl.ONE, this.gl.ONE_MINUS_SRC_ALPHA);
423
374
  }
424
375
  /**
425
376
  * Set the current shader (p5.js-like API)
426
377
  */
427
- shader(e) {
428
- this.currentShader = e, e.use();
378
+ shader(A) {
379
+ this.currentShader = A, A.use();
429
380
  }
430
- createShader(e, A) {
431
- return new c(this.gl, e, A);
381
+ createShader(A, e) {
382
+ return new l(this.gl, A, e);
432
383
  }
433
384
  /**
434
385
  * Set a uniform value for the current shader (p5.js-like API)
435
386
  */
436
- setUniform(e, A) {
437
- this.currentShader.setUniform(e, A);
387
+ setUniform(A, e) {
388
+ this.currentShader.setUniform(A, e);
438
389
  }
439
390
  /**
440
391
  * Draw a rectangle with the current shader (p5.js-like API)
441
392
  */
442
- rect(e, A, t, r) {
443
- new G(this.gl, e, A, t, r).draw();
393
+ rect(A, e, t, r) {
394
+ new G(this.gl, A, e, t, r).draw();
444
395
  }
445
396
  /**
446
397
  * Create a new framebuffer
447
398
  */
448
- createFramebuffer(e, A, t = {}) {
449
- return new M(this.gl, e, A, t);
399
+ createFramebuffer(A, e, t = {}) {
400
+ return new T(this.gl, A, e, t);
450
401
  }
451
402
  /**
452
403
  * Fill the current framebuffer with a solid color (p5.js-like API)
453
404
  */
454
- background(e, A = e, t = e, r = 1) {
455
- this.clear(e / 255, A / 255, t / 255, r);
405
+ background(A, e = A, t = A, r = 1) {
406
+ this.clear(A / 255, e / 255, t / 255, r);
456
407
  }
457
408
  /**
458
409
  * Clear the current framebuffer
459
410
  */
460
- clear(e = 0, A = 0, t = 0, r = 0) {
461
- this.gl.clearColor(e, A, t, r), this.gl.clear(this.gl.COLOR_BUFFER_BIT);
411
+ clear(A = 0, e = 0, t = 0, r = 0) {
412
+ this.gl.clearColor(A, e, t, r), this.gl.clear(this.gl.COLOR_BUFFER_BIT);
462
413
  }
463
414
  /**
464
415
  * Ensure viewport matches canvas dimensions
@@ -475,8 +426,8 @@ class R {
475
426
  /**
476
427
  * Render a framebuffer at a specific position with optional scaling
477
428
  */
478
- image(e, A, t, r, B) {
479
- this.shader(this.imageShader), this.setUniform("u_texture", e.texture), this.rect(A, t, r ?? e.width, B ?? e.height);
429
+ image(A, e, t, r, B) {
430
+ this.shader(this.imageShader), this.setUniform("u_texture", A.texture), this.rect(e, t, r ?? A.width, B ?? A.height);
480
431
  }
481
432
  }
482
433
  class Y {
@@ -487,30 +438,30 @@ class Y {
487
438
  /**
488
439
  * Parse a font buffer and return font data
489
440
  */
490
- parse(e) {
491
- const A = new Uint8Array(e);
441
+ parse(A) {
442
+ const e = new Uint8Array(A);
492
443
  let t = 0;
493
- if (this.bin.readASCII(A, t, 4) === "ttcf") {
494
- const B = this.bin.readUint(A, t + 8);
444
+ if (this.bin.readASCII(e, t, 4) === "ttcf") {
445
+ const B = this.bin.readUint(e, t + 8);
495
446
  t += 12;
496
447
  const E = [];
497
448
  for (let g = 0; g < B; g++) {
498
- const i = this.bin.readUint(A, t);
499
- t += 4, E.push(this.readFont(A, g, i));
449
+ const i = this.bin.readUint(e, t);
450
+ t += 4, E.push(this.readFont(e, g, i));
500
451
  }
501
452
  return E;
502
453
  } else
503
- return [this.readFont(A, 0, 0)];
454
+ return [this.readFont(e, 0, 0)];
504
455
  }
505
456
  /**
506
457
  * Find a table in the font data
507
458
  */
508
- findTable(e, A, t) {
509
- const r = this.bin.readUshort(e, t + 4);
459
+ findTable(A, e, t) {
460
+ const r = this.bin.readUshort(A, t + 4);
510
461
  let B = t + 12;
511
462
  for (let E = 0; E < r; E++) {
512
- const g = this.bin.readASCII(e, B, 4), i = this.bin.readUint(e, B + 8), o = this.bin.readUint(e, B + 12);
513
- if (g === A)
463
+ const g = this.bin.readASCII(A, B, 4), i = this.bin.readUint(A, B + 8), o = this.bin.readUint(A, B + 12);
464
+ if (g === e)
514
465
  return [i, o];
515
466
  B += 16;
516
467
  }
@@ -519,18 +470,18 @@ class Y {
519
470
  /**
520
471
  * Read font data from buffer
521
472
  */
522
- readFont(e, A, t) {
473
+ readFont(A, e, t) {
523
474
  const r = {
524
- _data: e,
525
- _index: A,
475
+ _data: A,
476
+ _index: e,
526
477
  _offset: t
527
478
  }, B = /* @__PURE__ */ new Map(), E = ["cmap", "head", "hhea", "maxp", "hmtx"];
528
479
  for (const g of E) {
529
- const i = this.findTable(e, g, t);
480
+ const i = this.findTable(A, g, t);
530
481
  if (i) {
531
482
  const [o, n] = i;
532
483
  let a = B.get(o);
533
- a || (a = this.parseTable(g, e, o, n, r), B.set(o, a)), r[g] = a;
484
+ a || (a = this.parseTable(g, A, o, n, r), B.set(o, a)), r[g] = a;
534
485
  }
535
486
  }
536
487
  return r;
@@ -538,27 +489,27 @@ class Y {
538
489
  /**
539
490
  * Parse a specific table
540
491
  */
541
- parseTable(e, A, t, r, B) {
542
- switch (e) {
492
+ parseTable(A, e, t, r, B) {
493
+ switch (A) {
543
494
  case "cmap":
544
- return this.parseCmapTable(A, t, r);
495
+ return this.parseCmapTable(e, t, r);
545
496
  case "head":
546
- return this.parseHeadTable(A, t, r);
497
+ return this.parseHeadTable(e, t, r);
547
498
  case "hhea":
548
- return this.parseHheaTable(A, t, r);
499
+ return this.parseHheaTable(e, t, r);
549
500
  case "hmtx":
550
- return this.parseHmtxTable(A, t, r, B);
501
+ return this.parseHmtxTable(e, t, r, B);
551
502
  case "maxp":
552
- return this.parseMaxpTable(A, t, r);
503
+ return this.parseMaxpTable(e, t, r);
553
504
  default:
554
- throw new Error(`Unknown table: ${e}`);
505
+ throw new Error(`Unknown table: ${A}`);
555
506
  }
556
507
  }
557
508
  /**
558
509
  * Parse cmap table
559
510
  */
560
- parseCmapTable(e, A, t) {
561
- const r = new Uint8Array(e.buffer, A, t);
511
+ parseCmapTable(A, e, t) {
512
+ const r = new Uint8Array(A.buffer, e, t);
562
513
  let B = 0;
563
514
  B += 2;
564
515
  const E = this.bin.readUshort(r, B);
@@ -566,7 +517,7 @@ class Y {
566
517
  const g = {
567
518
  tables: [],
568
519
  ids: {},
569
- off: A
520
+ off: e
570
521
  }, i = /* @__PURE__ */ new Set();
571
522
  for (let o = 0; o < E; o++) {
572
523
  const n = this.bin.readUshort(r, B);
@@ -575,29 +526,29 @@ class Y {
575
526
  B += 2;
576
527
  const h = this.bin.readUint(r, B);
577
528
  B += 4;
578
- const P = `p${n}e${a}`;
529
+ const u = `p${n}e${a}`;
579
530
  if (!i.has(h)) {
580
531
  const x = this.bin.readUshort(r, h), v = this.parseCmapSubtable(r, h, x);
581
532
  g.tables.push(v), i.add(h);
582
533
  }
583
- g.ids[P] = Array.from(i).indexOf(h);
534
+ g.ids[u] = Array.from(i).indexOf(h);
584
535
  }
585
536
  return g;
586
537
  }
587
538
  /**
588
539
  * Parse cmap subtable based on format
589
540
  */
590
- parseCmapSubtable(e, A, t) {
541
+ parseCmapSubtable(A, e, t) {
591
542
  const r = { format: t };
592
543
  switch (t) {
593
544
  case 0:
594
- return this.parseCmapFormat0(e, A, r);
545
+ return this.parseCmapFormat0(A, e, r);
595
546
  case 4:
596
- return this.parseCmapFormat4(e, A, r);
547
+ return this.parseCmapFormat4(A, e, r);
597
548
  case 6:
598
- return this.parseCmapFormat6(e, A, r);
549
+ return this.parseCmapFormat6(A, e, r);
599
550
  case 12:
600
- return this.parseCmapFormat12(e, A, r);
551
+ return this.parseCmapFormat12(A, e, r);
601
552
  default:
602
553
  return r;
603
554
  }
@@ -605,81 +556,81 @@ class Y {
605
556
  /**
606
557
  * Parse cmap format 0
607
558
  */
608
- parseCmapFormat0(e, A, t) {
609
- let r = A + 2;
610
- const B = this.bin.readUshort(e, r);
559
+ parseCmapFormat0(A, e, t) {
560
+ let r = e + 2;
561
+ const B = this.bin.readUshort(A, r);
611
562
  r += 2, r += 2, t.map = [];
612
563
  for (let E = 0; E < B - 6; E++)
613
- t.map.push(e[r + E]);
564
+ t.map.push(A[r + E]);
614
565
  return t;
615
566
  }
616
567
  /**
617
568
  * Parse cmap format 4
618
569
  */
619
- parseCmapFormat4(e, A, t) {
620
- const r = A;
621
- let B = A + 2;
622
- const E = this.bin.readUshort(e, B);
570
+ parseCmapFormat4(A, e, t) {
571
+ const r = e;
572
+ let B = e + 2;
573
+ const E = this.bin.readUshort(A, B);
623
574
  B += 2, B += 2;
624
- const g = this.bin.readUshort(e, B);
575
+ const g = this.bin.readUshort(A, B);
625
576
  B += 2;
626
577
  const i = g >>> 1;
627
- t.searchRange = this.bin.readUshort(e, B), B += 2, t.entrySelector = this.bin.readUshort(e, B), B += 2, t.rangeShift = this.bin.readUshort(e, B), B += 2, t.endCount = this.bin.readUshorts(e, B, i), B += i * 2, B += 2, t.startCount = this.bin.readUshorts(e, B, i), B += i * 2, t.idDelta = [];
578
+ t.searchRange = this.bin.readUshort(A, B), B += 2, t.entrySelector = this.bin.readUshort(A, B), B += 2, t.rangeShift = this.bin.readUshort(A, B), B += 2, t.endCount = this.bin.readUshorts(A, B, i), B += i * 2, B += 2, t.startCount = this.bin.readUshorts(A, B, i), B += i * 2, t.idDelta = [];
628
579
  for (let o = 0; o < i; o++)
629
- t.idDelta.push(this.bin.readShort(e, B)), B += 2;
630
- return t.idRangeOffset = this.bin.readUshorts(e, B, i), B += i * 2, t.glyphIdArray = this.bin.readUshorts(e, B, r + E - B >> 1), t;
580
+ t.idDelta.push(this.bin.readShort(A, B)), B += 2;
581
+ return t.idRangeOffset = this.bin.readUshorts(A, B, i), B += i * 2, t.glyphIdArray = this.bin.readUshorts(A, B, r + E - B >> 1), t;
631
582
  }
632
583
  /**
633
584
  * Parse cmap format 6
634
585
  */
635
- parseCmapFormat6(e, A, t) {
636
- let r = A + 2;
637
- r += 2, r += 2, t.firstCode = this.bin.readUshort(e, r), r += 2;
638
- const B = this.bin.readUshort(e, r);
586
+ parseCmapFormat6(A, e, t) {
587
+ let r = e + 2;
588
+ r += 2, r += 2, t.firstCode = this.bin.readUshort(A, r), r += 2;
589
+ const B = this.bin.readUshort(A, r);
639
590
  r += 2, t.glyphIdArray = [];
640
591
  for (let E = 0; E < B; E++)
641
- t.glyphIdArray.push(this.bin.readUshort(e, r)), r += 2;
592
+ t.glyphIdArray.push(this.bin.readUshort(A, r)), r += 2;
642
593
  return t;
643
594
  }
644
595
  /**
645
596
  * Parse cmap format 12
646
597
  */
647
- parseCmapFormat12(e, A, t) {
648
- let r = A + 4;
598
+ parseCmapFormat12(A, e, t) {
599
+ let r = e + 4;
649
600
  r += 4, r += 4;
650
- const B = this.bin.readUint(e, r) * 3;
601
+ const B = this.bin.readUint(A, r) * 3;
651
602
  r += 4, t.groups = new Uint32Array(B);
652
603
  for (let E = 0; E < B; E += 3)
653
- t.groups[E] = this.bin.readUint(e, r + (E << 2)), t.groups[E + 1] = this.bin.readUint(e, r + (E << 2) + 4), t.groups[E + 2] = this.bin.readUint(e, r + (E << 2) + 8);
604
+ t.groups[E] = this.bin.readUint(A, r + (E << 2)), t.groups[E + 1] = this.bin.readUint(A, r + (E << 2) + 4), t.groups[E + 2] = this.bin.readUint(A, r + (E << 2) + 8);
654
605
  return t;
655
606
  }
656
607
  /**
657
608
  * Parse head table
658
609
  */
659
- parseHeadTable(e, A, t) {
660
- let r = A;
610
+ parseHeadTable(A, e, t) {
611
+ let r = e;
661
612
  return r += 4, {
662
- fontRevision: this.bin.readFixed(e, r + 0),
663
- flags: this.bin.readUshort(e, r + 8),
664
- unitsPerEm: this.bin.readUshort(e, r + 10),
665
- created: this.bin.readUint64(e, r + 12),
666
- modified: this.bin.readUint64(e, r + 20),
667
- xMin: this.bin.readShort(e, r + 28),
668
- yMin: this.bin.readShort(e, r + 30),
669
- xMax: this.bin.readShort(e, r + 32),
670
- yMax: this.bin.readShort(e, r + 34),
671
- macStyle: this.bin.readUshort(e, r + 36),
672
- lowestRecPPEM: this.bin.readUshort(e, r + 38),
673
- fontDirectionHint: this.bin.readShort(e, r + 40),
674
- indexToLocFormat: this.bin.readShort(e, r + 42),
675
- glyphDataFormat: this.bin.readShort(e, r + 44)
613
+ fontRevision: this.bin.readFixed(A, r + 0),
614
+ flags: this.bin.readUshort(A, r + 8),
615
+ unitsPerEm: this.bin.readUshort(A, r + 10),
616
+ created: this.bin.readUint64(A, r + 12),
617
+ modified: this.bin.readUint64(A, r + 20),
618
+ xMin: this.bin.readShort(A, r + 28),
619
+ yMin: this.bin.readShort(A, r + 30),
620
+ xMax: this.bin.readShort(A, r + 32),
621
+ yMax: this.bin.readShort(A, r + 34),
622
+ macStyle: this.bin.readUshort(A, r + 36),
623
+ lowestRecPPEM: this.bin.readUshort(A, r + 38),
624
+ fontDirectionHint: this.bin.readShort(A, r + 40),
625
+ indexToLocFormat: this.bin.readShort(A, r + 42),
626
+ glyphDataFormat: this.bin.readShort(A, r + 44)
676
627
  };
677
628
  }
678
629
  /**
679
630
  * Parse hhea table
680
631
  */
681
- parseHheaTable(e, A, t) {
682
- let r = A;
632
+ parseHheaTable(A, e, t) {
633
+ let r = e;
683
634
  r += 4;
684
635
  const B = [
685
636
  "ascender",
@@ -701,18 +652,18 @@ class Y {
701
652
  ], E = {};
702
653
  for (let g = 0; g < B.length; g++) {
703
654
  const i = B[g], n = i === "advanceWidthMax" || i === "numberOfHMetrics" ? this.bin.readUshort : this.bin.readShort;
704
- E[i] = n(e, r + g * 2);
655
+ E[i] = n(A, r + g * 2);
705
656
  }
706
657
  return E;
707
658
  }
708
659
  /**
709
660
  * Parse hmtx table
710
661
  */
711
- parseHmtxTable(e, A, t, r) {
662
+ parseHmtxTable(A, e, t, r) {
712
663
  const B = r.maxp.numGlyphs, E = r.hhea.numberOfHMetrics, g = [], i = [];
713
- let o = A, n = 0, a = 0;
664
+ let o = e, n = 0, a = 0;
714
665
  for (let h = 0; h < E; h++)
715
- n = this.bin.readUshort(e, o), a = this.bin.readShort(e, o + 2), g.push(n), i.push(a), o += 4;
666
+ n = this.bin.readUshort(A, o), a = this.bin.readShort(A, o + 2), g.push(n), i.push(a), o += 4;
716
667
  for (let h = E; h < B; h++)
717
668
  g.push(n), i.push(a);
718
669
  return { aWidth: g, lsBearing: i };
@@ -720,29 +671,29 @@ class Y {
720
671
  /**
721
672
  * Parse maxp table
722
673
  */
723
- parseMaxpTable(e, A, t) {
724
- let r = A;
674
+ parseMaxpTable(A, e, t) {
675
+ let r = e;
725
676
  r += 4;
726
- const B = this.bin.readUshort(e, r);
677
+ const B = this.bin.readUshort(A, r);
727
678
  return r += 2, { numGlyphs: B };
728
679
  }
729
680
  /**
730
681
  * Create optimized binary reader
731
682
  */
732
683
  createBinaryReader() {
733
- const e = new ArrayBuffer(8), A = {
734
- buff: e,
735
- int8: new Int8Array(e),
736
- uint8: new Uint8Array(e),
737
- int16: new Int16Array(e),
738
- uint16: new Uint16Array(e),
739
- int32: new Int32Array(e),
740
- uint32: new Uint32Array(e)
684
+ const A = new ArrayBuffer(8), e = {
685
+ buff: A,
686
+ int8: new Int8Array(A),
687
+ uint8: new Uint8Array(A),
688
+ int16: new Int16Array(A),
689
+ uint16: new Uint16Array(A),
690
+ int32: new Int32Array(A),
691
+ uint32: new Uint32Array(A)
741
692
  };
742
693
  return {
743
694
  readFixed: (t, r) => (t[r] << 8 | t[r + 1]) + (t[r + 2] << 8 | t[r + 3]) / (256 * 256 + 4),
744
- readInt: (t, r) => (A.uint8[0] = t[r + 3], A.uint8[1] = t[r + 2], A.uint8[2] = t[r + 1], A.uint8[3] = t[r], A.int32[0]),
745
- readShort: (t, r) => (A.uint16[0] = t[r] << 8 | t[r + 1], A.int16[0]),
695
+ readInt: (t, r) => (e.uint8[0] = t[r + 3], e.uint8[1] = t[r + 2], e.uint8[2] = t[r + 1], e.uint8[3] = t[r], e.int32[0]),
696
+ readShort: (t, r) => (e.uint16[0] = t[r] << 8 | t[r + 1], e.int16[0]),
746
697
  readUshort: (t, r) => t[r] << 8 | t[r + 1],
747
698
  readUshorts: (t, r, B) => {
748
699
  const E = new Array(B);
@@ -750,9 +701,9 @@ class Y {
750
701
  E[g] = t[r + g * 2] << 8 | t[r + g * 2 + 1];
751
702
  return E;
752
703
  },
753
- readUint: (t, r) => (A.uint8[3] = t[r], A.uint8[2] = t[r + 1], A.uint8[1] = t[r + 2], A.uint8[0] = t[r + 3], A.uint32[0]),
704
+ readUint: (t, r) => (e.uint8[3] = t[r], e.uint8[2] = t[r + 1], e.uint8[1] = t[r + 2], e.uint8[0] = t[r + 3], e.uint32[0]),
754
705
  readUint64: (t, r) => {
755
- const B = A.uint32[0] = t[r] << 24 | t[r + 1] << 16 | t[r + 2] << 8 | t[r + 3], E = A.uint32[0] = t[r + 4] << 24 | t[r + 5] << 16 | t[r + 6] << 8 | t[r + 7];
706
+ const B = e.uint32[0] = t[r] << 24 | t[r + 1] << 16 | t[r + 2] << 8 | t[r + 3], E = e.uint32[0] = t[r + 4] << 24 | t[r + 5] << 16 | t[r + 6] << 8 | t[r + 7];
756
707
  return B * 4294967296 + E;
757
708
  },
758
709
  readASCII: (t, r, B) => {
@@ -761,13 +712,13 @@ class Y {
761
712
  E += String.fromCharCode(t[r + g]);
762
713
  return E;
763
714
  },
764
- t: A
715
+ t: e
765
716
  };
766
717
  }
767
718
  }
768
719
  const w = new Y(), m = {
769
720
  parse: (s) => w.parse(s),
770
- findTable: (s, e, A) => w.findTable(s, e, A)
721
+ findTable: (s, A, e) => w.findTable(s, A, e)
771
722
  }, S = `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
772
723
  `;
773
724
  class O {
@@ -776,58 +727,58 @@ class O {
776
727
  * @param font The parsed font object from Typr
777
728
  * @returns Array of unique character strings
778
729
  */
779
- extractCharacters(e) {
730
+ extractCharacters(A) {
780
731
  var t;
781
- const A = [];
782
- return (t = e == null ? void 0 : e.cmap) != null && t.tables ? (e.cmap.tables.forEach((r) => {
732
+ const e = [];
733
+ return (t = A == null ? void 0 : A.cmap) != null && t.tables ? (A.cmap.tables.forEach((r) => {
783
734
  if (r.format === 4) {
784
735
  const B = this._extractCharactersFromFormat4Table(r);
785
- A.push(...B);
736
+ e.push(...B);
786
737
  } else if (r.format === 12) {
787
738
  const B = this._extractCharactersFromFormat12Table(r);
788
- A.push(...B);
739
+ e.push(...B);
789
740
  }
790
- }), [...new Set(A)]) : [];
741
+ }), [...new Set(e)]) : [];
791
742
  }
792
743
  /**
793
744
  * Extracts characters from a Format 4 cmap table (Basic Multilingual Plane).
794
745
  * @param table The Format 4 cmap table
795
746
  * @returns Array of character strings
796
747
  */
797
- _extractCharactersFromFormat4Table(e) {
798
- const A = [];
799
- if (!e.startCount || !e.endCount || !e.idRangeOffset || !e.idDelta)
800
- return A;
801
- for (let t = 0; t < e.startCount.length; t++) {
802
- const r = e.startCount[t], B = e.endCount[t];
748
+ _extractCharactersFromFormat4Table(A) {
749
+ const e = [];
750
+ if (!A.startCount || !A.endCount || !A.idRangeOffset || !A.idDelta)
751
+ return e;
752
+ for (let t = 0; t < A.startCount.length; t++) {
753
+ const r = A.startCount[t], B = A.endCount[t];
803
754
  if (!(r === 65535 && B === 65535)) {
804
755
  for (let E = r; E <= B; E++)
805
- if (this._calculateGlyphIndexFormat4(e, E, t) > 0) {
756
+ if (this._calculateGlyphIndexFormat4(A, E, t) > 0) {
806
757
  const i = String.fromCodePoint(E);
807
- A.push(i);
758
+ e.push(i);
808
759
  }
809
760
  }
810
761
  }
811
- return A;
762
+ return e;
812
763
  }
813
764
  /**
814
765
  * Extracts characters from a Format 12 cmap table (Extended Unicode ranges).
815
766
  * @param table The Format 12 cmap table
816
767
  * @returns Array of character strings
817
768
  */
818
- _extractCharactersFromFormat12Table(e) {
819
- const A = [];
820
- if (!e.groups)
821
- return A;
822
- for (let t = 0; t < e.groups.length; t += 3) {
823
- const r = e.groups[t], B = e.groups[t + 1], E = e.groups[t + 2];
769
+ _extractCharactersFromFormat12Table(A) {
770
+ const e = [];
771
+ if (!A.groups)
772
+ return e;
773
+ for (let t = 0; t < A.groups.length; t += 3) {
774
+ const r = A.groups[t], B = A.groups[t + 1], E = A.groups[t + 2];
824
775
  for (let g = r; g <= B; g++)
825
776
  if (E + (g - r) > 0) {
826
777
  const o = String.fromCodePoint(g);
827
- A.push(o);
778
+ e.push(o);
828
779
  }
829
780
  }
830
- return A;
781
+ return e;
831
782
  }
832
783
  /**
833
784
  * Calculates the glyph index for a character in a Format 4 cmap table.
@@ -836,15 +787,15 @@ class O {
836
787
  * @param rangeIndex The index of the character range
837
788
  * @returns The glyph index, or 0 if not found
838
789
  */
839
- _calculateGlyphIndexFormat4(e, A, t) {
840
- if (e.idRangeOffset[t] === 0)
841
- return A + e.idDelta[t] & 65535;
790
+ _calculateGlyphIndexFormat4(A, e, t) {
791
+ if (A.idRangeOffset[t] === 0)
792
+ return e + A.idDelta[t] & 65535;
842
793
  {
843
- const r = e.idRangeOffset[t] / 2 + (A - e.startCount[t]) - (e.startCount.length - t);
844
- if (r >= 0 && e.glyphIdArray && r < e.glyphIdArray.length) {
845
- const B = e.glyphIdArray[r];
794
+ const r = A.idRangeOffset[t] / 2 + (e - A.startCount[t]) - (A.startCount.length - t);
795
+ if (r >= 0 && A.glyphIdArray && r < A.glyphIdArray.length) {
796
+ const B = A.glyphIdArray[r];
846
797
  if (B !== 0)
847
- return B + e.idDelta[t] & 65535;
798
+ return B + A.idDelta[t] & 65535;
848
799
  }
849
800
  }
850
801
  return 0;
@@ -854,29 +805,29 @@ class O {
854
805
  * @param characters Array of character strings to filter
855
806
  * @returns Filtered array of character strings
856
807
  */
857
- filterProblematicCharacters(e) {
858
- return e.filter((A) => this._isValidCharacter(A));
808
+ filterProblematicCharacters(A) {
809
+ return A.filter((e) => this._isValidCharacter(e));
859
810
  }
860
811
  /**
861
812
  * Checks if a character is valid for rendering.
862
813
  * @param char The character to check
863
814
  * @returns True if the character is valid, false otherwise
864
815
  */
865
- _isValidCharacter(e) {
866
- const A = e.codePointAt(0) || 0;
867
- return !(A >= 0 && A <= 31 && A !== 9 && A !== 10 && A !== 13 || A >= 127 && A <= 159);
816
+ _isValidCharacter(A) {
817
+ const e = A.codePointAt(0) || 0;
818
+ return !(e >= 0 && e <= 31 && e !== 9 && e !== 10 && e !== 13 || e >= 127 && e <= 159);
868
819
  }
869
820
  }
870
- class H {
821
+ class z {
871
822
  /**
872
823
  * Creates a new TextureAtlasCreation instance.
873
824
  * @param renderer The WebGL renderer instance
874
825
  */
875
- constructor(e) {
826
+ constructor(A) {
876
827
  Q(this, "_textureCanvas");
877
828
  Q(this, "_textureContext");
878
829
  Q(this, "_renderer");
879
- this._renderer = e, this._textureCanvas = document.createElement("canvas"), this._textureContext = this._textureCanvas.getContext("2d", { willReadFrequently: !0 });
830
+ this._renderer = A, this._textureCanvas = document.createElement("canvas"), this._textureContext = this._textureCanvas.getContext("2d", { willReadFrequently: !0 });
880
831
  }
881
832
  /**
882
833
  * Creates a texture atlas from the given characters.
@@ -886,9 +837,9 @@ class H {
886
837
  * @param fontFamilyName Font family name to use
887
838
  * @returns Object containing framebuffer, columns, and rows
888
839
  */
889
- async createTextureAtlas(e, A, t, r) {
890
- const B = e.length, E = Math.ceil(Math.sqrt(B)), g = Math.ceil(B / E), i = A.width * E, o = A.height * g;
891
- this._setupCanvas(i, o, t, r), this._renderCharactersToCanvas(e, A, E, t), this._applyBlackWhiteThreshold();
840
+ async createTextureAtlas(A, e, t, r) {
841
+ const B = A.length, E = Math.ceil(Math.sqrt(B)), g = Math.ceil(B / E), i = e.width * E, o = e.height * g;
842
+ this._setupCanvas(i, o, t, r), this._renderCharactersToCanvas(A, e, E, t), this._applyBlackWhiteThreshold();
892
843
  const n = this._renderer.createFramebuffer(i, o, { filter: "nearest" });
893
844
  return n.update(this._textureCanvas), {
894
845
  framebuffer: n,
@@ -903,8 +854,8 @@ class H {
903
854
  * @param fontSize Font size
904
855
  * @param fontFamilyName Font family name
905
856
  */
906
- _setupCanvas(e, A, t, r) {
907
- this._textureCanvas.width = e, this._textureCanvas.height = A, this._textureContext.imageSmoothingEnabled = !0, this._textureContext.imageSmoothingQuality = "high", this._textureContext.fillStyle = "black", this._textureContext.fillRect(0, 0, e, A), this._textureContext.font = `${t}px ${r}`, this._textureContext.textBaseline = "top", this._textureContext.textAlign = "left", this._textureContext.fillStyle = "white";
857
+ _setupCanvas(A, e, t, r) {
858
+ this._textureCanvas.width = A, this._textureCanvas.height = e, this._textureContext.imageSmoothingEnabled = !0, this._textureContext.imageSmoothingQuality = "high", this._textureContext.fillStyle = "black", this._textureContext.fillRect(0, 0, A, e), this._textureContext.font = `${t}px ${r}`, this._textureContext.textBaseline = "top", this._textureContext.textAlign = "left", this._textureContext.fillStyle = "white";
908
859
  }
909
860
  /**
910
861
  * Renders all characters to the canvas in a grid layout.
@@ -913,10 +864,10 @@ class H {
913
864
  * @param textureColumns Number of columns in the texture
914
865
  * @param fontSize Font size
915
866
  */
916
- _renderCharactersToCanvas(e, A, t, r) {
917
- for (let B = 0; B < e.length; B++) {
918
- const E = B % t, g = Math.floor(B / t), i = E * A.width + A.width / 2, o = g * A.height + A.height / 2, n = i - A.width / 2, a = o - r / 2;
919
- this._textureContext.fillText(e[B].character, n, a);
867
+ _renderCharactersToCanvas(A, e, t, r) {
868
+ for (let B = 0; B < A.length; B++) {
869
+ const E = B % t, g = Math.floor(B / t), i = E * e.width + e.width / 2, o = g * e.height + e.height / 2, n = i - e.width / 2, a = o - r / 2;
870
+ this._textureContext.fillText(A[B].character, n, a);
920
871
  }
921
872
  }
922
873
  /**
@@ -925,16 +876,16 @@ class H {
925
876
  * ensuring crisp text rendering suitable for NEAREST texture filtering.
926
877
  * @param threshold Threshold value (0-255) for black/white conversion
927
878
  */
928
- _applyBlackWhiteThreshold(e = 128) {
929
- const A = this._textureContext.getImageData(0, 0, this._textureCanvas.width, this._textureCanvas.height), t = A.data;
879
+ _applyBlackWhiteThreshold(A = 128) {
880
+ const e = this._textureContext.getImageData(0, 0, this._textureCanvas.width, this._textureCanvas.height), t = e.data;
930
881
  for (let r = 0; r < t.length; r += 4) {
931
- const E = 0.299 * t[r] + 0.587 * t[r + 1] + 0.114 * t[r + 2] > e ? 255 : 0;
882
+ const E = 0.299 * t[r] + 0.587 * t[r + 1] + 0.114 * t[r + 2] > A ? 255 : 0;
932
883
  t[r] = E, t[r + 1] = E, t[r + 2] = E;
933
884
  }
934
- this._textureContext.putImageData(A, 0, 0);
885
+ this._textureContext.putImageData(e, 0, 0);
935
886
  }
936
887
  }
937
- class z {
888
+ class H {
938
889
  /**
939
890
  * Creates a new MetricsCalculation instance.
940
891
  */
@@ -951,10 +902,10 @@ class z {
951
902
  * @param fontFace FontFace object (optional, for validation)
952
903
  * @returns Object containing width and height dimensions
953
904
  */
954
- calculateMaxGlyphDimensions(e, A, t) {
955
- this._tempContext.font = `${A}px ${t}`;
905
+ calculateMaxGlyphDimensions(A, e, t) {
906
+ this._tempContext.font = `${e}px ${t}`;
956
907
  let r = 0, B = 0;
957
- for (const E of e) {
908
+ for (const E of A) {
958
909
  const g = this._tempContext.measureText(E), i = g.width, o = g.actualBoundingBoxAscent + g.actualBoundingBoxDescent;
959
910
  i > 0 && (r = Math.max(r, i), B = Math.max(B, o));
960
911
  }
@@ -970,11 +921,11 @@ class L {
970
921
  * @param characters Array of character strings
971
922
  * @returns Array of TextmodeCharacter objects with colors
972
923
  */
973
- createCharacterObjects(e) {
974
- return e.map((A, t) => {
975
- const r = A.codePointAt(0) || 0, B = this._generateCharacterColor(t);
924
+ createCharacterObjects(A) {
925
+ return A.map((e, t) => {
926
+ const r = e.codePointAt(0) || 0, B = this._generateCharacterColor(t);
976
927
  return {
977
- character: A,
928
+ character: e,
978
929
  unicode: r,
979
930
  color: B
980
931
  };
@@ -985,9 +936,9 @@ class L {
985
936
  * @param index The index of the character
986
937
  * @returns RGB color as a tuple [r, g, b]
987
938
  */
988
- _generateCharacterColor(e) {
989
- const A = e % 256, t = Math.floor(e / 256) % 256, r = Math.floor(e / 65536) % 256;
990
- return [A, t, r];
939
+ _generateCharacterColor(A) {
940
+ const e = A % 256, t = Math.floor(A / 256) % 256, r = Math.floor(A / 65536) % 256;
941
+ return [e, t, r];
991
942
  }
992
943
  /**
993
944
  * Gets the color for a specific character.
@@ -995,8 +946,8 @@ class L {
995
946
  * @param characters Array of TextmodeCharacter objects
996
947
  * @returns RGB color as a tuple [r, g, b], or [0, 0, 0] if not found
997
948
  */
998
- getCharacterColor(e, A) {
999
- const t = A.find((r) => r.character === e);
949
+ getCharacterColor(A, e) {
950
+ const t = e.find((r) => r.character === A);
1000
951
  return t ? t.color : [0, 0, 0];
1001
952
  }
1002
953
  /**
@@ -1005,18 +956,18 @@ class L {
1005
956
  * @param characters Array of TextmodeCharacter objects
1006
957
  * @returns Array of RGB colors for each character
1007
958
  */
1008
- getCharacterColors(e, A) {
1009
- return e.split("").map((t) => this.getCharacterColor(t, A) || [0, 0, 0]);
959
+ getCharacterColors(A, e) {
960
+ return A.split("").map((t) => this.getCharacterColor(t, e) || [0, 0, 0]);
1010
961
  }
1011
962
  }
1012
- class V {
963
+ class k {
1013
964
  /**
1014
965
  * Creates a new TextmodeFont instance.
1015
966
  * @param renderer Renderer instance for texture creation
1016
967
  * @param fontSize Font size to use for the texture atlas
1017
968
  * @ignore
1018
969
  */
1019
- constructor(e, A = 16) {
970
+ constructor(A, e = 16) {
1020
971
  Q(this, "_font");
1021
972
  Q(this, "_characters", []);
1022
973
  Q(this, "_fontFramebuffer");
@@ -1031,7 +982,7 @@ class V {
1031
982
  Q(this, "_textureAtlas");
1032
983
  Q(this, "_metricsCalculator");
1033
984
  Q(this, "_characterColorMapper");
1034
- this._fontSize = A, this._characterExtractor = new O(), this._textureAtlas = new H(e), this._metricsCalculator = new z(), this._characterColorMapper = new L();
985
+ this._fontSize = e, this._characterExtractor = new O(), this._textureAtlas = new z(A), this._metricsCalculator = new H(), this._characterColorMapper = new L();
1035
986
  }
1036
987
  /**
1037
988
  * Initializes the font manager by loading the font and creating the texture atlas.
@@ -1039,8 +990,8 @@ class V {
1039
990
  * @ignore
1040
991
  */
1041
992
  async initialize() {
1042
- const A = await (await fetch(S)).arrayBuffer();
1043
- await this._loadFontFace(A), this._font = m.parse(A)[0], await this._initializeFont();
993
+ const e = await (await fetch(S)).arrayBuffer();
994
+ await this._loadFontFace(e), this._font = m.parse(e)[0], await this._initializeFont();
1044
995
  }
1045
996
  /**
1046
997
  * Loads a new font from a file path.
@@ -1048,36 +999,36 @@ class V {
1048
999
  * @returns Promise that resolves when font loading is complete
1049
1000
  * @ignore
1050
1001
  */
1051
- async loadFont(e) {
1002
+ async loadFont(A) {
1052
1003
  try {
1053
- const A = await fetch(e);
1054
- if (!A.ok)
1055
- throw new l(`Failed to load font file: ${A.status} ${A.statusText}`);
1056
- const t = await A.arrayBuffer();
1004
+ const e = await fetch(A);
1005
+ if (!e.ok)
1006
+ throw new D(`Failed to load font file: ${e.status} ${e.statusText}`);
1007
+ const t = await e.arrayBuffer();
1057
1008
  await this._loadFontFace(t);
1058
1009
  const r = m.parse(t);
1059
1010
  if (!r || r.length === 0)
1060
1011
  throw new Error("Failed to parse font file");
1061
1012
  this._font = r[0], await this._initializeFont();
1062
- } catch (A) {
1063
- throw new l(`Failed to load font: ${A instanceof Error ? A.message : "Unknown error"}`, A);
1013
+ } catch (e) {
1014
+ throw new D(`Failed to load font: ${e instanceof Error ? e.message : "Unknown error"}`, e);
1064
1015
  }
1065
1016
  }
1066
1017
  /**
1067
1018
  * Loads a FontFace from a font buffer.
1068
1019
  * @param fontBuffer ArrayBuffer containing font data
1069
1020
  */
1070
- async _loadFontFace(e) {
1071
- const A = Date.now();
1072
- this._fontFamilyName = this._fontFamilyName === "UrsaFont" ? "UrsaFont" : `CustomFont_${A}`, this._fontFace = new FontFace(this._fontFamilyName, e), await this._fontFace.load(), document.fonts.add(this._fontFace);
1021
+ async _loadFontFace(A) {
1022
+ const e = Date.now();
1023
+ this._fontFamilyName = this._fontFamilyName === "UrsaFont" ? "UrsaFont" : `CustomFont_${e}`, this._fontFace = new FontFace(this._fontFamilyName, A), await this._fontFace.load(), document.fonts.add(this._fontFace);
1073
1024
  }
1074
1025
  /**
1075
1026
  * Initializes all font-dependent properties using the component classes.
1076
1027
  */
1077
1028
  async _initializeFont() {
1078
- const e = this._characterExtractor.extractCharacters(this._font), A = this._characterExtractor.filterProblematicCharacters(e);
1079
- this._characters = this._characterColorMapper.createCharacterObjects(A), this._maxGlyphDimensions = this._metricsCalculator.calculateMaxGlyphDimensions(
1080
- A,
1029
+ const A = this._characterExtractor.extractCharacters(this._font), e = this._characterExtractor.filterProblematicCharacters(A);
1030
+ this._characters = this._characterColorMapper.createCharacterObjects(e), this._maxGlyphDimensions = this._metricsCalculator.calculateMaxGlyphDimensions(
1031
+ e,
1081
1032
  this._fontSize,
1082
1033
  this._fontFamilyName
1083
1034
  );
@@ -1094,12 +1045,12 @@ class V {
1094
1045
  * @param character The character to get the color for.
1095
1046
  * @returns The RGB color as an array `[r, g, b]`.
1096
1047
  */
1097
- getCharacterColor(e) {
1048
+ getCharacterColor(A) {
1098
1049
  return C.validate(
1099
- typeof e == "string" && e.length === 1,
1050
+ typeof A == "string" && A.length === 1,
1100
1051
  "Character must be a single character string.",
1101
- { providedValue: e, method: "getCharacterColor" }
1102
- ) ? this._characterColorMapper.getCharacterColor(e, this._characters) : [0, 0, 0];
1052
+ { providedValue: A, method: "getCharacterColor" }
1053
+ ) ? this._characterColorMapper.getCharacterColor(A, this._characters) : [0, 0, 0];
1103
1054
  }
1104
1055
  /**
1105
1056
  * Get the colors associated with a string of characters.
@@ -1107,23 +1058,23 @@ class V {
1107
1058
  * @returns An array of RGB colors for each character in the string.
1108
1059
  * Each color is represented as an array `[r, g, b]`.
1109
1060
  */
1110
- getCharacterColors(e) {
1061
+ getCharacterColors(A) {
1111
1062
  return C.validate(
1112
- typeof e == "string" && e.length > 0,
1063
+ typeof A == "string" && A.length > 0,
1113
1064
  "Characters must be a string with at least one character.",
1114
- { providedValue: e, method: "getCharacterColors" }
1115
- ) ? this._characterColorMapper.getCharacterColors(e, this._characters) : [[0, 0, 0]];
1065
+ { providedValue: A, method: "getCharacterColors" }
1066
+ ) ? this._characterColorMapper.getCharacterColors(A, this._characters) : [[0, 0, 0]];
1116
1067
  }
1117
1068
  /**
1118
1069
  * Checks if all characters in the given string exist in the font.
1119
1070
  * @param str The string to check.
1120
1071
  * @returns `true` if all characters exist in the font, `false` otherwise.
1121
1072
  */
1122
- hasAllCharacters(e) {
1123
- if (typeof e != "string" || e.length === 0) return !1;
1124
- const A = new Set(this._characters.map((t) => t.character));
1125
- for (const t of e)
1126
- if (!A.has(t)) return !1;
1073
+ hasAllCharacters(A) {
1074
+ if (typeof A != "string" || A.length === 0) return !1;
1075
+ const e = new Set(this._characters.map((t) => t.character));
1076
+ for (const t of A)
1077
+ if (!e.has(t)) return !1;
1127
1078
  return !0;
1128
1079
  }
1129
1080
  /**
@@ -1139,7 +1090,7 @@ class V {
1139
1090
  }
1140
1091
  /** Returns a string representation of all characters in the font. */
1141
1092
  get charactersString() {
1142
- return this._characters.map((e) => e.character).join("");
1093
+ return this._characters.map((A) => A.character).join("");
1143
1094
  }
1144
1095
  /** Returns the number of columns in the texture atlas. */
1145
1096
  get textureColumns() {
@@ -1158,7 +1109,7 @@ class V {
1158
1109
  return this._fontSize;
1159
1110
  }
1160
1111
  }
1161
- class k {
1112
+ class N {
1162
1113
  /**
1163
1114
  * Create a new grid instance.
1164
1115
  * @param canvas The canvas element used to determine the grid dimensions.
@@ -1166,7 +1117,7 @@ class k {
1166
1117
  * @param cellHeight The height of each cell in the grid.
1167
1118
  * @ignore
1168
1119
  */
1169
- constructor(e, A, t) {
1120
+ constructor(A, e, t) {
1170
1121
  /** The number of columns in the grid. */
1171
1122
  Q(this, "_cols");
1172
1123
  /** The number of rows in the grid. */
@@ -1187,20 +1138,25 @@ class k {
1187
1138
  Q(this, "_cellWidth");
1188
1139
  /** The height of each cell in the grid. */
1189
1140
  Q(this, "_cellHeight");
1190
- this._canvas = e, this._cellWidth = A, this._cellHeight = t, this.reset();
1141
+ this._canvas = A, this._cellWidth = e, this._cellHeight = t, this.reset();
1191
1142
  }
1192
1143
  /**
1193
1144
  * Reset the grid to the default number of columns and rows based on the current canvas dimensions, and the grid cell dimensions.
1194
1145
  * @ignore
1195
1146
  */
1196
1147
  reset() {
1197
- this._fixedDimensions || ([this._cols, this._rows] = [Math.floor(this._canvas.width / this._cellWidth), Math.floor(this._canvas.height / this._cellHeight)]), this._resizeGrid();
1148
+ if (!this._fixedDimensions) {
1149
+ const A = this._canvas.getBoundingClientRect(), e = Math.round(A.width), t = Math.round(A.height);
1150
+ [this._cols, this._rows] = [Math.floor(e / this._cellWidth), Math.floor(t / this._cellHeight)];
1151
+ }
1152
+ this._resizeGrid();
1198
1153
  }
1199
1154
  /**
1200
1155
  * Reset the total grid width & height, and the offset to the outer canvas.
1201
1156
  */
1202
1157
  _resizeGrid() {
1203
- this._width = this._cols * this._cellWidth, this._height = this._rows * this._cellHeight, this._offsetX = Math.floor((this._canvas.width - this._width) / 2), this._offsetY = Math.floor((this._canvas.height - this._height) / 2);
1158
+ const A = this._canvas.getBoundingClientRect(), e = Math.round(A.width), t = Math.round(A.height);
1159
+ this._width = this._cols * this._cellWidth, this._height = this._rows * this._cellHeight, this._offsetX = Math.floor((e - this._width) / 2), this._offsetY = Math.floor((t - this._height) / 2);
1204
1160
  }
1205
1161
  /**
1206
1162
  * Re-assign the grid cell dimensions and `reset()` the grid.
@@ -1208,8 +1164,8 @@ class k {
1208
1164
  * @param newCellHeight The new cell height.
1209
1165
  * @ignore
1210
1166
  */
1211
- resizeCellPixelDimensions(e, A) {
1212
- [this._cellWidth, this._cellHeight] = [e, A], this.reset();
1167
+ resizeCellPixelDimensions(A, e) {
1168
+ [this._cellWidth, this._cellHeight] = [A, e], this.reset();
1213
1169
  }
1214
1170
  /**
1215
1171
  * Re-assign the grid dimensions and resize the grid.
@@ -1219,8 +1175,8 @@ class k {
1219
1175
  * @param newRows The new number of rows.
1220
1176
  * @ignore
1221
1177
  */
1222
- resizeGridDimensions(e, A) {
1223
- this._fixedDimensions = !0, [this._cols, this._rows] = [e, A], this._resizeGrid();
1178
+ resizeGridDimensions(A, e) {
1179
+ this._fixedDimensions = !0, [this._cols, this._rows] = [A, e], this._resizeGrid();
1224
1180
  }
1225
1181
  /**
1226
1182
  * Make the grid dimensions flexible again, and `reset()` the grid.
@@ -1234,8 +1190,8 @@ class k {
1234
1190
  * @param canvas The new canvas element to use for the grid.
1235
1191
  * @ignore
1236
1192
  */
1237
- updateCanvas(e) {
1238
- this._canvas = e, this._fixedDimensions ? this._resizeGrid() : this.reset();
1193
+ resize() {
1194
+ this._fixedDimensions ? this._resizeGrid() : this.reset();
1239
1195
  }
1240
1196
  /**
1241
1197
  * Gets or sets whether the grid dimensions *(columns and rows)* are fixed or responsive based on the canvas dimensions.
@@ -1243,10 +1199,10 @@ class k {
1243
1199
  * @returns If no parameter is provided, returns `true` if the grid dimensions are fixed, or `false` if they are responsive.
1244
1200
  * @ignore
1245
1201
  */
1246
- fixedDimensions(e) {
1247
- if (e === void 0)
1202
+ fixedDimensions(A) {
1203
+ if (A === void 0)
1248
1204
  return this._fixedDimensions;
1249
- this._fixedDimensions = e;
1205
+ this._fixedDimensions = A;
1250
1206
  }
1251
1207
  /** Returns the width of each cell in the grid. */
1252
1208
  get cellWidth() {
@@ -1281,47 +1237,46 @@ class k {
1281
1237
  return this._offsetY;
1282
1238
  }
1283
1239
  }
1284
- class N {
1285
- constructor(e) {
1240
+ class V {
1241
+ constructor(A) {
1286
1242
  Q(this, "webglCanvas");
1287
1243
  Q(this, "captureCanvas");
1288
- this.captureCanvas = e, this.webglCanvas = this.createOverlayCanvas();
1244
+ this.captureCanvas = A, this.webglCanvas = this.createOverlayCanvas();
1289
1245
  }
1290
1246
  generateUniqueCanvasId() {
1291
- let e = 0, A = `textmodeCanvas${e}`;
1292
- for (; document.getElementById(A); )
1293
- e++, A = `textmodeCanvas${e}`;
1294
- return A;
1247
+ let A = 0, e = `textmodeCanvas${A}`;
1248
+ for (; document.getElementById(e); )
1249
+ A++, e = `textmodeCanvas${A}`;
1250
+ return e;
1295
1251
  }
1296
1252
  createOverlayCanvas() {
1297
- var B;
1298
- const e = document.createElement("canvas");
1299
- e.width = this.captureCanvas.width, e.height = this.captureCanvas.height, e.className = "textmodeCanvas", e.id = this.generateUniqueCanvasId(), e.style.position = "absolute", e.style.pointerEvents = "none";
1300
- const A = window.getComputedStyle(this.captureCanvas);
1301
- let t = parseInt(A.zIndex || "0", 10);
1302
- isNaN(t) && (t = 0), e.style.zIndex = (t + 1).toString();
1303
- const r = this.captureCanvas.getBoundingClientRect();
1304
- return e.style.width = r.width + "px", e.style.height = r.height + "px", this.positionOverlayCanvas(e), (B = this.captureCanvas.parentNode) == null || B.insertBefore(e, this.captureCanvas.nextSibling), e;
1305
- }
1306
- positionOverlayCanvas(e) {
1307
- const A = this.captureCanvas.getBoundingClientRect();
1253
+ var i;
1254
+ const A = document.createElement("canvas"), e = this.captureCanvas.getBoundingClientRect(), t = Math.round(e.width), r = Math.round(e.height);
1255
+ A.width = t, A.height = r, A.className = "textmodeCanvas", A.id = this.generateUniqueCanvasId(), A.style.position = "absolute", A.style.pointerEvents = "none";
1256
+ const B = window.getComputedStyle(this.captureCanvas);
1257
+ let E = parseInt(B.zIndex || "0", 10);
1258
+ isNaN(E) && (E = 0), A.style.zIndex = (E + 1).toString();
1259
+ const g = this.captureCanvas.getBoundingClientRect();
1260
+ return A.style.width = g.width + "px", A.style.height = g.height + "px", this.positionOverlayCanvas(A), (i = this.captureCanvas.parentNode) == null || i.insertBefore(A, this.captureCanvas.nextSibling), A;
1261
+ }
1262
+ positionOverlayCanvas(A) {
1263
+ const e = this.captureCanvas.getBoundingClientRect();
1308
1264
  let t = this.captureCanvas.offsetParent;
1309
1265
  if (t && t !== document.body) {
1310
1266
  const r = t.getBoundingClientRect();
1311
- e.style.top = A.top - r.top + "px", e.style.left = A.left - r.left + "px";
1267
+ A.style.top = e.top - r.top + "px", A.style.left = e.left - r.left + "px";
1312
1268
  } else
1313
- e.style.top = A.top + window.scrollY + "px", e.style.left = A.left + window.scrollX + "px";
1269
+ A.style.top = e.top + window.scrollY + "px", A.style.left = e.left + window.scrollX + "px";
1314
1270
  }
1315
1271
  resize() {
1316
- this.webglCanvas.width = this.captureCanvas.width, this.webglCanvas.height = this.captureCanvas.height;
1317
- const e = this.captureCanvas.getBoundingClientRect();
1318
- this.webglCanvas.style.width = e.width + "px", this.webglCanvas.style.height = e.height + "px", this.positionOverlayCanvas(this.webglCanvas);
1272
+ const A = this.captureCanvas.getBoundingClientRect();
1273
+ this.webglCanvas.width = Math.round(A.width), this.webglCanvas.height = Math.round(A.height), this.webglCanvas.style.width = A.width + "px", this.webglCanvas.style.height = A.height + "px", this.positionOverlayCanvas(this.webglCanvas);
1319
1274
  }
1320
1275
  /**
1321
1276
  * Get the WebGL context for the overlay canvas
1322
1277
  */
1323
1278
  getWebGLContext() {
1324
- const e = {
1279
+ const A = {
1325
1280
  alpha: !0,
1326
1281
  premultipliedAlpha: !1,
1327
1282
  preserveDrawingBuffer: !0,
@@ -1329,10 +1284,10 @@ class N {
1329
1284
  depth: !1,
1330
1285
  stencil: !1,
1331
1286
  powerPreference: "high-performance"
1332
- }, A = this.webglCanvas.getContext("webgl2", e) || this.webglCanvas.getContext("webgl", e);
1333
- if (!A)
1334
- throw new l("WebGL context could not be created. Ensure your browser supports WebGL.");
1335
- return A;
1287
+ }, e = this.webglCanvas.getContext("webgl2", A) || this.webglCanvas.getContext("webgl", A);
1288
+ if (!e)
1289
+ throw new D("WebGL context could not be created. Ensure your browser supports WebGL.");
1290
+ return e;
1336
1291
  }
1337
1292
  // Getters
1338
1293
  get canvas() {
@@ -1346,7 +1301,7 @@ class N {
1346
1301
  }
1347
1302
  }
1348
1303
  class p {
1349
- constructor(e, A, t, r = {}) {
1304
+ constructor(A, e, t, r = {}) {
1350
1305
  Q(this, "renderer");
1351
1306
  Q(this, "fontManager");
1352
1307
  Q(this, "grid");
@@ -1356,7 +1311,7 @@ class p {
1356
1311
  Q(this, "_rotationFramebuffer");
1357
1312
  Q(this, "_transformFramebuffer");
1358
1313
  Q(this, "options");
1359
- this.renderer = e, this.fontManager = A, this.grid = t, this.options = r, this._characterFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._primaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._rotationFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._transformFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
1314
+ this.renderer = A, this.fontManager = e, this.grid = t, this.options = r, this._characterFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._primaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._secondaryColorFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._rotationFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows), this._transformFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
1360
1315
  }
1361
1316
  /**
1362
1317
  * Resizes all internal framebuffers to match the grid dimensions.
@@ -1387,12 +1342,12 @@ class J {
1387
1342
  * @param renderer The renderer instance.
1388
1343
  * @param colors The RGB colors to store as [r, g, b] arrays where values are 0-255.
1389
1344
  */
1390
- constructor(e, A) {
1345
+ constructor(A, e) {
1391
1346
  /** The framebuffer used to store the color palette. */
1392
1347
  Q(this, "_framebuffer");
1393
1348
  Q(this, "_renderer");
1394
1349
  Q(this, "_colors");
1395
- this._renderer = e, this._colors = A;
1350
+ this._renderer = A, this._colors = e;
1396
1351
  const t = Math.max(this._colors.length, 1);
1397
1352
  this._framebuffer = this._renderer.createFramebuffer(t, 1), this._updateFramebuffer();
1398
1353
  }
@@ -1401,21 +1356,21 @@ class J {
1401
1356
  */
1402
1357
  _updateFramebuffer() {
1403
1358
  if (!this._framebuffer) return;
1404
- const e = Math.max(this._colors.length, 1), A = 1;
1405
- this._framebuffer.width !== e && this._framebuffer.resize(e, A);
1406
- const t = new Uint8Array(e * A * 4);
1407
- for (let r = 0; r < e; r++) {
1359
+ const A = Math.max(this._colors.length, 1), e = 1;
1360
+ this._framebuffer.width !== A && this._framebuffer.resize(A, e);
1361
+ const t = new Uint8Array(A * e * 4);
1362
+ for (let r = 0; r < A; r++) {
1408
1363
  const B = r < this._colors.length ? this._colors[r] : [0, 0, 0], E = r * 4;
1409
1364
  t[E] = B[0], t[E + 1] = B[1], t[E + 2] = B[2], t[E + 3] = 255;
1410
1365
  }
1411
- this._framebuffer.updateWithPixelData(t, e, A);
1366
+ this._framebuffer.updatePixels(t, A, e);
1412
1367
  }
1413
1368
  /**
1414
1369
  * Sets the colors of the palette and updates the framebuffer.
1415
1370
  * @param newColors The new RGB colors to set as [r, g, b] arrays.
1416
1371
  */
1417
- setColors(e) {
1418
- this._colors = e, this._updateFramebuffer();
1372
+ setColors(A) {
1373
+ this._colors = A, this._updateFramebuffer();
1419
1374
  }
1420
1375
  /**
1421
1376
  * Get the colors of the palette.
@@ -1437,8 +1392,8 @@ class J {
1437
1392
  }
1438
1393
  }
1439
1394
  class _ extends p {
1440
- constructor(A, t, r, B = {}) {
1441
- super(A, t, r, B);
1395
+ constructor(e, t, r, B = {}) {
1396
+ super(e, t, r, B);
1442
1397
  Q(this, "palette");
1443
1398
  this.palette = new J(this.renderer, this.fontManager.getCharacterColors(" .:-=+*%@#"));
1444
1399
  }
@@ -1446,12 +1401,12 @@ class _ extends p {
1446
1401
  * Sets the characters used for brightness mapping.
1447
1402
  * @param characters The characters to use for brightness mapping, ordered from darkest to brightest.
1448
1403
  */
1449
- characters(A) {
1404
+ characters(e) {
1450
1405
  C.validate(
1451
- this.fontManager.hasAllCharacters(A),
1406
+ this.fontManager.hasAllCharacters(e),
1452
1407
  "One or more characters do not exist in the current font.",
1453
- { method: "characters", providedValue: A }
1454
- ) && (this.options.characters = A, this.palette.setColors(this.fontManager.getCharacterColors(A)));
1408
+ { method: "characters", providedValue: e }
1409
+ ) && (this.options.characters = e, this.palette.setColors(this.fontManager.getCharacterColors(e)));
1455
1410
  }
1456
1411
  /**
1457
1412
  * Sets a fixed color for characters if `characterColorMode` is `fixed`.
@@ -1460,12 +1415,12 @@ class _ extends p {
1460
1415
  * @param b Blue component (0-255).
1461
1416
  * @param a Alpha component (0-255).
1462
1417
  */
1463
- characterColor(A, t = A, r = A, B = 255) {
1418
+ characterColor(e, t = e, r = e, B = 255) {
1464
1419
  C.validate(
1465
- [A, t, r, B].every((E) => E >= 0 && E <= 255),
1420
+ [e, t, r, B].every((E) => E >= 0 && E <= 255),
1466
1421
  "Character color values must be between 0 and 255",
1467
- { method: "characterColor", providedValues: { r: A, g: t, b: r, a: B } }
1468
- ) && (this.options.characterColor = [A, t, r, B]);
1422
+ { method: "characterColor", providedValues: { r: e, g: t, b: r, a: B } }
1423
+ ) && (this.options.characterColor = [e, t, r, B]);
1469
1424
  }
1470
1425
  /**
1471
1426
  * Sets the character color mode.
@@ -1473,12 +1428,12 @@ class _ extends p {
1473
1428
  * - `'fixed'`: Uses a fixed color set by `characterColor()`.
1474
1429
  * @param mode The color mode to use for characters.
1475
1430
  */
1476
- characterColorMode(A) {
1431
+ characterColorMode(e) {
1477
1432
  C.validate(
1478
- ["sampled", "fixed"].includes(A),
1433
+ ["sampled", "fixed"].includes(e),
1479
1434
  "Invalid character color mode. Must be 'sampled' or 'fixed'.",
1480
- { method: "characterColorMode", providedValue: A }
1481
- ) && (this.options.characterColorMode = A);
1435
+ { method: "characterColorMode", providedValue: e }
1436
+ ) && (this.options.characterColorMode = e);
1482
1437
  }
1483
1438
  /**
1484
1439
  * Sets the cell color if `backgroundColorMode` is `fixed`.
@@ -1487,12 +1442,12 @@ class _ extends p {
1487
1442
  * @param b Blue component (0-255).
1488
1443
  * @param a Alpha component (0-255).
1489
1444
  */
1490
- cellColor(A, t = A, r = A, B = 255) {
1445
+ cellColor(e, t = e, r = e, B = 255) {
1491
1446
  C.validate(
1492
- [A, t, r, B].every((E) => E >= 0 && E <= 255),
1447
+ [e, t, r, B].every((E) => E >= 0 && E <= 255),
1493
1448
  "Cell color values must be between 0 and 255",
1494
- { method: "cellColor", providedValues: { r: A, g: t, b: r, a: B } }
1495
- ) && (this.options.backgroundColor = [A, t, r, B]);
1449
+ { method: "cellColor", providedValues: { r: e, g: t, b: r, a: B } }
1450
+ ) && (this.options.backgroundColor = [e, t, r, B]);
1496
1451
  }
1497
1452
  /**
1498
1453
  * Sets the background color mode.
@@ -1500,60 +1455,60 @@ class _ extends p {
1500
1455
  * - `'fixed'`: Uses a fixed color set by `backgroundColor()`.
1501
1456
  * @param mode The color mode to use for background cells.
1502
1457
  */
1503
- cellColorMode(A) {
1458
+ cellColorMode(e) {
1504
1459
  C.validate(
1505
- ["sampled", "fixed"].includes(A),
1460
+ ["sampled", "fixed"].includes(e),
1506
1461
  "Invalid cell color mode. Must be 'sampled' or 'fixed'.",
1507
- { method: "cellColorMode", providedValue: A }
1508
- ) && (this.options.backgroundColorMode = A);
1462
+ { method: "cellColorMode", providedValue: e }
1463
+ ) && (this.options.backgroundColorMode = e);
1509
1464
  }
1510
1465
  /**
1511
1466
  * Swaps the character and cell color.
1512
1467
  * @param invert If `true`, the character color becomes the cell color and vice versa.
1513
1468
  */
1514
- invert(A) {
1469
+ invert(e) {
1515
1470
  C.validate(
1516
- typeof A == "boolean" || typeof A == "number" && Number.isInteger(A),
1471
+ typeof e == "boolean" || typeof e == "number" && Number.isInteger(e),
1517
1472
  "Invert must be a boolean value or an integer (0 for false, any other number for true).",
1518
- { method: "invert", providedValue: A }
1519
- ) && (this.options.invert = !!A);
1473
+ { method: "invert", providedValue: e }
1474
+ ) && (this.options.invert = !!e);
1520
1475
  }
1521
1476
  /**
1522
1477
  * Sets the rotation angle for the characters.
1523
1478
  * @param angle The rotation angle in degrees.
1524
1479
  */
1525
- rotation(A) {
1480
+ rotation(e) {
1526
1481
  C.validate(
1527
- typeof A == "number",
1482
+ typeof e == "number",
1528
1483
  "Rotation angle must be a number.",
1529
- { method: "rotation", providedValue: A }
1530
- ) && (this.options.rotation = A);
1484
+ { method: "rotation", providedValue: e }
1485
+ ) && (this.options.rotation = e);
1531
1486
  }
1532
1487
  /**
1533
1488
  * Flips the characters horizontally.
1534
1489
  * @param flip If `true`, characters are flipped horizontally. If `false`, no flip is applied.
1535
1490
  */
1536
- flipHorizontally(A) {
1491
+ flipHorizontally(e) {
1537
1492
  C.validate(
1538
- typeof A == "boolean" || typeof A == "number" && Number.isInteger(A),
1493
+ typeof e == "boolean" || typeof e == "number" && Number.isInteger(e),
1539
1494
  "Flip horizontally must be a boolean value or an integer (0 for false, any other number for true).",
1540
- { method: "flipHorizontally", providedValue: A }
1541
- ) && (this.options.flipHorizontally = !!A);
1495
+ { method: "flipHorizontally", providedValue: e }
1496
+ ) && (this.options.flipHorizontally = !!e);
1542
1497
  }
1543
1498
  /**
1544
1499
  * Flips the characters vertically.
1545
1500
  * @param flip If `true`, characters are flipped vertically. If `false`, no flip is applied.
1546
1501
  */
1547
- flipVertically(A) {
1502
+ flipVertically(e) {
1548
1503
  C.validate(
1549
- typeof A == "boolean" || typeof A == "number" && Number.isInteger(A),
1504
+ typeof e == "boolean" || typeof e == "number" && Number.isInteger(e),
1550
1505
  "Flip vertically must be a boolean value or an integer (0 for false, any other number for true).",
1551
- { method: "flipVertically", providedValue: A }
1552
- ) && (this.options.flipVertically = !!A);
1506
+ { method: "flipVertically", providedValue: e }
1507
+ ) && (this.options.flipVertically = !!e);
1553
1508
  }
1554
1509
  }
1555
- var W = "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;gl_FragColor=texture2D(u_sketchTexture,cellCenter);}", X = "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;if(brightness<u_brightnessRange.x||brightness>u_brightnessRange.y){gl_FragColor=vec4(0.0);return;}float t=(brightness-u_brightnessRange.x)/(u_brightnessRange.y-u_brightnessRange.x);float idx=clamp(floor(t*u_charPaletteSize.x),0.0,u_charPaletteSize.x-1.0);float u=(idx+0.5)/u_charPaletteSize.x;vec3 charColor=texture2D(u_charPaletteTexture,vec2(u,0.0)).rgb;gl_FragColor=vec4(charColor,color.a);}";
1556
- const K = {
1510
+ var W = "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;gl_FragColor=texture2D(u_sketchTexture,cellCenter);}", K = "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,color.a);}";
1511
+ const X = {
1557
1512
  /** Enable/disable the renderer */
1558
1513
  enabled: !0,
1559
1514
  /** Characters used for brightness mapping (from darkest to brightest) */
@@ -1578,15 +1533,15 @@ const K = {
1578
1533
  brightnessRange: [0, 255]
1579
1534
  };
1580
1535
  class b extends _ {
1581
- constructor(A, t, r) {
1582
- super(A, t, r, { ...K });
1536
+ constructor(e, t, r) {
1537
+ super(e, t, r, { ...X });
1583
1538
  Q(this, "sampleShader");
1584
1539
  Q(this, "charMappingShader");
1585
1540
  Q(this, "sampleFramebuffer");
1586
- this.sampleShader = new c(A.context, u, W), this.charMappingShader = new c(A.context, u, X), this.sampleFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
1541
+ this.sampleShader = new l(e.context, P, W), this.charMappingShader = new l(e.context, P, K), this.sampleFramebuffer = this.renderer.createFramebuffer(this.grid.cols, this.grid.rows);
1587
1542
  }
1588
- convert(A) {
1589
- this.sampleFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.sampleShader), this.renderer.setUniform("u_sketchTexture", A), this.renderer.setUniform("u_gridCellDimensions", [this.grid.cols, this.grid.rows]), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this.sampleFramebuffer.end(), this._primaryColorFramebuffer.begin(), this.options.characterColorMode === "fixed" ? this.renderer.background(this.options.characterColor[0], this.options.characterColor[1], this.options.characterColor[2], this.options.characterColor[3]) : (this.renderer.clear(), this.renderer.image(this.sampleFramebuffer, 0, 0, this.grid.cols, this.grid.rows)), this._primaryColorFramebuffer.end(), this._secondaryColorFramebuffer.begin(), this.options.backgroundColorMode === "fixed" ? this.renderer.background(this.options.backgroundColor[0], this.options.backgroundColor[1], this.options.backgroundColor[2], this.options.backgroundColor[3]) : (this.renderer.clear(), this.renderer.image(this.sampleFramebuffer, 0, 0, this.grid.cols, this.grid.rows)), this._secondaryColorFramebuffer.end(), this._transformFramebuffer.begin(), this.renderer.background(
1543
+ convert(e) {
1544
+ this.sampleFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this.sampleShader), this.renderer.setUniform("u_sketchTexture", e), this.renderer.setUniform("u_gridCellDimensions", [this.grid.cols, this.grid.rows]), this.renderer.rect(0, 0, this.grid.cols, this.grid.rows), this.sampleFramebuffer.end(), this._primaryColorFramebuffer.begin(), this.options.characterColorMode === "fixed" ? this.renderer.background(this.options.characterColor[0], this.options.characterColor[1], this.options.characterColor[2], this.options.characterColor[3]) : (this.renderer.clear(), this.renderer.image(this.sampleFramebuffer, 0, 0, this.grid.cols, this.grid.rows)), this._primaryColorFramebuffer.end(), this._secondaryColorFramebuffer.begin(), this.options.backgroundColorMode === "fixed" ? this.renderer.background(this.options.backgroundColor[0], this.options.backgroundColor[1], this.options.backgroundColor[2], this.options.backgroundColor[3]) : (this.renderer.clear(), this.renderer.image(this.sampleFramebuffer, 0, 0, this.grid.cols, this.grid.rows)), this._secondaryColorFramebuffer.end(), this._transformFramebuffer.begin(), this.renderer.background(
1590
1545
  this.options.invert ? 255 : 0,
1591
1546
  this.options.flipHorizontally ? 255 : 0,
1592
1547
  this.options.flipVertically ? 255 : 0
@@ -1602,12 +1557,12 @@ class b extends _ {
1602
1557
  *
1603
1558
  * @param range Array of two numbers `[min, max]`, where `min` is darkest and `max` is brightest.
1604
1559
  */
1605
- brightnessRange(A) {
1560
+ brightnessRange(e) {
1606
1561
  C.validate(
1607
- Array.isArray(A) && A.length === 2 && A.every((t) => typeof t == "number" && t >= 0 && t <= 255),
1562
+ Array.isArray(e) && e.length === 2 && e.every((t) => typeof t == "number" && t >= 0 && t <= 255),
1608
1563
  "Brightness range must be an array of two numbers between 0 and 255.",
1609
- { method: "brightnessRange", providedValue: A }
1610
- ) && (this.options.brightnessRange = A);
1564
+ { method: "brightnessRange", providedValue: e }
1565
+ ) && (this.options.brightnessRange = e);
1611
1566
  }
1612
1567
  }
1613
1568
  const q = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -1616,41 +1571,43 @@ const q = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1616
1571
  TextmodeConverter: p,
1617
1572
  TextmodeFeatureConverter: _
1618
1573
  }, Symbol.toStringTag, { value: "Module" }));
1619
- var Z = "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;uniform float u_pixelRatio;mat2 rotate2D(float angle){float s=sin(angle);float c=cos(angle);return mat2(c,-s,s,c);}void main(){vec2 logicalFragCoord=gl_FragCoord.xy/u_pixelRatio;vec2 adjustedCoord=(logicalFragCoord)/u_gridPixelDimensions;vec2 gridCoord=adjustedCoord*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 charIndexTexCoord=(cellCoord+vec2(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){if(u_backgroundMode==0){gl_FragColor=vec4(0.0,0.0,0.0,0.0);}else if(u_backgroundMode==1){vec2 captureTexCoord=logicalFragCoord/u_captureDimensions;gl_FragColor=texture2D(u_captureTexture,captureTexCoord);}return;}int charIndex=int(encodedIndexVec.r*255.0+0.5)+int(encodedIndexVec.g*255.0+0.5)*256;int charCol=charIndex-(charIndex/int(u_charsetDimensions.x))*int(u_charsetDimensions.x);int charRow=charIndex/int(u_charsetDimensions.x);vec2 charCoord=vec2(float(charCol)/u_charsetDimensions.x,float(charRow)/u_charsetDimensions.y);vec4 rotationColor=texture2D(u_rotationTexture,charIndexTexCoord);float redValue=rotationColor.r*255.0;float greenValue=rotationColor.g*255.0;float scaledAngle=redValue+(greenValue/255.0);float angleDegrees=(scaledAngle*360.0)/255.0;float rotationAngle=angleDegrees*3.14159265359/180.0;vec2 fractionalPart=fract(gridCoord)-0.5;if(flipHorizontal){fractionalPart.x=-fractionalPart.x;}if(flipVertical){fractionalPart.y=-fractionalPart.y;}fractionalPart=rotate2D(rotationAngle)*fractionalPart;fractionalPart+=0.5;vec2 cellMin=charCoord;vec2 cellMax=charCoord+vec2(1.0/u_charsetDimensions.x,1.0/u_charsetDimensions.y);vec2 texCoord=charCoord+fractionalPart*vec2(1.0/u_charsetDimensions.x,1.0/u_charsetDimensions.y);bool outsideBounds=any(lessThan(texCoord,cellMin))||any(greaterThan(texCoord,cellMax));if(outsideBounds){gl_FragColor=isInverted ? primaryColor : secondaryColor;return;}vec4 charTexel=texture2D(u_characterTexture,texCoord);float inv=isInverted ? 1.0 : 0.0;charTexel.rgb=mix(charTexel.rgb,1.0-charTexel.rgb,inv);gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}";
1574
+ var Z = "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;uniform float u_pixelRatio;void main(){vec2 logicalPos=gl_FragCoord.xy/u_pixelRatio;vec2 gridCoord=(logicalPos/u_gridPixelDimensions)*u_gridCellDimensions;vec2 cellCoord=floor(gridCoord);vec2 texCoord=(cellCoord+0.5)/u_gridCellDimensions;vec4 primaryColor=texture2D(u_primaryColorTexture,texCoord);vec4 secondaryColor=texture2D(u_secondaryColorTexture,texCoord);vec4 transform=texture2D(u_transformTexture,texCoord);vec4 charData=texture2D(u_asciiCharacterTexture,texCoord);if(charData.a<0.01){gl_FragColor=u_backgroundMode==0 ? vec4(0.0):texture2D(u_captureTexture,logicalPos/u_captureDimensions);return;}int charIndex=int(charData.r*255.0+0.5)+int(charData.g*255.0+0.5)*256;vec2 charPos=vec2(mod(float(charIndex),u_charsetDimensions.x),floor(float(charIndex)/u_charsetDimensions.x))/u_charsetDimensions;vec4 rotation=texture2D(u_rotationTexture,texCoord);float angle=((rotation.r*255.0+rotation.g)*360.0/255.0)*0.017453293;vec2 frac=fract(gridCoord)-0.5;frac.x*=transform.g>0.5 ?-1.0 : 1.0;frac.y*=transform.b>0.5 ?-1.0 : 1.0;float s=sin(angle),c=cos(angle);frac=mat2(c,-s,s,c)*frac+0.5;vec2 cellSize=1.0/u_charsetDimensions;vec2 finalTexCoord=charPos+frac*cellSize;if(any(lessThan(frac,vec2(0.0)))||any(greaterThan(frac,vec2(1.0)))){gl_FragColor=transform.r>0.5 ? primaryColor : secondaryColor;}else{vec4 charTexel=texture2D(u_characterTexture,finalTexCoord);float inv=transform.r>0.5 ? 1.0 : 0.0;charTexel.rgb=mix(charTexel.rgb,1.0-charTexel.rgb,inv);gl_FragColor=mix(secondaryColor,primaryColor,charTexel);}}";
1620
1575
  class j {
1621
- constructor(e, A, t) {
1576
+ constructor(A, e, t) {
1622
1577
  Q(this, "renderer");
1623
1578
  Q(this, "font");
1624
1579
  Q(this, "grid");
1625
1580
  Q(this, "converters");
1626
1581
  Q(this, "_resultFramebuffer");
1627
1582
  Q(this, "_asciiShader");
1628
- this.renderer = e, this.font = A, this.grid = t, this._asciiShader = this.renderer.createShader(u, Z), this.converters = {
1629
- brightness: new b(e, A, t)
1583
+ this.renderer = A, this.font = e, this.grid = t, this._asciiShader = this.renderer.createShader(P, Z), this.converters = {
1584
+ brightness: new b(A, e, t)
1630
1585
  }, this._resultFramebuffer = this.renderer.createFramebuffer(this.grid.width, this.grid.height);
1631
1586
  }
1632
- render(e) {
1633
- for (const A of Object.values(this.converters))
1634
- A.convert(e);
1635
- this._resultFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this._asciiShader), this.renderer.setUniform("u_characterTexture", this.font.fontFramebuffer), this.renderer.setUniform("u_charsetDimensions", [this.font.textureColumns, this.font.textureRows]), this.renderer.setUniform("u_asciiCharacterTexture", this.converters.brightness.characterFramebuffer.texture), this.renderer.setUniform("u_primaryColorTexture", this.converters.brightness.primaryColorFramebuffer.texture), this.renderer.setUniform("u_secondaryColorTexture", this.converters.brightness.secondaryColorFramebuffer.texture), this.renderer.setUniform("u_transformTexture", this.converters.brightness.transformFramebuffer.texture), this.renderer.setUniform("u_rotationTexture", this.converters.brightness.rotationFramebuffer.texture), this.renderer.setUniform("u_captureTexture", e.texture), this.renderer.setUniform("u_backgroundMode", !1), this.renderer.setUniform("u_captureDimensions", [e.width, e.height]), this.renderer.setUniform("u_gridCellDimensions", [this.grid.cols, this.grid.rows]), this.renderer.setUniform("u_gridPixelDimensions", [this.grid.width, this.grid.height]), this.renderer.setUniform("u_pixelRatio", 1), this.renderer.rect(0, 0, this._resultFramebuffer.width, this._resultFramebuffer.height), this._resultFramebuffer.end();
1587
+ render(A) {
1588
+ for (const r of Object.values(this.converters))
1589
+ r.convert(A);
1590
+ this._resultFramebuffer.begin(), this.renderer.clear(), this.renderer.shader(this._asciiShader), this.renderer.setUniform("u_characterTexture", this.font.fontFramebuffer), this.renderer.setUniform("u_charsetDimensions", [this.font.textureColumns, this.font.textureRows]), this.renderer.setUniform("u_asciiCharacterTexture", this.converters.brightness.characterFramebuffer.texture), this.renderer.setUniform("u_primaryColorTexture", this.converters.brightness.primaryColorFramebuffer.texture), this.renderer.setUniform("u_secondaryColorTexture", this.converters.brightness.secondaryColorFramebuffer.texture), this.renderer.setUniform("u_transformTexture", this.converters.brightness.transformFramebuffer.texture), this.renderer.setUniform("u_rotationTexture", this.converters.brightness.rotationFramebuffer.texture), this.renderer.setUniform("u_captureTexture", 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]);
1591
+ const e = this.renderer.context.canvas, t = e.width / e.offsetWidth;
1592
+ this.renderer.setUniform("u_pixelRatio", t), this.renderer.rect(0, 0, this._resultFramebuffer.width, this._resultFramebuffer.height), this._resultFramebuffer.end();
1636
1593
  }
1637
- get(e) {
1638
- const A = this.converters[e];
1639
- if (!A)
1640
- throw new Error(`Converter "${e}" not found in pipeline.`);
1641
- return A;
1594
+ get(A) {
1595
+ const e = this.converters[A];
1596
+ if (!e)
1597
+ throw new Error(`Converter "${A}" not found in pipeline.`);
1598
+ return e;
1642
1599
  }
1643
1600
  get texture() {
1644
1601
  return this._resultFramebuffer;
1645
1602
  }
1646
1603
  resize() {
1647
1604
  this._resultFramebuffer.resize(this.grid.width, this.grid.height);
1648
- for (const e of Object.values(this.converters))
1649
- e.resize();
1605
+ for (const A of Object.values(this.converters))
1606
+ A.resize();
1650
1607
  }
1651
1608
  }
1652
- class d {
1653
- constructor(e, A = {}) {
1609
+ class f {
1610
+ constructor(A, e = {}) {
1654
1611
  /** The canvas element to capture content from */
1655
1612
  Q(this, "captureCanvas");
1656
1613
  /** Our WebGL overlay canvas manager */
@@ -1670,7 +1627,7 @@ class d {
1670
1627
  Q(this, "_frameRate", 0);
1671
1628
  Q(this, "lastRenderTime", 0);
1672
1629
  Q(this, "_pipeline");
1673
- this.captureCanvas = e, this.textmodeCanvas = new N(e), this._mode = A.renderMode ?? "auto", this._frameRateLimit = A.frameRate ?? 120, this.frameInterval = 1e3 / this._frameRateLimit, this.renderer = new R(this.textmodeCanvas.getWebGLContext()), this.canvasFramebuffer = this.renderer.createFramebuffer(e.width, e.height), this._font = new V(this.renderer, A.fontSize ?? 16);
1630
+ this.captureCanvas = A, this.textmodeCanvas = new V(A), this._mode = e.renderMode ?? "auto", this._frameRateLimit = e.frameRate ?? 120, this.frameInterval = 1e3 / this._frameRateLimit, this.renderer = new R(this.textmodeCanvas.getWebGLContext()), this.canvasFramebuffer = this.renderer.createFramebuffer(this.textmodeCanvas.width, this.textmodeCanvas.height), this._font = new k(this.renderer, e.fontSize ?? 16);
1674
1631
  }
1675
1632
  /**
1676
1633
  * Static factory method for creating and initializing a Textmodifier instance.
@@ -1678,11 +1635,11 @@ class d {
1678
1635
  * @param opts Optional configuration options for the `Textmodifier` instance.
1679
1636
  * @ignore
1680
1637
  */
1681
- static async create(e, A = {}) {
1682
- const t = new d(e, A);
1638
+ static async create(A, e = {}) {
1639
+ const t = new f(A, e);
1683
1640
  await t._font.initialize();
1684
1641
  const r = t._font.maxGlyphDimensions;
1685
- return t._grid = new k(t.captureCanvas, r.width, r.height), t._pipeline = new j(t.renderer, t._font, t._grid), t.setupEventListeners(), t.startAutoRendering(), t;
1642
+ return t._grid = new N(t.captureCanvas, r.width, r.height), t._pipeline = new j(t.renderer, t._font, t._grid), t.setupEventListeners(), t.startAutoRendering(), t;
1686
1643
  }
1687
1644
  setupEventListeners() {
1688
1645
  window.addEventListener("resize", this.resize.bind(this)), window.ResizeObserver && (this.resizeObserver = new ResizeObserver(() => {
@@ -1693,10 +1650,10 @@ class d {
1693
1650
  * Update the font used for rendering.
1694
1651
  * @param fontUrl The URL of the font to load.
1695
1652
  */
1696
- async loadFont(e) {
1697
- return this._font.loadFont(e).then(() => {
1698
- const A = this._font.maxGlyphDimensions;
1699
- this._grid.resizeCellPixelDimensions(A.width, A.height), this._pipeline.resize(), this.renderer.resetViewport();
1653
+ async loadFont(A) {
1654
+ return this._font.loadFont(A).then(() => {
1655
+ const e = this._font.maxGlyphDimensions;
1656
+ this._grid.resizeCellPixelDimensions(e.width, e.height), this._pipeline.resize();
1700
1657
  });
1701
1658
  }
1702
1659
  /**
@@ -1709,28 +1666,28 @@ class d {
1709
1666
  this.measureFrameRate(), this.canvasFramebuffer.update(this.captureCanvas), this._pipeline.render(this.canvasFramebuffer), this.renderer.background(0), this.renderer.image(this._pipeline.texture, this._grid.offsetX, this._grid.offsetY, this._pipeline.texture.width, this._pipeline.texture.height);
1710
1667
  }
1711
1668
  resize() {
1712
- this.textmodeCanvas.resize(), this.canvasFramebuffer.resize(this.textmodeCanvas.width, this.textmodeCanvas.height), this._grid.updateCanvas(this.textmodeCanvas.canvas), this._pipeline.resize(), this.renderer.resetViewport(), this._mode !== "manual" && this.render();
1669
+ 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();
1713
1670
  }
1714
1671
  /**
1715
1672
  * Start automatic rendering
1716
1673
  */
1717
1674
  startAutoRendering() {
1718
1675
  if (this._mode !== "auto") return;
1719
- const e = (A) => {
1720
- A - this.lastFrameTime >= this.frameInterval && (this.render(), this.lastFrameTime = A), this.animationFrameId = requestAnimationFrame(e);
1676
+ const A = (e) => {
1677
+ e - this.lastFrameTime >= this.frameInterval && (this.render(), this.lastFrameTime = e), this.animationFrameId = requestAnimationFrame(A);
1721
1678
  };
1722
- this.animationFrameId = requestAnimationFrame(e);
1679
+ this.animationFrameId = requestAnimationFrame(A);
1723
1680
  }
1724
1681
  /**
1725
1682
  * Update FPS measurement - works for both auto and manual modes
1726
1683
  */
1727
1684
  measureFrameRate() {
1728
- const e = performance.now();
1685
+ const A = performance.now();
1729
1686
  if (this.lastRenderTime > 0) {
1730
- const A = e - this.lastRenderTime;
1731
- this._frameRate = 1e3 / A;
1687
+ const e = A - this.lastRenderTime;
1688
+ this._frameRate = 1e3 / e;
1732
1689
  }
1733
- this.lastRenderTime = e;
1690
+ this.lastRenderTime = A;
1734
1691
  }
1735
1692
  /**
1736
1693
  * Stop automatic rendering
@@ -1741,21 +1698,21 @@ class d {
1741
1698
  /**
1742
1699
  * Change the rendering mode.
1743
1700
  */
1744
- renderMode(e) {
1745
- if (this._mode !== e) {
1746
- if (e === void 0)
1701
+ renderMode(A) {
1702
+ if (this._mode !== A) {
1703
+ if (A === void 0)
1747
1704
  return this._mode;
1748
- this.stopAutoRendering(), this._mode = e, e === "auto" && this.startAutoRendering();
1705
+ this.stopAutoRendering(), this._mode = A, A === "auto" && this.startAutoRendering();
1749
1706
  }
1750
1707
  }
1751
1708
  /**
1752
1709
  * Set the maximum frame rate for auto rendering. If called without arguments, returns the current measured frame rate.
1753
1710
  * @param fps The maximum frames per second for auto rendering.
1754
1711
  */
1755
- frameRate(e) {
1756
- if (e === void 0)
1712
+ frameRate(A) {
1713
+ if (A === void 0)
1757
1714
  return this._frameRate;
1758
- this._frameRateLimit = e, this.frameInterval = 1e3 / e;
1715
+ this._frameRateLimit = A, this.frameInterval = 1e3 / A;
1759
1716
  }
1760
1717
  converter() {
1761
1718
  return this._pipeline.get("brightness");
@@ -1777,43 +1734,43 @@ class d {
1777
1734
  return this._pipeline;
1778
1735
  }
1779
1736
  }
1780
- class f {
1737
+ class d {
1781
1738
  /**
1782
1739
  * Create a {@link Textmodifier} instance to apply textmode rendering to a given canvas.
1783
1740
  * @param canvas The HTML canvas element to capture content from.
1784
1741
  * @param opts Optional configuration options for the Textmodifier instance.
1785
1742
  * @returns A Promise that resolves to a Textmodifier instance.
1786
1743
  */
1787
- static async create(e, A = {}) {
1788
- return d.create(e, A);
1744
+ static async create(A, e = {}) {
1745
+ return f.create(A, e);
1789
1746
  }
1790
1747
  /**
1791
1748
  * Set the global error handling level for the library. This applies to all `Textmodifier` instances.
1792
1749
  * @param level The error handling level to set.
1793
1750
  */
1794
- static setErrorLevel(e) {
1795
- C.setGlobalLevel(e);
1751
+ static setErrorLevel(A) {
1752
+ C.setGlobalLevel(A);
1796
1753
  }
1797
1754
  /**
1798
1755
  * The current version of the library.
1799
1756
  */
1800
1757
  static get version() {
1801
- return "0.0.6";
1758
+ return "0.0.7";
1802
1759
  }
1803
1760
  constructor() {
1804
1761
  throw new Error("Textmode is a static class and cannot be instantiated.");
1805
1762
  }
1806
1763
  }
1807
- const AA = f.create, eA = f.setErrorLevel, tA = f.version;
1764
+ const AA = d.create, eA = d.setErrorLevel, tA = d.version;
1808
1765
  export {
1809
- N as TextmodeCanvas,
1766
+ V as TextmodeCanvas,
1810
1767
  q as TextmodeConverters,
1811
- T as TextmodeErrorLevel,
1812
- V as TextmodeFont,
1813
- k as TextmodeGrid,
1814
- d as Textmodifier,
1768
+ M as TextmodeErrorLevel,
1769
+ k as TextmodeFont,
1770
+ N as TextmodeGrid,
1771
+ f as Textmodifier,
1815
1772
  AA as create,
1816
1773
  eA as setErrorLevel,
1817
- f as textmode,
1774
+ d as textmode,
1818
1775
  tA as version
1819
1776
  };