textmode.js 0.0.6 → 0.0.7

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
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 {
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
109
  class M {
110
- constructor(e, A, t, r = {}) {
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 M(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,7 +1138,7 @@ 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.
@@ -1208,8 +1159,8 @@ class k {
1208
1159
  * @param newCellHeight The new cell height.
1209
1160
  * @ignore
1210
1161
  */
1211
- resizeCellPixelDimensions(e, A) {
1212
- [this._cellWidth, this._cellHeight] = [e, A], this.reset();
1162
+ resizeCellPixelDimensions(A, e) {
1163
+ [this._cellWidth, this._cellHeight] = [A, e], this.reset();
1213
1164
  }
1214
1165
  /**
1215
1166
  * Re-assign the grid dimensions and resize the grid.
@@ -1219,8 +1170,8 @@ class k {
1219
1170
  * @param newRows The new number of rows.
1220
1171
  * @ignore
1221
1172
  */
1222
- resizeGridDimensions(e, A) {
1223
- this._fixedDimensions = !0, [this._cols, this._rows] = [e, A], this._resizeGrid();
1173
+ resizeGridDimensions(A, e) {
1174
+ this._fixedDimensions = !0, [this._cols, this._rows] = [A, e], this._resizeGrid();
1224
1175
  }
1225
1176
  /**
1226
1177
  * Make the grid dimensions flexible again, and `reset()` the grid.
@@ -1234,8 +1185,8 @@ class k {
1234
1185
  * @param canvas The new canvas element to use for the grid.
1235
1186
  * @ignore
1236
1187
  */
1237
- updateCanvas(e) {
1238
- this._canvas = e, this._fixedDimensions ? this._resizeGrid() : this.reset();
1188
+ resize() {
1189
+ this._fixedDimensions ? this._resizeGrid() : this.reset();
1239
1190
  }
1240
1191
  /**
1241
1192
  * Gets or sets whether the grid dimensions *(columns and rows)* are fixed or responsive based on the canvas dimensions.
@@ -1243,10 +1194,10 @@ class k {
1243
1194
  * @returns If no parameter is provided, returns `true` if the grid dimensions are fixed, or `false` if they are responsive.
1244
1195
  * @ignore
1245
1196
  */
1246
- fixedDimensions(e) {
1247
- if (e === void 0)
1197
+ fixedDimensions(A) {
1198
+ if (A === void 0)
1248
1199
  return this._fixedDimensions;
1249
- this._fixedDimensions = e;
1200
+ this._fixedDimensions = A;
1250
1201
  }
1251
1202
  /** Returns the width of each cell in the grid. */
1252
1203
  get cellWidth() {
@@ -1281,47 +1232,47 @@ class k {
1281
1232
  return this._offsetY;
1282
1233
  }
1283
1234
  }
1284
- class N {
1285
- constructor(e) {
1235
+ class V {
1236
+ constructor(A) {
1286
1237
  Q(this, "webglCanvas");
1287
1238
  Q(this, "captureCanvas");
1288
- this.captureCanvas = e, this.webglCanvas = this.createOverlayCanvas();
1239
+ this.captureCanvas = A, this.webglCanvas = this.createOverlayCanvas();
1289
1240
  }
1290
1241
  generateUniqueCanvasId() {
1291
- let e = 0, A = `textmodeCanvas${e}`;
1292
- for (; document.getElementById(A); )
1293
- e++, A = `textmodeCanvas${e}`;
1294
- return A;
1242
+ let A = 0, e = `textmodeCanvas${A}`;
1243
+ for (; document.getElementById(e); )
1244
+ A++, e = `textmodeCanvas${A}`;
1245
+ return e;
1295
1246
  }
1296
1247
  createOverlayCanvas() {
1297
1248
  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();
1249
+ const A = document.createElement("canvas");
1250
+ A.width = this.captureCanvas.width, A.height = this.captureCanvas.height, A.className = "textmodeCanvas", A.id = this.generateUniqueCanvasId(), A.style.position = "absolute", A.style.pointerEvents = "none";
1251
+ const e = window.getComputedStyle(this.captureCanvas);
1252
+ let t = parseInt(e.zIndex || "0", 10);
1253
+ isNaN(t) && (t = 0), A.style.zIndex = (t + 1).toString();
1303
1254
  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;
1255
+ return A.style.width = r.width + "px", A.style.height = r.height + "px", this.positionOverlayCanvas(A), (B = this.captureCanvas.parentNode) == null || B.insertBefore(A, this.captureCanvas.nextSibling), A;
1305
1256
  }
1306
- positionOverlayCanvas(e) {
1307
- const A = this.captureCanvas.getBoundingClientRect();
1257
+ positionOverlayCanvas(A) {
1258
+ const e = this.captureCanvas.getBoundingClientRect();
1308
1259
  let t = this.captureCanvas.offsetParent;
1309
1260
  if (t && t !== document.body) {
1310
1261
  const r = t.getBoundingClientRect();
1311
- e.style.top = A.top - r.top + "px", e.style.left = A.left - r.left + "px";
1262
+ A.style.top = e.top - r.top + "px", A.style.left = e.left - r.left + "px";
1312
1263
  } else
1313
- e.style.top = A.top + window.scrollY + "px", e.style.left = A.left + window.scrollX + "px";
1264
+ A.style.top = e.top + window.scrollY + "px", A.style.left = e.left + window.scrollX + "px";
1314
1265
  }
1315
1266
  resize() {
1316
1267
  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);
1268
+ const A = this.captureCanvas.getBoundingClientRect();
1269
+ this.webglCanvas.style.width = A.width + "px", this.webglCanvas.style.height = A.height + "px", this.positionOverlayCanvas(this.webglCanvas);
1319
1270
  }
1320
1271
  /**
1321
1272
  * Get the WebGL context for the overlay canvas
1322
1273
  */
1323
1274
  getWebGLContext() {
1324
- const e = {
1275
+ const A = {
1325
1276
  alpha: !0,
1326
1277
  premultipliedAlpha: !1,
1327
1278
  preserveDrawingBuffer: !0,
@@ -1329,10 +1280,10 @@ class N {
1329
1280
  depth: !1,
1330
1281
  stencil: !1,
1331
1282
  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;
1283
+ }, e = this.webglCanvas.getContext("webgl2", A) || this.webglCanvas.getContext("webgl", A);
1284
+ if (!e)
1285
+ throw new D("WebGL context could not be created. Ensure your browser supports WebGL.");
1286
+ return e;
1336
1287
  }
1337
1288
  // Getters
1338
1289
  get canvas() {
@@ -1346,7 +1297,7 @@ class N {
1346
1297
  }
1347
1298
  }
1348
1299
  class p {
1349
- constructor(e, A, t, r = {}) {
1300
+ constructor(A, e, t, r = {}) {
1350
1301
  Q(this, "renderer");
1351
1302
  Q(this, "fontManager");
1352
1303
  Q(this, "grid");
@@ -1356,7 +1307,7 @@ class p {
1356
1307
  Q(this, "_rotationFramebuffer");
1357
1308
  Q(this, "_transformFramebuffer");
1358
1309
  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);
1310
+ 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
1311
  }
1361
1312
  /**
1362
1313
  * Resizes all internal framebuffers to match the grid dimensions.
@@ -1387,12 +1338,12 @@ class J {
1387
1338
  * @param renderer The renderer instance.
1388
1339
  * @param colors The RGB colors to store as [r, g, b] arrays where values are 0-255.
1389
1340
  */
1390
- constructor(e, A) {
1341
+ constructor(A, e) {
1391
1342
  /** The framebuffer used to store the color palette. */
1392
1343
  Q(this, "_framebuffer");
1393
1344
  Q(this, "_renderer");
1394
1345
  Q(this, "_colors");
1395
- this._renderer = e, this._colors = A;
1346
+ this._renderer = A, this._colors = e;
1396
1347
  const t = Math.max(this._colors.length, 1);
1397
1348
  this._framebuffer = this._renderer.createFramebuffer(t, 1), this._updateFramebuffer();
1398
1349
  }
@@ -1401,21 +1352,21 @@ class J {
1401
1352
  */
1402
1353
  _updateFramebuffer() {
1403
1354
  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++) {
1355
+ const A = Math.max(this._colors.length, 1), e = 1;
1356
+ this._framebuffer.width !== A && this._framebuffer.resize(A, e);
1357
+ const t = new Uint8Array(A * e * 4);
1358
+ for (let r = 0; r < A; r++) {
1408
1359
  const B = r < this._colors.length ? this._colors[r] : [0, 0, 0], E = r * 4;
1409
1360
  t[E] = B[0], t[E + 1] = B[1], t[E + 2] = B[2], t[E + 3] = 255;
1410
1361
  }
1411
- this._framebuffer.updateWithPixelData(t, e, A);
1362
+ this._framebuffer.updatePixels(t, A, e);
1412
1363
  }
1413
1364
  /**
1414
1365
  * Sets the colors of the palette and updates the framebuffer.
1415
1366
  * @param newColors The new RGB colors to set as [r, g, b] arrays.
1416
1367
  */
1417
- setColors(e) {
1418
- this._colors = e, this._updateFramebuffer();
1368
+ setColors(A) {
1369
+ this._colors = A, this._updateFramebuffer();
1419
1370
  }
1420
1371
  /**
1421
1372
  * Get the colors of the palette.
@@ -1437,8 +1388,8 @@ class J {
1437
1388
  }
1438
1389
  }
1439
1390
  class _ extends p {
1440
- constructor(A, t, r, B = {}) {
1441
- super(A, t, r, B);
1391
+ constructor(e, t, r, B = {}) {
1392
+ super(e, t, r, B);
1442
1393
  Q(this, "palette");
1443
1394
  this.palette = new J(this.renderer, this.fontManager.getCharacterColors(" .:-=+*%@#"));
1444
1395
  }
@@ -1446,12 +1397,12 @@ class _ extends p {
1446
1397
  * Sets the characters used for brightness mapping.
1447
1398
  * @param characters The characters to use for brightness mapping, ordered from darkest to brightest.
1448
1399
  */
1449
- characters(A) {
1400
+ characters(e) {
1450
1401
  C.validate(
1451
- this.fontManager.hasAllCharacters(A),
1402
+ this.fontManager.hasAllCharacters(e),
1452
1403
  "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)));
1404
+ { method: "characters", providedValue: e }
1405
+ ) && (this.options.characters = e, this.palette.setColors(this.fontManager.getCharacterColors(e)));
1455
1406
  }
1456
1407
  /**
1457
1408
  * Sets a fixed color for characters if `characterColorMode` is `fixed`.
@@ -1460,12 +1411,12 @@ class _ extends p {
1460
1411
  * @param b Blue component (0-255).
1461
1412
  * @param a Alpha component (0-255).
1462
1413
  */
1463
- characterColor(A, t = A, r = A, B = 255) {
1414
+ characterColor(e, t = e, r = e, B = 255) {
1464
1415
  C.validate(
1465
- [A, t, r, B].every((E) => E >= 0 && E <= 255),
1416
+ [e, t, r, B].every((E) => E >= 0 && E <= 255),
1466
1417
  "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]);
1418
+ { method: "characterColor", providedValues: { r: e, g: t, b: r, a: B } }
1419
+ ) && (this.options.characterColor = [e, t, r, B]);
1469
1420
  }
1470
1421
  /**
1471
1422
  * Sets the character color mode.
@@ -1473,12 +1424,12 @@ class _ extends p {
1473
1424
  * - `'fixed'`: Uses a fixed color set by `characterColor()`.
1474
1425
  * @param mode The color mode to use for characters.
1475
1426
  */
1476
- characterColorMode(A) {
1427
+ characterColorMode(e) {
1477
1428
  C.validate(
1478
- ["sampled", "fixed"].includes(A),
1429
+ ["sampled", "fixed"].includes(e),
1479
1430
  "Invalid character color mode. Must be 'sampled' or 'fixed'.",
1480
- { method: "characterColorMode", providedValue: A }
1481
- ) && (this.options.characterColorMode = A);
1431
+ { method: "characterColorMode", providedValue: e }
1432
+ ) && (this.options.characterColorMode = e);
1482
1433
  }
1483
1434
  /**
1484
1435
  * Sets the cell color if `backgroundColorMode` is `fixed`.
@@ -1487,12 +1438,12 @@ class _ extends p {
1487
1438
  * @param b Blue component (0-255).
1488
1439
  * @param a Alpha component (0-255).
1489
1440
  */
1490
- cellColor(A, t = A, r = A, B = 255) {
1441
+ cellColor(e, t = e, r = e, B = 255) {
1491
1442
  C.validate(
1492
- [A, t, r, B].every((E) => E >= 0 && E <= 255),
1443
+ [e, t, r, B].every((E) => E >= 0 && E <= 255),
1493
1444
  "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]);
1445
+ { method: "cellColor", providedValues: { r: e, g: t, b: r, a: B } }
1446
+ ) && (this.options.backgroundColor = [e, t, r, B]);
1496
1447
  }
1497
1448
  /**
1498
1449
  * Sets the background color mode.
@@ -1500,60 +1451,60 @@ class _ extends p {
1500
1451
  * - `'fixed'`: Uses a fixed color set by `backgroundColor()`.
1501
1452
  * @param mode The color mode to use for background cells.
1502
1453
  */
1503
- cellColorMode(A) {
1454
+ cellColorMode(e) {
1504
1455
  C.validate(
1505
- ["sampled", "fixed"].includes(A),
1456
+ ["sampled", "fixed"].includes(e),
1506
1457
  "Invalid cell color mode. Must be 'sampled' or 'fixed'.",
1507
- { method: "cellColorMode", providedValue: A }
1508
- ) && (this.options.backgroundColorMode = A);
1458
+ { method: "cellColorMode", providedValue: e }
1459
+ ) && (this.options.backgroundColorMode = e);
1509
1460
  }
1510
1461
  /**
1511
1462
  * Swaps the character and cell color.
1512
1463
  * @param invert If `true`, the character color becomes the cell color and vice versa.
1513
1464
  */
1514
- invert(A) {
1465
+ invert(e) {
1515
1466
  C.validate(
1516
- typeof A == "boolean" || typeof A == "number" && Number.isInteger(A),
1467
+ typeof e == "boolean" || typeof e == "number" && Number.isInteger(e),
1517
1468
  "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);
1469
+ { method: "invert", providedValue: e }
1470
+ ) && (this.options.invert = !!e);
1520
1471
  }
1521
1472
  /**
1522
1473
  * Sets the rotation angle for the characters.
1523
1474
  * @param angle The rotation angle in degrees.
1524
1475
  */
1525
- rotation(A) {
1476
+ rotation(e) {
1526
1477
  C.validate(
1527
- typeof A == "number",
1478
+ typeof e == "number",
1528
1479
  "Rotation angle must be a number.",
1529
- { method: "rotation", providedValue: A }
1530
- ) && (this.options.rotation = A);
1480
+ { method: "rotation", providedValue: e }
1481
+ ) && (this.options.rotation = e);
1531
1482
  }
1532
1483
  /**
1533
1484
  * Flips the characters horizontally.
1534
1485
  * @param flip If `true`, characters are flipped horizontally. If `false`, no flip is applied.
1535
1486
  */
1536
- flipHorizontally(A) {
1487
+ flipHorizontally(e) {
1537
1488
  C.validate(
1538
- typeof A == "boolean" || typeof A == "number" && Number.isInteger(A),
1489
+ typeof e == "boolean" || typeof e == "number" && Number.isInteger(e),
1539
1490
  "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);
1491
+ { method: "flipHorizontally", providedValue: e }
1492
+ ) && (this.options.flipHorizontally = !!e);
1542
1493
  }
1543
1494
  /**
1544
1495
  * Flips the characters vertically.
1545
1496
  * @param flip If `true`, characters are flipped vertically. If `false`, no flip is applied.
1546
1497
  */
1547
- flipVertically(A) {
1498
+ flipVertically(e) {
1548
1499
  C.validate(
1549
- typeof A == "boolean" || typeof A == "number" && Number.isInteger(A),
1500
+ typeof e == "boolean" || typeof e == "number" && Number.isInteger(e),
1550
1501
  "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);
1502
+ { method: "flipVertically", providedValue: e }
1503
+ ) && (this.options.flipVertically = !!e);
1553
1504
  }
1554
1505
  }
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 = {
1506
+ 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);}";
1507
+ const X = {
1557
1508
  /** Enable/disable the renderer */
1558
1509
  enabled: !0,
1559
1510
  /** Characters used for brightness mapping (from darkest to brightest) */
@@ -1578,15 +1529,15 @@ const K = {
1578
1529
  brightnessRange: [0, 255]
1579
1530
  };
1580
1531
  class b extends _ {
1581
- constructor(A, t, r) {
1582
- super(A, t, r, { ...K });
1532
+ constructor(e, t, r) {
1533
+ super(e, t, r, { ...X });
1583
1534
  Q(this, "sampleShader");
1584
1535
  Q(this, "charMappingShader");
1585
1536
  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);
1537
+ 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
1538
  }
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(
1539
+ convert(e) {
1540
+ 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
1541
  this.options.invert ? 255 : 0,
1591
1542
  this.options.flipHorizontally ? 255 : 0,
1592
1543
  this.options.flipVertically ? 255 : 0
@@ -1602,12 +1553,12 @@ class b extends _ {
1602
1553
  *
1603
1554
  * @param range Array of two numbers `[min, max]`, where `min` is darkest and `max` is brightest.
1604
1555
  */
1605
- brightnessRange(A) {
1556
+ brightnessRange(e) {
1606
1557
  C.validate(
1607
- Array.isArray(A) && A.length === 2 && A.every((t) => typeof t == "number" && t >= 0 && t <= 255),
1558
+ Array.isArray(e) && e.length === 2 && e.every((t) => typeof t == "number" && t >= 0 && t <= 255),
1608
1559
  "Brightness range must be an array of two numbers between 0 and 255.",
1609
- { method: "brightnessRange", providedValue: A }
1610
- ) && (this.options.brightnessRange = A);
1560
+ { method: "brightnessRange", providedValue: e }
1561
+ ) && (this.options.brightnessRange = e);
1611
1562
  }
1612
1563
  }
1613
1564
  const q = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
@@ -1616,41 +1567,41 @@ const q = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1616
1567
  TextmodeConverter: p,
1617
1568
  TextmodeFeatureConverter: _
1618
1569
  }, 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);}";
1570
+ 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
1571
  class j {
1621
- constructor(e, A, t) {
1572
+ constructor(A, e, t) {
1622
1573
  Q(this, "renderer");
1623
1574
  Q(this, "font");
1624
1575
  Q(this, "grid");
1625
1576
  Q(this, "converters");
1626
1577
  Q(this, "_resultFramebuffer");
1627
1578
  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)
1579
+ this.renderer = A, this.font = e, this.grid = t, this._asciiShader = this.renderer.createShader(P, Z), this.converters = {
1580
+ brightness: new b(A, e, t)
1630
1581
  }, this._resultFramebuffer = this.renderer.createFramebuffer(this.grid.width, this.grid.height);
1631
1582
  }
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();
1583
+ render(A) {
1584
+ for (const e of Object.values(this.converters))
1585
+ e.convert(A);
1586
+ 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]), this.renderer.setUniform("u_pixelRatio", 1), this.renderer.rect(0, 0, this._resultFramebuffer.width, this._resultFramebuffer.height), this._resultFramebuffer.end();
1636
1587
  }
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;
1588
+ get(A) {
1589
+ const e = this.converters[A];
1590
+ if (!e)
1591
+ throw new Error(`Converter "${A}" not found in pipeline.`);
1592
+ return e;
1642
1593
  }
1643
1594
  get texture() {
1644
1595
  return this._resultFramebuffer;
1645
1596
  }
1646
1597
  resize() {
1647
1598
  this._resultFramebuffer.resize(this.grid.width, this.grid.height);
1648
- for (const e of Object.values(this.converters))
1649
- e.resize();
1599
+ for (const A of Object.values(this.converters))
1600
+ A.resize();
1650
1601
  }
1651
1602
  }
1652
- class d {
1653
- constructor(e, A = {}) {
1603
+ class f {
1604
+ constructor(A, e = {}) {
1654
1605
  /** The canvas element to capture content from */
1655
1606
  Q(this, "captureCanvas");
1656
1607
  /** Our WebGL overlay canvas manager */
@@ -1670,7 +1621,7 @@ class d {
1670
1621
  Q(this, "_frameRate", 0);
1671
1622
  Q(this, "lastRenderTime", 0);
1672
1623
  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);
1624
+ 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(A.width, A.height), this._font = new k(this.renderer, e.fontSize ?? 16);
1674
1625
  }
1675
1626
  /**
1676
1627
  * Static factory method for creating and initializing a Textmodifier instance.
@@ -1678,11 +1629,11 @@ class d {
1678
1629
  * @param opts Optional configuration options for the `Textmodifier` instance.
1679
1630
  * @ignore
1680
1631
  */
1681
- static async create(e, A = {}) {
1682
- const t = new d(e, A);
1632
+ static async create(A, e = {}) {
1633
+ const t = new f(A, e);
1683
1634
  await t._font.initialize();
1684
1635
  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;
1636
+ 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
1637
  }
1687
1638
  setupEventListeners() {
1688
1639
  window.addEventListener("resize", this.resize.bind(this)), window.ResizeObserver && (this.resizeObserver = new ResizeObserver(() => {
@@ -1693,10 +1644,10 @@ class d {
1693
1644
  * Update the font used for rendering.
1694
1645
  * @param fontUrl The URL of the font to load.
1695
1646
  */
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();
1647
+ async loadFont(A) {
1648
+ return this._font.loadFont(A).then(() => {
1649
+ const e = this._font.maxGlyphDimensions;
1650
+ this._grid.resizeCellPixelDimensions(e.width, e.height), this._pipeline.resize();
1700
1651
  });
1701
1652
  }
1702
1653
  /**
@@ -1709,28 +1660,28 @@ class d {
1709
1660
  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
1661
  }
1711
1662
  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();
1663
+ 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
1664
  }
1714
1665
  /**
1715
1666
  * Start automatic rendering
1716
1667
  */
1717
1668
  startAutoRendering() {
1718
1669
  if (this._mode !== "auto") return;
1719
- const e = (A) => {
1720
- A - this.lastFrameTime >= this.frameInterval && (this.render(), this.lastFrameTime = A), this.animationFrameId = requestAnimationFrame(e);
1670
+ const A = (e) => {
1671
+ e - this.lastFrameTime >= this.frameInterval && (this.render(), this.lastFrameTime = e), this.animationFrameId = requestAnimationFrame(A);
1721
1672
  };
1722
- this.animationFrameId = requestAnimationFrame(e);
1673
+ this.animationFrameId = requestAnimationFrame(A);
1723
1674
  }
1724
1675
  /**
1725
1676
  * Update FPS measurement - works for both auto and manual modes
1726
1677
  */
1727
1678
  measureFrameRate() {
1728
- const e = performance.now();
1679
+ const A = performance.now();
1729
1680
  if (this.lastRenderTime > 0) {
1730
- const A = e - this.lastRenderTime;
1731
- this._frameRate = 1e3 / A;
1681
+ const e = A - this.lastRenderTime;
1682
+ this._frameRate = 1e3 / e;
1732
1683
  }
1733
- this.lastRenderTime = e;
1684
+ this.lastRenderTime = A;
1734
1685
  }
1735
1686
  /**
1736
1687
  * Stop automatic rendering
@@ -1741,21 +1692,21 @@ class d {
1741
1692
  /**
1742
1693
  * Change the rendering mode.
1743
1694
  */
1744
- renderMode(e) {
1745
- if (this._mode !== e) {
1746
- if (e === void 0)
1695
+ renderMode(A) {
1696
+ if (this._mode !== A) {
1697
+ if (A === void 0)
1747
1698
  return this._mode;
1748
- this.stopAutoRendering(), this._mode = e, e === "auto" && this.startAutoRendering();
1699
+ this.stopAutoRendering(), this._mode = A, A === "auto" && this.startAutoRendering();
1749
1700
  }
1750
1701
  }
1751
1702
  /**
1752
1703
  * Set the maximum frame rate for auto rendering. If called without arguments, returns the current measured frame rate.
1753
1704
  * @param fps The maximum frames per second for auto rendering.
1754
1705
  */
1755
- frameRate(e) {
1756
- if (e === void 0)
1706
+ frameRate(A) {
1707
+ if (A === void 0)
1757
1708
  return this._frameRate;
1758
- this._frameRateLimit = e, this.frameInterval = 1e3 / e;
1709
+ this._frameRateLimit = A, this.frameInterval = 1e3 / A;
1759
1710
  }
1760
1711
  converter() {
1761
1712
  return this._pipeline.get("brightness");
@@ -1777,22 +1728,22 @@ class d {
1777
1728
  return this._pipeline;
1778
1729
  }
1779
1730
  }
1780
- class f {
1731
+ class d {
1781
1732
  /**
1782
1733
  * Create a {@link Textmodifier} instance to apply textmode rendering to a given canvas.
1783
1734
  * @param canvas The HTML canvas element to capture content from.
1784
1735
  * @param opts Optional configuration options for the Textmodifier instance.
1785
1736
  * @returns A Promise that resolves to a Textmodifier instance.
1786
1737
  */
1787
- static async create(e, A = {}) {
1788
- return d.create(e, A);
1738
+ static async create(A, e = {}) {
1739
+ return f.create(A, e);
1789
1740
  }
1790
1741
  /**
1791
1742
  * Set the global error handling level for the library. This applies to all `Textmodifier` instances.
1792
1743
  * @param level The error handling level to set.
1793
1744
  */
1794
- static setErrorLevel(e) {
1795
- C.setGlobalLevel(e);
1745
+ static setErrorLevel(A) {
1746
+ C.setGlobalLevel(A);
1796
1747
  }
1797
1748
  /**
1798
1749
  * The current version of the library.
@@ -1804,16 +1755,16 @@ class f {
1804
1755
  throw new Error("Textmode is a static class and cannot be instantiated.");
1805
1756
  }
1806
1757
  }
1807
- const AA = f.create, eA = f.setErrorLevel, tA = f.version;
1758
+ const AA = d.create, eA = d.setErrorLevel, tA = d.version;
1808
1759
  export {
1809
- N as TextmodeCanvas,
1760
+ V as TextmodeCanvas,
1810
1761
  q as TextmodeConverters,
1811
1762
  T as TextmodeErrorLevel,
1812
- V as TextmodeFont,
1813
- k as TextmodeGrid,
1814
- d as Textmodifier,
1763
+ k as TextmodeFont,
1764
+ N as TextmodeGrid,
1765
+ f as Textmodifier,
1815
1766
  AA as create,
1816
1767
  eA as setErrorLevel,
1817
- f as textmode,
1768
+ d as textmode,
1818
1769
  tA as version
1819
1770
  };