simple-qrbtf
Version:
this is simple create a svg qrcode library
773 lines • 183 kB
JavaScript
var Y = Object.defineProperty;
var $ = (F, A, i) => A in F ? Y(F, A, { enumerable: !0, configurable: !0, writable: !0, value: i }) : F[A] = i;
var w = (F, A, i) => ($(F, typeof A != "symbol" ? A + "" : A, i), i);
function Z(F, ...A) {
for (const i of A)
i && Object.assign(F, i);
return F;
}
let E = 0, m = 0;
function u(F, A) {
return E = (E * 9301 + 49297) % 233280, F + E / 233280 * (A - F);
}
function N() {
return m += 1, m.toString();
}
function k(F, A) {
return typeof F != "string" || (F.length <= 0 && (F = A), isNaN(F) || (F = parseInt(F))), F;
}
function y(F) {
return F.reduce((A, i) => (i && i.length > 0 && A.push(i), A), []).join(`
`);
}
class _ {
constructor(A) {
w(this, "mode");
w(this, "data");
w(this, "parsedData");
this.mode = H.MODE_8BIT_BYTE, this.data = A, this.parsedData = [];
for (let i = 0, f = this.data.length; i < f; i++) {
let K = [], o = this.data.charCodeAt(i);
o > 65536 ? (K[0] = 240 | (o & 1835008) >>> 18, K[1] = 128 | (o & 258048) >>> 12, K[2] = 128 | (o & 4032) >>> 6, K[3] = 128 | o & 63) : o > 2048 ? (K[0] = 224 | (o & 61440) >>> 12, K[1] = 128 | (o & 4032) >>> 6, K[2] = 128 | o & 63) : o > 128 ? (K[0] = 192 | (o & 1984) >>> 6, K[1] = 128 | o & 63) : K[0] = o, this.parsedData.push(...K);
}
this.parsedData = Array.prototype.concat.apply([], this.parsedData), this.parsedData.length != this.data.length && (this.parsedData.unshift(191), this.parsedData.unshift(187), this.parsedData.unshift(239));
}
getLength() {
return this.parsedData.length;
}
write(A) {
for (let i = 0, f = this.parsedData.length; i < f; i++)
A.put(this.parsedData[i], 8);
}
}
const j = class j {
constructor(A, i) {
w(this, "typeNumber");
w(this, "errorCorrectLevel");
w(this, "modules");
w(this, "moduleCount");
w(this, "position");
w(this, "dataCache");
w(this, "dataList");
this.typeNumber = A, this.errorCorrectLevel = i, this.modules = [], this.moduleCount = 0, this.position = [], this.dataCache = null, this.dataList = [];
}
addData(A) {
let i = new _(A);
this.dataList.push(i), this.dataCache = null;
}
isDark(A, i) {
if (A < 0 || this.moduleCount <= A || i < 0 || this.moduleCount <= i)
throw new Error(A + "," + i);
return this.modules[A][i];
}
getModuleCount() {
return this.moduleCount;
}
getPositionTable() {
return this.position;
}
make() {
if (this.typeNumber < 1) {
let A = 1;
for (A = 1; A < 40; A++) {
let i = T.getRSBlocks(A, this.errorCorrectLevel), f = new W(), K = 0;
for (let o = 0; o < i.length; o++)
K += i[o].dataCount;
for (let o = 0; o < this.dataList.length; o++) {
let U = this.dataList[o];
f.put(U.mode, 4), f.put(U.getLength(), c.getLengthInBits(U.mode, A)), U.write(f);
}
if (f.getLengthInBits() <= K * 8)
break;
}
this.typeNumber = A;
}
this.makeImpl(!1, this.getBestMaskPattern());
}
makeImpl(A, i) {
this.moduleCount = this.typeNumber * 4 + 17, this.modules = new Array(this.moduleCount);
for (let f = 0; f < this.moduleCount; f++) {
this.modules[f] = new Array(this.moduleCount);
for (let K = 0; K < this.moduleCount; K++)
this.modules[f][K] = null;
}
this.setupPositionProbePattern(0, 0), this.setupPositionProbePattern(this.moduleCount - 7, 0), this.setupPositionProbePattern(0, this.moduleCount - 7), this.setupPositionAdjustPattern(), this.setupTimingPattern(), this.setupTypeInfo(A, i), this.typeNumber >= 7 && this.setupTypeNumber(A), this.dataCache == null && (this.dataCache = j.createData(this.typeNumber, this.errorCorrectLevel, this.dataList)), this.mapData(this.dataCache, i);
}
setupPositionProbePattern(A, i) {
for (let f = -1; f <= 7; f++)
if (!(A + f <= -1 || this.moduleCount <= A + f))
for (let K = -1; K <= 7; K++)
i + K <= -1 || this.moduleCount <= i + K || (0 <= f && f <= 6 && (K == 0 || K == 6) || 0 <= K && K <= 6 && (f == 0 || f == 6) || 2 <= f && f <= 4 && 2 <= K && K <= 4 ? this.modules[A + f][i + K] = !0 : this.modules[A + f][i + K] = !1);
}
getBestMaskPattern() {
let A = 0, i = 0;
for (let f = 0; f < 8; f++) {
this.makeImpl(!0, f);
let K = c.getLostPoint(this);
(f == 0 || A > K) && (A = K, i = f);
}
return i;
}
setupTimingPattern() {
for (let A = 8; A < this.moduleCount - 8; A++)
this.modules[A][6] == null && (this.modules[A][6] = A % 2 == 0);
for (let A = 8; A < this.moduleCount - 8; A++)
this.modules[6][A] == null && (this.modules[6][A] = A % 2 == 0);
}
setupPositionAdjustPattern() {
let A = c.getPatternPosition(this.typeNumber);
this.position = new Array();
for (let i = 0; i < A.length; i++)
for (let f = 0; f < A.length; f++) {
let K = A[i], o = A[f];
if (this.modules[K][o] == null) {
this.position.push([K, o]);
for (let U = -2; U <= 2; U++)
for (let R = -2; R <= 2; R++)
U == -2 || U == 2 || R == -2 || R == 2 || U == 0 && R == 0 ? this.modules[K + U][o + R] = !0 : this.modules[K + U][o + R] = !1;
}
}
}
setupTypeNumber(A) {
let i = c.getBCHTypeNumber(this.typeNumber);
for (let f = 0; f < 18; f++) {
let K = !A && (i >> f & 1) == 1;
this.modules[Math.floor(f / 3)][f % 3 + this.moduleCount - 8 - 3] = K;
}
for (let f = 0; f < 18; f++) {
let K = !A && (i >> f & 1) == 1;
this.modules[f % 3 + this.moduleCount - 8 - 3][Math.floor(f / 3)] = K;
}
}
setupTypeInfo(A, i) {
let f = this.errorCorrectLevel << 3 | i, K = c.getBCHTypeInfo(f);
for (let o = 0; o < 15; o++) {
let U = !A && (K >> o & 1) == 1;
o < 6 ? this.modules[o][8] = U : o < 8 ? this.modules[o + 1][8] = U : this.modules[this.moduleCount - 15 + o][8] = U;
}
for (let o = 0; o < 15; o++) {
let U = !A && (K >> o & 1) == 1;
o < 8 ? this.modules[8][this.moduleCount - o - 1] = U : o < 9 ? this.modules[8][15 - o - 1 + 1] = U : this.modules[8][15 - o - 1] = U;
}
this.modules[this.moduleCount - 8][8] = !A;
}
mapData(A, i) {
let f = -1, K = this.moduleCount - 1, o = 7, U = 0;
for (let R = this.moduleCount - 1; R > 0; R -= 2)
for (R == 6 && R--; ; ) {
for (let s = 0; s < 2; s++)
if (this.modules[K][R - s] == null) {
let n = !1;
U < A.length && (n = (A[U] >>> o & 1) == 1), c.getMask(i, K, R - s) && (n = !n), this.modules[K][R - s] = n, o--, o == -1 && (U++, o = 7);
}
if (K += f, K < 0 || this.moduleCount <= K) {
K -= f, f = -f;
break;
}
}
}
static createData(A, i, f) {
let K = T.getRSBlocks(A, i), o = new W();
for (let R = 0; R < f.length; R++) {
let s = f[R];
o.put(s.mode, 4), o.put(s.getLength(), c.getLengthInBits(s.mode, A)), s.write(o);
}
let U = 0;
for (let R = 0; R < K.length; R++)
U += K[R].dataCount;
if (o.getLengthInBits() > U * 8)
throw new Error("code length overflow. (" + o.getLengthInBits() + ">" + U * 8 + ")");
for (o.getLengthInBits() + 4 <= U * 8 && o.put(0, 4); o.getLengthInBits() % 8 != 0; )
o.putBit(!1);
for (; !(o.getLengthInBits() >= U * 8 || (o.put(j.PAD0, 8), o.getLengthInBits() >= U * 8)); )
o.put(j.PAD1, 8);
return j.createBytes(o, K);
}
static createBytes(A, i) {
let f = 0, K = 0, o = 0, U = new Array(i.length), R = new Array(i.length);
for (let g = 0; g < i.length; g++) {
let C = i[g].dataCount, a = i[g].totalCount - C;
K = Math.max(K, C), o = Math.max(o, a), U[g] = new Array(C);
for (let e = 0; e < U[g].length; e++)
U[g][e] = 255 & A.buffer[e + f];
f += C;
let r = c.getErrorCorrectPolynomial(a), t = new q(U[g], r.getLength() - 1).mod(r);
R[g] = new Array(r.getLength() - 1);
for (let e = 0; e < R[g].length; e++) {
let v = e + t.getLength() - R[g].length;
R[g][e] = v >= 0 ? t.get(v) : 0;
}
}
let s = 0;
for (let g = 0; g < i.length; g++)
s += i[g].totalCount;
let n = new Array(s), P = 0;
for (let g = 0; g < K; g++)
for (let C = 0; C < i.length; C++)
g < U[C].length && (n[P++] = U[C][g]);
for (let g = 0; g < o; g++)
for (let C = 0; C < i.length; C++)
g < R[C].length && (n[P++] = R[C][g]);
return n;
}
};
w(j, "PAD0", 236), w(j, "PAD1", 17);
let J = j, H = {
MODE_NUMBER: 1,
MODE_ALPHA_NUM: 2,
MODE_8BIT_BYTE: 4,
MODE_KANJI: 8
}, L = {
L: 1,
M: 0,
Q: 3,
H: 2
}, X = {
PATTERN000: 0,
PATTERN001: 1,
PATTERN010: 2,
PATTERN011: 3,
PATTERN100: 4,
PATTERN101: 5,
PATTERN110: 6,
PATTERN111: 7
}, c = {
PATTERN_POSITION_TABLE: [
[],
[6, 18],
[6, 22],
[6, 26],
[6, 30],
[6, 34],
[6, 22, 38],
[6, 24, 42],
[6, 26, 46],
[6, 28, 50],
[6, 30, 54],
[6, 32, 58],
[6, 34, 62],
[6, 26, 46, 66],
[6, 26, 48, 70],
[6, 26, 50, 74],
[6, 30, 54, 78],
[6, 30, 56, 82],
[6, 30, 58, 86],
[6, 34, 62, 90],
[6, 28, 50, 72, 94],
[6, 26, 50, 74, 98],
[6, 30, 54, 78, 102],
[6, 28, 54, 80, 106],
[6, 32, 58, 84, 110],
[6, 30, 58, 86, 114],
[6, 34, 62, 90, 118],
[6, 26, 50, 74, 98, 122],
[6, 30, 54, 78, 102, 126],
[6, 26, 52, 78, 104, 130],
[6, 30, 56, 82, 108, 134],
[6, 34, 60, 86, 112, 138],
[6, 30, 58, 86, 114, 142],
[6, 34, 62, 90, 118, 146],
[6, 30, 54, 78, 102, 126, 150],
[6, 24, 50, 76, 102, 128, 154],
[6, 28, 54, 80, 106, 132, 158],
[6, 32, 58, 84, 110, 136, 162],
[6, 26, 54, 82, 110, 138, 166],
[6, 30, 58, 86, 114, 142, 170]
],
G15: 1335,
G18: 7973,
G15_MASK: 21522,
getBCHTypeInfo: function(F) {
let A = F << 10;
for (; c.getBCHDigit(A) - c.getBCHDigit(c.G15) >= 0; )
A ^= c.G15 << c.getBCHDigit(A) - c.getBCHDigit(c.G15);
return (F << 10 | A) ^ c.G15_MASK;
},
getBCHTypeNumber: function(F) {
let A = F << 12;
for (; c.getBCHDigit(A) - c.getBCHDigit(c.G18) >= 0; )
A ^= c.G18 << c.getBCHDigit(A) - c.getBCHDigit(c.G18);
return F << 12 | A;
},
getBCHDigit: function(F) {
let A = 0;
for (; F != 0; )
A++, F >>>= 1;
return A;
},
getPatternPosition: function(F) {
return c.PATTERN_POSITION_TABLE[F - 1];
},
getMask: function(F, A, i) {
switch (F) {
case X.PATTERN000:
return (A + i) % 2 == 0;
case X.PATTERN001:
return A % 2 == 0;
case X.PATTERN010:
return i % 3 == 0;
case X.PATTERN011:
return (A + i) % 3 == 0;
case X.PATTERN100:
return (Math.floor(A / 2) + Math.floor(i / 3)) % 2 == 0;
case X.PATTERN101:
return A * i % 2 + A * i % 3 == 0;
case X.PATTERN110:
return (A * i % 2 + A * i % 3) % 2 == 0;
case X.PATTERN111:
return (A * i % 3 + (A + i) % 2) % 2 == 0;
default:
throw new Error("bad maskPattern:" + F);
}
},
getErrorCorrectPolynomial: function(F) {
let A = new q([1], 0);
for (let i = 0; i < F; i++)
A = A.multiply(new q([1, Q.gexp(i)], 0));
return A;
},
getLengthInBits: function(F, A) {
if (1 <= A && A < 10)
switch (F) {
case H.MODE_NUMBER:
return 10;
case H.MODE_ALPHA_NUM:
return 9;
case H.MODE_8BIT_BYTE:
return 8;
case H.MODE_KANJI:
return 8;
default:
throw new Error("mode:" + F);
}
else if (A < 27)
switch (F) {
case H.MODE_NUMBER:
return 12;
case H.MODE_ALPHA_NUM:
return 11;
case H.MODE_8BIT_BYTE:
return 16;
case H.MODE_KANJI:
return 10;
default:
throw new Error("mode:" + F);
}
else if (A < 41)
switch (F) {
case H.MODE_NUMBER:
return 14;
case H.MODE_ALPHA_NUM:
return 13;
case H.MODE_8BIT_BYTE:
return 16;
case H.MODE_KANJI:
return 12;
default:
throw new Error("mode:" + F);
}
else
throw new Error("type:" + A);
},
getLostPoint: function(F) {
let A = F.getModuleCount(), i = 0;
for (let o = 0; o < A; o++)
for (let U = 0; U < A; U++) {
let R = 0, s = F.isDark(o, U);
for (let n = -1; n <= 1; n++)
if (!(o + n < 0 || A <= o + n))
for (let P = -1; P <= 1; P++)
U + P < 0 || A <= U + P || n == 0 && P == 0 || s == F.isDark(o + n, U + P) && R++;
R > 5 && (i += 3 + R - 5);
}
for (let o = 0; o < A - 1; o++)
for (let U = 0; U < A - 1; U++) {
let R = 0;
F.isDark(o, U) && R++, F.isDark(o + 1, U) && R++, F.isDark(o, U + 1) && R++, F.isDark(o + 1, U + 1) && R++, (R == 0 || R == 4) && (i += 3);
}
for (let o = 0; o < A; o++)
for (let U = 0; U < A - 6; U++)
F.isDark(o, U) && !F.isDark(o, U + 1) && F.isDark(o, U + 2) && F.isDark(o, U + 3) && F.isDark(o, U + 4) && !F.isDark(o, U + 5) && F.isDark(o, U + 6) && (i += 40);
for (let o = 0; o < A; o++)
for (let U = 0; U < A - 6; U++)
F.isDark(U, o) && !F.isDark(U + 1, o) && F.isDark(U + 2, o) && F.isDark(U + 3, o) && F.isDark(U + 4, o) && !F.isDark(U + 5, o) && F.isDark(U + 6, o) && (i += 40);
let f = 0;
for (let o = 0; o < A; o++)
for (let U = 0; U < A; U++)
F.isDark(U, o) && f++;
let K = Math.abs(100 * f / A / A - 50) / 5;
return i += K * 10, i;
}
}, Q = {
glog: function(F) {
if (F < 1)
throw new Error("glog(" + F + ")");
return Q.LOG_TABLE[F];
},
gexp: function(F) {
for (; F < 0; )
F += 255;
for (; F >= 256; )
F -= 255;
return Q.EXP_TABLE[F];
},
EXP_TABLE: new Array(256),
LOG_TABLE: new Array(256)
};
for (let F = 0; F < 8; F++)
Q.EXP_TABLE[F] = 1 << F;
for (let F = 8; F < 256; F++)
Q.EXP_TABLE[F] = Q.EXP_TABLE[F - 4] ^ Q.EXP_TABLE[F - 5] ^ Q.EXP_TABLE[F - 6] ^ Q.EXP_TABLE[F - 8];
for (let F = 0; F < 255; F++)
Q.LOG_TABLE[Q.EXP_TABLE[F]] = F;
class q {
constructor(A, i) {
w(this, "num");
if (A.length == null)
throw new Error(A.length + "/" + i);
let f = 0;
for (; f < A.length && A[f] == 0; )
f++;
this.num = new Array(A.length - f + i);
for (let K = 0; K < A.length - f; K++)
this.num[K] = A[K + f];
}
get(A) {
return this.num[A];
}
getLength() {
return this.num.length;
}
multiply(A) {
let i = new Array(this.getLength() + A.getLength() - 1);
for (let f = 0; f < this.getLength(); f++)
for (let K = 0; K < A.getLength(); K++)
i[f + K] ^= Q.gexp(Q.glog(this.get(f)) + Q.glog(A.get(K)));
return new q(i, 0);
}
mod(A) {
if (this.getLength() - A.getLength() < 0)
return this;
let i = Q.glog(this.get(0)) - Q.glog(A.get(0)), f = new Array(this.getLength());
for (let K = 0; K < this.getLength(); K++)
f[K] = this.get(K);
for (let K = 0; K < A.getLength(); K++)
f[K] ^= Q.gexp(Q.glog(A.get(K)) + i);
return new q(f, 0).mod(A);
}
}
const D = class D {
constructor(A, i) {
w(this, "totalCount");
w(this, "dataCount");
this.totalCount = A, this.dataCount = i;
}
static getRSBlocks(A, i) {
let f = D.getRsBlockTable(A, i);
if (f == null)
throw new Error("bad rs block @ typeNumber:" + A + "/errorCorrectLevel:" + i);
let K = f.length / 3, o = [];
for (let U = 0; U < K; U++) {
let R = f[U * 3 + 0], s = f[U * 3 + 1], n = f[U * 3 + 2];
for (let P = 0; P < R; P++)
o.push(new D(s, n));
}
return o;
}
static getRsBlockTable(A, i) {
switch (i) {
case L.L:
return D.RS_BLOCK_TABLE[(A - 1) * 4 + 0];
case L.M:
return D.RS_BLOCK_TABLE[(A - 1) * 4 + 1];
case L.Q:
return D.RS_BLOCK_TABLE[(A - 1) * 4 + 2];
case L.H:
return D.RS_BLOCK_TABLE[(A - 1) * 4 + 3];
default:
return [];
}
}
};
w(D, "RS_BLOCK_TABLE", [
// L
// M
// Q
// H
// 1
[1, 26, 19],
[1, 26, 16],
[1, 26, 13],
[1, 26, 9],
// 2
[1, 44, 34],
[1, 44, 28],
[1, 44, 22],
[1, 44, 16],
// 3
[1, 70, 55],
[1, 70, 44],
[2, 35, 17],
[2, 35, 13],
// 4
[1, 100, 80],
[2, 50, 32],
[2, 50, 24],
[4, 25, 9],
// 5
[1, 134, 108],
[2, 67, 43],
[2, 33, 15, 2, 34, 16],
[2, 33, 11, 2, 34, 12],
// 6
[2, 86, 68],
[4, 43, 27],
[4, 43, 19],
[4, 43, 15],
// 7
[2, 98, 78],
[4, 49, 31],
[2, 32, 14, 4, 33, 15],
[4, 39, 13, 1, 40, 14],
// 8
[2, 121, 97],
[2, 60, 38, 2, 61, 39],
[4, 40, 18, 2, 41, 19],
[4, 40, 14, 2, 41, 15],
// 9
[2, 146, 116],
[3, 58, 36, 2, 59, 37],
[4, 36, 16, 4, 37, 17],
[4, 36, 12, 4, 37, 13],
// 10
[2, 86, 68, 2, 87, 69],
[4, 69, 43, 1, 70, 44],
[6, 43, 19, 2, 44, 20],
[6, 43, 15, 2, 44, 16],
// 11
[4, 101, 81],
[1, 80, 50, 4, 81, 51],
[4, 50, 22, 4, 51, 23],
[3, 36, 12, 8, 37, 13],
// 12
[2, 116, 92, 2, 117, 93],
[6, 58, 36, 2, 59, 37],
[4, 46, 20, 6, 47, 21],
[7, 42, 14, 4, 43, 15],
// 13
[4, 133, 107],
[8, 59, 37, 1, 60, 38],
[8, 44, 20, 4, 45, 21],
[12, 33, 11, 4, 34, 12],
// 14
[3, 145, 115, 1, 146, 116],
[4, 64, 40, 5, 65, 41],
[11, 36, 16, 5, 37, 17],
[11, 36, 12, 5, 37, 13],
// 15
[5, 109, 87, 1, 110, 88],
[5, 65, 41, 5, 66, 42],
[5, 54, 24, 7, 55, 25],
[11, 36, 12],
// 16
[5, 122, 98, 1, 123, 99],
[7, 73, 45, 3, 74, 46],
[15, 43, 19, 2, 44, 20],
[3, 45, 15, 13, 46, 16],
// 17
[1, 135, 107, 5, 136, 108],
[10, 74, 46, 1, 75, 47],
[1, 50, 22, 15, 51, 23],
[2, 42, 14, 17, 43, 15],
// 18
[5, 150, 120, 1, 151, 121],
[9, 69, 43, 4, 70, 44],
[17, 50, 22, 1, 51, 23],
[2, 42, 14, 19, 43, 15],
// 19
[3, 141, 113, 4, 142, 114],
[3, 70, 44, 11, 71, 45],
[17, 47, 21, 4, 48, 22],
[9, 39, 13, 16, 40, 14],
// 20
[3, 135, 107, 5, 136, 108],
[3, 67, 41, 13, 68, 42],
[15, 54, 24, 5, 55, 25],
[15, 43, 15, 10, 44, 16],
// 21
[4, 144, 116, 4, 145, 117],
[17, 68, 42],
[17, 50, 22, 6, 51, 23],
[19, 46, 16, 6, 47, 17],
// 22
[2, 139, 111, 7, 140, 112],
[17, 74, 46],
[7, 54, 24, 16, 55, 25],
[34, 37, 13],
// 23
[4, 151, 121, 5, 152, 122],
[4, 75, 47, 14, 76, 48],
[11, 54, 24, 14, 55, 25],
[16, 45, 15, 14, 46, 16],
// 24
[6, 147, 117, 4, 148, 118],
[6, 73, 45, 14, 74, 46],
[11, 54, 24, 16, 55, 25],
[30, 46, 16, 2, 47, 17],
// 25
[8, 132, 106, 4, 133, 107],
[8, 75, 47, 13, 76, 48],
[7, 54, 24, 22, 55, 25],
[22, 45, 15, 13, 46, 16],
// 26
[10, 142, 114, 2, 143, 115],
[19, 74, 46, 4, 75, 47],
[28, 50, 22, 6, 51, 23],
[33, 46, 16, 4, 47, 17],
// 27
[8, 152, 122, 4, 153, 123],
[22, 73, 45, 3, 74, 46],
[8, 53, 23, 26, 54, 24],
[12, 45, 15, 28, 46, 16],
// 28
[3, 147, 117, 10, 148, 118],
[3, 73, 45, 23, 74, 46],
[4, 54, 24, 31, 55, 25],
[11, 45, 15, 31, 46, 16],
// 29
[7, 146, 116, 7, 147, 117],
[21, 73, 45, 7, 74, 46],
[1, 53, 23, 37, 54, 24],
[19, 45, 15, 26, 46, 16],
// 30
[5, 145, 115, 10, 146, 116],
[19, 75, 47, 10, 76, 48],
[15, 54, 24, 25, 55, 25],
[23, 45, 15, 25, 46, 16],
// 31
[13, 145, 115, 3, 146, 116],
[2, 74, 46, 29, 75, 47],
[42, 54, 24, 1, 55, 25],
[23, 45, 15, 28, 46, 16],
// 32
[17, 145, 115],
[10, 74, 46, 23, 75, 47],
[10, 54, 24, 35, 55, 25],
[19, 45, 15, 35, 46, 16],
// 33
[17, 145, 115, 1, 146, 116],
[14, 74, 46, 21, 75, 47],
[29, 54, 24, 19, 55, 25],
[11, 45, 15, 46, 46, 16],
// 34
[13, 145, 115, 6, 146, 116],
[14, 74, 46, 23, 75, 47],
[44, 54, 24, 7, 55, 25],
[59, 46, 16, 1, 47, 17],
// 35
[12, 151, 121, 7, 152, 122],
[12, 75, 47, 26, 76, 48],
[39, 54, 24, 14, 55, 25],
[22, 45, 15, 41, 46, 16],
// 36
[6, 151, 121, 14, 152, 122],
[6, 75, 47, 34, 76, 48],
[46, 54, 24, 10, 55, 25],
[2, 45, 15, 64, 46, 16],
// 37
[17, 152, 122, 4, 153, 123],
[29, 74, 46, 14, 75, 47],
[49, 54, 24, 10, 55, 25],
[24, 45, 15, 46, 46, 16],
// 38
[4, 152, 122, 18, 153, 123],
[13, 74, 46, 32, 75, 47],
[48, 54, 24, 14, 55, 25],
[42, 45, 15, 32, 46, 16],
// 39
[20, 147, 117, 4, 148, 118],
[40, 75, 47, 7, 76, 48],
[43, 54, 24, 22, 55, 25],
[10, 45, 15, 67, 46, 16],
// 40
[19, 148, 118, 6, 149, 119],
[18, 75, 47, 31, 76, 48],
[34, 54, 24, 34, 55, 25],
[20, 45, 15, 61, 46, 16]
]);
let T = D;
class W {
constructor() {
w(this, "buffer");
w(this, "length");
this.buffer = [], this.length = 0;
}
get(A) {
let i = Math.floor(A / 8);
return (this.buffer[i] >>> 7 - A % 8 & 1) == 1;
}
put(A, i) {
for (let f = 0; f < i; f++)
this.putBit((A >>> i - f - 1 & 1) == 1);
}
getLengthInBits() {
return this.length;
}
putBit(A) {
let i = Math.floor(this.length / 8);
this.buffer.length <= i && this.buffer.push(0), A && (this.buffer[i] |= 128 >>> this.length % 8), this.length++;
}
}
const b = {
DATA: 0,
POS_CENTER: 1,
POS_OTHER: 2,
ALIGN_CENTER: 3,
ALIGN_OTHER: 4,
TIMING: 5,
FORMAT: 6,
VERSION: 7
};
function AA(F) {
return F === "L" ? 1 : F === "M" ? 0 : F === "Q" ? 3 : F === "H" ? 2 : 0;
}
function oA(F) {
if (!F.text || F.text.length <= 0)
return;
F.typeNumber || (F.typeNumber = -1), F.correctLevel || (F.correctLevel = "M");
const A = new J(F.typeNumber, AA(F.correctLevel));
return A.addData(F.text), A.make(), A;
}
function V(F) {
const A = F.getModuleCount(), i = F.getPositionTable(), f = [
[3, 3],
[3, A - 4],
[A - 4, 3]
], K = new Array(A);
for (let o = 0; o < A; o++)
K[o] = new Array(A);
for (let o = 8; o < A - 7; o++)
K[o][6] = K[6][o] = b.TIMING;
for (let o = 0; o < i.length; o++) {
K[i[o][0]][i[o][1]] = b.ALIGN_CENTER;
for (let U = -2; U <= 2; U++)
for (let R = -2; R <= 2; R++)
U === 0 && R === 0 || (K[i[o][0] + U][i[o][1] + R] = b.ALIGN_OTHER);
}
for (let o = 0; o < f.length; o++) {
K[f[o][0]][f[o][1]] = b.POS_CENTER;
for (let U = -4; U <= 4; U++)
for (let R = -4; R <= 4; R++)
f[o][0] + U >= 0 && f[o][0] + U < A && f[o][1] + R >= 0 && f[o][1] + R < A && (U === 0 && R === 0 || (K[f[o][0] + U][f[o][1] + R] = b.POS_OTHER));
}
for (let o = 0; o <= 8; o++)
o !== 6 && (K[o][8] = K[8][o] = b.FORMAT), o < 7 && (K[A - o - 1][8] = b.FORMAT), o < 8 && (K[8][A - o - 1] = b.FORMAT);
for (let o = A - 11; o <= A - 9; o++)
for (let U = 0; U <= 5; U++)
K[o][U] = K[U][o] = b.VERSION;
for (let o = 0; o < A; o++)
for (let U = 0; U < A; U++)
K[o][U] || (K[o][U] = b.DATA);
return K;
}
const z = "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD/4QBMRXhpZgAATU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAA6ABAAMAAAABAAEAAKACAAQAAAABAAAEOKADAAQAAAABAAAEOAAAAAD/wAARCAQ4BDgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAECAxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRomJygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOEhYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9sAQwACAgICAgIDAgIDBQMDAwUGBQUFBQYIBgYGBgYICggICAgICAoKCgoKCgoKDAwMDAwMDg4ODg4PDw8PDw8PDw8P/9sAQwECAgIEBAQHBAQHEAsJCxAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQ/90ABABE/9oADAMBAAIRAxEAPwD9IKESiigAooooAKKKKACiiigAoRKKKACiiigAooooAKKKKAChEoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKESiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Q/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//R/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//S/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//T/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//U/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//V/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//W/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//X/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Q/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//R/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//S/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKK0rPSrm8f5E+T+/XVJ4YtvJ2O/7+gDg6K1b/R7mzf503p/frKoAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/0/0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAop6I8z7E+d66fTfDE03768+RP7lAHNw21zcvstk3122m+G4Yf31587/3K6G2tobZNlsmyrdAESQpCmxE2VLRRQBE6JMmx031yupeG4Zv31t8j/3K6+igDyC5s5rZ9kybKrV7BNbW1ynkzJvrjNS8MPD++s/nT+5QByVFPmheF9kybHplABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//U/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoorSs9Nubx9lsn/A6AM2tuw0G5vPnf5IK6rTfD1tbfPc/PPXR0AZdno9nYJ+5T9//frUoooAKKKKACiiigAooooAKKKKAMi80q2v02TJ8/8AfrjNS0G5s/nT50r0qovv0AeOUV6Lf6DbXnzw/uHrjLzSrmwf98nyf36AM2iiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/1f0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiijY7/IlABU1tbTTP5Nsm963tN8NzXP765/cJ/wCP13NtYW1mnkwpsoA5XTfDGz99f/P/ALFdbDbJCmyFNiVYooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACmvDDMmyZN6U9Emd9iJvd67DTfDDzfvr/wCRP7n8dAHktz4MfUpv+JUnz/3K4y/sLnTrh7O/TyZk++lfXSfYNNh8m2RE/wBhK+cviFM83iR3f+4lAHDUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9b9IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACirNtYXN4+yFN9dzpvhu2tv31z+/f/AMcoA5Kw0e8v33omxP7713lho9nYfcTfP/fetJPkTYlS0AFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAN/2KdRRQAUUVdsNNvNSfZbJ8n8b/wUAUq29N8P31987/JD/feuo07w9Y6b++uf38399/uVtTX/APBD/wB90AV7PTdO0pMp9/8Avv8Afpk15NN8kP7tKrO7v87/AH6SgArwbx//AMjFN/uJXvNeEePv+Q8/+4lAHDUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//1/0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAqOpKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoorodN8N3Nz++m/cQ/8Aj9AGDDDNcv5MKb3rsNN8Kv8A66//AO+K6ez022sE2Qp/wP8Ajq9QBFDbQ20Pk2ybEqWiigAooooAKKKKACiiigAooooAKKKKACiiigAoopvzv9ygB1SQwzTTeTCju7/wV0Om+GLm52PefuE/8feuwtobPTYfJtk/+L/4HQBgab4YRP32ov8A8AX/ANnrpBNDCnk2yJ8n937lUZrmab7/ANz+5UdACu7u++Z99JRRQAUUUUAFeDeP/wDkYpv9xK95rwLx5/yHX/3EoA4yiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/9D9IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKmhtrm8fybZN9AENaVho95fv+5TYn9966rTfDFtD++vP37/3P4K6dERE2J8lAGVpuiWdh8+zz5/771tUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRVqzsLm/m2Wyb/8A2Su1sPDdnZp51+/nv/44lAHJ6bot/qT70Ty4P7713dtpWnaUnnfff++/3/8AgFXZr/5P9GrKd3d97vvoAuTXk03yQ/u0qt89JRQAUUUUAFFL/uUlABRRRQAV4R4+/wCQ8/8AuJXvH+/Xgnjz/kPf8AoA4miiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/R/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKeiPM+xPnd629N0G8vPnf8AcQf33rubDSrawT/Rk+f++/36AOV03wrNN++v/kg/ufx12cMMNtD5MKIif7FWKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoore07w/eXJ82b9zB/t/ff/AIBQBz8MM0zpDEju7/wJXa6b4Yd/32ovsT/nin/s9dFDbabpSbIU+f8A8fpk00033/kT+5QBMJrazg8mzjTYn937lU5neb53eo6KACiil+SgBKKKKACiiigAooooAKKX+CkoAK8C+IH/ACHX/wByvfa8F8ef8h7/AIBQBxNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/0v0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoqaGG5uZvJtk3vXbab4YhT99fvvf+4n3KAOSsNKvNSf/AEZPk/v/AMFdzpvh62s/3037+f8AvvW2iJCiQomxEqWgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKnhtprybZbI7v/sUAQVd03Sr/Un/ANGT5P77/crrdN8Kww/vtSfe/wDc/grb+2IibLNNiJQBn2Gg2Glfvpv38/8Aff8A9kSrs15NN8kP7tKrO7zPvf56SgAopfuUlABRRRQAUUUUAFFFFABRRRQAUv8Av0lFABRRRQAV4L48/wCQ9/wCveq8F8ef8h7/AIBQBxNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/0/0gooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAGO6Im966rTfDc1zsmvH8iB/n2J996868Q/JpUm9N+x0/8AQ6oeHvGepaO/k2z+fB/z7zfc/wCAUAfRVtZ21nD5NsmxKt1zOieLdK1vZDC/kXX/ADyf/wBk/v101ABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUqI7vsT53ra03Qb6/wBjbPIh/vv/AOyV2lnpum6Un7lN7/33+/QBzGm+FXuf32o/In9z+P8A+wrrIXsLBPJsESoZruab/YT+5UNAEjzO/wA8z1HRRQAUUUUAFFFFAColJRRQAvyUlFFABS/JSUUAFFFFABRRRQAUUUUAFeC+PP8AkPf8Ar3qvAvHn/IbkoA4yiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//U/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5/xJ/yB5v8AgH/odeZ16Z4k/wCQPN/wD/0OvL6ANC2v5ofv/P8A+h16j4e+It5Z7Ib/AP0qD+//AMtk/wDi68ipiO6fOlAH2BpWsabrFt51hMk399P40/30rXr5DsNYubOaC5hneCdP40r2PQfiQk2y21tP+3iH/wBnSgD1miq9tcw3MKXNs6TwP9x0qxQAUUUUAFFFFABRRRQAUVJDDLM/k2yO7v8AwJXYWHhjZ++1V/8AgCf+zvQBzFhpt5qL7LdN/wDt/wAFdrYeHrCwTzrx/Pf/AMc/74rWeZLZPJs0RESqG93fe776ALk1+7/InyJVKiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKX5KP46SgAooooAX56SiigArwLxz/yHH/3K99rwLxz/wAhx/8AcoA4yiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//V/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5/xJ/yB5v8AgH/odeX16h4k/wCQPN/wD/0OvL6ACiiigAqSGZ4fnSio6AOr0HxVf6PNvs5vI/vo/wA6PXuWg+PNN1XZbXn+i3X+39x/9x6+ZqmhvHh/20oA+zqK+cPD3jzUtK2Qo/2q1/54zfwf7j17Zo/ifStbT/Rn2T/xwv8AfoA6OiitbTdHvNS+dE2J/ff7lAGTXRab4bvLzY95+4g/8feums9K03Sk3/fm/vv9/wD+wqea8mm/2EoAlhS20qH7NZx/P/n771Xmlmm++9R0UAFFFFABRRRQAUUUUAFFFFABRRRQAUUqUlABRS/7FJQAUUUUAFFFFABRRRQAUUUUAFFFFABXgXjz/kNyV77XgXjz/kNyUAcZRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH/9b9IKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo6kooAKKKKACiiigAooooAKKKKACiiigAooooA57xL/yB5/8AgFeYV6f4l/5A8/8AwCvMKACipKjoAKKKKAJKjqSo6AJKuW1/NC6P/c/jT76VTooA+tvhNqtvqtt/xPbpJ7p/9Sj/AH9iff3/AN+vdprx/uQ/IlfJfwl/5Cul/wDbb/0B6+pKAF/36SiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKbs9qAHUUUUAFFFFABRRRQAUuykooAKKKKACvAvHn/Ibkr32vAvHn/IYegDjKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//X/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA57xL/yB5/8AgFeYV6h4k/5A83/AP/Q68voAKKKKACiiigAqSo6KAJKKjooA98+Ev/IV0v8A7bf+gPX1JXy58Iv+Qrpf+5N/6A9fUdABRRRQAUUUr0AJRS/JSUAFFFFABRRRQAUUUUAFFFFABRS/JSUAFFFK9ACUUUUAFFFFABRRRQAUUUUAFFFL8lACV4F48/5DD177XgXjz/kMPQBxlFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf//Q/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA5/xJ/yB5v8AgH/odeX16f4l/wCQPP8A8ArzCgAooooAKKKKACipKKAI6KkqOgD334Rf8hXS/wDcm/8AQHr6jr5f+EX/ACEtL/3Jv/QHr6goAKKKKACiiigAooooAX/cpKKKACiiigApfno+/SUAFFFFABRRRQAUUUUAFFKlJQAUUUUAFFFFABRRRQAUUUUAFeBePP8AkMPXvteC+PP+QxQBxNFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/R/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo6kooAKKKKACiiigAooqOgCSiiigAooooAKKKKACio6koAKKKKACiiigAooooA57xL/yB5/8AgFeYV6f4l/5A8/8AwCvMKACpKjooAKkqOigAqSiigCOpKKKAPePhF/yEtL/7bf8AoD19SV8t/CX/AJCul/8Abb/0B6+pKACil/3KSgAooooAKKKX/boASiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKX/YpKKAF30lFFABRRRQAV4N45/5Cte814F45/wCQwKAOMooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//S/SCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiio6AJKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo6kooAKKKKACiiigDnvEv/IHn/wCAV5hXp/iX/kDz/wDAK8woAKKkooAKKjooAkqOpKjoAKkoooA94+Ev/IV0v/tt/wCgPX1JXy38Jf8AkK6X/wBtv/QHr6koAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigApfuUlFABRRRQAUUUUAFFFFABRRRQAUUUUAFeDeOf+QrXvNeDeOf+QrQBxFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/T/SCiiigAooooAKKjqSgAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACo6kooAKKKKACiiigAooooAKKKKACiiigCOpKKKACiiigAooooAjqSiigAqOpKKACiiigDnvEv/IHn/wCAV5hXp/iX/kDz/wDAK8woAKKKKACpKKKACiiigAooooA94+Ev/IV0v/tt/wCgPX1JXy38Iv8AkJaX/wBtv/QHr6koAKKKKACiiigAooooAKKKKAF/gpKKKAClekooAKKKKACiiigBfv0fwUlL89ACUUUUAL/t0bKSigAooooAKKKKAF/3KSiigArwbxz/AMhWvZb/AFK2sEd7l68E8T6rDqt+80P3KAOeooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9T9HKKKKACiiigAooooAKKKKACiiigAooooAKKKKAJKjoooAkoqOigCSio6KAJKKKKACiiigAooqOgCSiiigAooooAjqSiigAooooAKKjqSgCOpKKKACiiigAooooAjoqSigAooqOgCSiio6AJKjqSigAqOiigDC8S/8gef/gFeYV6f4l/5A8//AACvMKACpKKKACiiigAooooAKKKKAPefhF/yFdL/ANyb/wBAevqOvmH4Rf8AIV0v/cm/9Aevp6gBd9JRRQAUUUUAFFFFABRRRQAUvyUlFABRRS/7FACUv+5SUUAFFFFABRRRQAUUUUAFFFFABRRRQAv+xSUruiJveuM1jxhYaajoj73oA6qaaG2h3zPsrz3W/HkNt+5sPnnrzrWPE+paq/zvsSueoA0r/VbzUn3zPWbRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//9X9HKKjqOgCxRVeigCSio6KAJKKjooAkoqOjfQBJRUe+jfQBZ30lV6N9AFiiq9SUASUVHRQBLvpKjooAkopd9JQBJRUdFAElFR0UAFSVHUlABRRRQBHUlFFABRRUdAElFFFABRUdSUAFFFR0ASVHUlFAEdFFFABRRUlABUdSVHQAUVJUdAElFR0UAYvif8A5BU//AK8tr0/xJ/yCp68woAkooooAKKKKACiiigAooooA9++EX/IV07/ALbf+gPX09Xy98JP+Qpp/wDuTf8AoD19Q0AFFL/t0lABRSpSUAFFFFABRRRQAUUUUAFFL/BSUAFFFFABRRRQAUUUUAFFFFABRRVS81K2sE33L7KALdc/qviGw0pP3z/P/crgNe8eO++203/vuvNJrm5uX86Z98lAHYa342vNSfybb5IK4x3eZ97/ADvTKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//1v0Uoopm+gB9FR0UASUVHRQBJTN9Rb6N9AFimb6i30b6ALFFV99G+gCXfT6r76N9AFiiq++jfQBYoqvvp2/3oAmo31Dv96N/vQBNRvpm+jfQBPRUG+n0AWd9G+q1G+gCxRUdFAElFFLvoAfRTN9JQAVJRRQAUVHRQAVJRRQBHUlFR0ASVHRUlAEdFSVHQAUVJRQAUVHRQAUUVJQBHRRRQBheIf8AkDzV5hXp/iT/AJBU9eYUASUUUUAFFFSUAR0VJRQBHRUlFAHu/wAJP+Qpp/8AuTf+gPX1DXyz8KP+Qrp//bb/ANAevqagAooooAKKKKACiiigAooooAKKKKACiiigBfkpKKKACiiigAoopX+SgBKrzTJCm+b5Erm9Y8W6bpSbN/nz/wByvH9Y8T6lqr/PJsg/uJQB6Rrfjy2tt8Nh8715RqWq3+qvvuX/AOAVlUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFAH//1/0Mo31V3+9TUASb6g30zf70b/egB++jfTN/vTd9ADt/vRv96bvo30AO3+9G/wB6hooAm3+9G/3qGigCbf70b/eoaKAJt/vRv96hooAm3+9G/wB6hooAm3+9P31WooAs76N9Vqk30AXN9G+qe+nb/egC5v8Aejf71T3+9G/3oAv76fVDfRvoAv76N9V99O3+9AFqpKqb6fQBZ30lV99SUASUUu+jfQAlFFFABRRRQAUUUUAFFFFABRRRQBJUdFFABUlR0UAFFFFAGF4h/wCQPNXllep+Jv8AkDz15QlAFipKjqSgAqSo6koAKKkqSgCOipKKAPb/AIU/8hXTv+23/oD19Q18w/Cj5NV07/cm/wDQHr6eoAKKKKACil/2KSgAooooAKVKSigAooooAKKKKACiiigAoqjc3ltZw+dcvsRK80174hffttK/77oA9C1XW7DTYd9y/wDwCvH9b8c3l/vhs/3EFcZc3lzeTedcvveqtAE7u8z73fe9MoooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD/9D9AN9R0UzfQA+imb6N9AD6KZvpm/3oAfvo30zf70b/AHoAfvo30zf703fQBLvo31FvqDfQBc30zf71W30b6ALO/wB6N/vVbfRvoAs7/ejf71W31FvoAvb/AHp++qe+jfQBc30b6zt9S76ALm+jfVPfRvoAub6fVffTt/vQBNUm+qu/3o3+9AFrfTt/vVbfRvoAub6n31n1JvoAvb/en76ob/ejf70AaVG+qG+p99AFypd9U99G+gC5vo31W31JQBJRS76N9ACUUUUAFFFSUAR0UUUAFSVHRQAUUUUAc/4q/wCQPNXkqPXq/i35NEnrx9HoAubKspWaj1ZR6AL9SVVR6mR6ALKU+mI9PoAKKkooA9u+Ff8AyGNO/wByb/0B6+nq+XvhX/yGNO/7ea+oaAJKjoooAKX/AG6SigAopXpKACiiigAooooAKKK5nWPFWlaOjo775/7iUAdI7pCm+Z9iJXB6345s7DfDZ/v56831vxhqWqvs3+RB/cSuVoA1dV1u/wBVm865n/4BWVUdSUAFFR0UAFSVHRQAUVJRQBHUlFR0ASUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB//0fvbf70b/em76g30AWd/vTd9U99G+gC5vqDfUW+o99AEzvTd9V6KALG+jfVeo99AFjfRvqvvo30ASUVHvo30ASUVU30b6ALdFVN9G+gC3RVHf70b/egC9RVHf70b/egC9RVHf70/fQBbqTzXqhvo84UAX/NepPONU/ONG+gC55xqXfVBJqPOoA1t9O86smpPNegDV30b6zvONS76AL9Sb6p+cadv96ALm/3o3+9U/tPvT0moA099O3+9Ud9O86gC/vp9Zu/3p/nCgC/vqSqe+pd9AFzfSVXo30AWKKjqXfQAlFFFABRRRQBzPjN9mgz14ak1e8eKrO5v9EntrNN718zX9zc2Ez21yjwOn9+gDp0uU61ZS5rjEv8AfV+G830AdbDNVyF65uG5rYhmoA3EqxWbC9X0egCdKkqNKkoA9n+FH/IVsv8Acmr6hr5i+F//ACGNO/4HX07QAUUUUAFFL9ykoAKKKKACiiq800NtC80zokaf36ALFZ2parZ6bC815Mif7Fee698QoYd9tpSb3/v15XeX9zfzfabl3d6AO517x/c3m+2039xB/f8A464CaZ5n3zPveoKKACiiigAooooAkqOiigAooqSgAoqOpKACo6KkoAKjqSo6AJKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigD//S+6N9R76jqPfQBJRUe+jfQBJUe+oN9M3+9AFrfRvqnvqDfQBc30zf71W30b6ALO/3pu+oN9RUAS76N9Vt9M30AXN9G+qe+jfQBc30b6ob/ej7T70AWvtElFU99G+gC59oko+0SVT31B5woA0/tElH2iSszzhR5woA0/tElO86srzhU++gC951P31nb6d9p96AL/nCp/ONZnnCjfQBq/afen+cKx99T/aJKANjzjTvOrH86n76ANPfVjzXrL84077T70Aa3nGpd9Z3nGnedQBqpNT/ADqykekoA1vtPvU2+svzjUqTUAavnUb/AHqgk1CTUAaW+pkes3fU++gDR30+s3zqfvoA06l31nb6ydV8Q2elQ75n3v8A3EoA6R3RE3vXnXif4kaVo++2s/8ASrr/AGPuV5X4n8Ya9rO+FP8ARbX+4ledOj/x0Adt/wALI8Tpf/b/AD/k/wCeP8Fd/Z+JPB/jyH7BrCJa3X9+vAnqq6UAeqeJPh7rGib7yw/02y/2Pv1wcN5sfY/yPXT+GPiRreg7La8/02y/uP8Afr0t9N8E/EK2+06a6Wt7/wCP0AeXW15W9bXlc3rfhXXvDE3+mQeZB/BMn3KrWepUAekW1zWwj1xNneb66S2moA3kqxVGF6tJQB7d8Kv+QxZf8Dr6er5h+FX/ACGLL/gdfT1ABRRRQAUUUUAFLv8Ak3v9yue1XxJpWlJ++fe/9xPv14/rfjbVdV3wwv5Fr/cSgD0vXvG2m6Vvhtv391/sfcrxzVfEOpaxNvuZ/k/ufwVh0UAFFFFABRRRQAUUUUAFFFFABRRRQAUVJUdABUlR0UASVHRRQBJUdSUUAR0UUUASUUVHQBJRUdSUAFFFFABRRRQAVHUlFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/T+3N9Qb6Zv96rb6ALO/3pu+oN9Qu9AE2+h3qtvooAkqPfTN9Rb6AJd9G+qe+mb/egC5v96bvqrv8Aem76AJd9M86oaZ5rUAWd/vR51U9/vRv96ALW+o99V/ONQb6AL++mecKp76N9AFzzhR5rVnecaPONAGj5rUea1Z3nGjzjQBo+a1HmtWd5xo840AaPnCjzhWd5xqXfQBf31JvrM30b6ANXzqPOqnv96N/vQBrb6d9p96x9/vT/ADhQBsecKN9ZW+npNQBs/aJKck1Y/nU/zhQBsecKs/afesdJqmR6ANhJqmSasRJqek1AG2j09JqxPOFWUmoA1vONXPONZKTVNbJNczJDbJvd/wCBKAL6TVch3zfcrpNK8GXLp52pfJ/sV1qaJDCmyFKAPK7m2vHTZD8lclc+Hnmd3f79e6vo+/8AgqnNon+xQB85XPht/wC5XN3nhj/Yr6im0H/YrKufDe/76UAfJ154bmT7iVg3Om3MP8FfWlz4V3/wVzdz4M37/koA+V5rZ0+/UMM1zZzJc2cjwOn8aV79f+Bt+/YlcTf+CblPuJQBseG/i1MkP2DxVB59r9zzf/i66TUvAGieJLb+1fB90iO/z+T/AAV4zeeHr+2/gqtpupax4euftNhM8D/+OUAdJc22paDc/Y9SgeB/9v7lbdhfo+yuq0f4kaD4ntk0rxhaojv8nnfwVW1j4e3lmn2/wxN9qtX+fZ/H/wAAoAv2cyPWqj1wFhfvDN5Nymx0/geu2tpt6UAe9/Cv/kK2P+49fT1fL3wr/wCQrZP/ALD19Q0AFFRTTQ20LzTPsRP79eda98QobbfDpSee/wDz2/goA7y/1Kz02HzrydIEryXXviFNc77bR4/IT/nt/HXB3+pXmpTedeTvO9Z9AE8001y7zTPvd/43qCiigAooooAKKKKACiiigAooooAKKKKACiiigCSo6KKACiiigAqSo6KACpKjqSgCOiipKAI6koooAKKKKACiiigAqOpKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP/1PsnfUVR76KADfTN9M3+9Vt9AFnf71W3093qs70AP3+9G/3qGmO9AD6Zvqs71JvoAdv96hd6ZvqF3oAsu9M31W31X30AXPONHnGqe+o3egC5vpm+qDvTfONAF7zqPOqjvqDzhQBp+caPONZm+medQBf84UecKoedT99AFzzhR5wqh51P30AafnGnedWVvo84UAavnUedWV5wqffQBo76N9Z2+jzjQBqb6k841k7/AHp/nCgDVSan76x/OFT+caANdJqej1j+dT99AGx5rU9Jqx99SecaANpJqek1Y++no9AG8k1TI+6sRJq7bwZqtnpVz9pvIUuv/Q0oA6Tw94G1XWNlzc/6La/33++9e06V4e03RIdltB8/99/v1No+t6brEO+wn3/7H8da1AEdM2JT6KAH+UtVnhSpqKAK32aKoXsIXq/RQBlSabbPVabRIXreooA5Kbw3C/8ABWVc+D4X/gr0KmbKAPIrz4ewzfwVxOpfChJv+WFfSVFAHxLqvwcufne2Ssqw03x/4Jm32G+e1/jhf7lfdrwwv9+Oq01hZzffgR6APlGG/wDDfjNPs2q2r6dqP+38j/8AAHpk3h7UtEf/AJ+rX++lfTlz4S0G8/4+bKF/+AVfsPhr9oh8nTd8EP8Afl+5QBxXwo/5Ctj/ALj17LrfjPStH3wo/wBqn/uJXiF/pVz4c1Wazd/JmT5Pk/26of7b0Ab2seJ9V1t/9JfZB/zxT7lYFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQBJUdSUUAFFFR0ASUUVHQAVJRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQB/9X663+9Md6h30zf70ATO9Q7/eoXemb6AH0x3pjvULvQBJUbvTHemO9AD3eoXemO9VnegCWonel31BvoAn31V3+9NqDfQBM71Dvod6ioAl31FUe+mb6AH76ZvqKigB2/3o3+9Q0UATb/AHo3+9Q0UATb/ejf71DRQBNv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FSUVHQAUUVJQAUVHRQBJRUdFAElFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAf/0foF6iepXqJ6AIHeoqleqz0AM30b6So6ACio6KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooqSgCOpNlGynbPagB1Lsp+ypKAI9lPRKm2VPsoAgRKmRKeiVMiUAQ7ParWykRKsolADESpkSpkSnolADEhq/D/AKmmIlPoAKkqOpKACiiigAqSo6koAKKKKANnw9/yFYP+B19veCf+RZsv9x//AEOviHw9/wAhWD/gdfb3gn/kWbL/AHH/APQ6AOpooooAKKKKACiiigAooooA+efHH/IyT1yNdd44/wCRknrkaACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAkooqOgCSiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKAP//S+h3SqzpWk6VWdKAKDpVZ0q+6Ux0oAobKZsq5so2UAUNntTdlXKj2UAU6Ks7KZs9qAIaKk2VHQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFSU7Z7UANp2z2p+yp6AINlT1Lsp6JQAzZT0SnolTIlAEVSolTIlTIlAEKJVlEp6JVlEoAhRKmRKESrKJQAxEqZIamRKmRKABEqu/360USs2X/X0AMooooAkoqOpKACiiigCSio6KAOg8Pf8AIVT/AIHX2x4JT/imLL/cf/0Ovifw9/yFU/4HX234J/5Fux/3H/8AQ6AOpooooAKXfSUUAFFFFABS/wC3R8lJQB88+OP+Rknrka67xr/yMU9cjQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRUlAEdFFFABRRRQAUUUUAFFSVHQAVJUdSUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFFABRRRQAUUUUAFFFSUAR0UUUAFFSVHQAUVJRQB/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