UNPKG

simple-pure-utils

Version:

Funciones puras para manipulación de objetos, arreglos, promesas y observables

404 lines 50.1 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const promise_1 = require("./promise"); const logic_1 = require("./logic"); const operators_1 = require("rxjs/operators"); const dates_1 = require("./dates"); const _1 = require("."); test("asyncThunkToObs sync", () => __awaiter(void 0, void 0, void 0, function* () { //sync resolve: let count = 0; const thunk = () => { count++; return (0, promise_1.syncResolve)(10); }; const obs = (0, logic_1.asyncThunkToObservable)(thunk); //Aún no se llama: expect(count).toBe(0); let result = 0; //Se resuelve síncronamente: obs.subscribe(x => result = x); expect(result).toBe(10); expect(count).toBe(1); result = 0; yield (0, operators_1.delay)(10); //Subsecuentes subscripciones no llaman al thunk obs.subscribe(x => result = x); expect(result).toBe(10); expect(count).toBe(1); })); test("getDecimalCount", () => { expect((0, logic_1.getDecimalCount)("1.1234e3")).toEqual(1); expect((0, logic_1.getDecimalCount)("1.123e3")).toEqual(0); expect((0, logic_1.getDecimalCount)("100")).toEqual(0); expect((0, logic_1.getDecimalCount)("0")).toEqual(0); expect((0, logic_1.getDecimalCount)("0.00")).toEqual(2); expect((0, logic_1.getDecimalCount)("0.01")).toEqual(2); expect((0, logic_1.getDecimalCount)("0.000001")).toEqual(6); expect((0, logic_1.getDecimalCount)("0.99")).toEqual(2); expect((0, logic_1.getDecimalCount)("1e-7")).toEqual(7); expect((0, logic_1.getDecimalCount)("1.99e-7")).toEqual(9); expect((0, logic_1.getDecimalCount)("99.999e-7")).toEqual(10); }); test("formatNum", () => { expect((0, logic_1.formatNumber)(Number.NaN, undefined, 2, true, "$", true)).toBe("NaN"); expect((0, logic_1.formatNumber)(Number.POSITIVE_INFINITY, undefined, 2, true, "$", true)).toBe("Infinity"); expect((0, logic_1.formatNumber)(Number.NEGATIVE_INFINITY, undefined, 2, true, "$", true)).toBe("-Infinity"); expect((0, logic_1.formatNumber)(10.1234, undefined, 2)).toBe("10.12"); expect((0, logic_1.formatNumber)(10.1299, undefined, 2)).toBe("10.12"); expect((0, logic_1.formatNumber)(10.12999, undefined, 2)).toBe("10.12"); expect((0, logic_1.formatNumber)(10.129999, undefined, 2)).toBe("10.13"); expect((0, logic_1.formatNumber)(10.4, undefined)).toBe("10"); expect((0, logic_1.formatNumber)(10.5, undefined)).toBe("10"); expect((0, logic_1.formatNumber)(10.99, undefined, 2)).toBe("10.99"); expect((0, logic_1.formatNumber)(10.999999, undefined, 2)).toBe("11.00"); }); test("asyncThunkToObs async", () => __awaiter(void 0, void 0, void 0, function* () { let count = 0; const thunk = () => __awaiter(void 0, void 0, void 0, function* () { count++; yield (0, operators_1.delay)(100); return 10; }); const obs = (0, logic_1.asyncThunkToObservable)(thunk); //Aún no se llama: expect(count).toBe(0); let a = 0, b = 0; obs.subscribe(x => a = x); //La primera llamada: expect(count).toBe(1); expect(a).toBe(0); yield (0, operators_1.delay)(10); //Otra subscripción antes de que termine la primera: obs.subscribe(x => b = x); //Ya no hay más llamadas: expect(count).toBe(1); expect(a).toBe(0); expect(b).toBe(0); const c = yield obs.toPromise(); //Ya se resolvieron todos los valores: expect(a).toBe(10); expect(b).toBe(10); expect(c).toBe(10); })); test("numEqStr", () => { expect((0, logic_1.numEqStr)(Number.NaN, "NaN")).toBe(true); expect((0, logic_1.numEqStr)(Number.NEGATIVE_INFINITY, "-Infinity")).toBe(true); expect((0, logic_1.numEqStr)(Number.POSITIVE_INFINITY, "Infinity")).toBe(true); expect((0, logic_1.numEqStr)(0.005044383, "0.005044383000000001")).toBe(true); expect((0, logic_1.numEqStr)(1.458, "1.4")).toBe(true); expect((0, logic_1.numEqStr)(1, "")).toBe(false); expect((0, logic_1.numEqStr)(1, "")).toBe(false); expect((0, logic_1.numEqStr)(1, ".")).toBe(false); expect((0, logic_1.numEqStr)(1, ".1")).toBe(false); expect((0, logic_1.numEqStr)(1, "2")).toBe(false); expect((0, logic_1.numEqStr)(1, "1.1")).toBe(false); expect((0, logic_1.numEqStr)(0, "0")).toBe(true); expect((0, logic_1.numEqStr)(0, "00000")).toBe(true); expect((0, logic_1.numEqStr)(+0, "0")).toBe(true); expect((0, logic_1.numEqStr)(-0, "0")).toBe(true); expect((0, logic_1.numEqStr)(0, "+0")).toBe(true); expect((0, logic_1.numEqStr)(0, "-0")).toBe(true); expect((0, logic_1.numEqStr)(0, "-000")).toBe(true); expect((0, logic_1.numEqStr)(0, "+000.000")).toBe(true); expect((0, logic_1.numEqStr)(0, "-0.00")).toBe(true); expect((0, logic_1.numEqStr)(0, "0.00")).toBe(true); expect((0, logic_1.numEqStr)(0, "0.00000000")).toBe(true); expect((0, logic_1.numEqStr)(0, "+000.0001")).toBe(false); expect((0, logic_1.numEqStr)(0, "-0.0001")).toBe(false); expect((0, logic_1.numEqStr)(0.0001, "0.0001")).toBe(true); expect((0, logic_1.numEqStr)(0.0001, "+0.0001")).toBe(true); expect((0, logic_1.numEqStr)(0.0001, "-0.0001")).toBe(false); expect((0, logic_1.numEqStr)(1, "1")).toBe(true); expect((0, logic_1.numEqStr)(1, "+1")).toBe(true); expect((0, logic_1.numEqStr)(1, "-1")).toBe(false); expect((0, logic_1.numEqStr)(120, "120")).toBe(true); expect((0, logic_1.numEqStr)(120, "+120")).toBe(true); expect((0, logic_1.numEqStr)(-120, "-120")).toBe(true); expect((0, logic_1.numEqStr)(-120, "120")).toBe(false); expect((0, logic_1.numEqStr)(120, "120.1")).toBe(false); expect((0, logic_1.numEqStr)(120.1, "120.1")).toBe(true); expect((0, logic_1.numEqStr)(120.1, "120.2")).toBe(false); expect((0, logic_1.numEqStr)(120.1, "+120.2")).toBe(false); expect((0, logic_1.numEqStr)(120.1, "120.12")).toBe(false); expect((0, logic_1.numEqStr)(-120.1, "-120.1")).toBe(true); expect((0, logic_1.numEqStr)(120.1201, "120.12")).toBe(true); expect((0, logic_1.numEqStr)(120.1200001, "120.12")).toBe(true); //debido al epsilon se consideran iguales expect((0, logic_1.numEqStr)(120.1200001, "+120.12")).toBe(true); //debido al epsilon se consideran iguales expect((0, logic_1.numEqStr)(120.1200001, "120.1200000")).toBe(false); //como la cadena es mas larga la comparación es de mas precisión expect((0, logic_1.numEqStr)(120.1200001, "120.1200001")).toBe(true); expect((0, logic_1.numEqStr)(-120.1200001, "120.1200001")).toBe(false); expect((0, logic_1.numEqStr)(120.1200001, "120.13")).toBe(false); expect((0, logic_1.numEqStr)(1000020.13, "1000020.13")).toBe(true); expect((0, logic_1.numEqStr)(1000020.13, "1,000,020.13")).toBe(true); expect((0, logic_1.numEqStr)(1000020.1300000001, "1,000,020.13")).toBe(true); expect((0, logic_1.numEqStr)(1000020.1300000001, "1,000,021.13")).toBe(false); expect((0, logic_1.numEqStr)(1000020.1300000001, "+1,000,020.13")).toBe(true); expect((0, logic_1.numEqStr)(1000020.1300000001, "-1,000,020.13")).toBe(false); expect((0, logic_1.numEqStr)(-1000020.1300000001, "-1,000,020.13")).toBe(true); expect((0, logic_1.numEqStr)(-1000020.1300000001, "+1,000,020.13")).toBe(false); expect((0, logic_1.numEqStr)(0.001999, "0.001")).toBe(true); expect((0, logic_1.numEqStr)(0.0019999, "0.002")).toBe(true); expect((0, logic_1.numEqStr)(0.0004999, "0.00")).toBe(true); expect((0, logic_1.numEqStr)(0.0004999, "0.000")).toBe(true); expect((0, logic_1.numEqStr)(0.0004999, "0.0000")).toBe(false); expect((0, logic_1.numEqStr)(0.0004999, "0.0004")).toBe(true); expect((0, logic_1.numEqStr)(0.0004999, "0.0005")).toBe(false); expect((0, logic_1.numEqStr)(0.00049999, "0.0005")).toBe(true); expect((0, logic_1.numEqStr)(10.1234, "10.12")).toBe(true); expect((0, logic_1.numEqStr)(10.1299, "10.12")).toBe(true); expect((0, logic_1.numEqStr)(10.12999, "10.12")).toBe(true); expect((0, logic_1.numEqStr)(10.129999, "10.13")).toBe(true); expect((0, logic_1.numEqStr)(10.4, "10")).toBe(true); expect((0, logic_1.numEqStr)(10.5, "10")).toBe(true); expect((0, logic_1.numEqStr)(10.99, "10.99")).toBe(true); expect((0, logic_1.numEqStr)(10.999999, "11.00")).toBe(true); expect((0, logic_1.numEqStr)(10.999999, "11.00")).toBe(true); expect((0, logic_1.numEqStr)(123456789.12345679, "123,456,789.12345")).toBe(true); }); test("parseFormattedNumber", () => { expect((0, logic_1.parseFormattedNumber)("NaN")).toBe(Number.NaN); expect((0, logic_1.parseFormattedNumber)("-Infinity")).toBe(Number.NEGATIVE_INFINITY); expect((0, logic_1.parseFormattedNumber)("Infinity")).toBe(Number.POSITIVE_INFINITY); expect((0, logic_1.parseFormattedNumber)("1")).toBe(1); expect((0, logic_1.parseFormattedNumber)("100.1343")).toBe(100.1343); expect((0, logic_1.parseFormattedNumber)("-100.1343")).toBe(-100.1343); expect((0, logic_1.parseFormattedNumber)("-1,000.1343")).toBe(-1000.1343); expect((0, logic_1.parseFormattedNumber)("-1,000,020.1343")).toBe(-1000020.1343); expect((0, logic_1.parseFormattedNumber)("$-1,000,020.1343")).toBe(-1000020.1343); }); test("xor test", () => { expect((0, logic_1.xor)([1, 2, 3], [2, 3, 4, 5])).toEqual([1, 4, 5]); expect((0, logic_1.xor)([], [2, 3, 4, 5])).toEqual([2, 3, 4, 5]); expect((0, logic_1.xor)([3, 2, 5], [2])).toEqual([3, 5]); expect((0, logic_1.xor)([3, 2, 5], [])).toEqual([3, 2, 5]); expect((0, logic_1.xor)([3, 2, 5], [5, 2, 3])).toEqual([]); expect((0, logic_1.xor)([3, 2, 5], [5, 2, 1, 3])).toEqual([1]); expect((0, logic_1.xor)([3, 2, 5, 0], [5, 2, 1, 3])).toEqual([0, 1]); }); test("group by count", () => { expect((0, logic_1.groupByCount)([], 0)).toEqual([]); expect((0, logic_1.groupByCount)([], 3)).toEqual([]); expect((0, logic_1.groupByCount)([1], 3)).toEqual([[1]]); expect((0, logic_1.groupByCount)([1, 2, 3], 3)).toEqual([[1, 2, 3]]); expect((0, logic_1.groupByCount)([1, 2, 3, 4, 5, 6], 3)).toEqual([[1, 2, 3], [4, 5, 6]]); expect((0, logic_1.groupByCount)([1, 2, 3, 4, 5, 6, 7], 3)).toEqual([[1, 2, 3], [4, 5, 6], [7]]); expect((0, logic_1.groupByCount)([1, 2, 3, 4, 5, 6, 7, 8, 9], 3)).toEqual([[1, 2, 3], [4, 5, 6], [7, 8, 9]]); expect((0, logic_1.groupByCount)([1, 2, 3], 1)).toEqual([[1], [2], [3]]); expect(() => { (0, logic_1.groupByCount)([1, 2, 3], 0); }).toThrow(); }); test("group by adjacent", () => { expect((0, logic_1.groupByAdjacent)([], x => x)).toEqual([]); expect((0, logic_1.groupByAdjacent)([1, 1, 1, 2, 1, 1, 3, 3, 2, 2, 1, 1], x => x)).toEqual([ { key: 1, items: [1, 1, 1] }, { key: 2, items: [2] }, { key: 1, items: [1, 1] }, { key: 3, items: [3, 3] }, { key: 2, items: [2, 2] }, { key: 1, items: [1, 1] } ]); expect((0, logic_1.groupByAdjacent)(["ra", "rb", "aa", "ab", "ra", "rc"], x => x.substr(0, 1))).toEqual([ { key: "r", items: ["ra", "rb"] }, { key: "a", items: ["aa", "ab"] }, { key: "r", items: ["ra", "rc"] } ]); }); test("reorder", () => { const items = [ { key: "b" }, { key: "c" }, { key: "a" }, { key: "d", value: 1 }, { key: "d", value: 2 }, ]; expect((0, logic_1.reorder)(items, [], x => x.key)).toEqual([]); expect((0, logic_1.reorder)(items, ["x", "y", "z"], x => x.key)).toEqual([]); expect((0, logic_1.reorder)(items, ["a", "a"], x => x.key)).toEqual([ { key: "a" }, { key: "a" } ]); expect((0, logic_1.reorder)(items, ["a", "b", "c"], x => x.key)).toEqual([ { key: "a" }, { key: "b" }, { key: "c" }, ]); expect((0, logic_1.reorder)(items, ["c", "b", "a"], x => x.key)).toEqual([ { key: "c" }, { key: "b" }, { key: "a" }, ]); expect((0, logic_1.reorder)(items, ["c", "b", "b"], x => x.key)).toEqual([ { key: "c" }, { key: "b" }, { key: "b" }, ]); expect((0, logic_1.reorder)(items, ["d"], x => x.key)).toEqual([ { key: "d", value: 1 }, { key: "d", value: 2 }, ]); expect((0, logic_1.reorder)(items, ["a", "d", "x", "d", "b", "d", "x"], x => x.key)).toEqual([ { key: "a" }, { key: "d", value: 1 }, { key: "d", value: 2 }, { key: "d", value: 1 }, { key: "d", value: 2 }, { key: "b" }, { key: "d", value: 1 }, { key: "d", value: 2 }, ]); }); test("time interval scale", () => { expect((0, dates_1.getTimeIntervalScale)(0)).toEqual({ amount: 0, type: "zero", units: "seconds" }); expect((0, dates_1.getTimeIntervalScale)(1)).toEqual({ amount: 1, type: "one", units: "seconds" }); expect((0, dates_1.getTimeIntervalScale)(2)).toEqual({ amount: 2, type: "few", units: "seconds" }); expect((0, dates_1.getTimeIntervalScale)(11)).toEqual({ amount: 11, type: "number", units: "seconds" }); expect((0, dates_1.getTimeIntervalScale)(60)).toEqual({ amount: 1, type: "one", units: "minutes" }); expect((0, dates_1.getTimeIntervalScale)(120)).toEqual({ amount: 2, type: "number", units: "minutes" }); expect((0, dates_1.getTimeIntervalScale)(3600 / 2)).toEqual({ amount: 0, type: "half", units: "hours" }); expect((0, dates_1.getTimeIntervalScale)(3600)).toEqual({ amount: 1, type: "one", units: "hours" }); expect((0, dates_1.getTimeIntervalScale)(3600 * 2)).toEqual({ amount: 2, type: "number", units: "hours" }); expect((0, dates_1.getTimeIntervalScale)(3600 * 24)).toEqual({ amount: 1, type: "one", units: "days" }); expect((0, dates_1.getTimeIntervalScale)(3600 * 24 * 3)).toEqual({ amount: 3, type: "number", units: "days" }); expect((0, dates_1.getTimeIntervalScale)(3600 * 24 * 40)).toEqual({ amount: 1, type: "one", units: "months" }); expect((0, dates_1.getTimeIntervalScale)(3600 * 24 * 70)).toEqual({ amount: 2, type: "number", units: "months" }); expect((0, dates_1.getTimeIntervalScale)(3600 * 24 * 400)).toEqual({ amount: 1, type: "one", units: "years" }); expect((0, dates_1.getTimeIntervalScale)(3600 * 24 * 750)).toEqual({ amount: 2, type: "number", units: "years" }); }); test("dateDiff", () => { expect((0, dates_1.dateDiff)(new Date(2021, 0, 26), new Date(2021, 0, 25), "days")).toEqual(1); expect((0, dates_1.dateDiff)(new Date(2021, 0, 26), new Date(2021, 0, 25), "seconds")).toEqual(3600 * 24); expect((0, dates_1.dateDiff)(new Date(2021, 0, 25, 3), new Date(2021, 0, 25), "hours")).toEqual(3); }); test("hexToAscii", () => { expect((0, _1.hexToAscii)("0x72656e7461310000000000000000000000000000000000000000000000000000")).toEqual("renta1"); expect((0, _1.hexToAscii)("72656e7461310000000000000000000000000000000000000000000000000000")).toEqual("renta1"); expect((0, _1.hexToAscii)("72656e746131")).toEqual("renta1"); expect((0, _1.hexToAscii)("0x0000000000000000000000000000000035323034313634393937373237343937")).toEqual("5204164997727497"); expect((0, _1.hexToAscii)("0x35323034313634393937373237343937")).toEqual("5204164997727497"); expect((0, _1.hexToAscii)("35323034313634393937373237343937")).toEqual("5204164997727497"); }); test("asciiToHex", () => { expect((0, _1.asciiToHex)("A")).toEqual("41"); expect((0, _1.asciiToHex)("ABC")).toEqual("414243"); expect((0, _1.asciiToHex)("\t")).toEqual("09"); expect((0, _1.asciiToHex)("\r\n")).toEqual("0d0a"); }); test("pad", () => { expect((0, _1.padLeft)("1", 3, "0")).toEqual("001"); expect((0, _1.padLeft)("12", 3, "0")).toEqual("012"); expect((0, _1.padLeft)("123", 3, "0")).toEqual("123"); expect((0, _1.padLeft)("1234", 3, "0")).toEqual("1234"); expect((0, _1.padRight)("1", 3, "0")).toEqual("100"); expect((0, _1.padRight)("12", 3, "0")).toEqual("120"); expect((0, _1.padRight)("123", 3, "0")).toEqual("123"); expect((0, _1.padRight)("1234", 3, "0")).toEqual("1234"); }); test("trim", () => { expect((0, logic_1.trimLeft)("1", "0")).toEqual("1"); expect((0, logic_1.trimLeft)("001", "0")).toEqual("1"); expect((0, logic_1.trimLeft)("0010", "0")).toEqual("10"); expect((0, logic_1.trimLeft)("00100", "0")).toEqual("100"); expect((0, logic_1.trimLeft)("100", "0")).toEqual("100"); expect((0, _1.trimRight)("1", "0")).toEqual("1"); expect((0, _1.trimRight)("01", "0")).toEqual("01"); expect((0, _1.trimRight)("010", "0")).toEqual("01"); expect((0, _1.trimRight)("0100", "0")).toEqual("01"); expect((0, _1.trimRight)("00100", "0")).toEqual("001"); expect((0, _1.trim)("1", "0")).toEqual("1"); expect((0, _1.trim)("10", "0")).toEqual("1"); expect((0, _1.trim)("100", "0")).toEqual("1"); expect((0, _1.trim)("0100", "0")).toEqual("1"); expect((0, _1.trim)("00100", "0")).toEqual("1"); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naWMudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9sb2dpYy50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O0FBQUEsdUNBQXdDO0FBQ3hDLG1DQUEyTDtBQUMzTCw4Q0FBdUM7QUFDdkMsbUNBQXlEO0FBQ3pELHdCQUErRTtBQUkvRSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsR0FBUyxFQUFFO0lBRXBDLGVBQWU7SUFDZixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7SUFDZCxNQUFNLEtBQUssR0FBRyxHQUFHLEVBQUU7UUFDZixLQUFLLEVBQUUsQ0FBQztRQUNSLE9BQU8sSUFBQSxxQkFBVyxFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQzNCLENBQUMsQ0FBQztJQUVGLE1BQU0sR0FBRyxHQUFHLElBQUEsOEJBQXNCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFFMUMsa0JBQWtCO0lBQ2xCLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFdEIsSUFBSSxNQUFNLEdBQVcsQ0FBQyxDQUFDO0lBQ3ZCLDRCQUE0QjtJQUM1QixHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQy9CLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDeEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUV0QixNQUFNLEdBQUcsQ0FBQyxDQUFDO0lBQ1gsTUFBTSxJQUFBLGlCQUFLLEVBQUMsRUFBRSxDQUFDLENBQUM7SUFFaEIsZ0RBQWdEO0lBQ2hELEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7SUFDL0IsTUFBTSxDQUFDLE1BQU0sQ0FBQyxD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QUMsQ0FBQztJQUNuRSxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVsRSxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLFdBQVcsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRWpFLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTFDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3RDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3BDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckMsTUFBTSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVyQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU3QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUUzQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVoRCxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNyQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUV0QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN6QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzFDLE1BQU0sQ0FBQyxJQUFBLGdCQUFRLEVBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFMUMsTUFBTSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0MsTUFBTSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDNUMsTUFBTSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDN0MsTUFBTSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLElBQUEsZ0JBQVEsRUFBQyxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU5QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLFdBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLHlDQUF5QztJQUM3RixNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFD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QyxJQUFJLENBQUMsQ0FBQztJQUdsRCxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUU5QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM5QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNoRCxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVoRCxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUVoRCxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLGtCQUFrQixFQUFFLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7QUFFekUsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsc0JBQXNCLEVBQUUsR0FBRyxFQUFFO0lBQzlCLE1BQU0sQ0FBQyxJQUFBLDRCQUFvQixFQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNyRCxNQUFNLENBQUMsSUFBQSw0QkFBb0IsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUN6RSxNQUFNLENBQUMsSUFBQSw0QkFBb0IsRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsaUJBQWlCLENBQUMsQ0FBQztJQUd4RSxNQUFNLENBQUMsSUFBQSw0QkFBb0IsRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUMxQyxNQUFNLENBQUMsSUFBQSw0QkFBb0IsRUFBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN4RCxNQUFNLENBQUMsSUFBQSw0QkFBb0IsRUFBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFELE1BQU0sQ0FBQyxJQUFBLDRCQUFvQixFQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUM7SUFDN0QsTUFBTSxDQUFDLElBQUEsNEJBQW9CLEVBQUMsaUJBQWlCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BFLE1BQU0sQ0FBQyxJQUFBLDRCQUFvQixFQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQztBQUN6RSxDQUFDLENBQUMsQ0FBQztBQUVILElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO0lBQ2xCLE1BQU0sQ0FBQyxJQUFBLFdBQUcsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hELE1BQU0sQ0FBQyxJQUFBLFdBQUcsRUFBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNwRCxNQUFNLENBQUMsSUFBQSxXQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxJQUFBLFdBQUcsRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDOUMsTUFBTSxDQUFDLElBQUEsV0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QyxNQUFNLENBQUMsSUFBQSxXQUFHLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEQsTUFBTSxDQUFDLElBQUEsV0FBRyxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFO0lBQ3hCLE1BQU0sQ0FBQyxJQUFBLG9CQUFZLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxJQUFBLG9CQUFZLEVBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sQ0FBQyxJQUFBLG9CQUFZLEVBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxJQUFBLG9CQUFZLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxNQUFNLENBQUMsSUFBQSxvQkFBWSxFQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVFLE1BQU0sQ0FBQyxJQUFBLG9CQUFZLEVBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDcEYsTUFBTSxDQUFDLElBQUEsb0JBQVksRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFaEcsTUFBTSxDQUFDLElBQUEsb0JBQVksRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsTUFBTSxDQUFDLEdBQUcsRUFBRTtRQUNSLElBQUEsb0JBQVksRUFBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDL0IsQ0FBQyxDQUFDLENBQUMsT0FBTyxF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Q0FBQztJQUVoRSxNQUFNLENBQUMsSUFBQSxlQUFPLEVBQUMsS0FBSyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ25ELEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNaLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtLQUNmLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxJQUFBLGVBQU8sRUFBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hELEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNaLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNaLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtLQUNmLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxJQUFBLGVBQU8sRUFBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hELEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNaLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNaLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtLQUNmLENBQUMsQ0FBQztJQUVILE1BQU0sQ0FBQyxJQUFBLGVBQU8sRUFBQyxLQUFLLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDO1FBQ3hELEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRTtRQUNaLEVBQUUsR0FBRyxFQUFFLEdBQUcs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LENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsSUFBQSxhQUFVLEVBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDL0MsQ0FBQyxDQUFDLENBQUM7QUFFSCxJQUFJLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRTtJQUNiLE1BQU0sQ0FBQyxJQUFBLFVBQU8sRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzVDLE1BQU0sQ0FBQyxJQUFBLFVBQU8sRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxJQUFBLFVBQU8sRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxJQUFBLFVBQU8sRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRWhELE1BQU0sQ0FBQyxJQUFBLFdBQVEsRUFBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxJQUFBLFdBQVEsRUFBQyxJQUFJLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE1BQU0sQ0FBQyxJQUFBLFdBQVEsRUFBQyxLQUFLLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQy9DLE1BQU0sQ0FBQyxJQUFBLFdBQVEsRUFBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBRXJELENBQUMsQ0FBQyxDQUFBO0FBRUYsSUFBSSxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUU7SUFFZCxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN4QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMxQyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM5QyxNQUFNLENBQUMsSUFBQSxnQkFBUSxFQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUU1QyxNQUFNLENBQUMsSUFBQSxZQUFTLEVBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sQ0FBQyxJQUFBLFlBQVMsRUFBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDM0MsTUFBTSxDQUFDLElBQUEsWUFBUyxFQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QyxNQUFNLENBQUMsSUFBQSxZQUFTLEVBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdDLE1BQU0sQ0FBQyxJQUFBLFlBQVMsRUFBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFFL0MsTUFBTSxDQUFDLElBQUEsT0FBSSxFQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNwQyxNQUFNLENBQUMsSUFBQSxPQUFJLEVBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3JDLE1BQU0sQ0FBQyxJQUFBLE9BQUksRUFBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDdEMsTUFBTSxDQUFDLElBQUEsT0FBSSxFQUFDLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUN2QyxNQUFNLENBQUMsSUFBQS