diff --git a/build/cli.cjs b/build/cli.cjs
index b0dc270..147be84 100755
--- a/build/cli.cjs
+++ b/build/cli.cjs
@@ -18,11 +18,31 @@ var Logger = require('logplease');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
+function _interopNamespace(e) {
+ if (e && e.__esModule) return e;
+ var n = Object.create(null);
+ if (e) {
+ Object.keys(e).forEach(function (k) {
+ if (k !== 'default') {
+ var d = Object.getOwnPropertyDescriptor(e, k);
+ Object.defineProperty(n, k, d.get ? d : {
+ enumerable: true,
+ get: function () { return e[k]; }
+ });
+ }
+ });
+ }
+ n["default"] = e;
+ return Object.freeze(n);
+}
+
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
+var fastFile__namespace = /*#__PURE__*/_interopNamespace(fastFile);
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
var Blake2b__default = /*#__PURE__*/_interopDefaultLegacy(Blake2b);
var readline__default = /*#__PURE__*/_interopDefaultLegacy(readline);
var crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto);
+var binFileUtils__namespace = /*#__PURE__*/_interopNamespace(binFileUtils);
var ejs__default = /*#__PURE__*/_interopDefaultLegacy(ejs);
var jsSha3__default = /*#__PURE__*/_interopDefaultLegacy(jsSha3);
var Logger__default = /*#__PURE__*/_interopDefaultLegacy(Logger);
@@ -52,7 +72,7 @@ async function loadSymbols(symFileName) {
varIdx2Name: [ "one" ],
componentIdx2Name: []
};
- const fd = await fastFile.readExisting(symFileName);
+ const fd = await fastFile__namespace.readExisting(symFileName);
const buff = await fd.read(fd.totalSize);
const symsStr = new TextDecoder("utf-8").decode(buff);
const lines = symsStr.split("\n");
@@ -100,7 +120,7 @@ async function loadSymbols(symFileName) {
along with snarkJS. If not, see .
*/
-function r1csPrint(r1cs, syms, logger) {
+function r1csPrint$1(r1cs, syms, logger) {
for (let i=0; i.
*/
-function stringifyBigInts(Fr, o) {
+function stringifyBigInts$4(Fr, o) {
if (o instanceof Uint8Array) {
return Fr.toString(o);
} else if (Array.isArray(o)) {
- return o.map(stringifyBigInts.bind(null, Fr));
+ return o.map(stringifyBigInts$4.bind(null, Fr));
} else if (typeof o == "object") {
const res = {};
const keys = Object.keys(o);
keys.forEach( (k) => {
- res[k] = stringifyBigInts(Fr, o[k]);
+ res[k] = stringifyBigInts$4(Fr, o[k]);
});
return res;
} else if ((typeof(o) == "bigint") || o.eq !== undefined) {
@@ -215,7 +235,7 @@ async function r1csExportJson(r1csFileName, logger) {
const Fr=cir.curve.Fr;
delete cir.curve;
- return stringifyBigInts(Fr, cir);
+ return stringifyBigInts$4(Fr, cir);
}
/*
@@ -236,13 +256,13 @@ async function r1csExportJson(r1csFileName, logger) {
You should have received a copy of the GNU General Public License
along with snarkJS. If not, see .
*/
-const __dirname$1 = path__default['default'].dirname(new URL((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('cli.cjs', document.baseURI).href))).pathname);
+const __dirname$2 = path__default["default"].dirname(new URL((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('cli.cjs', document.baseURI).href))).pathname);
let pkgS;
try {
- pkgS = fs__default['default'].readFileSync(path__default['default'].join(__dirname$1, "package.json"));
+ pkgS = fs__default["default"].readFileSync(path__default["default"].join(__dirname$2, "package.json"));
} catch (err) {
- pkgS = fs__default['default'].readFileSync(path__default['default'].join(__dirname$1, "..","package.json"));
+ pkgS = fs__default["default"].readFileSync(path__default["default"].join(__dirname$2, "..","package.json"));
}
const pkg = JSON.parse(pkgS);
@@ -526,7 +546,7 @@ function hashToG2(curve, hash) {
function getG2sp(curve, persinalization, challenge, g1s, g1sx) {
- const h = Blake2b__default['default'](64);
+ const h = Blake2b__default["default"](64);
const b1 = new Uint8Array([persinalization]);
h.update(b1);
h.update(challenge);
@@ -632,12 +652,12 @@ function hashIsEqual(h1, h2) {
function cloneHasher(h) {
const ph = h.getPartialHash();
- const res = Blake2b__default['default'](64);
+ const res = Blake2b__default["default"](64);
res.setPartialHash(ph);
return res;
}
-async function sameRatio(curve, g1s, g1sx, g2s, g2sx) {
+async function sameRatio$2(curve, g1s, g1sx, g2s, g2sx) {
if (curve.G1.isZero(g1s)) return false;
if (curve.G1.isZero(g1sx)) return false;
if (curve.G2.isZero(g2s)) return false;
@@ -652,7 +672,7 @@ function askEntropy() {
if (process.browser) {
return window.prompt("Enter a random text. (Entropy): ", "");
} else {
- const rl = readline__default['default'].createInterface({
+ const rl = readline__default["default"].createInterface({
input: process.stdin,
output: process.stdout
});
@@ -668,8 +688,8 @@ async function getRandomRng(entropy) {
while (!entropy) {
entropy = await askEntropy();
}
- const hasher = Blake2b__default['default'](64);
- hasher.update(crypto__default['default'].randomBytes(64));
+ const hasher = Blake2b__default["default"](64);
+ hasher.update(crypto__default["default"].randomBytes(64));
const enc = new TextEncoder(); // always utf-8
hasher.update(enc.encode(entropy));
const hash = Buffer.from(hasher.digest());
@@ -696,7 +716,7 @@ function rngFromBeaconParams(beaconHash, numIterationsExp) {
let curHash = beaconHash;
for (let i=0; i.
*/
-const sameRatio$1 = sameRatio;
+const sameRatio$1 = sameRatio$2;
async function verifyContribution(curve, cur, prev, logger) {
let sr;
@@ -1636,9 +1656,9 @@ async function verifyContribution(curve, cur, prev, logger) {
async function verify(tauFilename, logger) {
let sr;
- await Blake2b__default['default'].ready();
+ await Blake2b__default["default"].ready();
- const {fd, sections} = await binFileUtils.readBinFile(tauFilename, "ptau", 1);
+ const {fd, sections} = await binFileUtils__namespace.readBinFile(tauFilename, "ptau", 1);
const {curve, power, ceremonyPower} = await readPTauHeader(fd, sections);
const contrs = await readContributions(fd, curve, sections);
@@ -1653,7 +1673,7 @@ async function verify(tauFilename, logger) {
betaG1: curve.G1.g,
betaG2: curve.G2.g,
nextChallenge: calculateFirstChallengeHash(curve, ceremonyPower, logger),
- responseHash: Blake2b__default['default'](64).digest()
+ responseHash: Blake2b__default["default"](64).digest()
};
if (contrs.length == 0) {
@@ -1673,7 +1693,7 @@ async function verify(tauFilename, logger) {
if (!res) return false;
- const nextContributionHasher = Blake2b__default['default'](64);
+ const nextContributionHasher = Blake2b__default["default"](64);
nextContributionHasher.update(curContr.responseHash);
// Verify powers and compute nextChallengeHash
@@ -1807,7 +1827,7 @@ async function verify(tauFilename, logger) {
const buffV = new Uint8Array(curve.G1.F.n8*2*6+curve.G2.F.n8*2*3);
toPtauPubKeyRpr(buffV, 0, curve, curContr.key, false);
- const responseHasher = Blake2b__default['default'](64);
+ const responseHasher = Blake2b__default["default"](64);
responseHasher.setPartialHash(curContr.partialHash);
responseHasher.update(buffV);
const responseHash = responseHasher.digest();
@@ -1851,7 +1871,7 @@ async function verify(tauFilename, logger) {
const MAX_CHUNK_SIZE = 1<<16;
const G = curve[groupName];
const sG = G.F.n8*2;
- await binFileUtils.startReadUniqueSection(fd, sections, idSection);
+ await binFileUtils__namespace.startReadUniqueSection(fd, sections, idSection);
const singularPoints = [];
@@ -1869,12 +1889,12 @@ async function verify(tauFilename, logger) {
nextContributionHasher.update(basesU);
const scalars = new Uint8Array(4*(n-1));
- crypto__default['default'].randomFillSync(scalars);
+ crypto__default["default"].randomFillSync(scalars);
if (i>0) {
const firstBase = G.fromRprLEM(bases, 0);
- const r = crypto__default['default'].randomBytes(4).readUInt32BE(0, true);
+ const r = crypto__default["default"].randomBytes(4).readUInt32BE(0, true);
R1 = G.add(R1, G.timesScalar(lastBase, r));
R2 = G.add(R2, G.timesScalar(firstBase, r));
@@ -1897,7 +1917,7 @@ async function verify(tauFilename, logger) {
}
}
- await binFileUtils.endReadSection(fd);
+ await binFileUtils__namespace.endReadSection(fd);
return {
R1: R1,
@@ -1915,7 +1935,7 @@ async function verify(tauFilename, logger) {
const seed= new Array(8);
for (let i=0; i<8; i++) {
- seed[i] = crypto__default['default'].randomBytes(4).readUInt32BE(0, true);
+ seed[i] = crypto__default["default"].randomBytes(4).readUInt32BE(0, true);
}
for (let p=0; p<= power; p ++) {
@@ -1951,7 +1971,7 @@ async function verify(tauFilename, logger) {
buff_r = new Uint8Array(buff_r.buffer, buff_r.byteOffset, buff_r.byteLength);
if (logger) logger.debug(`reading points Powers${p}...`);
- await binFileUtils.startReadUniqueSection(fd, sections, tauSection);
+ await binFileUtils__namespace.startReadUniqueSection(fd, sections, tauSection);
buffG = new ffjavascript.BigBuffer(nPoints*sG);
if (p == power+1) {
await fd.readToBuffer(buffG, 0, (nPoints-1)*sG);
@@ -1959,7 +1979,7 @@ async function verify(tauFilename, logger) {
} else {
await fd.readToBuffer(buffG, 0, nPoints*sG);
}
- await binFileUtils.endReadSection(fd, true);
+ await binFileUtils__namespace.endReadSection(fd, true);
const resTau = await G.multiExpAffine(buffG, buff_r, logger, sectionName + "_" + p);
@@ -1986,10 +2006,10 @@ async function verify(tauFilename, logger) {
buff_r = await curve.Fr.batchFromMontgomery(buff_r);
if (logger) logger.debug(`reading points Lagrange${p}...`);
- await binFileUtils.startReadUniqueSection(fd, sections, lagrangeSection);
+ await binFileUtils__namespace.startReadUniqueSection(fd, sections, lagrangeSection);
fd.pos += sG*((2 ** p)-1);
await fd.readToBuffer(buffG, 0, nPoints*sG);
- await binFileUtils.endReadSection(fd, true);
+ await binFileUtils__namespace.endReadSection(fd, true);
const resLagrange = await G.multiExpAffine(buffG, buff_r, logger, sectionName + "_" + p + "_transformed");
@@ -2035,8 +2055,8 @@ async function applyKeyToSection(fdOld, sections, fdNew, idSection, curve, group
const sG = G.F.n8*2;
const nPoints = sections[idSection][0].size / sG;
- await binFileUtils.startReadUniqueSection(fdOld, sections,idSection );
- await binFileUtils.startWriteSection(fdNew, idSection);
+ await binFileUtils__namespace.startReadUniqueSection(fdOld, sections,idSection );
+ await binFileUtils__namespace.startWriteSection(fdNew, idSection);
let t = first;
for (let i=0; i.
*/
-async function beacon(oldPtauFilename, newPTauFilename, name, beaconHashStr,numIterationsExp, logger) {
+async function beacon$1(oldPtauFilename, newPTauFilename, name, beaconHashStr,numIterationsExp, logger) {
const beaconHash = hex2ByteArray(beaconHashStr);
if ( (beaconHash.byteLength == 0)
|| (beaconHash.byteLength*2 !=beaconHashStr.length))
@@ -2210,9 +2230,9 @@ async function beacon(oldPtauFilename, newPTauFilename, name, beaconHashStr,num
}
- await Blake2b__default['default'].ready();
+ await Blake2b__default["default"].ready();
- const {fd: fdOld, sections} = await binFileUtils.readBinFile(oldPtauFilename, "ptau", 1);
+ const {fd: fdOld, sections} = await binFileUtils__namespace.readBinFile(oldPtauFilename, "ptau", 1);
const {curve, power, ceremonyPower} = await readPTauHeader(fdOld, sections);
if (power != ceremonyPower) {
if (logger) logger.error("This file has been reduced. You cannot contribute into a reduced file.");
@@ -2239,10 +2259,10 @@ async function beacon(oldPtauFilename, newPTauFilename, name, beaconHashStr,num
curContribution.key = keyFromBeacon(curve, lastChallengeHash, beaconHash, numIterationsExp);
- const responseHasher = new Blake2b__default['default'](64);
+ const responseHasher = new Blake2b__default["default"](64);
responseHasher.update(lastChallengeHash);
- const fdNew = await binFileUtils.createBinFile(newPTauFilename, "ptau", 1, 7);
+ const fdNew = await binFileUtils__namespace.createBinFile(newPTauFilename, "ptau", 1, 7);
await writePTauHeader(fdNew, curve, power);
const startSections = [];
@@ -2270,7 +2290,7 @@ async function beacon(oldPtauFilename, newPTauFilename, name, beaconHashStr,num
if (logger) logger.info(formatHash(hashResponse, "Contribution Response Hash imported: "));
- const nextChallengeHasher = new Blake2b__default['default'](64);
+ const nextChallengeHasher = new Blake2b__default["default"](64);
nextChallengeHasher.update(hashResponse);
await hashSection(fdNew, "G1", 2, (2 ** power) * 2 -1, "tauG1", logger);
@@ -2296,7 +2316,7 @@ async function beacon(oldPtauFilename, newPTauFilename, name, beaconHashStr,num
const res = [];
fdOld.pos = sections[sectionId][0].p;
- await binFileUtils.startWriteSection(fdNew, sectionId);
+ await binFileUtils__namespace.startWriteSection(fdNew, sectionId);
startSections[sectionId] = fdNew.pos;
@@ -2328,7 +2348,7 @@ async function beacon(oldPtauFilename, newPTauFilename, name, beaconHashStr,num
t = curve.Fr.mul(t, curve.Fr.exp(inc, n));
}
- await binFileUtils.endWriteSection(fdNew);
+ await binFileUtils__namespace.endWriteSection(fdNew);
return res;
}
@@ -2378,9 +2398,9 @@ async function beacon(oldPtauFilename, newPTauFilename, name, beaconHashStr,num
*/
async function contribute(oldPtauFilename, newPTauFilename, name, entropy, logger) {
- await Blake2b__default['default'].ready();
+ await Blake2b__default["default"].ready();
- const {fd: fdOld, sections} = await binFileUtils.readBinFile(oldPtauFilename, "ptau", 1);
+ const {fd: fdOld, sections} = await binFileUtils__namespace.readBinFile(oldPtauFilename, "ptau", 1);
const {curve, power, ceremonyPower} = await readPTauHeader(fdOld, sections);
if (power != ceremonyPower) {
if (logger) logger.error("This file has been reduced. You cannot contribute into a reduced file.");
@@ -2411,10 +2431,10 @@ async function contribute(oldPtauFilename, newPTauFilename, name, entropy, logge
curContribution.key = createPTauKey(curve, lastChallengeHash, rng);
- const responseHasher = new Blake2b__default['default'](64);
+ const responseHasher = new Blake2b__default["default"](64);
responseHasher.update(lastChallengeHash);
- const fdNew = await binFileUtils.createBinFile(newPTauFilename, "ptau", 1, 7);
+ const fdNew = await binFileUtils__namespace.createBinFile(newPTauFilename, "ptau", 1, 7);
await writePTauHeader(fdNew, curve, power);
const startSections = [];
@@ -2442,7 +2462,7 @@ async function contribute(oldPtauFilename, newPTauFilename, name, entropy, logge
if (logger) logger.info(formatHash(hashResponse, "Contribution Response Hash imported: "));
- const nextChallengeHasher = new Blake2b__default['default'](64);
+ const nextChallengeHasher = new Blake2b__default["default"](64);
nextChallengeHasher.update(hashResponse);
await hashSection(fdNew, "G1", 2, (2 ** power) * 2 -1, "tauG1");
@@ -2468,7 +2488,7 @@ async function contribute(oldPtauFilename, newPTauFilename, name, entropy, logge
const res = [];
fdOld.pos = sections[sectionId][0].p;
- await binFileUtils.startWriteSection(fdNew, sectionId);
+ await binFileUtils__namespace.startWriteSection(fdNew, sectionId);
startSections[sectionId] = fdNew.pos;
@@ -2500,7 +2520,7 @@ async function contribute(oldPtauFilename, newPTauFilename, name, entropy, logge
t = curve.Fr.mul(t, curve.Fr.exp(inc, n));
}
- await binFileUtils.endWriteSection(fdNew);
+ await binFileUtils__namespace.endWriteSection(fdNew);
return res;
}
@@ -2553,18 +2573,18 @@ async function contribute(oldPtauFilename, newPTauFilename, name, entropy, logge
async function preparePhase2(oldPtauFilename, newPTauFilename, logger) {
- const {fd: fdOld, sections} = await binFileUtils.readBinFile(oldPtauFilename, "ptau", 1);
+ const {fd: fdOld, sections} = await binFileUtils__namespace.readBinFile(oldPtauFilename, "ptau", 1);
const {curve, power} = await readPTauHeader(fdOld, sections);
- const fdNew = await binFileUtils.createBinFile(newPTauFilename, "ptau", 1, 11);
+ const fdNew = await binFileUtils__namespace.createBinFile(newPTauFilename, "ptau", 1, 11);
await writePTauHeader(fdNew, curve, power);
- await binFileUtils.copySection(fdOld, sections, fdNew, 2);
- await binFileUtils.copySection(fdOld, sections, fdNew, 3);
- await binFileUtils.copySection(fdOld, sections, fdNew, 4);
- await binFileUtils.copySection(fdOld, sections, fdNew, 5);
- await binFileUtils.copySection(fdOld, sections, fdNew, 6);
- await binFileUtils.copySection(fdOld, sections, fdNew, 7);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 2);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 3);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 4);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 5);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 6);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 7);
await processSection(2, 12, "G1", "tauG1" );
await processSection(3, 13, "G2", "tauG2" );
@@ -2581,7 +2601,7 @@ async function preparePhase2(oldPtauFilename, newPTauFilename, logger) {
async function processSection(oldSectionId, newSectionId, Gstr, sectionName) {
if (logger) logger.debug("Starting section: "+sectionName);
- await binFileUtils.startWriteSection(fdNew, newSectionId);
+ await binFileUtils__namespace.startWriteSection(fdNew, newSectionId);
for (let p=0; p<=power; p++) {
await processSectionPower(p);
@@ -2591,27 +2611,27 @@ async function preparePhase2(oldPtauFilename, newPTauFilename, logger) {
await processSectionPower(power+1);
}
- await binFileUtils.endWriteSection(fdNew);
+ await binFileUtils__namespace.endWriteSection(fdNew);
async function processSectionPower(p) {
const nPoints = 2 ** p;
const G = curve[Gstr];
- const Fr = curve.Fr;
+ curve.Fr;
const sGin = G.F.n8*2;
- const sGmid = G.F.n8*3;
+ G.F.n8*3;
let buff;
buff = new ffjavascript.BigBuffer(nPoints*sGin);
- await binFileUtils.startReadUniqueSection(fdOld, sections, oldSectionId);
+ await binFileUtils__namespace.startReadUniqueSection(fdOld, sections, oldSectionId);
if ((oldSectionId == 2)&&(p==power+1)) {
await fdOld.readToBuffer(buff, 0,(nPoints-1)*sGin );
buff.set(curve.G1.zeroAffine, (nPoints-1)*sGin );
} else {
await fdOld.readToBuffer(buff, 0,nPoints*sGin );
}
- await binFileUtils.endReadSection(fdOld, true);
+ await binFileUtils__namespace.endReadSection(fdOld, true);
buff = await G.lagrangeEvaluations(buff, "affine", "affine", logger, sectionName);
@@ -2691,7 +2711,7 @@ async function preparePhase2(oldPtauFilename, newPTauFilename, logger) {
async function truncate(ptauFilename, template, logger) {
- const {fd: fdOld, sections} = await binFileUtils.readBinFile(ptauFilename, "ptau", 1);
+ const {fd: fdOld, sections} = await binFileUtils__namespace.readBinFile(ptauFilename, "ptau", 1);
const {curve, power, ceremonyPower} = await readPTauHeader(fdOld, sections);
const sG1 = curve.G1.F.n8*2;
@@ -2712,19 +2732,19 @@ async function truncate(ptauFilename, template, logger) {
if (logger) logger.debug("Writing Power: "+sP);
- const fdNew = await binFileUtils.createBinFile(template + sP + ".ptau", "ptau", 1, 11);
+ const fdNew = await binFileUtils__namespace.createBinFile(template + sP + ".ptau", "ptau", 1, 11);
await writePTauHeader(fdNew, curve, p, ceremonyPower);
- await binFileUtils.copySection(fdOld, sections, fdNew, 2, ((2 ** p)*2-1) * sG1 ); // tagG1
- await binFileUtils.copySection(fdOld, sections, fdNew, 3, (2 ** p) * sG2); // tauG2
- await binFileUtils.copySection(fdOld, sections, fdNew, 4, (2 ** p) * sG1); // alfaTauG1
- await binFileUtils.copySection(fdOld, sections, fdNew, 5, (2 ** p) * sG1); // betaTauG1
- await binFileUtils.copySection(fdOld, sections, fdNew, 6, sG2); // betaTauG2
- await binFileUtils.copySection(fdOld, sections, fdNew, 7); // contributions
- await binFileUtils.copySection(fdOld, sections, fdNew, 12, ((2 ** (p+1))*2 -1) * sG1); // L_tauG1
- await binFileUtils.copySection(fdOld, sections, fdNew, 13, ((2 ** p)*2 -1) * sG2); // L_tauG2
- await binFileUtils.copySection(fdOld, sections, fdNew, 14, ((2 ** p)*2 -1) * sG1); // L_alfaTauG1
- await binFileUtils.copySection(fdOld, sections, fdNew, 15, ((2 ** p)*2 -1) * sG1); // L_betaTauG1
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 2, ((2 ** p)*2-1) * sG1 ); // tagG1
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 3, (2 ** p) * sG2); // tauG2
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 4, (2 ** p) * sG1); // alfaTauG1
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 5, (2 ** p) * sG1); // betaTauG1
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 6, sG2); // betaTauG2
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 7); // contributions
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 12, ((2 ** (p+1))*2 -1) * sG1); // L_tauG1
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 13, ((2 ** p)*2 -1) * sG2); // L_tauG2
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 14, ((2 ** p)*2 -1) * sG1); // L_alfaTauG1
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 15, ((2 ** p)*2 -1) * sG1); // L_betaTauG1
await fdNew.close();
}
@@ -2753,25 +2773,25 @@ async function truncate(ptauFilename, template, logger) {
async function convert(oldPtauFilename, newPTauFilename, logger) {
- const {fd: fdOld, sections} = await binFileUtils.readBinFile(oldPtauFilename, "ptau", 1);
+ const {fd: fdOld, sections} = await binFileUtils__namespace.readBinFile(oldPtauFilename, "ptau", 1);
const {curve, power} = await readPTauHeader(fdOld, sections);
- const fdNew = await binFileUtils.createBinFile(newPTauFilename, "ptau", 1, 11);
+ const fdNew = await binFileUtils__namespace.createBinFile(newPTauFilename, "ptau", 1, 11);
await writePTauHeader(fdNew, curve, power);
// const fdTmp = await fastFile.createOverride(newPTauFilename+ ".tmp");
- await binFileUtils.copySection(fdOld, sections, fdNew, 2);
- await binFileUtils.copySection(fdOld, sections, fdNew, 3);
- await binFileUtils.copySection(fdOld, sections, fdNew, 4);
- await binFileUtils.copySection(fdOld, sections, fdNew, 5);
- await binFileUtils.copySection(fdOld, sections, fdNew, 6);
- await binFileUtils.copySection(fdOld, sections, fdNew, 7);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 2);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 3);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 4);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 5);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 6);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 7);
await processSection(2, 12, "G1", "tauG1" );
- await binFileUtils.copySection(fdOld, sections, fdNew, 13);
- await binFileUtils.copySection(fdOld, sections, fdNew, 14);
- await binFileUtils.copySection(fdOld, sections, fdNew, 15);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 13);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 14);
+ await binFileUtils__namespace.copySection(fdOld, sections, fdNew, 15);
await fdOld.close();
await fdNew.close();
@@ -2783,23 +2803,23 @@ async function convert(oldPtauFilename, newPTauFilename, logger) {
async function processSection(oldSectionId, newSectionId, Gstr, sectionName) {
if (logger) logger.debug("Starting section: "+sectionName);
- await binFileUtils.startWriteSection(fdNew, newSectionId);
+ await binFileUtils__namespace.startWriteSection(fdNew, newSectionId);
const size = sections[newSectionId][0].size;
const chunkSize = fdOld.pageSize;
- await binFileUtils.startReadUniqueSection(fdOld, sections, newSectionId);
+ await binFileUtils__namespace.startReadUniqueSection(fdOld, sections, newSectionId);
for (let p=0; p.
*/
-const sameRatio$2 = sameRatio;
+const sameRatio = sameRatio$2;
async function phase2verifyFromInit(initFileName, pTauFileName, zkeyFileName, logger) {
let sr;
- await Blake2b__default['default'].ready();
+ await Blake2b__default["default"].ready();
- const {fd, sections} = await binFileUtils.readBinFile(zkeyFileName, "zkey", 2);
- const zkey = await readHeader(fd, sections, false);
+ const {fd, sections} = await binFileUtils__namespace.readBinFile(zkeyFileName, "zkey", 2);
+ const zkey = await readHeader$1(fd, sections, false);
if (zkey.protocol != "groth16") {
throw new Error("zkey file is not groth16");
}
@@ -4426,7 +4446,7 @@ async function phase2verifyFromInit(initFileName, pTauFileName, zkeyFileName, lo
const mpcParams = await readMPCParams(fd, curve, sections);
- const accumulatedHasher = Blake2b__default['default'](64);
+ const accumulatedHasher = Blake2b__default["default"](64);
accumulatedHasher.update(mpcParams.csHash);
let curDelta = curve.G1.g;
for (let i=0; i.
*/
-const {stringifyBigInts: stringifyBigInts$1} = ffjavascript.utils;
+const {stringifyBigInts: stringifyBigInts$3} = ffjavascript.utils;
async function zkeyExportVerificationKey(zkeyName, /* logger */ ) {
- const {fd, sections} = await binFileUtils.readBinFile(zkeyName, "zkey", 2);
- const zkey = await readHeader(fd, sections);
+ const {fd, sections} = await binFileUtils__namespace.readBinFile(zkeyName, "zkey", 2);
+ const zkey = await readHeader$1(fd, sections);
let res;
if (zkey.protocol == "groth16") {
@@ -5299,16 +5319,16 @@ async function groth16Vk(zkey, fd, sections) {
// Read IC Section
///////////
- await binFileUtils.startReadUniqueSection(fd, sections, 3);
+ await binFileUtils__namespace.startReadUniqueSection(fd, sections, 3);
vKey.IC = [];
for (let i=0; i<= zkey.nPublic; i++) {
const buff = await fd.read(sG1);
const P = curve.G1.toObject(buff);
vKey.IC.push(P);
}
- await binFileUtils.endReadSection(fd);
+ await binFileUtils__namespace.endReadSection(fd);
- vKey = stringifyBigInts$1(vKey);
+ vKey = stringifyBigInts$3(vKey);
return vKey;
}
@@ -5340,7 +5360,7 @@ async function plonkVk(zkey) {
w: curve.Fr.toObject(curve.Fr.w[zkey.power])
};
- vKey = stringifyBigInts$1(vKey);
+ vKey = stringifyBigInts$3(vKey);
return vKey;
}
@@ -5356,7 +5376,7 @@ async function exportSolidityVerifier(zKeyName, templates, logger) {
let template = templates[verificationKey.protocol];
- return ejs__default['default'].render(template , verificationKey);
+ return ejs__default["default"].render(template , verificationKey);
}
/*
@@ -5381,48 +5401,48 @@ async function exportSolidityVerifier(zKeyName, templates, logger) {
async function write(fd, witness, prime) {
- await binFileUtils.startWriteSection(fd, 1);
+ await binFileUtils__namespace.startWriteSection(fd, 1);
const n8 = (Math.floor( (ffjavascript.Scalar.bitLength(prime) - 1) / 64) +1)*8;
await fd.writeULE32(n8);
- await binFileUtils.writeBigInt(fd, prime, n8);
+ await binFileUtils__namespace.writeBigInt(fd, prime, n8);
await fd.writeULE32(witness.length);
- await binFileUtils.endWriteSection(fd);
+ await binFileUtils__namespace.endWriteSection(fd);
- await binFileUtils.startWriteSection(fd, 2);
+ await binFileUtils__namespace.startWriteSection(fd, 2);
for (let i=0; i.
*/
-async function wtnsCalculate(input, wasmFileName, wtnsFileName, options) {
+async function wtnsCalculate$1(input, wasmFileName, wtnsFileName, options) {
- const fdWasm = await fastFile.readExisting(wasmFileName);
+ const fdWasm = await fastFile__namespace.readExisting(wasmFileName);
const wasm = await fdWasm.read(fdWasm.totalSize);
await fdWasm.close();
const wc = await circom_runtime.WitnessCalculatorBuilder(wasm);
const w = await wc.calculateBinWitness(input);
- const fdWtns = await binFileUtils.createBinFile(wtnsFileName, "wtns", 2, 2);
+ const fdWtns = await binFileUtils__namespace.createBinFile(wtnsFileName, "wtns", 2, 2);
await writeBin(fdWtns, w, wc.prime);
await fdWtns.close();
@@ -5869,12 +5889,12 @@ async function wtnsCalculate(input, wasmFileName, wtnsFileName, options) {
along with snarkJS. If not, see .
*/
-async function groth16FullProve(input, wasmFile, zkeyFileName, logger) {
+async function groth16FullProve$1(input, wasmFile, zkeyFileName, logger) {
const wtns= {
type: "mem"
};
- await wtnsCalculate(input, wasmFile, wtns);
- return await groth16Prove(zkeyFileName, wtns, logger);
+ await wtnsCalculate$1(input, wasmFile, wtns);
+ return await groth16Prove$1(zkeyFileName, wtns, logger);
}
/*
@@ -5895,9 +5915,9 @@ async function groth16FullProve(input, wasmFile, zkeyFileName, logger) {
You should have received a copy of the GNU General Public License along with
snarkjs. If not, see .
*/
-const {unstringifyBigInts} = ffjavascript.utils;
+const {unstringifyBigInts: unstringifyBigInts$2} = ffjavascript.utils;
-async function groth16Verify(vk_verifier, publicSignals, proof, logger) {
+async function groth16Verify$1(vk_verifier, publicSignals, proof, logger) {
/*
let cpub = vk_verifier.IC[0];
for (let s= 0; s< vk_verifier.nPublic; s++) {
@@ -5905,9 +5925,9 @@ async function groth16Verify(vk_verifier, publicSignals, proof, logger) {
}
*/
- vk_verifier = unstringifyBigInts(vk_verifier);
- proof = unstringifyBigInts(proof);
- publicSignals = unstringifyBigInts(publicSignals);
+ vk_verifier = unstringifyBigInts$2(vk_verifier);
+ proof = unstringifyBigInts$2(proof);
+ publicSignals = unstringifyBigInts$2(publicSignals);
const curve = await getCurveFromName(vk_verifier.curve);
@@ -5969,7 +5989,7 @@ async function groth16Verify(vk_verifier, publicSignals, proof, logger) {
along with snarkJS. If not, see .
*/
-function p256(n) {
+function p256$1(n) {
let nstr = n.toString(16);
while (nstr.length < 64) nstr = "0"+nstr;
nstr = `"0x${nstr}"`;
@@ -5981,13 +6001,13 @@ async function groth16ExportSolidityCallData(proof, pub) {
let inputs = "";
for (let i=0; i.
*/
-const {stringifyBigInts: stringifyBigInts$3} = ffjavascript.utils;
-const { keccak256 } = jsSha3__default['default'];
+const {stringifyBigInts: stringifyBigInts$1} = ffjavascript.utils;
+const { keccak256: keccak256$1 } = jsSha3__default["default"];
async function plonk16Prove(zkeyFileName, witnessFileName, logger) {
- const {fd: fdWtns, sections: sectionsWtns} = await binFileUtils.readBinFile(witnessFileName, "wtns", 2, 1<<25, 1<<23);
+ const {fd: fdWtns, sections: sectionsWtns} = await binFileUtils__namespace.readBinFile(witnessFileName, "wtns", 2, 1<<25, 1<<23);
- const wtns = await readHeader$1(fdWtns, sectionsWtns);
+ const wtns = await readHeader(fdWtns, sectionsWtns);
- const {fd: fdZKey, sections: sectionsZKey} = await binFileUtils.readBinFile(zkeyFileName, "zkey", 2, 1<<25, 1<<23);
+ const {fd: fdZKey, sections: sectionsZKey} = await binFileUtils__namespace.readBinFile(zkeyFileName, "zkey", 2, 1<<25, 1<<23);
- const zkey = await readHeader(fdZKey, sectionsZKey);
+ const zkey = await readHeader$1(fdZKey, sectionsZKey);
if (zkey.protocol != "plonk") {
throw new Error("zkey file is not groth16");
}
@@ -6446,7 +6466,7 @@ async function plonk16Prove(zkeyFileName, witnessFileName, logger) {
const n8r = curve.Fr.n8;
if (logger) logger.debug("Reading Wtns");
- const buffWitness = await binFileUtils.readSection(fdWtns, sectionsWtns, 2);
+ const buffWitness = await binFileUtils__namespace.readSection(fdWtns, sectionsWtns, 2);
// First element in plonk is not used and can be any value. (But always the same).
// We set it to zero to go faster in the exponentiations.
buffWitness.set(Fr.zero, 0);
@@ -6473,7 +6493,7 @@ async function plonk16Prove(zkeyFileName, witnessFileName, logger) {
const pol_s2 = new ffjavascript.BigBuffer(zkey.domainSize*n8r);
await fdZKey.readToBuffer(pol_s2, 0 , zkey.domainSize*n8r, sectionsZKey[12][0].p + 5*zkey.domainSize*n8r);
- const PTau = await binFileUtils.readSection(fdZKey, sectionsZKey, 14);
+ const PTau = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 14);
const ch = {};
@@ -6525,13 +6545,13 @@ async function plonk16Prove(zkeyFileName, witnessFileName, logger) {
delete proof.eval_t;
- proof = stringifyBigInts$3(proof);
- publicSignals = stringifyBigInts$3(publicSignals);
+ proof = stringifyBigInts$1(proof);
+ publicSignals = stringifyBigInts$1(publicSignals);
return {proof, publicSignals};
async function calculateAdditions() {
- const additionsBuff = await binFileUtils.readSection(fdZKey, sectionsZKey, 3);
+ const additionsBuff = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 3);
const sSum = 8+curve.Fr.n8*2;
@@ -6557,9 +6577,9 @@ async function plonk16Prove(zkeyFileName, witnessFileName, logger) {
let B = new ffjavascript.BigBuffer(zkey.domainSize * n8r);
let C = new ffjavascript.BigBuffer(zkey.domainSize * n8r);
- const aMap = await binFileUtils.readSection(fdZKey, sectionsZKey, 4);
- const bMap = await binFileUtils.readSection(fdZKey, sectionsZKey, 5);
- const cMap = await binFileUtils.readSection(fdZKey, sectionsZKey, 6);
+ const aMap = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 4);
+ const bMap = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 5);
+ const cMap = await binFileUtils__namespace.readSection(fdZKey, sectionsZKey, 6);
for (let i=0; i.
*/
-async function plonkFullProve(input, wasmFile, zkeyFileName, logger) {
+async function plonkFullProve$1(input, wasmFile, zkeyFileName, logger) {
const wtns= {
type: "mem"
};
- await wtnsCalculate(input, wasmFile, wtns);
+ await wtnsCalculate$1(input, wasmFile, wtns);
return await plonk16Prove(zkeyFileName, wtns, logger);
}
@@ -7288,10 +7308,10 @@ async function plonkFullProve(input, wasmFile, zkeyFileName, logger) {
snarkjs. If not, see .
*/
const {unstringifyBigInts: unstringifyBigInts$1} = ffjavascript.utils;
-const { keccak256: keccak256$1 } = jsSha3__default['default'];
+const { keccak256 } = jsSha3__default["default"];
-async function plonkVerify(vk_verifier, publicSignals, proof, logger) {
+async function plonkVerify$1(vk_verifier, publicSignals, proof, logger) {
vk_verifier = unstringifyBigInts$1(vk_verifier);
proof = unstringifyBigInts$1(proof);
publicSignals = unstringifyBigInts$1(publicSignals);
@@ -7499,7 +7519,7 @@ function calculateLagrangeEvaluations(curve, challanges, vk) {
}
function hashToFr(curve, transcript) {
- const v = ffjavascript.Scalar.fromRprBE(new Uint8Array(keccak256$1.arrayBuffer(transcript)));
+ const v = ffjavascript.Scalar.fromRprBE(new Uint8Array(keccak256.arrayBuffer(transcript)));
return curve.Fr.e(v);
}
@@ -7685,7 +7705,7 @@ function i2hex(i) {
return ("0" + i.toString(16)).slice(-2);
}
-function p256$1(n) {
+function p256(n) {
let nstr = n.toString(16);
while (nstr.length < 64) nstr = "0"+nstr;
nstr = `"0x${nstr}"`;
@@ -7701,7 +7721,7 @@ async function plonkExportSolidityCallData(proof, pub) {
let inputs = "";
for (let i=0; i.
*/
-async function wtnsDebug(input, wasmFileName, wtnsFileName, symName, options, logger) {
+async function wtnsDebug$1(input, wasmFileName, wtnsFileName, symName, options, logger) {
- const fdWasm = await fastFile.readExisting(wasmFileName);
+ const fdWasm = await fastFile__namespace.readExisting(wasmFileName);
const wasm = await fdWasm.read(fdWasm.totalSize);
await fdWasm.close();
@@ -7785,7 +7805,7 @@ async function wtnsDebug(input, wasmFileName, wtnsFileName, symName, options, lo
const wc = await circom_runtime.WitnessCalculatorBuilder(wasm, wcOps);
const w = await wc.calculateWitness(input);
- const fdWtns = await binFileUtils.createBinFile(wtnsFileName, "wtns", 2, 2);
+ const fdWtns = await binFileUtils__namespace.createBinFile(wtnsFileName, "wtns", 2, 2);
await write(fdWtns, w, wc.prime);
@@ -7811,7 +7831,7 @@ async function wtnsDebug(input, wasmFileName, wtnsFileName, symName, options, lo
along with snarkJS. If not, see .
*/
-async function wtnsExportJson(wtnsFileName) {
+async function wtnsExportJson$1(wtnsFileName) {
const w = await read(wtnsFileName);
@@ -7836,11 +7856,11 @@ async function wtnsExportJson(wtnsFileName) {
You should have received a copy of the GNU General Public License
along with snarkJS. If not, see .
*/
-const {stringifyBigInts: stringifyBigInts$4, unstringifyBigInts: unstringifyBigInts$2} = ffjavascript.utils;
-const logger = Logger__default['default'].create("snarkJS", {showTimestamp:false});
-Logger__default['default'].setLogLevel("INFO");
+const {stringifyBigInts, unstringifyBigInts} = ffjavascript.utils;
+const logger = Logger__default["default"].create("snarkJS", {showTimestamp:false});
+Logger__default["default"].setLogLevel("INFO");
-const __dirname$2 = path__default['default'].dirname(new URL((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('cli.cjs', document.baseURI).href))).pathname);
+const __dirname$1 = path__default["default"].dirname(new URL((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('cli.cjs', document.baseURI).href))).pathname);
const commands = [
{
@@ -7927,13 +7947,13 @@ const commands = [
cmd: "r1cs info [circuit.r1cs]",
description: "Print statistiscs of a circuit",
alias: ["ri", "info -r|r1cs:circuit.r1cs"],
- action: r1csInfo$1
+ action: r1csInfo
},
{
cmd: "r1cs print [circuit.r1cs] [circuit.sym]",
description: "Print the constraints of a circuit",
alias: ["rp", "print -r|r1cs:circuit.r1cs -s|sym"],
- action: r1csPrint$1
+ action: r1csPrint
},
{
cmd: "r1cs export json [circuit.r1cs] [circuit.json]",
@@ -7945,7 +7965,7 @@ const commands = [
cmd: "wtns calculate [circuit.wasm] [input.json] [witness.wtns]",
description: "Caclculate specific witness of a circuit given an input",
alias: ["wc", "calculatewitness -ws|wasm:circuit.wasm -i|input:input.json -wt|witness:witness.wtns"],
- action: wtnsCalculate$1
+ action: wtnsCalculate
},
{
cmd: "wtns debug [circuit.wasm] [input.json] [witness.wtns] [circuit.sym]",
@@ -7953,7 +7973,7 @@ const commands = [
longDescription: "Calculate the witness with debug info. \nOptions:\n-g or --g : Log signal gets\n-s or --s : Log signal sets\n-t or --trigger : Log triggers ",
options: "-get|g -set|s -trigger|t",
alias: ["wd"],
- action: wtnsDebug$1
+ action: wtnsDebug
},
{
cmd: "wtns export json [witness.wtns] [witnes.json]",
@@ -7961,7 +7981,7 @@ const commands = [
longDescription: "Calculate the witness with debug info. \nOptions:\n-g or --g : Log signal gets\n-s or --s : Log signal sets\n-t or --trigger : Log triggers ",
options: "-verbose|v",
alias: ["wej"],
- action: wtnsExportJson$1
+ action: wtnsExportJson
},
{
cmd: "zkey contribute ",
@@ -8023,7 +8043,7 @@ const commands = [
description: "Exports a circuit key to a JSON file",
alias: ["zkej"],
options: "-verbose|v",
- action: zkeyExportJson$1
+ action: zkeyExportJson
},
{
cmd: "zkey export solidityverifier [circuit_final.zkey] [verifier.sol]",
@@ -8049,27 +8069,27 @@ const commands = [
description: "Generates a zk Proof from witness",
alias: ["g16p", "zpw", "zksnark proof", "proof -pk|provingkey -wt|witness -p|proof -pub|public"],
options: "-verbose|v -protocol",
- action: groth16Prove$1
+ action: groth16Prove
},
{
cmd: "groth16 fullprove [input.json] [circuit_final.wasm] [circuit_final.zkey] [proof.json] [public.json]",
description: "Generates a zk Proof from input",
alias: ["g16f", "g16i"],
options: "-verbose|v -protocol",
- action: groth16FullProve$1
+ action: groth16FullProve
},
{
cmd: "groth16 verify [verification_key.json] [public.json] [proof.json]",
description: "Verify a zk Proof",
alias: ["g16v", "verify -vk|verificationkey -pub|public -p|proof"],
- action: groth16Verify$1
+ action: groth16Verify
},
{
cmd: "plonk setup [circuit.r1cs] [powersoftau.ptau] [circuit.zkey]",
description: "Creates an initial PLONK pkey ",
alias: ["pks"],
options: "-verbose|v",
- action: plonkSetup$1
+ action: plonkSetup
},
{
cmd: "plonk prove [circuit.zkey] [witness.wtns] [proof.json] [public.json]",
@@ -8083,14 +8103,14 @@ const commands = [
description: "Generates a PLONK Proof from input",
alias: ["pkf"],
options: "-verbose|v -protocol",
- action: plonkFullProve$1
+ action: plonkFullProve
},
{
cmd: "plonk verify [verification_key.json] [public.json] [proof.json]",
description: "Verify a PLONK Proof",
alias: ["pkv"],
options: "-verbose|v",
- action: plonkVerify$1
+ action: plonkVerify
}
];
@@ -8138,29 +8158,29 @@ function changeExt(fileName, newExt) {
}
// r1cs export circomJSON [circuit.r1cs] [circuit.json]
-async function r1csInfo$1(params, options) {
+async function r1csInfo(params, options) {
const r1csName = params[0] || "circuit.r1cs";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- await r1csInfo(r1csName, logger);
+ await r1csInfo$1(r1csName, logger);
return 0;
}
// r1cs print [circuit.r1cs] [circuit.sym]
-async function r1csPrint$1(params, options) {
+async function r1csPrint(params, options) {
const r1csName = params[0] || "circuit.r1cs";
const symName = params[1] || changeExt(r1csName, "sym");
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const cir = await r1csfile.readR1cs(r1csName, true, true, false);
const sym = await loadSymbols(symName);
- await r1csPrint(cir, sym, logger);
+ await r1csPrint$1(cir, sym, logger);
return 0;
}
@@ -8171,27 +8191,27 @@ async function r1csExportJSON(params, options) {
const r1csName = params[0] || "circuit.r1cs";
const jsonName = params[1] || changeExt(r1csName, "json");
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const r1csObj = await r1csExportJson(r1csName, logger);
const S = JSON.stringify(r1csObj, null, 1);
- await fs__default['default'].promises.writeFile(jsonName, S);
+ await fs__default["default"].promises.writeFile(jsonName, S);
return 0;
}
// wtns calculate
-async function wtnsCalculate$1(params, options) {
+async function wtnsCalculate(params, options) {
const wasmName = params[0] || "circuit.wasm";
const inputName = params[1] || "input.json";
const witnessName = params[2] || "witness.wtns";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const input = unstringifyBigInts$2(JSON.parse(await fs__default['default'].promises.readFile(inputName, "utf8")));
+ const input = unstringifyBigInts(JSON.parse(await fs__default["default"].promises.readFile(inputName, "utf8")));
- await wtnsCalculate(input, wasmName, witnessName);
+ await wtnsCalculate$1(input, wasmName, witnessName);
return 0;
}
@@ -8199,17 +8219,17 @@ async function wtnsCalculate$1(params, options) {
// wtns debug
// -get|g -set|s -trigger|t
-async function wtnsDebug$1(params, options) {
+async function wtnsDebug(params, options) {
const wasmName = params[0] || "circuit.wasm";
const inputName = params[1] || "input.json";
const witnessName = params[2] || "witness.wtns";
const symName = params[3] || changeExt(wasmName, "sym");
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const input = unstringifyBigInts$2(JSON.parse(await fs__default['default'].promises.readFile(inputName, "utf8")));
+ const input = unstringifyBigInts(JSON.parse(await fs__default["default"].promises.readFile(inputName, "utf8")));
- await wtnsDebug(input, wasmName, witnessName, symName, options, logger);
+ await wtnsDebug$1(input, wasmName, witnessName, symName, options, logger);
return 0;
}
@@ -8217,15 +8237,15 @@ async function wtnsDebug$1(params, options) {
// wtns export json [witness.wtns] [witness.json]
// -get|g -set|s -trigger|t
-async function wtnsExportJson$1(params, options) {
+async function wtnsExportJson(params, options) {
const wtnsName = params[0] || "witness.wtns";
const jsonName = params[1] || "witness.json";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const w = await wtnsExportJson(wtnsName);
+ const w = await wtnsExportJson$1(wtnsName);
- await fs__default['default'].promises.writeFile(jsonName, JSON.stringify(stringifyBigInts$4(w), null, 1));
+ await fs__default["default"].promises.writeFile(jsonName, JSON.stringify(stringifyBigInts(w), null, 1));
return 0;
}
@@ -8256,25 +8276,25 @@ async function zksnarkSetup(params, options) {
*/
// groth16 prove [circuit.zkey] [witness.wtns] [proof.json] [public.json]
-async function groth16Prove$1(params, options) {
+async function groth16Prove(params, options) {
const zkeyName = params[0] || "circuit_final.zkey";
const witnessName = params[1] || "witness.wtns";
const proofName = params[2] || "proof.json";
const publicName = params[3] || "public.json";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const {proof, publicSignals} = await groth16Prove(zkeyName, witnessName, logger);
+ const {proof, publicSignals} = await groth16Prove$1(zkeyName, witnessName, logger);
- await fs__default['default'].promises.writeFile(proofName, JSON.stringify(stringifyBigInts$4(proof), null, 1), "utf-8");
- await fs__default['default'].promises.writeFile(publicName, JSON.stringify(stringifyBigInts$4(publicSignals), null, 1), "utf-8");
+ await fs__default["default"].promises.writeFile(proofName, JSON.stringify(stringifyBigInts(proof), null, 1), "utf-8");
+ await fs__default["default"].promises.writeFile(publicName, JSON.stringify(stringifyBigInts(publicSignals), null, 1), "utf-8");
return 0;
}
// groth16 fullprove [input.json] [circuit.wasm] [circuit.zkey] [proof.json] [public.json]
-async function groth16FullProve$1(params, options) {
+async function groth16FullProve(params, options) {
const inputName = params[0] || "input.json";
const wasmName = params[1] || "circuit.wasm";
@@ -8282,32 +8302,32 @@ async function groth16FullProve$1(params, options) {
const proofName = params[3] || "proof.json";
const publicName = params[4] || "public.json";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const input = unstringifyBigInts$2(JSON.parse(await fs__default['default'].promises.readFile(inputName, "utf8")));
+ const input = unstringifyBigInts(JSON.parse(await fs__default["default"].promises.readFile(inputName, "utf8")));
- const {proof, publicSignals} = await groth16FullProve(input, wasmName, zkeyName, logger);
+ const {proof, publicSignals} = await groth16FullProve$1(input, wasmName, zkeyName, logger);
- await fs__default['default'].promises.writeFile(proofName, JSON.stringify(stringifyBigInts$4(proof), null, 1), "utf-8");
- await fs__default['default'].promises.writeFile(publicName, JSON.stringify(stringifyBigInts$4(publicSignals), null, 1), "utf-8");
+ await fs__default["default"].promises.writeFile(proofName, JSON.stringify(stringifyBigInts(proof), null, 1), "utf-8");
+ await fs__default["default"].promises.writeFile(publicName, JSON.stringify(stringifyBigInts(publicSignals), null, 1), "utf-8");
return 0;
}
// groth16 verify [verification_key.json] [public.json] [proof.json]
-async function groth16Verify$1(params, options) {
+async function groth16Verify(params, options) {
const verificationKeyName = params[0] || "verification_key.json";
const publicName = params[1] || "public.json";
const proofName = params[2] || "proof.json";
- const verificationKey = unstringifyBigInts$2(JSON.parse(fs__default['default'].readFileSync(verificationKeyName, "utf8")));
- const pub = unstringifyBigInts$2(JSON.parse(fs__default['default'].readFileSync(publicName, "utf8")));
- const proof = unstringifyBigInts$2(JSON.parse(fs__default['default'].readFileSync(proofName, "utf8")));
+ const verificationKey = unstringifyBigInts(JSON.parse(fs__default["default"].readFileSync(verificationKeyName, "utf8")));
+ const pub = unstringifyBigInts(JSON.parse(fs__default["default"].readFileSync(publicName, "utf8")));
+ const proof = unstringifyBigInts(JSON.parse(fs__default["default"].readFileSync(proofName, "utf8")));
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const isValid = await groth16Verify(verificationKey, pub, proof, logger);
+ const isValid = await groth16Verify$1(verificationKey, pub, proof, logger);
if (isValid) {
return 0;
@@ -8321,29 +8341,29 @@ async function zkeyExportVKey(params, options) {
const zkeyName = params[0] || "circuit_final.zkey";
const verificationKeyName = params[1] || "verification_key.json";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const vKey = await zkeyExportVerificationKey(zkeyName);
const S = JSON.stringify(ffjavascript.utils.stringifyBigInts(vKey), null, 1);
- await fs__default['default'].promises.writeFile(verificationKeyName, S);
+ await fs__default["default"].promises.writeFile(verificationKeyName, S);
}
// zkey export json [circuit_final.zkey] [circuit.zkey.json]",
-async function zkeyExportJson$1(params, options) {
+async function zkeyExportJson(params, options) {
const zkeyName = params[0] || "circuit_final.zkey";
const zkeyJsonName = params[1] || "circuit_final.zkey.json";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const zKey = await zkeyExportJson(zkeyName);
+ const zKey = await zkeyExportJson$1(zkeyName);
const S = JSON.stringify(ffjavascript.utils.stringifyBigInts(zKey), null, 1);
- await fs__default['default'].promises.writeFile(zkeyJsonName, S);
+ await fs__default["default"].promises.writeFile(zkeyJsonName, S);
}
async function fileExists(file) {
- return fs__default['default'].promises.access(file, fs__default['default'].constants.F_OK)
+ return fs__default["default"].promises.access(file, fs__default["default"].constants.F_OK)
.then(() => true)
.catch(() => false);
}
@@ -8364,21 +8384,21 @@ async function zkeyExportSolidityVerifier(params, options) {
verifierName = params[1];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const templates = {};
- if (await fileExists(path__default['default'].join(__dirname$2, "templates"))) {
- templates.groth16 = await fs__default['default'].promises.readFile(path__default['default'].join(__dirname$2, "templates", "verifier_groth16.sol.ejs"), "utf8");
- templates.plonk = await fs__default['default'].promises.readFile(path__default['default'].join(__dirname$2, "templates", "verifier_plonk.sol.ejs"), "utf8");
+ if (await fileExists(path__default["default"].join(__dirname$1, "templates"))) {
+ templates.groth16 = await fs__default["default"].promises.readFile(path__default["default"].join(__dirname$1, "templates", "verifier_groth16.sol.ejs"), "utf8");
+ templates.plonk = await fs__default["default"].promises.readFile(path__default["default"].join(__dirname$1, "templates", "verifier_plonk.sol.ejs"), "utf8");
} else {
- templates.groth16 = await fs__default['default'].promises.readFile(path__default['default'].join(__dirname$2, "..", "templates", "verifier_groth16.sol.ejs"), "utf8");
- templates.plonk = await fs__default['default'].promises.readFile(path__default['default'].join(__dirname$2, "..", "templates", "verifier_plonk.sol.ejs"), "utf8");
+ templates.groth16 = await fs__default["default"].promises.readFile(path__default["default"].join(__dirname$1, "..", "templates", "verifier_groth16.sol.ejs"), "utf8");
+ templates.plonk = await fs__default["default"].promises.readFile(path__default["default"].join(__dirname$1, "..", "templates", "verifier_plonk.sol.ejs"), "utf8");
}
const verifierCode = await exportSolidityVerifier(zkeyName, templates);
- fs__default['default'].writeFileSync(verifierName, verifierCode, "utf-8");
+ fs__default["default"].writeFileSync(verifierName, verifierCode, "utf-8");
return 0;
}
@@ -8401,10 +8421,10 @@ async function zkeyExportSolidityCalldata(params, options) {
proofName = params[1];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const pub = unstringifyBigInts$2(JSON.parse(fs__default['default'].readFileSync(publicName, "utf8")));
- const proof = unstringifyBigInts$2(JSON.parse(fs__default['default'].readFileSync(proofName, "utf8")));
+ const pub = unstringifyBigInts(JSON.parse(fs__default["default"].readFileSync(publicName, "utf8")));
+ const proof = unstringifyBigInts(JSON.parse(fs__default["default"].readFileSync(proofName, "utf8")));
let res;
if (proof.protocol == "groth16") {
@@ -8440,7 +8460,7 @@ async function powersOfTauNew(params, options) {
const curve = await getCurveFromName(curveName);
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return await newAccumulator(curve, power, ptauName, logger);
}
@@ -8457,7 +8477,7 @@ async function powersOfTauExportChallenge(params, options) {
challengeName = params[1];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return await exportChallenge(ptauName, challengeName, logger);
}
@@ -8477,7 +8497,7 @@ async function powersOfTauChallengeContribute(params, options) {
responseName = params[2];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return await challengeContribute(curve, challengeName, responseName, options.entropy, logger);
}
@@ -8497,7 +8517,7 @@ async function powersOfTauImport(params, options) {
if (options.nopoints) importPoints = false;
if (options.nocheck) doCheck = false;
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const res = await importResponse(oldPtauName, response, newPtauName, options.name, importPoints, logger);
@@ -8512,7 +8532,7 @@ async function powersOfTauVerify(params, options) {
ptauName = params[0];
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const res = await verify(ptauName, logger);
if (res === true) {
@@ -8533,9 +8553,9 @@ async function powersOfTauBeacon(params, options) {
beaconHashStr = params[2];
numIterationsExp = params[3];
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- return await beacon(oldPtauName, newPtauName, options.name ,beaconHashStr, numIterationsExp, logger);
+ return await beacon$1(oldPtauName, newPtauName, options.name ,beaconHashStr, numIterationsExp, logger);
}
async function powersOfTauContribute(params, options) {
@@ -8545,7 +8565,7 @@ async function powersOfTauContribute(params, options) {
oldPtauName = params[0];
newPtauName = params[1];
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return await contribute(oldPtauName, newPtauName, options.name , options.entropy, logger);
}
@@ -8557,7 +8577,7 @@ async function powersOfTauPreparePhase2(params, options) {
oldPtauName = params[0];
newPtauName = params[1];
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return await preparePhase2(oldPtauName, newPtauName, logger);
}
@@ -8569,7 +8589,7 @@ async function powersOfTauConvert(params, options) {
oldPtauName = params[0];
newPtauName = params[1];
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return await convert(oldPtauName, newPtauName, logger);
}
@@ -8585,7 +8605,7 @@ async function powersOfTauTruncate(params, options) {
template = template.slice(0, template.length-1);
template = template+"_";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return await truncate(ptauName, template, logger);
}
@@ -8598,12 +8618,12 @@ async function powersOfTauExportJson(params, options) {
ptauName = params[0];
jsonName = params[1];
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const pTau = await exportJson(ptauName, logger);
- const S = JSON.stringify(stringifyBigInts$4(pTau), null, 1);
- await fs__default['default'].promises.writeFile(jsonName, S);
+ const S = JSON.stringify(stringifyBigInts(pTau), null, 1);
+ await fs__default["default"].promises.writeFile(jsonName, S);
}
@@ -8632,7 +8652,7 @@ async function zkeyNew(params, options) {
zkeyName = params[2];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return newZKey(r1csName, ptauName, zkeyName, logger);
}
@@ -8650,7 +8670,7 @@ async function zkeyExportBellman(params, options) {
mpcparamsName = params[1];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return phase2exportMPCParams(zkeyName, mpcparamsName, logger);
@@ -8667,7 +8687,7 @@ async function zkeyImportBellman(params, options) {
mpcParamsName = params[1];
zkeyNameNew = params[2];
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return phase2importMPCParams(zkeyNameOld, mpcParamsName, zkeyNameNew, options.name, logger);
}
@@ -8696,7 +8716,7 @@ async function zkeyVerifyFromR1cs(params, options) {
zkeyName = params[2];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const res = await phase2verifyFromR1cs(r1csName, ptauName, zkeyName, logger);
if (res === true) {
@@ -8731,7 +8751,7 @@ async function zkeyVerifyFromInit(params, options) {
zkeyName = params[2];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const res = await phase2verifyFromInit(initZKeyName, ptauName, zkeyName, logger);
if (res === true) {
@@ -8749,7 +8769,7 @@ async function zkeyContribute(params, options) {
zkeyOldName = params[0];
zkeyNewName = params[1];
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return phase2contribute(zkeyOldName, zkeyNewName, options.name, options.entropy, logger);
}
@@ -8766,9 +8786,9 @@ async function zkeyBeacon(params, options) {
beaconHashStr = params[2];
numIterationsExp = params[3];
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- return await beacon$1(zkeyOldName, zkeyNewName, options.name ,beaconHashStr, numIterationsExp, logger);
+ return await beacon(zkeyOldName, zkeyNewName, options.name ,beaconHashStr, numIterationsExp, logger);
}
@@ -8787,14 +8807,14 @@ async function zkeyBellmanContribute(params, options) {
responseName = params[2];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
return bellmanContribute(curve, challengeName, responseName, options.entropy, logger);
}
// plonk setup
-async function plonkSetup$1(params, options) {
+async function plonkSetup(params, options) {
let r1csName;
let ptauName;
let zkeyName;
@@ -8817,9 +8837,9 @@ async function plonkSetup$1(params, options) {
zkeyName = params[2];
}
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- return plonkSetup(r1csName, ptauName, zkeyName, logger);
+ return plonkSetup$1(r1csName, ptauName, zkeyName, logger);
}
@@ -8831,19 +8851,19 @@ async function plonkProve(params, options) {
const proofName = params[2] || "proof.json";
const publicName = params[3] || "public.json";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
const {proof, publicSignals} = await plonk16Prove(zkeyName, witnessName, logger);
- await fs__default['default'].promises.writeFile(proofName, JSON.stringify(stringifyBigInts$4(proof), null, 1), "utf-8");
- await fs__default['default'].promises.writeFile(publicName, JSON.stringify(stringifyBigInts$4(publicSignals), null, 1), "utf-8");
+ await fs__default["default"].promises.writeFile(proofName, JSON.stringify(stringifyBigInts(proof), null, 1), "utf-8");
+ await fs__default["default"].promises.writeFile(publicName, JSON.stringify(stringifyBigInts(publicSignals), null, 1), "utf-8");
return 0;
}
// plonk fullprove [input.json] [circuit.wasm] [circuit.zkey] [proof.json] [public.json]
-async function plonkFullProve$1(params, options) {
+async function plonkFullProve(params, options) {
const inputName = params[0] || "input.json";
const wasmName = params[1] || "circuit.wasm";
@@ -8851,33 +8871,33 @@ async function plonkFullProve$1(params, options) {
const proofName = params[3] || "proof.json";
const publicName = params[4] || "public.json";
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const input = unstringifyBigInts$2(JSON.parse(await fs__default['default'].promises.readFile(inputName, "utf8")));
+ const input = unstringifyBigInts(JSON.parse(await fs__default["default"].promises.readFile(inputName, "utf8")));
- const {proof, publicSignals} = await plonkFullProve(input, wasmName, zkeyName, logger);
+ const {proof, publicSignals} = await plonkFullProve$1(input, wasmName, zkeyName, logger);
- await fs__default['default'].promises.writeFile(proofName, JSON.stringify(stringifyBigInts$4(proof), null, 1), "utf-8");
- await fs__default['default'].promises.writeFile(publicName, JSON.stringify(stringifyBigInts$4(publicSignals), null, 1), "utf-8");
+ await fs__default["default"].promises.writeFile(proofName, JSON.stringify(stringifyBigInts(proof), null, 1), "utf-8");
+ await fs__default["default"].promises.writeFile(publicName, JSON.stringify(stringifyBigInts(publicSignals), null, 1), "utf-8");
return 0;
}
// plonk verify [verification_key.json] [public.json] [proof.json]
-async function plonkVerify$1(params, options) {
+async function plonkVerify(params, options) {
const verificationKeyName = params[0] || "verification_key.json";
const publicName = params[1] || "public.json";
const proofName = params[2] || "proof.json";
- const verificationKey = unstringifyBigInts$2(JSON.parse(fs__default['default'].readFileSync(verificationKeyName, "utf8")));
- const pub = unstringifyBigInts$2(JSON.parse(fs__default['default'].readFileSync(publicName, "utf8")));
- const proof = unstringifyBigInts$2(JSON.parse(fs__default['default'].readFileSync(proofName, "utf8")));
+ const verificationKey = unstringifyBigInts(JSON.parse(fs__default["default"].readFileSync(verificationKeyName, "utf8")));
+ const pub = unstringifyBigInts(JSON.parse(fs__default["default"].readFileSync(publicName, "utf8")));
+ const proof = unstringifyBigInts(JSON.parse(fs__default["default"].readFileSync(proofName, "utf8")));
- if (options.verbose) Logger__default['default'].setLogLevel("DEBUG");
+ if (options.verbose) Logger__default["default"].setLogLevel("DEBUG");
- const isValid = await plonkVerify(verificationKey, pub, proof, logger);
+ const isValid = await plonkVerify$1(verificationKey, pub, proof, logger);
if (isValid) {
return 0;
diff --git a/build/snarkjs.js b/build/snarkjs.js
index 6d0761d..34200d9 100644
--- a/build/snarkjs.js
+++ b/build/snarkjs.js
@@ -4,7 +4,7 @@ var snarkjs = (function (exports) {
/* global BigInt */
const hexLen = [ 0, 1, 2, 2, 3, 3, 3, 3, 4 ,4 ,4 ,4 ,4 ,4 ,4 ,4];
- function fromString(s, radix) {
+ function fromString$3(s, radix) {
if ((!radix)||(radix==10)) {
return BigInt(s);
} else if (radix==16) {
@@ -16,9 +16,9 @@ var snarkjs = (function (exports) {
}
}
- const e = fromString;
+ const e$2 = fromString$3;
- function fromArray(a, radix) {
+ function fromArray$3(a, radix) {
let acc =BigInt(0);
radix = BigInt(radix);
for (let i=0; i> BigInt(n);
}
- const shl = shiftLeft;
- const shr = shiftRight;
+ const shl$2 = shiftLeft$2;
+ const shr$2 = shiftRight$2;
- function isOdd(a) {
+ function isOdd$2(a) {
return (BigInt(a) & BigInt(1)) == BigInt(1);
}
- function naf(n) {
+ function naf$2(n) {
let E = BigInt(n);
const res = [];
while (E) {
@@ -73,7 +73,7 @@ var snarkjs = (function (exports) {
}
- function bits(n) {
+ function bits$2(n) {
let E = BigInt(n);
const res = [];
while (E) {
@@ -87,14 +87,14 @@ var snarkjs = (function (exports) {
return res;
}
- function toNumber(s) {
+ function toNumber$3(s) {
if (s>BigInt(Number.MAX_SAFE_INTEGER )) {
throw new Error("Number too big");
}
return Number(s);
}
- function toArray(s, radix) {
+ function toArray$2(s, radix) {
const res = [];
let rem = BigInt(s);
radix = BigInt(radix);
@@ -106,133 +106,133 @@ var snarkjs = (function (exports) {
}
- function add(a, b) {
+ function add$2(a, b) {
return BigInt(a) + BigInt(b);
}
- function sub(a, b) {
+ function sub$2(a, b) {
return BigInt(a) - BigInt(b);
}
- function neg(a) {
+ function neg$2(a) {
return -BigInt(a);
}
- function mul(a, b) {
+ function mul$2(a, b) {
return BigInt(a) * BigInt(b);
}
- function square(a) {
+ function square$2(a) {
return BigInt(a) * BigInt(a);
}
- function pow(a, b) {
+ function pow$2(a, b) {
return BigInt(a) ** BigInt(b);
}
- function exp(a, b) {
+ function exp$3(a, b) {
return BigInt(a) ** BigInt(b);
}
- function abs(a) {
+ function abs$2(a) {
return BigInt(a) >= 0 ? BigInt(a) : -BigInt(a);
}
- function div(a, b) {
+ function div$2(a, b) {
return BigInt(a) / BigInt(b);
}
- function mod(a, b) {
+ function mod$2(a, b) {
return BigInt(a) % BigInt(b);
}
- function eq(a, b) {
+ function eq$2(a, b) {
return BigInt(a) == BigInt(b);
}
- function neq(a, b) {
+ function neq$2(a, b) {
return BigInt(a) != BigInt(b);
}
- function lt(a, b) {
+ function lt$2(a, b) {
return BigInt(a) < BigInt(b);
}
- function gt(a, b) {
+ function gt$2(a, b) {
return BigInt(a) > BigInt(b);
}
- function leq(a, b) {
+ function leq$2(a, b) {
return BigInt(a) <= BigInt(b);
}
- function geq(a, b) {
+ function geq$2(a, b) {
return BigInt(a) >= BigInt(b);
}
- function band(a, b) {
+ function band$2(a, b) {
return BigInt(a) & BigInt(b);
}
- function bor(a, b) {
+ function bor$2(a, b) {
return BigInt(a) | BigInt(b);
}
- function bxor(a, b) {
+ function bxor$2(a, b) {
return BigInt(a) ^ BigInt(b);
}
- function land(a, b) {
+ function land$2(a, b) {
return BigInt(a) && BigInt(b);
}
- function lor(a, b) {
+ function lor$2(a, b) {
return BigInt(a) || BigInt(b);
}
- function lnot(a) {
+ function lnot$2(a) {
return !BigInt(a);
}
var Scalar_native = /*#__PURE__*/Object.freeze({
__proto__: null,
- fromString: fromString,
- e: e,
- fromArray: fromArray,
- bitLength: bitLength,
- isNegative: isNegative,
- isZero: isZero,
- shiftLeft: shiftLeft,
- shiftRight: shiftRight,
- shl: shl,
- shr: shr,
- isOdd: isOdd,
- naf: naf,
- bits: bits,
- toNumber: toNumber,
- toArray: toArray,
- add: add,
- sub: sub,
- neg: neg,
- mul: mul,
- square: square,
- pow: pow,
- exp: exp,
- abs: abs,
- div: div,
- mod: mod,
- eq: eq,
- neq: neq,
- lt: lt,
- gt: gt,
- leq: leq,
- geq: geq,
- band: band,
- bor: bor,
- bxor: bxor,
- land: land,
- lor: lor,
- lnot: lnot
+ fromString: fromString$3,
+ e: e$2,
+ fromArray: fromArray$3,
+ bitLength: bitLength$2,
+ isNegative: isNegative$2,
+ isZero: isZero$2,
+ shiftLeft: shiftLeft$2,
+ shiftRight: shiftRight$2,
+ shl: shl$2,
+ shr: shr$2,
+ isOdd: isOdd$2,
+ naf: naf$2,
+ bits: bits$2,
+ toNumber: toNumber$3,
+ toArray: toArray$2,
+ add: add$2,
+ sub: sub$2,
+ neg: neg$2,
+ mul: mul$2,
+ square: square$2,
+ pow: pow$2,
+ exp: exp$3,
+ abs: abs$2,
+ div: div$2,
+ mod: mod$2,
+ eq: eq$2,
+ neq: neq$2,
+ lt: lt$2,
+ gt: gt$2,
+ leq: leq$2,
+ geq: geq$2,
+ band: band$2,
+ bor: bor$2,
+ bxor: bxor$2,
+ land: land$2,
+ lor: lor$2,
+ lnot: lnot$2
});
var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
@@ -242,10 +242,6 @@ var snarkjs = (function (exports) {
return fn(module, module.exports), module.exports;
}
- function commonjsRequire (target) {
- throw new Error('Could not dynamically require "' + target + '". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.');
- }
-
var BigInteger = createCommonjsModule(function (module) {
var bigInt = (function (undefined$1) {
@@ -1426,10 +1422,10 @@ var snarkjs = (function (exports) {
var digits = toBase(range, BASE).value;
var result = [], restricted = true;
for (var i = 0; i < digits.length; i++) {
- var top = restricted ? digits[i] : BASE;
+ var top = restricted ? digits[i] + (i + 1 < digits.length ? digits[i + 1] / BASE : 0) : BASE;
var digit = truncate(usedRNG() * top);
result.push(digit);
- if (digit < top) restricted = false;
+ if (digit < digits[i]) restricted = false;
}
return low.add(Integer.fromArray(result, BASE, false));
}
@@ -1689,12 +1685,12 @@ var snarkjs = (function (exports) {
})();
// Node.js check
- if ( module.hasOwnProperty("exports")) {
+ if (module.hasOwnProperty("exports")) {
module.exports = bigInt;
}
});
- function fromString$1(s, radix) {
+ function fromString$2(s, radix) {
if (typeof s == "string") {
if (s.slice(0,2) == "0x") {
return BigInteger(s.slice(2), 16);
@@ -1706,9 +1702,9 @@ var snarkjs = (function (exports) {
}
}
- const e$1 = fromString$1;
+ const e$1 = fromString$2;
- function fromArray$1(a, radix) {
+ function fromArray$2(a, radix) {
return BigInteger.fromArray(a, radix);
}
@@ -1770,7 +1766,7 @@ var snarkjs = (function (exports) {
return res;
}
- function toNumber$1(s) {
+ function toNumber$2(s) {
if (!s.lt(BigInteger("9007199254740992", 10))) {
throw new Error("Number too big");
}
@@ -1805,7 +1801,7 @@ var snarkjs = (function (exports) {
return BigInteger(a).pow(BigInteger(b));
}
- function exp$1(a, b) {
+ function exp$2(a, b) {
return BigInteger(a).pow(BigInteger(b));
}
@@ -1871,9 +1867,9 @@ var snarkjs = (function (exports) {
var Scalar_bigint = /*#__PURE__*/Object.freeze({
__proto__: null,
- fromString: fromString$1,
+ fromString: fromString$2,
e: e$1,
- fromArray: fromArray$1,
+ fromArray: fromArray$2,
bitLength: bitLength$1,
isNegative: isNegative$1,
isZero: isZero$1,
@@ -1884,7 +1880,7 @@ var snarkjs = (function (exports) {
isOdd: isOdd$1,
naf: naf$1,
bits: bits$1,
- toNumber: toNumber$1,
+ toNumber: toNumber$2,
toArray: toArray$1,
add: add$1,
sub: sub$1,
@@ -1892,7 +1888,7 @@ var snarkjs = (function (exports) {
mul: mul$1,
square: square$1,
pow: pow$1,
- exp: exp$1,
+ exp: exp$2,
abs: abs$1,
div: div$1,
mod: mod$1,
@@ -1910,28 +1906,28 @@ var snarkjs = (function (exports) {
lnot: lnot$1
});
- const supportsNativeBigInt = typeof BigInt === "function";
+ const supportsNativeBigInt$2 = typeof BigInt === "function";
- let Scalar = {};
- if (supportsNativeBigInt) {
- Object.assign(Scalar, Scalar_native);
+ let Scalar$1 = {};
+ if (supportsNativeBigInt$2) {
+ Object.assign(Scalar$1, Scalar_native);
} else {
- Object.assign(Scalar, Scalar_bigint);
+ Object.assign(Scalar$1, Scalar_bigint);
}
// Returns a buffer with Little Endian Representation
- Scalar.toRprLE = function rprBE(buff, o, e, n8) {
+ Scalar$1.toRprLE = function rprBE(buff, o, e, n8) {
const s = "0000000" + e.toString(16);
const v = new Uint32Array(buff.buffer, o, n8/4);
const l = (((s.length-7)*4 - 1) >> 5)+1; // Number of 32bit words;
for (let i=0; i> 5)+1; // Number of 32bit words;
@@ -1940,17 +1936,17 @@ var snarkjs = (function (exports) {
};
// Pases a buffer with Little Endian Representation
- Scalar.fromRprLE = function rprLEM(buff, o, n8) {
+ Scalar$1.fromRprLE = function rprLEM(buff, o, n8) {
n8 = n8 || buff.byteLength;
o = o || 0;
const v = new Uint32Array(buff.buffer, o, n8/4);
const a = new Array(n8/4);
v.forEach( (ch,i) => a[a.length-i-1] = ch.toString(16).padStart(8,"0") );
- return Scalar.fromString(a.join(""), 16);
+ return Scalar$1.fromString(a.join(""), 16);
};
// Pases a buffer with Big Endian Representation
- Scalar.fromRprBE = function rprLEM(buff, o, n8) {
+ Scalar$1.fromRprBE = function rprLEM(buff, o, n8) {
n8 = n8 || buff.byteLength;
o = o || 0;
const v = new DataView(buff.buffer, buff.byteOffset + o, n8);
@@ -1958,70 +1954,70 @@ var snarkjs = (function (exports) {
for (let i=0; i.
*/
- const _revTable = [];
+ const _revTable$2 = [];
for (let i=0; i<256; i++) {
- _revTable[i] = _revSlow(i, 8);
+ _revTable$2[i] = _revSlow$2(i, 8);
}
- function _revSlow(idx, bits) {
+ function _revSlow$2(idx, bits) {
let res =0;
let a = idx;
for (let i=0; i> this.one;
- this.bitLength = bitLength$2(this.p);
+ this.bitLength = bitLength(this.p);
this.mask = (this.one << BigInt(this.bitLength)) - this.one;
this.n64 = Math.floor((this.bitLength - 1) / 64)+1;
@@ -2607,11 +2603,11 @@ var snarkjs = (function (exports) {
}
pow(b, e) {
- return exp$3(this, b, e);
+ return exp(this, b, e);
}
exp(b, e) {
- return exp$3(this, b, e);
+ return exp(this, b, e);
}
band(a, b) {
@@ -2762,7 +2758,7 @@ var snarkjs = (function (exports) {
}
- class ZqField$1 {
+ class ZqField {
constructor(p) {
this.type="F1";
this.one = BigInteger.one;
@@ -3048,9 +3044,9 @@ var snarkjs = (function (exports) {
const supportsNativeBigInt$1 = typeof BigInt === "function";
let _F1Field;
if (supportsNativeBigInt$1) {
- _F1Field = ZqField;
- } else {
_F1Field = ZqField$1;
+ } else {
+ _F1Field = ZqField;
}
class F1Field extends _F1Field {
@@ -3095,76 +3091,58 @@ var snarkjs = (function (exports) {
}
- var code = "AGFzbQEAAAABlAESYAJ/fwBgAX8AYAF/AX9gAn9/AX9gA39/fwF/YAN/f38AYAN/fn8AYAJ/fgBgBH9/f38AYAV/f39/fwBgBH9/f38Bf2AHf39/f39/fwBgBn9/f39/fwBgCn9/f39/f39/f38AYAV/f39/fwF/YAd/f39/f39/AX9gCX9/f39/f39/fwF/YAt/f39/f39/f39/fwF/Ag8BA2VudgZtZW1vcnkCABkDuQK3AgABAgEDAwQEBQAABgcIBQIFBQAABQAAAAACAgABBQgJBQUIAAICBQUAAAUAAAAAAgIAAQUICQUFCAACBQAAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoACwkKAAsJCAgDAAgIAgAACQwMBQUMAAgNCQgCAgEBAAUFAAUFAAAAAAMACAICCQgAAgICAQEAAAADAwMAAAUFBQAABQUFAAAAAAACAgUABQAAAAAFBQUFBQoACwkKAAsJCAgFAwAICAIAAAkMDAUFDAUDAAgIAgAACQwMBQUMBQUJCQkJCQACAgEBAAUABQUAAgAAAwAIAgkIAAICAQEABQUABQUAAAAAAwAIAgIJCAACBQAAAAAICAUAAAAAAAAAAAAAAAAAAAAABA4PEBEFB+0kqAIIaW50X2NvcHkAAAhpbnRfemVybwABB2ludF9vbmUAAwppbnRfaXNaZXJvAAIGaW50X2VxAAQHaW50X2d0ZQAFB2ludF9hZGQABgdpbnRfc3ViAAcHaW50X211bAAICmludF9zcXVhcmUACQ1pbnRfc3F1YXJlT2xkAAoHaW50X2RpdgANDmludF9pbnZlcnNlTW9kAA4IZjFtX2NvcHkAAAhmMW1femVybwABCmYxbV9pc1plcm8AAgZmMW1fZXEABAdmMW1fYWRkABAHZjFtX3N1YgARB2YxbV9uZWcAEg5mMW1faXNOZWdhdGl2ZQAZCWYxbV9pc09uZQAPCGYxbV9zaWduABoLZjFtX21SZWR1Y3QAEwdmMW1fbXVsABQKZjFtX3NxdWFyZQAVDWYxbV9zcXVhcmVPbGQAFhJmMW1fZnJvbU1vbnRnb21lcnkAGBBmMW1fdG9Nb250Z29tZXJ5ABcLZjFtX2ludmVyc2UAGwdmMW1fb25lABwIZjFtX2xvYWQAHQ9mMW1fdGltZXNTY2FsYXIAHgdmMW1fZXhwACIQZjFtX2JhdGNoSW52ZXJzZQAfCGYxbV9zcXJ0ACMMZjFtX2lzU3F1YXJlACQVZjFtX2JhdGNoVG9Nb250Z29tZXJ5ACAXZjFtX2JhdGNoRnJvbU1vbnRnb21lcnkAIQhmcm1fY29weQAACGZybV96ZXJvAAEKZnJtX2lzWmVybwACBmZybV9lcQAEB2ZybV9hZGQAJgdmcm1fc3ViACcHZnJtX25lZwAoDmZybV9pc05lZ2F0aXZlAC8JZnJtX2lzT25lACUIZnJtX3NpZ24AMAtmcm1fbVJlZHVjdAApB2ZybV9tdWwAKgpmcm1fc3F1YXJlACsNZnJtX3NxdWFyZU9sZAAsEmZybV9mcm9tTW9udGdvbWVyeQAuEGZybV90b01vbnRnb21lcnkALQtmcm1faW52ZXJzZQAxB2ZybV9vbmUAMghmcm1fbG9hZAAzD2ZybV90aW1lc1NjYWxhcgA0B2ZybV9leHAAOBBmcm1fYmF0Y2hJbnZlcnNlADUIZnJtX3NxcnQAOQxmcm1faXNTcXVhcmUAOhVmcm1fYmF0Y2hUb01vbnRnb21lcnkANhdmcm1fYmF0Y2hGcm9tTW9udGdvbWVyeQA3BmZyX2FkZAAmBmZyX3N1YgAnBmZyX25lZwAoBmZyX211bAA7CWZyX3NxdWFyZQA8CmZyX2ludmVyc2UAPQ1mcl9pc05lZ2F0aXZlAD4HZnJfY29weQAAB2ZyX3plcm8AAQZmcl9vbmUAMglmcl9pc1plcm8AAgVmcl9lcQAEDGcxbV9tdWx0aWV4cABpEmcxbV9tdWx0aWV4cF9jaHVuawBoEmcxbV9tdWx0aWV4cEFmZmluZQBtGGcxbV9tdWx0aWV4cEFmZmluZV9jaHVuawBsCmcxbV9pc1plcm8AQBBnMW1faXNaZXJvQWZmaW5lAD8GZzFtX2VxAEgLZzFtX2VxTWl4ZWQARwxnMW1fZXFBZmZpbmUARghnMW1fY29weQBEDmcxbV9jb3B5QWZmaW5lAEMIZzFtX3plcm8AQg5nMW1femVyb0FmZmluZQBBCmcxbV9kb3VibGUAShBnMW1fZG91YmxlQWZmaW5lAEkHZzFtX2FkZABNDGcxbV9hZGRNaXhlZABMDWcxbV9hZGRBZmZpbmUASwdnMW1fbmVnAE8NZzFtX25lZ0FmZmluZQBOB2cxbV9zdWIAUgxnMW1fc3ViTWl4ZWQAUQ1nMW1fc3ViQWZmaW5lAFASZzFtX2Zyb21Nb250Z29tZXJ5AFQYZzFtX2Zyb21Nb250Z29tZXJ5QWZmaW5lAFMQZzFtX3RvTW9udGdvbWVyeQBWFmcxbV90b01vbnRnb21lcnlBZmZpbmUAVQ9nMW1fdGltZXNTY2FsYXIAbhVnMW1fdGltZXNTY2FsYXJBZmZpbmUAbw1nMW1fbm9ybWFsaXplAFsKZzFtX0xFTXRvVQBdCmcxbV9MRU10b0MAXgpnMW1fVXRvTEVNAF8KZzFtX0N0b0xFTQBgD2cxbV9iYXRjaExFTXRvVQBhD2cxbV9iYXRjaExFTXRvQwBiD2cxbV9iYXRjaFV0b0xFTQBjD2cxbV9iYXRjaEN0b0xFTQBkDGcxbV90b0FmZmluZQBXDmcxbV90b0phY29iaWFuAEURZzFtX2JhdGNoVG9BZmZpbmUAWhNnMW1fYmF0Y2hUb0phY29iaWFuAGULZzFtX2luQ3VydmUAWRFnMW1faW5DdXJ2ZUFmZmluZQBYB2ZybV9mZnQAdQhmcm1faWZmdAB2CmZybV9yYXdmZnQAcwtmcm1fZmZ0Sm9pbgB3DmZybV9mZnRKb2luRXh0AHgRZnJtX2ZmdEpvaW5FeHRJbnYAeQpmcm1fZmZ0TWl4AHoMZnJtX2ZmdEZpbmFsAHsdZnJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24AfAhwb2xfemVybwB9D3BvbF9jb25zdHJ1Y3RMQwB+DHFhcF9idWlsZEFCQwB/C3FhcF9qb2luQUJDAIABDHFhcF9iYXRjaEFkZACBAQpmMm1faXNaZXJvAIIBCWYybV9pc09uZQCDAQhmMm1femVybwCEAQdmMm1fb25lAIUBCGYybV9jb3B5AIYBB2YybV9tdWwAhwEIZjJtX211bDEAiAEKZjJtX3NxdWFyZQCJAQdmMm1fYWRkAIoBB2YybV9zdWIAiwEHZjJtX25lZwCMAQhmMm1fc2lnbgCTAQ1mMm1fY29uanVnYXRlAI0BEmYybV9mcm9tTW9udGdvbWVyeQCPARBmMm1fdG9Nb250Z29tZXJ5AI4BBmYybV9lcQCQAQtmMm1faW52ZXJzZQCRAQdmMm1fZXhwAJYBD2YybV90aW1lc1NjYWxhcgCSARBmMm1fYmF0Y2hJbnZlcnNlAJUBCGYybV9zcXJ0AJcBDGYybV9pc1NxdWFyZQCYAQ5mMm1faXNOZWdhdGl2ZQCUAQxnMm1fbXVsdGlleHAAwwESZzJtX211bHRpZXhwX2NodW5rAMIBEmcybV9tdWx0aWV4cEFmZmluZQDHARhnMm1fbXVsdGlleHBBZmZpbmVfY2h1bmsAxgEKZzJtX2lzWmVybwCaARBnMm1faXNaZXJvQWZmaW5lAJkBBmcybV9lcQCiAQtnMm1fZXFNaXhlZAChAQxnMm1fZXFBZmZpbmUAoAEIZzJtX2NvcHkAngEOZzJtX2NvcHlBZmZpbmUAnQEIZzJtX3plcm8AnAEOZzJtX3plcm9BZmZpbmUAmwEKZzJtX2RvdWJsZQCkARBnMm1fZG91YmxlQWZmaW5lAKMBB2cybV9hZGQApwEMZzJtX2FkZE1peGVkAKYBDWcybV9hZGRBZmZpbmUApQEHZzJtX25lZwCpAQ1nMm1fbmVnQWZmaW5lAKgBB2cybV9zdWIArAEMZzJtX3N1Yk1peGVkAKsBDWcybV9zdWJBZmZpbmUAqgESZzJtX2Zyb21Nb250Z29tZXJ5AK4BGGcybV9mcm9tTW9udGdvbWVyeUFmZmluZQCtARBnMm1fdG9Nb250Z29tZXJ5ALABFmcybV90b01vbnRnb21lcnlBZmZpbmUArwEPZzJtX3RpbWVzU2NhbGFyAMgBFWcybV90aW1lc1NjYWxhckFmZmluZQDJAQ1nMm1fbm9ybWFsaXplALUBCmcybV9MRU10b1UAtwEKZzJtX0xFTXRvQwC4AQpnMm1fVXRvTEVNALkBCmcybV9DdG9MRU0AugEPZzJtX2JhdGNoTEVNdG9VALsBD2cybV9iYXRjaExFTXRvQwC8AQ9nMm1fYmF0Y2hVdG9MRU0AvQEPZzJtX2JhdGNoQ3RvTEVNAL4BDGcybV90b0FmZmluZQCxAQ5nMm1fdG9KYWNvYmlhbgCfARFnMm1fYmF0Y2hUb0FmZmluZQC0ARNnMm1fYmF0Y2hUb0phY29iaWFuAL8BC2cybV9pbkN1cnZlALMBEWcybV9pbkN1cnZlQWZmaW5lALIBC2cxbV90aW1lc0ZyAMoBB2cxbV9mZnQA0AEIZzFtX2lmZnQA0QEKZzFtX3Jhd2ZmdADOAQtnMW1fZmZ0Sm9pbgDSAQ5nMW1fZmZ0Sm9pbkV4dADTARFnMW1fZmZ0Sm9pbkV4dEludgDUAQpnMW1fZmZ0TWl4ANUBDGcxbV9mZnRGaW5hbADWAR1nMW1fcHJlcGFyZUxhZ3JhbmdlRXZhbHVhdGlvbgDXAQtnMm1fdGltZXNGcgDYAQdnMm1fZmZ0AN4BCGcybV9pZmZ0AN8BCmcybV9yYXdmZnQA3AELZzJtX2ZmdEpvaW4A4AEOZzJtX2ZmdEpvaW5FeHQA4QERZzJtX2ZmdEpvaW5FeHRJbnYA4gEKZzJtX2ZmdE1peADjAQxnMm1fZmZ0RmluYWwA5AEdZzJtX3ByZXBhcmVMYWdyYW5nZUV2YWx1YXRpb24A5QERZzFtX3RpbWVzRnJBZmZpbmUA5gERZzJtX3RpbWVzRnJBZmZpbmUA5wERZnJtX2JhdGNoQXBwbHlLZXkA6AERZzFtX2JhdGNoQXBwbHlLZXkA6QEWZzFtX2JhdGNoQXBwbHlLZXlNaXhlZADqARFnMm1fYmF0Y2hBcHBseUtleQDrARZnMm1fYmF0Y2hBcHBseUtleU1peGVkAOwBCmY2bV9pc1plcm8A7gEJZjZtX2lzT25lAO8BCGY2bV96ZXJvAPABB2Y2bV9vbmUA8QEIZjZtX2NvcHkA8gEHZjZtX211bADzAQpmNm1fc3F1YXJlAPQBB2Y2bV9hZGQA9QEHZjZtX3N1YgD2AQdmNm1fbmVnAPcBCGY2bV9zaWduAPgBEmY2bV9mcm9tTW9udGdvbWVyeQD6ARBmNm1fdG9Nb250Z29tZXJ5APkBBmY2bV9lcQD7AQtmNm1faW52ZXJzZQD8AQdmNm1fZXhwAIACD2Y2bV90aW1lc1NjYWxhcgD9ARBmNm1fYmF0Y2hJbnZlcnNlAP8BDmY2bV9pc05lZ2F0aXZlAP4BCmZ0bV9pc1plcm8AggIJZnRtX2lzT25lAIMCCGZ0bV96ZXJvAIQCB2Z0bV9vbmUAhQIIZnRtX2NvcHkAhgIHZnRtX211bACHAghmdG1fbXVsMQCIAgpmdG1fc3F1YXJlAIkCB2Z0bV9hZGQAigIHZnRtX3N1YgCLAgdmdG1fbmVnAIwCCGZ0bV9zaWduAJMCDWZ0bV9jb25qdWdhdGUAjQISZnRtX2Zyb21Nb250Z29tZXJ5AI8CEGZ0bV90b01vbnRnb21lcnkAjgIGZnRtX2VxAJACC2Z0bV9pbnZlcnNlAJECB2Z0bV9leHAAlgIPZnRtX3RpbWVzU2NhbGFyAJICEGZ0bV9iYXRjaEludmVyc2UAlQIIZnRtX3NxcnQAlwIMZnRtX2lzU3F1YXJlAJgCDmZ0bV9pc05lZ2F0aXZlAJQCFGJuMTI4X19mcm9iZW5pdXNNYXAwAKECFGJuMTI4X19mcm9iZW5pdXNNYXAxAKICFGJuMTI4X19mcm9iZW5pdXNNYXAyAKMCFGJuMTI4X19mcm9iZW5pdXNNYXAzAKQCFGJuMTI4X19mcm9iZW5pdXNNYXA0AKUCFGJuMTI4X19mcm9iZW5pdXNNYXA1AKYCFGJuMTI4X19mcm9iZW5pdXNNYXA2AKcCFGJuMTI4X19mcm9iZW5pdXNNYXA3AKgCFGJuMTI4X19mcm9iZW5pdXNNYXA4AKkCFGJuMTI4X19mcm9iZW5pdXNNYXA5AKoCEGJuMTI4X3BhaXJpbmdFcTEAsQIQYm4xMjhfcGFpcmluZ0VxMgCyAhBibjEyOF9wYWlyaW5nRXEzALMCEGJuMTI4X3BhaXJpbmdFcTQAtAIQYm4xMjhfcGFpcmluZ0VxNQC1Ag1ibjEyOF9wYWlyaW5nALYCD2JuMTI4X3ByZXBhcmVHMQCbAg9ibjEyOF9wcmVwYXJlRzIAnQIQYm4xMjhfbWlsbGVyTG9vcACgAhlibjEyOF9maW5hbEV4cG9uZW50aWF0aW9uALACHGJuMTI4X2ZpbmFsRXhwb25lbnRpYXRpb25PbGQAqwIPYm4xMjhfX211bEJ5MDI0AJ4CEmJuMTI4X19tdWxCeTAyNE9sZACfAhdibjEyOF9fY3ljbG90b21pY1NxdWFyZQCtAhdibjEyOF9fY3ljbG90b21pY0V4cF93MACuAgrA2wO3AioAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGAseACAAQgA3AwAgAEIANwMIIABCADcDECAAQgA3AxgLMwAgACkDGFAEQCAAKQMQUARAIAApAwhQBEAgACkDAFAPBUEADwsFQQAPCwVBAA8LQQAPCx4AIABCATcDACAAQgA3AwggAEIANwMQIABCADcDGAtHACAAKQMYIAEpAxhRBEAgACkDECABKQMQUQRAIAApAwggASkDCFEEQCAAKQMAIAEpAwBRDwVBAA8LBUEADwsFQQAPC0EADwt9ACAAKQMYIAEpAxhUBEBBAA8FIAApAxggASkDGFYEQEEBDwUgACkDECABKQMQVARAQQAPBSAAKQMQIAEpAxBWBEBBAQ8FIAApAwggASkDCFQEQEEADwUgACkDCCABKQMIVgRAQQEPBSAAKQMAIAEpAwBaDwsLCwsLC0EADwvUAQEBfiAANQIAIAE1AgB8IQMgAiADPgIAIAA1AgQgATUCBHwgA0IgiHwhAyACIAM+AgQgADUCCCABNQIIfCADQiCIfCEDIAIgAz4CCCAANQIMIAE1Agx8IANCIIh8IQMgAiADPgIMIAA1AhAgATUCEHwgA0IgiHwhAyACIAM+AhAgADUCFCABNQIUfCADQiCIfCEDIAIgAz4CFCAANQIYIAE1Ahh8IANCIIh8IQMgAiADPgIYIAA1AhwgATUCHHwgA0IgiHwhAyACIAM+AhwgA0IgiKcLjAIBAX4gADUCACABNQIAfSEDIAIgA0L/////D4M+AgAgADUCBCABNQIEfSADQiCHfCEDIAIgA0L/////D4M+AgQgADUCCCABNQIIfSADQiCHfCEDIAIgA0L/////D4M+AgggADUCDCABNQIMfSADQiCHfCEDIAIgA0L/////D4M+AgwgADUCECABNQIQfSADQiCHfCEDIAIgA0L/////D4M+AhAgADUCFCABNQIUfSADQiCHfCEDIAIgA0L/////D4M+AhQgADUCGCABNQIYfSADQiCHfCEDIAIgA0L/////D4M+AhggADUCHCABNQIcfSADQiCHfCEDIAIgA0L/////D4M+AhwgA0Igh6cLjxASAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+IANC/////w+DIAA1AgAiBSABNQIAIgZ+fCEDIAQgA0IgiHwhBCACIAM+AgAgBEIgiCEDIARC/////w+DIAUgATUCBCIIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCBCIHIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgQgA0IgiCEEIANC/////w+DIAUgATUCCCIKfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCCCIJIAZ+fCEDIAQgA0IgiHwhBCACIAM+AgggBEIgiCEDIARC/////w+DIAUgATUCDCIMfnwhBCADIARCIIh8IQMgBEL/////D4MgByAKfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCDCILIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AgwgA0IgiCEEIANC/////w+DIAUgATUCECIOfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCECINIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhAgBEIgiCEDIARC/////w+DIAUgATUCFCIQfnwhBCADIARCIIh8IQMgBEL/////D4MgByAOfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCFCIPIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhQgA0IgiCEEIANC/////w+DIAUgATUCGCISfnwhAyAEIANCIIh8IQQgA0L/////D4MgByAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgCSAOfnwhAyAEIANCIIh8IQQgA0L/////D4MgCyAMfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAKfnwhAyAEIANCIIh8IQQgA0L/////D4MgDyAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCGCIRIAZ+fCEDIAQgA0IgiHwhBCACIAM+AhggBEIgiCEDIARC/////w+DIAUgATUCHCIUfnwhBCADIARCIIh8IQMgBEL/////D4MgByASfnwhBCADIARCIIh8IQMgBEL/////D4MgCSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgCyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAMfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAKfnwhBCADIARCIIh8IQMgBEL/////D4MgESAIfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCHCITIAZ+fCEEIAMgBEIgiHwhAyACIAQ+AhwgA0IgiCEEIANC/////w+DIAcgFH58IQMgBCADQiCIfCEEIANC/////w+DIAkgEn58IQMgBCADQiCIfCEEIANC/////w+DIAsgEH58IQMgBCADQiCIfCEEIANC/////w+DIA0gDn58IQMgBCADQiCIfCEEIANC/////w+DIA8gDH58IQMgBCADQiCIfCEEIANC/////w+DIBEgCn58IQMgBCADQiCIfCEEIANC/////w+DIBMgCH58IQMgBCADQiCIfCEEIAIgAz4CICAEQiCIIQMgBEL/////D4MgCSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgCyASfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgDyAOfnwhBCADIARCIIh8IQMgBEL/////D4MgESAMfnwhBCADIARCIIh8IQMgBEL/////D4MgEyAKfnwhBCADIARCIIh8IQMgAiAEPgIkIANCIIghBCADQv////8PgyALIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBJ+fCEDIAQgA0IgiHwhBCADQv////8PgyAPIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyARIA5+fCEDIAQgA0IgiHwhBCADQv////8PgyATIAx+fCEDIAQgA0IgiHwhBCACIAM+AiggBEIgiCEDIARC/////w+DIA0gFH58IQQgAyAEQiCIfCEDIARC/////w+DIA8gEn58IQQgAyAEQiCIfCEDIARC/////w+DIBEgEH58IQQgAyAEQiCIfCEDIARC/////w+DIBMgDn58IQQgAyAEQiCIfCEDIAIgBD4CLCADQiCIIQQgA0L/////D4MgDyAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESASfnwhAyAEIANCIIh8IQQgA0L/////D4MgEyAQfnwhAyAEIANCIIh8IQQgAiADPgIwIARCIIghAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyATIBJ+fCEEIAMgBEIgiHwhAyACIAQ+AjQgA0IgiCEEIANC/////w+DIBMgFH58IQMgBCADQiCIfCEEIAIgAz4COCAEQiCIIQMgAiAEPgI8C4wSDAF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAA1AgAiBiAGfnwhAiADIAJCIIh8IQMgASACPgIAIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AgQiB358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCCCIIfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgByAHfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIMIgl+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAh+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIMIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhAiCn58IQIgAyACQiCIfCEDIAJC/////w+DIAcgCX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAggCH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAYgADUCFCILfnwhAiADIAJCIIh8IQMgAkL/////D4MgByAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgCCAJfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgBiAANQIYIgx+fCECIAMgAkIgiHwhAyACQv////8PgyAHIAt+fCECIAMgAkIgiHwhAyACQv////8PgyAIIAp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAJIAl+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgASACPgIYIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAGIAA1AhwiDX58IQIgAyACQiCIfCEDIAJC/////w+DIAcgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAggC358IQIgAyACQiCIfCEDIAJC/////w+DIAkgCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AhwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAcgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAggDH58IQIgAyACQiCIfCEDIAJC/////w+DIAkgC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAogCn58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAggDX58IQIgAyACQiCIfCEDIAJC/////w+DIAkgDH58IQIgAyACQiCIfCEDIAJC/////w+DIAogC358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAkgDX58IQIgAyACQiCIfCEDIAJC/////w+DIAogDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAsgC358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAogDX58IQIgAyACQiCIfCEDIAJC/////w+DIAsgDH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AiwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAsgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIAwgDH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAwgDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIA0gDX58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyABIAI+AjggAyEEIARCIIghBSABIAQ+AjwLCgAgACAAIAEQCAu2AQEBfiAANQAAIAF+IQMgAiADPgAAIAA1AAQgAX4gA0IgiHwhAyACIAM+AAQgADUACCABfiADQiCIfCEDIAIgAz4ACCAANQAMIAF+IANCIIh8IQMgAiADPgAMIAA1ABAgAX4gA0IgiHwhAyACIAM+ABAgADUAFCABfiADQiCIfCEDIAIgAz4AFCAANQAYIAF+IANCIIh8IQMgAiADPgAYIAA1ABwgAX4gA0IgiHwhAyACIAM+ABwLTgIBfgF/IAAhAyADNQAAIAF8IQIgAyACPgAAIAJCIIghAgJAA0AgAlANASADQQRqIQMgAzUAACACfCECIAMgAj4AACACQiCIIQIMAAsLC7ACBwF/AX8BfwF/AX4BfgF/IAIEQCACIQUFQegAIQULIAMEQCADIQQFQYgBIQQLIAAgBBAAIAFByAAQACAFEAFBqAEQAUEfIQZBHyEHAkADQEHIACAH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AhAgBH58IQMgACADPgIsIAA1AjAgA0IgiHxBiAQ1AhQgBH58IQMgACADPgIwIAA1AjQgA0IgiHxBiAQ1AhggBH58IQMgACADPgI0IAA1AjggA0IgiHxBiAQ1AhwgBH58IQMgACADPgI4QegGIANCIIg+AhxB6AYgAEEgaiABEBALvh8jAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkKJx5mkDiEFIANC/////w+DIAA1AgAiBiABNQIAIgd+fCEDIAQgA0IgiHwhBCADQv////8PgyAFfkL/////D4MhCCADQv////8Pg0EANQKIBCIJIAh+fCEDIAQgA0IgiHwhBCAEQiCIIQMgBEL/////D4MgBiABNQIEIgt+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIEIgogB358IQQgAyAEQiCIfCEDIARC/////w+DQQA1AowEIg0gCH58IQQgAyAEQiCIfCEDIARC/////w+DIAV+Qv////8PgyEMIARC/////w+DIAkgDH58IQQgAyAEQiCIfCEDIANCIIghBCADQv////8PgyAGIAE1AggiD358IQMgBCADQiCIfCEEIANC/////w+DIAogC358IQMgBCADQiCIfCEEIANC/////w+DIAA1AggiDiAHfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAMfnwhAyAEIANCIIh8IQQgA0L/////D4NBADUCkAQiESAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgBX5C/////w+DIRAgA0L/////D4MgCSAQfnwhAyAEIANCIIh8IQQgBEIgiCEDIARC/////w+DIAYgATUCDCITfnwhBCADIARCIIh8IQMgBEL/////D4MgCiAPfnwhBCADIARCIIh8IQMgBEL/////D4MgDiALfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCDCISIAd+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIAx+fCEEIAMgBEIgiHwhAyAEQv////8Pg0EANQKUBCIVIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAFfkL/////D4MhFCAEQv////8PgyAJIBR+fCEEIAMgBEIgiHwhAyADQiCIIQQgA0L/////D4MgBiABNQIQIhd+fCEDIAQgA0IgiHwhBCADQv////8PgyAKIBN+fCEDIAQgA0IgiHwhBCADQv////8PgyAOIA9+fCEDIAQgA0IgiHwhBCADQv////8PgyASIAt+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIQIhYgB358IQMgBCADQiCIfCEEIANC/////w+DIA0gFH58IQMgBCADQiCIfCEEIANC/////w+DIBEgEH58IQMgBCADQiCIfCEEIANC/////w+DIBUgDH58IQMgBCADQiCIfCEEIANC/////w+DQQA1ApgEIhkgCH58IQMgBCADQiCIfCEEIANC/////w+DIAV+Qv////8PgyEYIANC/////w+DIAkgGH58IQMgBCADQiCIfCEEIARCIIghAyAEQv////8PgyAGIAE1AhQiG358IQQgAyAEQiCIfCEDIARC/////w+DIAogF358IQQgAyAEQiCIfCEDIARC/////w+DIA4gE358IQQgAyAEQiCIfCEDIARC/////w+DIBIgD358IQQgAyAEQiCIfCEDIARC/////w+DIBYgC358IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhQiGiAHfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAYfnwhBCADIARCIIh8IQMgBEL/////D4MgESAUfnwhBCADIARCIIh8IQMgBEL/////D4MgFSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgGSAMfnwhBCADIARCIIh8IQMgBEL/////D4NBADUCnAQiHSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgBX5C/////w+DIRwgBEL/////D4MgCSAcfnwhBCADIARCIIh8IQMgA0IgiCEEIANC/////w+DIAYgATUCGCIffnwhAyAEIANCIIh8IQQgA0L/////D4MgCiAbfnwhAyAEIANCIIh8IQQgA0L/////D4MgDiAXfnwhAyAEIANCIIh8IQQgA0L/////D4MgEiATfnwhAyAEIANCIIh8IQQgA0L/////D4MgFiAPfnwhAyAEIANCIIh8IQQgA0L/////D4MgGiALfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCGCIeIAd+fCEDIAQgA0IgiHwhBCADQv////8PgyANIBx+fCEDIAQgA0IgiHwhBCADQv////8PgyARIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAZIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyAdIAx+fCEDIAQgA0IgiHwhBCADQv////8Pg0EANQKgBCIhIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAFfkL/////D4MhICADQv////8PgyAJICB+fCEDIAQgA0IgiHwhBCAEQiCIIQMgBEL/////D4MgBiABNQIcIiN+fCEEIAMgBEIgiHwhAyAEQv////8PgyAKIB9+fCEEIAMgBEIgiHwhAyAEQv////8PgyAOIBt+fCEEIAMgBEIgiHwhAyAEQv////8PgyASIBd+fCEEIAMgBEIgiHwhAyAEQv////8PgyAWIBN+fCEEIAMgBEIgiHwhAyAEQv////8PgyAaIA9+fCEEIAMgBEIgiHwhAyAEQv////8PgyAeIAt+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIcIiIgB358IQQgAyAEQiCIfCEDIARC/////w+DIA0gIH58IQQgAyAEQiCIfCEDIARC/////w+DIBEgHH58IQQgAyAEQiCIfCEDIARC/////w+DIBUgGH58IQQgAyAEQiCIfCEDIARC/////w+DIBkgFH58IQQgAyAEQiCIfCEDIARC/////w+DIB0gEH58IQQgAyAEQiCIfCEDIARC/////w+DICEgDH58IQQgAyAEQiCIfCEDIARC/////w+DQQA1AqQEIiUgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAV+Qv////8PgyEkIARC/////w+DIAkgJH58IQQgAyAEQiCIfCEDIANCIIghBCADQv////8PgyAKICN+fCEDIAQgA0IgiHwhBCADQv////8PgyAOIB9+fCEDIAQgA0IgiHwhBCADQv////8PgyASIBt+fCEDIAQgA0IgiHwhBCADQv////8PgyAWIBd+fCEDIAQgA0IgiHwhBCADQv////8PgyAaIBN+fCEDIAQgA0IgiHwhBCADQv////8PgyAeIA9+fCEDIAQgA0IgiHwhBCADQv////8PgyAiIAt+fCEDIAQgA0IgiHwhBCADQv////8PgyANICR+fCEDIAQgA0IgiHwhBCADQv////8PgyARICB+fCEDIAQgA0IgiHwhBCADQv////8PgyAVIBx+fCEDIAQgA0IgiHwhBCADQv////8PgyAZIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAdIBR+fCEDIAQgA0IgiHwhBCADQv////8PgyAhIBB+fCEDIAQgA0IgiHwhBCADQv////8PgyAlIAx+fCEDIAQgA0IgiHwhBCACIAM+AgAgBEIgiCEDIARC/////w+DIA4gI358IQQgAyAEQiCIfCEDIARC/////w+DIBIgH358IQQgAyAEQiCIfCEDIARC/////w+DIBYgG358IQQgAyAEQiCIfCEDIARC/////w+DIBogF358IQQgAyAEQiCIfCEDIARC/////w+DIB4gE358IQQgAyAEQiCIfCEDIARC/////w+DICIgD358IQQgAyAEQiCIfCEDIARC/////w+DIBEgJH58IQQgAyAEQiCIfCEDIARC/////w+DIBUgIH58IQQgAyAEQiCIfCEDIARC/////w+DIBkgHH58IQQgAyAEQiCIfCEDIARC/////w+DIB0gGH58IQQgAyAEQiCIfCEDIARC/////w+DICEgFH58IQQgAyAEQiCIfCEDIARC/////w+DICUgEH58IQQgAyAEQiCIfCEDIAIgBD4CBCADQiCIIQQgA0L/////D4MgEiAjfnwhAyAEIANCIIh8IQQgA0L/////D4MgFiAffnwhAyAEIANCIIh8IQQgA0L/////D4MgGiAbfnwhAyAEIANCIIh8IQQgA0L/////D4MgHiAXfnwhAyAEIANCIIh8IQQgA0L/////D4MgIiATfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAkfnwhAyAEIANCIIh8IQQgA0L/////D4MgGSAgfnwhAyAEIANCIIh8IQQgA0L/////D4MgHSAcfnwhAyAEIANCIIh8IQQgA0L/////D4MgISAYfnwhAyAEIANCIIh8IQQgA0L/////D4MgJSAUfnwhAyAEIANCIIh8IQQgAiADPgIIIARCIIghAyAEQv////8PgyAWICN+fCEEIAMgBEIgiHwhAyAEQv////8PgyAaIB9+fCEEIAMgBEIgiHwhAyAEQv////8PgyAeIBt+fCEEIAMgBEIgiHwhAyAEQv////8PgyAiIBd+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZICR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAdICB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAhIBx+fCEEIAMgBEIgiHwhAyAEQv////8PgyAlIBh+fCEEIAMgBEIgiHwhAyACIAQ+AgwgA0IgiCEEIANC/////w+DIBogI358IQMgBCADQiCIfCEEIANC/////w+DIB4gH358IQMgBCADQiCIfCEEIANC/////w+DICIgG358IQMgBCADQiCIfCEEIANC/////w+DIB0gJH58IQMgBCADQiCIfCEEIANC/////w+DICEgIH58IQMgBCADQiCIfCEEIANC/////w+DICUgHH58IQMgBCADQiCIfCEEIAIgAz4CECAEQiCIIQMgBEL/////D4MgHiAjfnwhBCADIARCIIh8IQMgBEL/////D4MgIiAffnwhBCADIARCIIh8IQMgBEL/////D4MgISAkfnwhBCADIARCIIh8IQMgBEL/////D4MgJSAgfnwhBCADIARCIIh8IQMgAiAEPgIUIANCIIghBCADQv////8PgyAiICN+fCEDIAQgA0IgiHwhBCADQv////8PgyAlICR+fCEDIAQgA0IgiHwhBCACIAM+AhggBEIgiCEDIAIgBD4CHCADpwRAIAJBiAQgAhAHGgUgAkGIBBAFBEAgAkGIBCACEAcaCwsLuyEdAX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfkKJx5mkDiEGQgAhAkIAIQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgADUCACIHIAd+fCECIAMgAkIgiHwhAyACQv////8PgyAGfkL/////D4MhCCACQv////8Pg0EANQKIBCIJIAh+fCECIAMgAkIgiHwhAyADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgByAANQIEIgp+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgAkL/////D4NBADUCjAQiDCAIfnwhAiADIAJCIIh8IQMgAkL/////D4MgBn5C/////w+DIQsgAkL/////D4MgCSALfnwhAiADIAJCIIh8IQMgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAcgADUCCCINfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgCiAKfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIAwgC358IQIgAyACQiCIfCEDIAJC/////w+DQQA1ApAEIg8gCH58IQIgAyACQiCIfCEDIAJC/////w+DIAZ+Qv////8PgyEOIAJC/////w+DIAkgDn58IQIgAyACQiCIfCEDIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAHIAA1AgwiEH58IQIgAyACQiCIfCEDIAJC/////w+DIAogDX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8PgyAMIA5+fCECIAMgAkIgiHwhAyACQv////8PgyAPIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0EANQKUBCISIAh+fCECIAMgAkIgiHwhAyACQv////8PgyAGfkL/////D4MhESACQv////8PgyAJIBF+fCECIAMgAkIgiHwhAyADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgByAANQIQIhN+fCECIAMgAkIgiHwhAyACQv////8PgyAKIBB+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyANIA1+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgAkL/////D4MgDCARfnwhAiADIAJCIIh8IQMgAkL/////D4MgDyAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgEiALfnwhAiADIAJCIIh8IQMgAkL/////D4NBADUCmAQiFSAIfnwhAiADIAJCIIh8IQMgAkL/////D4MgBn5C/////w+DIRQgAkL/////D4MgCSAUfnwhAiADIAJCIIh8IQMgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAcgADUCFCIWfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiATfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAQfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIAwgFH58IQIgAyACQiCIfCEDIAJC/////w+DIA8gEX58IQIgAyACQiCIfCEDIAJC/////w+DIBIgDn58IQIgAyACQiCIfCEDIAJC/////w+DIBUgC358IQIgAyACQiCIfCEDIAJC/////w+DQQA1ApwEIhggCH58IQIgAyACQiCIfCEDIAJC/////w+DIAZ+Qv////8PgyEXIAJC/////w+DIAkgF358IQIgAyACQiCIfCEDIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAHIAA1AhgiGX58IQIgAyACQiCIfCEDIAJC/////w+DIAogFn58IQIgAyACQiCIfCEDIAJC/////w+DIA0gE358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIBAgEH58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8PgyAMIBd+fCECIAMgAkIgiHwhAyACQv////8PgyAPIBR+fCECIAMgAkIgiHwhAyACQv////8PgyASIBF+fCECIAMgAkIgiHwhAyACQv////8PgyAVIA5+fCECIAMgAkIgiHwhAyACQv////8PgyAYIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0EANQKgBCIbIAh+fCECIAMgAkIgiHwhAyACQv////8PgyAGfkL/////D4MhGiACQv////8PgyAJIBp+fCECIAMgAkIgiHwhAyADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgByAANQIcIhx+fCECIAMgAkIgiHwhAyACQv////8PgyAKIBl+fCECIAMgAkIgiHwhAyACQv////8PgyANIBZ+fCECIAMgAkIgiHwhAyACQv////8PgyAQIBN+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgAkL/////D4MgDCAafnwhAiADIAJCIIh8IQMgAkL/////D4MgDyAXfnwhAiADIAJCIIh8IQMgAkL/////D4MgEiAUfnwhAiADIAJCIIh8IQMgAkL/////D4MgFSARfnwhAiADIAJCIIh8IQMgAkL/////D4MgGCAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgGyALfnwhAiADIAJCIIh8IQMgAkL/////D4NBADUCpAQiHiAIfnwhAiADIAJCIIh8IQMgAkL/////D4MgBn5C/////w+DIR0gAkL/////D4MgCSAdfnwhAiADIAJCIIh8IQMgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAogHH58IQIgAyACQiCIfCEDIAJC/////w+DIA0gGX58IQIgAyACQiCIfCEDIAJC/////w+DIBAgFn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIBMgE358IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8PgyAMIB1+fCECIAMgAkIgiHwhAyACQv////8PgyAPIBp+fCECIAMgAkIgiHwhAyACQv////8PgyASIBd+fCECIAMgAkIgiHwhAyACQv////8PgyAVIBR+fCECIAMgAkIgiHwhAyACQv////8PgyAYIBF+fCECIAMgAkIgiHwhAyACQv////8PgyAbIA5+fCECIAMgAkIgiHwhAyACQv////8PgyAeIAt+fCECIAMgAkIgiHwhAyABIAI+AgAgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIA0gHH58IQIgAyACQiCIfCEDIAJC/////w+DIBAgGX58IQIgAyACQiCIfCEDIAJC/////w+DIBMgFn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8PgyAPIB1+fCECIAMgAkIgiHwhAyACQv////8PgyASIBp+fCECIAMgAkIgiHwhAyACQv////8PgyAVIBd+fCECIAMgAkIgiHwhAyACQv////8PgyAYIBR+fCECIAMgAkIgiHwhAyACQv////8PgyAbIBF+fCECIAMgAkIgiHwhAyACQv////8PgyAeIA5+fCECIAMgAkIgiHwhAyABIAI+AgQgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIBAgHH58IQIgAyACQiCIfCEDIAJC/////w+DIBMgGX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIBYgFn58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8PgyASIB1+fCECIAMgAkIgiHwhAyACQv////8PgyAVIBp+fCECIAMgAkIgiHwhAyACQv////8PgyAYIBd+fCECIAMgAkIgiHwhAyACQv////8PgyAbIBR+fCECIAMgAkIgiHwhAyACQv////8PgyAeIBF+fCECIAMgAkIgiHwhAyABIAI+AgggAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIBMgHH58IQIgAyACQiCIfCEDIAJC/////w+DIBYgGX58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8PgyAVIB1+fCECIAMgAkIgiHwhAyACQv////8PgyAYIBp+fCECIAMgAkIgiHwhAyACQv////8PgyAbIBd+fCECIAMgAkIgiHwhAyACQv////8PgyAeIBR+fCECIAMgAkIgiHwhAyABIAI+AgwgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIBYgHH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIBkgGX58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8PgyAYIB1+fCECIAMgAkIgiHwhAyACQv////8PgyAbIBp+fCECIAMgAkIgiHwhAyACQv////8PgyAeIBd+fCECIAMgAkIgiHwhAyABIAI+AhAgAyEEIARCIIghBUIAIQJCACED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AgAgBH58IQMgACADPgIAIAA1AgQgA0IgiHxByA41AgQgBH58IQMgACADPgIEIAA1AgggA0IgiHxByA41AgggBH58IQMgACADPgIIIAA1AgwgA0IgiHxByA41AgwgBH58IQMgACADPgIMIAA1AhAgA0IgiHxByA41AhAgBH58IQMgACADPgIQIAA1AhQgA0IgiHxByA41AhQgBH58IQMgACADPgIUIAA1AhggA0IgiHxByA41AhggBH58IQMgACADPgIYIAA1AhwgA0IgiHxByA41AhwgBH58IQMgACADPgIcQagRIANCIIg+AgBCACEDIAA1AgQgAn5C/////w+DIQQgADUCBCADQiCIfEHIDjUCACAEfnwhAyAAIAM+AgQgADUCCCADQiCIfEHIDjUCBCAEfnwhAyAAIAM+AgggADUCDCADQiCIfEHIDjUCCCAEfnwhAyAAIAM+AgwgADUCECADQiCIfEHIDjUCDCAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHIDjUCECAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHIDjUCFCAEfnwhAyAAIAM+AhggADUCHCADQiCIfEHIDjUCGCAEfnwhAyAAIAM+AhwgADUCICADQiCIfEHIDjUCHCAEfnwhAyAAIAM+AiBBqBEgA0IgiD4CBEIAIQMgADUCCCACfkL/////D4MhBCAANQIIIANCIIh8QcgONQIAIAR+fCEDIAAgAz4CCCAANQIMIANCIIh8QcgONQIEIAR+fCEDIAAgAz4CDCAANQIQIANCIIh8QcgONQIIIAR+fCEDIAAgAz4CECAANQIUIANCIIh8QcgONQIMIAR+fCEDIAAgAz4CFCAANQIYIANCIIh8QcgONQIQIAR+fCEDIAAgAz4CGCAANQIcIANCIIh8QcgONQIUIAR+fCEDIAAgAz4CHCAANQIgIANCIIh8QcgONQIYIAR+fCEDIAAgAz4CICAANQIkIANCIIh8QcgONQIcIAR+fCEDIAAgAz4CJEGoESADQiCIPgIIQgAhAyAANQIMIAJ+Qv////8PgyEEIAA1AgwgA0IgiHxByA41AgAgBH58IQMgACADPgIMIAA1AhAgA0IgiHxByA41AgQgBH58IQMgACADPgIQIAA1AhQgA0IgiHxByA41AgggBH58IQMgACADPgIUIAA1AhggA0IgiHxByA41AgwgBH58IQMgACADPgIYIAA1AhwgA0IgiHxByA41AhAgBH58IQMgACADPgIcIAA1AiAgA0IgiHxByA41AhQgBH58IQMgACADPgIgIAA1AiQgA0IgiHxByA41AhggBH58IQMgACADPgIkIAA1AiggA0IgiHxByA41AhwgBH58IQMgACADPgIoQagRIANCIIg+AgxCACEDIAA1AhAgAn5C/////w+DIQQgADUCECADQiCIfEHIDjUCACAEfnwhAyAAIAM+AhAgADUCFCADQiCIfEHIDjUCBCAEfnwhAyAAIAM+AhQgADUCGCADQiCIfEHIDjUCCCAEfnwhAyAAIAM+AhggADUCHCADQiCIfEHIDjUCDCAEfnwhAyAAIAM+AhwgADUCICADQiCIfEHIDjUCECAEfnwhAyAAIAM+AiAgADUCJCADQiCIfEHIDjUCFCAEfnwhAyAAIAM+AiQgADUCKCADQiCIfEHIDjUCGCAEfnwhAyAAIAM+AiggADUCLCADQiCIfEHIDjUCHCAEfnwhAyAAIAM+AixBqBEgA0IgiD4CEEIAIQMgADUCFCACfkL/////D4MhBCAANQIUIANCIIh8QcgONQIAIAR+fCEDIAAgAz4CFCAANQIYIANCIIh8QcgONQIEIAR+fCEDIAAgAz4CGCAANQIcIANCIIh8QcgONQIIIAR+fCEDIAAgAz4CHCAANQIgIANCIIh8QcgONQIMIAR+fCEDIAAgAz4CICAANQIkIANCIIh8QcgONQIQIAR+fCEDIAAgAz4CJCAANQIoIANCIIh8QcgONQIUIAR+fCEDIAAgAz4CKCAANQIsIANCIIh8QcgONQIYIAR+fCEDIAAgAz4CLCAANQIwIANCIIh8QcgONQIcIAR+fCEDIAAgAz4CMEGoESADQiCIPgIUQgAhAyAANQIYIAJ+Qv////8PgyEEIAA1AhggA0IgiHxByA41AgAgBH58IQMgACADPgIYIAA1AhwgA0IgiHxByA41AgQgBH58IQMgACADPgIcIAA1AiAgA0IgiHxByA41AgggBH58IQMgACADPgIgIAA1AiQgA0IgiHxByA41AgwgBH58IQMgACADPgIkIAA1AiggA0IgiHxByA41AhAgBH58IQMgACADPgIoIAA1AiwgA0IgiHxByA41AhQgBH58IQMgACADPgIsIAA1AjAgA0IgiHxByA41AhggBH58IQMgACADPgIwIAA1AjQgA0IgiHxByA41AhwgBH58IQMgACADPgI0QagRIANCIIg+AhhCACEDIAA1AhwgAn5C/////w+DIQQgADUCHCADQiCIfEHIDjUCACAEfnwhAyAAIAM+AhwgADUCICADQiCIfEHIDjUCBCAEfnwhAyAAIAM+AiAgADUCJCADQiCIfEHIDjUCCCAEfnwhAyAAIAM+AiQgADUCKCADQiCIfEHIDjUCDCAEfnwhAyAAIAM+AiggADUCLCADQiCIfEHIDjUCECAEfnwhAyAAIAM+AiwgADUCMCADQiCIfEHIDjUCFCAEfnwhAyAAIAM+AjAgADUCNCADQiCIfEHIDjUCGCAEfnwhAyAAIAM+AjQgADUCOCADQiCIfEHIDjUCHCAEfnwhAyAAIAM+AjhBqBEgA0IgiD4CHEGoESAAQSBqIAEQJgu+HyMBfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+Qv////8OIQUgA0L/////D4MgADUCACIGIAE1AgAiB358IQMgBCADQiCIfCEEIANC/////w+DIAV+Qv////8PgyEIIANC/////w+DQQA1AsgOIgkgCH58IQMgBCADQiCIfCEEIARCIIghAyAEQv////8PgyAGIAE1AgQiC358IQQgAyAEQiCIfCEDIARC/////w+DIAA1AgQiCiAHfnwhBCADIARCIIh8IQMgBEL/////D4NBADUCzA4iDSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgBX5C/////w+DIQwgBEL/////D4MgCSAMfnwhBCADIARCIIh8IQMgA0IgiCEEIANC/////w+DIAYgATUCCCIPfnwhAyAEIANCIIh8IQQgA0L/////D4MgCiALfnwhAyAEIANCIIh8IQQgA0L/////D4MgADUCCCIOIAd+fCEDIAQgA0IgiHwhBCADQv////8PgyANIAx+fCEDIAQgA0IgiHwhBCADQv////8Pg0EANQLQDiIRIAh+fCEDIAQgA0IgiHwhBCADQv////8PgyAFfkL/////D4MhECADQv////8PgyAJIBB+fCEDIAQgA0IgiHwhBCAEQiCIIQMgBEL/////D4MgBiABNQIMIhN+fCEEIAMgBEIgiHwhAyAEQv////8PgyAKIA9+fCEEIAMgBEIgiHwhAyAEQv////8PgyAOIAt+fCEEIAMgBEIgiHwhAyAEQv////8PgyAANQIMIhIgB358IQQgAyAEQiCIfCEDIARC/////w+DIA0gEH58IQQgAyAEQiCIfCEDIARC/////w+DIBEgDH58IQQgAyAEQiCIfCEDIARC/////w+DQQA1AtQOIhUgCH58IQQgAyAEQiCIfCEDIARC/////w+DIAV+Qv////8PgyEUIARC/////w+DIAkgFH58IQQgAyAEQiCIfCEDIANCIIghBCADQv////8PgyAGIAE1AhAiF358IQMgBCADQiCIfCEEIANC/////w+DIAogE358IQMgBCADQiCIfCEEIANC/////w+DIA4gD358IQMgBCADQiCIfCEEIANC/////w+DIBIgC358IQMgBCADQiCIfCEEIANC/////w+DIAA1AhAiFiAHfnwhAyAEIANCIIh8IQQgA0L/////D4MgDSAUfnwhAyAEIANCIIh8IQQgA0L/////D4MgESAQfnwhAyAEIANCIIh8IQQgA0L/////D4MgFSAMfnwhAyAEIANCIIh8IQQgA0L/////D4NBADUC2A4iGSAIfnwhAyAEIANCIIh8IQQgA0L/////D4MgBX5C/////w+DIRggA0L/////D4MgCSAYfnwhAyAEIANCIIh8IQQgBEIgiCEDIARC/////w+DIAYgATUCFCIbfnwhBCADIARCIIh8IQMgBEL/////D4MgCiAXfnwhBCADIARCIIh8IQMgBEL/////D4MgDiATfnwhBCADIARCIIh8IQMgBEL/////D4MgEiAPfnwhBCADIARCIIh8IQMgBEL/////D4MgFiALfnwhBCADIARCIIh8IQMgBEL/////D4MgADUCFCIaIAd+fCEEIAMgBEIgiHwhAyAEQv////8PgyANIBh+fCEEIAMgBEIgiHwhAyAEQv////8PgyARIBR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAVIBB+fCEEIAMgBEIgiHwhAyAEQv////8PgyAZIAx+fCEEIAMgBEIgiHwhAyAEQv////8Pg0EANQLcDiIdIAh+fCEEIAMgBEIgiHwhAyAEQv////8PgyAFfkL/////D4MhHCAEQv////8PgyAJIBx+fCEEIAMgBEIgiHwhAyADQiCIIQQgA0L/////D4MgBiABNQIYIh9+fCEDIAQgA0IgiHwhBCADQv////8PgyAKIBt+fCEDIAQgA0IgiHwhBCADQv////8PgyAOIBd+fCEDIAQgA0IgiHwhBCADQv////8PgyASIBN+fCEDIAQgA0IgiHwhBCADQv////8PgyAWIA9+fCEDIAQgA0IgiHwhBCADQv////8PgyAaIAt+fCEDIAQgA0IgiHwhBCADQv////8PgyAANQIYIh4gB358IQMgBCADQiCIfCEEIANC/////w+DIA0gHH58IQMgBCADQiCIfCEEIANC/////w+DIBEgGH58IQMgBCADQiCIfCEEIANC/////w+DIBUgFH58IQMgBCADQiCIfCEEIANC/////w+DIBkgEH58IQMgBCADQiCIfCEEIANC/////w+DIB0gDH58IQMgBCADQiCIfCEEIANC/////w+DQQA1AuAOIiEgCH58IQMgBCADQiCIfCEEIANC/////w+DIAV+Qv////8PgyEgIANC/////w+DIAkgIH58IQMgBCADQiCIfCEEIARCIIghAyAEQv////8PgyAGIAE1AhwiI358IQQgAyAEQiCIfCEDIARC/////w+DIAogH358IQQgAyAEQiCIfCEDIARC/////w+DIA4gG358IQQgAyAEQiCIfCEDIARC/////w+DIBIgF358IQQgAyAEQiCIfCEDIARC/////w+DIBYgE358IQQgAyAEQiCIfCEDIARC/////w+DIBogD358IQQgAyAEQiCIfCEDIARC/////w+DIB4gC358IQQgAyAEQiCIfCEDIARC/////w+DIAA1AhwiIiAHfnwhBCADIARCIIh8IQMgBEL/////D4MgDSAgfnwhBCADIARCIIh8IQMgBEL/////D4MgESAcfnwhBCADIARCIIh8IQMgBEL/////D4MgFSAYfnwhBCADIARCIIh8IQMgBEL/////D4MgGSAUfnwhBCADIARCIIh8IQMgBEL/////D4MgHSAQfnwhBCADIARCIIh8IQMgBEL/////D4MgISAMfnwhBCADIARCIIh8IQMgBEL/////D4NBADUC5A4iJSAIfnwhBCADIARCIIh8IQMgBEL/////D4MgBX5C/////w+DISQgBEL/////D4MgCSAkfnwhBCADIARCIIh8IQMgA0IgiCEEIANC/////w+DIAogI358IQMgBCADQiCIfCEEIANC/////w+DIA4gH358IQMgBCADQiCIfCEEIANC/////w+DIBIgG358IQMgBCADQiCIfCEEIANC/////w+DIBYgF358IQMgBCADQiCIfCEEIANC/////w+DIBogE358IQMgBCADQiCIfCEEIANC/////w+DIB4gD358IQMgBCADQiCIfCEEIANC/////w+DICIgC358IQMgBCADQiCIfCEEIANC/////w+DIA0gJH58IQMgBCADQiCIfCEEIANC/////w+DIBEgIH58IQMgBCADQiCIfCEEIANC/////w+DIBUgHH58IQMgBCADQiCIfCEEIANC/////w+DIBkgGH58IQMgBCADQiCIfCEEIANC/////w+DIB0gFH58IQMgBCADQiCIfCEEIANC/////w+DICEgEH58IQMgBCADQiCIfCEEIANC/////w+DICUgDH58IQMgBCADQiCIfCEEIAIgAz4CACAEQiCIIQMgBEL/////D4MgDiAjfnwhBCADIARCIIh8IQMgBEL/////D4MgEiAffnwhBCADIARCIIh8IQMgBEL/////D4MgFiAbfnwhBCADIARCIIh8IQMgBEL/////D4MgGiAXfnwhBCADIARCIIh8IQMgBEL/////D4MgHiATfnwhBCADIARCIIh8IQMgBEL/////D4MgIiAPfnwhBCADIARCIIh8IQMgBEL/////D4MgESAkfnwhBCADIARCIIh8IQMgBEL/////D4MgFSAgfnwhBCADIARCIIh8IQMgBEL/////D4MgGSAcfnwhBCADIARCIIh8IQMgBEL/////D4MgHSAYfnwhBCADIARCIIh8IQMgBEL/////D4MgISAUfnwhBCADIARCIIh8IQMgBEL/////D4MgJSAQfnwhBCADIARCIIh8IQMgAiAEPgIEIANCIIghBCADQv////8PgyASICN+fCEDIAQgA0IgiHwhBCADQv////8PgyAWIB9+fCEDIAQgA0IgiHwhBCADQv////8PgyAaIBt+fCEDIAQgA0IgiHwhBCADQv////8PgyAeIBd+fCEDIAQgA0IgiHwhBCADQv////8PgyAiIBN+fCEDIAQgA0IgiHwhBCADQv////8PgyAVICR+fCEDIAQgA0IgiHwhBCADQv////8PgyAZICB+fCEDIAQgA0IgiHwhBCADQv////8PgyAdIBx+fCEDIAQgA0IgiHwhBCADQv////8PgyAhIBh+fCEDIAQgA0IgiHwhBCADQv////8PgyAlIBR+fCEDIAQgA0IgiHwhBCACIAM+AgggBEIgiCEDIARC/////w+DIBYgI358IQQgAyAEQiCIfCEDIARC/////w+DIBogH358IQQgAyAEQiCIfCEDIARC/////w+DIB4gG358IQQgAyAEQiCIfCEDIARC/////w+DICIgF358IQQgAyAEQiCIfCEDIARC/////w+DIBkgJH58IQQgAyAEQiCIfCEDIARC/////w+DIB0gIH58IQQgAyAEQiCIfCEDIARC/////w+DICEgHH58IQQgAyAEQiCIfCEDIARC/////w+DICUgGH58IQQgAyAEQiCIfCEDIAIgBD4CDCADQiCIIQQgA0L/////D4MgGiAjfnwhAyAEIANCIIh8IQQgA0L/////D4MgHiAffnwhAyAEIANCIIh8IQQgA0L/////D4MgIiAbfnwhAyAEIANCIIh8IQQgA0L/////D4MgHSAkfnwhAyAEIANCIIh8IQQgA0L/////D4MgISAgfnwhAyAEIANCIIh8IQQgA0L/////D4MgJSAcfnwhAyAEIANCIIh8IQQgAiADPgIQIARCIIghAyAEQv////8PgyAeICN+fCEEIAMgBEIgiHwhAyAEQv////8PgyAiIB9+fCEEIAMgBEIgiHwhAyAEQv////8PgyAhICR+fCEEIAMgBEIgiHwhAyAEQv////8PgyAlICB+fCEEIAMgBEIgiHwhAyACIAQ+AhQgA0IgiCEEIANC/////w+DICIgI358IQMgBCADQiCIfCEEIANC/////w+DICUgJH58IQMgBCADQiCIfCEEIAIgAz4CGCAEQiCIIQMgAiAEPgIcIAOnBEAgAkHIDiACEAcaBSACQcgOEAUEQCACQcgOIAIQBxoLCwu7IR0BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+AX4BfgF+Qv////8OIQZCACECQgAhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAANQIAIgcgB358IQIgAyACQiCIfCEDIAJC/////w+DIAZ+Qv////8PgyEIIAJC/////w+DQQA1AsgOIgkgCH58IQIgAyACQiCIfCEDIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAHIAA1AgQiCn58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8Pg0EANQLMDiIMIAh+fCECIAMgAkIgiHwhAyACQv////8PgyAGfkL/////D4MhCyACQv////8PgyAJIAt+fCECIAMgAkIgiHwhAyADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgByAANQIIIg1+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAKIAp+fCECIAMgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgAkL/////D4MgDCALfnwhAiADIAJCIIh8IQMgAkL/////D4NBADUC0A4iDyAIfnwhAiADIAJCIIh8IQMgAkL/////D4MgBn5C/////w+DIQ4gAkL/////D4MgCSAOfnwhAiADIAJCIIh8IQMgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAcgADUCDCIQfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiANfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIAwgDn58IQIgAyACQiCIfCEDIAJC/////w+DIA8gC358IQIgAyACQiCIfCEDIAJC/////w+DQQA1AtQOIhIgCH58IQIgAyACQiCIfCEDIAJC/////w+DIAZ+Qv////8PgyERIAJC/////w+DIAkgEX58IQIgAyACQiCIfCEDIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAHIAA1AhAiE358IQIgAyACQiCIfCEDIAJC/////w+DIAogEH58IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIA0gDX58IQIgAyACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8PgyAMIBF+fCECIAMgAkIgiHwhAyACQv////8PgyAPIA5+fCECIAMgAkIgiHwhAyACQv////8PgyASIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0EANQLYDiIVIAh+fCECIAMgAkIgiHwhAyACQv////8PgyAGfkL/////D4MhFCACQv////8PgyAJIBR+fCECIAMgAkIgiHwhAyADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgByAANQIUIhZ+fCECIAMgAkIgiHwhAyACQv////8PgyAKIBN+fCECIAMgAkIgiHwhAyACQv////8PgyANIBB+fCECIAMgAkIgiHwhAyACQv////8Pg0IBhiECIANCAYYgAkIgiHwhAyACQv////8PgyAEQv////8Pg3whAiADIAJCIIh8IAV8IQMgAkL/////D4MgDCAUfnwhAiADIAJCIIh8IQMgAkL/////D4MgDyARfnwhAiADIAJCIIh8IQMgAkL/////D4MgEiAOfnwhAiADIAJCIIh8IQMgAkL/////D4MgFSALfnwhAiADIAJCIIh8IQMgAkL/////D4NBADUC3A4iGCAIfnwhAiADIAJCIIh8IQMgAkL/////D4MgBn5C/////w+DIRcgAkL/////D4MgCSAXfnwhAiADIAJCIIh8IQMgAyEEIARCIIghBUIAIQJCACEDIAJC/////w+DIAcgADUCGCIZfnwhAiADIAJCIIh8IQMgAkL/////D4MgCiAWfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSATfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgECAQfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIAwgF358IQIgAyACQiCIfCEDIAJC/////w+DIA8gFH58IQIgAyACQiCIfCEDIAJC/////w+DIBIgEX58IQIgAyACQiCIfCEDIAJC/////w+DIBUgDn58IQIgAyACQiCIfCEDIAJC/////w+DIBggC358IQIgAyACQiCIfCEDIAJC/////w+DQQA1AuAOIhsgCH58IQIgAyACQiCIfCEDIAJC/////w+DIAZ+Qv////8PgyEaIAJC/////w+DIAkgGn58IQIgAyACQiCIfCEDIAMhBCAEQiCIIQVCACECQgAhAyACQv////8PgyAHIAA1AhwiHH58IQIgAyACQiCIfCEDIAJC/////w+DIAogGX58IQIgAyACQiCIfCEDIAJC/////w+DIA0gFn58IQIgAyACQiCIfCEDIAJC/////w+DIBAgE358IQIgAyACQiCIfCEDIAJC/////w+DQgGGIQIgA0IBhiACQiCIfCEDIAJC/////w+DIARC/////w+DfCECIAMgAkIgiHwgBXwhAyACQv////8PgyAMIBp+fCECIAMgAkIgiHwhAyACQv////8PgyAPIBd+fCECIAMgAkIgiHwhAyACQv////8PgyASIBR+fCECIAMgAkIgiHwhAyACQv////8PgyAVIBF+fCECIAMgAkIgiHwhAyACQv////8PgyAYIA5+fCECIAMgAkIgiHwhAyACQv////8PgyAbIAt+fCECIAMgAkIgiHwhAyACQv////8Pg0EANQLkDiIeIAh+fCECIAMgAkIgiHwhAyACQv////8PgyAGfkL/////D4MhHSACQv////8PgyAJIB1+fCECIAMgAkIgiHwhAyADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgCiAcfnwhAiADIAJCIIh8IQMgAkL/////D4MgDSAZfnwhAiADIAJCIIh8IQMgAkL/////D4MgECAWfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgEyATfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIAwgHX58IQIgAyACQiCIfCEDIAJC/////w+DIA8gGn58IQIgAyACQiCIfCEDIAJC/////w+DIBIgF358IQIgAyACQiCIfCEDIAJC/////w+DIBUgFH58IQIgAyACQiCIfCEDIAJC/////w+DIBggEX58IQIgAyACQiCIfCEDIAJC/////w+DIBsgDn58IQIgAyACQiCIfCEDIAJC/////w+DIB4gC358IQIgAyACQiCIfCEDIAEgAj4CACADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgDSAcfnwhAiADIAJCIIh8IQMgAkL/////D4MgECAZfnwhAiADIAJCIIh8IQMgAkL/////D4MgEyAWfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIA8gHX58IQIgAyACQiCIfCEDIAJC/////w+DIBIgGn58IQIgAyACQiCIfCEDIAJC/////w+DIBUgF358IQIgAyACQiCIfCEDIAJC/////w+DIBggFH58IQIgAyACQiCIfCEDIAJC/////w+DIBsgEX58IQIgAyACQiCIfCEDIAJC/////w+DIB4gDn58IQIgAyACQiCIfCEDIAEgAj4CBCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgECAcfnwhAiADIAJCIIh8IQMgAkL/////D4MgEyAZfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgFiAWfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIBIgHX58IQIgAyACQiCIfCEDIAJC/////w+DIBUgGn58IQIgAyACQiCIfCEDIAJC/////w+DIBggF358IQIgAyACQiCIfCEDIAJC/////w+DIBsgFH58IQIgAyACQiCIfCEDIAJC/////w+DIB4gEX58IQIgAyACQiCIfCEDIAEgAj4CCCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgEyAcfnwhAiADIAJCIIh8IQMgAkL/////D4MgFiAZfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIBUgHX58IQIgAyACQiCIfCEDIAJC/////w+DIBggGn58IQIgAyACQiCIfCEDIAJC/////w+DIBsgF358IQIgAyACQiCIfCEDIAJC/////w+DIB4gFH58IQIgAyACQiCIfCEDIAEgAj4CDCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgFiAcfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgGSAZfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIBggHX58IQIgAyACQiCIfCEDIAJC/////w+DIBsgGn58IQIgAyACQiCIfCEDIAJC/////w+DIB4gF358IQIgAyACQiCIfCEDIAEgAj4CECADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4MgGSAcfnwhAiADIAJCIIh8IQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIBsgHX58IQIgAyACQiCIfCEDIAJC/////w+DIB4gGn58IQIgAyACQiCIfCEDIAEgAj4CFCADIQQgBEIgiCEFQgAhAkIAIQMgAkL/////D4NCAYYhAiADQgGGIAJCIIh8IQMgAkL/////D4MgHCAcfnwhAiADIAJCIIh8IQMgAkL/////D4MgBEL/////D4N8IQIgAyACQiCIfCAFfCEDIAJC/////w+DIB4gHX58IQIgAyACQiCIfCEDIAEgAj4CGCADIQQgBEIgiCEFIAEgBD4CHCAFpwRAIAFByA4gARAHGgUgAUHIDhAFBEAgAUHIDiABEAcaCwsLCgAgACAAIAEQKgsLACAAQYgPIAEQKgsVACAAQagVEABByBUQAUGoFSABECkLEQAgAEHoFRAuQegVQYgQEAULJAAgABACBEBBAA8LIABBiBYQLkGIFkGIEBAFBEBBfw8LQQEPCxcAIAAgARAuIAFByA4gARAOIAEgARAtCwkAQagPIAAQAAvLAQQBfwF/AX8BfyACEAFBICEFIAAhAwJAA0AgBSABSw0BIAVBIEYEQEGoFhAyBUGoFkGID0GoFhAqCyADQagWQcgWECogAkHIFiACECYgA0EgaiEDIAVBIGohBQwACwsgAUEgcCEEIARFBEAPC0HIFhABQQAhBgJAA0AgBiAERg0BIAYgAy0AADoAyBYgA0EBaiEDIAZBAWohBgwACwsgBUEgRgRAQagWEDIFQagWQYgPQagWECoLQcgWQagWQcgWECog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EEGIJUHIJCACEBEgAkHIJSACEBEgAEEgakHIJEHoJRAUQeglQeglQeglEBBBqCUgAiACQSBqEBEgAkEgakHoJCACQSBqEBQgAkEgakHoJSACQSBqEBEgA0HIIyACQcAAahAQIAJBwABqIAJBwABqEBUgAkHAAGpByCIgAkHAAGoQESACQcAAakHoIyACQcAAahARC7wDAgF/AX8gAEHAAGohAyABQcAAaiEEIAAQQARAIAEgAhBEDwsgARBABEAgACACEEQPCyADEA8EQCABIAAgAhBMDwsgBBAPBEAgACABIAIQTA8LIANBiCYQFSAEQagmEBUgAEGoJkHIJhAUIAFBiCZB6CYQFCADQYgmQYgnEBQgBEGoJkGoJxAUIABBIGpBqCdByCcQFCABQSBqQYgnQegnEBRByCZB6CYQBARAQcgnQegnEAQEQCAAIAIQSg8LC0HoJkHIJkGIKBARQegnQcgnQagoEBFBiChBiChByCgQEEHIKEHIKBAVQYgoQcgoQegoEBRBqChBqChBiCkQEEHIJkHIKEHIKRAUQYgpQagpEBVByClByClB6CkQEEGoKUHoKCACEBEgAkHoKSACEBFByCdB6ChBiCoQFEGIKkGIKkGIKhAQQcgpIAIgAkEgahARIAJBIGpBiCkgAkEgahAUIAJBIGpBiCogAkEgahARIAMgBCACQcAAahAQIAJBwABqIAJBwABqEBUgAkHAAGpBiCYgAkHAAGoQESACQcAAakGoJiACQcAAahARIAJBwABqQYgoIAJBwABqEBQLFAAgACABEAAgAEEgaiABQSBqEBILIgAgACABEAAgAEEgaiABQSBqEBIgAEHAAGogAUHAAGoQAAsSACABQagqEE4gAEGoKiACEEsLEgAgAUGIKxBOIABBiCsgAhBMCxIAIAFB6CsQTyAAQegrIAIQTQsUACAAIAEQGCAAQSBqIAFBIGoQGAsiACAAIAEQGCAAQSBqIAFBIGoQGCAAQcAAaiABQcAAahAYCxQAIAAgARAXIABBIGogAUEgahAXCyIAIAAgARAXIABBIGogAUEgahAXIABBwABqIAFBwABqEBcLSwAgABBABEAgARABIAFBIGoQAQUgAEHAAGpByCwQG0HILEHoLBAVQcgsQegsQYgtEBQgAEHoLCABEBQgAEEgakGILSABQSBqEBQLCzEAIABB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AEGI4gAQhQFBiOIAQYjiABCMASAAQajgAEEgQcjgABCWAUHI4ABBiOEAEIkBIABBiOEAQYjhABCHAUGI4QBByOEAEI0BQcjhAEGI4QBByOEAEIcBQcjhAEGI4gAQkAEEQEEADwtBAQ8LEQAgABCCASAAQcAAahCCAXELCwAgAEGAAWoQggELEAAgABCEASAAQcAAahCEAQsZACAAEIQBIABBwABqEIUBIABBgAFqEIQBC6IBACABIAApAwA3AwAgASAAKQMINwMIIAEgACkDEDcDECABIAApAxg3AxggASAAKQMgNwMgIAEgACkDKDcDKCABIAApAzA3AzAgASAAKQM4NwM4IAEgACkDQDcDQCABIAApA0g3A0ggASAAKQNQNwNQIAEgACkDWDcDWCABIAApA2A3A2AgASAAKQNoNwNoIAEgACkDcDcDcCABIAApA3g3A3gLggIAIAEgACkDADcDACABIAApAwg3AwggASAAKQMQNwMQIAEgACkDGDcDGCABIAApAyA3AyAgASAAKQMoNwMoIAEgACkDMDcDMCABIAApAzg3AzggASAAKQNANwNAIAEgACkDSDcDSCABIAApA1A3A1AgASAAKQNYNwNYIAEgACkDYDcDYCABIAApA2g3A2ggASAAKQNwNwNwIAEgACkDeDcDeCABIAApA4ABNwOAASABIAApA4gBNwOIASABIAApA5ABNwOQASABIAApA5gBNwOYASABIAApA6ABNwOgASABIAApA6gBNwOoASABIAApA7ABNwOwASABIAApA7gBNwO4AQsvACAAEJkBBEAgARCcAQUgAUGAAWoQhQEgAEHAAGogAUHAAGoQhgEgACABEIYBCwscAQF/IAAgARCQASAAQcAAaiABQcAAahCQAXEPC4sBAQF/IABBgAFqIQIgABCaAQRAIAEQmQEPCyABEJkBBEBBAA8LIAIQgwEEQCAAIAEQoAEPCyACQYjjABCJASABQYjjAEHI4wAQhwEgAkGI4wBBiOQAEIcBIAFBwABqQYjkAEHI5AAQhwEgAEHI4wAQkAEEQCAAQcAAakHI5AAQkAEEQEEBDwsLQQAPC9kBAgF/AX8gAEGAAWohAiABQYABaiEDIAAQmgEEQCABEJoBDwsgARCaAQRAQQAPCyACEIMBBEAgASAAEKEBDwsgAxCDAQRAIAAgARChAQ8L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ACAAQeAAaiABQeAAahASIAFBwABqQbCFBCABQcAAahCHASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpB8IUEIAFBgAFqEIcBIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakGwhgQgAUHAAWoQhwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQfCGBCABQYACahCHASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpBsIcEIAFBwAJqEIcBC2wAIABB8IcEIAEQhwEgAEHAAGpBsIgEIAFBwABqEIcBIABBgAFqQfCIBCABQYABahCHASAAQcABakGwiQQgAUHAAWoQhwEgAEGAAmpB8IkEIAFBgAJqEIcBIABBwAJqQbCKBCABQcACahCHAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUHwigQgARCHASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpBsIsEIAFBwABqEIcBIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakHwiwQgAUGAAWoQhwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQbCMBCABQcABahCHASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpB8IwEIAFBgAJqEIcBIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakGwjQQgAUHAAmoQhwELbAAgAEHwjQQgARCHASAAQcAAakGwjgQgAUHAAGoQhwEgAEGAAWpB8I4EIAFBgAFqEIcBIABBwAFqQbCPBCABQcABahCHASAAQYACakHwjwQgAUGAAmoQhwEgAEHAAmpBsJAEIAFBwAJqEIcBC4oCACAAIAEQACAAQSBqIAFBIGoQEiABQfCQBCABEIcBIABBwABqIAFBwABqEAAgAEHgAGogAUHgAGoQEiABQcAAakGwkQQgAUHAAGoQhwEgAEGAAWogAUGAAWoQACAAQaABaiABQaABahASIAFBgAFqQfCRBCABQYABahCHASAAQcABaiABQcABahAAIABB4AFqIAFB4AFqEBIgAUHAAWpBsJIEIAFBwAFqEIcBIABBgAJqIAFBgAJqEAAgAEGgAmogAUGgAmoQEiABQYACakHwkgQgAUGAAmoQhwEgAEHAAmogAUHAAmoQACAAQeACaiABQeACahASIAFBwAJqQbCTBCABQcACahCHAQtsACAAQfCTBCABEIcBIABBwABqQbCUBCABQcAAahCHASAAQYABakHwlAQgAUGAAWoQhwEgAEHAAWpBsJUEIAFBwAFqEIcBIABBgAJqQfCVBCABQYACahCHASAAQcACakGwlgQgAUHAAmoQhwELigIAIAAgARAAIABBIGogAUEgahASIAFB8JYEIAEQhwEgAEHAAGogAUHAAGoQACAAQeAAaiABQeAAahASIAFBwABqQbCXBCABQcAAahCHASAAQYABaiABQYABahAAIABBoAFqIAFBoAFqEBIgAUGAAWpB8JcEIAFBgAFqEIcBIABBwAFqIAFBwAFqEAAgAEHgAWogAUHgAWoQEiABQcABakGwmAQgAUHAAWoQhwEgAEGAAmogAUGAAmoQACAAQaACaiABQaACahASIAFBgAJqQfCYBCABQYACahCHASAAQcACaiABQcACahAAIABB4AJqIAFB4AJqEBIgAUHAAmpBsJkEIAFBwAJqEIcBC2wAIABB8JkEIAEQhwEgAEHAAGpBsJoEIAFBwABqEIcBIABBgAFqQfCaBCABQYABahCHASAAQcABakGwmwQgAUHAAWoQhwEgAEGAAmpB8JsEIAFBgAJqEIcBIABBwAJqQbCcBCABQcACahCHAQuKAgAgACABEAAgAEEgaiABQSBqEBIgAUHwnAQgARCHASAAQcAAaiABQcAAahAAIABB4ABqIAFB4ABqEBIgAUHAAGpBsJ0EIAFBwABqEIcBIABBgAFqIAFBgAFqEAAgAEGgAWogAUGgAWoQEiABQYABakHwnQQgAUGAAWoQhwEgAEHAAWogAUHAAWoQACAAQeABaiABQeABahASIAFBwAFqQbCeBCABQcABahCHASAAQYACaiABQYACahAAIABBoAJqIAFBoAJqEBIgAUGAAmpB8J4EIAFBgAJqEIcBIABBwAJqIAFBwAJqEAAgAEHgAmogAUHgAmoQEiABQcACakGwnwQgAUHAAmoQhwELEAAgAEHwnwRB4AIgARCWAgtIACAAQdCiBBDyASAAQcABakGQpAQQ9wEgAEHQpQQQkQJB0KIEQdClBEHQqAQQhwJB0KgE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";
- var pq = 520;
- var pr = 1864;
- var pG1gen = 31592;
- var pG1zero = 31688;
- var pG1b = 3240;
- var pG2gen = 31784;
- var pG2zero = 31976;
- var pG2b = 12616;
- var pOneT = 32168;
- var prePSize = 192;
- var preQSize = 19776;
- var n8q = 32;
- var n8r = 32;
- var q = "21888242871839275222246405745257275088696311157297823662689037894645226208583";
- var r = "21888242871839275222246405745257275088548364400416034343698204186575808495617";
+ /*
+ Copyright 2019 0KIMS association.
- var bn128_wasm = {
- code: code,
- pq: pq,
- pr: pr,
- pG1gen: pG1gen,
- pG1zero: pG1zero,
- pG1b: pG1b,
- pG2gen: pG2gen,
- pG2zero: pG2zero,
- pG2b: pG2b,
- pOneT: pOneT,
- prePSize: prePSize,
- preQSize: preQSize,
- n8q: n8q,
- n8r: n8r,
- q: q,
- r: r
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+
+ var bigInt2BytesLE = function bigInt2BytesLE(_a, len) {
+ const b = Array(len);
+ let v = BigInteger(_a);
+ for (let i=0; i.
*/
- // module.exports.buildF1 = require("./src/f1.js");
- // module.exports.buildBn128 = require("./src/bn128.js");
- // module.exports.buildMnt6753 = require("./src/mnt6753.js");
+ var build_int = function buildInt(module, n64, _prefix) {
- var bn128_wasm$1 = bn128_wasm;
- var bls12381_wasm$1 = bls12381_wasm;
+ const prefix = _prefix || "int";
+ if (module.modules[prefix]) return prefix; // already builded
+ module.modules[prefix] = {};
+
+ const n32 = n64*2;
+ const n8 = n64*8;
+
+ module.alloc(n8, utils$3.bigInt2BytesLE(1, n8));
+
+ function buildCopy() {
+ const f = module.addFunction(prefix+"_copy");
+ f.addParam("px", "i32");
+ f.addParam("pr", "i32");
+
+ const c = f.getCodeBuilder();
+
+ for (let i=0; i>1) )&&(i>1, k>>1)
+ )
+ )
+ );
+
+ f.addCode(
+ c.setLocal(c1,
+ c.i64_add(
+ c.getLocal(c1),
+ c.i64_shr_u(
+ c.getLocal(c0),
+ c.i64_const(32)
+ )
+ )
+ )
+ );
+ }
+
+ // Add the old carry
+
+ if (k>0) {
+ f.addCode(
+ c.setLocal(c0,
+ c.i64_add(
+ c.i64_and(
+ c.getLocal(c0),
+ c.i64_const(0xFFFFFFFF)
+ ),
+ c.i64_and(
+ c.getLocal(c0_old),
+ c.i64_const(0xFFFFFFFF)
+ ),
+ )
+ )
+ );
+
+ f.addCode(
+ c.setLocal(c1,
+ c.i64_add(
+ c.i64_add(
+ c.getLocal(c1),
+ c.i64_shr_u(
+ c.getLocal(c0),
+ c.i64_const(32)
+ )
+ ),
+ c.getLocal(c1_old)
+ )
+ )
+ );
+ }
+
+ f.addCode(
+ c.i64_store32(
+ c.getLocal("r"),
+ k*4,
+ c.getLocal(c0)
+ )
+ );
+
+ f.addCode(
+ c.setLocal(
+ c0_old,
+ c.getLocal(c1)
+ ),
+ c.setLocal(
+ c1_old,
+ c.i64_shr_u(
+ c.getLocal(c0_old),
+ c.i64_const(32)
+ )
+ )
+ );
+
+ }
+ f.addCode(
+ c.i64_store32(
+ c.getLocal("r"),
+ n32*4*2-4,
+ c.getLocal(c0_old)
+ )
+ );
+
+ }
+
+
+ function buildSquareOld() {
+ const f = module.addFunction(prefix+"_squareOld");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r")));
+ }
+
+ function _buildMul1() {
+ const f = module.addFunction(prefix+"__mul1");
+ f.addParam("px", "i32");
+ f.addParam("y", "i64");
+ f.addParam("pr", "i32");
+ f.addLocal("c", "i64");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(c.setLocal(
+ "c",
+ c.i64_mul(
+ c.i64_load32_u(c.getLocal("px"), 0, 0),
+ c.getLocal("y")
+ )
+ ));
+
+ f.addCode(c.i64_store32(
+ c.getLocal("pr"),
+ 0,
+ 0,
+ c.getLocal("c"),
+ ));
+
+ for (let i=1; i3)&&(Y[eY]==0) ey--;
+ f.addCode(c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_or(
+ c.i32_load8_u(
+ c.i32_add(Y , c.getLocal("eY")),
+ 0,
+ 0
+ ),
+ c.i32_eq(
+ c.getLocal("eY"),
+ c.i32_const(3)
+ )
+ )
+ ),
+ c.setLocal("eY", c.i32_sub(c.getLocal("eY"), c.i32_const(1))),
+ c.br(0)
+ )));
+
+ f.addCode(
+ c.setLocal(
+ "sy",
+ c.i64_add(
+ c.i64_load32_u(
+ c.i32_sub(
+ c.i32_add( Y, c.getLocal("eY")),
+ c.i32_const(3)
+ ),
+ 0,
+ 0
+ ),
+ c.i64_const(1)
+ )
+ )
+ );
+
+ // Force a divide by 0 if quotien is 0
+ f.addCode(
+ c.if(
+ c.i64_eq(
+ c.getLocal("sy"),
+ c.i64_const(1)
+ ),
+ c.drop(c.i64_div_u(c.i64_const(0), c.i64_const(0)))
+ )
+ );
+
+ f.addCode(c.block(c.loop(
+
+ // while (eX>7)&&(Y[eX]==0) ex--;
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_or(
+ c.i32_load8_u(
+ c.i32_add(R , c.getLocal("eX")),
+ 0,
+ 0
+ ),
+ c.i32_eq(
+ c.getLocal("eX"),
+ c.i32_const(7)
+ )
+ )
+ ),
+ c.setLocal("eX", c.i32_sub(c.getLocal("eX"), c.i32_const(1))),
+ c.br(0)
+ )),
+
+ c.setLocal(
+ "sx",
+ c.i64_load(
+ c.i32_sub(
+ c.i32_add( R, c.getLocal("eX")),
+ c.i32_const(7)
+ ),
+ 0,
+ 0
+ )
+ ),
+
+ c.setLocal(
+ "sx",
+ c.i64_div_u(
+ c.getLocal("sx"),
+ c.getLocal("sy")
+ )
+ ),
+ c.setLocal(
+ "ec",
+ c.i32_sub(
+ c.i32_sub(
+ c.getLocal("eX"),
+ c.getLocal("eY")
+ ),
+ c.i32_const(4)
+ )
+ ),
+
+ // While greater than 32 bits or ec is neg, shr and inc exp
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_and(
+ c.i64_eqz(
+ c.i64_and(
+ c.getLocal("sx"),
+ c.i64_const("0xFFFFFFFF00000000")
+ )
+ ),
+ c.i32_ge_s(
+ c.getLocal("ec"),
+ c.i32_const(0)
+ )
+ )
+ ),
+
+ c.setLocal(
+ "sx",
+ c.i64_shr_u(
+ c.getLocal("sx"),
+ c.i64_const(8)
+ )
+ ),
+
+ c.setLocal(
+ "ec",
+ c.i32_add(
+ c.getLocal("ec"),
+ c.i32_const(1)
+ )
+ ),
+ c.br(0)
+ )),
+
+ c.if(
+ c.i64_eqz(c.getLocal("sx")),
+ [
+ ...c.br_if(
+ 2,
+ c.i32_eqz(c.call(prefix + "_gte", R, Y))
+ ),
+ ...c.setLocal("sx", c.i64_const(1)),
+ ...c.setLocal("ec", c.i32_const(0))
+ ]
+ ),
+
+ c.call(prefix + "__mul1", Y, c.getLocal("sx"), R2),
+ c.drop(c.call(
+ prefix + "_sub",
+ R,
+ c.i32_sub(R2, c.getLocal("ec")),
+ R
+ )),
+ c.call(
+ prefix + "__add1",
+ c.i32_add(C, c.getLocal("ec")),
+ c.getLocal("sx")
+ ),
+ c.br(0)
+ )));
+ }
+
+ function buildInverseMod() {
+
+ const f = module.addFunction(prefix+"_inverseMod");
+ f.addParam("px", "i32");
+ f.addParam("pm", "i32");
+ f.addParam("pr", "i32");
+ f.addLocal("t", "i32");
+ f.addLocal("newt", "i32");
+ f.addLocal("r", "i32");
+ f.addLocal("qq", "i32");
+ f.addLocal("qr", "i32");
+ f.addLocal("newr", "i32");
+ f.addLocal("swp", "i32");
+ f.addLocal("x", "i32");
+ f.addLocal("signt", "i32");
+ f.addLocal("signnewt", "i32");
+ f.addLocal("signx", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const aux1 = c.i32_const(module.alloc(n8));
+ const aux2 = c.i32_const(module.alloc(n8));
+ const aux3 = c.i32_const(module.alloc(n8));
+ const aux4 = c.i32_const(module.alloc(n8));
+ const aux5 = c.i32_const(module.alloc(n8));
+ const aux6 = c.i32_const(module.alloc(n8));
+ const mulBuff = c.i32_const(module.alloc(n8*2));
+ const aux7 = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+ c.setLocal("t", aux1),
+ c.call(prefix + "_zero", aux1),
+ c.setLocal("signt", c.i32_const(0)),
+ );
+
+ f.addCode(
+ c.setLocal("r", aux2),
+ c.call(prefix + "_copy", c.getLocal("pm"), aux2)
+ );
+
+ f.addCode(
+ c.setLocal("newt", aux3),
+ c.call(prefix + "_one", aux3),
+ c.setLocal("signnewt", c.i32_const(0)),
+ );
+
+ f.addCode(
+ c.setLocal("newr", aux4),
+ c.call(prefix + "_copy", c.getLocal("px"), aux4)
+ );
+
+
+
+
+ f.addCode(c.setLocal("qq", aux5));
+ f.addCode(c.setLocal("qr", aux6));
+ f.addCode(c.setLocal("x", aux7));
+
+ f.addCode(c.block(c.loop(
+ c.br_if(
+ 1,
+ c.call(prefix + "_isZero", c.getLocal("newr") )
+ ),
+ c.call(prefix + "_div", c.getLocal("r"), c.getLocal("newr"), c.getLocal("qq"), c.getLocal("qr")),
+
+ c.call(prefix + "_mul", c.getLocal("qq"), c.getLocal("newt"), mulBuff),
+
+ c.if(
+ c.getLocal("signt"),
+ c.if(
+ c.getLocal("signnewt"),
+ c.if (
+ c.call(prefix + "_gte", mulBuff, c.getLocal("t")),
+ [
+ ...c.drop(c.call(prefix + "_sub", mulBuff, c.getLocal("t"), c.getLocal("x"))),
+ ...c.setLocal("signx", c.i32_const(0))
+ ],
+ [
+ ...c.drop(c.call(prefix + "_sub", c.getLocal("t"), mulBuff, c.getLocal("x"))),
+ ...c.setLocal("signx", c.i32_const(1))
+ ],
+ ),
+ [
+ ...c.drop(c.call(prefix + "_add", mulBuff, c.getLocal("t"), c.getLocal("x"))),
+ ...c.setLocal("signx", c.i32_const(1))
+ ]
+ ),
+ c.if(
+ c.getLocal("signnewt"),
+ [
+ ...c.drop(c.call(prefix + "_add", mulBuff, c.getLocal("t"), c.getLocal("x"))),
+ ...c.setLocal("signx", c.i32_const(0))
+ ],
+ c.if (
+ c.call(prefix + "_gte", c.getLocal("t"), mulBuff),
+ [
+ ...c.drop(c.call(prefix + "_sub", c.getLocal("t"), mulBuff, c.getLocal("x"))),
+ ...c.setLocal("signx", c.i32_const(0))
+ ],
+ [
+ ...c.drop(c.call(prefix + "_sub", mulBuff, c.getLocal("t"), c.getLocal("x"))),
+ ...c.setLocal("signx", c.i32_const(1))
+ ]
+ )
+ )
+ ),
+
+ c.setLocal("swp", c.getLocal("t")),
+ c.setLocal("t", c.getLocal("newt")),
+ c.setLocal("newt", c.getLocal("x")),
+ c.setLocal("x", c.getLocal("swp")),
+
+ c.setLocal("signt", c.getLocal("signnewt")),
+ c.setLocal("signnewt", c.getLocal("signx")),
+
+ c.setLocal("swp", c.getLocal("r")),
+ c.setLocal("r", c.getLocal("newr")),
+ c.setLocal("newr", c.getLocal("qr")),
+ c.setLocal("qr", c.getLocal("swp")),
+
+ c.br(0)
+ )));
+
+ f.addCode(c.if(
+ c.getLocal("signt"),
+ c.drop(c.call(prefix + "_sub", c.getLocal("pm"), c.getLocal("t"), c.getLocal("pr"))),
+ c.call(prefix + "_copy", c.getLocal("t"), c.getLocal("pr"))
+ ));
+ }
+
+
+ buildCopy();
+ buildZero();
+ buildIsZero();
+ buildOne();
+ buildEq();
+ buildGte();
+ buildAdd();
+ buildSub();
+ buildMul();
+ buildSquare();
+ buildSquareOld();
+ buildDiv();
+ buildInverseMod();
+ module.exportFunction(prefix+"_copy");
+ module.exportFunction(prefix+"_zero");
+ module.exportFunction(prefix+"_one");
+ module.exportFunction(prefix+"_isZero");
+ module.exportFunction(prefix+"_eq");
+ module.exportFunction(prefix+"_gte");
+ module.exportFunction(prefix+"_add");
+ module.exportFunction(prefix+"_sub");
+ module.exportFunction(prefix+"_mul");
+ module.exportFunction(prefix+"_square");
+ module.exportFunction(prefix+"_squareOld");
+ module.exportFunction(prefix+"_div");
+ module.exportFunction(prefix+"_inverseMod");
+
+ return prefix;
+ };
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+ var build_timesscalar = function buildTimesScalar(module, fnName, elementLen, opAB, opAA, opCopy, opInit) {
+
+ const f = module.addFunction(fnName);
+ f.addParam("base", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLength", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("b", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const aux = c.i32_const(module.alloc(elementLen));
+
+ f.addCode(
+ c.if(
+ c.i32_eqz(c.getLocal("scalarLength")),
+ [
+ ...c.call(opInit, c.getLocal("r")),
+ ...c.ret([])
+ ]
+ )
+ );
+ f.addCode(c.call(opCopy, c.getLocal("base"), aux));
+ f.addCode(c.call(opInit, c.getLocal("r")));
+ f.addCode(c.setLocal("i", c.getLocal("scalarLength")));
+ f.addCode(c.block(c.loop(
+ c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))),
+
+ c.setLocal(
+ "b",
+ c.i32_load8_u(
+ c.i32_add(
+ c.getLocal("scalar"),
+ c.getLocal("i")
+ )
+ )
+ ),
+ ...innerLoop(),
+ c.br_if(1, c.i32_eqz ( c.getLocal("i") )),
+ c.br(0)
+ )));
+
+
+ function innerLoop() {
+ const code = [];
+ for (let i=0; i<8; i++) {
+ code.push(
+ ...c.call(opAA, c.getLocal("r"), c.getLocal("r")),
+ ...c.if(
+ c.i32_ge_u( c.getLocal("b"), c.i32_const(0x80 >> i)),
+ [
+ ...c.setLocal(
+ "b",
+ c.i32_sub(
+ c.getLocal("b"),
+ c.i32_const(0x80 >> i)
+ )
+ ),
+ ...c.call(opAB, c.getLocal("r"),aux, c.getLocal("r"))
+ ]
+ )
+ );
+ }
+ return code;
+ }
+
+ };
+
+ var build_batchinverse = buildBatchInverse;
+
+ function buildBatchInverse(module, prefix) {
+
+
+ const n8 = module.modules[prefix].n64*8;
+
+ const f = module.addFunction(prefix+"_batchInverse");
+ f.addParam("pIn", "i32");
+ f.addParam("inStep", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pOut", "i32");
+ f.addParam("outStep", "i32");
+ f.addLocal("itAux", "i32");
+ f.addLocal("itIn", "i32");
+ f.addLocal("itOut","i32");
+ f.addLocal("i","i32");
+
+ const c = f.getCodeBuilder();
+
+ const AUX = c.i32_const(module.alloc(n8));
+
+
+ // Alloc Working space for accumulated umltiplications
+ f.addCode(
+ c.setLocal("itAux", c.i32_load( c.i32_const(0) )),
+ c.i32_store(
+ c.i32_const(0),
+ c.i32_add(
+ c.getLocal("itAux"),
+ c.i32_mul(
+ c.i32_add(
+ c.getLocal("n"),
+ c.i32_const(1)
+ ),
+ c.i32_const(n8)
+ )
+ )
+ )
+ );
+
+ f.addCode(
+
+ // aux[0] = a;
+ c.call(prefix+"_one", c.getLocal("itAux")),
+ // for (i=0;i.
+ */
+
+ var build_f1m = function buildF1m(module, _q, _prefix, _intPrefix) {
+ const q = BigInteger(_q);
+ const n64 = Math.floor((q.minus(1).bitLength() - 1)/64) +1;
+ const n32 = n64*2;
+ const n8 = n64*8;
+
+ const prefix = _prefix || "f1m";
+ if (module.modules[prefix]) return prefix; // already builded
+
+ const intPrefix = build_int(module, n64, _intPrefix);
+ const pq = module.alloc(n8, utils$3.bigInt2BytesLE(q, n8));
+
+ module.alloc(utils$3.bigInt2BytesLE(BigInteger.one.shiftLeft(n64*64).mod(q), n8));
+ const pR2 = module.alloc(utils$3.bigInt2BytesLE(BigInteger.one.shiftLeft(n64*64).square().mod(q), n8));
+ const pOne = module.alloc(utils$3.bigInt2BytesLE(BigInteger.one.shiftLeft(n64*64).mod(q), n8));
+ const pZero = module.alloc(utils$3.bigInt2BytesLE(BigInteger.zero, n8));
+ const _minusOne = q.minus(BigInteger.one);
+ const _e = _minusOne.shiftRight(1); // e = (p-1)/2
+ const pe = module.alloc(n8, utils$3.bigInt2BytesLE(_e, n8));
+
+ const _ePlusOne = _e.add(BigInteger.one); // e = (p-1)/2
+ const pePlusOne = module.alloc(n8, utils$3.bigInt2BytesLE(_ePlusOne, n8));
+
+ module.modules[prefix] = {
+ pq: pq,
+ pR2: pR2,
+ n64: n64,
+ q: q,
+ pOne: pOne,
+ pZero: pZero,
+ pePlusOne: pePlusOne
+ };
+
+ function buildOne() {
+ const f = module.addFunction(prefix+"_one");
+ f.addParam("pr", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(c.call(intPrefix + "_copy", c.i32_const(pOne), c.getLocal("pr")));
+ }
+
+ function buildAdd() {
+ const f = module.addFunction(prefix+"_add");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.if(
+ c.call(intPrefix+"_add", c.getLocal("x"), c.getLocal("y"), c.getLocal("r")),
+ c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))),
+ c.if(
+ c.call(intPrefix+"_gte", c.getLocal("r"), c.i32_const(pq) ),
+ c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))),
+ )
+ )
+ );
+ }
+
+ function buildSub() {
+ const f = module.addFunction(prefix+"_sub");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.if(
+ c.call(intPrefix+"_sub", c.getLocal("x"), c.getLocal("y"), c.getLocal("r")),
+ c.drop(c.call(intPrefix+"_add", c.getLocal("r"), c.i32_const(pq), c.getLocal("r")))
+ )
+ );
+ }
+
+ function buildNeg() {
+ const f = module.addFunction(prefix+"_neg");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.call(prefix + "_sub", c.i32_const(pZero), c.getLocal("x"), c.getLocal("r"))
+ );
+ }
+
+
+ function buildIsNegative() {
+ const f = module.addFunction(prefix+"_isNegative");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const AUX = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+ c.call(prefix + "_fromMontgomery", c.getLocal("x"), AUX),
+ c.call(intPrefix + "_gte", AUX, c.i32_const(pePlusOne) )
+ );
+ }
+
+
+ /*
+ function buildIsNegative() {
+ const f = module.addFunction(prefix+"_isNegative");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const AUX = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+ c.call(prefix + "_fromMontgomery", c.getLocal("x"), AUX),
+ c.i32_and(
+ c.i32_load(AUX),
+ c.i32_const(1)
+ )
+ );
+ }
+ */
+
+ function buildSign() {
+ const f = module.addFunction(prefix+"_sign");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const AUX = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+ c.if (
+ c.call(intPrefix + "_isZero", c.getLocal("x")),
+ c.ret(c.i32_const(0))
+ ),
+ c.call(prefix + "_fromMontgomery", c.getLocal("x"), AUX),
+ c.if(
+ c.call(intPrefix + "_gte", AUX, c.i32_const(pePlusOne)),
+ c.ret(c.i32_const(-1))
+ ),
+ c.ret(c.i32_const(1))
+ );
+ }
+
+
+ function buildMReduct() {
+ const carries = module.alloc(n32*n32*8);
+
+ const f = module.addFunction(prefix+"_mReduct");
+ f.addParam("t", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("np32", "i64");
+ f.addLocal("c", "i64");
+ f.addLocal("m", "i64");
+
+ const c = f.getCodeBuilder();
+
+ const np32 = BigInteger("100000000",16).minus( q.modInv(BigInteger("100000000",16))).toJSNumber();
+
+ f.addCode(c.setLocal("np32", c.i64_const(np32)));
+
+ for (let i=0; i=n32) {
+ f.addCode(
+ c.i64_store32(
+ c.getLocal("r"),
+ (k-n32)*4,
+ c.getLocal(c0)
+ )
+ );
+ }
+ [c0, c1] = [c1, c0];
+ f.addCode(
+ c.setLocal(c1,
+ c.i64_shr_u(
+ c.getLocal(c0),
+ c.i64_const(32)
+ )
+ )
+ );
+ }
+ f.addCode(
+ c.i64_store32(
+ c.getLocal("r"),
+ n32*4-4,
+ c.getLocal(c0)
+ )
+ );
+
+ f.addCode(
+ c.if(
+ c.i32_wrap_i64(c.getLocal(c1)),
+ c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))),
+ c.if(
+ c.call(intPrefix+"_gte", c.getLocal("r"), c.i32_const(pq) ),
+ c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))),
+ )
+ )
+ );
+ }
+
+
+ function buildSquare() {
+
+ const f = module.addFunction(prefix+"_square");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("c0", "i64");
+ f.addLocal("c1", "i64");
+ f.addLocal("c0_old", "i64");
+ f.addLocal("c1_old", "i64");
+ f.addLocal("np32", "i64");
+
+
+ for (let i=0;i>1) )&&(i>1, k>>1)
+ )
+ )
+ );
+
+ f.addCode(
+ c.setLocal(c1,
+ c.i64_add(
+ c.getLocal(c1),
+ c.i64_shr_u(
+ c.getLocal(c0),
+ c.i64_const(32)
+ )
+ )
+ )
+ );
+ }
+
+ // Add the old carry
+
+ if (k>0) {
+ f.addCode(
+ c.setLocal(c0,
+ c.i64_add(
+ c.i64_and(
+ c.getLocal(c0),
+ c.i64_const(0xFFFFFFFF)
+ ),
+ c.i64_and(
+ c.getLocal(c0_old),
+ c.i64_const(0xFFFFFFFF)
+ ),
+ )
+ )
+ );
+
+ f.addCode(
+ c.setLocal(c1,
+ c.i64_add(
+ c.i64_add(
+ c.getLocal(c1),
+ c.i64_shr_u(
+ c.getLocal(c0),
+ c.i64_const(32)
+ )
+ ),
+ c.getLocal(c1_old)
+ )
+ )
+ );
+ }
+
+
+ for (let i=Math.max(1, k-n32+1); (i<=k)&&(i=n32) {
+ f.addCode(
+ c.i64_store32(
+ c.getLocal("r"),
+ (k-n32)*4,
+ c.getLocal(c0)
+ )
+ );
+ }
+ f.addCode(
+ c.setLocal(
+ c0_old,
+ c.getLocal(c1)
+ ),
+ c.setLocal(
+ c1_old,
+ c.i64_shr_u(
+ c.getLocal(c0_old),
+ c.i64_const(32)
+ )
+ )
+ );
+ }
+ f.addCode(
+ c.i64_store32(
+ c.getLocal("r"),
+ n32*4-4,
+ c.getLocal(c0_old)
+ )
+ );
+
+ f.addCode(
+ c.if(
+ c.i32_wrap_i64(c.getLocal(c1_old)),
+ c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))),
+ c.if(
+ c.call(intPrefix+"_gte", c.getLocal("r"), c.i32_const(pq) ),
+ c.drop(c.call(intPrefix+"_sub", c.getLocal("r"), c.i32_const(pq), c.getLocal("r"))),
+ )
+ )
+ );
+ }
+
+
+ function buildSquareOld() {
+ const f = module.addFunction(prefix+"_squareOld");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r")));
+ }
+
+ function buildToMontgomery() {
+ const f = module.addFunction(prefix+"_toMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefix+"_mul", c.getLocal("x"), c.i32_const(pR2), c.getLocal("r")));
+ }
+
+ function buildFromMontgomery() {
+
+ const pAux2 = module.alloc(n8*2);
+
+ const f = module.addFunction(prefix+"_fromMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(intPrefix + "_copy", c.getLocal("x"), c.i32_const(pAux2) ));
+ f.addCode(c.call(intPrefix + "_zero", c.i32_const(pAux2 + n8) ));
+ f.addCode(c.call(prefix+"_mReduct", c.i32_const(pAux2), c.getLocal("r")));
+ }
+
+ function buildInverse() {
+
+ const f = module.addFunction(prefix+ "_inverse");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(prefix + "_fromMontgomery", c.getLocal("x"), c.getLocal("r")));
+ f.addCode(c.call(intPrefix + "_inverseMod", c.getLocal("r"), c.i32_const(pq), c.getLocal("r")));
+ f.addCode(c.call(prefix + "_toMontgomery", c.getLocal("r"), c.getLocal("r")));
+ }
+
+ // Calculate various valuse needed for sqrt
+
+
+ let _nqr = BigInteger(2);
+ if (q.isPrime()) {
+ while (!_nqr.modPow(_e, q).equals(_minusOne)) _nqr = _nqr.add(BigInteger.one);
+ }
+
+ module.alloc(utils$3.bigInt2BytesLE(_nqr.shiftLeft(n64*64).mod(q), n8));
+
+ let s2 = 0;
+ let _t = _minusOne;
+
+ while ((!_t.isOdd())&&(!_t.isZero())) {
+ s2++;
+ _t = _t.shiftRight(1);
+ }
+ const pt = module.alloc(n8, utils$3.bigInt2BytesLE(_t, n8));
+
+ const _nqrToT = _nqr.modPow(_t, q);
+ const pNqrToT = module.alloc(utils$3.bigInt2BytesLE(_nqrToT.shiftLeft(n64*64).mod(q), n8));
+
+ const _tPlusOneOver2 = _t.add(1).shiftRight(1);
+ const ptPlusOneOver2 = module.alloc(n8, utils$3.bigInt2BytesLE(_tPlusOneOver2, n8));
+
+ function buildSqrt() {
+
+ const f = module.addFunction(prefix+ "_sqrt");
+ f.addParam("n", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("m", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const ONE = c.i32_const(pOne);
+ const C = c.i32_const(module.alloc(n8));
+ const T = c.i32_const(module.alloc(n8));
+ const R = c.i32_const(module.alloc(n8));
+ const SQ = c.i32_const(module.alloc(n8));
+ const B = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+
+ // If (n==0) return 0
+ c.if(
+ c.call(prefix + "_isZero", c.getLocal("n")),
+ c.ret(
+ c.call(prefix + "_zero", c.getLocal("r"))
+ )
+ ),
+
+ c.setLocal("m", c.i32_const(s2)),
+ c.call(prefix + "_copy", c.i32_const(pNqrToT), C),
+ c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(pt), c.i32_const(n8), T),
+ c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(ptPlusOneOver2), c.i32_const(n8), R),
+
+ c.block(c.loop(
+ c.br_if(1, c.call(prefix + "_eq", T, ONE)),
+
+ c.call(prefix + "_square", T, SQ),
+ c.setLocal("i", c.i32_const(1)),
+ c.block(c.loop(
+ c.br_if(1, c.call(prefix + "_eq", SQ, ONE)),
+ c.call(prefix + "_square", SQ, SQ),
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ )),
+
+ c.call(prefix + "_copy", C, B),
+ c.setLocal("j", c.i32_sub(c.i32_sub( c.getLocal("m"), c.getLocal("i")), c.i32_const(1)) ),
+ c.block(c.loop(
+ c.br_if(1, c.i32_eqz(c.getLocal("j"))),
+ c.call(prefix + "_square", B, B),
+ c.setLocal("j", c.i32_sub(c.getLocal("j"), c.i32_const(1))),
+ c.br(0)
+ )),
+
+ c.setLocal("m", c.getLocal("i")),
+ c.call(prefix + "_square", B, C),
+ c.call(prefix + "_mul", T, C, T),
+ c.call(prefix + "_mul", R, B, R),
+
+ c.br(0)
+ )),
+
+ c.if(
+ c.call(prefix + "_isNegative", R),
+ c.call(prefix + "_neg", R, c.getLocal("r")),
+ c.call(prefix + "_copy", R, c.getLocal("r")),
+ )
+ );
+ }
+
+ function buildIsSquare() {
+ const f = module.addFunction(prefix+"_isSquare");
+ f.addParam("n", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const ONE = c.i32_const(pOne);
+ const AUX = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+ c.if(
+ c.call(prefix + "_isZero", c.getLocal("n")),
+ c.ret(c.i32_const(1))
+ ),
+ c.call(prefix + "_exp", c.getLocal("n"), c.i32_const(pe), c.i32_const(n8), AUX),
+ c.call(prefix + "_eq", AUX, ONE)
+ );
+ }
+
+
+ function buildLoad() {
+ const f = module.addFunction(prefix+"_load");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLen", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("p", "i32");
+ f.addLocal("l", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ const c = f.getCodeBuilder();
+
+ const R = c.i32_const(module.alloc(n8));
+ const pAux = module.alloc(n8);
+ const AUX = c.i32_const(pAux);
+
+ f.addCode(
+ c.call(intPrefix + "_zero", c.getLocal("r")),
+ c.setLocal("i", c.i32_const(n8)),
+ c.setLocal("p", c.getLocal("scalar")),
+ c.block(c.loop(
+ c.br_if(1, c.i32_gt_u(c.getLocal("i"), c.getLocal("scalarLen"))),
+
+ c.if(
+ c.i32_eq(c.getLocal("i"), c.i32_const(n8)),
+ c.call(prefix + "_one", R),
+ c.call(prefix + "_mul", R, c.i32_const(pR2), R)
+ ),
+ c.call(prefix + "_mul", c.getLocal("p"), R, AUX),
+ c.call(prefix + "_add", c.getLocal("r"), AUX, c.getLocal("r")),
+
+ c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(n8))),
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(n8))),
+ c.br(0)
+ )),
+
+ c.setLocal("l", c.i32_rem_u( c.getLocal("scalarLen"), c.i32_const(n8))),
+ c.if(c.i32_eqz(c.getLocal("l")), c.ret([])),
+ c.call(intPrefix + "_zero", AUX),
+ c.setLocal("j", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(1, c.i32_eq(c.getLocal("j"), c.getLocal("l"))),
+
+ c.i32_store8(
+ c.getLocal("j"),
+ pAux,
+ c.i32_load8_u(c.getLocal("p")),
+ ),
+ c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(1))),
+ c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))),
+ c.br(0)
+ )),
+
+ c.if(
+ c.i32_eq(c.getLocal("i"), c.i32_const(n8)),
+ c.call(prefix + "_one", R),
+ c.call(prefix + "_mul", R, c.i32_const(pR2), R)
+ ),
+ c.call(prefix + "_mul", AUX, R, AUX),
+ c.call(prefix + "_add", c.getLocal("r"), AUX, c.getLocal("r")),
+ );
+ }
+
+ function buildTimesScalar() {
+ const f = module.addFunction(prefix+"_timesScalar");
+ f.addParam("x", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLen", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const AUX = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+ c.call(prefix + "_load", c.getLocal("scalar"), c.getLocal("scalarLen"), AUX),
+ c.call(prefix + "_toMontgomery", AUX, AUX),
+ c.call(prefix + "_mul", c.getLocal("x"), AUX, c.getLocal("r")),
+ );
+ }
+
+ function buildIsOne() {
+ const f = module.addFunction(prefix+"_isOne");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+ f.addCode(
+ c.ret(c.call(intPrefix + "_eq", c.getLocal("x"), c.i32_const(pOne)))
+ );
+ }
+
+
+ module.exportFunction(intPrefix + "_copy", prefix+"_copy");
+ module.exportFunction(intPrefix + "_zero", prefix+"_zero");
+ module.exportFunction(intPrefix + "_isZero", prefix+"_isZero");
+ module.exportFunction(intPrefix + "_eq", prefix+"_eq");
+
+ buildIsOne();
+ buildAdd();
+ buildSub();
+ buildNeg();
+ buildMReduct();
+ buildMul();
+ buildSquare();
+ buildSquareOld();
+ buildToMontgomery();
+ buildFromMontgomery();
+ buildIsNegative();
+ buildSign();
+ buildInverse();
+ buildOne();
+ buildLoad();
+ buildTimesScalar();
+ build_batchinverse(module, prefix);
+ build_batchconvertion(module, prefix + "_batchToMontgomery", prefix + "_toMontgomery", n8, n8);
+ build_batchconvertion(module, prefix + "_batchFromMontgomery", prefix + "_fromMontgomery", n8, n8);
+ build_batchconvertion(module, prefix + "_batchNeg", prefix + "_neg", n8, n8);
+ build_batchop(module, prefix + "_batchAdd", prefix + "_add", n8, n8);
+ build_batchop(module, prefix + "_batchSub", prefix + "_sub", n8, n8);
+ build_batchop(module, prefix + "_batchMul", prefix + "_mul", n8, n8);
+
+ module.exportFunction(prefix + "_add");
+ module.exportFunction(prefix + "_sub");
+ module.exportFunction(prefix + "_neg");
+ module.exportFunction(prefix + "_isNegative");
+ module.exportFunction(prefix + "_isOne");
+ module.exportFunction(prefix + "_sign");
+ module.exportFunction(prefix + "_mReduct");
+ module.exportFunction(prefix + "_mul");
+ module.exportFunction(prefix + "_square");
+ module.exportFunction(prefix + "_squareOld");
+ module.exportFunction(prefix + "_fromMontgomery");
+ module.exportFunction(prefix + "_toMontgomery");
+ module.exportFunction(prefix + "_inverse");
+ module.exportFunction(prefix + "_one");
+ module.exportFunction(prefix + "_load");
+ module.exportFunction(prefix + "_timesScalar");
+ build_timesscalar(
+ module,
+ prefix + "_exp",
+ n8,
+ prefix + "_mul",
+ prefix + "_square",
+ intPrefix + "_copy",
+ prefix + "_one",
+ );
+ module.exportFunction(prefix + "_exp");
+ module.exportFunction(prefix + "_batchInverse");
+ if (q.isPrime()) {
+ buildSqrt();
+ buildIsSquare();
+ module.exportFunction(prefix + "_sqrt");
+ module.exportFunction(prefix + "_isSquare");
+ }
+ module.exportFunction(prefix + "_batchToMontgomery");
+ module.exportFunction(prefix + "_batchFromMontgomery");
+ // console.log(module.functionIdxByName);
+
+ return prefix;
+ };
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+
+ var build_f1 = function buildF1(module, _q, _prefix, _f1mPrefix, _intPrefix) {
+
+ const q = BigInteger(_q);
+ const n64 = Math.floor((q.minus(1).bitLength() - 1)/64) +1;
+ const n8 = n64*8;
+
+ const prefix = _prefix || "f1";
+ if (module.modules[prefix]) return prefix; // already builded
+ module.modules[prefix] = {
+ n64: n64
+ };
+
+ const intPrefix = _intPrefix || "int";
+ const f1mPrefix = build_f1m(module, q, _f1mPrefix, intPrefix);
+
+
+ const pR2 = module.modules[f1mPrefix].pR2;
+ const pq = module.modules[f1mPrefix].pq;
+ const pePlusOne = module.modules[f1mPrefix].pePlusOne;
+
+ function buildMul() {
+ const pAux1 = module.alloc(n8);
+
+ const f = module.addFunction(prefix+ "_mul");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(f1mPrefix + "_mul", c.getLocal("x"), c.getLocal("y"), c.i32_const(pAux1)));
+ f.addCode(c.call(f1mPrefix + "_mul", c.i32_const(pAux1), c.i32_const(pR2), c.getLocal("r")));
+ }
+
+ function buildSquare() {
+ const f = module.addFunction(prefix+"_square");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(c.call(prefix + "_mul", c.getLocal("x"), c.getLocal("x"), c.getLocal("r")));
+ }
+
+
+ function buildInverse() {
+
+ const f = module.addFunction(prefix+ "_inverse");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+ f.addCode(c.call(intPrefix + "_inverseMod", c.getLocal("x"), c.i32_const(pq), c.getLocal("r")));
+ }
+
+ function buildIsNegative() {
+ const f = module.addFunction(prefix+"_isNegative");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.call(intPrefix + "_gte", c.getLocal("x"), c.i32_const(pePlusOne) )
+ );
+ }
+
+
+ buildMul();
+ buildSquare();
+ buildInverse();
+ buildIsNegative();
+ module.exportFunction(f1mPrefix + "_add", prefix + "_add");
+ module.exportFunction(f1mPrefix + "_sub", prefix + "_sub");
+ module.exportFunction(f1mPrefix + "_neg", prefix + "_neg");
+ module.exportFunction(prefix + "_mul");
+ module.exportFunction(prefix + "_square");
+ module.exportFunction(prefix + "_inverse");
+ module.exportFunction(prefix + "_isNegative");
+ module.exportFunction(f1mPrefix + "_copy", prefix+"_copy");
+ module.exportFunction(f1mPrefix + "_zero", prefix+"_zero");
+ module.exportFunction(f1mPrefix + "_one", prefix+"_one");
+ module.exportFunction(f1mPrefix + "_isZero", prefix+"_isZero");
+ module.exportFunction(f1mPrefix + "_eq", prefix+"_eq");
+
+ return prefix;
+ };
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+
+ var build_f2m = function buildF2m(module, mulNonResidueFn, prefix, f1mPrefix) {
+
+ if (module.modules[prefix]) return prefix; // already builded
+
+ const f1n8 = module.modules[f1mPrefix].n64*8;
+ const q = module.modules[f1mPrefix].q;
+
+ module.modules[prefix] = {
+ n64: module.modules[f1mPrefix].n64*2
+ };
+
+ function buildAdd() {
+ const f = module.addFunction(prefix+"_add");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_add", x0, y0, r0),
+ c.call(f1mPrefix+"_add", x1, y1, r1),
+ );
+ }
+
+ function buildTimesScalar() {
+ const f = module.addFunction(prefix+"_timesScalar");
+ f.addParam("x", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLen", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_timesScalar", x0, c.getLocal("scalar"), c.getLocal("scalarLen"), r0),
+ c.call(f1mPrefix+"_timesScalar", x1, c.getLocal("scalar"), c.getLocal("scalarLen"), r1),
+ );
+ }
+
+ function buildSub() {
+ const f = module.addFunction(prefix+"_sub");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_sub", x0, y0, r0),
+ c.call(f1mPrefix+"_sub", x1, y1, r1),
+ );
+ }
+
+ function buildNeg() {
+ const f = module.addFunction(prefix+"_neg");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_neg", x0, r0),
+ c.call(f1mPrefix+"_neg", x1, r1),
+ );
+ }
+
+ function buildConjugate() {
+ const f = module.addFunction(prefix+"_conjugate");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_copy", x0, r0),
+ c.call(f1mPrefix+"_neg", x1, r1),
+ );
+ }
+
+
+ function buildIsNegative() {
+ const f = module.addFunction(prefix+"_isNegative");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.if(
+ c.call(f1mPrefix+"_isZero", x1),
+ c.ret(c.call(f1mPrefix+"_isNegative", x0))
+ ),
+ c.ret(c.call(f1mPrefix+"_isNegative", x1))
+ );
+ }
+
+ function buildMul() {
+ const f = module.addFunction(prefix+"_mul");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ const A = c.i32_const(module.alloc(f1n8));
+ const B = c.i32_const(module.alloc(f1n8));
+ const C = c.i32_const(module.alloc(f1n8));
+ const D = c.i32_const(module.alloc(f1n8));
+
+
+ f.addCode(
+ c.call(f1mPrefix + "_mul", x0, y0, A), // A = x0*y0
+ c.call(f1mPrefix + "_mul", x1, y1, B), // B = x1*y1
+
+ c.call(f1mPrefix + "_add", x0, x1, C), // C = x0 + x1
+ c.call(f1mPrefix + "_add", y0, y1, D), // D = y0 + y1
+ c.call(f1mPrefix + "_mul", C, D, C), // C = (x0 + x1)*(y0 + y1) = x0*y0+x0*y1+x1*y0+x1*y1
+
+ // c.call(f1mPrefix + "_mul", B, c.i32_const(pNonResidue), r0), // r0 = nr*(x1*y1)
+ c.call(mulNonResidueFn, B, r0), // r0 = nr*(x1*y1)
+ c.call(f1mPrefix + "_add", A, r0, r0), // r0 = x0*y0 + nr*(x1*y1)
+ c.call(f1mPrefix + "_add", A, B, r1), // r1 = x0*y0+x1*y1
+ c.call(f1mPrefix + "_sub", C, r1, r1) // r1 = x0*y0+x0*y1+x1*y0+x1*y1 - x0*y0+x1*y1 = x0*y1+x1*y0
+ );
+
+ }
+
+ function buildMul1() {
+ const f = module.addFunction(prefix+"_mul1");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y = c.getLocal("y");
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+
+ f.addCode(
+ c.call(f1mPrefix + "_mul", x0, y, r0), // A = x0*y
+ c.call(f1mPrefix + "_mul", x1, y, r1), // B = x1*y
+ );
+ }
+
+ function buildSquare() {
+ const f = module.addFunction(prefix+"_square");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ const AB = c.i32_const(module.alloc(f1n8));
+ const APB = c.i32_const(module.alloc(f1n8));
+ const APNB = c.i32_const(module.alloc(f1n8));
+ const ABPNAB = c.i32_const(module.alloc(f1n8));
+
+
+ f.addCode(
+ // AB = x0*y1
+ c.call(f1mPrefix + "_mul", x0, x1, AB),
+
+ // APB = x0+y1
+ c.call(f1mPrefix + "_add", x0, x1, APB),
+
+ // APBN0 = x0 + nr*x1
+ c.call(mulNonResidueFn, x1, APNB),
+ c.call(f1mPrefix + "_add", x0, APNB, APNB),
+
+ // ABPNAB = ab + nr*ab
+ c.call(mulNonResidueFn, AB, ABPNAB),
+ c.call(f1mPrefix + "_add", ABPNAB, AB, ABPNAB),
+
+ // r0 = APB * APNB - ABPNAB
+ c.call(f1mPrefix + "_mul", APB, APNB, r0),
+ c.call(f1mPrefix + "_sub", r0, ABPNAB, r0),
+
+ // r1 = AB + AB
+ c.call(f1mPrefix + "_add", AB, AB, r1),
+ );
+
+ }
+
+
+ function buildToMontgomery() {
+ const f = module.addFunction(prefix+"_toMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_toMontgomery", x0, r0),
+ c.call(f1mPrefix+"_toMontgomery", x1, r1)
+ );
+ }
+
+ function buildFromMontgomery() {
+ const f = module.addFunction(prefix+"_fromMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_fromMontgomery", x0, r0),
+ c.call(f1mPrefix+"_fromMontgomery", x1, r1)
+ );
+ }
+
+ function buildCopy() {
+ const f = module.addFunction(prefix+"_copy");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_copy", x0, r0),
+ c.call(f1mPrefix+"_copy", x1, r1)
+ );
+ }
+
+ function buildZero() {
+ const f = module.addFunction(prefix+"_zero");
+ f.addParam("x", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_zero", x0),
+ c.call(f1mPrefix+"_zero", x1)
+ );
+ }
+
+ function buildOne() {
+ const f = module.addFunction(prefix+"_one");
+ f.addParam("x", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_one", x0),
+ c.call(f1mPrefix+"_zero", x1)
+ );
+ }
+
+ function buildEq() {
+ const f = module.addFunction(prefix+"_eq");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.i32_and(
+ c.call(f1mPrefix+"_eq", x0, y0),
+ c.call(f1mPrefix+"_eq", x1, y1)
+ )
+ );
+ }
+
+ function buildIsZero() {
+ const f = module.addFunction(prefix+"_isZero");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.i32_and(
+ c.call(f1mPrefix+"_isZero", x0),
+ c.call(f1mPrefix+"_isZero", x1)
+ )
+ );
+ }
+
+ function buildInverse() {
+ const f = module.addFunction(prefix+"_inverse");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+
+ const t0 = c.i32_const(module.alloc(f1n8));
+ const t1 = c.i32_const(module.alloc(f1n8));
+ const t2 = c.i32_const(module.alloc(f1n8));
+ const t3 = c.i32_const(module.alloc(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_square", x0, t0),
+ c.call(f1mPrefix+"_square", x1, t1),
+ // c.call(f1mPrefix+"_mul", t1, c.i32_const(pNonResidue), t2),
+ c.call(mulNonResidueFn, t1, t2),
+
+ c.call(f1mPrefix+"_sub", t0, t2, t2),
+ c.call(f1mPrefix+"_inverse", t2, t3),
+
+ c.call(f1mPrefix+"_mul", x0, t3, r0),
+ c.call(f1mPrefix+"_mul", x1, t3, r1),
+ c.call(f1mPrefix+"_neg", r1, r1),
+ );
+ }
+
+
+ function buildSign() {
+ const f = module.addFunction(prefix+"_sign");
+ f.addParam("x", "i32");
+ f.addLocal("s", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.setLocal("s" , c.call( f1mPrefix + "_sign", x1)),
+ c.if(
+ c.getLocal("s"),
+ c.ret(c.getLocal("s"))
+ ),
+ c.ret(c.call( f1mPrefix + "_sign", x0))
+ );
+ }
+
+ function buildIsOne() {
+ const f = module.addFunction(prefix+"_isOne");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+
+ f.addCode(
+ c.ret(c.i32_and(
+ c.call(f1mPrefix + "_isOne", x0),
+ c.call(f1mPrefix + "_isZero", x1),
+ ))
+ );
+ }
+
+
+ // Check here: https://eprint.iacr.org/2012/685.pdf
+ // Alg 9adj
+ function buildSqrt() {
+
+ const f = module.addFunction(prefix+"_sqrt");
+ f.addParam("a", "i32");
+ f.addParam("pr", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const e34 = c.i32_const(module.alloc(utils$3.bigInt2BytesLE(BigInteger(q).minus(BigInteger(3)).divide(4), f1n8 )));
+ const e12 = c.i32_const(module.alloc(utils$3.bigInt2BytesLE(BigInteger(q).minus(BigInteger(1)).divide(2), f1n8 )));
+
+ const a = c.getLocal("a");
+ const a1 = c.i32_const(module.alloc(f1n8*2));
+ const alpha = c.i32_const(module.alloc(f1n8*2));
+ const a0 = c.i32_const(module.alloc(f1n8*2));
+ const pn1 = module.alloc(f1n8*2);
+ const n1 = c.i32_const(pn1);
+ const n1a = c.i32_const(pn1);
+ const n1b = c.i32_const(pn1+f1n8);
+ const x0 = c.i32_const(module.alloc(f1n8*2));
+ const b = c.i32_const(module.alloc(f1n8*2));
+
+ f.addCode(
+
+ c.call(prefix + "_one", n1),
+ c.call(prefix + "_neg", n1, n1),
+
+ // const a1 = F.pow(a, F.sqrt_e34);
+ c.call(prefix + "_exp", a, e34, c.i32_const(f1n8), a1),
+
+ // const a1 = F.pow(a, F.sqrt_e34);
+ c.call(prefix + "_square", a1, alpha),
+ c.call(prefix + "_mul", a, alpha, alpha),
+
+ // const a0 = F.mul(F.frobenius(1, alfa), alfa);
+ c.call(prefix + "_conjugate", alpha, a0),
+ c.call(prefix + "_mul", a0, alpha, a0),
+
+ // if (F.eq(a0, F.negone)) return null;
+ c.if(c.call(prefix + "_eq",a0,n1), c.unreachable() ),
+
+ // const x0 = F.mul(a1, a);
+ c.call(prefix + "_mul", a1, a, x0),
+
+ // if (F.eq(alfa, F.negone)) {
+ c.if(
+ c.call(prefix + "_eq", alpha, n1),
+ [
+ // x = F.mul(x0, [F.F.zero, F.F.one]);
+ ...c.call(f1mPrefix + "_zero", n1a),
+ ...c.call(f1mPrefix + "_one", n1b),
+ ...c.call(prefix + "_mul", n1, x0, c.getLocal("pr")),
+ ],
+ [
+ // const b = F.pow(F.add(F.one, alfa), F.sqrt_e12);
+ ...c.call(prefix + "_one", b),
+ ...c.call(prefix + "_add", b, alpha, b),
+ ...c.call(prefix + "_exp", b, e12, c.i32_const(f1n8), b),
+
+ // x = F.mul(b, x0);
+ ...c.call(prefix + "_mul", b, x0, c.getLocal("pr")),
+ ]
+ )
+ );
+
+ }
+
+
+ function buildIsSquare() {
+
+ const f = module.addFunction(prefix+"_isSquare");
+ f.addParam("a", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const e34 = c.i32_const(module.alloc(utils$3.bigInt2BytesLE(BigInteger(q).minus(BigInteger(3)).divide(4), f1n8 )));
+
+ const a = c.getLocal("a");
+ const a1 = c.i32_const(module.alloc(f1n8*2));
+ const alpha = c.i32_const(module.alloc(f1n8*2));
+ const a0 = c.i32_const(module.alloc(f1n8*2));
+ const pn1 = module.alloc(f1n8*2);
+ const n1 = c.i32_const(pn1);
+
+ f.addCode(
+
+ c.call(prefix + "_one", n1),
+ c.call(prefix + "_neg", n1, n1),
+
+ // const a1 = F.pow(a, F.sqrt_e34);
+ c.call(prefix + "_exp", a, e34, c.i32_const(f1n8), a1),
+
+ // const a1 = F.pow(a, F.sqrt_e34);
+ c.call(prefix + "_square", a1, alpha),
+ c.call(prefix + "_mul", a, alpha, alpha),
+
+ // const a0 = F.mul(F.frobenius(1, alfa), alfa);
+ c.call(prefix + "_conjugate", alpha, a0),
+ c.call(prefix + "_mul", a0, alpha, a0),
+
+ // if (F.eq(a0, F.negone)) return null;
+ c.if(
+ c.call(
+ prefix + "_eq",
+ a0,
+ n1
+ ),
+ c.ret(c.i32_const(0))
+ ),
+ c.ret(c.i32_const(1))
+ );
+
+ }
+
+
+ buildIsZero();
+ buildIsOne();
+ buildZero();
+ buildOne();
+ buildCopy();
+ buildMul();
+ buildMul1();
+ buildSquare();
+ buildAdd();
+ buildSub();
+ buildNeg();
+ buildConjugate();
+ buildToMontgomery();
+ buildFromMontgomery();
+ buildEq();
+ buildInverse();
+ buildTimesScalar();
+ buildSign();
+ buildIsNegative();
+
+ module.exportFunction(prefix + "_isZero");
+ module.exportFunction(prefix + "_isOne");
+ module.exportFunction(prefix + "_zero");
+ module.exportFunction(prefix + "_one");
+ module.exportFunction(prefix + "_copy");
+ module.exportFunction(prefix + "_mul");
+ module.exportFunction(prefix + "_mul1");
+ module.exportFunction(prefix + "_square");
+ module.exportFunction(prefix + "_add");
+ module.exportFunction(prefix + "_sub");
+ module.exportFunction(prefix + "_neg");
+ module.exportFunction(prefix + "_sign");
+ module.exportFunction(prefix + "_conjugate");
+ module.exportFunction(prefix + "_fromMontgomery");
+ module.exportFunction(prefix + "_toMontgomery");
+ module.exportFunction(prefix + "_eq");
+ module.exportFunction(prefix + "_inverse");
+ build_batchinverse(module, prefix);
+ build_timesscalar(
+ module,
+ prefix + "_exp",
+ f1n8*2,
+ prefix + "_mul",
+ prefix + "_square",
+ prefix + "_copy",
+ prefix + "_one",
+ );
+ buildSqrt();
+ buildIsSquare();
+
+ module.exportFunction(prefix + "_exp");
+ module.exportFunction(prefix + "_timesScalar");
+ module.exportFunction(prefix + "_batchInverse");
+ module.exportFunction(prefix + "_sqrt");
+ module.exportFunction(prefix + "_isSquare");
+ module.exportFunction(prefix + "_isNegative");
+
+
+ return prefix;
+ };
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+
+ var build_f3m = function buildF3m(module, mulNonResidueFn, prefix, f1mPrefix) {
+
+ if (module.modules[prefix]) return prefix; // already builded
+
+ const f1n8 = module.modules[f1mPrefix].n64*8;
+ module.modules[prefix] = {
+ n64: module.modules[f1mPrefix].n64*3
+ };
+
+ function buildAdd() {
+ const f = module.addFunction(prefix+"_add");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2*f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_add", x0, y0, r0),
+ c.call(f1mPrefix+"_add", x1, y1, r1),
+ c.call(f1mPrefix+"_add", x2, y2, r2),
+ );
+ }
+
+ function buildTimesScalar() {
+ const f = module.addFunction(prefix+"_timesScalar");
+ f.addParam("x", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLen", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_timesScalar", x0, c.getLocal("scalar"), c.getLocal("scalarLen"), r0),
+ c.call(f1mPrefix+"_timesScalar", x1, c.getLocal("scalar"), c.getLocal("scalarLen"), r1),
+ c.call(f1mPrefix+"_timesScalar", x2, c.getLocal("scalar"), c.getLocal("scalarLen"), r2),
+ );
+ }
+
+
+ function buildSub() {
+ const f = module.addFunction(prefix+"_sub");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2*f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_sub", x0, y0, r0),
+ c.call(f1mPrefix+"_sub", x1, y1, r1),
+ c.call(f1mPrefix+"_sub", x2, y2, r2),
+ );
+ }
+
+ function buildNeg() {
+ const f = module.addFunction(prefix+"_neg");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_neg", x0, r0),
+ c.call(f1mPrefix+"_neg", x1, r1),
+ c.call(f1mPrefix+"_neg", x2, r2),
+ );
+ }
+
+ function buildIsNegative() {
+ const f = module.addFunction(prefix+"_isNegative");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.if(
+ c.call(f1mPrefix+"_isZero", x2),
+ c.if(
+ c.call(f1mPrefix+"_isZero", x1),
+ c.ret(c.call(f1mPrefix+"_isNegative", x0)),
+ c.ret(c.call(f1mPrefix+"_isNegative", x1))
+ )
+ ),
+ c.ret(c.call(f1mPrefix+"_isNegative", x2))
+ );
+ }
+
+
+ function buildMul() {
+ const f = module.addFunction(prefix+"_mul");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.addParam("r", "i32");
+
+ const cd = f.getCodeBuilder();
+
+ const a = cd.getLocal("x");
+ const b = cd.i32_add(cd.getLocal("x"), cd.i32_const(f1n8));
+ const c = cd.i32_add(cd.getLocal("x"), cd.i32_const(2*f1n8));
+ const A = cd.getLocal("y");
+ const B = cd.i32_add(cd.getLocal("y"), cd.i32_const(f1n8));
+ const C = cd.i32_add(cd.getLocal("y"), cd.i32_const(2*f1n8));
+ const r0 = cd.getLocal("r");
+ const r1 = cd.i32_add(cd.getLocal("r"), cd.i32_const(f1n8));
+ const r2 = cd.i32_add(cd.getLocal("r"), cd.i32_const(2*f1n8));
+
+ const aA = cd.i32_const(module.alloc(f1n8));
+ const bB = cd.i32_const(module.alloc(f1n8));
+ const cC = cd.i32_const(module.alloc(f1n8));
+ const a_b = cd.i32_const(module.alloc(f1n8));
+ const A_B = cd.i32_const(module.alloc(f1n8));
+ const a_c = cd.i32_const(module.alloc(f1n8));
+ const A_C = cd.i32_const(module.alloc(f1n8));
+ const b_c = cd.i32_const(module.alloc(f1n8));
+ const B_C = cd.i32_const(module.alloc(f1n8));
+ const aA_bB = cd.i32_const(module.alloc(f1n8));
+ const aA_cC = cd.i32_const(module.alloc(f1n8));
+ const bB_cC = cd.i32_const(module.alloc(f1n8));
+ const AUX = cd.i32_const(module.alloc(f1n8));
+
+
+ f.addCode(
+ cd.call(f1mPrefix + "_mul", a, A, aA),
+ cd.call(f1mPrefix + "_mul", b, B, bB),
+ cd.call(f1mPrefix + "_mul", c, C, cC),
+
+ cd.call(f1mPrefix + "_add", a, b, a_b),
+ cd.call(f1mPrefix + "_add", A, B, A_B),
+ cd.call(f1mPrefix + "_add", a, c, a_c),
+ cd.call(f1mPrefix + "_add", A, C, A_C),
+ cd.call(f1mPrefix + "_add", b, c, b_c),
+ cd.call(f1mPrefix + "_add", B, C, B_C),
+
+ cd.call(f1mPrefix + "_add", aA, bB, aA_bB),
+ cd.call(f1mPrefix + "_add", aA, cC, aA_cC),
+ cd.call(f1mPrefix + "_add", bB, cC, bB_cC),
+
+ cd.call(f1mPrefix + "_mul", b_c, B_C, r0),
+ cd.call(f1mPrefix + "_sub", r0, bB_cC, r0),
+ cd.call(mulNonResidueFn, r0, r0),
+ cd.call(f1mPrefix + "_add", aA, r0, r0),
+
+ cd.call(f1mPrefix + "_mul", a_b, A_B, r1),
+ cd.call(f1mPrefix + "_sub", r1, aA_bB, r1),
+ cd.call(mulNonResidueFn, cC, AUX),
+ cd.call(f1mPrefix + "_add", r1, AUX, r1),
+
+ cd.call(f1mPrefix + "_mul", a_c, A_C, r2),
+ cd.call(f1mPrefix + "_sub", r2, aA_cC, r2),
+ cd.call(f1mPrefix + "_add", r2, bB, r2),
+ );
+
+ }
+
+ function buildSquare() {
+ const f = module.addFunction(prefix+"_square");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const A = c.getLocal("x");
+ const B = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const C = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8));
+
+ const s0 = c.i32_const(module.alloc(f1n8));
+ const ab = c.i32_const(module.alloc(f1n8));
+ const s1 = c.i32_const(module.alloc(f1n8));
+ const s2 = c.i32_const(module.alloc(f1n8));
+ const bc = c.i32_const(module.alloc(f1n8));
+ const s3 = c.i32_const(module.alloc(f1n8));
+ const s4 = c.i32_const(module.alloc(f1n8));
+
+
+ f.addCode(
+
+ c.call(f1mPrefix + "_square", A, s0),
+ c.call(f1mPrefix + "_mul", A, B, ab),
+ c.call(f1mPrefix + "_add", ab, ab, s1),
+
+ c.call(f1mPrefix + "_sub", A, B, s2),
+ c.call(f1mPrefix + "_add", s2, C, s2),
+ c.call(f1mPrefix + "_square", s2, s2),
+
+ c.call(f1mPrefix + "_mul", B, C, bc),
+ c.call(f1mPrefix + "_add", bc, bc, s3),
+
+ c.call(f1mPrefix + "_square", C, s4),
+
+ c.call(mulNonResidueFn, s3, r0),
+ c.call(f1mPrefix + "_add", s0, r0, r0),
+
+ c.call(mulNonResidueFn, s4, r1),
+ c.call(f1mPrefix + "_add", s1, r1, r1),
+
+ c.call(f1mPrefix + "_add", s0, s4, r2),
+ c.call(f1mPrefix + "_sub", s3, r2, r2),
+ c.call(f1mPrefix + "_add", s2, r2, r2),
+ c.call(f1mPrefix + "_add", s1, r2, r2),
+ );
+
+ }
+
+
+ function buildToMontgomery() {
+ const f = module.addFunction(prefix+"_toMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_toMontgomery", x0, r0),
+ c.call(f1mPrefix+"_toMontgomery", x1, r1),
+ c.call(f1mPrefix+"_toMontgomery", x2, r2)
+ );
+ }
+
+ function buildFromMontgomery() {
+ const f = module.addFunction(prefix+"_fromMontgomery");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_fromMontgomery", x0, r0),
+ c.call(f1mPrefix+"_fromMontgomery", x1, r1),
+ c.call(f1mPrefix+"_fromMontgomery", x2, r2)
+ );
+ }
+
+ function buildCopy() {
+ const f = module.addFunction(prefix+"_copy");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_copy", x0, r0),
+ c.call(f1mPrefix+"_copy", x1, r1),
+ c.call(f1mPrefix+"_copy", x2, r2),
+ );
+ }
+
+ function buildZero() {
+ const f = module.addFunction(prefix+"_zero");
+ f.addParam("x", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_zero", x0),
+ c.call(f1mPrefix+"_zero", x1),
+ c.call(f1mPrefix+"_zero", x2),
+ );
+ }
+
+ function buildOne() {
+ const f = module.addFunction(prefix+"_one");
+ f.addParam("x", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_one", x0),
+ c.call(f1mPrefix+"_zero", x1),
+ c.call(f1mPrefix+"_zero", x2),
+ );
+ }
+
+ function buildEq() {
+ const f = module.addFunction(prefix+"_eq");
+ f.addParam("x", "i32");
+ f.addParam("y", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const y0 = c.getLocal("y");
+ const y1 = c.i32_add(c.getLocal("y"), c.i32_const(f1n8));
+ const y2 = c.i32_add(c.getLocal("y"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.i32_and(
+ c.i32_and(
+ c.call(f1mPrefix+"_eq", x0, y0),
+ c.call(f1mPrefix+"_eq", x1, y1),
+ ),
+ c.call(f1mPrefix+"_eq", x2, y2)
+ )
+ );
+ }
+
+ function buildIsZero() {
+ const f = module.addFunction(prefix+"_isZero");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.i32_and(
+ c.i32_and(
+ c.call(f1mPrefix+"_isZero", x0),
+ c.call(f1mPrefix+"_isZero", x1)
+ ),
+ c.call(f1mPrefix+"_isZero", x2)
+ )
+ );
+ }
+
+ function buildInverse() {
+ const f = module.addFunction(prefix+"_inverse");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+ const r0 = c.getLocal("r");
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(f1n8));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(2*f1n8));
+
+ const t0 = c.i32_const(module.alloc(f1n8));
+ const t1 = c.i32_const(module.alloc(f1n8));
+ const t2 = c.i32_const(module.alloc(f1n8));
+ const t3 = c.i32_const(module.alloc(f1n8));
+ const t4 = c.i32_const(module.alloc(f1n8));
+ const t5 = c.i32_const(module.alloc(f1n8));
+ const c0 = c.i32_const(module.alloc(f1n8));
+ const c1 = c.i32_const(module.alloc(f1n8));
+ const c2 = c.i32_const(module.alloc(f1n8));
+ const t6 = c.i32_const(module.alloc(f1n8));
+ const AUX = c.i32_const(module.alloc(f1n8));
+
+ f.addCode(
+ c.call(f1mPrefix+"_square", x0, t0),
+ c.call(f1mPrefix+"_square", x1, t1),
+ c.call(f1mPrefix+"_square", x2, t2),
+ c.call(f1mPrefix+"_mul", x0, x1, t3),
+ c.call(f1mPrefix+"_mul", x0, x2, t4),
+ c.call(f1mPrefix+"_mul", x1, x2, t5),
+
+ c.call(mulNonResidueFn, t5, c0),
+ c.call(f1mPrefix+"_sub", t0, c0, c0),
+
+ c.call(mulNonResidueFn, t2, c1),
+ c.call(f1mPrefix+"_sub", c1, t3, c1),
+
+ c.call(f1mPrefix+"_sub", t1, t4, c2),
+
+ c.call(f1mPrefix+"_mul", x2, c1, t6),
+ c.call(f1mPrefix+"_mul", x1, c2, AUX),
+ c.call(f1mPrefix+"_add", t6, AUX, t6),
+ c.call(mulNonResidueFn, t6, t6),
+ c.call(f1mPrefix+"_mul", x0, c0, AUX),
+ c.call(f1mPrefix+"_add", AUX, t6, t6),
+
+ c.call(f1mPrefix+"_inverse", t6, t6),
+
+ c.call(f1mPrefix+"_mul", t6, c0, r0),
+ c.call(f1mPrefix+"_mul", t6, c1, r1),
+ c.call(f1mPrefix+"_mul", t6, c2, r2)
+ );
+ }
+
+
+ function buildSign() {
+ const f = module.addFunction(prefix+"_sign");
+ f.addParam("x", "i32");
+ f.addLocal("s", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(2*f1n8));
+
+ f.addCode(
+ c.setLocal("s" , c.call( f1mPrefix + "_sign", x2)),
+ c.if(
+ c.getLocal("s"),
+ c.ret(c.getLocal("s"))
+ ),
+ c.setLocal("s" , c.call( f1mPrefix + "_sign", x1)),
+ c.if(
+ c.getLocal("s"),
+ c.ret(c.getLocal("s"))
+ ),
+ c.ret(c.call( f1mPrefix + "_sign", x0))
+ );
+ }
+
+ function buildIsOne() {
+ const f = module.addFunction(prefix+"_isOne");
+ f.addParam("x", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(f1n8*2));
+
+ f.addCode(
+ c.ret(
+ c.i32_and(
+ c.i32_and(
+ c.call(f1mPrefix + "_isOne", x0),
+ c.call(f1mPrefix + "_isZero", x1)
+ ),
+ c.call(f1mPrefix + "_isZero", x2)
+ )
+ )
+ );
+ }
+
+ buildIsZero();
+ buildIsOne();
+ buildZero();
+ buildOne();
+ buildCopy();
+ buildMul();
+ buildSquare();
+ buildAdd();
+ buildSub();
+ buildNeg();
+ buildSign();
+ buildToMontgomery();
+ buildFromMontgomery();
+ buildEq();
+ buildInverse();
+ buildTimesScalar();
+ buildIsNegative();
+
+ module.exportFunction(prefix + "_isZero");
+ module.exportFunction(prefix + "_isOne");
+ module.exportFunction(prefix + "_zero");
+ module.exportFunction(prefix + "_one");
+ module.exportFunction(prefix + "_copy");
+ module.exportFunction(prefix + "_mul");
+ module.exportFunction(prefix + "_square");
+ module.exportFunction(prefix + "_add");
+ module.exportFunction(prefix + "_sub");
+ module.exportFunction(prefix + "_neg");
+ module.exportFunction(prefix + "_sign");
+ module.exportFunction(prefix + "_fromMontgomery");
+ module.exportFunction(prefix + "_toMontgomery");
+ module.exportFunction(prefix + "_eq");
+ module.exportFunction(prefix + "_inverse");
+ build_batchinverse(module, prefix);
+ build_timesscalar(
+ module,
+ prefix + "_exp",
+ f1n8*3,
+ prefix + "_mul",
+ prefix + "_square",
+ prefix + "_copy",
+ prefix + "_one"
+ );
+ module.exportFunction(prefix + "_exp");
+ module.exportFunction(prefix + "_timesScalar");
+ module.exportFunction(prefix + "_batchInverse");
+ module.exportFunction(prefix + "_isNegative");
+
+ return prefix;
+ };
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+ var build_timesscalarnaf = function buildTimesScalarNAF(module, fnName, elementLen, opAB, opAA, opAmB, opCopy, opInit) {
+
+ const f = module.addFunction(fnName);
+ f.addParam("base", "i32");
+ f.addParam("scalar", "i32");
+ f.addParam("scalarLength", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("old0", "i32");
+ f.addLocal("nbits", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("last", "i32");
+ f.addLocal("cur", "i32");
+ f.addLocal("carry", "i32");
+ f.addLocal("p", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const aux = c.i32_const(module.alloc(elementLen));
+
+ function getBit(IDX) {
+ return c.i32_and(
+ c.i32_shr_u(
+ c.i32_load(
+ c.i32_add(
+ c.getLocal("scalar"),
+ c.i32_and(
+ c.i32_shr_u(
+ IDX,
+ c.i32_const(3)
+ ),
+ c.i32_const(0xFFFFFFFC)
+ )
+ )
+ ),
+ c.i32_and(
+ IDX,
+ c.i32_const(0x1F)
+ )
+ ),
+ c.i32_const(1)
+ );
+ }
+
+ function pushBit(b) {
+ return [
+ ...c.i32_store8(
+ c.getLocal("p"),
+ c.i32_const(b)
+ ),
+ ...c.setLocal(
+ "p",
+ c.i32_add(
+ c.getLocal("p"),
+ c.i32_const(1)
+ )
+ )
+ ];
+ }
+
+ f.addCode(
+ c.if(
+ c.i32_eqz(c.getLocal("scalarLength")),
+ [
+ ...c.call(opInit, c.getLocal("r")),
+ ...c.ret([])
+ ]
+ ),
+ c.setLocal("nbits", c.i32_shl(c.getLocal("scalarLength"), c.i32_const(3))),
+ c.setLocal("old0", c.i32_load(c.i32_const(0))),
+ c.setLocal("p", c.getLocal("old0")),
+ c.i32_store(
+ c.i32_const(0),
+ c.i32_and(
+ c.i32_add(
+ c.i32_add(
+ c.getLocal("old0"),
+ c.i32_const(32)
+ ),
+ c.getLocal("nbits")
+ ),
+ c.i32_const(0xFFFFFFF8)
+ )
+ ),
+ c.setLocal("i", c.i32_const(1)),
+
+ c.setLocal("last",getBit(c.i32_const(0))),
+ c.setLocal("carry",c.i32_const(0)),
+
+ c.block(c.loop(
+ c.br_if(1, c.i32_eq( c.getLocal("i"), c.getLocal("nbits"))),
+
+ c.setLocal("cur", getBit(c.getLocal("i"))),
+ c.if( c.getLocal("last"),
+ c.if( c.getLocal("cur"),
+ c.if(c.getLocal("carry"),
+ [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(1)),
+ ...pushBit(1)
+ ]
+ ,
+ [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(1)),
+ ...pushBit(255)
+ ],
+ ),
+ c.if(c.getLocal("carry"),
+ [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(1)),
+ ...pushBit(255)
+ ]
+ ,
+ [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(0)),
+ ...pushBit(1)
+ ],
+ ),
+ ),
+ c.if( c.getLocal("cur"),
+ c.if(c.getLocal("carry"),
+ [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(1)),
+ ...pushBit(0)
+ ]
+ ,
+ [
+ ...c.setLocal("last", c.i32_const(1)),
+ ...c.setLocal("carry", c.i32_const(0)),
+ ...pushBit(0)
+ ],
+ ),
+ c.if(c.getLocal("carry"),
+ [
+ ...c.setLocal("last", c.i32_const(1)),
+ ...c.setLocal("carry", c.i32_const(0)),
+ ...pushBit(0)
+ ]
+ ,
+ [
+ ...c.setLocal("last", c.i32_const(0)),
+ ...c.setLocal("carry", c.i32_const(0)),
+ ...pushBit(0)
+ ],
+ ),
+ )
+ ),
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ )),
+
+ c.if( c.getLocal("last"),
+ c.if(c.getLocal("carry"),
+ [
+ ...pushBit(255),
+ ...pushBit(0),
+ ...pushBit(1)
+ ]
+ ,
+ [
+ ...pushBit(1)
+ ],
+ ),
+ c.if(c.getLocal("carry"),
+ [
+ ...pushBit(0),
+ ...pushBit(1)
+ ]
+ ),
+ ),
+
+ c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))),
+
+ // p already points to the last bit
+
+ c.call(opCopy, c.getLocal("base"), aux),
+
+ c.call(opInit, c.getLocal("r")),
+
+ c.block(c.loop(
+
+
+ c.call(opAA, c.getLocal("r"), c.getLocal("r")),
+
+
+ c.setLocal("cur",
+ c.i32_load8_u(
+ c.getLocal("p")
+ )
+ ),
+
+ c.if(
+ c.getLocal("cur"),
+ c.if(
+ c.i32_eq(c.getLocal("cur"), c.i32_const(1)),
+ c.call(opAB, c.getLocal("r"), aux, c.getLocal("r")),
+ c.call(opAmB, c.getLocal("r"), aux, c.getLocal("r")),
+ )
+ ),
+
+ c.br_if(1, c.i32_eq( c.getLocal("old0"), c.getLocal("p"))),
+ c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))),
+ c.br(0)
+
+ )),
+
+ c.i32_store( c.i32_const(0), c.getLocal("old0"))
+
+ );
+
+ };
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+ var build_multiexp = function buildMultiexp(module, prefix, fnName, opAdd, n8b) {
+
+ const n64g = module.modules[prefix].n64;
+ const n8g = n64g*8;
+
+ function buildGetChunk() {
+ const f = module.addFunction(fnName + "_getChunk");
+ f.addParam("pScalar", "i32");
+ f.addParam("scalarSize", "i32"); // Number of bytes of the scalar
+ f.addParam("startBit", "i32"); // Bit to start extract
+ f.addParam("chunkSize", "i32"); // Chunk size in bits
+ f.addLocal("bitsToEnd", "i32");
+ f.addLocal("mask", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.setLocal("bitsToEnd",
+ c.i32_sub(
+ c.i32_mul(
+ c.getLocal("scalarSize"),
+ c.i32_const(8)
+ ),
+ c.getLocal("startBit")
+ )
+ ),
+ c.if(
+ c.i32_gt_s(
+ c.getLocal("chunkSize"),
+ c.getLocal("bitsToEnd")
+ ),
+ c.setLocal(
+ "mask",
+ c.i32_sub(
+ c.i32_shl(
+ c.i32_const(1),
+ c.getLocal("bitsToEnd")
+ ),
+ c.i32_const(1)
+ )
+ ),
+ c.setLocal(
+ "mask",
+ c.i32_sub(
+ c.i32_shl(
+ c.i32_const(1),
+ c.getLocal("chunkSize")
+ ),
+ c.i32_const(1)
+ )
+ )
+ ),
+ c.i32_and(
+ c.i32_shr_u(
+ c.i32_load(
+ c.i32_add(
+ c.getLocal("pScalar"),
+ c.i32_shr_u(
+ c.getLocal("startBit"),
+ c.i32_const(3)
+ )
+ ),
+ 0, // offset
+ 0 // align to byte.
+ ),
+ c.i32_and(
+ c.getLocal("startBit"),
+ c.i32_const(0x7)
+ )
+ ),
+ c.getLocal("mask")
+ )
+ );
+ }
+
+ function buildMutiexpChunk() {
+ const f = module.addFunction(fnName + "_chunk");
+ f.addParam("pBases", "i32");
+ f.addParam("pScalars", "i32");
+ f.addParam("scalarSize", "i32"); // Number of points
+ f.addParam("n", "i32"); // Number of points
+ f.addParam("startBit", "i32"); // bit where it starts the chunk
+ f.addParam("chunkSize", "i32"); // bit where it starts the chunk
+ f.addParam("pr", "i32");
+ f.addLocal("nChunks", "i32");
+ f.addLocal("itScalar", "i32");
+ f.addLocal("endScalar", "i32");
+ f.addLocal("itBase", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("nTable", "i32");
+ f.addLocal("pTable", "i32");
+ f.addLocal("idx", "i32");
+ f.addLocal("pIdxTable", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.if(
+ c.i32_eqz(c.getLocal("n")),
+ [
+ ...c.call(prefix + "_zero", c.getLocal("pr")),
+ ...c.ret([])
+ ]
+ ),
+
+ // Allocate memory
+
+ c.setLocal(
+ "nTable",
+ c.i32_shl(
+ c.i32_const(1),
+ c.getLocal("chunkSize")
+ )
+ ),
+ c.setLocal("pTable", c.i32_load( c.i32_const(0) )),
+ c.i32_store(
+ c.i32_const(0),
+ c.i32_add(
+ c.getLocal("pTable"),
+ c.i32_mul(
+ c.getLocal("nTable"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ // Reset Table
+ c.setLocal("j", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("j"),
+ c.getLocal("nTable")
+ )
+ ),
+
+ c.call(
+ prefix + "_zero",
+ c.i32_add(
+ c.getLocal("pTable"),
+ c.i32_mul(
+ c.getLocal("j"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))),
+ c.br(0)
+ )),
+
+ // Distribute elements
+ c.setLocal("itBase", c.getLocal("pBases")),
+ c.setLocal("itScalar", c.getLocal("pScalars")),
+ c.setLocal("endScalar",
+ c.i32_add(
+ c.getLocal("pScalars"),
+ c.i32_mul(
+ c.getLocal("n"),
+ c.getLocal("scalarSize")
+ )
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("itScalar"),
+ c.getLocal("endScalar")
+ )
+ ),
+
+ c.setLocal(
+ "idx",
+ c.call(fnName + "_getChunk",
+ c.getLocal("itScalar"),
+ c.getLocal("scalarSize"),
+ c.getLocal("startBit"),
+ c.getLocal("chunkSize")
+ )
+ ),
+
+ c.if(
+ c.getLocal("idx"),
+ [
+ ...c.setLocal(
+ "pIdxTable",
+ c.i32_add(
+ c.getLocal("pTable"),
+ c.i32_mul(
+ c.i32_sub(
+ c.getLocal("idx"),
+ c.i32_const(1)
+ ),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+ ...c.call(
+ opAdd,
+ c.getLocal("pIdxTable"),
+ c.getLocal("itBase"),
+ c.getLocal("pIdxTable"),
+ )
+ ]
+ ),
+
+ c.setLocal("itScalar", c.i32_add(c.getLocal("itScalar"), c.getLocal("scalarSize"))),
+ c.setLocal("itBase", c.i32_add(c.getLocal("itBase"), c.i32_const(n8b))),
+ c.br(0)
+ )),
+
+ c.call(fnName + "_reduceTable", c.getLocal("pTable"), c.getLocal("chunkSize")),
+ c.call(
+ prefix + "_copy",
+ c.getLocal("pTable"),
+ c.getLocal("pr")
+ ),
+
+
+ c.i32_store(
+ c.i32_const(0),
+ c.getLocal("pTable")
+ )
+
+ );
+ }
+
+ function buildMultiexp() {
+ const f = module.addFunction(fnName);
+ f.addParam("pBases", "i32");
+ f.addParam("pScalars", "i32");
+ f.addParam("scalarSize", "i32"); // Number of points
+ f.addParam("n", "i32"); // Number of points
+ f.addParam("pr", "i32");
+ f.addLocal("chunkSize", "i32");
+ f.addLocal("nChunks", "i32");
+ f.addLocal("itScalar", "i32");
+ f.addLocal("endScalar", "i32");
+ f.addLocal("itBase", "i32");
+ f.addLocal("itBit", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("nTable", "i32");
+ f.addLocal("pTable", "i32");
+ f.addLocal("idx", "i32");
+ f.addLocal("pIdxTable", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const aux = c.i32_const(module.alloc(n8g));
+
+ const pTSizes = module.alloc([
+ 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 16, 16, 15, 14, 13, 13,
+ 12, 11, 10, 9, 8, 7, 7, 6,
+ 5 , 4, 3, 2, 1, 1, 1, 1
+ ]);
+
+ f.addCode(
+ c.call(prefix + "_zero", c.getLocal("pr")),
+ c.if(
+ c.i32_eqz(c.getLocal("n")),
+ c.ret([])
+ ),
+ c.setLocal("chunkSize", c.i32_load8_u( c.i32_clz(c.getLocal("n")), pTSizes )),
+ c.setLocal(
+ "nChunks",
+ c.i32_add(
+ c.i32_div_u(
+ c.i32_sub(
+ c.i32_shl(
+ c.getLocal("scalarSize"),
+ c.i32_const(3)
+ ),
+ c.i32_const(1)
+ ),
+ c.getLocal("chunkSize")
+ ),
+ c.i32_const(1)
+ )
+ ),
+
+
+ // Allocate memory
+
+ c.setLocal(
+ "itBit",
+ c.i32_mul(
+ c.i32_sub(
+ c.getLocal("nChunks"),
+ c.i32_const(1)
+ ),
+ c.getLocal("chunkSize")
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_lt_s(
+ c.getLocal("itBit"),
+ c.i32_const(0)
+ )
+ ),
+
+ // Double nChunk times
+ c.if(
+ c.i32_eqz(c.call(prefix + "_isZero", c.getLocal("pr"))),
+ [
+ ...c.setLocal("j", c.i32_const(0)),
+ ...c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("j"),
+ c.getLocal("chunkSize")
+ )
+ ),
+
+ c.call(prefix + "_double", c.getLocal("pr"), c.getLocal("pr")),
+
+ c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))),
+ c.br(0)
+ ))
+ ]
+ ),
+
+ c.call(
+ fnName + "_chunk",
+ c.getLocal("pBases"),
+ c.getLocal("pScalars"),
+ c.getLocal("scalarSize"),
+ c.getLocal("n"),
+ c.getLocal("itBit"),
+ c.getLocal("chunkSize"),
+ aux
+ ),
+
+ c.call(
+ prefix + "_add",
+ c.getLocal("pr"),
+ aux,
+ c.getLocal("pr")
+ ),
+ c.setLocal("itBit", c.i32_sub(c.getLocal("itBit"), c.getLocal("chunkSize"))),
+ c.br(0)
+ ))
+ );
+ }
+
+ function buildReduceTable() {
+ const f = module.addFunction(fnName + "_reduceTable");
+ f.addParam("pTable", "i32");
+ f.addParam("p", "i32"); // Number of bits of the table
+ f.addLocal("half", "i32");
+ f.addLocal("it1", "i32");
+ f.addLocal("it2", "i32");
+ f.addLocal("pAcc", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.if(
+ c.i32_eq(c.getLocal("p"), c.i32_const(1)),
+ c.ret([])
+ ),
+ c.setLocal(
+ "half",
+ c.i32_shl(
+ c.i32_const(1),
+ c.i32_sub(
+ c.getLocal("p"),
+ c.i32_const(1)
+ )
+ )
+ ),
+
+ c.setLocal("it1", c.getLocal("pTable")),
+ c.setLocal(
+ "it2",
+ c.i32_add(
+ c.getLocal("pTable"),
+ c.i32_mul(
+ c.getLocal("half"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+ c.setLocal("pAcc",
+ c.i32_sub(
+ c.getLocal("it2"),
+ c.i32_const(n8g)
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("it1"),
+ c.getLocal("pAcc")
+ )
+ ),
+ c.call(
+ prefix + "_add",
+ c.getLocal("it1"),
+ c.getLocal("it2"),
+ c.getLocal("it1")
+ ),
+ c.call(
+ prefix + "_add",
+ c.getLocal("pAcc"),
+ c.getLocal("it2"),
+ c.getLocal("pAcc")
+ ),
+ c.setLocal("it1", c.i32_add(c.getLocal("it1"), c.i32_const(n8g))),
+ c.setLocal("it2", c.i32_add(c.getLocal("it2"), c.i32_const(n8g))),
+ c.br(0)
+ )),
+
+ c.call(
+ fnName + "_reduceTable",
+ c.getLocal("pTable"),
+ c.i32_sub(
+ c.getLocal("p"),
+ c.i32_const(1)
+ )
+ ),
+
+ c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))),
+ c.block(c.loop(
+ c.br_if(1, c.i32_eqz(c.getLocal("p"))),
+ c.call(prefix + "_double", c.getLocal("pAcc"), c.getLocal("pAcc")),
+ c.setLocal("p", c.i32_sub(c.getLocal("p"), c.i32_const(1))),
+ c.br(0)
+ )),
+
+ c.call(prefix + "_add", c.getLocal("pTable"), c.getLocal("pAcc"), c.getLocal("pTable"))
+ );
+ }
+
+ buildGetChunk();
+ buildReduceTable();
+ buildMutiexpChunk();
+ buildMultiexp();
+
+ module.exportFunction(fnName);
+ module.exportFunction(fnName +"_chunk");
+
+
+ };
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+
+ //const buildTimesScalar = require("./build_timesscalar");
+
+
+
+ var build_curve_jacobian_a0 = function buildCurve(module, prefix, prefixField, pB) {
+
+
+ const n64 = module.modules[prefixField].n64;
+ const n8 = n64*8;
+
+ if (module.modules[prefix]) return prefix; // already builded
+ module.modules[prefix] = {
+ n64: n64*3
+ };
+
+ function buildIsZero() {
+ const f = module.addFunction(prefix + "_isZero");
+ f.addParam("p1", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(c.call(
+ prefixField + "_isZero",
+ c.i32_add(
+ c.getLocal("p1"),
+ c.i32_const(n8*2)
+ )
+ ));
+ }
+ function buildIsZeroAffine() {
+ const f = module.addFunction(prefix + "_isZeroAffine");
+ f.addParam("p1", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.i32_and(
+ c.call(
+ prefixField + "_isZero",
+ c.getLocal("p1")
+ ),
+ c.call(
+ prefixField + "_isZero",
+ c.i32_add(
+ c.getLocal("p1"),
+ c.i32_const(n8)
+ )
+ )
+ )
+ );
+ }
+
+ function buildCopy() {
+ const f = module.addFunction(prefix + "_copy");
+ f.addParam("ps", "i32");
+ f.addParam("pd", "i32");
+
+ const c = f.getCodeBuilder();
+
+ for (let i=0; i.
+ */
+
+ var build_fft = function buildFFT(module, prefix, gPrefix, fPrefix, opGtimesF) {
+
+ const n64f = module.modules[fPrefix].n64;
+ const n8f = n64f*8;
+
+ const n64g = module.modules[gPrefix].n64;
+ const n8g = n64g*8;
+
+ const q = module.modules[fPrefix].q;
+
+ let rem = q.minus(BigInteger(1));
+ let maxBits = 0;
+ while (!rem.isOdd()) {
+ maxBits ++;
+ rem = rem.shiftRight(1);
+ }
+
+ let nr = BigInteger(2);
+
+ while ( nr.modPow(q.shiftRight(1), q).equals(1) ) nr = nr.add(1);
+
+ // console.log(nr);
+
+ const w = new Array(maxBits+1);
+ w[maxBits] = nr.modPow(rem, q);
+
+ let n=maxBits-1;
+ while (n>=0) {
+ w[n] = w[n+1].modPow(2, q);
+ n--;
+ }
+
+ const bytes = [];
+ const R = BigInteger(1).shiftLeft(n8f*8).mod(q);
+
+ for (let i=0; i> i);
+ }
+ }
+ return r;
+ }
+
+ const rtable = Array(256);
+ for (let i=0; i<256; i++) {
+ rtable[i] = rev(i);
+ }
+
+ const REVTABLE = module.alloc(rtable);
+
+
+ function buildLog2() {
+ const f = module.addFunction(prefix+"__log2");
+ f.addParam("n", "i32");
+ f.setReturnType("i32");
+ f.addLocal("bits", "i32");
+ f.addLocal("aux", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.setLocal(
+ "aux",
+ c.i32_shr_u(
+ c.getLocal("n"),
+ c.i32_const(1)
+ )
+ )
+ );
+ f.addCode(c.setLocal("bits", c.i32_const(0)));
+
+ f.addCode(c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eqz(c.getLocal("aux"))
+ ),
+
+ c.setLocal(
+ "aux",
+ c.i32_shr_u(
+ c.getLocal("aux"),
+ c.i32_const(1)
+ )
+ ),
+
+ c.setLocal(
+ "bits",
+ c.i32_add(
+ c.getLocal("bits"),
+ c.i32_const(1)
+ )
+ ),
+
+ c.br(0)
+ )));
+
+ f.addCode(c.if(
+ c.i32_ne(
+ c.getLocal("n"),
+ c.i32_shl(
+ c.i32_const(1),
+ c.getLocal("bits")
+ )
+ ),
+ c.unreachable()
+ ));
+
+ f.addCode(c.if(
+ c.i32_gt_u(
+ c.getLocal("bits"),
+ c.i32_const(maxBits)
+ ),
+ c.unreachable()
+ ));
+
+ f.addCode(c.getLocal("bits"));
+ }
+
+ function buildFFT() {
+ const f = module.addFunction(prefix+"_fft");
+ f.addParam("px", "i32");
+ f.addParam("n", "i32");
+
+ f.addLocal("bits", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const One = c.i32_const(module.alloc(n8f));
+
+ f.addCode(
+ c.setLocal(
+ "bits",
+ c.call(
+ prefix + "__log2",
+ c.getLocal("n")
+ )
+ ),
+ c.call(fPrefix + "_one", One),
+ c.call(
+ prefix+"_rawfft",
+ c.getLocal("px"),
+ c.getLocal("bits"),
+ c.i32_const(0),
+ One
+ )
+ );
+
+ }
+
+ function buildIFFT() {
+ const f = module.addFunction(prefix+"_ifft");
+ f.addParam("px", "i32");
+ f.addParam("n", "i32");
+ f.addLocal("bits", "i32");
+ f.addLocal("pInv2", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.setLocal(
+ "bits",
+ c.call(
+ prefix + "__log2",
+ c.getLocal("n")
+ )
+ ),
+ c.setLocal(
+ "pInv2",
+ c.i32_add(
+ c.i32_const(INV2),
+ c.i32_mul(
+ c.getLocal("bits"),
+ c.i32_const(n8f)
+ )
+ )
+ ),
+
+ c.call(
+ prefix+"_rawfft",
+ c.getLocal("px"),
+ c.getLocal("bits"),
+ c.i32_const(1),
+ c.getLocal("pInv2")
+ ),
+ );
+ }
+
+ function buildRawFFT() {
+ const f = module.addFunction(prefix+"_rawfft");
+ f.addParam("px", "i32");
+ f.addParam("bits", "i32"); // 2 power
+ f.addParam("reverse", "i32");
+ f.addParam("mulFactor", "i32");
+
+ f.addLocal("s", "i32");
+ f.addLocal("k", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("m", "i32");
+ f.addLocal("mdiv2", "i32");
+ f.addLocal("n", "i32");
+ f.addLocal("pwm", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const W = c.i32_const(module.alloc(n8f));
+ const T = c.i32_const(module.alloc(n8g));
+ const U = c.i32_const(module.alloc(n8g));
+
+ f.addCode(
+ c.call(prefix + "__reversePermutation", c.getLocal("px"), c.getLocal("bits")),
+ c.setLocal("n", c.i32_shl(c.i32_const(1), c.getLocal("bits"))),
+ c.setLocal("s", c.i32_const(1)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_gt_u(
+ c.getLocal("s"),
+ c.getLocal("bits")
+ )
+ ),
+ c.setLocal("m", c.i32_shl(c.i32_const(1), c.getLocal("s"))),
+ c.setLocal("pwm",
+ c.i32_add(
+ c.i32_const(ROOTs),
+ c.i32_mul(
+ c.getLocal("s"),
+ c.i32_const(n8f)
+ )
+ )
+ ),
+ c.setLocal("k", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_ge_u(
+ c.getLocal("k"),
+ c.getLocal("n")
+ )
+ ),
+
+ c.call(fPrefix + "_one", W),
+
+ c.setLocal("mdiv2", c.i32_shr_u(c.getLocal("m"), c.i32_const(1)) ),
+ c.setLocal("j", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_ge_u(
+ c.getLocal("j"),
+ c.getLocal("mdiv2")
+ )
+ ),
+
+ c.setLocal(
+ "idx1",
+ c.i32_add(
+ c.getLocal("px"),
+ c.i32_mul(
+ c.i32_add(
+ c.getLocal("k"),
+ c.getLocal("j")
+ ),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal(
+ "idx2",
+ c.i32_add(
+ c.getLocal("idx1"),
+ c.i32_mul(
+ c.getLocal("mdiv2"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx2"),
+ W,
+ T
+ ),
+
+ c.call(
+ gPrefix + "_copy",
+ c.getLocal("idx1"),
+ U
+ ),
+
+ c.call(
+ gPrefix + "_add",
+ U,
+ T,
+ c.getLocal("idx1"),
+ ),
+
+ c.call(
+ gPrefix + "_sub",
+ U,
+ T,
+ c.getLocal("idx2"),
+ ),
+
+ c.call(
+ fPrefix + "_mul",
+ W,
+ c.getLocal("pwm"),
+ W,
+ ),
+
+ c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))),
+ c.br(0)
+ )),
+
+ c.setLocal("k", c.i32_add(c.getLocal("k"), c.getLocal("m"))),
+ c.br(0)
+ )),
+
+ c.setLocal("s", c.i32_add(c.getLocal("s"), c.i32_const(1))),
+ c.br(0)
+ )),
+ c.call(
+ prefix + "__fftFinal",
+ c.getLocal("px"),
+ c.getLocal("bits"),
+ c.getLocal("reverse"),
+ c.getLocal("mulFactor")
+ )
+ );
+ }
+
+
+ function buildFinalInverse() {
+ const f = module.addFunction(prefix+"__fftFinal");
+ f.addParam("px", "i32");
+ f.addParam("bits", "i32");
+ f.addParam("reverse", "i32");
+ f.addParam("mulFactor", "i32");
+ f.addLocal("n", "i32");
+ f.addLocal("ndiv2", "i32");
+ f.addLocal("pInv2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("mask", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const T = c.i32_const(module.alloc(n8g));
+
+ f.addCode(
+ c.if(
+ c.i32_and(
+ c.i32_eqz(c.getLocal("reverse")),
+ c.call(fPrefix + "_isOne", c.getLocal("mulFactor"))
+ ),
+ c.ret([])
+ ),
+ c.setLocal("n", c.i32_shl( c.i32_const(1), c.getLocal("bits"))),
+
+ c.setLocal("mask", c.i32_sub( c.getLocal("n") , c.i32_const(1))),
+ c.setLocal("i", c.i32_const(1)),
+ c.setLocal(
+ "ndiv2",
+ c.i32_shr_u(
+ c.getLocal("n"),
+ c.i32_const(1)
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_ge_u(
+ c.getLocal("i"),
+ c.getLocal("ndiv2")
+ )
+ ),
+
+ c.setLocal("idx1",
+ c.i32_add(
+ c.getLocal("px"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal("idx2",
+ c.i32_add(
+ c.getLocal("px"),
+ c.i32_mul(
+ c.i32_sub(
+ c.getLocal("n"),
+ c.getLocal("i")
+ ),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.if(
+ c.getLocal("reverse"),
+ c.if(
+ c.call(fPrefix + "_isOne", c.getLocal("mulFactor")),
+ [
+ ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T),
+ ...c.call(gPrefix + "_copy", c.getLocal("idx2") , c.getLocal("idx1") ),
+ ...c.call(gPrefix + "_copy", T , c.getLocal("idx2")),
+ ],
+ [
+ ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T),
+ ...c.call(opGtimesF , c.getLocal("idx2") , c.getLocal("mulFactor"), c.getLocal("idx1") ),
+ ...c.call(opGtimesF , T , c.getLocal("mulFactor"), c.getLocal("idx2")),
+ ]
+ ),
+ c.if(
+ c.call(fPrefix + "_isOne", c.getLocal("mulFactor")),
+ [
+ // Do nothing (It should not be here)
+ ],
+ [
+ ...c.call(opGtimesF , c.getLocal("idx1") , c.getLocal("mulFactor"), c.getLocal("idx1") ),
+ ...c.call(opGtimesF , c.getLocal("idx2") , c.getLocal("mulFactor"), c.getLocal("idx2")),
+ ]
+ )
+ ),
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+
+ c.br(0)
+ )),
+
+ c.if(
+ c.call(fPrefix + "_isOne", c.getLocal("mulFactor")),
+ [
+ // Do nothing (It should not be here)
+ ],
+ [
+ ...c.call(opGtimesF, c.getLocal("px") , c.getLocal("mulFactor"), c.getLocal("px")),
+ ...c.setLocal("idx2",
+ c.i32_add(
+ c.getLocal("px"),
+ c.i32_mul(
+ c.getLocal("ndiv2"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+ ...c.call(opGtimesF, c.getLocal("idx2"),c.getLocal("mulFactor"), c.getLocal("idx2"))
+ ]
+ )
+ );
+ }
+
+ function buildReversePermutation() {
+ const f = module.addFunction(prefix+"__reversePermutation");
+ f.addParam("px", "i32");
+ f.addParam("bits", "i32");
+ f.addLocal("n", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("ri", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const T = c.i32_const(module.alloc(n8g));
+
+ f.addCode(
+ c.setLocal("n", c.i32_shl( c.i32_const(1), c.getLocal("bits"))),
+ c.setLocal("i", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("i"),
+ c.getLocal("n")
+ )
+ ),
+
+ c.setLocal("idx1",
+ c.i32_add(
+ c.getLocal("px"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal("ri", c.call(prefix + "__rev", c.getLocal("i"), c.getLocal("bits"))),
+
+ c.setLocal("idx2",
+ c.i32_add(
+ c.getLocal("px"),
+ c.i32_mul(
+ c.getLocal("ri"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.if(
+ c.i32_lt_u(
+ c.getLocal("i"),
+ c.getLocal("ri")
+ ),
+ [
+ ...c.call(gPrefix + "_copy", c.getLocal("idx1"), T),
+ ...c.call(gPrefix + "_copy", c.getLocal("idx2") , c.getLocal("idx1")),
+ ...c.call(gPrefix + "_copy", T , c.getLocal("idx2"))
+ ]
+ ),
+
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+
+ c.br(0)
+ ))
+ );
+ }
+
+ function buildRev() {
+ const f = module.addFunction(prefix+"__rev");
+ f.addParam("x", "i32");
+ f.addParam("bits", "i32");
+ f.setReturnType("i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.i32_rotl(
+ c.i32_add(
+ c.i32_add(
+ c.i32_shl(
+ c.i32_load8_u(
+ c.i32_and(
+ c.getLocal("x"),
+ c.i32_const(0xFF)
+ ),
+ REVTABLE,
+ 0
+ ),
+ c.i32_const(24)
+ ),
+ c.i32_shl(
+ c.i32_load8_u(
+ c.i32_and(
+ c.i32_shr_u(
+ c.getLocal("x"),
+ c.i32_const(8)
+ ),
+ c.i32_const(0xFF)
+ ),
+ REVTABLE,
+ 0
+ ),
+ c.i32_const(16)
+ ),
+ ),
+ c.i32_add(
+ c.i32_shl(
+ c.i32_load8_u(
+ c.i32_and(
+ c.i32_shr_u(
+ c.getLocal("x"),
+ c.i32_const(16)
+ ),
+ c.i32_const(0xFF)
+ ),
+ REVTABLE,
+ 0
+ ),
+ c.i32_const(8)
+ ),
+ c.i32_load8_u(
+ c.i32_and(
+ c.i32_shr_u(
+ c.getLocal("x"),
+ c.i32_const(24)
+ ),
+ c.i32_const(0xFF)
+ ),
+ REVTABLE,
+ 0
+ ),
+ )
+ ),
+ c.getLocal("bits")
+ )
+ );
+ }
+
+
+ function buildFFTJoin() {
+ const f = module.addFunction(prefix+"_fftJoin");
+ f.addParam("pBuff1", "i32");
+ f.addParam("pBuff2", "i32");
+ f.addParam("n", "i32");
+ f.addParam("first", "i32");
+ f.addParam("inc", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const W = c.i32_const(module.alloc(n8f));
+ const T = c.i32_const(module.alloc(n8g));
+ const U = c.i32_const(module.alloc(n8g));
+
+ f.addCode(
+ c.call( fPrefix + "_copy", c.getLocal("first"), W),
+ c.setLocal("i", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("i"),
+ c.getLocal("n")
+ )
+ ),
+
+ c.setLocal(
+ "idx1",
+ c.i32_add(
+ c.getLocal("pBuff1"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal(
+ "idx2",
+ c.i32_add(
+ c.getLocal("pBuff2"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx2"),
+ W,
+ T
+ ),
+
+ c.call(
+ gPrefix + "_copy",
+ c.getLocal("idx1"),
+ U
+ ),
+
+ c.call(
+ gPrefix + "_add",
+ U,
+ T,
+ c.getLocal("idx1"),
+ ),
+
+ c.call(
+ gPrefix + "_sub",
+ U,
+ T,
+ c.getLocal("idx2"),
+ ),
+
+ c.call(
+ fPrefix + "_mul",
+ W,
+ c.getLocal("inc"),
+ W,
+ ),
+
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+ }
+
+
+ function buildFFTJoinExt() {
+ const f = module.addFunction(prefix+"_fftJoinExt");
+ f.addParam("pBuff1", "i32");
+ f.addParam("pBuff2", "i32");
+ f.addParam("n", "i32");
+ f.addParam("first", "i32");
+ f.addParam("inc", "i32");
+ f.addParam("totalBits", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("pShiftToM", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const W = c.i32_const(module.alloc(n8f));
+ const U = c.i32_const(module.alloc(n8g));
+
+ f.addCode(
+
+ c.setLocal("pShiftToM",
+ c.i32_add(
+ c.i32_const(SHIFT_TO_M),
+ c.i32_mul(
+ c.getLocal("totalBits"),
+ c.i32_const(n8f)
+ )
+ )
+ ),
+
+
+ c.call( fPrefix + "_copy", c.getLocal("first"), W),
+ c.setLocal("i", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("i"),
+ c.getLocal("n")
+ )
+ ),
+
+ c.setLocal(
+ "idx1",
+ c.i32_add(
+ c.getLocal("pBuff1"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal(
+ "idx2",
+ c.i32_add(
+ c.getLocal("pBuff2"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.call(
+ gPrefix + "_add",
+ c.getLocal("idx1"),
+ c.getLocal("idx2"),
+ U
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx2"),
+ c.getLocal("pShiftToM"),
+ c.getLocal("idx2")
+ ),
+
+ c.call(
+ gPrefix + "_add",
+ c.getLocal("idx1"),
+ c.getLocal("idx2"),
+ c.getLocal("idx2")
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx2"),
+ W,
+ c.getLocal("idx2"),
+ ),
+
+ c.call(
+ gPrefix + "_copy",
+ U,
+ c.getLocal("idx1")
+ ),
+
+ c.call(
+ fPrefix + "_mul",
+ W,
+ c.getLocal("inc"),
+ W
+ ),
+
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+ }
+
+ function buildFFTJoinExtInv() {
+ const f = module.addFunction(prefix+"_fftJoinExtInv");
+ f.addParam("pBuff1", "i32");
+ f.addParam("pBuff2", "i32");
+ f.addParam("n", "i32");
+ f.addParam("first", "i32");
+ f.addParam("inc", "i32");
+ f.addParam("totalBits", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("pShiftToM", "i32");
+ f.addLocal("pSConst", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const W = c.i32_const(module.alloc(n8f));
+ const U = c.i32_const(module.alloc(n8g));
+
+ f.addCode(
+
+ c.setLocal("pShiftToM",
+ c.i32_add(
+ c.i32_const(SHIFT_TO_M),
+ c.i32_mul(
+ c.getLocal("totalBits"),
+ c.i32_const(n8f)
+ )
+ )
+ ),
+ c.setLocal("pSConst",
+ c.i32_add(
+ c.i32_const(SCONST),
+ c.i32_mul(
+ c.getLocal("totalBits"),
+ c.i32_const(n8f)
+ )
+ )
+ ),
+
+
+ c.call( fPrefix + "_copy", c.getLocal("first"), W),
+ c.setLocal("i", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("i"),
+ c.getLocal("n")
+ )
+ ),
+
+ c.setLocal(
+ "idx1",
+ c.i32_add(
+ c.getLocal("pBuff1"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal(
+ "idx2",
+ c.i32_add(
+ c.getLocal("pBuff2"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx2"),
+ W,
+ U
+ ),
+
+ c.call(
+ gPrefix + "_sub",
+ c.getLocal("idx1"),
+ U,
+ c.getLocal("idx2"),
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx2"),
+ c.getLocal("pSConst"),
+ c.getLocal("idx2")
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx1"),
+ c.getLocal("pShiftToM"),
+ c.getLocal("idx1")
+ ),
+
+ c.call(
+ gPrefix + "_sub",
+ U,
+ c.getLocal("idx1"),
+ c.getLocal("idx1")
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx1"),
+ c.getLocal("pSConst"),
+ c.getLocal("idx1")
+ ),
+
+ c.call(
+ fPrefix + "_mul",
+ W,
+ c.getLocal("inc"),
+ W
+ ),
+
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+ }
+
+
+
+ function buildPrepareLagrangeEvaluation() {
+ const f = module.addFunction(prefix+"_prepareLagrangeEvaluation");
+ f.addParam("pBuff1", "i32");
+ f.addParam("pBuff2", "i32");
+ f.addParam("n", "i32");
+ f.addParam("first", "i32");
+ f.addParam("inc", "i32");
+ f.addParam("totalBits", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("pShiftToM", "i32");
+ f.addLocal("pSConst", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const W = c.i32_const(module.alloc(n8f));
+ const U = c.i32_const(module.alloc(n8g));
+
+ f.addCode(
+
+ c.setLocal("pShiftToM",
+ c.i32_add(
+ c.i32_const(SHIFT_TO_M),
+ c.i32_mul(
+ c.getLocal("totalBits"),
+ c.i32_const(n8f)
+ )
+ )
+ ),
+ c.setLocal("pSConst",
+ c.i32_add(
+ c.i32_const(SCONST),
+ c.i32_mul(
+ c.getLocal("totalBits"),
+ c.i32_const(n8f)
+ )
+ )
+ ),
+
+
+ c.call( fPrefix + "_copy", c.getLocal("first"), W),
+ c.setLocal("i", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("i"),
+ c.getLocal("n")
+ )
+ ),
+
+ c.setLocal(
+ "idx1",
+ c.i32_add(
+ c.getLocal("pBuff1"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal(
+ "idx2",
+ c.i32_add(
+ c.getLocal("pBuff2"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx1"),
+ c.getLocal("pShiftToM"),
+ U
+ ),
+
+ c.call(
+ gPrefix + "_sub",
+ c.getLocal("idx2"),
+ U,
+ U
+ ),
+
+ c.call(
+ gPrefix + "_sub",
+ c.getLocal("idx1"),
+ c.getLocal("idx2"),
+ c.getLocal("idx2"),
+ ),
+
+ c.call(
+ opGtimesF,
+ U,
+ c.getLocal("pSConst"),
+ c.getLocal("idx1"),
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx2"),
+ W,
+ c.getLocal("idx2"),
+ ),
+
+ c.call(
+ fPrefix + "_mul",
+ W,
+ c.getLocal("inc"),
+ W
+ ),
+
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+ }
+
+ function buildFFTMix() {
+ const f = module.addFunction(prefix+"_fftMix");
+ f.addParam("pBuff", "i32");
+ f.addParam("n", "i32");
+ f.addParam("exp", "i32");
+ f.addLocal("nGroups", "i32");
+ f.addLocal("nPerGroup", "i32");
+ f.addLocal("nPerGroupDiv2", "i32");
+ f.addLocal("pairOffset", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("pwm", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const W = c.i32_const(module.alloc(n8f));
+ const T = c.i32_const(module.alloc(n8g));
+ const U = c.i32_const(module.alloc(n8g));
+
+ f.addCode(
+ c.setLocal("nPerGroup", c.i32_shl(c.i32_const(1), c.getLocal("exp"))),
+ c.setLocal("nPerGroupDiv2", c.i32_shr_u(c.getLocal("nPerGroup"), c.i32_const(1))),
+ c.setLocal("nGroups", c.i32_shr_u(c.getLocal("n"), c.getLocal("exp"))),
+ c.setLocal("pairOffset", c.i32_mul(c.getLocal("nPerGroupDiv2"), c.i32_const(n8g))),
+ c.setLocal("pwm",
+ c.i32_add(
+ c.i32_const(ROOTs),
+ c.i32_mul(
+ c.getLocal("exp"),
+ c.i32_const(n8f)
+ )
+ )
+ ),
+ c.setLocal("i", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("i"),
+ c.getLocal("nGroups")
+ )
+ ),
+ c.call( fPrefix + "_one", W),
+ c.setLocal("j", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("j"),
+ c.getLocal("nPerGroupDiv2")
+ )
+ ),
+
+ c.setLocal(
+ "idx1",
+ c.i32_add(
+ c.getLocal("pBuff"),
+ c.i32_mul(
+ c.i32_add(
+ c.i32_mul(
+ c.getLocal("i"),
+ c.getLocal("nPerGroup")
+ ),
+ c.getLocal("j")
+ ),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal(
+ "idx2",
+ c.i32_add(
+ c.getLocal("idx1"),
+ c.getLocal("pairOffset")
+ )
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx2"),
+ W,
+ T
+ ),
+
+ c.call(
+ gPrefix + "_copy",
+ c.getLocal("idx1"),
+ U
+ ),
+
+ c.call(
+ gPrefix + "_add",
+ U,
+ T,
+ c.getLocal("idx1"),
+ ),
+
+ c.call(
+ gPrefix + "_sub",
+ U,
+ T,
+ c.getLocal("idx2"),
+ ),
+
+ c.call(
+ fPrefix + "_mul",
+ W,
+ c.getLocal("pwm"),
+ W,
+ ),
+ c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))),
+ c.br(0)
+ )),
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+ }
+
+
+ // Reverse all and multiply by factor
+ function buildFFTFinal() {
+ const f = module.addFunction(prefix+"_fftFinal");
+ f.addParam("pBuff", "i32");
+ f.addParam("n", "i32");
+ f.addParam("factor", "i32");
+ f.addLocal("idx1", "i32");
+ f.addLocal("idx2", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("ndiv2", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const T = c.i32_const(module.alloc(n8g));
+
+ f.addCode(
+ c.setLocal("ndiv2", c.i32_shr_u(c.getLocal("n"), c.i32_const(1))),
+ c.if(
+ c.i32_and(
+ c.getLocal("n"),
+ c.i32_const(1)
+ ),
+ c.call(
+ opGtimesF,
+ c.i32_add(
+ c.getLocal("pBuff"),
+ c.i32_mul(
+ c.getLocal("ndiv2"),
+ c.i32_const(n8g)
+ )
+ ),
+ c.getLocal("factor"),
+ c.i32_add(
+ c.getLocal("pBuff"),
+ c.i32_mul(
+ c.getLocal("ndiv2"),
+ c.i32_const(n8g)
+ )
+ ),
+ ),
+ ),
+ c.setLocal("i", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_ge_u(
+ c.getLocal("i"),
+ c.getLocal("ndiv2")
+ )
+ ),
+
+ c.setLocal(
+ "idx1",
+ c.i32_add(
+ c.getLocal("pBuff"),
+ c.i32_mul(
+ c.getLocal("i"),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.setLocal(
+ "idx2",
+ c.i32_add(
+ c.getLocal("pBuff"),
+ c.i32_mul(
+ c.i32_sub(
+ c.i32_sub(
+ c.getLocal("n"),
+ c.i32_const(1)
+ ),
+ c.getLocal("i")
+ ),
+ c.i32_const(n8g)
+ )
+ )
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx2"),
+ c.getLocal("factor"),
+ T
+ ),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("idx1"),
+ c.getLocal("factor"),
+ c.getLocal("idx2"),
+ ),
+
+ c.call(
+ gPrefix + "_copy",
+ T,
+ c.getLocal("idx1"),
+ ),
+
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+ }
+
+ buildRev();
+ buildReversePermutation();
+ buildFinalInverse();
+ buildRawFFT();
+ buildLog2();
+ buildFFT();
+ buildIFFT();
+ buildFFTJoin();
+ buildFFTJoinExt();
+ buildFFTJoinExtInv();
+ buildFFTMix();
+ buildFFTFinal();
+ buildPrepareLagrangeEvaluation();
+
+ module.exportFunction(prefix+"_fft");
+ module.exportFunction(prefix+"_ifft");
+ module.exportFunction(prefix+"_rawfft");
+ module.exportFunction(prefix+"_fftJoin");
+ module.exportFunction(prefix+"_fftJoinExt");
+ module.exportFunction(prefix+"_fftJoinExtInv");
+ module.exportFunction(prefix+"_fftMix");
+ module.exportFunction(prefix+"_fftFinal");
+ module.exportFunction(prefix+"_prepareLagrangeEvaluation");
+
+ };
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+ var build_pol = function buildPol(module, prefix, prefixField) {
+
+ const n64 = module.modules[prefixField].n64;
+ const n8 = n64*8;
+
+
+ function buildZero() {
+ const f = module.addFunction(prefix+"_zero");
+ f.addParam("px", "i32");
+ f.addParam("n", "i32");
+ f.addLocal("lastp", "i32");
+ f.addLocal("p", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.setLocal("p", c.getLocal("px")),
+ c.setLocal(
+ "lastp",
+ c.i32_add(
+ c.getLocal("px"),
+ c.i32_mul(
+ c.getLocal("n"),
+ c.i32_const(n8)
+ )
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("p"),
+ c.getLocal("lastp")
+ )
+ ),
+ c.call(prefixField + "_zero", c.getLocal("p")),
+ c.setLocal("p", c.i32_add(c.getLocal("p"), c.i32_const(n8))),
+ c.br(0)
+ ))
+ );
+ }
+
+ function buildConstructLC() {
+ const f = module.addFunction(prefix+"_constructLC");
+ f.addParam("ppolynomials", "i32");
+ f.addParam("psignals", "i32");
+ f.addParam("nSignals", "i32");
+ f.addParam("pres", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("j", "i32");
+ f.addLocal("pp", "i32");
+ f.addLocal("ps", "i32");
+ f.addLocal("pd", "i32");
+ f.addLocal("ncoefs", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const aux = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+ c.setLocal("i", c.i32_const(0)),
+ c.setLocal("pp", c.getLocal("ppolynomials")),
+ c.setLocal("ps", c.getLocal("psignals")),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("i"),
+ c.getLocal("nSignals")
+ )
+ ),
+
+ c.setLocal("ncoefs", c.i32_load(c.getLocal("pp"))),
+ c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(4))),
+
+ c.setLocal("j", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("j"),
+ c.getLocal("ncoefs")
+ )
+ ),
+
+ c.setLocal(
+ "pd",
+ c.i32_add(
+ c.getLocal("pres"),
+ c.i32_mul(
+ c.i32_load(c.getLocal("pp")),
+ c.i32_const(n8)
+ )
+ )
+ ),
+
+ c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(4))),
+
+
+ c.call(
+ prefixField + "_mul",
+ c.getLocal("ps"),
+ c.getLocal("pp"),
+ aux
+ ),
+
+ c.call(
+ prefixField + "_add",
+ aux,
+ c.getLocal("pd"),
+ c.getLocal("pd")
+ ),
+
+ c.setLocal("pp", c.i32_add(c.getLocal("pp"), c.i32_const(n8))),
+ c.setLocal("j", c.i32_add(c.getLocal("j"), c.i32_const(1))),
+ c.br(0)
+ )),
+
+ c.setLocal("ps", c.i32_add(c.getLocal("ps"), c.i32_const(n8))),
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+
+ }
+
+ buildZero();
+ buildConstructLC();
+
+
+ module.exportFunction(prefix + "_zero");
+ module.exportFunction(prefix + "_constructLC");
+
+ return prefix;
+
+
+
+
+ };
+
+ var build_qap = function buildQAP(module, prefix, prefixField) {
+
+ const n64 = module.modules[prefixField].n64;
+ const n8 = n64*8;
+
+
+ function buildBuildABC() {
+ const f = module.addFunction(prefix+"_buildABC");
+ f.addParam("pCoefs", "i32");
+ f.addParam("nCoefs", "i32");
+ f.addParam("pWitness", "i32");
+ f.addParam("pA", "i32");
+ f.addParam("pB", "i32");
+ f.addParam("pC", "i32");
+ f.addParam("offsetOut", "i32");
+ f.addParam("nOut", "i32");
+ f.addParam("offsetWitness", "i32");
+ f.addParam("nWitness", "i32");
+ f.addLocal("it", "i32");
+ f.addLocal("ita", "i32");
+ f.addLocal("itb", "i32");
+ f.addLocal("last", "i32");
+ f.addLocal("m", "i32");
+ f.addLocal("c", "i32");
+ f.addLocal("s", "i32");
+ f.addLocal("pOut", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const aux = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+
+ // Set output a and b to 0
+ c.setLocal("ita", c.getLocal("pA")),
+ c.setLocal("itb", c.getLocal("pB")),
+ c.setLocal(
+ "last",
+ c.i32_add(
+ c.getLocal("pA"),
+ c.i32_mul(
+ c.getLocal("nOut"),
+ c.i32_const(n8)
+ )
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("ita"),
+ c.getLocal("last")
+ )
+ ),
+ c.call(prefixField + "_zero", c.getLocal("ita")),
+ c.call(prefixField + "_zero", c.getLocal("itb")),
+ c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))),
+ c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))),
+ c.br(0)
+ )),
+
+
+ c.setLocal("it", c.getLocal("pCoefs")),
+ c.setLocal(
+ "last",
+ c.i32_add(
+ c.getLocal("pCoefs"),
+ c.i32_mul(
+ c.getLocal("nCoefs"),
+ c.i32_const(n8+12)
+ )
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("it"),
+ c.getLocal("last")
+ )
+ ),
+ c.setLocal(
+ "s",
+ c.i32_load(c.getLocal("it"), 8)
+ ),
+ c.if(
+ c.i32_or(
+ c.i32_lt_u(
+ c.getLocal("s"),
+ c.getLocal("offsetWitness"),
+ ),
+ c.i32_ge_u(
+ c.getLocal("s"),
+ c.i32_add(
+ c.getLocal("offsetWitness"),
+ c.getLocal("nWitness"),
+ )
+ )
+ ),
+ [
+ ...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8+12))),
+ ...c.br(1)
+ ]
+ ),
+
+ c.setLocal(
+ "m",
+ c.i32_load(c.getLocal("it"))
+ ),
+ c.if(
+ c.i32_eq(c.getLocal("m"), c.i32_const(0)),
+ c.setLocal("pOut", c.getLocal("pA")),
+ c.if(
+ c.i32_eq(c.getLocal("m"), c.i32_const(1)),
+ c.setLocal("pOut", c.getLocal("pB")),
+ [
+ ...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8+12))),
+ ...c.br(1)
+ ]
+ )
+ ),
+ c.setLocal(
+ "c",
+ c.i32_load(c.getLocal("it"), 4)
+ ),
+ c.if(
+ c.i32_or(
+ c.i32_lt_u(
+ c.getLocal("c"),
+ c.getLocal("offsetOut"),
+ ),
+ c.i32_ge_u(
+ c.getLocal("c"),
+ c.i32_add(
+ c.getLocal("offsetOut"),
+ c.getLocal("nOut"),
+ )
+ )
+ ),
+ [
+ ...c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8+12))),
+ ...c.br(1)
+ ]
+ ),
+ c.setLocal(
+ "pOut",
+ c.i32_add(
+ c.getLocal("pOut"),
+ c.i32_mul(
+ c.i32_sub(
+ c.getLocal("c"),
+ c.getLocal("offsetOut")
+ ),
+ c.i32_const(n8)
+ )
+ )
+ ),
+ c.call(
+ prefixField + "_mul",
+ c.i32_add(
+ c.getLocal("pWitness"),
+ c.i32_mul(
+ c.i32_sub(c.getLocal("s"), c.getLocal("offsetWitness")),
+ c.i32_const(n8)
+ )
+ ),
+ c.i32_add( c.getLocal("it"), c.i32_const(12)),
+ aux
+ ),
+ c.call(
+ prefixField + "_add",
+ c.getLocal("pOut"),
+ aux,
+ c.getLocal("pOut"),
+ ),
+ c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8+12))),
+ c.br(0)
+ )),
+
+ c.setLocal("ita", c.getLocal("pA")),
+ c.setLocal("itb", c.getLocal("pB")),
+ c.setLocal("it", c.getLocal("pC")),
+ c.setLocal(
+ "last",
+ c.i32_add(
+ c.getLocal("pA"),
+ c.i32_mul(
+ c.getLocal("nOut"),
+ c.i32_const(n8)
+ )
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("ita"),
+ c.getLocal("last")
+ )
+ ),
+ c.call(
+ prefixField + "_mul",
+ c.getLocal("ita"),
+ c.getLocal("itb"),
+ c.getLocal("it")
+ ),
+ c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))),
+ c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))),
+ c.setLocal("it", c.i32_add(c.getLocal("it"), c.i32_const(n8))),
+ c.br(0)
+ )),
+
+ );
+ }
+
+ function buildJoinABC() {
+ const f = module.addFunction(prefix+"_joinABC");
+ f.addParam("pA", "i32");
+ f.addParam("pB", "i32");
+ f.addParam("pC", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pP", "i32");
+ f.addLocal("ita", "i32");
+ f.addLocal("itb", "i32");
+ f.addLocal("itc", "i32");
+ f.addLocal("itp", "i32");
+ f.addLocal("last", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const aux = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+ c.setLocal("ita", c.getLocal("pA")),
+ c.setLocal("itb", c.getLocal("pB")),
+ c.setLocal("itc", c.getLocal("pC")),
+ c.setLocal("itp", c.getLocal("pP")),
+ c.setLocal(
+ "last",
+ c.i32_add(
+ c.getLocal("pA"),
+ c.i32_mul(
+ c.getLocal("n"),
+ c.i32_const(n8)
+ )
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("ita"),
+ c.getLocal("last")
+ )
+ ),
+ c.call(
+ prefixField + "_mul",
+ c.getLocal("ita"),
+ c.getLocal("itb"),
+ aux
+ ),
+ c.call(
+ prefixField + "_sub",
+ aux,
+ c.getLocal("itc"),
+ c.getLocal("itp"),
+ ),
+ c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))),
+ c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))),
+ c.setLocal("itc", c.i32_add(c.getLocal("itc"), c.i32_const(n8))),
+ c.setLocal("itp", c.i32_add(c.getLocal("itp"), c.i32_const(n8))),
+ c.br(0)
+ ))
+ );
+ }
+
+ function buildBatchAdd() {
+ const f = module.addFunction(prefix+"_batchAdd");
+ f.addParam("pa", "i32");
+ f.addParam("pb", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pr", "i32");
+ f.addLocal("ita", "i32");
+ f.addLocal("itb", "i32");
+ f.addLocal("itr", "i32");
+ f.addLocal("last", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.setLocal("ita", c.getLocal("pa")),
+ c.setLocal("itb", c.getLocal("pb")),
+ c.setLocal("itr", c.getLocal("pr")),
+ c.setLocal(
+ "last",
+ c.i32_add(
+ c.getLocal("pa"),
+ c.i32_mul(
+ c.getLocal("n"),
+ c.i32_const(n8)
+ )
+ )
+ ),
+ c.block(c.loop(
+ c.br_if(
+ 1,
+ c.i32_eq(
+ c.getLocal("ita"),
+ c.getLocal("last")
+ )
+ ),
+ c.call(
+ prefixField + "_add",
+ c.getLocal("ita"),
+ c.getLocal("itb"),
+ c.getLocal("itr"),
+ ),
+ c.setLocal("ita", c.i32_add(c.getLocal("ita"), c.i32_const(n8))),
+ c.setLocal("itb", c.i32_add(c.getLocal("itb"), c.i32_const(n8))),
+ c.setLocal("itr", c.i32_add(c.getLocal("itr"), c.i32_const(n8))),
+ c.br(0)
+ ))
+ );
+ }
+
+ buildBuildABC();
+ buildJoinABC();
+ buildBatchAdd();
+
+ module.exportFunction(prefix + "_buildABC");
+ module.exportFunction(prefix + "_joinABC");
+ module.exportFunction(prefix + "_batchAdd");
+
+ return prefix;
+
+ };
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmsnark (Web Assembly zkSnark Prover).
+
+ wasmsnark is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmsnark is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmsnark. If not, see .
+ */
+
+ var build_applykey = function buildApplyKey(module, fnName, gPrefix, frPrefix, sizeGIn, sizeGOut, sizeF, opGtimesF) {
+
+ const f = module.addFunction(fnName);
+ f.addParam("pIn", "i32");
+ f.addParam("n", "i32");
+ f.addParam("pFirst", "i32");
+ f.addParam("pInc", "i32");
+ f.addParam("pOut", "i32");
+ f.addLocal("pOldFree", "i32");
+ f.addLocal("i", "i32");
+ f.addLocal("pFrom", "i32");
+ f.addLocal("pTo", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const t = c.i32_const(module.alloc(sizeF));
+
+ f.addCode(
+ c.setLocal("pFrom", c.getLocal("pIn")),
+ c.setLocal("pTo", c.getLocal("pOut")),
+ );
+
+ // t = first
+ f.addCode(
+ c.call(
+ frPrefix + "_copy",
+ c.getLocal("pFirst"),
+ t
+ )
+ );
+ f.addCode(
+ c.setLocal("i", c.i32_const(0)),
+ c.block(c.loop(
+ c.br_if(1, c.i32_eq ( c.getLocal("i"), c.getLocal("n") )),
+
+ c.call(
+ opGtimesF,
+ c.getLocal("pFrom"),
+ t,
+ c.getLocal("pTo")
+ ),
+ c.setLocal("pFrom", c.i32_add(c.getLocal("pFrom"), c.i32_const(sizeGIn))),
+ c.setLocal("pTo", c.i32_add(c.getLocal("pTo"), c.i32_const(sizeGOut))),
+
+ // t = t* inc
+ c.call(
+ frPrefix + "_mul",
+ t,
+ c.getLocal("pInc"),
+ t
+ ),
+ c.setLocal("i", c.i32_add(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+
+ module.exportFunction(fnName);
+
+ };
+
+ var build_bn128 = function buildBN128(module, _prefix) {
+
+ const prefix = _prefix || "bn128";
+
+ if (module.modules[prefix]) return prefix; // already builded
+
+ const q = BigInteger("21888242871839275222246405745257275088696311157297823662689037894645226208583");
+ const r = BigInteger("21888242871839275222246405745257275088548364400416034343698204186575808495617");
+
+
+ const n64 = Math.floor((q.minus(1).bitLength() - 1)/64) +1;
+ const n8 = n64*8;
+ const frsize = n8;
+ const f1size = n8;
+ const f2size = f1size * 2;
+ const ftsize = f1size * 12;
+
+ const pr = module.alloc(utils$3.bigInt2BytesLE( r, frsize ));
+
+ const f1mPrefix = build_f1m(module, q, "f1m");
+ build_f1(module, r, "fr", "frm");
+
+ const pG1b = module.alloc(utils$3.bigInt2BytesLE( toMontgomery(BigInteger(3)), f1size ));
+ const g1mPrefix = build_curve_jacobian_a0(module, "g1m", "f1m", pG1b);
+
+ build_fft(module, "frm", "frm", "frm", "frm_mul");
+
+ build_pol(module, "pol", "frm");
+ build_qap(module, "qap", "frm");
+
+ const f2mPrefix = build_f2m(module, "f1m_neg", "f2m", "f1m");
+ const pG2b = module.alloc([
+ ...utils$3.bigInt2BytesLE( toMontgomery(BigInteger("19485874751759354771024239261021720505790618469301721065564631296452457478373")), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(BigInteger("266929791119991161246907387137283842545076965332900288569378510910307636690")), f1size )
+ ]);
+ const g2mPrefix = build_curve_jacobian_a0(module, "g2m", "f2m", pG2b);
+
+
+ function buildGTimesFr(fnName, opMul) {
+ const f = module.addFunction(fnName);
+ f.addParam("pG", "i32");
+ f.addParam("pFr", "i32");
+ f.addParam("pr", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const AUX = c.i32_const(module.alloc(n8));
+
+ f.addCode(
+ c.call("frm_fromMontgomery", c.getLocal("pFr"), AUX),
+ c.call(
+ opMul,
+ c.getLocal("pG"),
+ AUX,
+ c.i32_const(n8),
+ c.getLocal("pr")
+ )
+ );
+
+ module.exportFunction(fnName);
+ }
+ buildGTimesFr("g1m_timesFr", "g1m_timesScalar");
+ build_fft(module, "g1m", "g1m", "frm", "g1m_timesFr");
+
+ buildGTimesFr("g2m_timesFr", "g2m_timesScalar");
+ build_fft(module, "g2m", "g2m", "frm", "g2m_timesFr");
+
+ buildGTimesFr("g1m_timesFrAffine", "g1m_timesScalarAffine");
+ buildGTimesFr("g2m_timesFrAffine", "g2m_timesScalarAffine");
+
+ build_applykey(module, "frm_batchApplyKey", "fmr", "frm", n8, n8, n8, "frm_mul");
+ build_applykey(module, "g1m_batchApplyKey", "g1m", "frm", n8*3, n8*3, n8, "g1m_timesFr");
+ build_applykey(module, "g1m_batchApplyKeyMixed", "g1m", "frm", n8*2, n8*3, n8, "g1m_timesFrAffine");
+ build_applykey(module, "g2m_batchApplyKey", "g2m", "frm", n8*2*3, n8*3*2, n8, "g2m_timesFr");
+ build_applykey(module, "g2m_batchApplyKeyMixed", "g2m", "frm", n8*2*2, n8*3*2, n8, "g2m_timesFrAffine");
+
+ function toMontgomery(a) {
+ return BigInteger(a).times( BigInteger.one.shiftLeft(f1size*8)).mod(q);
+ }
+
+ const G1gen = [
+ BigInteger("1"),
+ BigInteger("2"),
+ BigInteger.one
+ ];
+
+ const pG1gen = module.alloc(
+ [
+ ...utils$3.bigInt2BytesLE( toMontgomery(G1gen[0]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G1gen[1]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G1gen[2]), f1size ),
+ ]
+ );
+
+ const G1zero = [
+ BigInteger.zero,
+ BigInteger.one,
+ BigInteger.zero
+ ];
+
+ const pG1zero = module.alloc(
+ [
+ ...utils$3.bigInt2BytesLE( toMontgomery(G1zero[0]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G1zero[1]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G1zero[2]), f1size )
+ ]
+ );
+
+ const G2gen = [
+ [
+ BigInteger("10857046999023057135944570762232829481370756359578518086990519993285655852781"),
+ BigInteger("11559732032986387107991004021392285783925812861821192530917403151452391805634"),
+ ],[
+ BigInteger("8495653923123431417604973247489272438418190587263600148770280649306958101930"),
+ BigInteger("4082367875863433681332203403145435568316851327593401208105741076214120093531"),
+ ],[
+ BigInteger.one,
+ BigInteger.zero,
+ ]
+ ];
+
+ const pG2gen = module.alloc(
+ [
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2gen[0][0]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2gen[0][1]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2gen[1][0]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2gen[1][1]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2gen[2][0]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2gen[2][1]), f1size ),
+ ]
+ );
+
+ const G2zero = [
+ [
+ BigInteger.zero,
+ BigInteger.zero,
+ ],[
+ BigInteger.one,
+ BigInteger.zero,
+ ],[
+ BigInteger.zero,
+ BigInteger.zero,
+ ]
+ ];
+
+ const pG2zero = module.alloc(
+ [
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2zero[0][0]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2zero[0][1]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2zero[1][0]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2zero[1][1]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2zero[2][0]), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(G2zero[2][1]), f1size ),
+ ]
+ );
+
+ const pOneT = module.alloc([
+ ...utils$3.bigInt2BytesLE( toMontgomery(1), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(0), f1size ),
+ ]);
+
+ const pNonResidueF6 = module.alloc([
+ ...utils$3.bigInt2BytesLE( toMontgomery(9), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery(1), f1size ),
+ ]);
+
+ const pTwoInv = module.alloc([
+ ...utils$3.bigInt2BytesLE( toMontgomery( BigInteger(2).modInv(q)), f1size ),
+ ...utils$3.bigInt2BytesLE( BigInteger(0), f1size )
+ ]);
+
+ const pAltBn128Twist = pNonResidueF6;
+
+ const pTwistCoefB = module.alloc([
+ ...utils$3.bigInt2BytesLE( toMontgomery("19485874751759354771024239261021720505790618469301721065564631296452457478373"), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery("266929791119991161246907387137283842545076965332900288569378510910307636690"), f1size ),
+ ]);
+
+ function build_mulNR6() {
+ const f = module.addFunction(prefix + "_mulNR6");
+ f.addParam("x", "i32");
+ f.addParam("pr", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.call(
+ f2mPrefix + "_mul",
+ c.i32_const(pNonResidueF6),
+ c.getLocal("x"),
+ c.getLocal("pr")
+ )
+ );
+ }
+ build_mulNR6();
+
+ const f6mPrefix = build_f3m(module, prefix+"_mulNR6", "f6m", "f2m");
+
+ function build_mulNR12() {
+ const f = module.addFunction(prefix + "_mulNR12");
+ f.addParam("x", "i32");
+ f.addParam("pr", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.call(
+ f2mPrefix + "_mul",
+ c.i32_const(pNonResidueF6),
+ c.i32_add(c.getLocal("x"), c.i32_const(n8*4)),
+ c.getLocal("pr")
+ ),
+ c.call(
+ f2mPrefix + "_copy",
+ c.getLocal("x"),
+ c.i32_add(c.getLocal("pr"), c.i32_const(n8*2)),
+ ),
+ c.call(
+ f2mPrefix + "_copy",
+ c.i32_add(c.getLocal("x"), c.i32_const(n8*2)),
+ c.i32_add(c.getLocal("pr"), c.i32_const(n8*4)),
+ )
+ );
+ }
+ build_mulNR12();
+
+ const ftmPrefix = build_f2m(module, prefix+"_mulNR12", "ftm", f6mPrefix);
+
+
+ const ateLoopCount = BigInteger("29793968203157093288");
+ const ateLoopBitBytes = bits(ateLoopCount);
+ const pAteLoopBitBytes = module.alloc(ateLoopBitBytes);
+
+ const ateCoefSize = 3 * f2size;
+ const ateNDblCoefs = ateLoopBitBytes.length-1;
+ const ateNAddCoefs = ateLoopBitBytes.reduce((acc, b) => acc + ( b!=0 ? 1 : 0) ,0);
+ const ateNCoefs = ateNAddCoefs + ateNDblCoefs + 1;
+ const prePSize = 3*2*n8;
+ const preQSize = 3*n8*2 + ateNCoefs*ateCoefSize;
+
+
+ module.modules[prefix] = {
+ n64: n64,
+ pG1gen: pG1gen,
+ pG1zero: pG1zero,
+ pG1b: pG1b,
+ pG2gen: pG2gen,
+ pG2zero: pG2zero,
+ pG2b: pG2b,
+ pq: module.modules["f1m"].pq,
+ pr: pr,
+ pOneT: pOneT,
+ prePSize: prePSize,
+ preQSize: preQSize,
+ r: r.toString(),
+ q: q.toString()
+ };
+
+ // console.log("PrePSize: " +prePSize);
+ // console.log("PreQSize: " +preQSize);
+
+ const finalExpZ = BigInteger("4965661367192848881");
+
+ function naf(n) {
+ let E = n;
+ const res = [];
+ while (E.gt(BigInteger.zero)) {
+ if (E.isOdd()) {
+ const z = 2 - E.mod(4).toJSNumber();
+ res.push( z );
+ E = E.minus(z);
+ } else {
+ res.push( 0 );
+ }
+ E = E.shiftRight(1);
+ }
+ return res;
+ }
+
+ function bits(n) {
+ let E = n;
+ const res = [];
+ while (E.gt(BigInteger.zero)) {
+ if (E.isOdd()) {
+ res.push( 1 );
+ } else {
+ res.push( 0 );
+ }
+ E = E.shiftRight(1);
+ }
+ return res;
+ }
+
+ function buildPrepareG1() {
+ const f = module.addFunction(prefix+ "_prepareG1");
+ f.addParam("pP", "i32");
+ f.addParam("ppreP", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.call(g1mPrefix + "_normalize", c.getLocal("pP"), c.getLocal("ppreP")), // TODO Remove if already in affine
+ );
+ }
+
+ function buildPrepAddStep() {
+ const f = module.addFunction(prefix+ "_prepAddStep");
+ f.addParam("pQ", "i32");
+ f.addParam("pR", "i32");
+ f.addParam("pCoef", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const X2 = c.getLocal("pQ");
+ const Y2 = c.i32_add(c.getLocal("pQ"), c.i32_const(f2size));
+
+ const X1 = c.getLocal("pR");
+ const Y1 = c.i32_add(c.getLocal("pR"), c.i32_const(f2size));
+ const Z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2*f2size));
+
+ const ELL_0 = c.getLocal("pCoef");
+ const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size));
+ const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2*f2size));
+
+ const D = ELL_VW;
+ const E = c.i32_const(module.alloc(f2size));
+ const F = c.i32_const(module.alloc(f2size));
+ const G = c.i32_const(module.alloc(f2size));
+ const H = c.i32_const(module.alloc(f2size));
+ const I = c.i32_const(module.alloc(f2size));
+ const J = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+
+ f.addCode(
+ // D = X1 - X2*Z1
+ c.call(f2mPrefix + "_mul", X2, Z1, D),
+ c.call(f2mPrefix + "_sub", X1, D, D),
+
+ // E = Y1 - Y2*Z1
+ c.call(f2mPrefix + "_mul", Y2, Z1, E),
+ c.call(f2mPrefix + "_sub", Y1, E, E),
+
+ // F = D^2
+ c.call(f2mPrefix + "_square", D, F),
+
+ // G = E^2
+ c.call(f2mPrefix + "_square", E, G),
+
+ // H = D*F
+ c.call(f2mPrefix + "_mul", D, F, H),
+
+ // I = X1 * F
+ c.call(f2mPrefix + "_mul", X1, F, I),
+
+ // J = H + Z1*G - (I+I)
+ c.call(f2mPrefix + "_add", I, I, AUX),
+ c.call(f2mPrefix + "_mul", Z1, G, J),
+ c.call(f2mPrefix + "_add", H, J, J),
+ c.call(f2mPrefix + "_sub", J, AUX, J),
+
+
+ // X3 (X1) = D*J
+ c.call(f2mPrefix + "_mul", D, J, X1),
+
+ // Y3 (Y1) = E*(I-J)-(H*Y1)
+ c.call(f2mPrefix + "_mul", H, Y1, Y1),
+ c.call(f2mPrefix + "_sub", I, J, AUX),
+ c.call(f2mPrefix + "_mul", E, AUX, AUX),
+ c.call(f2mPrefix + "_sub", AUX, Y1, Y1),
+
+ // Z3 (Z1) = Z1*H
+ c.call(f2mPrefix + "_mul", Z1, H, Z1),
+
+ // ell_0 = xi * (E * X2 - D * Y2)
+ c.call(f2mPrefix + "_mul", D, Y2, AUX),
+ c.call(f2mPrefix + "_mul", E, X2, ELL_0),
+ c.call(f2mPrefix + "_sub", ELL_0, AUX, ELL_0),
+ c.call(f2mPrefix + "_mul", ELL_0, c.i32_const(pAltBn128Twist), ELL_0),
+
+
+ // ell_VV = - E (later: * xP)
+ c.call(f2mPrefix + "_neg", E, ELL_VV),
+
+ // ell_VW = D (later: * yP )
+ // Already assigned
+
+ );
+ }
+
+
+
+ function buildPrepDoubleStep() {
+ const f = module.addFunction(prefix+ "_prepDblStep");
+ f.addParam("pR", "i32");
+ f.addParam("pCoef", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const X1 = c.getLocal("pR");
+ const Y1 = c.i32_add(c.getLocal("pR"), c.i32_const(f2size));
+ const Z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2*f2size));
+
+ const ELL_0 = c.getLocal("pCoef");
+ const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size));
+ const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2*f2size));
+
+ const A = c.i32_const(module.alloc(f2size));
+ const B = c.i32_const(module.alloc(f2size));
+ const C = c.i32_const(module.alloc(f2size));
+ const D = c.i32_const(module.alloc(f2size));
+ const E = c.i32_const(module.alloc(f2size));
+ const F = c.i32_const(module.alloc(f2size));
+ const G = c.i32_const(module.alloc(f2size));
+ const H = c.i32_const(module.alloc(f2size));
+ const I = c.i32_const(module.alloc(f2size));
+ const J = c.i32_const(module.alloc(f2size));
+ const E2 = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+
+ f.addCode(
+
+ // A = X1 * Y1 / 2
+ c.call(f2mPrefix + "_mul", Y1, c.i32_const(pTwoInv), A),
+ c.call(f2mPrefix + "_mul", X1, A, A),
+
+ // B = Y1^2
+ c.call(f2mPrefix + "_square", Y1, B),
+
+ // C = Z1^2
+ c.call(f2mPrefix + "_square", Z1, C),
+
+ // D = 3 * C
+ c.call(f2mPrefix + "_add", C, C, D),
+ c.call(f2mPrefix + "_add", D, C, D),
+
+ // E = twist_b * D
+ c.call(f2mPrefix + "_mul", c.i32_const(pTwistCoefB), D, E),
+
+ // F = 3 * E
+ c.call(f2mPrefix + "_add", E, E, F),
+ c.call(f2mPrefix + "_add", E, F, F),
+
+ // G = (B+F)/2
+ c.call(f2mPrefix + "_add", B, F, G),
+ c.call(f2mPrefix + "_mul", G, c.i32_const(pTwoInv), G),
+
+ // H = (Y1+Z1)^2-(B+C)
+ c.call(f2mPrefix + "_add", B, C, AUX),
+ c.call(f2mPrefix + "_add", Y1, Z1, H),
+ c.call(f2mPrefix + "_square", H, H),
+ c.call(f2mPrefix + "_sub", H, AUX, H),
+
+ // I = E-B
+ c.call(f2mPrefix + "_sub", E, B, I),
+
+ // J = X1^2
+ c.call(f2mPrefix + "_square", X1, J),
+
+ // E_squared = E^2
+ c.call(f2mPrefix + "_square", E, E2),
+
+ // X3 (X1) = A * (B-F)
+ c.call(f2mPrefix + "_sub", B, F, AUX),
+ c.call(f2mPrefix + "_mul", A, AUX, X1),
+
+ // Y3 (Y1) = G^2 - 3*E^2
+ c.call(f2mPrefix + "_add", E2, E2, AUX),
+ c.call(f2mPrefix + "_add", E2, AUX, AUX),
+ c.call(f2mPrefix + "_square", G, Y1),
+ c.call(f2mPrefix + "_sub", Y1, AUX, Y1),
+
+ // Z3 (Z1) = B * H
+ c.call(f2mPrefix + "_mul", B, H, Z1),
+
+ // ell_0 = xi * I
+ c.call(f2mPrefix + "_mul", c.i32_const(pAltBn128Twist), I, ELL_0),
+
+ // ell_VW = - H (later: * yP)
+ c.call(f2mPrefix + "_neg", H, ELL_VW),
+
+ // ell_VV = 3*J (later: * xP)
+ c.call(f2mPrefix + "_add", J, J, ELL_VV),
+ c.call(f2mPrefix + "_add", J, ELL_VV, ELL_VV),
+
+ );
+ }
+
+ function buildMulByQ() {
+ const f = module.addFunction(prefix + "_mulByQ");
+ f.addParam("p1", "i32");
+ f.addParam("pr", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x = c.getLocal("p1");
+ const y = c.i32_add(c.getLocal("p1"), c.i32_const(f2size));
+ const z = c.i32_add(c.getLocal("p1"), c.i32_const(f2size*2));
+ const x3 = c.getLocal("pr");
+ const y3 = c.i32_add(c.getLocal("pr"), c.i32_const(f2size));
+ const z3 = c.i32_add(c.getLocal("pr"), c.i32_const(f2size*2));
+
+ const MulByQX = c.i32_const(module.alloc([
+ ...utils$3.bigInt2BytesLE( toMontgomery("21575463638280843010398324269430826099269044274347216827212613867836435027261"), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery("10307601595873709700152284273816112264069230130616436755625194854815875713954"), f1size ),
+ ]));
+
+ const MulByQY = c.i32_const(module.alloc([
+ ...utils$3.bigInt2BytesLE( toMontgomery("2821565182194536844548159561693502659359617185244120367078079554186484126554"), f1size ),
+ ...utils$3.bigInt2BytesLE( toMontgomery("3505843767911556378687030309984248845540243509899259641013678093033130930403"), f1size ),
+ ]));
+
+ f.addCode(
+ // The frobeniusMap(1) in this field, is the conjugate
+ c.call(f2mPrefix + "_conjugate", x, x3),
+ c.call(f2mPrefix + "_mul", MulByQX, x3, x3),
+ c.call(f2mPrefix + "_conjugate", y, y3),
+ c.call(f2mPrefix + "_mul", MulByQY, y3, y3),
+ c.call(f2mPrefix + "_conjugate", z, z3),
+ );
+ }
+
+
+ function buildPrepareG2() {
+ buildMulByQ();
+ const f = module.addFunction(prefix+ "_prepareG2");
+ f.addParam("pQ", "i32");
+ f.addParam("ppreQ", "i32");
+ f.addLocal("pCoef", "i32");
+ f.addLocal("i", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const QX = c.getLocal("pQ");
+ c.i32_add( c.getLocal("pQ"), c.i32_const(f2size));
+ c.i32_add( c.getLocal("pQ"), c.i32_const(f2size*2));
+
+ const pR = module.alloc(f2size*3);
+ const R = c.i32_const(pR);
+ const RX = c.i32_const(pR);
+ const RY = c.i32_const(pR+f2size);
+ const RZ = c.i32_const(pR+2*f2size);
+
+ const cQX = c.i32_add( c.getLocal("ppreQ"), c.i32_const(0));
+ const cQY = c.i32_add( c.getLocal("ppreQ"), c.i32_const(f2size));
+ c.i32_add( c.getLocal("ppreQ"), c.i32_const(f2size*2));
+
+ const pQ1 = module.alloc(f2size*3);
+ const Q1 = c.i32_const(pQ1);
+
+ const pQ2 = module.alloc(f2size*3);
+ const Q2 = c.i32_const(pQ2);
+ c.i32_const(pQ2);
+ const Q2Y = c.i32_const(pQ2 + f2size);
+ c.i32_const(pQ2 + f2size*2);
+
+ f.addCode(
+ c.call(g2mPrefix + "_normalize", QX, cQX), // TODO Remove if already in affine
+ c.call(f2mPrefix + "_copy", cQX, RX),
+ c.call(f2mPrefix + "_copy", cQY, RY),
+ c.call(f2mPrefix + "_one", RZ),
+ );
+
+ f.addCode(
+ c.setLocal("pCoef", c.i32_add( c.getLocal("ppreQ"), c.i32_const(f2size*3))),
+ c.setLocal("i", c.i32_const(ateLoopBitBytes.length-2)),
+ c.block(c.loop(
+
+ c.call(prefix + "_prepDblStep", R, c.getLocal("pCoef")),
+ c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+
+ c.if(
+ c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes),
+ [
+ ...c.call(prefix + "_prepAddStep", cQX, R, c.getLocal("pCoef")),
+ ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+ ]
+ ),
+ c.br_if(1, c.i32_eqz ( c.getLocal("i") )),
+ c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+
+ f.addCode(
+ c.call(prefix + "_mulByQ", cQX, Q1),
+ c.call(prefix + "_mulByQ", Q1, Q2)
+ );
+
+ f.addCode(
+ c.call(f2mPrefix + "_neg", Q2Y, Q2Y),
+
+ c.call(prefix + "_prepAddStep", Q1, R, c.getLocal("pCoef")),
+ c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+
+ c.call(prefix + "_prepAddStep", Q2, R, c.getLocal("pCoef")),
+ c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+ );
+ }
+
+ function buildMulBy024Old() {
+ const f = module.addFunction(prefix+ "__mulBy024Old");
+ f.addParam("pEll0", "i32");
+ f.addParam("pEllVW", "i32");
+ f.addParam("pEllVV", "i32");
+ f.addParam("pR", "i32"); // Result in F12
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("pEll0");
+ const x2 = c.getLocal("pEllVV");
+ const x4 = c.getLocal("pEllVW");
+
+ const z0 = c.getLocal("pR");
+
+ const pAUX12 = module.alloc(ftsize);
+ const AUX12 = c.i32_const(pAUX12);
+ const AUX12_0 = c.i32_const(pAUX12);
+ const AUX12_2 = c.i32_const(pAUX12+f2size);
+ const AUX12_4 = c.i32_const(pAUX12+f2size*2);
+ const AUX12_6 = c.i32_const(pAUX12+f2size*3);
+ const AUX12_8 = c.i32_const(pAUX12+f2size*4);
+ const AUX12_10 = c.i32_const(pAUX12+f2size*5);
+
+ f.addCode(
+
+ c.call(f2mPrefix + "_copy", x0, AUX12_0),
+ c.call(f2mPrefix + "_zero", AUX12_2),
+ c.call(f2mPrefix + "_copy", x2, AUX12_4),
+ c.call(f2mPrefix + "_zero", AUX12_6),
+ c.call(f2mPrefix + "_copy", x4, AUX12_8),
+ c.call(f2mPrefix + "_zero", AUX12_10),
+ c.call(ftmPrefix + "_mul", AUX12, z0, z0),
+ );
+ }
+
+ function buildMulBy024() {
+ const f = module.addFunction(prefix+ "__mulBy024");
+ f.addParam("pEll0", "i32");
+ f.addParam("pEllVW", "i32");
+ f.addParam("pEllVV", "i32");
+ f.addParam("pR", "i32"); // Result in F12
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("pEll0");
+ const x2 = c.getLocal("pEllVV");
+ const x4 = c.getLocal("pEllVW");
+
+ const z0 = c.getLocal("pR");
+ const z1 = c.i32_add(c.getLocal("pR"), c.i32_const(2*n8));
+ const z2 = c.i32_add(c.getLocal("pR"), c.i32_const(4*n8));
+ const z3 = c.i32_add(c.getLocal("pR"), c.i32_const(6*n8));
+ const z4 = c.i32_add(c.getLocal("pR"), c.i32_const(8*n8));
+ const z5 = c.i32_add(c.getLocal("pR"), c.i32_const(10*n8));
+
+ const t0 = c.i32_const(module.alloc(f2size));
+ const t1 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const s0 = c.i32_const(module.alloc(f2size));
+ const T3 = c.i32_const(module.alloc(f2size));
+ const T4 = c.i32_const(module.alloc(f2size));
+ const D0 = c.i32_const(module.alloc(f2size));
+ const D2 = c.i32_const(module.alloc(f2size));
+ const D4 = c.i32_const(module.alloc(f2size));
+ const S1 = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+
+ f.addCode(
+
+ // D0 = z0 * x0;
+ c.call(f2mPrefix + "_mul", z0, x0, D0),
+ // D2 = z2 * x2;
+ c.call(f2mPrefix + "_mul", z2, x2, D2),
+ // D4 = z4 * x4;
+ c.call(f2mPrefix + "_mul", z4, x4, D4),
+ // t2 = z0 + z4;
+ c.call(f2mPrefix + "_add", z0, z4, t2),
+ // t1 = z0 + z2;
+ c.call(f2mPrefix + "_add", z0, z2, t1),
+ // s0 = z1 + z3 + z5;
+ c.call(f2mPrefix + "_add", z1, z3, s0),
+ c.call(f2mPrefix + "_add", s0, z5, s0),
+
+
+ // For z.a_.a_ = z0.
+ // S1 = z1 * x2;
+ c.call(f2mPrefix + "_mul", z1, x2, S1),
+ // T3 = S1 + D4;
+ c.call(f2mPrefix + "_add", S1, D4, T3),
+ // T4 = my_Fp6::non_residue * T3 + D0;
+ c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4),
+ c.call(f2mPrefix + "_add", T4, D0, z0),
+ // z0 = T4;
+
+ // For z.a_.b_ = z1
+ // T3 = z5 * x4;
+ c.call(f2mPrefix + "_mul", z5, x4, T3),
+ // S1 = S1 + T3;
+ c.call(f2mPrefix + "_add", S1, T3, S1),
+ // T3 = T3 + D2;
+ c.call(f2mPrefix + "_add", T3, D2, T3),
+ // T4 = my_Fp6::non_residue * T3;
+ c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4),
+ // T3 = z1 * x0;
+ c.call(f2mPrefix + "_mul", z1, x0, T3),
+ // S1 = S1 + T3;
+ c.call(f2mPrefix + "_add", S1, T3, S1),
+ // T4 = T4 + T3;
+ c.call(f2mPrefix + "_add", T4, T3, z1),
+ // z1 = T4;
+
+
+
+ // For z.a_.c_ = z2
+ // t0 = x0 + x2;
+ c.call(f2mPrefix + "_add", x0, x2, t0),
+ // T3 = t1 * t0 - D0 - D2;
+ c.call(f2mPrefix + "_mul", t1, t0, T3),
+ c.call(f2mPrefix + "_add", D0, D2, AUX),
+ c.call(f2mPrefix + "_sub", T3, AUX, T3),
+ // T4 = z3 * x4;
+ c.call(f2mPrefix + "_mul", z3, x4, T4),
+ // S1 = S1 + T4;
+ c.call(f2mPrefix + "_add", S1, T4, S1),
+
+
+ // For z.b_.a_ = z3 (z3 needs z2)
+ // t0 = z2 + z4;
+ c.call(f2mPrefix + "_add", z2, z4, t0),
+ // T3 = T3 + T4;
+ // z2 = T3;
+ c.call(f2mPrefix + "_add", T3, T4, z2),
+ // t1 = x2 + x4;
+ c.call(f2mPrefix + "_add", x2, x4, t1),
+ // T3 = t0 * t1 - D2 - D4;
+ c.call(f2mPrefix + "_mul", t1, t0, T3),
+ c.call(f2mPrefix + "_add", D2, D4, AUX),
+ c.call(f2mPrefix + "_sub", T3, AUX, T3),
+ // T4 = my_Fp6::non_residue * T3;
+ c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4),
+ // T3 = z3 * x0;
+ c.call(f2mPrefix + "_mul", z3, x0, T3),
+ // S1 = S1 + T3;
+ c.call(f2mPrefix + "_add", S1, T3, S1),
+ // T4 = T4 + T3;
+ c.call(f2mPrefix + "_add", T4, T3, z3),
+ // z3 = T4;
+
+ // For z.b_.b_ = z4
+ // T3 = z5 * x2;
+ c.call(f2mPrefix + "_mul", z5, x2, T3),
+ // S1 = S1 + T3;
+ c.call(f2mPrefix + "_add", S1, T3, S1),
+ // T4 = my_Fp6::non_residue * T3;
+ c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), T3, T4),
+ // t0 = x0 + x4;
+ c.call(f2mPrefix + "_add", x0, x4, t0),
+ // T3 = t2 * t0 - D0 - D4;
+ c.call(f2mPrefix + "_mul", t2, t0, T3),
+ c.call(f2mPrefix + "_add", D0, D4, AUX),
+ c.call(f2mPrefix + "_sub", T3, AUX, T3),
+ // T4 = T4 + T3;
+ c.call(f2mPrefix + "_add", T4, T3, z4),
+ // z4 = T4;
+
+ // For z.b_.c_ = z5.
+ // t0 = x0 + x2 + x4;
+ c.call(f2mPrefix + "_add", x0, x2, t0),
+ c.call(f2mPrefix + "_add", t0, x4, t0),
+ // T3 = s0 * t0 - S1;
+ c.call(f2mPrefix + "_mul", s0, t0, T3),
+ c.call(f2mPrefix + "_sub", T3, S1, z5),
+ // z5 = T3;
+
+ );
+ }
+
+
+ function buildMillerLoop() {
+ const f = module.addFunction(prefix+ "_millerLoop");
+ f.addParam("ppreP", "i32");
+ f.addParam("ppreQ", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("pCoef", "i32");
+ f.addLocal("i", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const preP_PX = c.getLocal("ppreP");
+ const preP_PY = c.i32_add(c.getLocal("ppreP"), c.i32_const(f1size));
+
+ const ELL_0 = c.getLocal("pCoef");
+ const ELL_VW = c.i32_add(c.getLocal("pCoef"), c.i32_const(f2size));
+ const ELL_VV = c.i32_add(c.getLocal("pCoef"), c.i32_const(2*f2size));
+
+
+ const pVW = module.alloc(f2size);
+ const VW = c.i32_const(pVW);
+ const pVV = module.alloc(f2size);
+ const VV = c.i32_const(pVV);
+
+ const F = c.getLocal("r");
+
+
+ f.addCode(
+ c.call(ftmPrefix + "_one", F),
+
+ c.setLocal("pCoef", c.i32_add( c.getLocal("ppreQ"), c.i32_const(f2size*3))),
+
+ c.setLocal("i", c.i32_const(ateLoopBitBytes.length-2)),
+ c.block(c.loop(
+
+
+ c.call(ftmPrefix + "_square", F, F),
+
+ c.call(f2mPrefix + "_mul1", ELL_VW,preP_PY, VW),
+ c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV),
+ c.call(prefix + "__mulBy024", ELL_0, VW, VV, F),
+ c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+
+ c.if(
+ c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes),
+ [
+ ...c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW),
+ ...c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV),
+
+ ...c.call(prefix + "__mulBy024", ELL_0, VW, VV, F),
+ ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+
+ ]
+ ),
+ c.br_if(1, c.i32_eqz ( c.getLocal("i") )),
+ c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+
+ );
+
+ f.addCode(
+ c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW),
+ c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV),
+ c.call(prefix + "__mulBy024", ELL_0, VW, VV, F),
+ c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+
+ c.call(f2mPrefix + "_mul1", ELL_VW, preP_PY, VW),
+ c.call(f2mPrefix + "_mul1", ELL_VV, preP_PX, VV),
+ c.call(prefix + "__mulBy024", ELL_0, VW, VV, F),
+ c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+
+ );
+
+ }
+
+
+ function buildFrobeniusMap(n) {
+ const F12 = [
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ ],
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("8376118865763821496583973867626364092589906065868298776909617916018768340080"), BigInteger("16469823323077808223889137241176536799009286646108169935659301613961712198316")],
+ [BigInteger("21888242871839275220042445260109153167277707414472061641714758635765020556617"), BigInteger("0")],
+ [BigInteger("11697423496358154304825782922584725312912383441159505038794027105778954184319"), BigInteger("303847389135065887422783454877609941456349188919719272345083954437860409601")],
+ [BigInteger("21888242871839275220042445260109153167277707414472061641714758635765020556616"), BigInteger("0")],
+ [BigInteger("3321304630594332808241809054958361220322477375291206261884409189760185844239"), BigInteger("5722266937896532885780051958958348231143373700109372999374820235121374419868")],
+ [BigInteger("21888242871839275222246405745257275088696311157297823662689037894645226208582"), BigInteger("0")],
+ [BigInteger("13512124006075453725662431877630910996106405091429524885779419978626457868503"), BigInteger("5418419548761466998357268504080738289687024511189653727029736280683514010267")],
+ [BigInteger("2203960485148121921418603742825762020974279258880205651966"), BigInteger("0")],
+ [BigInteger("10190819375481120917420622822672549775783927716138318623895010788866272024264"), BigInteger("21584395482704209334823622290379665147239961968378104390343953940207365798982")],
+ [BigInteger("2203960485148121921418603742825762020974279258880205651967"), BigInteger("0")],
+ [BigInteger("18566938241244942414004596690298913868373833782006617400804628704885040364344"), BigInteger("16165975933942742336466353786298926857552937457188450663314217659523851788715")],
+ ]
+ ];
+
+ const F6 = [
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ ],
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("21575463638280843010398324269430826099269044274347216827212613867836435027261"), BigInteger("10307601595873709700152284273816112264069230130616436755625194854815875713954")],
+ [BigInteger("21888242871839275220042445260109153167277707414472061641714758635765020556616"), BigInteger("0")],
+ [BigInteger("3772000881919853776433695186713858239009073593817195771773381919316419345261"), BigInteger("2236595495967245188281701248203181795121068902605861227855261137820944008926")],
+ [BigInteger("2203960485148121921418603742825762020974279258880205651966"), BigInteger("0")],
+ [BigInteger("18429021223477853657660792034369865839114504446431234726392080002137598044644"), BigInteger("9344045779998320333812420223237981029506012124075525679208581902008406485703")],
+ ],
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("2581911344467009335267311115468803099551665605076196740867805258568234346338"), BigInteger("19937756971775647987995932169929341994314640652964949448313374472400716661030")],
+ [BigInteger("2203960485148121921418603742825762020974279258880205651966"), BigInteger("0")],
+ [BigInteger("5324479202449903542726783395506214481928257762400643279780343368557297135718"), BigInteger("16208900380737693084919495127334387981393726419856888799917914180988844123039")],
+ [BigInteger("21888242871839275220042445260109153167277707414472061641714758635765020556616"), BigInteger("0")],
+ [BigInteger("13981852324922362344252311234282257507216387789820983642040889267519694726527"), BigInteger("7629828391165209371577384193250820201684255241773809077146787135900891633097")],
+ ]
+ ];
+
+ const f = module.addFunction(prefix+ "__frobeniusMap"+n);
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ for (let i=0; i<6; i++) {
+ const X = (i==0) ? c.getLocal("x") : c.i32_add(c.getLocal("x"), c.i32_const(i*f2size));
+ const Xc0 = X;
+ const Xc1 = c.i32_add(c.getLocal("x"), c.i32_const(i*f2size + f1size));
+ const R = (i==0) ? c.getLocal("r") : c.i32_add(c.getLocal("r"), c.i32_const(i*f2size));
+ const Rc0 = R;
+ const Rc1 = c.i32_add(c.getLocal("r"), c.i32_const(i*f2size + f1size));
+ const coef = mul2(F12[Math.floor(i/3)][n%12] , F6[i%3][n%6]);
+ const pCoef = module.alloc([
+ ...utils$3.bigInt2BytesLE(toMontgomery(coef[0]), 32),
+ ...utils$3.bigInt2BytesLE(toMontgomery(coef[1]), 32),
+ ]);
+ if (n%2 == 1) {
+ f.addCode(
+ c.call(f1mPrefix + "_copy", Xc0, Rc0),
+ c.call(f1mPrefix + "_neg", Xc1, Rc1),
+ c.call(f2mPrefix + "_mul", R, c.i32_const(pCoef), R),
+ );
+ } else {
+ f.addCode(c.call(f2mPrefix + "_mul", X, c.i32_const(pCoef), R));
+ }
+ }
+
+ function mul2(a, b) {
+ const ac0 = BigInteger(a[0]);
+ const ac1 = BigInteger(a[1]);
+ const bc0 = BigInteger(b[0]);
+ const bc1 = BigInteger(b[1]);
+ const res = [
+ ac0.times(bc0).minus( ac1.times(bc1) ).mod(q),
+ ac0.times(bc1).add( ac1.times(bc0) ).mod(q),
+ ];
+ if (res[0].isNegative()) res[0] = res[0].add(q);
+ return res;
+ }
+
+ }
+
+
+
+ function buildFinalExponentiationFirstChunk() {
+
+ const f = module.addFunction(prefix+ "__finalExponentiationFirstChunk");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const elt = c.getLocal("x");
+ const eltC0 = elt;
+ const eltC1 = c.i32_add(elt, c.i32_const(n8*6));
+ const r = c.getLocal("r");
+ const pA = module.alloc(ftsize);
+ const A = c.i32_const(pA);
+ const Ac0 = A;
+ const Ac1 = c.i32_const(pA + n8*6);
+ const B = c.i32_const(module.alloc(ftsize));
+ const C = c.i32_const(module.alloc(ftsize));
+ const D = c.i32_const(module.alloc(ftsize));
+
+ f.addCode(
+ // const alt_bn128_Fq12 A = alt_bn128_Fq12(elt.c0,-elt.c1);
+ c.call(f6mPrefix + "_copy", eltC0, Ac0),
+ c.call(f6mPrefix + "_neg", eltC1, Ac1),
+
+ // const alt_bn128_Fq12 B = elt.inverse();
+ c.call(ftmPrefix + "_inverse", elt, B),
+
+ // const alt_bn128_Fq12 C = A * B;
+ c.call(ftmPrefix + "_mul", A, B, C),
+ // const alt_bn128_Fq12 D = C.Frobenius_map(2);
+ c.call(prefix + "__frobeniusMap2", C, D),
+ // const alt_bn128_Fq12 result = D * C;
+ c.call(ftmPrefix + "_mul", C, D, r),
+ );
+ }
+
+ function buildCyclotomicSquare() {
+ const f = module.addFunction(prefix+ "__cyclotomicSquare");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x4 = c.i32_add(c.getLocal("x"), c.i32_const(f2size));
+ const x3 = c.i32_add(c.getLocal("x"), c.i32_const(2*f2size));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(3*f2size));
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(4*f2size));
+ const x5 = c.i32_add(c.getLocal("x"), c.i32_const(5*f2size));
+
+ const r0 = c.getLocal("r");
+ const r4 = c.i32_add(c.getLocal("r"), c.i32_const(f2size));
+ const r3 = c.i32_add(c.getLocal("r"), c.i32_const(2*f2size));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(3*f2size));
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(4*f2size));
+ const r5 = c.i32_add(c.getLocal("r"), c.i32_const(5*f2size));
+
+ const t0 = c.i32_const(module.alloc(f2size));
+ const t1 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const t3 = c.i32_const(module.alloc(f2size));
+ const t4 = c.i32_const(module.alloc(f2size));
+ const t5 = c.i32_const(module.alloc(f2size));
+ const tmp = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+
+
+ f.addCode(
+
+ // c.call(ftmPrefix + "_square", x0, r0),
+
+ // // t0 + t1*y = (z0 + z1*y)^2 = a^2
+ // tmp = z0 * z1;
+ // t0 = (z0 + z1) * (z0 + my_Fp6::non_residue * z1) - tmp - my_Fp6::non_residue * tmp;
+ // t1 = tmp + tmp;
+ c.call(f2mPrefix + "_mul", x0, x1, tmp),
+ c.call(f2mPrefix + "_mul", x1, c.i32_const(pNonResidueF6), t0),
+ c.call(f2mPrefix + "_add", x0, t0, t0),
+ c.call(f2mPrefix + "_add", x0, x1, AUX),
+ c.call(f2mPrefix + "_mul", AUX, t0, t0),
+ c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX),
+ c.call(f2mPrefix + "_add", tmp, AUX, AUX),
+ c.call(f2mPrefix + "_sub", t0, AUX, t0),
+ c.call(f2mPrefix + "_add", tmp, tmp, t1),
+
+ // // t2 + t3*y = (z2 + z3*y)^2 = b^2
+ // tmp = z2 * z3;
+ // t2 = (z2 + z3) * (z2 + my_Fp6::non_residue * z3) - tmp - my_Fp6::non_residue * tmp;
+ // t3 = tmp + tmp;
+ c.call(f2mPrefix + "_mul", x2, x3, tmp),
+ c.call(f2mPrefix + "_mul", x3, c.i32_const(pNonResidueF6), t2),
+ c.call(f2mPrefix + "_add", x2, t2, t2),
+ c.call(f2mPrefix + "_add", x2, x3, AUX),
+ c.call(f2mPrefix + "_mul", AUX, t2, t2),
+ c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX),
+ c.call(f2mPrefix + "_add", tmp, AUX, AUX),
+ c.call(f2mPrefix + "_sub", t2, AUX, t2),
+ c.call(f2mPrefix + "_add", tmp, tmp, t3),
+
+ // // t4 + t5*y = (z4 + z5*y)^2 = c^2
+ // tmp = z4 * z5;
+ // t4 = (z4 + z5) * (z4 + my_Fp6::non_residue * z5) - tmp - my_Fp6::non_residue * tmp;
+ // t5 = tmp + tmp;
+ c.call(f2mPrefix + "_mul", x4, x5, tmp),
+ c.call(f2mPrefix + "_mul", x5, c.i32_const(pNonResidueF6), t4),
+ c.call(f2mPrefix + "_add", x4, t4, t4),
+ c.call(f2mPrefix + "_add", x4, x5, AUX),
+ c.call(f2mPrefix + "_mul", AUX, t4, t4),
+ c.call(f2mPrefix + "_mul", c.i32_const(pNonResidueF6), tmp, AUX),
+ c.call(f2mPrefix + "_add", tmp, AUX, AUX),
+ c.call(f2mPrefix + "_sub", t4, AUX, t4),
+ c.call(f2mPrefix + "_add", tmp, tmp, t5),
+
+ // For A
+ // z0 = 3 * t0 - 2 * z0
+ c.call(f2mPrefix + "_sub", t0, x0, r0),
+ c.call(f2mPrefix + "_add", r0, r0, r0),
+ c.call(f2mPrefix + "_add", t0, r0, r0),
+ // z1 = 3 * t1 + 2 * z1
+ c.call(f2mPrefix + "_add", t1, x1, r1),
+ c.call(f2mPrefix + "_add", r1, r1, r1),
+ c.call(f2mPrefix + "_add", t1, r1, r1),
+
+ // For B
+ // z2 = 3 * (xi * t5) + 2 * z2
+ c.call(f2mPrefix + "_mul", t5, c.i32_const(pAltBn128Twist), AUX),
+ c.call(f2mPrefix + "_add", AUX, x2, r2),
+ c.call(f2mPrefix + "_add", r2, r2, r2),
+ c.call(f2mPrefix + "_add", AUX, r2, r2),
+ // z3 = 3 * t4 - 2 * z3
+ c.call(f2mPrefix + "_sub", t4, x3, r3),
+ c.call(f2mPrefix + "_add", r3, r3, r3),
+ c.call(f2mPrefix + "_add", t4, r3, r3),
+
+ // For C
+ // z4 = 3 * t2 - 2 * z4
+ c.call(f2mPrefix + "_sub", t2, x4, r4),
+ c.call(f2mPrefix + "_add", r4, r4, r4),
+ c.call(f2mPrefix + "_add", t2, r4, r4),
+ // z5 = 3 * t3 + 2 * z5
+ c.call(f2mPrefix + "_add", t3, x5, r5),
+ c.call(f2mPrefix + "_add", r5, r5, r5),
+ c.call(f2mPrefix + "_add", t3, r5, r5),
+
+ );
+ }
+
+
+ function buildCyclotomicExp(exponent, fnName) {
+ const exponentNafBytes = naf(exponent).map( (b) => (b==-1 ? 0xFF: b) );
+ const pExponentNafBytes = module.alloc(exponentNafBytes);
+ module.alloc(utils$3.bigInt2BytesLE(exponent, 32));
+
+ const f = module.addFunction(prefix+ "__cyclotomicExp_"+fnName);
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("bit", "i32");
+ f.addLocal("i", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x = c.getLocal("x");
+
+ const res = c.getLocal("r");
+
+ const inverse = c.i32_const(module.alloc(ftsize));
+
+
+ f.addCode(
+ // c.call(ftmPrefix + "_exp", x, c.i32_const(pExponent), c.i32_const(32), res),
+
+ c.call(ftmPrefix + "_conjugate", x, inverse),
+ c.call(ftmPrefix + "_one", res),
+
+ c.if(
+ c.teeLocal("bit", c.i32_load8_s(c.i32_const(exponentNafBytes.length-1), pExponentNafBytes)),
+ c.if(
+ c.i32_eq(
+ c.getLocal("bit"),
+ c.i32_const(1)
+ ),
+ c.call(ftmPrefix + "_mul", res, x, res),
+ c.call(ftmPrefix + "_mul", res, inverse, res),
+ )
+ ),
+
+ c.setLocal("i", c.i32_const(exponentNafBytes.length-2)),
+ c.block(c.loop(
+ // c.call(ftmPrefix + "_square", res, res),
+ c.call(prefix + "__cyclotomicSquare", res, res),
+ c.if(
+ c.teeLocal("bit", c.i32_load8_s(c.getLocal("i"), pExponentNafBytes)),
+ c.if(
+ c.i32_eq(
+ c.getLocal("bit"),
+ c.i32_const(1)
+ ),
+ c.call(ftmPrefix + "_mul", res, x, res),
+ c.call(ftmPrefix + "_mul", res, inverse, res),
+ )
+ ),
+ c.br_if(1, c.i32_eqz ( c.getLocal("i") )),
+ c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+ }
+
+
+
+ function buildFinalExponentiationLastChunk() {
+ buildCyclotomicSquare();
+ buildCyclotomicExp(finalExpZ, "w0");
+
+ const f = module.addFunction(prefix+ "__finalExponentiationLastChunk");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const elt = c.getLocal("x");
+ const result = c.getLocal("r");
+ const A = c.i32_const(module.alloc(ftsize));
+ const B = c.i32_const(module.alloc(ftsize));
+ const C = c.i32_const(module.alloc(ftsize));
+ const D = c.i32_const(module.alloc(ftsize));
+ const E = c.i32_const(module.alloc(ftsize));
+ const F = c.i32_const(module.alloc(ftsize));
+ const G = c.i32_const(module.alloc(ftsize));
+ const H = c.i32_const(module.alloc(ftsize));
+ const I = c.i32_const(module.alloc(ftsize));
+ const J = c.i32_const(module.alloc(ftsize));
+ const K = c.i32_const(module.alloc(ftsize));
+ const L = c.i32_const(module.alloc(ftsize));
+ const M = c.i32_const(module.alloc(ftsize));
+ const N = c.i32_const(module.alloc(ftsize));
+ const O = c.i32_const(module.alloc(ftsize));
+ const P = c.i32_const(module.alloc(ftsize));
+ const Q = c.i32_const(module.alloc(ftsize));
+ const R = c.i32_const(module.alloc(ftsize));
+ const S = c.i32_const(module.alloc(ftsize));
+ const T = c.i32_const(module.alloc(ftsize));
+ const U = c.i32_const(module.alloc(ftsize));
+
+ f.addCode(
+
+
+ // A = exp_by_neg_z(elt) // = elt^(-z)
+ c.call(prefix + "__cyclotomicExp_w0", elt, A),
+ c.call(ftmPrefix + "_conjugate", A, A),
+ // B = A^2 // = elt^(-2*z)
+ c.call(prefix + "__cyclotomicSquare", A, B),
+ // C = B^2 // = elt^(-4*z)
+ c.call(prefix + "__cyclotomicSquare", B, C),
+ // D = C * B // = elt^(-6*z)
+ c.call(ftmPrefix + "_mul", C, B, D),
+ // E = exp_by_neg_z(D) // = elt^(6*z^2)
+ c.call(prefix + "__cyclotomicExp_w0", D, E),
+ c.call(ftmPrefix + "_conjugate", E, E),
+ // F = E^2 // = elt^(12*z^2)
+ c.call(prefix + "__cyclotomicSquare", E, F),
+ // G = epx_by_neg_z(F) // = elt^(-12*z^3)
+ c.call(prefix + "__cyclotomicExp_w0", F, G),
+ c.call(ftmPrefix + "_conjugate", G, G),
+ // H = conj(D) // = elt^(6*z)
+ c.call(ftmPrefix + "_conjugate", D, H),
+ // I = conj(G) // = elt^(12*z^3)
+ c.call(ftmPrefix + "_conjugate", G, I),
+ // J = I * E // = elt^(12*z^3 + 6*z^2)
+ c.call(ftmPrefix + "_mul", I, E, J),
+ // K = J * H // = elt^(12*z^3 + 6*z^2 + 6*z)
+ c.call(ftmPrefix + "_mul", J, H, K),
+ // L = K * B // = elt^(12*z^3 + 6*z^2 + 4*z)
+ c.call(ftmPrefix + "_mul", K, B, L),
+ // M = K * E // = elt^(12*z^3 + 12*z^2 + 6*z)
+ c.call(ftmPrefix + "_mul", K, E, M),
+
+ // N = M * elt // = elt^(12*z^3 + 12*z^2 + 6*z + 1)
+ c.call(ftmPrefix + "_mul", M, elt, N),
+
+ // O = L.Frobenius_map(1) // = elt^(q*(12*z^3 + 6*z^2 + 4*z))
+ c.call(prefix + "__frobeniusMap1", L, O),
+ // P = O * N // = elt^(q*(12*z^3 + 6*z^2 + 4*z) * (12*z^3 + 12*z^2 + 6*z + 1))
+ c.call(ftmPrefix + "_mul", O, N, P),
+ // Q = K.Frobenius_map(2) // = elt^(q^2 * (12*z^3 + 6*z^2 + 6*z))
+ c.call(prefix + "__frobeniusMap2", K, Q),
+ // R = Q * P // = elt^(q^2 * (12*z^3 + 6*z^2 + 6*z) + q*(12*z^3 + 6*z^2 + 4*z) * (12*z^3 + 12*z^2 + 6*z + 1))
+ c.call(ftmPrefix + "_mul", Q, P, R),
+ // S = conj(elt) // = elt^(-1)
+ c.call(ftmPrefix + "_conjugate", elt, S),
+ // T = S * L // = elt^(12*z^3 + 6*z^2 + 4*z - 1)
+ c.call(ftmPrefix + "_mul", S, L, T),
+ // U = T.Frobenius_map(3) // = elt^(q^3(12*z^3 + 6*z^2 + 4*z - 1))
+ c.call(prefix + "__frobeniusMap3", T, U),
+ // V = U * R // = elt^(q^3(12*z^3 + 6*z^2 + 4*z - 1) + q^2 * (12*z^3 + 6*z^2 + 6*z) + q*(12*z^3 + 6*z^2 + 4*z) * (12*z^3 + 12*z^2 + 6*z + 1))
+ c.call(ftmPrefix + "_mul", U, R, result),
+ // result = V
+ );
+ }
+
+
+ function buildFinalExponentiation() {
+ buildFinalExponentiationFirstChunk();
+ buildFinalExponentiationLastChunk();
+ const f = module.addFunction(prefix+ "_finalExponentiation");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const elt = c.getLocal("x");
+ const result = c.getLocal("r");
+ const eltToFirstChunk = c.i32_const(module.alloc(ftsize));
+
+ f.addCode(
+ c.call(prefix + "__finalExponentiationFirstChunk", elt, eltToFirstChunk ),
+ c.call(prefix + "__finalExponentiationLastChunk", eltToFirstChunk, result )
+ );
+ }
+
+
+ function buildFinalExponentiationOld() {
+ const f = module.addFunction(prefix+ "_finalExponentiationOld");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const exponent = BigInteger("552484233613224096312617126783173147097382103762957654188882734314196910839907541213974502761540629817009608548654680343627701153829446747810907373256841551006201639677726139946029199968412598804882391702273019083653272047566316584365559776493027495458238373902875937659943504873220554161550525926302303331747463515644711876653177129578303191095900909191624817826566688241804408081892785725967931714097716709526092261278071952560171111444072049229123565057483750161460024353346284167282452756217662335528813519139808291170539072125381230815729071544861602750936964829313608137325426383735122175229541155376346436093930287402089517426973178917569713384748081827255472576937471496195752727188261435633271238710131736096299798168852925540549342330775279877006784354801422249722573783561685179618816480037695005515426162362431072245638324744480");
+
+ const pExponent = module.alloc(utils$3.bigInt2BytesLE( exponent, 352 ));
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.call(ftmPrefix + "_exp", c.getLocal("x"), c.i32_const(pExponent), c.i32_const(352), c.getLocal("r")),
+ );
+ }
+
+
+
+
+ const pPreP = module.alloc(prePSize);
+ const pPreQ = module.alloc(preQSize);
+
+ function buildPairingEquation(nPairings) {
+
+ const f = module.addFunction(prefix+ "_pairingEq"+nPairings);
+ for (let i=0; i acc + ( b!=0 ? 1 : 0) ,0);
+ const ateNCoefs = ateNAddCoefs + ateNDblCoefs + 1;
+ const prePSize = 3*2*n8q;
+ const preQSize = 3*n8q*2 + ateNCoefs*ateCoefSize;
+ const finalExpIsNegative = true;
+
+ const finalExpZ = BigInteger("15132376222941642752");
+
+
+ module.modules[prefix] = {
+ n64q: n64q,
+ n64r: n64r,
+ n8q: n8q,
+ n8r: n8r,
+ pG1gen: pG1gen,
+ pG1zero: pG1zero,
+ pG1b: pG1b,
+ pG2gen: pG2gen,
+ pG2zero: pG2zero,
+ pG2b: pG2b,
+ pq: module.modules["f1m"].pq,
+ pr: pr,
+ pOneT: pOneT,
+ r: r,
+ q: q,
+ prePSize: prePSize,
+ preQSize: preQSize
+ };
+
+
+ function naf(n) {
+ let E = n;
+ const res = [];
+ while (E.gt(BigInteger.zero)) {
+ if (E.isOdd()) {
+ const z = 2 - E.mod(4).toJSNumber();
+ res.push( z );
+ E = E.minus(z);
+ } else {
+ res.push( 0 );
+ }
+ E = E.shiftRight(1);
+ }
+ return res;
+ }
+
+ function bits(n) {
+ let E = n;
+ const res = [];
+ while (E.gt(BigInteger.zero)) {
+ if (E.isOdd()) {
+ res.push( 1 );
+ } else {
+ res.push( 0 );
+ }
+ E = E.shiftRight(1);
+ }
+ return res;
+ }
+
+ function buildPrepareG1() {
+ const f = module.addFunction(prefix+ "_prepareG1");
+ f.addParam("pP", "i32");
+ f.addParam("ppreP", "i32");
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.call(g1mPrefix + "_normalize", c.getLocal("pP"), c.getLocal("ppreP")), // TODO Remove if already in affine
+ );
+ }
+
+
+
+ function buildPrepDoubleStep() {
+ const f = module.addFunction(prefix+ "_prepDblStep");
+ f.addParam("R", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const Rx = c.getLocal("R");
+ const Ry = c.i32_add(c.getLocal("R"), c.i32_const(2*n8q));
+ const Rz = c.i32_add(c.getLocal("R"), c.i32_const(4*n8q));
+
+ const t0 = c.getLocal("r");
+ const t3 = c.i32_add(c.getLocal("r"), c.i32_const(2*n8q));
+ const t6 = c.i32_add(c.getLocal("r"), c.i32_const(4*n8q));
+
+
+ const zsquared = c.i32_const(module.alloc(f2size));
+ const t1 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const t4 = c.i32_const(module.alloc(f2size));
+ const t5 = c.i32_const(module.alloc(f2size));
+
+ f.addCode(
+
+ // tmp0 = r.x.square();
+ c.call(f2mPrefix + "_square", Rx, t0),
+
+ // tmp1 = r.y.square();
+ c.call(f2mPrefix + "_square", Ry, t1),
+
+ // tmp2 = tmp1.square();
+ c.call(f2mPrefix + "_square", t1, t2),
+
+ // tmp3 = (tmp1 + r.x).square() - tmp0 - tmp2;
+ c.call(f2mPrefix + "_add", t1, Rx, t3),
+ c.call(f2mPrefix + "_square", t3, t3),
+ c.call(f2mPrefix + "_sub", t3, t0, t3),
+ c.call(f2mPrefix + "_sub", t3, t2, t3),
+
+ // tmp3 = tmp3 + tmp3;
+ c.call(f2mPrefix + "_add", t3, t3, t3),
+
+ // tmp4 = tmp0 + tmp0 + tmp0;
+ c.call(f2mPrefix + "_add", t0, t0, t4),
+ c.call(f2mPrefix + "_add", t4, t0, t4),
+
+ // tmp6 = r.x + tmp4;
+ c.call(f2mPrefix + "_add", Rx, t4, t6),
+
+ // tmp5 = tmp4.square();
+ c.call(f2mPrefix + "_square", t4, t5),
+
+ // zsquared = r.z.square();
+ c.call(f2mPrefix + "_square", Rz, zsquared),
+
+ // r.x = tmp5 - tmp3 - tmp3;
+ c.call(f2mPrefix + "_sub", t5, t3, Rx),
+ c.call(f2mPrefix + "_sub", Rx, t3, Rx),
+
+ // r.z = (r.z + r.y).square() - tmp1 - zsquared;
+ c.call(f2mPrefix + "_add", Rz, Ry, Rz),
+ c.call(f2mPrefix + "_square", Rz, Rz),
+ c.call(f2mPrefix + "_sub", Rz, t1, Rz),
+ c.call(f2mPrefix + "_sub", Rz, zsquared, Rz),
+
+ // r.y = (tmp3 - r.x) * tmp4;
+ c.call(f2mPrefix + "_sub", t3, Rx, Ry),
+ c.call(f2mPrefix + "_mul", Ry, t4, Ry),
+
+ // tmp2 = tmp2 + tmp2;
+ c.call(f2mPrefix + "_add", t2, t2, t2),
+
+ // tmp2 = tmp2 + tmp2;
+ c.call(f2mPrefix + "_add", t2, t2, t2),
+
+ // tmp2 = tmp2 + tmp2;
+ c.call(f2mPrefix + "_add", t2, t2, t2),
+
+ // r.y -= tmp2;
+ c.call(f2mPrefix + "_sub", Ry, t2, Ry),
+
+ // tmp3 = tmp4 * zsquared;
+ c.call(f2mPrefix + "_mul", t4, zsquared, t3),
+
+ // tmp3 = tmp3 + tmp3;
+ c.call(f2mPrefix + "_add", t3, t3, t3),
+
+ // tmp3 = -tmp3;
+ c.call(f2mPrefix + "_neg", t3, t3),
+
+ // tmp6 = tmp6.square() - tmp0 - tmp5;
+ c.call(f2mPrefix + "_square", t6, t6),
+ c.call(f2mPrefix + "_sub", t6, t0, t6),
+ c.call(f2mPrefix + "_sub", t6, t5, t6),
+
+ // tmp1 = tmp1 + tmp1;
+ c.call(f2mPrefix + "_add", t1, t1, t1),
+
+ // tmp1 = tmp1 + tmp1;
+ c.call(f2mPrefix + "_add", t1, t1, t1),
+
+ // tmp6 = tmp6 - tmp1;
+ c.call(f2mPrefix + "_sub", t6, t1, t6),
+
+ // tmp0 = r.z * zsquared;
+ c.call(f2mPrefix + "_mul", Rz, zsquared, t0),
+
+ // tmp0 = tmp0 + tmp0;
+ c.call(f2mPrefix + "_add", t0, t0, t0),
+
+ );
+ }
+
+ function buildPrepAddStep() {
+ const f = module.addFunction(prefix+ "_prepAddStep");
+ f.addParam("R", "i32");
+ f.addParam("Q", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const Rx = c.getLocal("R");
+ const Ry = c.i32_add(c.getLocal("R"), c.i32_const(2*n8q));
+ const Rz = c.i32_add(c.getLocal("R"), c.i32_const(4*n8q));
+
+ const Qx = c.getLocal("Q");
+ const Qy = c.i32_add(c.getLocal("Q"), c.i32_const(2*n8q));
+
+ const t10 = c.getLocal("r");
+ const t1 = c.i32_add(c.getLocal("r"), c.i32_const(2*n8q));
+ const t9 = c.i32_add(c.getLocal("r"), c.i32_const(4*n8q));
+
+ const zsquared = c.i32_const(module.alloc(f2size));
+ const ysquared = c.i32_const(module.alloc(f2size));
+ const ztsquared = c.i32_const(module.alloc(f2size));
+ const t0 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const t3 = c.i32_const(module.alloc(f2size));
+ const t4 = c.i32_const(module.alloc(f2size));
+ const t5 = c.i32_const(module.alloc(f2size));
+ const t6 = c.i32_const(module.alloc(f2size));
+ const t7 = c.i32_const(module.alloc(f2size));
+ const t8 = c.i32_const(module.alloc(f2size));
+
+ f.addCode(
+
+ // zsquared = r.z.square();
+ c.call(f2mPrefix + "_square", Rz, zsquared),
+
+ // ysquared = q.y.square();
+ c.call(f2mPrefix + "_square", Qy, ysquared),
+
+ // t0 = zsquared * q.x;
+ c.call(f2mPrefix + "_mul", zsquared, Qx, t0),
+
+ // t1 = ((q.y + r.z).square() - ysquared - zsquared) * zsquared;
+ c.call(f2mPrefix + "_add", Qy, Rz, t1),
+ c.call(f2mPrefix + "_square", t1, t1),
+ c.call(f2mPrefix + "_sub", t1, ysquared, t1),
+ c.call(f2mPrefix + "_sub", t1, zsquared, t1),
+ c.call(f2mPrefix + "_mul", t1, zsquared, t1),
+
+ // t2 = t0 - r.x;
+ c.call(f2mPrefix + "_sub", t0, Rx, t2),
+
+ // t3 = t2.square();
+ c.call(f2mPrefix + "_square", t2, t3),
+
+ // t4 = t3 + t3;
+ c.call(f2mPrefix + "_add", t3, t3, t4),
+
+ // t4 = t4 + t4;
+ c.call(f2mPrefix + "_add", t4, t4, t4),
+
+ // t5 = t4 * t2;
+ c.call(f2mPrefix + "_mul", t4, t2, t5),
+
+ // t6 = t1 - r.y - r.y;
+ c.call(f2mPrefix + "_sub", t1, Ry, t6),
+ c.call(f2mPrefix + "_sub", t6, Ry, t6),
+
+ // t9 = t6 * q.x;
+ c.call(f2mPrefix + "_mul", t6, Qx, t9),
+
+ // t7 = t4 * r.x;
+ c.call(f2mPrefix + "_mul", t4, Rx, t7),
+
+ // r.x = t6.square() - t5 - t7 - t7;
+ c.call(f2mPrefix + "_square", t6, Rx),
+ c.call(f2mPrefix + "_sub", Rx, t5, Rx),
+ c.call(f2mPrefix + "_sub", Rx, t7, Rx),
+ c.call(f2mPrefix + "_sub", Rx, t7, Rx),
+
+ // r.z = (r.z + t2).square() - zsquared - t3;
+ c.call(f2mPrefix + "_add", Rz, t2, Rz),
+ c.call(f2mPrefix + "_square", Rz, Rz),
+ c.call(f2mPrefix + "_sub", Rz, zsquared, Rz),
+ c.call(f2mPrefix + "_sub", Rz, t3, Rz),
+
+ // t10 = q.y + r.z;
+ c.call(f2mPrefix + "_add", Qy, Rz, t10),
+
+ // t8 = (t7 - r.x) * t6;
+ c.call(f2mPrefix + "_sub", t7, Rx, t8),
+ c.call(f2mPrefix + "_mul", t8, t6, t8),
+
+ // t0 = r.y * t5;
+ c.call(f2mPrefix + "_mul", Ry, t5, t0),
+
+ // t0 = t0 + t0;
+ c.call(f2mPrefix + "_add", t0, t0, t0),
+
+ // r.y = t8 - t0;
+ c.call(f2mPrefix + "_sub", t8, t0, Ry),
+
+ // t10 = t10.square() - ysquared;
+ c.call(f2mPrefix + "_square", t10, t10),
+ c.call(f2mPrefix + "_sub", t10, ysquared, t10),
+
+ // ztsquared = r.z.square();
+ c.call(f2mPrefix + "_square", Rz, ztsquared),
+
+ // t10 = t10 - ztsquared;
+ c.call(f2mPrefix + "_sub", t10, ztsquared, t10),
+
+ // t9 = t9 + t9 - t10;
+ c.call(f2mPrefix + "_add", t9, t9, t9),
+ c.call(f2mPrefix + "_sub", t9, t10, t9),
+
+ // t10 = r.z + r.z;
+ c.call(f2mPrefix + "_add", Rz, Rz, t10),
+
+ // t6 = -t6;
+ c.call(f2mPrefix + "_neg", t6, t6),
+
+ // t1 = t6 + t6;
+ c.call(f2mPrefix + "_add", t6, t6, t1),
+ );
+ }
+
+
+ function buildPrepareG2() {
+ const f = module.addFunction(prefix+ "_prepareG2");
+ f.addParam("pQ", "i32");
+ f.addParam("ppreQ", "i32");
+ f.addLocal("pCoef", "i32");
+ f.addLocal("i", "i32");
+
+ const c = f.getCodeBuilder();
+
+
+ const Q = c.getLocal("pQ");
+
+ const pR = module.alloc(f2size*3);
+ const R = c.i32_const(pR);
+
+ const base = c.getLocal("ppreQ");
+
+ f.addCode(
+ c.call(g2mPrefix + "_normalize", Q, base),
+ c.if(
+ c.call(g2mPrefix + "_isZero", base),
+ c.ret([])
+ ),
+ c.call(g2mPrefix + "_copy", base, R),
+ c.setLocal("pCoef", c.i32_add(c.getLocal("ppreQ"), c.i32_const(f2size*3))),
+ );
+
+ f.addCode(
+ c.setLocal("i", c.i32_const(ateLoopBitBytes.length-2)),
+ c.block(c.loop(
+
+ c.call(prefix + "_prepDblStep", R, c.getLocal("pCoef")),
+ c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+
+ c.if(
+ c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes),
+ [
+ ...c.call(prefix + "_prepAddStep", R, base, c.getLocal("pCoef")),
+ ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+ ]
+ ),
+ c.br_if(1, c.i32_eqz ( c.getLocal("i") )),
+ c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+ }
+
+
+ function buildF6Mul1() {
+ const f = module.addFunction(f6mPrefix+ "_mul1");
+ f.addParam("pA", "i32"); // F6
+ f.addParam("pC1", "i32"); // F2
+ f.addParam("pR", "i32"); // F6
+
+ const c = f.getCodeBuilder();
+
+ const A_c0 = c.getLocal("pA");
+ const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*2));
+ const A_c2 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*4));
+
+ const c1 = c.getLocal("pC1");
+
+ const t1 = c.getLocal("pR");
+ const t2 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*2));
+ const b_b = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*4));
+
+ const Ac0_Ac1 = c.i32_const(module.alloc(f1size*2));
+ const Ac1_Ac2 = c.i32_const(module.alloc(f1size*2));
+
+ f.addCode(
+
+ c.call(f2mPrefix + "_add", A_c0, A_c1, Ac0_Ac1),
+ c.call(f2mPrefix + "_add", A_c1, A_c2, Ac1_Ac2),
+
+ // let b_b = self.c1 * c1;
+ c.call(f2mPrefix + "_mul", A_c1, c1, b_b),
+
+ // let t1 = (self.c1 + self.c2) * c1 - b_b;
+ c.call(f2mPrefix + "_mul", Ac1_Ac2, c1, t1),
+ c.call(f2mPrefix + "_sub", t1, b_b, t1),
+
+ // let t1 = t1.mul_by_nonresidue();
+ c.call(f2mPrefix + "_mulNR", t1, t1),
+
+ // let t2 = (self.c0 + self.c1) * c1 - b_b;
+ c.call(f2mPrefix + "_mul", Ac0_Ac1, c1, t2),
+ c.call(f2mPrefix + "_sub", t2, b_b, t2),
+ );
+ }
+ buildF6Mul1();
+
+ function buildF6Mul01() {
+ const f = module.addFunction(f6mPrefix+ "_mul01");
+ f.addParam("pA", "i32"); // F6
+ f.addParam("pC0", "i32"); // F2
+ f.addParam("pC1", "i32"); // F2
+ f.addParam("pR", "i32"); // F6
+
+ const c = f.getCodeBuilder();
+
+ const A_c0 = c.getLocal("pA");
+ const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*2));
+ const A_c2 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*4));
+
+ const c0 = c.getLocal("pC0");
+ const c1 = c.getLocal("pC1");
+
+ const t1 = c.getLocal("pR");
+ const t2 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*2));
+ const t3 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*4));
+
+ const a_a = c.i32_const(module.alloc(f1size*2));
+ const b_b = c.i32_const(module.alloc(f1size*2));
+ const Ac0_Ac1 = c.i32_const(module.alloc(f1size*2));
+ const Ac0_Ac2 = c.i32_const(module.alloc(f1size*2));
+
+ f.addCode(
+ // let a_a = self.c0 * c0;
+ c.call(f2mPrefix + "_mul", A_c0, c0, a_a),
+
+ // let b_b = self.c1 * c1;
+ c.call(f2mPrefix + "_mul", A_c1, c1, b_b),
+
+
+ c.call(f2mPrefix + "_add", A_c0, A_c1, Ac0_Ac1),
+ c.call(f2mPrefix + "_add", A_c0, A_c2, Ac0_Ac2),
+
+ // let t1 = (self.c1 + self.c2) * c1 - b_b;
+ c.call(f2mPrefix + "_add", A_c1, A_c2, t1),
+ c.call(f2mPrefix + "_mul", t1, c1, t1),
+ c.call(f2mPrefix + "_sub", t1, b_b, t1),
+
+ // let t1 = t1.mul_by_nonresidue() + a_a;
+ c.call(f2mPrefix + "_mulNR", t1, t1),
+ c.call(f2mPrefix + "_add", t1, a_a, t1),
+
+ // let t2 = (c0 + c1) * (self.c0 + self.c1) - a_a - b_b;
+ c.call(f2mPrefix + "_add", c0, c1, t2),
+ c.call(f2mPrefix + "_mul", t2, Ac0_Ac1, t2),
+ c.call(f2mPrefix + "_sub", t2, a_a, t2),
+ c.call(f2mPrefix + "_sub", t2, b_b, t2),
+
+ // let t3 = (self.c0 + self.c2) * c0 - a_a + b_b;
+ c.call(f2mPrefix + "_mul", Ac0_Ac2, c0, t3),
+ c.call(f2mPrefix + "_sub", t3, a_a, t3),
+ c.call(f2mPrefix + "_add", t3, b_b, t3),
+
+
+ );
+ }
+ buildF6Mul01();
+
+
+ function buildF12Mul014() {
+
+ const f = module.addFunction(ftmPrefix+ "_mul014");
+ f.addParam("pA", "i32"); // F12
+ f.addParam("pC0", "i32"); // F2
+ f.addParam("pC1", "i32"); // F2
+ f.addParam("pC4", "i32"); // F2
+ f.addParam("pR", "i32"); // F12
+
+ const c = f.getCodeBuilder();
+
+
+ const A_c0 = c.getLocal("pA");
+ const A_c1 = c.i32_add(c.getLocal("pA"), c.i32_const(f1size*6));
+
+ const c0 = c.getLocal("pC0");
+ const c1 = c.getLocal("pC1");
+ const c4 = c.getLocal("pC4");
+
+ const aa = c.i32_const(module.alloc(f1size*6));
+ const bb = c.i32_const(module.alloc(f1size*6));
+ const o = c.i32_const(module.alloc(f1size*2));
+
+ const R_c0 = c.getLocal("pR");
+ const R_c1 = c.i32_add(c.getLocal("pR"), c.i32_const(f1size*6));
+
+ f.addCode(
+ // let aa = self.c0.mul_by_01(c0, c1);
+ c.call(f6mPrefix + "_mul01", A_c0, c0, c1, aa),
+
+ // let bb = self.c1.mul_by_1(c4);
+ c.call(f6mPrefix + "_mul1", A_c1, c4, bb),
+
+ // let o = c1 + c4;
+ c.call(f2mPrefix + "_add", c1, c4, o),
+
+ // let c1 = self.c1 + self.c0;
+ c.call(f6mPrefix + "_add", A_c1, A_c0, R_c1),
+
+ // let c1 = c1.mul_by_01(c0, &o);
+ c.call(f6mPrefix + "_mul01", R_c1, c0, o, R_c1),
+
+ // let c1 = c1 - aa - bb;
+ c.call(f6mPrefix + "_sub", R_c1, aa, R_c1),
+ c.call(f6mPrefix + "_sub", R_c1, bb, R_c1),
+
+ // let c0 = bb;
+ c.call(f6mPrefix + "_copy", bb, R_c0),
+
+ // let c0 = c0.mul_by_nonresidue();
+ c.call(f6mPrefix + "_mulNR", R_c0, R_c0),
+
+ // let c0 = c0 + aa;
+ c.call(f6mPrefix + "_add", R_c0, aa, R_c0),
+ );
+ }
+ buildF12Mul014();
+
+
+ function buildELL() {
+ const f = module.addFunction(prefix+ "_ell");
+ f.addParam("pP", "i32");
+ f.addParam("pCoefs", "i32");
+ f.addParam("pF", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const Px = c.getLocal("pP");
+ const Py = c.i32_add(c.getLocal("pP"), c.i32_const(n8q));
+
+ const F = c.getLocal("pF");
+
+ const coef0_0 = c.getLocal("pCoefs");
+ const coef0_1 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size));
+ const coef1_0 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size*2));
+ const coef1_1 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size*3));
+ const coef2 = c.i32_add(c.getLocal("pCoefs"), c.i32_const(f1size*4));
+
+ const pc0 = module.alloc(f1size*2);
+ const c0 = c.i32_const(pc0);
+ const c0_c0 = c.i32_const(pc0);
+ const c0_c1 = c.i32_const(pc0+f1size);
+
+ const pc1 = module.alloc(f1size*2);
+ const c1 = c.i32_const(pc1);
+ const c1_c0 = c.i32_const(pc1);
+ const c1_c1 = c.i32_const(pc1+f1size);
+ f.addCode(
+ // let mut c0 = coeffs.0;
+ // let mut c1 = coeffs.1;
+ //
+ // c0.c0 *= p.y;
+ // c0.c1 *= p.y;
+ //
+ // c1.c0 *= p.x;
+ // c1.c1 *= p.x;
+ //
+ // f.mul_by_014(&coeffs.2, &c1, &c0)
+
+ c.call(f1mPrefix + "_mul", coef0_0, Py, c0_c0),
+ c.call(f1mPrefix + "_mul", coef0_1, Py, c0_c1),
+ c.call(f1mPrefix + "_mul", coef1_0, Px, c1_c0),
+ c.call(f1mPrefix + "_mul", coef1_1, Px, c1_c1),
+
+ c.call(ftmPrefix + "_mul014", F, coef2, c1, c0, F),
+
+ );
+
+ }
+ buildELL();
+
+ function buildMillerLoop() {
+ const f = module.addFunction(prefix+ "_millerLoop");
+ f.addParam("ppreP", "i32");
+ f.addParam("ppreQ", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("pCoef", "i32");
+ f.addLocal("i", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const preP = c.getLocal("ppreP");
+ c.getLocal("ppreQ");
+
+ const coefs = c.getLocal("pCoef");
+
+ const F = c.getLocal("r");
+
+
+ f.addCode(
+ c.call(ftmPrefix + "_one", F),
+
+ c.if(
+ c.call(g1mPrefix + "_isZero", preP),
+ c.ret([])
+ ),
+ c.if(
+ c.call(g1mPrefix + "_isZero", c.getLocal("ppreQ")),
+ c.ret([])
+ ),
+ c.setLocal("pCoef", c.i32_add( c.getLocal("ppreQ"), c.i32_const(f2size*3))),
+
+ c.setLocal("i", c.i32_const(ateLoopBitBytes.length-2)),
+ c.block(c.loop(
+
+
+ c.call(prefix + "_ell", preP, coefs, F),
+ c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+
+ c.if(
+ c.i32_load8_s(c.getLocal("i"), pAteLoopBitBytes),
+ [
+ ...c.call(prefix + "_ell", preP, coefs, F),
+ ...c.setLocal("pCoef", c.i32_add(c.getLocal("pCoef"), c.i32_const(ateCoefSize))),
+ ]
+ ),
+ c.call(ftmPrefix + "_square", F, F),
+
+ c.br_if(1, c.i32_eq ( c.getLocal("i"), c.i32_const(1) )),
+ c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ )),
+ c.call(prefix + "_ell", preP, coefs, F),
+
+ );
+
+
+ {
+ f.addCode(
+ c.call(ftmPrefix + "_conjugate", F, F),
+ );
+ }
+ }
+
+
+ function buildFrobeniusMap(n) {
+ const F12 = [
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ ],
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760"), BigInteger("151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027")],
+ [BigInteger("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351"), BigInteger("0")],
+ [BigInteger("2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530"), BigInteger("1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257")],
+ [BigInteger("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"), BigInteger("0")],
+ [BigInteger("3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557"), BigInteger("877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230")],
+ [BigInteger("4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786"), BigInteger("0")],
+ [BigInteger("151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027"), BigInteger("3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760")],
+ [BigInteger("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"), BigInteger("0")],
+ [BigInteger("1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257"), BigInteger("2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530")],
+ [BigInteger("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437"), BigInteger("0")],
+ [BigInteger("877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230"), BigInteger("3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557")],
+ ]
+ ];
+
+ const F6 = [
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("1"), BigInteger("0")],
+ ],
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("0"), BigInteger("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436")],
+ [BigInteger("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"), BigInteger("0")],
+ [BigInteger("0"), BigInteger("1")],
+ [BigInteger("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"), BigInteger("0")],
+ [BigInteger("0"), BigInteger("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350")],
+ ],
+ [
+ [BigInteger("1"), BigInteger("0")],
+ [BigInteger("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437"), BigInteger("0")],
+ [BigInteger("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"), BigInteger("0")],
+ [BigInteger("4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786"), BigInteger("0")],
+ [BigInteger("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"), BigInteger("0")],
+ [BigInteger("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351"), BigInteger("0")],
+ ]
+ ];
+
+ const f = module.addFunction(ftmPrefix + "_frobeniusMap"+n);
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ for (let i=0; i<6; i++) {
+ const X = (i==0) ? c.getLocal("x") : c.i32_add(c.getLocal("x"), c.i32_const(i*f2size));
+ const Xc0 = X;
+ const Xc1 = c.i32_add(c.getLocal("x"), c.i32_const(i*f2size + f1size));
+ const R = (i==0) ? c.getLocal("r") : c.i32_add(c.getLocal("r"), c.i32_const(i*f2size));
+ const Rc0 = R;
+ const Rc1 = c.i32_add(c.getLocal("r"), c.i32_const(i*f2size + f1size));
+ const coef = mul2(F12[Math.floor(i/3)][n%12] , F6[i%3][n%6]);
+ const pCoef = module.alloc([
+ ...utils$3.bigInt2BytesLE(toMontgomery(coef[0]), n8q),
+ ...utils$3.bigInt2BytesLE(toMontgomery(coef[1]), n8q),
+ ]);
+ if (n%2 == 1) {
+ f.addCode(
+ c.call(f1mPrefix + "_copy", Xc0, Rc0),
+ c.call(f1mPrefix + "_neg", Xc1, Rc1),
+ c.call(f2mPrefix + "_mul", R, c.i32_const(pCoef), R),
+ );
+ } else {
+ f.addCode(c.call(f2mPrefix + "_mul", X, c.i32_const(pCoef), R));
+ }
+ }
+
+ function mul2(a, b) {
+ const ac0 = BigInteger(a[0]);
+ const ac1 = BigInteger(a[1]);
+ const bc0 = BigInteger(b[0]);
+ const bc1 = BigInteger(b[1]);
+ const res = [
+ ac0.times(bc0).minus( ac1.times(bc1) ).mod(q),
+ ac0.times(bc1).add( ac1.times(bc0) ).mod(q),
+ ];
+ if (res[0].isNegative()) res[0] = res[0].add(q);
+ return res;
+ }
+
+ }
+
+
+ function buildCyclotomicSquare() {
+ const f = module.addFunction(prefix+ "__cyclotomicSquare");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x0 = c.getLocal("x");
+ const x4 = c.i32_add(c.getLocal("x"), c.i32_const(f2size));
+ const x3 = c.i32_add(c.getLocal("x"), c.i32_const(2*f2size));
+ const x2 = c.i32_add(c.getLocal("x"), c.i32_const(3*f2size));
+ const x1 = c.i32_add(c.getLocal("x"), c.i32_const(4*f2size));
+ const x5 = c.i32_add(c.getLocal("x"), c.i32_const(5*f2size));
+
+ const r0 = c.getLocal("r");
+ const r4 = c.i32_add(c.getLocal("r"), c.i32_const(f2size));
+ const r3 = c.i32_add(c.getLocal("r"), c.i32_const(2*f2size));
+ const r2 = c.i32_add(c.getLocal("r"), c.i32_const(3*f2size));
+ const r1 = c.i32_add(c.getLocal("r"), c.i32_const(4*f2size));
+ const r5 = c.i32_add(c.getLocal("r"), c.i32_const(5*f2size));
+
+ const t0 = c.i32_const(module.alloc(f2size));
+ const t1 = c.i32_const(module.alloc(f2size));
+ const t2 = c.i32_const(module.alloc(f2size));
+ const t3 = c.i32_const(module.alloc(f2size));
+ const t4 = c.i32_const(module.alloc(f2size));
+ const t5 = c.i32_const(module.alloc(f2size));
+ const tmp = c.i32_const(module.alloc(f2size));
+ const AUX = c.i32_const(module.alloc(f2size));
+
+
+ f.addCode(
+
+ // c.call(ftmPrefix + "_square", x0, r0),
+
+ // // t0 + t1*y = (z0 + z1*y)^2 = a^2
+ // tmp = z0 * z1;
+ // t0 = (z0 + z1) * (z0 + my_Fp6::non_residue * z1) - tmp - my_Fp6::non_residue * tmp;
+ // t1 = tmp + tmp;
+ c.call(f2mPrefix + "_mul", x0, x1, tmp),
+ c.call(f2mPrefix + "_mulNR", x1, t0),
+ c.call(f2mPrefix + "_add", x0, t0, t0),
+ c.call(f2mPrefix + "_add", x0, x1, AUX),
+ c.call(f2mPrefix + "_mul", AUX, t0, t0),
+ c.call(f2mPrefix + "_mulNR", tmp, AUX),
+ c.call(f2mPrefix + "_add", tmp, AUX, AUX),
+ c.call(f2mPrefix + "_sub", t0, AUX, t0),
+ c.call(f2mPrefix + "_add", tmp, tmp, t1),
+
+ // // t2 + t3*y = (z2 + z3*y)^2 = b^2
+ // tmp = z2 * z3;
+ // t2 = (z2 + z3) * (z2 + my_Fp6::non_residue * z3) - tmp - my_Fp6::non_residue * tmp;
+ // t3 = tmp + tmp;
+ c.call(f2mPrefix + "_mul", x2, x3, tmp),
+ c.call(f2mPrefix + "_mulNR", x3, t2),
+ c.call(f2mPrefix + "_add", x2, t2, t2),
+ c.call(f2mPrefix + "_add", x2, x3, AUX),
+ c.call(f2mPrefix + "_mul", AUX, t2, t2),
+ c.call(f2mPrefix + "_mulNR", tmp, AUX),
+ c.call(f2mPrefix + "_add", tmp, AUX, AUX),
+ c.call(f2mPrefix + "_sub", t2, AUX, t2),
+ c.call(f2mPrefix + "_add", tmp, tmp, t3),
+
+ // // t4 + t5*y = (z4 + z5*y)^2 = c^2
+ // tmp = z4 * z5;
+ // t4 = (z4 + z5) * (z4 + my_Fp6::non_residue * z5) - tmp - my_Fp6::non_residue * tmp;
+ // t5 = tmp + tmp;
+ c.call(f2mPrefix + "_mul", x4, x5, tmp),
+ c.call(f2mPrefix + "_mulNR", x5, t4),
+ c.call(f2mPrefix + "_add", x4, t4, t4),
+ c.call(f2mPrefix + "_add", x4, x5, AUX),
+ c.call(f2mPrefix + "_mul", AUX, t4, t4),
+ c.call(f2mPrefix + "_mulNR", tmp, AUX),
+ c.call(f2mPrefix + "_add", tmp, AUX, AUX),
+ c.call(f2mPrefix + "_sub", t4, AUX, t4),
+ c.call(f2mPrefix + "_add", tmp, tmp, t5),
+
+ // For A
+ // z0 = 3 * t0 - 2 * z0
+ c.call(f2mPrefix + "_sub", t0, x0, r0),
+ c.call(f2mPrefix + "_add", r0, r0, r0),
+ c.call(f2mPrefix + "_add", t0, r0, r0),
+ // z1 = 3 * t1 + 2 * z1
+ c.call(f2mPrefix + "_add", t1, x1, r1),
+ c.call(f2mPrefix + "_add", r1, r1, r1),
+ c.call(f2mPrefix + "_add", t1, r1, r1),
+
+ // For B
+ // z2 = 3 * (xi * t5) + 2 * z2
+ c.call(f2mPrefix + "_mul", t5, c.i32_const(pBls12381Twist), AUX),
+ c.call(f2mPrefix + "_add", AUX, x2, r2),
+ c.call(f2mPrefix + "_add", r2, r2, r2),
+ c.call(f2mPrefix + "_add", AUX, r2, r2),
+ // z3 = 3 * t4 - 2 * z3
+ c.call(f2mPrefix + "_sub", t4, x3, r3),
+ c.call(f2mPrefix + "_add", r3, r3, r3),
+ c.call(f2mPrefix + "_add", t4, r3, r3),
+
+ // For C
+ // z4 = 3 * t2 - 2 * z4
+ c.call(f2mPrefix + "_sub", t2, x4, r4),
+ c.call(f2mPrefix + "_add", r4, r4, r4),
+ c.call(f2mPrefix + "_add", t2, r4, r4),
+ // z5 = 3 * t3 + 2 * z5
+ c.call(f2mPrefix + "_add", t3, x5, r5),
+ c.call(f2mPrefix + "_add", r5, r5, r5),
+ c.call(f2mPrefix + "_add", t3, r5, r5),
+
+ );
+ }
+
+
+ function buildCyclotomicExp(exponent, isExpNegative, fnName) {
+ const exponentNafBytes = naf(exponent).map( (b) => (b==-1 ? 0xFF: b) );
+ const pExponentNafBytes = module.alloc(exponentNafBytes);
+ // const pExponent = module.alloc(utils.bigInt2BytesLE(exponent, n8));
+
+ const f = module.addFunction(prefix+ "__cyclotomicExp_"+fnName);
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+ f.addLocal("bit", "i32");
+ f.addLocal("i", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const x = c.getLocal("x");
+
+ const res = c.getLocal("r");
+
+ const inverse = c.i32_const(module.alloc(ftsize));
+
+
+ f.addCode(
+ // c.call(ftmPrefix + "_exp", x, c.i32_const(pExponent), c.i32_const(32), res),
+
+ c.call(ftmPrefix + "_conjugate", x, inverse),
+ c.call(ftmPrefix + "_one", res),
+
+ c.if(
+ c.teeLocal("bit", c.i32_load8_s(c.i32_const(exponentNafBytes.length-1), pExponentNafBytes)),
+ c.if(
+ c.i32_eq(
+ c.getLocal("bit"),
+ c.i32_const(1)
+ ),
+ c.call(ftmPrefix + "_mul", res, x, res),
+ c.call(ftmPrefix + "_mul", res, inverse, res),
+ )
+ ),
+
+ c.setLocal("i", c.i32_const(exponentNafBytes.length-2)),
+ c.block(c.loop(
+ // c.call(ftmPrefix + "_square", res, res),
+ c.call(prefix + "__cyclotomicSquare", res, res),
+ c.if(
+ c.teeLocal("bit", c.i32_load8_s(c.getLocal("i"), pExponentNafBytes)),
+ c.if(
+ c.i32_eq(
+ c.getLocal("bit"),
+ c.i32_const(1)
+ ),
+ c.call(ftmPrefix + "_mul", res, x, res),
+ c.call(ftmPrefix + "_mul", res, inverse, res),
+ )
+ ),
+ c.br_if(1, c.i32_eqz ( c.getLocal("i") )),
+ c.setLocal("i", c.i32_sub(c.getLocal("i"), c.i32_const(1))),
+ c.br(0)
+ ))
+ );
+
+ if (isExpNegative) {
+ f.addCode(
+ c.call(ftmPrefix + "_conjugate", res, res),
+ );
+ }
+
+ }
+
+ function buildFinalExponentiation() {
+ buildCyclotomicSquare();
+ buildCyclotomicExp(finalExpZ, finalExpIsNegative, "w0");
+
+ const f = module.addFunction(prefix+ "_finalExponentiation");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const c = f.getCodeBuilder();
+
+ const elt = c.getLocal("x");
+ const res = c.getLocal("r");
+ const t0 = c.i32_const(module.alloc(ftsize));
+ const t1 = c.i32_const(module.alloc(ftsize));
+ const t2 = c.i32_const(module.alloc(ftsize));
+ const t3 = c.i32_const(module.alloc(ftsize));
+ const t4 = c.i32_const(module.alloc(ftsize));
+ const t5 = c.i32_const(module.alloc(ftsize));
+ const t6 = c.i32_const(module.alloc(ftsize));
+
+ f.addCode(
+
+ // let mut t0 = f.frobenius_map(6)
+ c.call(ftmPrefix + "_frobeniusMap6", elt, t0),
+
+ // let t1 = f.invert()
+ c.call(ftmPrefix + "_inverse", elt, t1),
+
+ // let mut t2 = t0 * t1;
+ c.call(ftmPrefix + "_mul", t0, t1, t2),
+
+ // t1 = t2.clone();
+ c.call(ftmPrefix + "_copy", t2, t1),
+
+ // t2 = t2.frobenius_map().frobenius_map();
+ c.call(ftmPrefix + "_frobeniusMap2", t2, t2),
+
+ // t2 *= t1;
+ c.call(ftmPrefix + "_mul", t2, t1, t2),
+
+
+ // t1 = cyclotomic_square(t2).conjugate();
+ c.call(prefix + "__cyclotomicSquare", t2, t1),
+ c.call(ftmPrefix + "_conjugate", t1, t1),
+
+ // let mut t3 = cycolotomic_exp(t2);
+ c.call(prefix + "__cyclotomicExp_w0", t2, t3),
+
+ // let mut t4 = cyclotomic_square(t3);
+ c.call(prefix + "__cyclotomicSquare", t3, t4),
+
+ // let mut t5 = t1 * t3;
+ c.call(ftmPrefix + "_mul", t1, t3, t5),
+
+ // t1 = cycolotomic_exp(t5);
+ c.call(prefix + "__cyclotomicExp_w0", t5, t1),
+
+ // t0 = cycolotomic_exp(t1);
+ c.call(prefix + "__cyclotomicExp_w0", t1, t0),
+
+ // let mut t6 = cycolotomic_exp(t0);
+ c.call(prefix + "__cyclotomicExp_w0", t0, t6),
+
+ // t6 *= t4;
+ c.call(ftmPrefix + "_mul", t6, t4, t6),
+
+ // t4 = cycolotomic_exp(t6);
+ c.call(prefix + "__cyclotomicExp_w0", t6, t4),
+
+ // t5 = t5.conjugate();
+ c.call(ftmPrefix + "_conjugate", t5, t5),
+
+ // t4 *= t5 * t2;
+ c.call(ftmPrefix + "_mul", t4, t5, t4),
+ c.call(ftmPrefix + "_mul", t4, t2, t4),
+
+ // t5 = t2.conjugate();
+ c.call(ftmPrefix + "_conjugate", t2, t5),
+
+ // t1 *= t2;
+ c.call(ftmPrefix + "_mul", t1, t2, t1),
+
+ // t1 = t1.frobenius_map().frobenius_map().frobenius_map();
+ c.call(ftmPrefix + "_frobeniusMap3", t1, t1),
+
+ // t6 *= t5;
+ c.call(ftmPrefix + "_mul", t6, t5, t6),
+
+ // t6 = t6.frobenius_map();
+ c.call(ftmPrefix + "_frobeniusMap1", t6, t6),
+
+ // t3 *= t0;
+ c.call(ftmPrefix + "_mul", t3, t0, t3),
+
+ // t3 = t3.frobenius_map().frobenius_map();
+ c.call(ftmPrefix + "_frobeniusMap2", t3, t3),
+
+ // t3 *= t1;
+ c.call(ftmPrefix + "_mul", t3, t1, t3),
+
+ // t3 *= t6;
+ c.call(ftmPrefix + "_mul", t3, t6, t3),
+
+ // f = t3 * t4;
+ c.call(ftmPrefix + "_mul", t3, t4, res),
+
+ );
+ }
+
+
+ function buildFinalExponentiationOld() {
+ const f = module.addFunction(prefix+ "_finalExponentiationOld");
+ f.addParam("x", "i32");
+ f.addParam("r", "i32");
+
+ const exponent = BigInteger("322277361516934140462891564586510139908379969514828494218366688025288661041104682794998680497580008899973249814104447692778988208376779573819485263026159588510513834876303014016798809919343532899164848730280942609956670917565618115867287399623286813270357901731510188149934363360381614501334086825442271920079363289954510565375378443704372994881406797882676971082200626541916413184642520269678897559532260949334760604962086348898118982248842634379637598665468817769075878555493752214492790122785850202957575200176084204422751485957336465472324810982833638490904279282696134323072515220044451592646885410572234451732790590013479358343841220074174848221722017083597872017638514103174122784843925578370430843522959600095676285723737049438346544753168912974976791528535276317256904336520179281145394686565050419250614107803233314658825463117900250701199181529205942363159325765991819433914303908860460720581408201373164047773794825411011922305820065611121544561808414055302212057471395719432072209245600258134364584636810093520285711072578721435517884103526483832733289802426157301542744476740008494780363354305116978805620671467071400711358839553375340724899735460480144599782014906586543813292157922220645089192130209334926661588737007768565838519456601560804957985667880395221049249803753582637708560");
+
+ const pExponent = module.alloc(utils$3.bigInt2BytesLE( exponent, 544 ));
+
+ const c = f.getCodeBuilder();
+
+ f.addCode(
+ c.call(ftmPrefix + "_exp", c.getLocal("x"), c.i32_const(pExponent), c.i32_const(544), c.getLocal("r")),
+ );
+ }
+
+
+ const pPreP = module.alloc(prePSize);
+ const pPreQ = module.alloc(preQSize);
+
+ function buildPairingEquation(nPairings) {
+
+ const f = module.addFunction(prefix+ "_pairingEq"+nPairings);
+ for (let i=0; i.
+ */
+
+ // module.exports.bn128_wasm = require("./build/bn128_wasm.js");
+ // module.exports.bls12381_wasm = require("./build/bls12381_wasm.js");
// module.exports.mnt6753_wasm = require("./build/mnt6753_wasm.js");
- var wasmcurves = {
- bn128_wasm: bn128_wasm$1,
- bls12381_wasm: bls12381_wasm$1
- };
+ var buildBn128$1 = build_bn128;
+ var buildBls12381$1 = build_bls12381;
/* global BigInt */
- function stringifyBigInts(o) {
+ function stringifyBigInts$6(o) {
if ((typeof(o) == "bigint") || o.eq !== undefined) {
return o.toString(10);
} else if (o instanceof Uint8Array) {
return fromRprLE(o, 0);
} else if (Array.isArray(o)) {
- return o.map(stringifyBigInts);
+ return o.map(stringifyBigInts$6);
} else if (typeof o == "object") {
const res = {};
const keys = Object.keys(o);
keys.forEach( (k) => {
- res[k] = stringifyBigInts(o[k]);
+ res[k] = stringifyBigInts$6(o[k]);
});
return res;
} else {
@@ -3220,19 +14274,19 @@ var snarkjs = (function (exports) {
}
}
- function unstringifyBigInts(o) {
+ function unstringifyBigInts$4(o) {
if ((typeof(o) == "string") && (/^[0-9]+$/.test(o) )) {
return BigInt(o);
} else if ((typeof(o) == "string") && (/^0x[0-9a-fA-F]+$/.test(o) )) {
return BigInt(o);
} else if (Array.isArray(o)) {
- return o.map(unstringifyBigInts);
+ return o.map(unstringifyBigInts$4);
} else if (typeof o == "object") {
if (o===null) return null;
const res = {};
const keys = Object.keys(o);
keys.forEach( (k) => {
- res[k] = unstringifyBigInts(o[k]);
+ res[k] = unstringifyBigInts$4(o[k]);
});
return res;
} else {
@@ -3240,7 +14294,7 @@ var snarkjs = (function (exports) {
}
}
- function beBuff2int(buff) {
+ function beBuff2int$2(buff) {
let res = BigInt(0);
let i = buff.length;
let offset = 0;
@@ -3263,7 +14317,7 @@ var snarkjs = (function (exports) {
return res;
}
- function beInt2Buff(n, len) {
+ function beInt2Buff$2(n, len) {
let r = n;
const buff = new Uint8Array(len);
const buffV = new DataView(buff.buffer);
@@ -3290,7 +14344,7 @@ var snarkjs = (function (exports) {
}
- function leBuff2int(buff) {
+ function leBuff2int$2(buff) {
let res = BigInt(0);
let i = 0;
const buffV = new DataView(buff.buffer, buff.byteOffset, buff.byteLength);
@@ -3309,10 +14363,10 @@ var snarkjs = (function (exports) {
return res;
}
- function leInt2Buff(n, len) {
+ function leInt2Buff$2(n, len) {
let r = n;
if (typeof len === "undefined") {
- len = Math.floor((bitLength$2(n) - 1) / 8) +1;
+ len = Math.floor((bitLength(n) - 1) / 8) +1;
if (len==0) len = 1;
}
const buff = new Uint8Array(len);
@@ -3339,26 +14393,19 @@ var snarkjs = (function (exports) {
return buff;
}
- var utils_native = /*#__PURE__*/Object.freeze({
- __proto__: null,
- stringifyBigInts: stringifyBigInts,
- unstringifyBigInts: unstringifyBigInts,
- beBuff2int: beBuff2int,
- beInt2Buff: beInt2Buff,
- leBuff2int: leBuff2int,
- leInt2Buff: leInt2Buff
- });
- function stringifyBigInts$1(o) {
+ function stringifyFElements$1(F, o) {
if ((typeof(o) == "bigint") || o.eq !== undefined) {
return o.toString(10);
+ } else if (o instanceof Uint8Array) {
+ return F.toString(F.e(o));
} else if (Array.isArray(o)) {
- return o.map(stringifyBigInts$1);
+ return o.map(stringifyFElements$1.bind(this,F));
} else if (typeof o == "object") {
const res = {};
const keys = Object.keys(o);
keys.forEach( (k) => {
- res[k] = stringifyBigInts$1(o[k]);
+ res[k] = stringifyFElements$1(F, o[k]);
});
return res;
} else {
@@ -3366,18 +14413,68 @@ var snarkjs = (function (exports) {
}
}
- function unstringifyBigInts$1(o) {
+
+ function unstringifyFElements$1(F, o) {
+ if ((typeof(o) == "string") && (/^[0-9]+$/.test(o) )) {
+ return F.e(o);
+ } else if ((typeof(o) == "string") && (/^0x[0-9a-fA-F]+$/.test(o) )) {
+ return F.e(o);
+ } else if (Array.isArray(o)) {
+ return o.map(unstringifyFElements$1.bind(this,F));
+ } else if (typeof o == "object") {
+ if (o===null) return null;
+ const res = {};
+ const keys = Object.keys(o);
+ keys.forEach( (k) => {
+ res[k] = unstringifyFElements$1(F, o[k]);
+ });
+ return res;
+ } else {
+ return o;
+ }
+ }
+
+ var utils_native = /*#__PURE__*/Object.freeze({
+ __proto__: null,
+ stringifyBigInts: stringifyBigInts$6,
+ unstringifyBigInts: unstringifyBigInts$4,
+ beBuff2int: beBuff2int$2,
+ beInt2Buff: beInt2Buff$2,
+ leBuff2int: leBuff2int$2,
+ leInt2Buff: leInt2Buff$2,
+ stringifyFElements: stringifyFElements$1,
+ unstringifyFElements: unstringifyFElements$1
+ });
+
+ function stringifyBigInts$5(o) {
+ if ((typeof(o) == "bigint") || o.eq !== undefined) {
+ return o.toString(10);
+ } else if (Array.isArray(o)) {
+ return o.map(stringifyBigInts$5);
+ } else if (typeof o == "object") {
+ const res = {};
+ const keys = Object.keys(o);
+ keys.forEach( (k) => {
+ res[k] = stringifyBigInts$5(o[k]);
+ });
+ return res;
+ } else {
+ return o;
+ }
+ }
+
+ function unstringifyBigInts$3(o) {
if ((typeof(o) == "string") && (/^[0-9]+$/.test(o) )) {
return BigInteger(o);
} else if ((typeof(o) == "string") && (/^0x[0-9a-fA-F]+$/.test(o) )) {
return BigInteger(o);
} else if (Array.isArray(o)) {
- return o.map(unstringifyBigInts$1);
+ return o.map(unstringifyBigInts$3);
} else if (typeof o == "object") {
const res = {};
const keys = Object.keys(o);
keys.forEach( (k) => {
- res[k] = unstringifyBigInts$1(o[k]);
+ res[k] = unstringifyBigInts$3(o[k]);
});
return res;
} else {
@@ -3438,21 +14535,21 @@ var snarkjs = (function (exports) {
var utils_bigint = /*#__PURE__*/Object.freeze({
__proto__: null,
- stringifyBigInts: stringifyBigInts$1,
- unstringifyBigInts: unstringifyBigInts$1,
+ stringifyBigInts: stringifyBigInts$5,
+ unstringifyBigInts: unstringifyBigInts$3,
beBuff2int: beBuff2int$1,
beInt2Buff: beInt2Buff$1,
leBuff2int: leBuff2int$1,
leInt2Buff: leInt2Buff$1
});
- let utils = {};
+ let utils$2 = {};
- const supportsNativeBigInt$2 = typeof BigInt === "function";
- if (supportsNativeBigInt$2) {
- Object.assign(utils, utils_native);
+ const supportsNativeBigInt = typeof BigInt === "function";
+ if (supportsNativeBigInt) {
+ Object.assign(utils$2, utils_native);
} else {
- Object.assign(utils, utils_bigint);
+ Object.assign(utils$2, utils_bigint);
}
@@ -3472,7 +14569,7 @@ var snarkjs = (function (exports) {
return res;
}
- utils.bitReverse = function bitReverse(idx, bits) {
+ utils$2.bitReverse = function bitReverse(idx, bits) {
return (
_revTable$1[idx >>> 24] |
(_revTable$1[(idx >>> 16) & 0xFF] << 8) |
@@ -3482,19 +14579,19 @@ var snarkjs = (function (exports) {
};
- utils.log2 = function log2( V )
+ utils$2.log2 = function log2( V )
{
return( ( ( V & 0xFFFF0000 ) !== 0 ? ( V &= 0xFFFF0000, 16 ) : 0 ) | ( ( V & 0xFF00FF00 ) !== 0 ? ( V &= 0xFF00FF00, 8 ) : 0 ) | ( ( V & 0xF0F0F0F0 ) !== 0 ? ( V &= 0xF0F0F0F0, 4 ) : 0 ) | ( ( V & 0xCCCCCCCC ) !== 0 ? ( V &= 0xCCCCCCCC, 2 ) : 0 ) | ( ( V & 0xAAAAAAAA ) !== 0 ) );
};
- utils.buffReverseBits = function buffReverseBits(buff, eSize) {
+ utils$2.buffReverseBits = function buffReverseBits(buff, eSize) {
const n = buff.byteLength /eSize;
- const bits = utils.log2(n);
+ const bits = utils$2.log2(n);
if (n != (1 << bits)) {
throw new Error("Invalid number of pointers");
}
for (let i=0; ir) {
const tmp = buff.slice(i*eSize, (i+1)*eSize);
buff.set( buff.slice(r*eSize, (r+1)*eSize), i*eSize);
@@ -3503,40 +14600,68 @@ var snarkjs = (function (exports) {
}
};
+
+ utils$2.array2buffer = function(arr, sG) {
+ const buff = new Uint8Array(sG*arr.length);
+
+ for (let i=0; i0) {
// bytes to copy from this page
- const l = (o+r > PAGE_SIZE) ? (PAGE_SIZE -o) : r;
+ const l = (o+r > PAGE_SIZE$1) ? (PAGE_SIZE$1 -o) : r;
const srcView = new Uint8Array(this.buffers[p].buffer, this.buffers[p].byteOffset+o, l);
if (l == len) return srcView.slice();
if (!buff) {
- if (len <= PAGE_SIZE) {
+ if (len <= PAGE_SIZE$1) {
buff = new Uint8Array(len);
} else {
buff = new BigBuffer(len);
@@ -3587,24 +14712,24 @@ var snarkjs = (function (exports) {
if (len==0) return;
- const firstPage = Math.floor(offset / PAGE_SIZE);
- const lastPage = Math.floor((offset+len-1) / PAGE_SIZE);
+ const firstPage = Math.floor(offset / PAGE_SIZE$1);
+ const lastPage = Math.floor((offset+len-1) / PAGE_SIZE$1);
if (firstPage == lastPage) {
if ((buff instanceof BigBuffer)&&(buff.buffers.length==1)) {
- return this.buffers[firstPage].set(buff.buffers[0], offset % PAGE_SIZE);
+ return this.buffers[firstPage].set(buff.buffers[0], offset % PAGE_SIZE$1);
} else {
- return this.buffers[firstPage].set(buff, offset % PAGE_SIZE);
+ return this.buffers[firstPage].set(buff, offset % PAGE_SIZE$1);
}
}
let p = firstPage;
- let o = offset % PAGE_SIZE;
+ let o = offset % PAGE_SIZE$1;
let r = len;
while (r>0) {
- const l = (o+r > PAGE_SIZE) ? (PAGE_SIZE -o) : r;
+ const l = (o+r > PAGE_SIZE$1) ? (PAGE_SIZE$1 -o) : r;
const srcView = buff.slice( len -r, len -r+l);
const dstView = new Uint8Array(this.buffers[p].buffer, this.buffers[p].byteOffset + o, l);
dstView.set(srcView);
@@ -3679,9 +14804,9 @@ var snarkjs = (function (exports) {
this.type = "F1";
this.m = 1;
- this.half = shiftRight$2(p, one);
- this.bitLength = bitLength$2(p);
- this.mask = sub$2(shiftLeft$2(one, this.bitLength), one);
+ this.half = shiftRight(p, one);
+ this.bitLength = bitLength(p);
+ this.mask = sub(shiftLeft(one, this.bitLength), one);
this.pOp1 = tm.alloc(n8);
this.pOp2 = tm.alloc(n8);
@@ -3701,7 +14826,7 @@ var snarkjs = (function (exports) {
throw new Error("n8 must be a multiple of 8");
}
- this.half = shiftRight$2(this.p, one);
+ this.half = shiftRight(this.p, one);
this.nqr = this.two;
let r = this.exp(this.nqr, this.half);
while (!this.eq(r, this.negone)) {
@@ -3713,11 +14838,11 @@ var snarkjs = (function (exports) {
this.shiftInv = this.inv(this.shift);
this.s = 0;
- let t = sub$2(this.p, one);
+ let t = sub(this.p, one);
- while ( !isOdd$2(t) ) {
+ while ( !isOdd(t) ) {
this.s = this.s + 1;
- t = shiftRight$2(t, one);
+ t = shiftRight(t, one);
}
this.w = [];
@@ -3819,7 +14944,7 @@ var snarkjs = (function (exports) {
exp(a, b) {
if (!(b instanceof Uint8Array)) {
- b = toLEBuff(e$2(b));
+ b = toLEBuff(e(b));
}
this.tm.setBuff(this.pOp1, a);
this.tm.setBuff(this.pOp2, b);
@@ -3833,26 +14958,26 @@ var snarkjs = (function (exports) {
e(a, b) {
if (a instanceof Uint8Array) return a;
- let ra = e$2(a, b);
- if (isNegative$2(ra)) {
- ra = neg$2(ra);
- if (gt$2(ra, this.p)) {
- ra = mod$2(ra, this.p);
+ let ra = e(a, b);
+ if (isNegative(ra)) {
+ ra = neg(ra);
+ if (gt(ra, this.p)) {
+ ra = mod(ra, this.p);
}
- ra = sub$2(this.p, ra);
+ ra = sub(this.p, ra);
} else {
- if (gt$2(ra, this.p)) {
- ra = mod$2(ra, this.p);
+ if (gt(ra, this.p)) {
+ ra = mod(ra, this.p);
}
}
- const buff = leInt2Buff$2(ra, this.n8);
+ const buff = leInt2Buff(ra, this.n8);
return this.toMontgomery(buff);
}
toString(a, radix) {
const an = this.fromMontgomery(a);
const s = fromRprLE(an, 0);
- return toString(s, radix);
+ return toString$6(s, radix);
}
fromRng(rng) {
@@ -3861,10 +14986,10 @@ var snarkjs = (function (exports) {
do {
v = zero;
for (let i=0; i setTimeout(resolve, ms));
}
- function base64ToArrayBuffer(base64) {
- {
- var binary_string = globalThis.atob(base64);
- var len = binary_string.length;
- var bytes = new Uint8Array(len);
- for (var i = 0; i < len; i++) {
- bytes[i] = binary_string.charCodeAt(i);
- }
- return bytes;
- }
- }
-
function stringToBase64(str) {
{
return globalThis.btoa(str);
@@ -4934,7 +16061,7 @@ var snarkjs = (function (exports) {
tm.u8 = new Uint8Array(tm.memory.buffer);
tm.u32 = new Uint32Array(tm.memory.buffer);
- const wasmModule = await WebAssembly.compile(base64ToArrayBuffer(wasm.code));
+ const wasmModule = await WebAssembly.compile(wasm.code);
tm.instance = await WebAssembly.instantiate(wasmModule, {
env: {
@@ -4957,7 +16084,7 @@ var snarkjs = (function (exports) {
if (singleThread) {
- tm.code = base64ToArrayBuffer(wasm.code);
+ tm.code = wasm.code;
tm.taskManager = thread();
await tm.taskManager([{
cmd: "INIT",
@@ -4977,13 +16104,18 @@ var snarkjs = (function (exports) {
} else {
concurrency = os.cpus().length;
}
+
+ if(concurrency == 0){
+ concurrency = 2;
+ }
+
// Limit to 64 threads for memory reasons.
if (concurrency>64) concurrency=64;
tm.concurrency = concurrency;
for (let i = 0; i.
+ */
+
+ function toNumber(n) {
+ let v;
+ if (typeof n=="string") {
+ if (n.slice(0,2).toLowerCase() == "0x") {
+ v = BigInteger(n.slice(2),16);
+ } else {
+ v = BigInteger(n);
+ }
+ } else {
+ v = BigInteger(n);
+ }
+ return v;
+ }
+
+ function u32(n) {
+ const b = [];
+ const v = toNumber(n);
+ b.push(v.and(0xFF).toJSNumber());
+ b.push(v.shiftRight(8).and(0xFF).toJSNumber());
+ b.push(v.shiftRight(16).and(0xFF).toJSNumber());
+ b.push(v.shiftRight(24).and(0xFF).toJSNumber());
+ return b;
+ }
+
+ function u64(n) {
+ const b = [];
+ const v = toNumber(n);
+ b.push(v.and(0xFF).toJSNumber());
+ b.push(v.shiftRight(8).and(0xFF).toJSNumber());
+ b.push(v.shiftRight(16).and(0xFF).toJSNumber());
+ b.push(v.shiftRight(24).and(0xFF).toJSNumber());
+ b.push(v.shiftRight(32).and(0xFF).toJSNumber());
+ b.push(v.shiftRight(40).and(0xFF).toJSNumber());
+ b.push(v.shiftRight(48).and(0xFF).toJSNumber());
+ b.push(v.shiftRight(56).and(0xFF).toJSNumber());
+ return b;
+ }
+
+ function toUTF8Array(str) {
+ var utf8 = [];
+ for (var i=0; i < str.length; i++) {
+ var charcode = str.charCodeAt(i);
+ if (charcode < 0x80) utf8.push(charcode);
+ else if (charcode < 0x800) {
+ utf8.push(0xc0 | (charcode >> 6),
+ 0x80 | (charcode & 0x3f));
+ }
+ else if (charcode < 0xd800 || charcode >= 0xe000) {
+ utf8.push(0xe0 | (charcode >> 12),
+ 0x80 | ((charcode>>6) & 0x3f),
+ 0x80 | (charcode & 0x3f));
+ }
+ // surrogate pair
+ else {
+ i++;
+ // UTF-16 encodes 0x10000-0x10FFFF by
+ // subtracting 0x10000 and splitting the
+ // 20 bits of 0x0-0xFFFFF into two halves
+ charcode = 0x10000 + (((charcode & 0x3ff)<<10)
+ | (str.charCodeAt(i) & 0x3ff));
+ utf8.push(0xf0 | (charcode >>18),
+ 0x80 | ((charcode>>12) & 0x3f),
+ 0x80 | ((charcode>>6) & 0x3f),
+ 0x80 | (charcode & 0x3f));
+ }
+ }
+ return utf8;
+ }
+
+ function string(str) {
+ const bytes = toUTF8Array(str);
+ return [ ...varuint32(bytes.length), ...bytes ];
+ }
+
+ function varuint(n) {
+ const code = [];
+ let v = toNumber(n);
+ if (v.isNegative()) throw new Error("Number cannot be negative");
+ while (!v.isZero()) {
+ code.push(v.and(0x7F).toJSNumber());
+ v = v.shiftRight(7);
+ }
+ if (code.length==0) code.push(0);
+ for (let i=0; i.
+ */
+
+ class CodeBuilder {
+ constructor(func) {
+ this.func = func;
+ this.functionName = func.functionName;
+ this.module = func.module;
+ }
+
+ setLocal(localName, valCode) {
+ const idx = this.func.localIdxByName[localName];
+ if (idx === undefined)
+ throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${localName} `);
+ return [...valCode, 0x21, ...utils$1.varuint32( idx )];
+ }
+
+ teeLocal(localName, valCode) {
+ const idx = this.func.localIdxByName[localName];
+ if (idx === undefined)
+ throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${localName} `);
+ return [...valCode, 0x22, ...utils$1.varuint32( idx )];
+ }
+
+ getLocal(localName) {
+ const idx = this.func.localIdxByName[localName];
+ if (idx === undefined)
+ throw new Error(`Local Variable not defined: Function: ${this.functionName} local: ${localName} `);
+ return [0x20, ...utils$1.varuint32( idx )];
+ }
+
+ i64_load8_s(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 0 : _align; // 8 bits alignment by default
+ return [...idxCode, 0x30, align, ...utils$1.varuint32(offset)];
+ }
+
+ i64_load8_u(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 0 : _align; // 8 bits alignment by default
+ return [...idxCode, 0x31, align, ...utils$1.varuint32(offset)];
+ }
+
+ i64_load16_s(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 1 : _align; // 16 bits alignment by default
+ return [...idxCode, 0x32, align, ...utils$1.varuint32(offset)];
+ }
+
+ i64_load16_u(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 1 : _align; // 16 bits alignment by default
+ return [...idxCode, 0x33, align, ...utils$1.varuint32(offset)];
+ }
+
+ i64_load32_s(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 2 : _align; // 32 bits alignment by default
+ return [...idxCode, 0x34, align, ...utils$1.varuint32(offset)];
+ }
+
+ i64_load32_u(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 2 : _align; // 32 bits alignment by default
+ return [...idxCode, 0x35, align, ...utils$1.varuint32(offset)];
+ }
+
+ i64_load(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 3 : _align; // 64 bits alignment by default
+ return [...idxCode, 0x29, align, ...utils$1.varuint32(offset)];
+ }
+
+
+ i64_store(idxCode, _offset, _align, _codeVal) {
+ let offset, align, codeVal;
+ if (Array.isArray(_offset)) {
+ offset = 0;
+ align = 3;
+ codeVal = _offset;
+ } else if (Array.isArray(_align)) {
+ offset = _offset;
+ align = 3;
+ codeVal = _align;
+ } else if (Array.isArray(_codeVal)) {
+ offset = _offset;
+ align = _align;
+ codeVal = _codeVal;
+ }
+ return [...idxCode, ...codeVal, 0x37, align, ...utils$1.varuint32(offset)];
+ }
+
+ i64_store32(idxCode, _offset, _align, _codeVal) {
+ let offset, align, codeVal;
+ if (Array.isArray(_offset)) {
+ offset = 0;
+ align = 2;
+ codeVal = _offset;
+ } else if (Array.isArray(_align)) {
+ offset = _offset;
+ align = 2;
+ codeVal = _align;
+ } else if (Array.isArray(_codeVal)) {
+ offset = _offset;
+ align = _align;
+ codeVal = _codeVal;
+ }
+ return [...idxCode, ...codeVal, 0x3e, align, ...utils$1.varuint32(offset)];
+ }
+
+
+ i64_store16(idxCode, _offset, _align, _codeVal) {
+ let offset, align, codeVal;
+ if (Array.isArray(_offset)) {
+ offset = 0;
+ align = 1;
+ codeVal = _offset;
+ } else if (Array.isArray(_align)) {
+ offset = _offset;
+ align = 1;
+ codeVal = _align;
+ } else if (Array.isArray(_codeVal)) {
+ offset = _offset;
+ align = _align;
+ codeVal = _codeVal;
+ }
+ return [...idxCode, ...codeVal, 0x3d, align, ...utils$1.varuint32(offset)];
+ }
+
+
+ i64_store8(idxCode, _offset, _align, _codeVal) {
+ let offset, align, codeVal;
+ if (Array.isArray(_offset)) {
+ offset = 0;
+ align = 0;
+ codeVal = _offset;
+ } else if (Array.isArray(_align)) {
+ offset = _offset;
+ align = 0;
+ codeVal = _align;
+ } else if (Array.isArray(_codeVal)) {
+ offset = _offset;
+ align = _align;
+ codeVal = _codeVal;
+ }
+ return [...idxCode, ...codeVal, 0x3c, align, ...utils$1.varuint32(offset)];
+ }
+
+ i32_load8_s(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 0 : _align; // 32 bits alignment by default
+ return [...idxCode, 0x2c, align, ...utils$1.varuint32(offset)];
+ }
+
+ i32_load8_u(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 0 : _align; // 32 bits alignment by default
+ return [...idxCode, 0x2d, align, ...utils$1.varuint32(offset)];
+ }
+
+ i32_load16_s(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 1 : _align; // 32 bits alignment by default
+ return [...idxCode, 0x2e, align, ...utils$1.varuint32(offset)];
+ }
+
+ i32_load16_u(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 1 : _align; // 32 bits alignment by default
+ return [...idxCode, 0x2f, align, ...utils$1.varuint32(offset)];
+ }
+
+ i32_load(idxCode, _offset, _align) {
+ const offset = _offset || 0;
+ const align = (_align === undefined) ? 2 : _align; // 32 bits alignment by default
+ return [...idxCode, 0x28, align, ...utils$1.varuint32(offset)];
+ }
+
+ i32_store(idxCode, _offset, _align, _codeVal) {
+ let offset, align, codeVal;
+ if (Array.isArray(_offset)) {
+ offset = 0;
+ align = 2;
+ codeVal = _offset;
+ } else if (Array.isArray(_align)) {
+ offset = _offset;
+ align = 2;
+ codeVal = _align;
+ } else if (Array.isArray(_codeVal)) {
+ offset = _offset;
+ align = _align;
+ codeVal = _codeVal;
+ }
+ return [...idxCode, ...codeVal, 0x36, align, ...utils$1.varuint32(offset)];
+ }
+
+
+ i32_store16(idxCode, _offset, _align, _codeVal) {
+ let offset, align, codeVal;
+ if (Array.isArray(_offset)) {
+ offset = 0;
+ align = 1;
+ codeVal = _offset;
+ } else if (Array.isArray(_align)) {
+ offset = _offset;
+ align = 1;
+ codeVal = _align;
+ } else if (Array.isArray(_codeVal)) {
+ offset = _offset;
+ align = _align;
+ codeVal = _codeVal;
+ }
+ return [...idxCode, ...codeVal, 0x3b, align, ...utils$1.varuint32(offset)];
+ }
+
+ i32_store8(idxCode, _offset, _align, _codeVal) {
+ let offset, align, codeVal;
+ if (Array.isArray(_offset)) {
+ offset = 0;
+ align = 0;
+ codeVal = _offset;
+ } else if (Array.isArray(_align)) {
+ offset = _offset;
+ align = 0;
+ codeVal = _align;
+ } else if (Array.isArray(_codeVal)) {
+ offset = _offset;
+ align = _align;
+ codeVal = _codeVal;
+ }
+ return [...idxCode, ...codeVal, 0x3a, align, ...utils$1.varuint32(offset)];
+ }
+
+ call(fnName, ...args) {
+ const idx = this.module.functionIdxByName[fnName];
+ if (idx === undefined)
+ throw new Error(`Function not defined: Function: ${fnName}`);
+ return [...[].concat(...args), 0x10, ...utils$1.varuint32(idx)];
+ }
+
+ call_indirect(fnIdx, ...args) {
+ return [...[].concat(...args), ...fnIdx, 0x11, 0, 0];
+ }
+
+ if(condCode, thenCode, elseCode) {
+ if (elseCode) {
+ return [...condCode, 0x04, 0x40, ...thenCode, 0x05, ...elseCode, 0x0b];
+ } else {
+ return [...condCode, 0x04, 0x40, ...thenCode, 0x0b];
+ }
+ }
+
+ block(bCode) { return [0x02, 0x40, ...bCode, 0x0b]; }
+ loop(...args) {
+ return [0x03, 0x40, ...[].concat(...[...args]), 0x0b];
+ }
+ br_if(relPath, condCode) { return [...condCode, 0x0d, ...utils$1.varuint32(relPath)]; }
+ br(relPath) { return [0x0c, ...utils$1.varuint32(relPath)]; }
+ ret(rCode) { return [...rCode, 0x0f]; }
+ drop(dCode) { return [...dCode, 0x1a]; }
+
+ i64_const(num) { return [0x42, ...utils$1.varint64(num)]; }
+ i32_const(num) { return [0x41, ...utils$1.varint32(num)]; }
+
+
+ i64_eqz(opcode) { return [...opcode, 0x50]; }
+ i64_eq(op1code, op2code) { return [...op1code, ...op2code, 0x51]; }
+ i64_ne(op1code, op2code) { return [...op1code, ...op2code, 0x52]; }
+ i64_lt_s(op1code, op2code) { return [...op1code, ...op2code, 0x53]; }
+ i64_lt_u(op1code, op2code) { return [...op1code, ...op2code, 0x54]; }
+ i64_gt_s(op1code, op2code) { return [...op1code, ...op2code, 0x55]; }
+ i64_gt_u(op1code, op2code) { return [...op1code, ...op2code, 0x56]; }
+ i64_le_s(op1code, op2code) { return [...op1code, ...op2code, 0x57]; }
+ i64_le_u(op1code, op2code) { return [...op1code, ...op2code, 0x58]; }
+ i64_ge_s(op1code, op2code) { return [...op1code, ...op2code, 0x59]; }
+ i64_ge_u(op1code, op2code) { return [...op1code, ...op2code, 0x5a]; }
+ i64_add(op1code, op2code) { return [...op1code, ...op2code, 0x7c]; }
+ i64_sub(op1code, op2code) { return [...op1code, ...op2code, 0x7d]; }
+ i64_mul(op1code, op2code) { return [...op1code, ...op2code, 0x7e]; }
+ i64_div_s(op1code, op2code) { return [...op1code, ...op2code, 0x7f]; }
+ i64_div_u(op1code, op2code) { return [...op1code, ...op2code, 0x80]; }
+ i64_rem_s(op1code, op2code) { return [...op1code, ...op2code, 0x81]; }
+ i64_rem_u(op1code, op2code) { return [...op1code, ...op2code, 0x82]; }
+ i64_and(op1code, op2code) { return [...op1code, ...op2code, 0x83]; }
+ i64_or(op1code, op2code) { return [...op1code, ...op2code, 0x84]; }
+ i64_xor(op1code, op2code) { return [...op1code, ...op2code, 0x85]; }
+ i64_shl(op1code, op2code) { return [...op1code, ...op2code, 0x86]; }
+ i64_shr_s(op1code, op2code) { return [...op1code, ...op2code, 0x87]; }
+ i64_shr_u(op1code, op2code) { return [...op1code, ...op2code, 0x88]; }
+ i64_extend_i32_s(op1code) { return [...op1code, 0xac]; }
+ i64_extend_i32_u(op1code) { return [...op1code, 0xad]; }
+ i64_clz(op1code) { return [...op1code, 0x79]; }
+ i64_ctz(op1code) { return [...op1code, 0x7a]; }
+
+ i32_eqz(op1code) { return [...op1code, 0x45]; }
+ i32_eq(op1code, op2code) { return [...op1code, ...op2code, 0x46]; }
+ i32_ne(op1code, op2code) { return [...op1code, ...op2code, 0x47]; }
+ i32_lt_s(op1code, op2code) { return [...op1code, ...op2code, 0x48]; }
+ i32_lt_u(op1code, op2code) { return [...op1code, ...op2code, 0x49]; }
+ i32_gt_s(op1code, op2code) { return [...op1code, ...op2code, 0x4a]; }
+ i32_gt_u(op1code, op2code) { return [...op1code, ...op2code, 0x4b]; }
+ i32_le_s(op1code, op2code) { return [...op1code, ...op2code, 0x4c]; }
+ i32_le_u(op1code, op2code) { return [...op1code, ...op2code, 0x4d]; }
+ i32_ge_s(op1code, op2code) { return [...op1code, ...op2code, 0x4e]; }
+ i32_ge_u(op1code, op2code) { return [...op1code, ...op2code, 0x4f]; }
+ i32_add(op1code, op2code) { return [...op1code, ...op2code, 0x6a]; }
+ i32_sub(op1code, op2code) { return [...op1code, ...op2code, 0x6b]; }
+ i32_mul(op1code, op2code) { return [...op1code, ...op2code, 0x6c]; }
+ i32_div_s(op1code, op2code) { return [...op1code, ...op2code, 0x6d]; }
+ i32_div_u(op1code, op2code) { return [...op1code, ...op2code, 0x6e]; }
+ i32_rem_s(op1code, op2code) { return [...op1code, ...op2code, 0x6f]; }
+ i32_rem_u(op1code, op2code) { return [...op1code, ...op2code, 0x70]; }
+ i32_and(op1code, op2code) { return [...op1code, ...op2code, 0x71]; }
+ i32_or(op1code, op2code) { return [...op1code, ...op2code, 0x72]; }
+ i32_xor(op1code, op2code) { return [...op1code, ...op2code, 0x73]; }
+ i32_shl(op1code, op2code) { return [...op1code, ...op2code, 0x74]; }
+ i32_shr_s(op1code, op2code) { return [...op1code, ...op2code, 0x75]; }
+ i32_shr_u(op1code, op2code) { return [...op1code, ...op2code, 0x76]; }
+ i32_rotl(op1code, op2code) { return [...op1code, ...op2code, 0x77]; }
+ i32_rotr(op1code, op2code) { return [...op1code, ...op2code, 0x78]; }
+ i32_wrap_i64(op1code) { return [...op1code, 0xa7]; }
+ i32_clz(op1code) { return [...op1code, 0x67]; }
+ i32_ctz(op1code) { return [...op1code, 0x68]; }
+
+ unreachable() { return [ 0x0 ]; }
+
+ current_memory() { return [ 0x3f, 0]; }
+
+ comment() { return []; }
+ }
+
+ var codebuilder = CodeBuilder;
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmbuilder
+
+ wasmbuilder is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmbuilder is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmbuilder. If not, see .
+ */
+
+ const typeCodes = {
+ "i32": 0x7f,
+ "i64": 0x7e,
+ "f32": 0x7d,
+ "f64": 0x7c,
+ "anyfunc": 0x70,
+ "func": 0x60,
+ "emptyblock": 0x40
+ };
+
+
+ class FunctionBuilder {
+
+ constructor (module, fnName, fnType, moduleName, fieldName) {
+ if (fnType == "import") {
+ this.fnType = "import";
+ this.moduleName = moduleName;
+ this.fieldName = fieldName;
+ } else if (fnType == "internal") {
+ this.fnType = "internal";
+ } else {
+ throw new Error("Invalid function fnType: " + fnType);
+ }
+ this.module = module;
+ this.fnName = fnName;
+ this.params = [];
+ this.locals = [];
+ this.localIdxByName = {};
+ this.code = [];
+ this.returnType = null;
+ this.nextLocal =0;
+ }
+
+ addParam(paramName, paramType) {
+ if (this.localIdxByName[paramName])
+ throw new Error(`param already exists. Function: ${this.fnName}, Param: ${paramName} `);
+ const idx = this.nextLocal++;
+ this.localIdxByName[paramName] = idx;
+ this.params.push({
+ type: paramType
+ });
+ }
+
+ addLocal(localName, localType, _length) {
+ const length = _length || 1;
+ if (this.localIdxByName[localName])
+ throw new Error(`local already exists. Function: ${this.fnName}, Param: ${localName} `);
+ const idx = this.nextLocal++;
+ this.localIdxByName[localName] = idx;
+ this.locals.push({
+ type: localType,
+ length: length
+ });
+ }
+
+ setReturnType(returnType) {
+ if (this.returnType)
+ throw new Error(`returnType already defined. Function: ${this.fnName}`);
+ this.returnType = returnType;
+ }
+
+ getSignature() {
+ const params = [...utils$1.varuint32(this.params.length), ...this.params.map((p) => typeCodes[p.type])];
+ const returns = this.returnType ? [0x01, typeCodes[this.returnType]] : [0];
+ return [0x60, ...params, ...returns];
+ }
+
+ getBody() {
+ const locals = this.locals.map((l) => [
+ ...utils$1.varuint32(l.length),
+ typeCodes[l.type]
+ ]);
+
+ const body = [
+ ...utils$1.varuint32(this.locals.length),
+ ...[].concat(...locals),
+ ...this.code,
+ 0x0b
+ ];
+ return [
+ ...utils$1.varuint32(body.length),
+ ...body
+ ];
+ }
+
+ addCode(...code) {
+ this.code.push(...[].concat(...[...code]));
+ }
+
+ getCodeBuilder() {
+ return new codebuilder(this);
+ }
+ }
+
+ var functionbuilder = FunctionBuilder;
+
+ /*
+ Copyright 2019 0KIMS association.
+
+ This file is part of wasmbuilder
+
+ wasmbuilder is a free software: you can redistribute it and/or modify it
+ under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ wasmbuilder is distributed in the hope that it will be useful, but WITHOUT
+ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
+ License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with wasmbuilder. If not, see .
+ */
+
+ class ModuleBuilder$1 {
+
+ constructor() {
+ this.functions = [];
+ this.functionIdxByName = {};
+ this.nImportFunctions = 0;
+ this.nInternalFunctions =0;
+ this.memory = {
+ pagesSize: 1,
+ moduleName: "env",
+ fieldName: "memory"
+ };
+ this.free = 8;
+ this.datas = [];
+ this.modules = {};
+ this.exports = [];
+ this.functionsTable = [];
+ }
+
+ build() {
+ this._setSignatures();
+ return new Uint8Array([
+ ...utils$1.u32(0x6d736100),
+ ...utils$1.u32(1),
+ ...this._buildType(),
+ ...this._buildImport(),
+ ...this._buildFunctionDeclarations(),
+ ...this._buildFunctionsTable(),
+ ...this._buildExports(),
+ ...this._buildElements(),
+ ...this._buildCode(),
+ ...this._buildData()
+ ]);
+ }
+
+ addFunction(fnName) {
+ if (typeof(this.functionIdxByName[fnName]) !== "undefined")
+ throw new Error(`Function already defined: ${fnName}`);
+
+ const idx = this.functions.length;
+ this.functionIdxByName[fnName] = idx;
+
+ this.functions.push(new functionbuilder(this, fnName, "internal"));
+
+ this.nInternalFunctions++;
+ return this.functions[idx];
+ }
+
+ addIimportFunction(fnName, moduleName, _fieldName) {
+ if (typeof(this.functionIdxByName[fnName]) !== "undefined")
+ throw new Error(`Function already defined: ${fnName}`);
+
+ if ( (this.functions.length>0)
+ &&(this.functions[this.functions.length-1].type == "internal"))
+ throw new Error(`Import functions must be declared before internal: ${fnName}`);
+
+ let fieldName = _fieldName || fnName;
+
+ const idx = this.functions.length;
+ this.functionIdxByName[fnName] = idx;
+
+ this.functions.push(new functionbuilder(this, fnName, "import", moduleName, fieldName));
+
+ this.nImportFunctions ++;
+ return this.functions[idx];
+ }
+
+ setMemory(pagesSize, moduleName, fieldName) {
+ this.memory = {
+ pagesSize: pagesSize,
+ moduleName: moduleName || "env",
+ fieldName: fieldName || "memory"
+ };
+ }
+
+ exportFunction(fnName, _exportName) {
+ const exportName = _exportName || fnName;
+ if (typeof(this.functionIdxByName[fnName]) === "undefined")
+ throw new Error(`Function not defined: ${fnName}`);
+ const idx = this.functionIdxByName[fnName];
+ if (exportName != fnName) {
+ this.functionIdxByName[exportName] = idx;
+ }
+ this.exports.push({
+ exportName: exportName,
+ idx: idx
+ });
+ }
+
+ addFunctionToTable(fnName) {
+ const idx = this.functionIdxByName[fnName];
+ this.functionsTable.push(idx);
+ }
+
+ addData(offset, bytes) {
+ this.datas.push({
+ offset: offset,
+ bytes: bytes
+ });
+ }
+
+ alloc(a, b) {
+ let size;
+ let bytes;
+ if ((Array.isArray(a) || ArrayBuffer.isView(a)) && (typeof(b) === "undefined")) {
+ size = a.length;
+ bytes = a;
+ } else {
+ size = a;
+ bytes = b;
+ }
+ size = (((size-1)>>3) +1)<<3; // Align to 64 bits.
+ const p = this.free;
+ this.free += size;
+ if (bytes) {
+ this.addData(p, bytes);
+ }
+ return p;
+ }
+
+ allocString(s) {
+ const encoder = new globalThis.TextEncoder();
+ const uint8array = encoder.encode(s);
+ return this.alloc([...uint8array, 0]);
+ }
+
+ _setSignatures() {
+ this.signatures = [];
+ const signatureIdxByName = {};
+ if (this.functionsTable.length>0) {
+ const signature = this.functions[this.functionsTable[0]].getSignature();
+ const signatureName = "s_"+utils$1.toHexString(signature);
+ signatureIdxByName[signatureName] = 0;
+ this.signatures.push(signature);
+ }
+ for (let i=0; i.
+ */
+
+ var ModuleBuilder = modulebuilder;
+
globalThis.curve_bn128 = null;
- async function buildBn128(singleThread) {
+ async function buildBn128(singleThread, plugins) {
- if ((!singleThread)&&(globalThis.curve_bn128)) return globalThis.curve_bn128;
+ const moduleBuilder = new ModuleBuilder();
+ moduleBuilder.setMemory(25);
+ buildBn128$1(moduleBuilder);
+
+ if (plugins) plugins(moduleBuilder);
+
+ const bn128wasm = {};
+
+ bn128wasm.code = moduleBuilder.build();
+ bn128wasm.pq = moduleBuilder.modules.f1m.pq;
+ bn128wasm.pr = moduleBuilder.modules.frm.pq;
+ bn128wasm.pG1gen = moduleBuilder.modules.bn128.pG1gen;
+ bn128wasm.pG1zero = moduleBuilder.modules.bn128.pG1zero;
+ bn128wasm.pG1b = moduleBuilder.modules.bn128.pG1b;
+ bn128wasm.pG2gen = moduleBuilder.modules.bn128.pG2gen;
+ bn128wasm.pG2zero = moduleBuilder.modules.bn128.pG2zero;
+ bn128wasm.pG2b = moduleBuilder.modules.bn128.pG2b;
+ bn128wasm.pOneT = moduleBuilder.modules.bn128.pOneT;
+ bn128wasm.prePSize = moduleBuilder.modules.bn128.prePSize;
+ bn128wasm.preQSize = moduleBuilder.modules.bn128.preQSize;
+ bn128wasm.n8q = 32;
+ bn128wasm.n8r = 32;
+ bn128wasm.q = moduleBuilder.modules.bn128.q;
+ bn128wasm.r = moduleBuilder.modules.bn128.r;
+
+ if ((!singleThread) && (globalThis.curve_bn128)) return globalThis.curve_bn128;
const params = {
name: "bn128",
- wasm: wasmcurves.bn128_wasm,
- q: e$2("21888242871839275222246405745257275088696311157297823662689037894645226208583"),
- r: e$2("21888242871839275222246405745257275088548364400416034343698204186575808495617"),
+ wasm: bn128wasm,
+ q: e("21888242871839275222246405745257275088696311157297823662689037894645226208583"),
+ r: e("21888242871839275222246405745257275088548364400416034343698204186575808495617"),
n8q: 32,
n8r: 32,
- cofactorG2: e$2("30644e72e131a029b85045b68181585e06ceecda572a2489345f2299c0f9fa8d", 16),
+ cofactorG2: e("30644e72e131a029b85045b68181585e06ceecda572a2489345f2299c0f9fa8d", 16),
singleThread: singleThread ? true : false
};
const curve = await buildEngine(params);
- curve.terminate = async function() {
+ curve.terminate = async function () {
if (!params.singleThread) {
globalThis.curve_bn128 = null;
await this.tm.terminate();
@@ -6366,52 +18518,82 @@ var snarkjs = (function (exports) {
globalThis.curve_bls12381 = null;
- async function buildBls12381(singleThread) {
+ async function buildBls12381(singleThread, plugins) {
- if ((!singleThread)&&(globalThis.curve_bls12381)) return globalThis.curve_bls12381;
+ const moduleBuilder = new ModuleBuilder();
+ moduleBuilder.setMemory(25);
+ buildBls12381$1(moduleBuilder);
+
+ if (plugins) plugins(moduleBuilder);
+
+ const bls12381wasm = {};
+
+ bls12381wasm.code = moduleBuilder.build();
+ bls12381wasm.pq = moduleBuilder.modules.f1m.pq;
+ bls12381wasm.pr = moduleBuilder.modules.frm.pq;
+ bls12381wasm.pG1gen = moduleBuilder.modules.bls12381.pG1gen;
+ bls12381wasm.pG1zero = moduleBuilder.modules.bls12381.pG1zero;
+ bls12381wasm.pG1b = moduleBuilder.modules.bls12381.pG1b;
+ bls12381wasm.pG2gen = moduleBuilder.modules.bls12381.pG2gen;
+ bls12381wasm.pG2zero = moduleBuilder.modules.bls12381.pG2zero;
+ bls12381wasm.pG2b = moduleBuilder.modules.bls12381.pG2b;
+ bls12381wasm.pOneT = moduleBuilder.modules.bls12381.pOneT;
+ bls12381wasm.prePSize = moduleBuilder.modules.bls12381.prePSize;
+ bls12381wasm.preQSize = moduleBuilder.modules.bls12381.preQSize;
+ bls12381wasm.n8q = 48;
+ bls12381wasm.n8r = 32;
+ bls12381wasm.q = moduleBuilder.modules.bn128.q;
+ bls12381wasm.r = moduleBuilder.modules.bn128.r;
+
+
+ if ((!singleThread) && (globalThis.curve_bls12381)) return globalThis.curve_bls12381;
const params = {
name: "bls12381",
- wasm: wasmcurves.bls12381_wasm,
- q: e$2("1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab", 16),
- r: e$2("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16),
+ wasm: bls12381wasm,
+ q: e("1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab", 16),
+ r: e("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16),
n8q: 48,
n8r: 32,
- cofactorG1: e$2("0x396c8c005555e1568c00aaab0000aaab", 16),
- cofactorG2: e$2("0x5d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5", 16),
+ cofactorG1: e("0x396c8c005555e1568c00aaab0000aaab", 16),
+ cofactorG2: e("0x5d543a95414e7f1091d50792876a202cd91de4547085abaa68a205b2e5a7ddfa628f1cb4d9e82ef21537e293a6691ae1616ec6e786f0c70cf1c38e31c7238e5", 16),
singleThread: singleThread ? true : false
};
const curve = await buildEngine(params);
- curve.terminate = async function() {
+ curve.terminate = async function () {
if (!params.singleThread) {
globalThis.curve_bls12381 = null;
await this.tm.terminate();
}
};
+ if (!singleThread) {
+ globalThis.curve_bls12381 = curve;
+ }
+
return curve;
}
- const bls12381r = e$2("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16);
- const bn128r = e$2("21888242871839275222246405745257275088548364400416034343698204186575808495617");
+ const bls12381r$1 = e("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16);
+ const bn128r$1 = e("21888242871839275222246405745257275088548364400416034343698204186575808495617");
- const bls12381q = e$2("1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab", 16);
- const bn128q = e$2("21888242871839275222246405745257275088696311157297823662689037894645226208583");
+ e("1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab", 16);
+ e("21888242871839275222246405745257275088696311157297823662689037894645226208583");
- async function getCurveFromR(r, singleThread) {
+ async function getCurveFromR(r, singleThread, plugins) {
let curve;
- if (eq$2(r, bn128r)) {
- curve = await buildBn128(singleThread);
- } else if (eq$2(r, bls12381r)) {
- curve = await buildBn128(singleThread);
+ if (eq(r, bn128r$1)) {
+ curve = await buildBn128(singleThread, plugins);
+ } else if (eq(r, bls12381r$1)) {
+ curve = await buildBls12381(singleThread, plugins);
} else {
- throw new Error(`Curve not supported: ${toString(r)}`);
+ throw new Error(`Curve not supported: ${toString$6(r)}`);
}
return curve;
}
- const Scalar$1=_Scalar;
- const utils$1 = _utils;
+ const Scalar=_Scalar;
+ const utils = _utils;
var fs = {};
@@ -6835,7 +19017,7 @@ var snarkjs = (function (exports) {
}
- function createNew(o) {
+ function createNew$1(o) {
const initialSize = o.initialSize || 1<<20;
const fd = new MemFile();
fd.o = o;
@@ -6847,7 +19029,7 @@ var snarkjs = (function (exports) {
return fd;
}
- function readExisting(o) {
+ function readExisting$2(o) {
const fd = new MemFile();
fd.o = o;
fd.allocSize = o.data.byteLength;
@@ -6857,10 +19039,10 @@ var snarkjs = (function (exports) {
return fd;
}
- const tmpBuff32 = new Uint8Array(4);
- const tmpBuff32v = new DataView(tmpBuff32.buffer);
- const tmpBuff64 = new Uint8Array(8);
- const tmpBuff64v = new DataView(tmpBuff64.buffer);
+ const tmpBuff32$1 = new Uint8Array(4);
+ const tmpBuff32v$1 = new DataView(tmpBuff32$1.buffer);
+ const tmpBuff64$1 = new Uint8Array(8);
+ const tmpBuff64v$1 = new DataView(tmpBuff64$1.buffer);
class MemFile {
@@ -6930,184 +19112,6 @@ var snarkjs = (function (exports) {
}
- async writeULE32(v, pos) {
- const self = this;
-
- tmpBuff32v.setUint32(0, v, true);
-
- await self.write(tmpBuff32, pos);
- }
-
- async writeUBE32(v, pos) {
- const self = this;
-
- tmpBuff32v.setUint32(0, v, false);
-
- await self.write(tmpBuff32, pos);
- }
-
-
- async writeULE64(v, pos) {
- const self = this;
-
- tmpBuff64v.setUint32(0, v & 0xFFFFFFFF, true);
- tmpBuff64v.setUint32(4, Math.floor(v / 0x100000000) , true);
-
- await self.write(tmpBuff64, pos);
- }
-
-
- async readULE32(pos) {
- const self = this;
- const b = await self.read(4, pos);
-
- const view = new Uint32Array(b.buffer);
-
- return view[0];
- }
-
- async readUBE32(pos) {
- const self = this;
- const b = await self.read(4, pos);
-
- const view = new DataView(b.buffer);
-
- return view.getUint32(0, false);
- }
-
- async readULE64(pos) {
- const self = this;
- const b = await self.read(8, pos);
-
- const view = new Uint32Array(b.buffer);
-
- return view[1] * 0x100000000 + view[0];
- }
-
- }
-
- const PAGE_SIZE$1 = 1<<22;
-
- function createNew$1(o) {
- const initialSize = o.initialSize || 0;
- const fd = new BigMemFile();
- fd.o = o;
- const nPages = initialSize ? Math.floor((initialSize - 1) / PAGE_SIZE$1)+1 : 0;
- fd.o.data = [];
- for (let i=0; i0) {
- const l = (o+r > PAGE_SIZE$1) ? (PAGE_SIZE$1 -o) : r;
- const srcView = buff.slice(buff.byteLength - r, buff.byteLength - r + l);
- const dstView = new Uint8Array(self.o.data[p].buffer, o, l);
- dstView.set(srcView);
- r = r-l;
- p ++;
- o = 0;
- }
-
- this.pos = pos + buff.byteLength;
- }
-
- async readToBuffer(buffDst, offset, len, pos) {
- const self = this;
- if (typeof pos == "undefined") pos = self.pos;
- if (this.readOnly) {
- if (pos + len > this.totalSize) throw new Error("Reading out of bounds");
- }
- this._resizeIfNeeded(pos + len);
-
- const firstPage = Math.floor(pos / PAGE_SIZE$1);
-
- let p = firstPage;
- let o = pos % PAGE_SIZE$1;
- // Remaining bytes to read
- let r = len;
- while (r>0) {
- // bytes to copy from this page
- const l = (o+r > PAGE_SIZE$1) ? (PAGE_SIZE$1 -o) : r;
- const srcView = new Uint8Array(self.o.data[p].buffer, o, l);
- buffDst.set(srcView, offset+len-r);
- r = r-l;
- p ++;
- o = 0;
- }
-
- this.pos = pos + len;
- }
-
- async read(len, pos) {
- const self = this;
- const buff = new Uint8Array(len);
-
- await self.readToBuffer(buff, 0, len, pos);
-
- return buff;
- }
-
- close() {
- }
-
- async discard() {
- }
-
-
async writeULE32(v, pos) {
const self = this;
@@ -7164,6 +19168,184 @@ var snarkjs = (function (exports) {
}
+ const PAGE_SIZE = 1<<22;
+
+ function createNew(o) {
+ const initialSize = o.initialSize || 0;
+ const fd = new BigMemFile();
+ fd.o = o;
+ const nPages = initialSize ? Math.floor((initialSize - 1) / PAGE_SIZE)+1 : 0;
+ fd.o.data = [];
+ for (let i=0; i0) {
+ const l = (o+r > PAGE_SIZE) ? (PAGE_SIZE -o) : r;
+ const srcView = buff.slice(buff.byteLength - r, buff.byteLength - r + l);
+ const dstView = new Uint8Array(self.o.data[p].buffer, o, l);
+ dstView.set(srcView);
+ r = r-l;
+ p ++;
+ o = 0;
+ }
+
+ this.pos = pos + buff.byteLength;
+ }
+
+ async readToBuffer(buffDst, offset, len, pos) {
+ const self = this;
+ if (typeof pos == "undefined") pos = self.pos;
+ if (this.readOnly) {
+ if (pos + len > this.totalSize) throw new Error("Reading out of bounds");
+ }
+ this._resizeIfNeeded(pos + len);
+
+ const firstPage = Math.floor(pos / PAGE_SIZE);
+
+ let p = firstPage;
+ let o = pos % PAGE_SIZE;
+ // Remaining bytes to read
+ let r = len;
+ while (r>0) {
+ // bytes to copy from this page
+ const l = (o+r > PAGE_SIZE) ? (PAGE_SIZE -o) : r;
+ const srcView = new Uint8Array(self.o.data[p].buffer, o, l);
+ buffDst.set(srcView, offset+len-r);
+ r = r-l;
+ p ++;
+ o = 0;
+ }
+
+ this.pos = pos + len;
+ }
+
+ async read(len, pos) {
+ const self = this;
+ const buff = new Uint8Array(len);
+
+ await self.readToBuffer(buff, 0, len, pos);
+
+ return buff;
+ }
+
+ close() {
+ }
+
+ async discard() {
+ }
+
+
+ async writeULE32(v, pos) {
+ const self = this;
+
+ tmpBuff32v.setUint32(0, v, true);
+
+ await self.write(tmpBuff32, pos);
+ }
+
+ async writeUBE32(v, pos) {
+ const self = this;
+
+ tmpBuff32v.setUint32(0, v, false);
+
+ await self.write(tmpBuff32, pos);
+ }
+
+
+ async writeULE64(v, pos) {
+ const self = this;
+
+ tmpBuff64v.setUint32(0, v & 0xFFFFFFFF, true);
+ tmpBuff64v.setUint32(4, Math.floor(v / 0x100000000) , true);
+
+ await self.write(tmpBuff64, pos);
+ }
+
+
+ async readULE32(pos) {
+ const self = this;
+ const b = await self.read(4, pos);
+
+ const view = new Uint32Array(b.buffer);
+
+ return view[0];
+ }
+
+ async readUBE32(pos) {
+ const self = this;
+ const b = await self.read(4, pos);
+
+ const view = new DataView(b.buffer);
+
+ return view.getUint32(0, false);
+ }
+
+ async readULE64(pos) {
+ const self = this;
+ const b = await self.read(8, pos);
+
+ const view = new Uint32Array(b.buffer);
+
+ return view[1] * 0x100000000 + view[0];
+ }
+
+ }
+
/* global fetch */
const DEFAULT_CACHE_SIZE = (1 << 16);
@@ -7182,15 +19364,15 @@ var snarkjs = (function (exports) {
if (o.type == "file") {
return await open(o.fileName, "w+", o.cacheSize, o.pageSize);
} else if (o.type == "mem") {
- return createNew(o);
- } else if (o.type == "bigMem") {
return createNew$1(o);
+ } else if (o.type == "bigMem") {
+ return createNew(o);
} else {
throw new Error("Invalid FastFile type: "+o.type);
}
}
- async function readExisting$2(o, b, c) {
+ async function readExisting(o, b, c) {
if (o instanceof Uint8Array) {
o = {
type: "mem",
@@ -7213,7 +19395,7 @@ var snarkjs = (function (exports) {
if (o.type == "file") {
return await open(o.fileName, "r", o.cacheSize, o.pageSize);
} else if (o.type == "mem") {
- return await readExisting(o);
+ return await readExisting$2(o);
} else if (o.type == "bigMem") {
return await readExisting$1(o);
} else {
@@ -7223,7 +19405,7 @@ var snarkjs = (function (exports) {
async function readBinFile(fileName, type, maxVersion, cacheSize, pageSize) {
- const fd = await readExisting$2(fileName);
+ const fd = await readExisting(fileName);
const b = await fd.read(4);
let readedType = "";
@@ -7307,13 +19489,13 @@ var snarkjs = (function (exports) {
async function writeBigInt(fd, n, n8, pos) {
const buff = new Uint8Array(n8);
- Scalar$1.toRprLE(buff, 0, n, n8);
+ Scalar.toRprLE(buff, 0, n, n8);
await fd.write(buff, pos);
}
async function readBigInt(fd, n8, pos) {
const buff = await fd.read(n8, pos);
- return Scalar$1.fromRprLE(buff, 0, n8);
+ return Scalar.fromRprLE(buff, 0, n8);
}
async function copySection(fdFrom, sections, fdTo, sectionId, size) {
@@ -7370,20 +19552,20 @@ var snarkjs = (function (exports) {
return true;
}
- const bls12381r$1 = Scalar$1.e("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16);
- const bn128r$1 = Scalar$1.e("21888242871839275222246405745257275088548364400416034343698204186575808495617");
+ Scalar.e("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16);
+ Scalar.e("21888242871839275222246405745257275088548364400416034343698204186575808495617");
- const bls12381q$1 = Scalar$1.e("1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab", 16);
- const bn128q$1 = Scalar$1.e("21888242871839275222246405745257275088696311157297823662689037894645226208583");
+ const bls12381q = Scalar.e("1a0111ea397fe69a4b1ba7b6434bacd764774b84f38512bf6730d2a0f6b0f6241eabfffeb153ffffb9feffffffffaaab", 16);
+ const bn128q = Scalar.e("21888242871839275222246405745257275088696311157297823662689037894645226208583");
async function getCurveFromQ(q) {
let curve;
- if (Scalar$1.eq(q, bn128q$1)) {
+ if (Scalar.eq(q, bn128q)) {
curve = await buildBn128();
- } else if (Scalar$1.eq(q, bls12381q$1)) {
+ } else if (Scalar.eq(q, bls12381q)) {
curve = await buildBls12381();
} else {
- throw new Error(`Curve not supported: ${Scalar$1.toString(q)}`);
+ throw new Error(`Curve not supported: ${Scalar.toString(q)}`);
}
return curve;
}
@@ -7425,69 +19607,702 @@ var snarkjs = (function (exports) {
}
}
- var blake2b = loadWebAssembly;
+ function byteLength$5 (string) {
+ return string.length
+ }
- loadWebAssembly.supported = typeof WebAssembly !== 'undefined';
+ function toString$5 (buffer) {
+ const len = buffer.byteLength;
- function loadWebAssembly (opts) {
- if (!loadWebAssembly.supported) return null
+ let result = '';
- var imp = opts && opts.imports;
- var wasm = toUint8Array('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');
- var ready = null;
+ for (let i = 0; i < len; i++) {
+ result += String.fromCharCode(buffer[i]);
+ }
- var mod = {
- buffer: wasm,
- memory: null,
- exports: null,
- realloc: realloc,
- onload: onload
+ return result
+ }
+
+ function write$6 (buffer, string, offset = 0, length = byteLength$5(string)) {
+ const len = Math.min(length, buffer.byteLength - offset);
+
+ for (let i = 0; i < len; i++) {
+ buffer[offset + i] = string.charCodeAt(i);
+ }
+
+ return len
+ }
+
+ var ascii = {
+ byteLength: byteLength$5,
+ toString: toString$5,
+ write: write$6
+ };
+
+ const alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
+
+ const codes = new Uint8Array(256);
+
+ for (let i = 0; i < alphabet.length; i++) {
+ codes[alphabet.charCodeAt(i)] = i;
+ }
+
+ codes[/* - */ 0x2d] = 62;
+ codes[/* _ */ 0x5f] = 63;
+
+ function byteLength$4 (string) {
+ let len = string.length;
+
+ if (string.charCodeAt(len - 1) === 0x3d) len--;
+ if (len > 1 && string.charCodeAt(len - 1) === 0x3d) len--;
+
+ return (len * 3) >>> 2
+ }
+
+ function toString$4 (buffer) {
+ const len = buffer.byteLength;
+
+ let result = '';
+
+ for (let i = 0; i < len; i += 3) {
+ result += (
+ alphabet[buffer[i] >> 2] +
+ alphabet[((buffer[i] & 3) << 4) | (buffer[i + 1] >> 4)] +
+ alphabet[((buffer[i + 1] & 15) << 2) | (buffer[i + 2] >> 6)] +
+ alphabet[buffer[i + 2] & 63]
+ );
+ }
+
+ if (len % 3 === 2) {
+ result = result.substring(0, result.length - 1) + '=';
+ } else if (len % 3 === 1) {
+ result = result.substring(0, result.length - 2) + '==';
+ }
+
+ return result
+ }
+ function write$5 (buffer, string, offset = 0, length = byteLength$4(string)) {
+ const len = Math.min(length, buffer.byteLength - offset);
+
+ for (let i = 0, j = 0; i < len; i += 4) {
+ const a = codes[string.charCodeAt(i)];
+ const b = codes[string.charCodeAt(i + 1)];
+ const c = codes[string.charCodeAt(i + 2)];
+ const d = codes[string.charCodeAt(i + 3)];
+
+ buffer[j++] = (a << 2) | (b >> 4);
+ buffer[j++] = ((b & 15) << 4) | (c >> 2);
+ buffer[j++] = ((c & 3) << 6) | (d & 63);
+ }
+
+ return len
+ }
+ var base64 = {
+ byteLength: byteLength$4,
+ toString: toString$4,
+ write: write$5
+ };
+
+ function byteLength$3 (string) {
+ return string.length >>> 1
+ }
+
+ function toString$3 (buffer) {
+ const len = buffer.byteLength;
+
+ buffer = new DataView(buffer.buffer, buffer.byteOffset, len);
+
+ let result = '';
+ let i = 0;
+
+ for (let n = len - (len % 4); i < n; i += 4) {
+ result += buffer.getUint32(i).toString(16).padStart(8, '0');
+ }
+
+ for (; i < len; i++) {
+ result += buffer.getUint8(i).toString(16).padStart(2, '0');
+ }
+
+ return result
+ }
+
+ function write$4 (buffer, string, offset = 0, length = byteLength$3(string)) {
+ const len = Math.min(length, buffer.byteLength - offset);
+
+ for (let i = 0; i < len; i++) {
+ const a = hexValue(string.charCodeAt(i * 2));
+ const b = hexValue(string.charCodeAt(i * 2 + 1));
+
+ if (a === undefined || b === undefined) {
+ return buffer.subarray(0, i)
+ }
+
+ buffer[offset + i] = (a << 4) | b;
+ }
+
+ return len
+ }
+
+ var hex = {
+ byteLength: byteLength$3,
+ toString: toString$3,
+ write: write$4
+ };
+
+ function hexValue (char) {
+ if (char >= 0x30 && char <= 0x39) return char - 0x30
+ if (char >= 0x41 && char <= 0x46) return char - 0x41 + 10
+ if (char >= 0x61 && char <= 0x66) return char - 0x61 + 10
+ }
+
+ function byteLength$2 (string) {
+ let length = 0;
+
+ for (let i = 0, n = string.length; i < n; i++) {
+ const code = string.charCodeAt(i);
+
+ if (code >= 0xd800 && code <= 0xdbff && i + 1 < n) {
+ const code = string.charCodeAt(i + 1);
+
+ if (code >= 0xdc00 && code <= 0xdfff) {
+ length += 4;
+ i++;
+ continue
+ }
+ }
+
+ if (code <= 0x7f) length += 1;
+ else if (code <= 0x7ff) length += 2;
+ else length += 3;
+ }
+
+ return length
+ }
+
+ let toString$2;
+
+ if (typeof TextDecoder !== 'undefined') {
+ const decoder = new TextDecoder();
+
+ toString$2 = function toString (buffer) {
+ return decoder.decode(buffer)
};
+ } else {
+ toString$2 = function toString (buffer) {
+ const len = buffer.byteLength;
- onload(function () {});
+ let output = '';
+ let i = 0;
- return mod
+ while (i < len) {
+ let byte = buffer[i];
- function realloc (size) {
- mod.exports.memory.grow(Math.max(0, Math.ceil(Math.abs(size - mod.memory.length) / 65536)));
- mod.memory = new Uint8Array(mod.exports.memory.buffer);
- }
+ if (byte <= 0x7f) {
+ output += String.fromCharCode(byte);
+ i++;
+ continue
+ }
- function onload (cb) {
- if (mod.exports) return cb()
+ let bytesNeeded = 0;
+ let codePoint = 0;
- if (ready) {
- ready.then(cb.bind(null, null)).catch(cb);
- return
+ if (byte <= 0xdf) {
+ bytesNeeded = 1;
+ codePoint = byte & 0x1f;
+ } else if (byte <= 0xef) {
+ bytesNeeded = 2;
+ codePoint = byte & 0x0f;
+ } else if (byte <= 0xf4) {
+ bytesNeeded = 3;
+ codePoint = byte & 0x07;
+ }
+
+ if (len - i - bytesNeeded > 0) {
+ let k = 0;
+
+ while (k < bytesNeeded) {
+ byte = buffer[i + k + 1];
+ codePoint = (codePoint << 6) | (byte & 0x3f);
+ k += 1;
+ }
+ } else {
+ codePoint = 0xfffd;
+ bytesNeeded = len - i;
+ }
+
+ output += String.fromCodePoint(codePoint);
+ i += bytesNeeded + 1;
}
- try {
- if (opts && opts.async) throw new Error('async')
- setup({instance: new WebAssembly.Instance(new WebAssembly.Module(wasm), imp)});
- } catch (err) {
- ready = WebAssembly.instantiate(wasm, imp).then(setup);
+ return output
+ };
+ }
+
+ let write$3;
+
+ if (typeof TextEncoder !== 'undefined') {
+ const encoder = new TextEncoder();
+
+ write$3 = function write (buffer, string, offset = 0, length = byteLength$2(string)) {
+ const len = Math.min(length, buffer.byteLength - offset);
+ encoder.encodeInto(string, buffer.subarray(offset, offset + len));
+ return len
+ };
+ } else {
+ write$3 = function write (buffer, string, offset = 0, length = byteLength$2(string)) {
+ const len = Math.min(length, buffer.byteLength - offset);
+
+ buffer = buffer.subarray(offset, offset + len);
+
+ let i = 0;
+ let j = 0;
+
+ while (i < string.length) {
+ const code = string.codePointAt(i);
+
+ if (code <= 0x7f) {
+ buffer[j++] = code;
+ i++;
+ continue
+ }
+
+ let count = 0;
+ let bits = 0;
+
+ if (code <= 0x7ff) {
+ count = 6;
+ bits = 0xc0;
+ } else if (code <= 0xffff) {
+ count = 12;
+ bits = 0xe0;
+ } else if (code <= 0x1fffff) {
+ count = 18;
+ bits = 0xf0;
+ }
+
+ buffer[j++] = bits | (code >> count);
+ count -= 6;
+
+ while (count >= 0) {
+ buffer[j++] = 0x80 | ((code >> count) & 0x3f);
+ count -= 6;
+ }
+
+ i += code >= 0x10000 ? 2 : 1;
}
- onload(cb);
+ return len
+ };
+ }
+
+ var utf8 = {
+ byteLength: byteLength$2,
+ toString: toString$2,
+ write: write$3
+ };
+
+ function byteLength$1 (string) {
+ return string.length * 2
+ }
+
+ function toString$1 (buffer) {
+ const len = buffer.byteLength;
+
+ let result = '';
+
+ for (let i = 0; i < len - 1; i += 2) {
+ result += String.fromCharCode(buffer[i] + (buffer[i + 1] * 256));
}
- function setup (w) {
- mod.exports = w.instance.exports;
- mod.memory = mod.exports.memory && mod.exports.memory.buffer && new Uint8Array(mod.exports.memory.buffer);
+ return result
+ }
+
+ function write$2 (buffer, string, offset = 0, length = byteLength$1(string)) {
+ const len = Math.min(length, buffer.byteLength - offset);
+
+ let units = len;
+
+ for (let i = 0; i < string.length; ++i) {
+ if ((units -= 2) < 0) break
+
+ const c = string.charCodeAt(i);
+ const hi = c >> 8;
+ const lo = c % 256;
+
+ buffer[offset + i * 2] = lo;
+ buffer[offset + i * 2 + 1] = hi;
+ }
+
+ return len
+ }
+
+ var utf16le = {
+ byteLength: byteLength$1,
+ toString: toString$1,
+ write: write$2
+ };
+
+ function codecFor (encoding) {
+ switch (encoding) {
+ case 'ascii':
+ return ascii
+ case 'base64':
+ return base64
+ case 'hex':
+ return hex
+ case 'utf8':
+ case 'utf-8':
+ case undefined:
+ return utf8
+ case 'ucs2':
+ case 'ucs-2':
+ case 'utf16le':
+ case 'utf-16le':
+ return utf16le
+ default:
+ throw new Error(`Unknown encoding: ${encoding}`)
}
}
- function toUint8Array (s) {
- if (typeof atob === 'function') return new Uint8Array(atob(s).split('').map(charCodeAt))
- return (commonjsRequire('buf' + 'fer').Buffer).from(s, 'base64')
+ function isBuffer (value) {
+ return value instanceof Uint8Array
}
- function charCodeAt (c) {
- return c.charCodeAt(0)
+ function alloc (size, fill, encoding) {
+ const buffer = new Uint8Array(size);
+ if (fill !== undefined) fill(buffer, fill, 0, buffer.byteLength, encoding);
+ return buffer
}
+ function allocUnsafe (size) {
+ return new Uint8Array(size)
+ }
+
+ function allocUnsafeSlow (size) {
+ return new Uint8Array(size)
+ }
+
+ function byteLength (string, encoding) {
+ return codecFor(encoding).byteLength(string)
+ }
+
+ function compare (a, b) {
+ if (a === b) return 0
+
+ const len = Math.min(a.byteLength, b.byteLength);
+
+ a = new DataView(a.buffer, a.byteOffset, a.byteLength);
+ b = new DataView(b.buffer, b.byteOffset, b.byteLength);
+
+ let i = 0;
+
+ for (let n = len - (len % 4); i < n; i += 4) {
+ const x = a.getUint32(i);
+ const y = b.getUint32(i);
+ if (x < y) return -1
+ if (x > y) return 1
+ }
+
+ for (; i < len; i++) {
+ const x = a.getUint8(i);
+ const y = b.getUint8(i);
+ if (x < y) return -1
+ if (x > y) return 1
+ }
+
+ return a.byteLength > b.byteLength ? 1 : a.byteLength < b.byteLength ? -1 : 0
+ }
+
+ function concat (buffers, totalLength) {
+ if (totalLength === undefined) {
+ totalLength = buffers.reduce((len, buffer) => len + buffer.byteLength, 0);
+ }
+
+ const result = new Uint8Array(totalLength);
+
+ buffers.reduce(
+ (offset, buffer) => {
+ result.set(buffer, offset);
+ return offset + buffer.byteLength
+ },
+ 0
+ );
+
+ return result
+ }
+
+ function copy (source, target, targetStart = 0, start = 0, end = source.byteLength) {
+ if (end > 0 && end < start) return 0
+ if (end === start) return 0
+ if (source.byteLength === 0 || target.byteLength === 0) return 0
+
+ if (targetStart < 0) throw new RangeError('targetStart is out of range')
+ if (start < 0 || start >= source.byteLength) throw new RangeError('sourceStart is out of range')
+ if (end < 0) throw new RangeError('sourceEnd is out of range')
+
+ if (targetStart >= target.byteLength) targetStart = target.byteLength;
+ if (end > source.byteLength) end = source.byteLength;
+ if (target.byteLength - targetStart < end - start) {
+ end = target.length - targetStart + start;
+ }
+
+ const len = end - start;
+
+ if (source === target) {
+ target.copyWithin(targetStart, start, end);
+ } else {
+ target.set(source.subarray(start, end), targetStart);
+ }
+
+ return len
+ }
+
+ function equals (a, b) {
+ if (a === b) return true
+ if (a.byteLength !== b.byteLength) return false
+
+ const len = a.byteLength;
+
+ a = new DataView(a.buffer, a.byteOffset, a.byteLength);
+ b = new DataView(b.buffer, b.byteOffset, b.byteLength);
+
+ let i = 0;
+
+ for (let n = len - (len % 4); i < n; i += 4) {
+ if (a.getUint32(i) !== b.getUint32(i)) return false
+ }
+
+ for (; i < len; i++) {
+ if (a.getUint8(i) !== b.getUint8(i)) return false
+ }
+
+ return true
+ }
+
+ function fill (buffer, value, offset, end, encoding) {
+ if (typeof value === 'string') {
+ // fill(buffer, string, encoding)
+ if (typeof offset === 'string') {
+ encoding = offset;
+ offset = 0;
+ end = buffer.byteLength;
+
+ // fill(buffer, string, offset, encoding)
+ } else if (typeof end === 'string') {
+ encoding = end;
+ end = buffer.byteLength;
+ }
+ } else if (typeof val === 'number') {
+ value = value & 255;
+ } else if (typeof val === 'boolean') {
+ value = +value;
+ }
+
+ if (offset < 0 || buffer.byteLength < offset || buffer.byteLength < end) {
+ throw new RangeError('Out of range index')
+ }
+
+ if (offset === undefined) offset = 0;
+ if (end === undefined) end = buffer.byteLength;
+
+ if (end <= offset) return buffer
+
+ if (!value) value = 0;
+
+ if (typeof value === 'number') {
+ for (let i = offset; i < end; ++i) {
+ buffer[i] = value;
+ }
+ } else {
+ value = isBuffer(value) ? value : from(value, encoding);
+
+ const len = value.byteLength;
+
+ for (let i = 0; i < end - offset; ++i) {
+ buffer[i + offset] = value[i % len];
+ }
+ }
+
+ return buffer
+ }
+
+ function from (value, encodingOrOffset, length) {
+ // from(string, encoding)
+ if (typeof value === 'string') return fromString(value, encodingOrOffset)
+
+ // from(array)
+ if (Array.isArray(value)) return fromArray(value)
+
+ // from(buffer)
+ if (ArrayBuffer.isView(value)) return fromBuffer(value)
+
+ // from(arrayBuffer[, byteOffset[, length]])
+ return fromArrayBuffer(value, encodingOrOffset, length)
+ }
+
+ function fromString (string, encoding) {
+ const codec = codecFor(encoding);
+ const buffer = new Uint8Array(codec.byteLength(string));
+ codec.write(buffer, string, 0, buffer.byteLength);
+ return buffer
+ }
+
+ function fromArray (array) {
+ const buffer = new Uint8Array(array.length);
+ buffer.set(array);
+ return buffer
+ }
+
+ function fromBuffer (buffer) {
+ const copy = new Uint8Array(buffer.byteLength);
+ copy.set(buffer);
+ return copy
+ }
+
+ function fromArrayBuffer (arrayBuffer, byteOffset, length) {
+ return new Uint8Array(arrayBuffer, byteOffset, length)
+ }
+
+ function swap (buffer, n, m) {
+ const i = buffer[n];
+ buffer[n] = buffer[m];
+ buffer[m] = i;
+ }
+
+ function swap16 (buffer) {
+ const len = buffer.byteLength;
+
+ if (len % 2 !== 0) throw new RangeError('Buffer size must be a multiple of 16-bits')
+
+ for (let i = 0; i < len; i += 2) swap(buffer, i, i + 1);
+
+ return buffer
+ }
+
+ function swap32 (buffer) {
+ const len = buffer.byteLength;
+
+ if (len % 4 !== 0) throw new RangeError('Buffer size must be a multiple of 32-bits')
+
+ for (let i = 0; i < len; i += 4) {
+ swap(buffer, i, i + 3);
+ swap(buffer, i + 1, i + 2);
+ }
+
+ return buffer
+ }
+
+ function swap64 (buffer) {
+ const len = buffer.byteLength;
+
+ if (len % 8 !== 0) throw new RangeError('Buffer size must be a multiple of 64-bits')
+
+ for (let i = 0; i < len; i += 8) {
+ swap(buffer, i, i + 7);
+ swap(buffer, i + 1, i + 6);
+ swap(buffer, i + 2, i + 5);
+ swap(buffer, i + 3, i + 4);
+ }
+
+ return buffer
+ }
+
+ function toBuffer (buffer) {
+ return buffer
+ }
+
+ function toString (buffer, encoding, start = 0, end = buffer.byteLength) {
+ const len = buffer.byteLength;
+
+ if (start >= len) return ''
+ if (end <= start) return ''
+ if (start < 0) start = 0;
+ if (end > len) end = len;
+
+ if (start !== 0 || end < len) buffer = buffer.subarray(start, end);
+
+ return codecFor(encoding).toString(buffer)
+ }
+
+ function write$1 (buffer, string, offset, length, encoding) {
+ // write(buffer, string)
+ if (offset === undefined) {
+ encoding = 'utf8';
+
+ // write(buffer, string, encoding)
+ } else if (length === undefined && typeof offset === 'string') {
+ encoding = offset;
+ offset = undefined;
+
+ // write(buffer, string, offset, encoding)
+ } else if (encoding === undefined && typeof length === 'string') {
+ encoding = length;
+ length = undefined;
+ }
+
+ return codecFor(encoding).write(buffer, string, offset, length)
+ }
+
+ var browser = {
+ isBuffer,
+ alloc,
+ allocUnsafe,
+ allocUnsafeSlow,
+ byteLength,
+ compare,
+ concat,
+ copy,
+ equals,
+ fill,
+ from,
+ swap16,
+ swap32,
+ swap64,
+ toBuffer,
+ toString,
+ write: write$1
+ };
+
+ var __commonJS = (cb, mod) => function __require() {
+ return mod || (0, cb[Object.keys(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
+ };
+ var __toBinary = /* @__PURE__ */ (() => {
+ var table = new Uint8Array(128);
+ for (var i = 0; i < 64; i++)
+ table[i < 26 ? i + 65 : i < 52 ? i + 71 : i < 62 ? i - 4 : i * 4 - 205] = i;
+ return (base64) => {
+ var n = base64.length, bytes2 = new Uint8Array((n - (base64[n - 1] == "=") - (base64[n - 2] == "=")) * 3 / 4 | 0);
+ for (var i2 = 0, j = 0; i2 < n; ) {
+ var c0 = table[base64.charCodeAt(i2++)], c1 = table[base64.charCodeAt(i2++)];
+ var c2 = table[base64.charCodeAt(i2++)], c3 = table[base64.charCodeAt(i2++)];
+ bytes2[j++] = c0 << 2 | c1 >> 4;
+ bytes2[j++] = c1 << 4 | c2 >> 2;
+ bytes2[j++] = c2 << 6 | c3;
+ }
+ return bytes2;
+ };
+ })();
+
+ // wasm-binary:./blake2b.wat
+ var require_blake2b = __commonJS({
+ "wasm-binary:./blake2b.wat"(exports2, module2) {
+ module2.exports = __toBinary("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");
+ }
+ });
+
+ // wasm-module:./blake2b.wat
+ var bytes = require_blake2b();
+ var compiled = WebAssembly.compile(bytes);
+ var blake2b = async (imports) => {
+ const instance = await WebAssembly.instantiate(await compiled, imports);
+ return instance.exports;
+ };
+
var blake2bWasm = createCommonjsModule(function (module) {
- var wasm = blake2b();
+ var wasm = null;
+ var wasmPromise = typeof WebAssembly !== "undefined" && blake2b().then(mod => {
+ wasm = mod;
+ });
var head = 64;
var freeList = [];
@@ -7495,16 +20310,16 @@ var snarkjs = (function (exports) {
module.exports = Blake2b;
var BYTES_MIN = module.exports.BYTES_MIN = 16;
var BYTES_MAX = module.exports.BYTES_MAX = 64;
- var BYTES = module.exports.BYTES = 32;
+ module.exports.BYTES = 32;
var KEYBYTES_MIN = module.exports.KEYBYTES_MIN = 16;
var KEYBYTES_MAX = module.exports.KEYBYTES_MAX = 64;
- var KEYBYTES = module.exports.KEYBYTES = 32;
+ module.exports.KEYBYTES = 32;
var SALTBYTES = module.exports.SALTBYTES = 16;
var PERSONALBYTES = module.exports.PERSONALBYTES = 16;
function Blake2b (digestLength, key, salt, personal, noAssert) {
if (!(this instanceof Blake2b)) return new Blake2b(digestLength, key, salt, personal, noAssert)
- if (!(wasm && wasm.exports)) throw new Error('WASM not loaded. Wait for Blake2b.ready(cb)')
+ if (!wasm) throw new Error('WASM not loaded. Wait for Blake2b.ready(cb)')
if (!digestLength) digestLength = 32;
if (noAssert !== true) {
@@ -7533,34 +20348,39 @@ var snarkjs = (function (exports) {
this.digestLength = digestLength;
this.finalized = false;
this.pointer = freeList.pop();
+ this._memory = new Uint8Array(wasm.memory.buffer);
- wasm.memory.fill(0, 0, 64);
- wasm.memory[0] = this.digestLength;
- wasm.memory[1] = key ? key.length : 0;
- wasm.memory[2] = 1; // fanout
- wasm.memory[3] = 1; // depth
+ this._memory.fill(0, 0, 64);
+ this._memory[0] = this.digestLength;
+ this._memory[1] = key ? key.length : 0;
+ this._memory[2] = 1; // fanout
+ this._memory[3] = 1; // depth
- if (salt) wasm.memory.set(salt, 32);
- if (personal) wasm.memory.set(personal, 48);
+ if (salt) this._memory.set(salt, 32);
+ if (personal) this._memory.set(personal, 48);
- if (this.pointer + 216 > wasm.memory.length) wasm.realloc(this.pointer + 216); // we need 216 bytes for the state
- wasm.exports.blake2b_init(this.pointer, this.digestLength);
+ if (this.pointer + 216 > this._memory.length) this._realloc(this.pointer + 216); // we need 216 bytes for the state
+ wasm.blake2b_init(this.pointer, this.digestLength);
if (key) {
this.update(key);
- wasm.memory.fill(0, head, head + key.length); // whiteout key
- wasm.memory[this.pointer + 200] = 128;
+ this._memory.fill(0, head, head + key.length); // whiteout key
+ this._memory[this.pointer + 200] = 128;
}
}
+ Blake2b.prototype._realloc = function (size) {
+ wasm.memory.grow(Math.max(0, Math.ceil(Math.abs(size - this._memory.length) / 65536)));
+ this._memory = new Uint8Array(wasm.memory.buffer);
+ };
Blake2b.prototype.update = function (input) {
nanoassert(this.finalized === false, 'Hash instance finalized');
nanoassert(input instanceof Uint8Array, 'input must be Uint8Array or Buffer');
- if (head + input.length > wasm.memory.length) wasm.realloc(head + input.length);
- wasm.memory.set(input, head);
- wasm.exports.blake2b_update(this.pointer, head, head + input.length);
+ if (head + input.length > this._memory.length) this._realloc(head + input.length);
+ this._memory.set(input, head);
+ wasm.blake2b_update(this.pointer, head, head + input.length);
return this
};
@@ -7569,19 +20389,19 @@ var snarkjs = (function (exports) {
this.finalized = true;
freeList.push(this.pointer);
- wasm.exports.blake2b_final(this.pointer);
+ wasm.blake2b_final(this.pointer);
if (!enc || enc === 'binary') {
- return wasm.memory.slice(this.pointer + 128, this.pointer + 128 + this.digestLength)
+ return this._memory.slice(this.pointer + 128, this.pointer + 128 + this.digestLength)
}
- if (enc === 'hex') {
- return hexSlice(wasm.memory, this.pointer + 128, this.digestLength)
+ if (typeof enc === 'string') {
+ return browser.toString(this._memory, enc, this.pointer + 128, this.pointer + 128 + this.digestLength)
}
nanoassert(enc instanceof Uint8Array && enc.length >= this.digestLength, 'input must be Uint8Array or Buffer');
for (var i = 0; i < this.digestLength; i++) {
- enc[i] = wasm.memory[this.pointer + 128 + i];
+ enc[i] = this._memory[this.pointer + 128 + i];
}
return enc
@@ -7590,47 +20410,26 @@ var snarkjs = (function (exports) {
// libsodium compat
Blake2b.prototype.final = Blake2b.prototype.digest;
- Blake2b.WASM = wasm && wasm.buffer;
+ Blake2b.WASM = wasm;
Blake2b.SUPPORTED = typeof WebAssembly !== 'undefined';
Blake2b.ready = function (cb) {
if (!cb) cb = noop;
- if (!wasm) return cb(new Error('WebAssembly not supported'))
-
- // backwards compat, can be removed in a new major
- var p = new Promise(function (reject, resolve) {
- wasm.onload(function (err) {
- if (err) resolve();
- else reject();
- cb(err);
- });
- });
-
- return p
+ if (!wasmPromise) return cb(new Error('WebAssembly not supported'))
+ return wasmPromise.then(() => cb(), cb)
};
Blake2b.prototype.ready = Blake2b.ready;
Blake2b.prototype.getPartialHash = function () {
- return wasm.memory.slice(this.pointer, this.pointer + 216);
+ return this._memory.slice(this.pointer, this.pointer + 216);
};
Blake2b.prototype.setPartialHash = function (ph) {
- wasm.memory.set(ph, this.pointer);
+ this._memory.set(ph, this.pointer);
};
function noop () {}
-
- function hexSlice (buf, start, len) {
- var str = '';
- for (var i = 0; i < len; i++) str += toHex(buf[start + i]);
- return str
- }
-
- function toHex (n) {
- if (n < 16) return '0' + n.toString(16)
- return n.toString(16)
- }
});
/*
@@ -7652,12 +20451,12 @@ var snarkjs = (function (exports) {
along with snarkJS. If not, see .
*/
- const _revTable$2 = [];
+ const _revTable = [];
for (let i=0; i<256; i++) {
- _revTable$2[i] = _revSlow$2(i, 8);
+ _revTable[i] = _revSlow(i, 8);
}
- function _revSlow$2(idx, bits) {
+ function _revSlow(idx, bits) {
let res =0;
let a = idx;
for (let i=0; i.
*/
- const {stringifyBigInts: stringifyBigInts$3} = utils$1;
+ const {stringifyBigInts: stringifyBigInts$3} = utils;
async function groth16Prove(zkeyFileName, witnessFileName, logger) {
const {fd: fdWtns, sections: sectionsWtns} = await readBinFile(witnessFileName, "wtns", 2);
- const wtns = await readHeader$1(fdWtns, sectionsWtns);
+ const wtns = await readHeader(fdWtns, sectionsWtns);
const {fd: fdZKey, sections: sectionsZKey} = await readBinFile(zkeyFileName, "zkey", 2);
- const zkey = await readHeader(fdZKey, sectionsZKey);
+ const zkey = await readHeader$1(fdZKey, sectionsZKey);
if (zkey.protocol != "groth16") {
throw new Error("zkey file is not groth16");
}
- if (!Scalar$1.eq(zkey.r, wtns.q)) {
+ if (!Scalar.eq(zkey.r, wtns.q)) {
throw new Error("Curve of the witness does not match the curve of the proving key");
}
@@ -8327,7 +21126,7 @@ var snarkjs = (function (exports) {
const G1 = curve.G1;
const G2 = curve.G2;
- const power = log2$1(zkey.domainSize);
+ const power = log2(zkey.domainSize);
if (logger) logger.debug("Reading Wtns");
const buffWitness = await readSection(fdWtns, sectionsWtns, 2);
@@ -8400,7 +21199,7 @@ var snarkjs = (function (exports) {
for (let i=1; i<= zkey.nPublic; i++) {
const b = buffWitness.slice(i*Fr.n8, i*Fr.n8+Fr.n8);
- publicSignals.push(Scalar$1.fromRprLE(b));
+ publicSignals.push(Scalar.fromRprLE(b));
}
proof.pi_a = G1.toObject(G1.toAffine(proof.pi_a));
@@ -8649,1734 +21448,6 @@ var snarkjs = (function (exports) {
return outBuff;
}
- /**
- * FNV-1a Hash implementation (32, 64, 128, 256, 512, and 1024 bit)
- * @author Travis Webb
- * @see http://tools.ietf.org/html/draft-eastlake-fnv-06
- */
-
- var fnvPlus = createCommonjsModule(function (module) {
- var fnvplus = (function(){
- var i, hl = [], hl16 = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'],
- version = '1a',
- useUTF8 = false,
- _hash32, _hash52, _hash64, _hash128, _hash256, _hash512, _hash1024,
- referenceSeed = 'chongo /\\../\\',
- defaultKeyspace = 52,
- fnvConstants = {
- 32: {offset: 0},
- 64: {offset: [0,0,0,0]},
- 128: {offset: [0,0,0,0,0,0,0,0]},
- 256: {offset: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
- 512: {offset: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},
- 1024: {offset: [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}};
-
- for(i=0; i < 256; i++){
- hl[i] = ((i >> 4) & 15).toString(16) + (i & 15).toString(16);
- }
-
- function hexToBase(hex, base){
- var alphabet = '0123456789abcdefghijklmnopqrstuvwxyz',
- digits = [0], carry, i, j, string = '';
-
- for(i = 0; i < hex.length; i+=2){
- carry = parseInt(hex.substr(i,2),16);
- for(j = 0; j < digits.length; j++){
- carry += digits[j] << 8;
- digits[j] = carry % base;
- carry = (carry / base) | 0;
- }
- while (carry > 0) {
- digits.push(carry % base);
- carry = (carry / base) | 0;
- }
- }
-
- for (i = digits.length - 1; i >= 0; --i){
- string += alphabet[digits[i]];
- }
-
- return string;
- }
-
- function hashValHex(value, keyspace) {
- return {
- bits: keyspace,
- value: value,
- dec: function(){return hexToBase(value, 10);},
- hex: function(){return value;},
- str: function(){return hexToBase(value, 36);}
- };
- }
-
- function hashValInt32(value, keyspace) {
- return {
- bits: keyspace,
- value: value,
- dec: function(){return value.toString();},
- hex: function(){return hl[value>>>24]+ hl[(value>>>16)&255]+hl[(value>>>8)&255]+hl[value&255];},
- str: function(){return value.toString(36);}
- };
- }
-
- function hashValInt52(value, keyspace) {
- return {
- bits: keyspace,
- value: value,
- dec: function(){return value.toString();},
- hex: function(){return ('0000000000000000'+value.toString(16)).substr(-13);},
- str: function(){return value.toString(36);}
- };
- }
-
- function hash(message, keyspace) {
- var str = (typeof message === 'object') ? JSON.stringify(message) : message;
-
- switch(keyspace || defaultKeyspace){
- case 32:
- return _hash32(str);
- case 64:
- return _hash64(str);
- case 128:
- return _hash128(str);
- case 256:
- return _hash256(str);
- case 512:
- return _hash512(str);
- case 1024:
- return _hash1024(str);
- default:
- return _hash52(str);
- }
- }
-
- function setKeyspace(keyspace) {
- if (keyspace === 52 || fnvConstants[keyspace]) {
- defaultKeyspace = keyspace;
- } else {
- throw new Error('Supported FNV keyspacs: 32, 52, 64, 128, 256, 512, and 1024 bit');
- }
- }
-
- function setVersion(_version) {
- if (_version === '1a' ) {
- version = _version;
- _hash32 = useUTF8 ? _hash32_1a_utf : _hash32_1a;
- _hash52 = useUTF8 ? _hash52_1a_utf : _hash52_1a;
- _hash64 = useUTF8 ? _hash64_1a_utf : _hash64_1a;
- _hash128 = useUTF8 ? _hash128_1a_utf : _hash128_1a;
- _hash256 = useUTF8 ? _hash256_1a_utf : _hash256_1a;
- _hash512 = useUTF8 ? _hash512_1a_utf : _hash512_1a;
- _hash1024 = useUTF8 ? _hash1024_1a_utf : _hash1024_1a;
- } else if (_version === '1') {
- version = _version;
- _hash32 = useUTF8 ? _hash32_1_utf : _hash32_1;
- _hash52 = useUTF8 ? _hash52_1_utf : _hash52_1;
- _hash64 = useUTF8 ? _hash64_1_utf : _hash64_1;
- _hash128 = useUTF8 ? _hash128_1_utf : _hash128_1;
- _hash256 = useUTF8 ? _hash256_1_utf : _hash256_1;
- _hash512 = useUTF8 ? _hash512_1_utf : _hash512_1;
- _hash1024 = useUTF8 ? _hash1024_1_utf : _hash1024_1;
- } else {
- throw new Error('Supported FNV versions: 1, 1a');
- }
- }
-
- function setUTF8(utf8) {
- if (utf8) {
- useUTF8 = true;
- _hash32 = version == '1a' ? _hash32_1a_utf : _hash32_1_utf;
- _hash52 = version == '1a' ? _hash52_1a_utf : _hash52_1_utf;
- _hash64 = version == '1a' ? _hash64_1a_utf : _hash64_1_utf;
- _hash128 = version == '1a' ? _hash128_1a_utf : _hash128_1_utf;
- _hash256 = version == '1a' ? _hash256_1a_utf : _hash256_1_utf;
- _hash512 = version == '1a' ? _hash512_1a_utf : _hash512_1_utf;
- _hash1024 = version == '1a' ? _hash1024_1a_utf : _hash1024_1_utf;
- } else {
- useUTF8 = false;
- _hash32 = version == '1a' ? _hash32_1a : _hash32_1;
- _hash52 = version == '1a' ? _hash52_1a : _hash52_1;
- _hash64 = version == '1a' ? _hash64_1a : _hash64_1;
- _hash128 = version == '1a' ? _hash128_1a : _hash128_1;
- _hash256 = version == '1a' ? _hash256_1a : _hash256_1;
- _hash512 = version == '1a' ? _hash512_1a : _hash512_1;
- _hash1024 = version == '1a' ? _hash1024_1a : _hash1024_1;
- }
- }
-
- function seed(seed) {
- var oldVersion = version, res, i;
-
- seed = (seed || seed === 0) ? seed : referenceSeed;
-
- if (seed === referenceSeed) setVersion('1');
-
- for (var keysize in fnvConstants) {
- fnvConstants[keysize].offset = [];
- for(i = 0; i < keysize / 16; i++){
- fnvConstants[keysize].offset[i] = 0;
- }
- res = hash(seed, parseInt(keysize, 10)).hex();
- for(i = 0; i < keysize / 16; i++){
- fnvConstants[keysize].offset[i] = parseInt(res.substr(i*4,4), 16);
- }
- }
-
- setVersion(oldVersion);
- }
-
- /**
- * Implementation without library overhead.
- */
-
- function _hash32_1a_fast(str) {
- var i, l = str.length-3, t0=0,v0=0x9dc5,t1=0,v1=0x811c;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- }
-
- while(i>>16))&65535;v0=t0&65535;
- }
-
-
- return ((v1<<16)>>>0)+v0;
- }
-
- function _hash32_1a_fast_hex(str) {
- var i, l = str.length-3, t0=0,v0=0x9dc5,t1=0,v1=0x811c;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- }
-
- while(i>>16))&65535;v0=t0&65535;
- }
-
-
- return hl[(v1>>>8)&255]+hl[v1&255]+hl[(v0>>>8)&255]+hl[v0&255];
- }
-
- function _hash52_1a_fast(str){
- var i,l=str.length-3,t0=0,v0=0x2325,t1=0,v1=0x8422,t2=0,v2=0x9ce4,t3=0,v3=0xcbf2;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return (v3&15) * 281474976710656 + v2 * 4294967296 + v1 * 65536 + (v0^(v3>>4));
- }
-
- function _hash52_1a_fast_hex(str){
- var i,l=str.length-3,t0=0,v0=0x2325,t1=0,v1=0x8422,t2=0,v2=0x9ce4,t3=0,v3=0xcbf2;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return hl16[v3&15]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[(v0>>8)^(v3>>12)]+hl[(v0^(v3>>4))&255];
- }
-
- function _hash64_1a_fast(str){
- var i,l=str.length-3,t0=0,v0=0x2325,t1=0,v1=0x8422,t2=0,v2=0x9ce4,t3=0,v3=0xcbf2;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255];
- }
-
- function _hash32_1a_fast_utf(str) {
- var c,i,l=str.length,t0=0,v0=0x9dc5,t1=0,v1=0x811c;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- }
-
- return ((v1<<16)>>>0)+v0;
- }
-
- function _hash32_1a_fast_hex_utf(str) {
- var c,i,l=str.length,t0=0,v0=0x9dc5,t1=0,v1=0x811c;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- }
-
-
- return hl[(v1>>>8)&255]+hl[v1&255]+hl[(v0>>>8)&255]+hl[v0&255];
- }
-
- function _hash52_1a_fast_utf(str){
- var c,i,l=str.length,t0=0,v0=0x2325,t1=0,v1=0x8422,t2=0,v2=0x9ce4,t3=0,v3=0xcbf2;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return (v3&15) * 281474976710656 + v2 * 4294967296 + v1 * 65536 + (v0^(v3>>4));
- }
-
- function _hash52_1a_fast_hex_utf (str){
- var c,i,l=str.length,t0=0,v0=0x2325,t1=0,v1=0x8422,t2=0,v2=0x9ce4,t3=0,v3=0xcbf2;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return hl16[v3&15]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[(v0>>8)^(v3>>12)]+hl[(v0^(v3>>4))&255];
- }
-
- function _hash64_1a_fast_utf(str){
- var c,i,l=str.length,t0=0,v0=0x2325,t1=0,v1=0x8422,t2=0,v2=0x9ce4,t3=0,v3=0xcbf2;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255];
- }
- /**
- * Regular functions. This versions are accessible through API
- */
-
- function _hash32_1a(str){
- var i,l=str.length-3,s=fnvConstants[32].offset,t0=0,v0=s[1]|0,t1=0,v1=s[0]|0;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- }
-
- while(i>>16))&65535;v0=t0&65535;
- }
-
- return hashValInt32(((v1<<16)>>>0)+v0,32);
- }
-
- function _hash32_1(str){
- var i,l=str.length-3,s=fnvConstants[32].offset,t0=0,v0=s[1]|0,t1=0,v1=s[0]|0;
-
- for (i = 0; i < l;) {
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- }
-
- while(i>>16))&65535;v0=t0&65535;
- v0^=str.charCodeAt(i++);
- }
-
- return hashValInt32(((v1<<16)>>>0)+v0,32);
- }
-
- function _hash32_1a_utf(str){
- var c,i,l=str.length,s=fnvConstants[32].offset,t0=0,v0=s[1]|0,t1=0,v1=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- }
-
- return hashValInt32(((v1<<16)>>>0)+v0,32);
- }
-
- function _hash32_1_utf(str){
- var c,i,l=str.length,s=fnvConstants[32].offset,t0=0,v0=s[1]|0,t1=0,v1=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*403;t1=v1*403;
- t1+=v0<<8;
- v1=(t1+(t0>>>16))&65535;v0=t0&65535;
- v0^=(c&63)|128;
- }
- }
-
- return hashValInt32(((v1<<16)>>>0)+v0,32);
- }
-
- _hash32 = _hash32_1a;
-
- function _hash52_1a(str){
- var i,l=str.length-3,s=fnvConstants[64].offset,t0=0,v0=s[3]|0,t1=0,v1=s[2]|0,t2=0,v2=s[1]|0,t3=0,v3=s[0]|0;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return hashValInt52((v3&15)*281474976710656+v2*4294967296+v1*65536+(v0^(v3>>4)),52);
- }
-
- function _hash52_1(str){
- var i,l=str.length-3,s=fnvConstants[64].offset,t0=0,v0=s[3]|0,t1=0,v1=s[2]|0,t2=0,v2=s[1]|0,t3=0,v3=s[0]|0;
-
- for (i = 0; i < l;) {
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- }
-
- return hashValInt52((v3&15)*281474976710656+v2*4294967296+v1*65536+(v0^(v3>>4)),52);
- }
-
- function _hash52_1a_utf(str){
- var c,i,l=str.length,s=fnvConstants[64].offset,t0=0,v0=s[3]|0,t1=0,v1=s[2]|0,t2=0,v2=s[1]|0,t3=0,v3=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return hashValInt52((v3&15)*281474976710656+v2*4294967296+v1*65536+(v0^(v3>>4)),52);
- }
-
- function _hash52_1_utf(str){
- var c,i,l=str.length,s=fnvConstants[64].offset,t0=0,v0=s[3]|0,t1=0,v1=s[2]|0,t2=0,v2=s[1]|0,t3=0,v3=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }
- }
-
- return hashValInt52((v3&15)*281474976710656+v2*4294967296+v1*65536+(v0^(v3>>4)),52);
- }
-
- _hash52 = _hash52_1a;
-
- function _hash64_1a(str){
- var i,l=str.length-3,s=fnvConstants[64].offset,t0=0,v0=s[3]|0,t1=0,v1=s[2]|0,t2=0,v2=s[1]|0,t3=0,v3=s[0]|0;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return hashValHex(hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],64);
- }
-
- function _hash64_1(str){
- var i,l=str.length-3,s=fnvConstants[64].offset,t0=0,v0=s[3]|0,t1=0,v1=s[2]|0,t2=0,v2=s[1]|0,t3=0,v3=s[0]|0;
-
- for (i = 0; i < l;) {
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=str.charCodeAt(i++);
- }
-
- return hashValHex(hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],64);
- }
-
- function _hash64_1a_utf(str){
- var c,i,l=str.length,s=fnvConstants[64].offset,t0=0,v0=s[3]|0,t1=0,v1=s[2]|0,t2=0,v2=s[1]|0,t3=0,v3=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- }
-
- return hashValHex(hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],64);
- }
-
- function _hash64_1_utf(str){
- var c,i,l=str.length,s=fnvConstants[64].offset,t0=0,v0=s[3]|0,t1=0,v1=s[2]|0,t2=0,v2=s[1]|0,t3=0,v3=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*435;t1=v1*435;t2=v2*435;t3=v3*435;
- t2+=v0<<8;t3+=v1<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;v3=(t3+(t2>>>16))&65535;v2=t2&65535;
- v0^=(c&63)|128;
- }
- }
-
- return hashValHex(hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],64);
- }
-
- _hash64 = _hash64_1a;
-
- function _hash128_1a(str){
- var i,l=str.length-3,s=fnvConstants[128].offset,t0=0,v0=s[7]|0,t1=0,v1=s[6]|0,t2=0,v2=s[5]|0,t3=0,v3=s[4]|0,t4=0,v4=s[3]|0,t5=0,v5=s[2]|0,t6=0,v6=s[1]|0,t7=0,v7=s[0]|0;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- }
-
- return hashValHex(hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],128);
- }
-
- function _hash128_1(str){
- var i,l=str.length-3,s=fnvConstants[128].offset,t0=0,v0=s[7]|0,t1=0,v1=s[6]|0,t2=0,v2=s[5]|0,t3=0,v3=s[4]|0,t4=0,v4=s[3]|0,t5=0,v5=s[2]|0,t6=0,v6=s[1]|0,t7=0,v7=s[0]|0;
-
- for (i = 0; i < l;) {
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=str.charCodeAt(i++);
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=str.charCodeAt(i++);
- }
-
- return hashValHex(hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],128);
- }
-
- function _hash128_1a_utf(str){
- var c,i,l=str.length,s=fnvConstants[128].offset,t0=0,v0=s[7]|0,t1=0,v1=s[6]|0,t2=0,v2=s[5]|0,t3=0,v3=s[4]|0,t4=0,v4=s[3]|0,t5=0,v5=s[2]|0,t6=0,v6=s[1]|0,t7=0,v7=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=(c&63)|128;
- }
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- }
-
- return hashValHex(hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],128);
- }
-
- function _hash128_1_utf(str){
- var c,i,l=str.length,s=fnvConstants[128].offset,t0=0,v0=s[7]|0,t1=0,v1=s[6]|0,t2=0,v2=s[5]|0,t3=0,v3=s[4]|0,t4=0,v4=s[3]|0,t5=0,v5=s[2]|0,t6=0,v6=s[1]|0,t7=0,v7=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*315;t1=v1*315;t2=v2*315;t3=v3*315;t4=v4*315;t5=v5*315;t6=v6*315;t7=v7*315;
- t5+=v0<<8;t6+=v1<<8;t7+=v2<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;v7=(t7+(t6>>>16))&65535;v6=t6&65535;
- v0^=(c&63)|128;
- }
- }
-
- return hashValHex(hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],128);
- }
-
- _hash128 = _hash128_1a;
-
- function _hash256_1a(str){
- var i,l=str.length-3,s=fnvConstants[256].offset,t0=0,v0=s[15]|0,t1=0,v1=s[14]|0,t2=0,v2=s[13]|0,t3=0,v3=s[12]|0,t4=0,v4=s[11]|0,t5=0,v5=s[10]|0,t6=0,v6=s[9]|0,t7=0,v7=s[8]|0,t8=0,v8=s[7]|0,t9=0,v9=s[6]|0,t10=0,v10=s[5]|0,t11=0,v11=s[4]|0,t12=0,v12=s[3]|0,t13=0,v13=s[2]|0,t14=0,v14=s[1]|0,t15=0,v15=s[0]|0;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- }
-
- return hashValHex(hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],256);
- }
-
- function _hash256_1(str){
- var i,l=str.length-3,s=fnvConstants[256].offset,t0=0,v0=s[15]|0,t1=0,v1=s[14]|0,t2=0,v2=s[13]|0,t3=0,v3=s[12]|0,t4=0,v4=s[11]|0,t5=0,v5=s[10]|0,t6=0,v6=s[9]|0,t7=0,v7=s[8]|0,t8=0,v8=s[7]|0,t9=0,v9=s[6]|0,t10=0,v10=s[5]|0,t11=0,v11=s[4]|0,t12=0,v12=s[3]|0,t13=0,v13=s[2]|0,t14=0,v14=s[1]|0,t15=0,v15=s[0]|0;
-
- for (i = 0; i < l;) {
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=str.charCodeAt(i++);
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=str.charCodeAt(i++);
- }
-
- return hashValHex(hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],256);
- }
-
- function _hash256_1a_utf(str){
- var c,i,l=str.length,s=fnvConstants[256].offset,t0=0,v0=s[15]|0,t1=0,v1=s[14]|0,t2=0,v2=s[13]|0,t3=0,v3=s[12]|0,t4=0,v4=s[11]|0,t5=0,v5=s[10]|0,t6=0,v6=s[9]|0,t7=0,v7=s[8]|0,t8=0,v8=s[7]|0,t9=0,v9=s[6]|0,t10=0,v10=s[5]|0,t11=0,v11=s[4]|0,t12=0,v12=s[3]|0,t13=0,v13=s[2]|0,t14=0,v14=s[1]|0,t15=0,v15=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=(c&63)|128;
- }
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- }
-
- return hashValHex(hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],256);
- }
-
- function _hash256_1_utf(str){
- var c,i,l=str.length,s=fnvConstants[256].offset,t0=0,v0=s[15]|0,t1=0,v1=s[14]|0,t2=0,v2=s[13]|0,t3=0,v3=s[12]|0,t4=0,v4=s[11]|0,t5=0,v5=s[10]|0,t6=0,v6=s[9]|0,t7=0,v7=s[8]|0,t8=0,v8=s[7]|0,t9=0,v9=s[6]|0,t10=0,v10=s[5]|0,t11=0,v11=s[4]|0,t12=0,v12=s[3]|0,t13=0,v13=s[2]|0,t14=0,v14=s[1]|0,t15=0,v15=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*355;t1=v1*355;t2=v2*355;t3=v3*355;t4=v4*355;t5=v5*355;t6=v6*355;t7=v7*355;t8=v8*355;t9=v9*355;t10=v10*355;t11=v11*355;t12=v12*355;t13=v13*355;t14=v14*355;t15=v15*355;
- t10+=v0<<8;t11+=v1<<8;t12+=v2<<8;t13+=v3<<8;t14+=v4<<8;t15+=v5<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;v15=(t15+(t14>>>16))&65535;v14=t14&65535;
- v0^=(c&63)|128;
- }
- }
-
- return hashValHex(hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],256);
- }
-
- _hash256 = _hash256_1a;
-
- function _hash512_1a(str){
- var i,l=str.length-3,s=fnvConstants[512].offset,t0=0,v0=s[31]|0,t1=0,v1=s[30]|0,t2=0,v2=s[29]|0,t3=0,v3=s[28]|0,t4=0,v4=s[27]|0,t5=0,v5=s[26]|0,t6=0,v6=s[25]|0,t7=0,v7=s[24]|0,t8=0,v8=s[23]|0,t9=0,v9=s[22]|0,t10=0,v10=s[21]|0,t11=0,v11=s[20]|0,t12=0,v12=s[19]|0,t13=0,v13=s[18]|0,t14=0,v14=s[17]|0,t15=0,v15=s[16]|0,t16=0,v16=s[15]|0,t17=0,v17=s[14]|0,t18=0,v18=s[13]|0,t19=0,v19=s[12]|0,t20=0,v20=s[11]|0,t21=0,v21=s[10]|0,t22=0,v22=s[9]|0,t23=0,v23=s[8]|0,t24=0,v24=s[7]|0,t25=0,v25=s[6]|0,t26=0,v26=s[5]|0,t27=0,v27=s[4]|0,t28=0,v28=s[3]|0,t29=0,v29=s[2]|0,t30=0,v30=s[1]|0,t31=0,v31=s[0]|0;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- }
-
- return hashValHex(hl[v31>>8]+hl[v31&255]+hl[v30>>8]+hl[v30&255]+hl[v29>>8]+hl[v29&255]+hl[v28>>8]+hl[v28&255]+hl[v27>>8]+hl[v27&255]+hl[v26>>8]+hl[v26&255]+hl[v25>>8]+hl[v25&255]+hl[v24>>8]+hl[v24&255]+hl[v23>>8]+hl[v23&255]+hl[v22>>8]+hl[v22&255]+hl[v21>>8]+hl[v21&255]+hl[v20>>8]+hl[v20&255]+hl[v19>>8]+hl[v19&255]+hl[v18>>8]+hl[v18&255]+hl[v17>>8]+hl[v17&255]+hl[v16>>8]+hl[v16&255]+hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],512);
- }
-
- function _hash512_1(str){
- var i,l=str.length-3,s=fnvConstants[512].offset,t0=0,v0=s[31]|0,t1=0,v1=s[30]|0,t2=0,v2=s[29]|0,t3=0,v3=s[28]|0,t4=0,v4=s[27]|0,t5=0,v5=s[26]|0,t6=0,v6=s[25]|0,t7=0,v7=s[24]|0,t8=0,v8=s[23]|0,t9=0,v9=s[22]|0,t10=0,v10=s[21]|0,t11=0,v11=s[20]|0,t12=0,v12=s[19]|0,t13=0,v13=s[18]|0,t14=0,v14=s[17]|0,t15=0,v15=s[16]|0,t16=0,v16=s[15]|0,t17=0,v17=s[14]|0,t18=0,v18=s[13]|0,t19=0,v19=s[12]|0,t20=0,v20=s[11]|0,t21=0,v21=s[10]|0,t22=0,v22=s[9]|0,t23=0,v23=s[8]|0,t24=0,v24=s[7]|0,t25=0,v25=s[6]|0,t26=0,v26=s[5]|0,t27=0,v27=s[4]|0,t28=0,v28=s[3]|0,t29=0,v29=s[2]|0,t30=0,v30=s[1]|0,t31=0,v31=s[0]|0;
-
- for (i = 0; i < l;) {
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=str.charCodeAt(i++);
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=str.charCodeAt(i++);
- }
-
- return hashValHex(hl[v31>>8]+hl[v31&255]+hl[v30>>8]+hl[v30&255]+hl[v29>>8]+hl[v29&255]+hl[v28>>8]+hl[v28&255]+hl[v27>>8]+hl[v27&255]+hl[v26>>8]+hl[v26&255]+hl[v25>>8]+hl[v25&255]+hl[v24>>8]+hl[v24&255]+hl[v23>>8]+hl[v23&255]+hl[v22>>8]+hl[v22&255]+hl[v21>>8]+hl[v21&255]+hl[v20>>8]+hl[v20&255]+hl[v19>>8]+hl[v19&255]+hl[v18>>8]+hl[v18&255]+hl[v17>>8]+hl[v17&255]+hl[v16>>8]+hl[v16&255]+hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],512);
- }
-
- function _hash512_1a_utf(str){
- var c,i,l=str.length,s=fnvConstants[512].offset,t0=0,v0=s[31]|0,t1=0,v1=s[30]|0,t2=0,v2=s[29]|0,t3=0,v3=s[28]|0,t4=0,v4=s[27]|0,t5=0,v5=s[26]|0,t6=0,v6=s[25]|0,t7=0,v7=s[24]|0,t8=0,v8=s[23]|0,t9=0,v9=s[22]|0,t10=0,v10=s[21]|0,t11=0,v11=s[20]|0,t12=0,v12=s[19]|0,t13=0,v13=s[18]|0,t14=0,v14=s[17]|0,t15=0,v15=s[16]|0,t16=0,v16=s[15]|0,t17=0,v17=s[14]|0,t18=0,v18=s[13]|0,t19=0,v19=s[12]|0,t20=0,v20=s[11]|0,t21=0,v21=s[10]|0,t22=0,v22=s[9]|0,t23=0,v23=s[8]|0,t24=0,v24=s[7]|0,t25=0,v25=s[6]|0,t26=0,v26=s[5]|0,t27=0,v27=s[4]|0,t28=0,v28=s[3]|0,t29=0,v29=s[2]|0,t30=0,v30=s[1]|0,t31=0,v31=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=(c&63)|128;
- }
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- }
-
- return hashValHex(hl[v31>>8]+hl[v31&255]+hl[v30>>8]+hl[v30&255]+hl[v29>>8]+hl[v29&255]+hl[v28>>8]+hl[v28&255]+hl[v27>>8]+hl[v27&255]+hl[v26>>8]+hl[v26&255]+hl[v25>>8]+hl[v25&255]+hl[v24>>8]+hl[v24&255]+hl[v23>>8]+hl[v23&255]+hl[v22>>8]+hl[v22&255]+hl[v21>>8]+hl[v21&255]+hl[v20>>8]+hl[v20&255]+hl[v19>>8]+hl[v19&255]+hl[v18>>8]+hl[v18&255]+hl[v17>>8]+hl[v17&255]+hl[v16>>8]+hl[v16&255]+hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],512);
- }
-
- function _hash512_1_utf(str){
- var c,i,l=str.length,s=fnvConstants[512].offset,t0=0,v0=s[31]|0,t1=0,v1=s[30]|0,t2=0,v2=s[29]|0,t3=0,v3=s[28]|0,t4=0,v4=s[27]|0,t5=0,v5=s[26]|0,t6=0,v6=s[25]|0,t7=0,v7=s[24]|0,t8=0,v8=s[23]|0,t9=0,v9=s[22]|0,t10=0,v10=s[21]|0,t11=0,v11=s[20]|0,t12=0,v12=s[19]|0,t13=0,v13=s[18]|0,t14=0,v14=s[17]|0,t15=0,v15=s[16]|0,t16=0,v16=s[15]|0,t17=0,v17=s[14]|0,t18=0,v18=s[13]|0,t19=0,v19=s[12]|0,t20=0,v20=s[11]|0,t21=0,v21=s[10]|0,t22=0,v22=s[9]|0,t23=0,v23=s[8]|0,t24=0,v24=s[7]|0,t25=0,v25=s[6]|0,t26=0,v26=s[5]|0,t27=0,v27=s[4]|0,t28=0,v28=s[3]|0,t29=0,v29=s[2]|0,t30=0,v30=s[1]|0,t31=0,v31=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*343;t1=v1*343;t2=v2*343;t3=v3*343;t4=v4*343;t5=v5*343;t6=v6*343;t7=v7*343;t8=v8*343;t9=v9*343;t10=v10*343;t11=v11*343;t12=v12*343;t13=v13*343;t14=v14*343;t15=v15*343;t16=v16*343;t17=v17*343;t18=v18*343;t19=v19*343;t20=v20*343;t21=v21*343;t22=v22*343;t23=v23*343;t24=v24*343;t25=v25*343;t26=v26*343;t27=v27*343;t28=v28*343;t29=v29*343;t30=v30*343;t31=v31*343;
- t21+=v0<<8;t22+=v1<<8;t23+=v2<<8;t24+=v3<<8;t25+=v4<<8;t26+=v5<<8;t27+=v6<<8;t28+=v7<<8;t29+=v8<<8;t30+=v9<<8;t31+=v10<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;v31=(t31+(t30>>>16))&65535;v30=t30&65535;
- v0^=(c&63)|128;
- }
- }
-
- return hashValHex(hl[v31>>8]+hl[v31&255]+hl[v30>>8]+hl[v30&255]+hl[v29>>8]+hl[v29&255]+hl[v28>>8]+hl[v28&255]+hl[v27>>8]+hl[v27&255]+hl[v26>>8]+hl[v26&255]+hl[v25>>8]+hl[v25&255]+hl[v24>>8]+hl[v24&255]+hl[v23>>8]+hl[v23&255]+hl[v22>>8]+hl[v22&255]+hl[v21>>8]+hl[v21&255]+hl[v20>>8]+hl[v20&255]+hl[v19>>8]+hl[v19&255]+hl[v18>>8]+hl[v18&255]+hl[v17>>8]+hl[v17&255]+hl[v16>>8]+hl[v16&255]+hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],512);
- }
-
- _hash512 = _hash512_1a;
-
- function _hash1024_1a(str){
- var i,l=str.length-3,s=fnvConstants[1024].offset,t0=0,v0=s[63]|0,t1=0,v1=s[62]|0,t2=0,v2=s[61]|0,t3=0,v3=s[60]|0,t4=0,v4=s[59]|0,t5=0,v5=s[58]|0,t6=0,v6=s[57]|0,t7=0,v7=s[56]|0,t8=0,v8=s[55]|0,t9=0,v9=s[54]|0,t10=0,v10=s[53]|0,t11=0,v11=s[52]|0,t12=0,v12=s[51]|0,t13=0,v13=s[50]|0,t14=0,v14=s[49]|0,t15=0,v15=s[48]|0,t16=0,v16=s[47]|0,t17=0,v17=s[46]|0,t18=0,v18=s[45]|0,t19=0,v19=s[44]|0,t20=0,v20=s[43]|0,t21=0,v21=s[42]|0,t22=0,v22=s[41]|0,t23=0,v23=s[40]|0,t24=0,v24=s[39]|0,t25=0,v25=s[38]|0,t26=0,v26=s[37]|0,t27=0,v27=s[36]|0,t28=0,v28=s[35]|0,t29=0,v29=s[34]|0,t30=0,v30=s[33]|0,t31=0,v31=s[32]|0,t32=0,v32=s[31]|0,t33=0,v33=s[30]|0,t34=0,v34=s[29]|0,t35=0,v35=s[28]|0,t36=0,v36=s[27]|0,t37=0,v37=s[26]|0,t38=0,v38=s[25]|0,t39=0,v39=s[24]|0,t40=0,v40=s[23]|0,t41=0,v41=s[22]|0,t42=0,v42=s[21]|0,t43=0,v43=s[20]|0,t44=0,v44=s[19]|0,t45=0,v45=s[18]|0,t46=0,v46=s[17]|0,t47=0,v47=s[16]|0,t48=0,v48=s[15]|0,t49=0,v49=s[14]|0,t50=0,v50=s[13]|0,t51=0,v51=s[12]|0,t52=0,v52=s[11]|0,t53=0,v53=s[10]|0,t54=0,v54=s[9]|0,t55=0,v55=s[8]|0,t56=0,v56=s[7]|0,t57=0,v57=s[6]|0,t58=0,v58=s[5]|0,t59=0,v59=s[4]|0,t60=0,v60=s[3]|0,t61=0,v61=s[2]|0,t62=0,v62=s[1]|0,t63=0,v63=s[0]|0;
-
- for (i = 0; i < l;) {
- v0^=str.charCodeAt(i++);
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- }
-
- return hashValHex(hl[v63>>8]+hl[v63&255]+hl[v62>>8]+hl[v62&255]+hl[v61>>8]+hl[v61&255]+hl[v60>>8]+hl[v60&255]+hl[v59>>8]+hl[v59&255]+hl[v58>>8]+hl[v58&255]+hl[v57>>8]+hl[v57&255]+hl[v56>>8]+hl[v56&255]+hl[v55>>8]+hl[v55&255]+hl[v54>>8]+hl[v54&255]+hl[v53>>8]+hl[v53&255]+hl[v52>>8]+hl[v52&255]+hl[v51>>8]+hl[v51&255]+hl[v50>>8]+hl[v50&255]+hl[v49>>8]+hl[v49&255]+hl[v48>>8]+hl[v48&255]+hl[v47>>8]+hl[v47&255]+hl[v46>>8]+hl[v46&255]+hl[v45>>8]+hl[v45&255]+hl[v44>>8]+hl[v44&255]+hl[v43>>8]+hl[v43&255]+hl[v42>>8]+hl[v42&255]+hl[v41>>8]+hl[v41&255]+hl[v40>>8]+hl[v40&255]+hl[v39>>8]+hl[v39&255]+hl[v38>>8]+hl[v38&255]+hl[v37>>8]+hl[v37&255]+hl[v36>>8]+hl[v36&255]+hl[v35>>8]+hl[v35&255]+hl[v34>>8]+hl[v34&255]+hl[v33>>8]+hl[v33&255]+hl[v32>>8]+hl[v32&255]+hl[v31>>8]+hl[v31&255]+hl[v30>>8]+hl[v30&255]+hl[v29>>8]+hl[v29&255]+hl[v28>>8]+hl[v28&255]+hl[v27>>8]+hl[v27&255]+hl[v26>>8]+hl[v26&255]+hl[v25>>8]+hl[v25&255]+hl[v24>>8]+hl[v24&255]+hl[v23>>8]+hl[v23&255]+hl[v22>>8]+hl[v22&255]+hl[v21>>8]+hl[v21&255]+hl[v20>>8]+hl[v20&255]+hl[v19>>8]+hl[v19&255]+hl[v18>>8]+hl[v18&255]+hl[v17>>8]+hl[v17&255]+hl[v16>>8]+hl[v16&255]+hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],1024);
- }
-
- function _hash1024_1(str){
- var i,l=str.length-3,s=fnvConstants[1024].offset,t0=0,v0=s[63]|0,t1=0,v1=s[62]|0,t2=0,v2=s[61]|0,t3=0,v3=s[60]|0,t4=0,v4=s[59]|0,t5=0,v5=s[58]|0,t6=0,v6=s[57]|0,t7=0,v7=s[56]|0,t8=0,v8=s[55]|0,t9=0,v9=s[54]|0,t10=0,v10=s[53]|0,t11=0,v11=s[52]|0,t12=0,v12=s[51]|0,t13=0,v13=s[50]|0,t14=0,v14=s[49]|0,t15=0,v15=s[48]|0,t16=0,v16=s[47]|0,t17=0,v17=s[46]|0,t18=0,v18=s[45]|0,t19=0,v19=s[44]|0,t20=0,v20=s[43]|0,t21=0,v21=s[42]|0,t22=0,v22=s[41]|0,t23=0,v23=s[40]|0,t24=0,v24=s[39]|0,t25=0,v25=s[38]|0,t26=0,v26=s[37]|0,t27=0,v27=s[36]|0,t28=0,v28=s[35]|0,t29=0,v29=s[34]|0,t30=0,v30=s[33]|0,t31=0,v31=s[32]|0,t32=0,v32=s[31]|0,t33=0,v33=s[30]|0,t34=0,v34=s[29]|0,t35=0,v35=s[28]|0,t36=0,v36=s[27]|0,t37=0,v37=s[26]|0,t38=0,v38=s[25]|0,t39=0,v39=s[24]|0,t40=0,v40=s[23]|0,t41=0,v41=s[22]|0,t42=0,v42=s[21]|0,t43=0,v43=s[20]|0,t44=0,v44=s[19]|0,t45=0,v45=s[18]|0,t46=0,v46=s[17]|0,t47=0,v47=s[16]|0,t48=0,v48=s[15]|0,t49=0,v49=s[14]|0,t50=0,v50=s[13]|0,t51=0,v51=s[12]|0,t52=0,v52=s[11]|0,t53=0,v53=s[10]|0,t54=0,v54=s[9]|0,t55=0,v55=s[8]|0,t56=0,v56=s[7]|0,t57=0,v57=s[6]|0,t58=0,v58=s[5]|0,t59=0,v59=s[4]|0,t60=0,v60=s[3]|0,t61=0,v61=s[2]|0,t62=0,v62=s[1]|0,t63=0,v63=s[0]|0;
-
- for (i = 0; i < l;) {
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=str.charCodeAt(i++);
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=str.charCodeAt(i++);
- }
-
- while(i>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=str.charCodeAt(i++);
- }
-
- return hashValHex(hl[v63>>8]+hl[v63&255]+hl[v62>>8]+hl[v62&255]+hl[v61>>8]+hl[v61&255]+hl[v60>>8]+hl[v60&255]+hl[v59>>8]+hl[v59&255]+hl[v58>>8]+hl[v58&255]+hl[v57>>8]+hl[v57&255]+hl[v56>>8]+hl[v56&255]+hl[v55>>8]+hl[v55&255]+hl[v54>>8]+hl[v54&255]+hl[v53>>8]+hl[v53&255]+hl[v52>>8]+hl[v52&255]+hl[v51>>8]+hl[v51&255]+hl[v50>>8]+hl[v50&255]+hl[v49>>8]+hl[v49&255]+hl[v48>>8]+hl[v48&255]+hl[v47>>8]+hl[v47&255]+hl[v46>>8]+hl[v46&255]+hl[v45>>8]+hl[v45&255]+hl[v44>>8]+hl[v44&255]+hl[v43>>8]+hl[v43&255]+hl[v42>>8]+hl[v42&255]+hl[v41>>8]+hl[v41&255]+hl[v40>>8]+hl[v40&255]+hl[v39>>8]+hl[v39&255]+hl[v38>>8]+hl[v38&255]+hl[v37>>8]+hl[v37&255]+hl[v36>>8]+hl[v36&255]+hl[v35>>8]+hl[v35&255]+hl[v34>>8]+hl[v34&255]+hl[v33>>8]+hl[v33&255]+hl[v32>>8]+hl[v32&255]+hl[v31>>8]+hl[v31&255]+hl[v30>>8]+hl[v30&255]+hl[v29>>8]+hl[v29&255]+hl[v28>>8]+hl[v28&255]+hl[v27>>8]+hl[v27&255]+hl[v26>>8]+hl[v26&255]+hl[v25>>8]+hl[v25&255]+hl[v24>>8]+hl[v24&255]+hl[v23>>8]+hl[v23&255]+hl[v22>>8]+hl[v22&255]+hl[v21>>8]+hl[v21&255]+hl[v20>>8]+hl[v20&255]+hl[v19>>8]+hl[v19&255]+hl[v18>>8]+hl[v18&255]+hl[v17>>8]+hl[v17&255]+hl[v16>>8]+hl[v16&255]+hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],1024);
- }
-
- function _hash1024_1a_utf(str){
- var c,i,l=str.length,s=fnvConstants[1024].offset,t0=0,v0=s[63]|0,t1=0,v1=s[62]|0,t2=0,v2=s[61]|0,t3=0,v3=s[60]|0,t4=0,v4=s[59]|0,t5=0,v5=s[58]|0,t6=0,v6=s[57]|0,t7=0,v7=s[56]|0,t8=0,v8=s[55]|0,t9=0,v9=s[54]|0,t10=0,v10=s[53]|0,t11=0,v11=s[52]|0,t12=0,v12=s[51]|0,t13=0,v13=s[50]|0,t14=0,v14=s[49]|0,t15=0,v15=s[48]|0,t16=0,v16=s[47]|0,t17=0,v17=s[46]|0,t18=0,v18=s[45]|0,t19=0,v19=s[44]|0,t20=0,v20=s[43]|0,t21=0,v21=s[42]|0,t22=0,v22=s[41]|0,t23=0,v23=s[40]|0,t24=0,v24=s[39]|0,t25=0,v25=s[38]|0,t26=0,v26=s[37]|0,t27=0,v27=s[36]|0,t28=0,v28=s[35]|0,t29=0,v29=s[34]|0,t30=0,v30=s[33]|0,t31=0,v31=s[32]|0,t32=0,v32=s[31]|0,t33=0,v33=s[30]|0,t34=0,v34=s[29]|0,t35=0,v35=s[28]|0,t36=0,v36=s[27]|0,t37=0,v37=s[26]|0,t38=0,v38=s[25]|0,t39=0,v39=s[24]|0,t40=0,v40=s[23]|0,t41=0,v41=s[22]|0,t42=0,v42=s[21]|0,t43=0,v43=s[20]|0,t44=0,v44=s[19]|0,t45=0,v45=s[18]|0,t46=0,v46=s[17]|0,t47=0,v47=s[16]|0,t48=0,v48=s[15]|0,t49=0,v49=s[14]|0,t50=0,v50=s[13]|0,t51=0,v51=s[12]|0,t52=0,v52=s[11]|0,t53=0,v53=s[10]|0,t54=0,v54=s[9]|0,t55=0,v55=s[8]|0,t56=0,v56=s[7]|0,t57=0,v57=s[6]|0,t58=0,v58=s[5]|0,t59=0,v59=s[4]|0,t60=0,v60=s[3]|0,t61=0,v61=s[2]|0,t62=0,v62=s[1]|0,t63=0,v63=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=(c&63)|128;
- }
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- }
-
- return hashValHex(hl[v63>>8]+hl[v63&255]+hl[v62>>8]+hl[v62&255]+hl[v61>>8]+hl[v61&255]+hl[v60>>8]+hl[v60&255]+hl[v59>>8]+hl[v59&255]+hl[v58>>8]+hl[v58&255]+hl[v57>>8]+hl[v57&255]+hl[v56>>8]+hl[v56&255]+hl[v55>>8]+hl[v55&255]+hl[v54>>8]+hl[v54&255]+hl[v53>>8]+hl[v53&255]+hl[v52>>8]+hl[v52&255]+hl[v51>>8]+hl[v51&255]+hl[v50>>8]+hl[v50&255]+hl[v49>>8]+hl[v49&255]+hl[v48>>8]+hl[v48&255]+hl[v47>>8]+hl[v47&255]+hl[v46>>8]+hl[v46&255]+hl[v45>>8]+hl[v45&255]+hl[v44>>8]+hl[v44&255]+hl[v43>>8]+hl[v43&255]+hl[v42>>8]+hl[v42&255]+hl[v41>>8]+hl[v41&255]+hl[v40>>8]+hl[v40&255]+hl[v39>>8]+hl[v39&255]+hl[v38>>8]+hl[v38&255]+hl[v37>>8]+hl[v37&255]+hl[v36>>8]+hl[v36&255]+hl[v35>>8]+hl[v35&255]+hl[v34>>8]+hl[v34&255]+hl[v33>>8]+hl[v33&255]+hl[v32>>8]+hl[v32&255]+hl[v31>>8]+hl[v31&255]+hl[v30>>8]+hl[v30&255]+hl[v29>>8]+hl[v29&255]+hl[v28>>8]+hl[v28&255]+hl[v27>>8]+hl[v27&255]+hl[v26>>8]+hl[v26&255]+hl[v25>>8]+hl[v25&255]+hl[v24>>8]+hl[v24&255]+hl[v23>>8]+hl[v23&255]+hl[v22>>8]+hl[v22&255]+hl[v21>>8]+hl[v21&255]+hl[v20>>8]+hl[v20&255]+hl[v19>>8]+hl[v19&255]+hl[v18>>8]+hl[v18&255]+hl[v17>>8]+hl[v17&255]+hl[v16>>8]+hl[v16&255]+hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],1024);
- }
-
- function _hash1024_1_utf(str){
- var c,i,l=str.length,s=fnvConstants[1024].offset,t0=0,v0=s[63]|0,t1=0,v1=s[62]|0,t2=0,v2=s[61]|0,t3=0,v3=s[60]|0,t4=0,v4=s[59]|0,t5=0,v5=s[58]|0,t6=0,v6=s[57]|0,t7=0,v7=s[56]|0,t8=0,v8=s[55]|0,t9=0,v9=s[54]|0,t10=0,v10=s[53]|0,t11=0,v11=s[52]|0,t12=0,v12=s[51]|0,t13=0,v13=s[50]|0,t14=0,v14=s[49]|0,t15=0,v15=s[48]|0,t16=0,v16=s[47]|0,t17=0,v17=s[46]|0,t18=0,v18=s[45]|0,t19=0,v19=s[44]|0,t20=0,v20=s[43]|0,t21=0,v21=s[42]|0,t22=0,v22=s[41]|0,t23=0,v23=s[40]|0,t24=0,v24=s[39]|0,t25=0,v25=s[38]|0,t26=0,v26=s[37]|0,t27=0,v27=s[36]|0,t28=0,v28=s[35]|0,t29=0,v29=s[34]|0,t30=0,v30=s[33]|0,t31=0,v31=s[32]|0,t32=0,v32=s[31]|0,t33=0,v33=s[30]|0,t34=0,v34=s[29]|0,t35=0,v35=s[28]|0,t36=0,v36=s[27]|0,t37=0,v37=s[26]|0,t38=0,v38=s[25]|0,t39=0,v39=s[24]|0,t40=0,v40=s[23]|0,t41=0,v41=s[22]|0,t42=0,v42=s[21]|0,t43=0,v43=s[20]|0,t44=0,v44=s[19]|0,t45=0,v45=s[18]|0,t46=0,v46=s[17]|0,t47=0,v47=s[16]|0,t48=0,v48=s[15]|0,t49=0,v49=s[14]|0,t50=0,v50=s[13]|0,t51=0,v51=s[12]|0,t52=0,v52=s[11]|0,t53=0,v53=s[10]|0,t54=0,v54=s[9]|0,t55=0,v55=s[8]|0,t56=0,v56=s[7]|0,t57=0,v57=s[6]|0,t58=0,v58=s[5]|0,t59=0,v59=s[4]|0,t60=0,v60=s[3]|0,t61=0,v61=s[2]|0,t62=0,v62=s[1]|0,t63=0,v63=s[0]|0;
-
- for (i = 0; i < l; i++) {
- c = str.charCodeAt(i);
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- if(c < 128){
- v0^=c;
- }else if(c < 2048){
- v0^=(c>>6)|192;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=(c&63)|128;
- }else if(((c&64512)==55296)&&(i+1)>18)|240;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=((c>>12)&63)|128;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=(c&63)|128;
- }else {
- v0^=(c>>12)|224;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=((c>>6)&63)|128;
- t0=v0*397;t1=v1*397;t2=v2*397;t3=v3*397;t4=v4*397;t5=v5*397;t6=v6*397;t7=v7*397;t8=v8*397;t9=v9*397;t10=v10*397;t11=v11*397;t12=v12*397;t13=v13*397;t14=v14*397;t15=v15*397;t16=v16*397;t17=v17*397;t18=v18*397;t19=v19*397;t20=v20*397;t21=v21*397;t22=v22*397;t23=v23*397;t24=v24*397;t25=v25*397;t26=v26*397;t27=v27*397;t28=v28*397;t29=v29*397;t30=v30*397;t31=v31*397;t32=v32*397;t33=v33*397;t34=v34*397;t35=v35*397;t36=v36*397;t37=v37*397;t38=v38*397;t39=v39*397;t40=v40*397;t41=v41*397;t42=v42*397;t43=v43*397;t44=v44*397;t45=v45*397;t46=v46*397;t47=v47*397;t48=v48*397;t49=v49*397;t50=v50*397;t51=v51*397;t52=v52*397;t53=v53*397;t54=v54*397;t55=v55*397;t56=v56*397;t57=v57*397;t58=v58*397;t59=v59*397;t60=v60*397;t61=v61*397;t62=v62*397;t63=v63*397;
- t42+=v0<<8;t43+=v1<<8;t44+=v2<<8;t45+=v3<<8;t46+=v4<<8;t47+=v5<<8;t48+=v6<<8;t49+=v7<<8;t50+=v8<<8;t51+=v9<<8;t52+=v10<<8;t53+=v11<<8;t54+=v12<<8;t55+=v13<<8;t56+=v14<<8;t57+=v15<<8;t58+=v16<<8;t59+=v17<<8;t60+=v18<<8;t61+=v19<<8;t62+=v20<<8;t63+=v21<<8;
- t1+=t0>>>16;v0=t0&65535;t2+=t1>>>16;v1=t1&65535;t3+=t2>>>16;v2=t2&65535;t4+=t3>>>16;v3=t3&65535;t5+=t4>>>16;v4=t4&65535;t6+=t5>>>16;v5=t5&65535;t7+=t6>>>16;v6=t6&65535;t8+=t7>>>16;v7=t7&65535;t9+=t8>>>16;v8=t8&65535;t10+=t9>>>16;v9=t9&65535;t11+=t10>>>16;v10=t10&65535;t12+=t11>>>16;v11=t11&65535;t13+=t12>>>16;v12=t12&65535;t14+=t13>>>16;v13=t13&65535;t15+=t14>>>16;v14=t14&65535;t16+=t15>>>16;v15=t15&65535;t17+=t16>>>16;v16=t16&65535;t18+=t17>>>16;v17=t17&65535;t19+=t18>>>16;v18=t18&65535;t20+=t19>>>16;v19=t19&65535;t21+=t20>>>16;v20=t20&65535;t22+=t21>>>16;v21=t21&65535;t23+=t22>>>16;v22=t22&65535;t24+=t23>>>16;v23=t23&65535;t25+=t24>>>16;v24=t24&65535;t26+=t25>>>16;v25=t25&65535;t27+=t26>>>16;v26=t26&65535;t28+=t27>>>16;v27=t27&65535;t29+=t28>>>16;v28=t28&65535;t30+=t29>>>16;v29=t29&65535;t31+=t30>>>16;v30=t30&65535;t32+=t31>>>16;v31=t31&65535;t33+=t32>>>16;v32=t32&65535;t34+=t33>>>16;v33=t33&65535;t35+=t34>>>16;v34=t34&65535;t36+=t35>>>16;v35=t35&65535;t37+=t36>>>16;v36=t36&65535;t38+=t37>>>16;v37=t37&65535;t39+=t38>>>16;v38=t38&65535;t40+=t39>>>16;v39=t39&65535;t41+=t40>>>16;v40=t40&65535;t42+=t41>>>16;v41=t41&65535;t43+=t42>>>16;v42=t42&65535;t44+=t43>>>16;v43=t43&65535;t45+=t44>>>16;v44=t44&65535;t46+=t45>>>16;v45=t45&65535;t47+=t46>>>16;v46=t46&65535;t48+=t47>>>16;v47=t47&65535;t49+=t48>>>16;v48=t48&65535;t50+=t49>>>16;v49=t49&65535;t51+=t50>>>16;v50=t50&65535;t52+=t51>>>16;v51=t51&65535;t53+=t52>>>16;v52=t52&65535;t54+=t53>>>16;v53=t53&65535;t55+=t54>>>16;v54=t54&65535;t56+=t55>>>16;v55=t55&65535;t57+=t56>>>16;v56=t56&65535;t58+=t57>>>16;v57=t57&65535;t59+=t58>>>16;v58=t58&65535;t60+=t59>>>16;v59=t59&65535;t61+=t60>>>16;v60=t60&65535;t62+=t61>>>16;v61=t61&65535;v63=(t63+(t62>>>16))&65535;v62=t62&65535;
- v0^=(c&63)|128;
- }
- }
-
- return hashValHex(hl[v63>>8]+hl[v63&255]+hl[v62>>8]+hl[v62&255]+hl[v61>>8]+hl[v61&255]+hl[v60>>8]+hl[v60&255]+hl[v59>>8]+hl[v59&255]+hl[v58>>8]+hl[v58&255]+hl[v57>>8]+hl[v57&255]+hl[v56>>8]+hl[v56&255]+hl[v55>>8]+hl[v55&255]+hl[v54>>8]+hl[v54&255]+hl[v53>>8]+hl[v53&255]+hl[v52>>8]+hl[v52&255]+hl[v51>>8]+hl[v51&255]+hl[v50>>8]+hl[v50&255]+hl[v49>>8]+hl[v49&255]+hl[v48>>8]+hl[v48&255]+hl[v47>>8]+hl[v47&255]+hl[v46>>8]+hl[v46&255]+hl[v45>>8]+hl[v45&255]+hl[v44>>8]+hl[v44&255]+hl[v43>>8]+hl[v43&255]+hl[v42>>8]+hl[v42&255]+hl[v41>>8]+hl[v41&255]+hl[v40>>8]+hl[v40&255]+hl[v39>>8]+hl[v39&255]+hl[v38>>8]+hl[v38&255]+hl[v37>>8]+hl[v37&255]+hl[v36>>8]+hl[v36&255]+hl[v35>>8]+hl[v35&255]+hl[v34>>8]+hl[v34&255]+hl[v33>>8]+hl[v33&255]+hl[v32>>8]+hl[v32&255]+hl[v31>>8]+hl[v31&255]+hl[v30>>8]+hl[v30&255]+hl[v29>>8]+hl[v29&255]+hl[v28>>8]+hl[v28&255]+hl[v27>>8]+hl[v27&255]+hl[v26>>8]+hl[v26&255]+hl[v25>>8]+hl[v25&255]+hl[v24>>8]+hl[v24&255]+hl[v23>>8]+hl[v23&255]+hl[v22>>8]+hl[v22&255]+hl[v21>>8]+hl[v21&255]+hl[v20>>8]+hl[v20&255]+hl[v19>>8]+hl[v19&255]+hl[v18>>8]+hl[v18&255]+hl[v17>>8]+hl[v17&255]+hl[v16>>8]+hl[v16&255]+hl[v15>>8]+hl[v15&255]+hl[v14>>8]+hl[v14&255]+hl[v13>>8]+hl[v13&255]+hl[v12>>8]+hl[v12&255]+hl[v11>>8]+hl[v11&255]+hl[v10>>8]+hl[v10&255]+hl[v9>>8]+hl[v9&255]+hl[v8>>8]+hl[v8&255]+hl[v7>>8]+hl[v7&255]+hl[v6>>8]+hl[v6&255]+hl[v5>>8]+hl[v5&255]+hl[v4>>8]+hl[v4&255]+hl[v3>>8]+hl[v3&255]+hl[v2>>8]+hl[v2&255]+hl[v1>>8]+hl[v1&255]+hl[v0>>8]+hl[v0&255],1024);
- }
-
- _hash1024 = _hash1024_1a;
-
- // Init library.
- setVersion('1a');
- setUTF8(false);
- seed();
-
- return {
- hash: hash,
- setKeyspace: setKeyspace,
- version: setVersion,
- useUTF8: setUTF8,
- seed: seed,
- fast1a32: _hash32_1a_fast,
- fast1a32hex:_hash32_1a_fast_hex,
- fast1a52: _hash52_1a_fast,
- fast1a52hex: _hash52_1a_fast_hex,
- fast1a64: _hash64_1a_fast,
- fast1a32utf: _hash32_1a_fast_utf,
- fast1a32hexutf:_hash32_1a_fast_hex_utf,
- fast1a52utf: _hash52_1a_fast_utf,
- fast1a52hexutf: _hash52_1a_fast_hex_utf,
- fast1a64utf: _hash64_1a_fast_utf
- };
- })();
-
- module.exports = fnvplus;
- });
-
/*
Copyright 2020 0KIMS association.
@@ -10412,7 +21483,36 @@ var snarkjs = (function (exports) {
}
function fnvHash(str) {
- return fnvPlus.hash(str, 64).hex();
+ const uint64_max = BigInt(2) ** BigInt(64);
+ let hash = BigInt("0xCBF29CE484222325");
+ for (var i = 0; i < str.length; i++) {
+ hash ^= BigInt(str[i].charCodeAt());
+ hash *= BigInt(0x100000001B3);
+ hash %= uint64_max;
+ }
+ let shash = hash.toString(16);
+ let n = 16 - shash.length;
+ shash = '0'.repeat(n).concat(shash);
+ return shash;
+ }
+
+ // Note that this pads zeros
+ function toArray32(s,size) {
+ const res = []; //new Uint32Array(size); //has no unshift
+ let rem = BigInt(s);
+ const radix = BigInt(0x100000000);
+ while (rem) {
+ res.unshift( Number(rem % radix));
+ rem = rem / radix;
+ }
+ if (size) {
+ var i = size - res.length;
+ while (i>0) {
+ res.unshift(0);
+ i--;
+ }
+ }
+ return res;
}
/* globals WebAssembly */
@@ -10446,6 +21546,32 @@ var snarkjs = (function (exports) {
"memory": memory
},
runtime: {
+ exceptionHandler: function(code) {
+ let errStr;
+ if (code == 1) {
+ errStr = "Signal not found. ";
+ } else if (code == 2) {
+ errStr = "Too many signals set. ";
+ } else if (code == 3) {
+ errStr = "Signal already set. ";
+ } else if (code == 4) {
+ errStr = "Assert Failed. ";
+ } else if (code == 5) {
+ errStr = "Not enough memory. ";
+ } else {
+ errStr = "Unknown error.";
+ }
+ console.log("ERROR: ", code, errStr);
+ throw new Error(errStr);
+ },
+ showSharedRWMemory: function() {
+ const shared_rw_memory_size = instance.exports.getFieldNumLen32();
+ const arr = new Uint32Array(shared_rw_memory_size);
+ for (let j=0; j> 2) + i];
}
- this.prime = Scalar$1.fromArray(arr, 0x100000000);
+ this.prime = Scalar.fromArray(arr, 0x100000000);
this.Fr = new F1Field(this.prime);
- this.mask32 = Scalar$1.fromString("FFFFFFFF", 16);
+ this.mask32 = Scalar.fromString("FFFFFFFF", 16);
this.NVars = this.instance.exports.getNVars();
this.n64 = Math.floor((this.Fr.bitLength - 1) / 64)+1;
- this.R = this.Fr.e( Scalar$1.shiftLeft(1 , this.n64*64));
+ this.R = this.Fr.e( Scalar.shiftLeft(1 , this.n64*64));
this.RInv = this.Fr.inv(this.R);
this.sanityCheck = sanityCheck;
}
+ circom_version() {
+ return 1;
+ }
+
async _doCalculateWitness(input, sanityCheck) {
this.instance.exports.init((this.sanityCheck || sanityCheck) ? 1 : 0);
const pSigOffset = this.allocInt();
@@ -10619,7 +21754,7 @@ var snarkjs = (function (exports) {
for (let i=0; i> 2)] = 0;
self.i32[(p >> 2) + 1] = 0x80000000;
- const arr = Scalar$1.toArray(v, 0x100000000);
+ const arr = Scalar.toArray(v, 0x100000000);
for (let i=0; i {
+ const h = fnvHash(k);
+ const hMSB = parseInt(h.slice(0,8), 16);
+ const hLSB = parseInt(h.slice(8,16), 16);
+ const fArr = flatArray(input[k]);
+ for (let i=0; i.
*/
- const {unstringifyBigInts: unstringifyBigInts$3} = utils$1;
+ const {unstringifyBigInts: unstringifyBigInts$1} = utils;
async function groth16Verify(vk_verifier, publicSignals, proof, logger) {
/*
@@ -10770,9 +22042,9 @@ var snarkjs = (function (exports) {
}
*/
- vk_verifier = unstringifyBigInts$3(vk_verifier);
- proof = unstringifyBigInts$3(proof);
- publicSignals = unstringifyBigInts$3(publicSignals);
+ vk_verifier = unstringifyBigInts$1(vk_verifier);
+ proof = unstringifyBigInts$1(proof);
+ publicSignals = unstringifyBigInts$1(publicSignals);
const curve = await getCurveFromName(vk_verifier.curve);
@@ -10783,7 +22055,7 @@ var snarkjs = (function (exports) {
for (let i=0; i.
*/
- function p256(n) {
+ function p256$1(n) {
let nstr = n.toString(16);
while (nstr.length < 64) nstr = "0"+nstr;
nstr = `"0x${nstr}"`;
@@ -10846,13 +22118,13 @@ var snarkjs = (function (exports) {
let inputs = "";
for (let i=0; i.
*/
- const sameRatio$1 = sameRatio;
+ const sameRatio$1 = sameRatio$2;
async function verifyContribution(curve, cur, prev, logger) {
let sr;
@@ -12296,7 +23568,7 @@ var snarkjs = (function (exports) {
async function challengeContribute(curve, challengeFilename, responesFileName, entropy, logger) {
await blake2bWasm.ready();
- const fdFrom = await readExisting$2(challengeFilename);
+ const fdFrom = await readExisting(challengeFilename);
const sG1 = curve.F1.n64*8*2;
@@ -12385,7 +23657,7 @@ var snarkjs = (function (exports) {
along with snarkJS. If not, see .
*/
- async function beacon(oldPtauFilename, newPTauFilename, name, beaconHashStr,numIterationsExp, logger) {
+ async function beacon$1(oldPtauFilename, newPTauFilename, name, beaconHashStr,numIterationsExp, logger) {
const beaconHash = hex2ByteArray(beaconHashStr);
if ( (beaconHash.byteLength == 0)
|| (beaconHash.byteLength*2 !=beaconHashStr.length))
@@ -12792,9 +24064,9 @@ var snarkjs = (function (exports) {
async function processSectionPower(p) {
const nPoints = 2 ** p;
const G = curve[Gstr];
- const Fr = curve.Fr;
+ curve.Fr;
const sGin = G.F.n8*2;
- const sGmid = G.F.n8*3;
+ G.F.n8*3;
let buff;
buff = new BigBuffer(nPoints*sGin);
@@ -13183,7 +24455,7 @@ var snarkjs = (function (exports) {
importResponse: importResponse,
verify: verify,
challengeContribute: challengeContribute,
- beacon: beacon,
+ beacon: beacon$1,
contribute: contribute,
preparePhase2: preparePhase2,
truncate: truncate,
@@ -13237,9 +24509,9 @@ var snarkjs = (function (exports) {
}
- const SUBARRAY_SIZE = 0x40000;
+ const SUBARRAY_SIZE$1 = 0x40000;
- const BigArrayHandler = {
+ const BigArrayHandler$1 = {
get: function(obj, prop) {
if (!isNaN(prop)) {
return obj.getElement(prop);
@@ -13255,13 +24527,13 @@ var snarkjs = (function (exports) {
}
};
- class _BigArray {
+ class _BigArray$1 {
constructor (initSize) {
this.length = initSize || 0;
- this.arr = new Array(SUBARRAY_SIZE);
+ this.arr = new Array(SUBARRAY_SIZE$1);
- for (let i=0; i= this.length) this.length = idx+1;
return true;
}
getKeys() {
- const newA = new BigArray();
+ const newA = new BigArray$1();
for (let i=0; i1<<20) {
- constraints = new BigArray();
+ constraints = new BigArray$1();
} else {
constraints = [];
}
@@ -13389,7 +24661,7 @@ var snarkjs = (function (exports) {
let map;
if (r1cs.nVars>1<<20) {
- map = new BigArray();
+ map = new BigArray$1();
} else {
map = [];
}
@@ -13454,19 +24726,19 @@ var snarkjs = (function (exports) {
along with snarkJS. If not, see .
*/
- const bls12381r$2 = Scalar$1.e("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16);
- const bn128r$2 = Scalar$1.e("21888242871839275222246405745257275088548364400416034343698204186575808495617");
+ const bls12381r = Scalar.e("73eda753299d7d483339d80809a1d80553bda402fffe5bfeffffffff00000001", 16);
+ const bn128r = Scalar.e("21888242871839275222246405745257275088548364400416034343698204186575808495617");
async function r1csInfo(r1csName, logger) {
const cir = await readR1cs(r1csName);
- if (Scalar$1.eq(cir.prime, bn128r$2)) {
+ if (Scalar.eq(cir.prime, bn128r)) {
if (logger) logger.info("Curve: bn-128");
- } else if (Scalar$1.eq(cir.prime, bls12381r$2)) {
+ } else if (Scalar.eq(cir.prime, bls12381r)) {
if (logger) logger.info("Curve: bls12-381");
} else {
- if (logger) logger.info(`Unknown Curve. Prime: ${Scalar$1.toString(cir.prime)}`);
+ if (logger) logger.info(`Unknown Curve. Prime: ${Scalar.toString(cir.prime)}`);
}
if (logger) logger.info(`# of Wires: ${cir.nVars}`);
if (logger) logger.info(`# of Constraints: ${cir.nConstraints}`);
@@ -13497,16 +24769,16 @@ var snarkjs = (function (exports) {
along with snarkJS. If not, see .
*/
- function stringifyBigInts$4(Fr, o) {
+ function stringifyBigInts$2(Fr, o) {
if (o instanceof Uint8Array) {
return Fr.toString(o);
} else if (Array.isArray(o)) {
- return o.map(stringifyBigInts$4.bind(null, Fr));
+ return o.map(stringifyBigInts$2.bind(null, Fr));
} else if (typeof o == "object") {
const res = {};
const keys = Object.keys(o);
keys.forEach( (k) => {
- res[k] = stringifyBigInts$4(Fr, o[k]);
+ res[k] = stringifyBigInts$2(Fr, o[k]);
});
return res;
} else if ((typeof(o) == "bigint") || o.eq !== undefined) {
@@ -13523,7 +24795,7 @@ var snarkjs = (function (exports) {
const Fr=cir.curve.Fr;
delete cir.curve;
- return stringifyBigInts$4(Fr, cir);
+ return stringifyBigInts$2(Fr, cir);
}
/*
@@ -13577,7 +24849,7 @@ var snarkjs = (function (exports) {
varIdx2Name: [ "one" ],
componentIdx2Name: []
};
- const fd = await readExisting$2(symFileName);
+ const fd = await readExisting(symFileName);
const buff = await fd.read(fd.totalSize);
const symsStr = new TextDecoder("utf-8").decode(buff);
const lines = symsStr.split("\n");
@@ -13627,7 +24899,7 @@ var snarkjs = (function (exports) {
async function wtnsDebug(input, wasmFileName, wtnsFileName, symName, options, logger) {
- const fdWasm = await readExisting$2(wasmFileName);
+ const fdWasm = await readExisting(wasmFileName);
const wasm = await fdWasm.read(fdWasm.totalSize);
await fdWasm.close();
@@ -13740,9 +25012,9 @@ var snarkjs = (function (exports) {
along with snarkJS. If not, see .
*/
- const SUBARRAY_SIZE$1 = 0x40000;
+ const SUBARRAY_SIZE = 0x40000;
- const BigArrayHandler$1 = {
+ const BigArrayHandler = {
get: function(obj, prop) {
if (!isNaN(prop)) {
return obj.getElement(prop);
@@ -13758,13 +25030,13 @@ var snarkjs = (function (exports) {
}
};
- class _BigArray$1 {
+ class _BigArray {
constructor (initSize) {
this.length = initSize || 0;
- this.arr = new Array(SUBARRAY_SIZE$1);
+ this.arr = new Array(SUBARRAY_SIZE);
- for (let i=0; i= this.length) this.length = idx+1;
return true;
}
getKeys() {
- const newA = new BigArray$1();
+ const newA = new BigArray();
for (let i=0; i power) {
if (logger) logger.error(`circuit too big for this power of tau ceremony. ${r1cs.nConstraints}*2 > 2**${power}`);
@@ -13889,12 +25161,12 @@ var snarkjs = (function (exports) {
await startWriteSection(fdZKey, 2);
const primeQ = curve.q;
- const n8q = (Math.floor( (Scalar$1.bitLength(primeQ) - 1) / 64) +1)*8;
+ const n8q = (Math.floor( (Scalar.bitLength(primeQ) - 1) / 64) +1)*8;
const primeR = curve.r;
- const n8r = (Math.floor( (Scalar$1.bitLength(primeR) - 1) / 64) +1)*8;
- const Rr = Scalar$1.mod(Scalar$1.shl(1, n8r*8), primeR);
- const R2r = curve.Fr.e(Scalar$1.mod(Scalar$1.mul(Rr,Rr), primeR));
+ const n8r = (Math.floor( (Scalar.bitLength(primeR) - 1) / 64) +1)*8;
+ const Rr = Scalar.mod(Scalar.shl(1, n8r*8), primeR);
+ const R2r = curve.Fr.e(Scalar.mod(Scalar.mul(Rr,Rr), primeR));
await fdZKey.writeULE32(n8q);
await writeBigInt(fdZKey, primeQ, n8q);
@@ -13942,10 +25214,10 @@ var snarkjs = (function (exports) {
if (logger) logger.info("Reading r1cs");
let sR1cs = await readSection(fdR1cs, sectionsR1cs, 2);
- const A = new BigArray$1(r1cs.nVars);
- const B1 = new BigArray$1(r1cs.nVars);
- const B2 = new BigArray$1(r1cs.nVars);
- const C = new BigArray$1(r1cs.nVars- nPublic -1);
+ const A = new BigArray(r1cs.nVars);
+ const B1 = new BigArray(r1cs.nVars);
+ const B2 = new BigArray(r1cs.nVars);
+ const C = new BigArray(r1cs.nVars- nPublic -1);
const IC = new Array(nPublic+1);
if (logger) logger.info("Reading tauG1");
@@ -14022,7 +25294,7 @@ var snarkjs = (function (exports) {
return buffV.getUint32(0, true);
}
- const coefs = new BigArray$1();
+ const coefs = new BigArray();
for (let c=0; c.
*/
- const sameRatio$2 = sameRatio;
+ const sameRatio = sameRatio$2;
@@ -14769,7 +26041,7 @@ var snarkjs = (function (exports) {
await blake2bWasm.ready();
const {fd, sections} = await readBinFile(zkeyFileName, "zkey", 2);
- const zkey = await readHeader(fd, sections, false);
+ const zkey = await readHeader$1(fd, sections, false);
if (zkey.protocol != "groth16") {
throw new Error("zkey file is not groth16");
}
@@ -14796,13 +26068,13 @@ var snarkjs = (function (exports) {
const delta_g2_sp = hashToG2(curve, c.transcript);
- sr = await sameRatio$2(curve, c.delta.g1_s, c.delta.g1_sx, delta_g2_sp, c.delta.g2_spx);
+ sr = await sameRatio(curve, c.delta.g1_s, c.delta.g1_sx, delta_g2_sp, c.delta.g2_spx);
if (sr !== true) {
console.log(`INVALID(${i}): public key G1 and G2 do not have the same ration `);
return false;
}
- sr = await sameRatio$2(curve, curDelta, c.deltaAfter, delta_g2_sp, c.delta.g2_spx);
+ sr = await sameRatio(curve, curDelta, c.deltaAfter, delta_g2_sp, c.delta.g2_spx);
if (sr !== true) {
console.log(`INVALID(${i}): deltaAfter does not fillow the public key `);
return false;
@@ -14835,14 +26107,14 @@ var snarkjs = (function (exports) {
const {fd: fdInit, sections: sectionsInit} = await readBinFile(initFileName, "zkey", 2);
- const zkeyInit = await readHeader(fdInit, sectionsInit, false);
+ const zkeyInit = await readHeader$1(fdInit, sectionsInit, false);
if (zkeyInit.protocol != "groth16") {
throw new Error("zkeyinit file is not groth16");
}
- if ( (!Scalar$1.eq(zkeyInit.q, zkey.q))
- ||(!Scalar$1.eq(zkeyInit.r, zkey.r))
+ if ( (!Scalar.eq(zkeyInit.q, zkey.q))
+ ||(!Scalar.eq(zkeyInit.r, zkey.r))
||(zkeyInit.n8q != zkey.n8q)
||(zkeyInit.n8r != zkey.n8r))
{
@@ -14878,7 +26150,7 @@ var snarkjs = (function (exports) {
if (logger) logger.error("INVALID: Invalid delta1");
return false;
}
- sr = await sameRatio$2(curve, curve.G1.g, curDelta, curve.G2.g, zkey.vk_delta_2);
+ sr = await sameRatio(curve, curve.G1.g, curDelta, curve.G2.g, zkey.vk_delta_2);
if (sr !== true) {
if (logger) logger.error("INVALID: Invalid delta2");
return false;
@@ -15000,7 +26272,7 @@ var snarkjs = (function (exports) {
if (nPoints == 0) return true;
- sr = await sameRatio$2(curve, R1, R2, g2sp, g2spx);
+ sr = await sameRatio(curve, R1, R2, g2sp, g2spx);
if (sr !== true) return false;
return true;
@@ -15079,7 +26351,7 @@ var snarkjs = (function (exports) {
}
await endReadSection(fd);
- sr = await sameRatio$2(curve, R1, R2, zkey.vk_delta_2, zkeyInit.vk_delta_2);
+ sr = await sameRatio(curve, R1, R2, zkey.vk_delta_2, zkeyInit.vk_delta_2);
if (sr !== true) return false;
@@ -15205,7 +26477,7 @@ var snarkjs = (function (exports) {
await blake2bWasm.ready();
const {fd: fdOld, sections: sections} = await readBinFile(zkeyNameOld, "zkey", 2);
- const zkey = await readHeader(fdOld, sections);
+ const zkey = await readHeader$1(fdOld, sections);
if (zkey.protocol != "groth16") {
throw new Error("zkey file is not groth16");
}
@@ -15303,7 +26575,7 @@ var snarkjs = (function (exports) {
*/
- async function beacon$1(zkeyNameOld, zkeyNameNew, name, beaconHashStr, numIterationsExp, logger) {
+ async function beacon(zkeyNameOld, zkeyNameNew, name, beaconHashStr, numIterationsExp, logger) {
await blake2bWasm.ready();
const beaconHash = hex2ByteArray(beaconHashStr);
@@ -15326,7 +26598,7 @@ var snarkjs = (function (exports) {
const {fd: fdOld, sections: sections} = await readBinFile(zkeyNameOld, "zkey", 2);
- const zkey = await readHeader(fdOld, sections);
+ const zkey = await readHeader$1(fdOld, sections);
if (zkey.protocol != "groth16") {
throw new Error("zkey file is not groth16");
@@ -15444,7 +26716,7 @@ var snarkjs = (function (exports) {
const sG1 = curve.G1.F.n8*2;
const sG2 = curve.G2.F.n8*2;
- const fdFrom = await readExisting$2(challengeFilename);
+ const fdFrom = await readExisting(challengeFilename);
const fdTo = await createOverride(responesFileName);
@@ -15608,12 +26880,12 @@ var snarkjs = (function (exports) {
You should have received a copy of the GNU General Public License
along with snarkJS. If not, see .
*/
- const {stringifyBigInts: stringifyBigInts$5} = utils$1;
+ const {stringifyBigInts: stringifyBigInts$1} = utils;
async function zkeyExportVerificationKey(zkeyName, /* logger */ ) {
const {fd, sections} = await readBinFile(zkeyName, "zkey", 2);
- const zkey = await readHeader(fd, sections);
+ const zkey = await readHeader$1(fd, sections);
let res;
if (zkey.protocol == "groth16") {
@@ -15661,7 +26933,7 @@ var snarkjs = (function (exports) {
}
await endReadSection(fd);
- vKey = stringifyBigInts$5(vKey);
+ vKey = stringifyBigInts$1(vKey);
return vKey;
}
@@ -15693,7 +26965,7 @@ var snarkjs = (function (exports) {
w: curve.Fr.toObject(curve.Fr.w[zkey.power])
};
- vKey = stringifyBigInts$5(vKey);
+ vKey = stringifyBigInts$1(vKey);
return vKey;
}
@@ -15741,7 +27013,7 @@ var snarkjs = (function (exports) {
verifyFromR1cs: phase2verifyFromR1cs,
verifyFromInit: phase2verifyFromInit,
contribute: phase2contribute,
- beacon: beacon$1,
+ beacon: beacon,
exportJson: zkeyExportJson,
bellmanContribute: bellmanContribute,
exportVerificationKey: zkeyExportVerificationKey,
@@ -15786,8 +27058,8 @@ var snarkjs = (function (exports) {
if (logger) logger.info("Reading r1cs");
let sR1cs = await readSection(fdR1cs, sectionsR1cs, 2);
- const plonkConstraints = new BigArray$1();
- const plonkAdditions = new BigArray$1();
+ const plonkConstraints = new BigArray();
+ const plonkAdditions = new BigArray();
let plonkNVars = r1cs.nVars;
const nPublic = r1cs.nOutputs + r1cs.nPubInputs;
@@ -15802,7 +27074,7 @@ var snarkjs = (function (exports) {
return -1;
}
- let cirPower = log2$1(plonkConstraints.length -1) +1;
+ let cirPower = log2(plonkConstraints.length -1) +1;
if (cirPower < 3) cirPower = 3; // As the t polinomal is n+5 whe need at least a power of 4
const domainSize = 2 ** cirPower;
@@ -16012,8 +27284,8 @@ var snarkjs = (function (exports) {
async function writeSigma(sectionNum, name) {
const sigma = new BigBuffer(n8r*domainSize*3);
- const lastAparence = new BigArray$1(plonkNVars);
- const firstPos = new BigArray$1(plonkNVars);
+ const lastAparence = new BigArray(plonkNVars);
+ const firstPos = new BigArray(plonkNVars);
let w = Fr.one;
for (let i=0; i.
*/
- const {stringifyBigInts: stringifyBigInts$6} = utils$1;
- const { keccak256 } = sha3;
+ const {stringifyBigInts} = utils;
+ const { keccak256: keccak256$1 } = sha3;
async function plonk16Prove(zkeyFileName, witnessFileName, logger) {
const {fd: fdWtns, sections: sectionsWtns} = await readBinFile(witnessFileName, "wtns", 2);
- const wtns = await readHeader$1(fdWtns, sectionsWtns);
+ const wtns = await readHeader(fdWtns, sectionsWtns);
const {fd: fdZKey, sections: sectionsZKey} = await readBinFile(zkeyFileName, "zkey", 2);
- const zkey = await readHeader(fdZKey, sectionsZKey);
+ const zkey = await readHeader$1(fdZKey, sectionsZKey);
if (zkey.protocol != "plonk") {
throw new Error("zkey file is not groth16");
}
- if (!Scalar$1.eq(zkey.r, wtns.q)) {
+ if (!Scalar.eq(zkey.r, wtns.q)) {
throw new Error("Curve of the witness does not match the curve of the proving key");
}
@@ -16907,7 +28179,7 @@ var snarkjs = (function (exports) {
for (let i=1; i<= zkey.nPublic; i++) {
const pub = buffWitness.slice(i*Fr.n8, i*Fr.n8+Fr.n8);
- publicSignals.push(Scalar$1.fromRprLE(pub));
+ publicSignals.push(Scalar.fromRprLE(pub));
}
proof.A = G1.toObject(proof.A);
@@ -16933,8 +28205,8 @@ var snarkjs = (function (exports) {
delete proof.eval_t;
- proof = stringifyBigInts$6(proof);
- publicSignals = stringifyBigInts$6(publicSignals);
+ proof = stringifyBigInts(proof);
+ publicSignals = stringifyBigInts(publicSignals);
return {proof, publicSignals};
@@ -17565,7 +28837,7 @@ var snarkjs = (function (exports) {
}
function hashToFr(transcript) {
- const v = Scalar$1.fromRprBE(new Uint8Array(keccak256.arrayBuffer(transcript)));
+ const v = Scalar.fromRprBE(new Uint8Array(keccak256$1.arrayBuffer(transcript)));
return Fr.e(v);
}
@@ -17695,14 +28967,14 @@ var snarkjs = (function (exports) {
You should have received a copy of the GNU General Public License along with
snarkjs. If not, see .
*/
- const {unstringifyBigInts: unstringifyBigInts$4} = utils$1;
- const { keccak256: keccak256$1 } = sha3;
+ const {unstringifyBigInts} = utils;
+ const { keccak256 } = sha3;
async function plonkVerify(vk_verifier, publicSignals, proof, logger) {
- vk_verifier = unstringifyBigInts$4(vk_verifier);
- proof = unstringifyBigInts$4(proof);
- publicSignals = unstringifyBigInts$4(publicSignals);
+ vk_verifier = unstringifyBigInts(vk_verifier);
+ proof = unstringifyBigInts(proof);
+ publicSignals = unstringifyBigInts(publicSignals);
const curve = await getCurveFromName(vk_verifier.curve);
@@ -17907,7 +29179,7 @@ var snarkjs = (function (exports) {
}
function hashToFr(curve, transcript) {
- const v = Scalar$1.fromRprBE(new Uint8Array(keccak256$1.arrayBuffer(transcript)));
+ const v = Scalar.fromRprBE(new Uint8Array(keccak256.arrayBuffer(transcript)));
return curve.Fr.e(v);
}
@@ -18093,7 +29365,7 @@ var snarkjs = (function (exports) {
return ("0" + i.toString(16)).slice(-2);
}
- function p256$1(n) {
+ function p256(n) {
let nstr = n.toString(16);
while (nstr.length < 64) nstr = "0"+nstr;
nstr = `"0x${nstr}"`;
@@ -18109,7 +29381,7 @@ var snarkjs = (function (exports) {
let inputs = "";
for (let i=0; i>BigInt(I)}const i=t,B=Q;var E=Object.freeze({__proto__:null,fromString:g,e:C,fromArray:function(A,I){let g=BigInt(0);I=BigInt(I);for(let C=0;C>=BigInt(1)}return g},bits:function(A){let I=BigInt(A);const g=[];for(;I;)I&BigInt(1)?g.push(1):g.push(0),I>>=BigInt(1);return g},toNumber:function(A){if(A>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("Number too big");return Number(A)},toArray:function(A,I){const g=[];let C=BigInt(A);for(I=BigInt(I);C;)g.unshift(Number(C%I)),C/=I;return g},add:function(A,I){return BigInt(A)+BigInt(I)},sub:function(A,I){return BigInt(A)-BigInt(I)},neg:function(A){return-BigInt(A)},mul:function(A,I){return BigInt(A)*BigInt(I)},square:function(A){return BigInt(A)*BigInt(A)},pow:function(A,I){return BigInt(A)**BigInt(I)},exp:function(A,I){return BigInt(A)**BigInt(I)},abs:function(A){return BigInt(A)>=0?BigInt(A):-BigInt(A)},div:function(A,I){return BigInt(A)/BigInt(I)},mod:function(A,I){return BigInt(A)%BigInt(I)},eq:function(A,I){return BigInt(A)==BigInt(I)},neq:function(A,I){return BigInt(A)!=BigInt(I)},lt:function(A,I){return BigInt(A)BigInt(I)},leq:function(A,I){return BigInt(A)<=BigInt(I)},geq:function(A,I){return BigInt(A)>=BigInt(I)},band:function(A,I){return BigInt(A)&BigInt(I)},bor:function(A,I){return BigInt(A)|BigInt(I)},bxor:function(A,I){return BigInt(A)^BigInt(I)},land:function(A,I){return BigInt(A)&&BigInt(I)},lor:function(A,I){return BigInt(A)||BigInt(I)},lnot:function(A){return!BigInt(A)}}),e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function n(A){var I={exports:{}};return A(I,I.exports),I.exports}var a=n((function(A){var I=function(A){var g=1e7,C=9007199254740992,t=o(C),Q="0123456789abcdefghijklmnopqrstuvwxyz",i="function"==typeof BigInt;function B(A,I,g,C){return void 0===A?B[0]:void 0!==I&&(10!=+I||g)?Z(A,I,g,C):j(A)}function E(A,I){this.value=A,this.sign=I,this.isSmall=!1}function e(A){this.value=A,this.sign=A<0,this.isSmall=!0}function n(A){this.value=A}function a(A){return-C0?Math.floor(A):Math.ceil(A)}function f(A,I){var C,t,Q=A.length,i=I.length,B=new Array(Q),E=0,e=g;for(t=0;t=e?1:0,B[t]=C-E*e;for(;t0&&B.push(E),B}function D(A,I){return A.length>=I.length?f(A,I):f(I,A)}function c(A,I){var C,t,Q=A.length,i=new Array(Q),B=g;for(t=0;t0;)i[t++]=I%B,I=Math.floor(I/B);return i}function y(A,I){var C,t,Q=A.length,i=I.length,B=new Array(Q),E=0,e=g;for(C=0;C0;)i[t++]=E%B,E=Math.floor(E/B);return i}function M(A,I){for(var g=[];I-- >0;)g.push(0);return g.concat(A)}function p(A,I){var g=Math.max(A.length,I.length);if(g<=30)return l(A,I);g=Math.ceil(g/2);var C=A.slice(g),t=A.slice(0,g),Q=I.slice(g),i=I.slice(0,g),B=p(t,i),E=p(C,Q),e=p(D(t,C),D(i,Q)),n=D(D(B,M(y(y(e,B),E),g)),M(E,2*g));return h(n),n}function G(A,I,C){return new E(A=0;--g)t=(Q=1e7*t+A[g])-(C=w(Q/I))*I,B[g]=0|C;return[B,0|t]}function U(A,I){var C,t=j(I);if(i)return[new n(A.value/t.value),new n(A.value%t.value)];var Q,a=A.value,f=t.value;if(0===f)throw new Error("Cannot divide by zero");if(A.isSmall)return t.isSmall?[new e(w(a/f)),new e(a%f)]:[B[0],A];if(t.isSmall){if(1===f)return[A,B[0]];if(-1==f)return[A.negate(),B[0]];var D=Math.abs(f);if(D=0;t--){for(C=o-1,D[t+a]!==w&&(C=Math.floor((D[t+a]*o+D[t+a-1])/w)),Q=0,i=0,E=c.length,B=0;Be&&(Q=(Q+1)*o),C=Math.ceil(Q/i);do{if(m(B=F(I,C),a)<=0)break;C--}while(C);n.push(C),a=y(a,B)}return n.reverse(),[r(n),r(a)]}(a,f))[0];var l=A.sign!==t.sign,M=C[1],p=A.sign;return"number"==typeof Q?(l&&(Q=-Q),Q=new e(Q)):Q=new E(Q,l),"number"==typeof M?(p&&(M=-M),M=new e(M)):M=new E(M,p),[Q,M]}function m(A,I){if(A.length!==I.length)return A.length>I.length?1:-1;for(var g=A.length-1;g>=0;g--)if(A[g]!==I[g])return A[g]>I[g]?1:-1;return 0}function L(A){var I=A.abs();return!I.isUnit()&&(!!(I.equals(2)||I.equals(3)||I.equals(5))||!(I.isEven()||I.isDivisibleBy(3)||I.isDivisibleBy(5))&&(!!I.lesser(49)||void 0))}function b(A,g){for(var C,t,Q,i=A.prev(),B=i,E=0;B.isEven();)B=B.divide(2),E++;A:for(t=0;t=0?C=y(A,I):(C=y(I,A),g=!g),"number"==typeof(C=r(C))?(g&&(C=-C),new e(C)):new E(C,g)}(g,C,this.sign)},E.prototype.minus=E.prototype.subtract,e.prototype.subtract=function(A){var I=j(A),g=this.value;if(g<0!==I.sign)return this.add(I.negate());var C=I.value;return I.isSmall?new e(g-C):u(C,Math.abs(g),g>=0)},e.prototype.minus=e.prototype.subtract,n.prototype.subtract=function(A){return new n(this.value-j(A).value)},n.prototype.minus=n.prototype.subtract,E.prototype.negate=function(){return new E(this.value,!this.sign)},e.prototype.negate=function(){var A=this.sign,I=new e(-this.value);return I.sign=!A,I},n.prototype.negate=function(){return new n(-this.value)},E.prototype.abs=function(){return new E(this.value,!1)},e.prototype.abs=function(){return new e(Math.abs(this.value))},n.prototype.abs=function(){return new n(this.value>=0?this.value:-this.value)},E.prototype.multiply=function(A){var I,C,t,Q=j(A),i=this.value,e=Q.value,n=this.sign!==Q.sign;if(Q.isSmall){if(0===e)return B[0];if(1===e)return this;if(-1===e)return this.negate();if((I=Math.abs(e))0?p(i,e):l(i,e),n)},E.prototype.times=E.prototype.multiply,e.prototype._multiplyBySmall=function(A){return a(A.value*this.value)?new e(A.value*this.value):G(Math.abs(A.value),o(Math.abs(this.value)),this.sign!==A.sign)},E.prototype._multiplyBySmall=function(A){return 0===A.value?B[0]:1===A.value?this:-1===A.value?this.negate():G(Math.abs(A.value),this.value,this.sign!==A.sign)},e.prototype.multiply=function(A){return j(A)._multiplyBySmall(this)},e.prototype.times=e.prototype.multiply,n.prototype.multiply=function(A){return new n(this.value*j(A).value)},n.prototype.times=n.prototype.multiply,E.prototype.square=function(){return new E(H(this.value),!1)},e.prototype.square=function(){var A=this.value*this.value;return a(A)?new e(A):new E(H(o(Math.abs(this.value))),!1)},n.prototype.square=function(A){return new n(this.value*this.value)},E.prototype.divmod=function(A){var I=U(this,A);return{quotient:I[0],remainder:I[1]}},n.prototype.divmod=e.prototype.divmod=E.prototype.divmod,E.prototype.divide=function(A){return U(this,A)[0]},n.prototype.over=n.prototype.divide=function(A){return new n(this.value/j(A).value)},e.prototype.over=e.prototype.divide=E.prototype.over=E.prototype.divide,E.prototype.mod=function(A){return U(this,A)[1]},n.prototype.mod=n.prototype.remainder=function(A){return new n(this.value%j(A).value)},e.prototype.remainder=e.prototype.mod=E.prototype.remainder=E.prototype.mod,E.prototype.pow=function(A){var I,g,C,t=j(A),Q=this.value,i=t.value;if(0===i)return B[1];if(0===Q)return B[0];if(1===Q)return B[1];if(-1===Q)return t.isEven()?B[1]:B[-1];if(t.sign)return B[0];if(!t.isSmall)throw new Error("The exponent "+t.toString()+" is too large.");if(this.isSmall&&a(I=Math.pow(Q,i)))return new e(w(I));for(g=this,C=B[1];!0&i&&(C=C.times(g),--i),0!==i;)i/=2,g=g.square();return C},e.prototype.pow=E.prototype.pow,n.prototype.pow=function(A){var I=j(A),g=this.value,C=I.value,t=BigInt(0),Q=BigInt(1),i=BigInt(2);if(C===t)return B[1];if(g===t)return B[0];if(g===Q)return B[1];if(g===BigInt(-1))return I.isEven()?B[1]:B[-1];if(I.isNegative())return new n(t);for(var E=this,e=B[1];(C&Q)===Q&&(e=e.times(E),--C),C!==t;)C/=i,E=E.square();return e},E.prototype.modPow=function(A,I){if(A=j(A),(I=j(I)).isZero())throw new Error("Cannot take modPow with modulus 0");var g=B[1],C=this.mod(I);for(A.isNegative()&&(A=A.multiply(B[-1]),C=C.modInv(I));A.isPositive();){if(C.isZero())return B[0];A.isOdd()&&(g=g.multiply(C).mod(I)),A=A.divide(2),C=C.square().mod(I)}return g},n.prototype.modPow=e.prototype.modPow=E.prototype.modPow,E.prototype.compareAbs=function(A){var I=j(A),g=this.value,C=I.value;return I.isSmall?1:m(g,C)},e.prototype.compareAbs=function(A){var I=j(A),g=Math.abs(this.value),C=I.value;return I.isSmall?g===(C=Math.abs(C))?0:g>C?1:-1:-1},n.prototype.compareAbs=function(A){var I=this.value,g=j(A).value;return(I=I>=0?I:-I)===(g=g>=0?g:-g)?0:I>g?1:-1},E.prototype.compare=function(A){if(A===1/0)return-1;if(A===-1/0)return 1;var I=j(A),g=this.value,C=I.value;return this.sign!==I.sign?I.sign?1:-1:I.isSmall?this.sign?-1:1:m(g,C)*(this.sign?-1:1)},E.prototype.compareTo=E.prototype.compare,e.prototype.compare=function(A){if(A===1/0)return-1;if(A===-1/0)return 1;var I=j(A),g=this.value,C=I.value;return I.isSmall?g==C?0:g>C?1:-1:g<0!==I.sign?g<0?-1:1:g<0?1:-1},e.prototype.compareTo=e.prototype.compare,n.prototype.compare=function(A){if(A===1/0)return-1;if(A===-1/0)return 1;var I=this.value,g=j(A).value;return I===g?0:I>g?1:-1},n.prototype.compareTo=n.prototype.compare,E.prototype.equals=function(A){return 0===this.compare(A)},n.prototype.eq=n.prototype.equals=e.prototype.eq=e.prototype.equals=E.prototype.eq=E.prototype.equals,E.prototype.notEquals=function(A){return 0!==this.compare(A)},n.prototype.neq=n.prototype.notEquals=e.prototype.neq=e.prototype.notEquals=E.prototype.neq=E.prototype.notEquals,E.prototype.greater=function(A){return this.compare(A)>0},n.prototype.gt=n.prototype.greater=e.prototype.gt=e.prototype.greater=E.prototype.gt=E.prototype.greater,E.prototype.lesser=function(A){return this.compare(A)<0},n.prototype.lt=n.prototype.lesser=e.prototype.lt=e.prototype.lesser=E.prototype.lt=E.prototype.lesser,E.prototype.greaterOrEquals=function(A){return this.compare(A)>=0},n.prototype.geq=n.prototype.greaterOrEquals=e.prototype.geq=e.prototype.greaterOrEquals=E.prototype.geq=E.prototype.greaterOrEquals,E.prototype.lesserOrEquals=function(A){return this.compare(A)<=0},n.prototype.leq=n.prototype.lesserOrEquals=e.prototype.leq=e.prototype.lesserOrEquals=E.prototype.leq=E.prototype.lesserOrEquals,E.prototype.isEven=function(){return 0==(1&this.value[0])},e.prototype.isEven=function(){return 0==(1&this.value)},n.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)},E.prototype.isOdd=function(){return 1==(1&this.value[0])},e.prototype.isOdd=function(){return 1==(1&this.value)},n.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)},E.prototype.isPositive=function(){return!this.sign},e.prototype.isPositive=function(){return this.value>0},n.prototype.isPositive=e.prototype.isPositive,E.prototype.isNegative=function(){return this.sign},e.prototype.isNegative=function(){return this.value<0},n.prototype.isNegative=e.prototype.isNegative,E.prototype.isUnit=function(){return!1},e.prototype.isUnit=function(){return 1===Math.abs(this.value)},n.prototype.isUnit=function(){return this.abs().value===BigInt(1)},E.prototype.isZero=function(){return!1},e.prototype.isZero=function(){return 0===this.value},n.prototype.isZero=function(){return this.value===BigInt(0)},E.prototype.isDivisibleBy=function(A){var I=j(A);return!I.isZero()&&(!!I.isUnit()||(0===I.compareAbs(2)?this.isEven():this.mod(I).isZero()))},n.prototype.isDivisibleBy=e.prototype.isDivisibleBy=E.prototype.isDivisibleBy,E.prototype.isPrime=function(g){var C=L(this);if(C!==A)return C;var t=this.abs(),Q=t.bitLength();if(Q<=64)return b(t,[2,3,5,7,11,13,17,19,23,29,31,37]);for(var i=Math.log(2)*Q.toJSNumber(),B=Math.ceil(!0===g?2*Math.pow(i,2):i),E=[],e=0;e-C?new e(A-1):new E(t,!0)},n.prototype.prev=function(){return new n(this.value-BigInt(1))};for(var k=[1];2*k[k.length-1]<=g;)k.push(2*k[k.length-1]);var J=k.length,N=k[J-1];function S(A){return Math.abs(A)<=g}function R(A,g,C){g=j(g);for(var t=A.isNegative(),Q=g.isNegative(),i=t?A.not():A,B=Q?g.not():g,E=0,e=0,n=null,a=null,o=[];!i.isZero()||!B.isZero();)E=(n=U(i,N))[1].toJSNumber(),t&&(E=N-1-E),e=(a=U(B,N))[1].toJSNumber(),Q&&(e=N-1-e),i=n[0],B=a[0],o.push(C(E,e));for(var r=0!==C(t?1:0,Q?1:0)?I(-1):I(0),h=o.length-1;h>=0;h-=1)r=r.multiply(N).add(I(o[h]));return r}E.prototype.shiftLeft=function(A){var I=j(A).toJSNumber();if(!S(I))throw new Error(String(I)+" is too large for shifting.");if(I<0)return this.shiftRight(-I);var g=this;if(g.isZero())return g;for(;I>=J;)g=g.multiply(N),I-=J-1;return g.multiply(k[I])},n.prototype.shiftLeft=e.prototype.shiftLeft=E.prototype.shiftLeft,E.prototype.shiftRight=function(A){var I,g=j(A).toJSNumber();if(!S(g))throw new Error(String(g)+" is too large for shifting.");if(g<0)return this.shiftLeft(-g);for(var C=this;g>=J;){if(C.isZero()||C.isNegative()&&C.isUnit())return C;C=(I=U(C,N))[1].isNegative()?I[0].prev():I[0],g-=J-1}return(I=U(C,k[g]))[1].isNegative()?I[0].prev():I[0]},n.prototype.shiftRight=e.prototype.shiftRight=E.prototype.shiftRight,E.prototype.not=function(){return this.negate().prev()},n.prototype.not=e.prototype.not=E.prototype.not,E.prototype.and=function(A){return R(this,A,(function(A,I){return A&I}))},n.prototype.and=e.prototype.and=E.prototype.and,E.prototype.or=function(A){return R(this,A,(function(A,I){return A|I}))},n.prototype.or=e.prototype.or=E.prototype.or,E.prototype.xor=function(A){return R(this,A,(function(A,I){return A^I}))},n.prototype.xor=e.prototype.xor=E.prototype.xor;var v=1<<30;function Y(A){var I=A.value,C="number"==typeof I?I|v:"bigint"==typeof I?I|BigInt(v):I[0]+I[1]*g|1073758208;return C&-C}function P(A,g){if(g.compareTo(A)<=0){var C=P(A,g.square(g)),t=C.p,Q=C.e,i=t.multiply(g);return i.compareTo(A)<=0?{p:i,e:2*Q+1}:{p:t,e:2*Q}}return{p:I(1),e:0}}function q(A,I){return A=j(A),I=j(I),A.greater(I)?A:I}function x(A,I){return A=j(A),I=j(I),A.lesser(I)?A:I}function X(A,I){if(A=j(A).abs(),I=j(I).abs(),A.equals(I))return A;if(A.isZero())return I;if(I.isZero())return A;for(var g,C,t=B[1];A.isEven()&&I.isEven();)g=x(Y(A),Y(I)),A=A.divide(g),I=I.divide(g),t=t.multiply(g);for(;A.isEven();)A=A.divide(Y(A));do{for(;I.isEven();)I=I.divide(Y(I));A.greater(I)&&(C=I,I=A,A=C),I=I.subtract(A)}while(!I.isZero());return t.isUnit()?A:A.multiply(t)}E.prototype.bitLength=function(){var A=this;return A.compareTo(I(0))<0&&(A=A.negate().subtract(I(1))),0===A.compareTo(I(0))?I(0):I(P(A,I(2)).e).add(I(1))},n.prototype.bitLength=e.prototype.bitLength=E.prototype.bitLength;var Z=function(A,I,g,C){g=g||Q,A=String(A),C||(A=A.toLowerCase(),g=g.toLowerCase());var t,i=A.length,B=Math.abs(I),E={};for(t=0;t=B)){if("1"===a&&1===B)continue;throw new Error(a+" is not a valid digit in base "+I+".")}}I=j(I);var e=[],n="-"===A[0];for(t=n?1:0;t"!==A[t]&&t=0;C--)t=t.add(A[C].times(Q)),Q=Q.times(I);return g?t.negate():t}function K(A,g){if((g=I(g)).isZero()){if(A.isZero())return{value:[0],isNegative:!1};throw new Error("Cannot convert nonzero numbers to base 0.")}if(g.equals(-1)){if(A.isZero())return{value:[0],isNegative:!1};if(A.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-A.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var C=Array.apply(null,Array(A.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);return C.unshift([1]),{value:[].concat.apply([],C),isNegative:!1}}var t=!1;if(A.isNegative()&&g.isPositive()&&(t=!0,A=A.abs()),g.isUnit())return A.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(A.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:t};for(var Q,i=[],B=A;B.isNegative()||B.compareAbs(g)>=0;){Q=B.divmod(g),B=Q.quotient;var E=Q.remainder;E.isNegative()&&(E=g.minus(E).abs(),B=B.next()),i.push(E.toJSNumber())}return i.push(B.toJSNumber()),{value:i.reverse(),isNegative:t}}function O(A,I,g){var C=K(A,I);return(C.isNegative?"-":"")+C.value.map((function(A){return function(A,I){return A<(I=I||Q).length?I[A]:"<"+A+">"}(A,g)})).join("")}function W(A){if(a(+A)){var I=+A;if(I===w(I))return i?new n(BigInt(I)):new e(I);throw new Error("Invalid integer: "+A)}var g="-"===A[0];g&&(A=A.slice(1));var C=A.split(/e/i);if(C.length>2)throw new Error("Invalid integer: "+C.join("e"));if(2===C.length){var t=C[1];if("+"===t[0]&&(t=t.slice(1)),(t=+t)!==w(t)||!a(t))throw new Error("Invalid integer: "+t+" is not a valid exponent.");var Q=C[0],B=Q.indexOf(".");if(B>=0&&(t-=Q.length-B-1,Q=Q.slice(0,B)+Q.slice(B+1)),t<0)throw new Error("Cannot include negative exponent part for integers");A=Q+=new Array(t+1).join("0")}if(!/^([0-9][0-9]*)$/.test(A))throw new Error("Invalid integer: "+A);if(i)return new n(BigInt(g?"-"+A:A));for(var o=[],r=A.length,s=r-7;r>0;)o.push(+A.slice(s,r)),(s-=7)<0&&(s=0),r-=7;return h(o),new E(o,g)}function j(A){return"number"==typeof A?function(A){if(i)return new n(BigInt(A));if(a(A)){if(A!==w(A))throw new Error(A+" is not an integer.");return new e(A)}return W(A.toString())}(A):"string"==typeof A?W(A):"bigint"==typeof A?new n(A):A}E.prototype.toArray=function(A){return K(this,A)},e.prototype.toArray=function(A){return K(this,A)},n.prototype.toArray=function(A){return K(this,A)},E.prototype.toString=function(I,g){if(I===A&&(I=10),10!==I)return O(this,I,g);for(var C,t=this.value,Q=t.length,i=String(t[--Q]);--Q>=0;)C=String(t[Q]),i+="0000000".slice(C.length)+C;return(this.sign?"-":"")+i},e.prototype.toString=function(I,g){return I===A&&(I=10),10!=I?O(this,I,g):String(this.value)},n.prototype.toString=e.prototype.toString,n.prototype.toJSON=E.prototype.toJSON=e.prototype.toJSON=function(){return this.toString()},E.prototype.valueOf=function(){return parseInt(this.toString(),10)},E.prototype.toJSNumber=E.prototype.valueOf,e.prototype.valueOf=function(){return this.value},e.prototype.toJSNumber=e.prototype.valueOf,n.prototype.valueOf=n.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};for(var z=0;z<1e3;z++)B[z]=j(z),z>0&&(B[-z]=j(-z));return B.one=B[1],B.zero=B[0],B.minusOne=B[-1],B.max=q,B.min=x,B.gcd=X,B.lcm=function(A,I){return A=j(A).abs(),I=j(I).abs(),A.divide(X(A,I)).multiply(I)},B.isInstance=function(A){return A instanceof E||A instanceof e||A instanceof n},B.randBetween=function(A,I,C){A=j(A),I=j(I);var t=C||Math.random,Q=x(A,I),i=q(A,I).subtract(Q).add(1);if(i.isSmall)return Q.add(Math.floor(t()*i));for(var E=K(i,g).value,e=[],n=!0,a=0;a>5);for(let A=0;A>5);for(let A=0;At[t.length-I-1]=A.toString(16).padStart(8,"0"))),y.fromString(t.join(""),16)},y.fromRprBE=function(A,I,g){g=g||A.byteLength,I=I||0;const C=new DataView(A.buffer,A.byteOffset+I,g),t=new Array(g/4);for(let A=0;A>=1;return g}function sA(A,I,g){if(J(g))return A.one;const C=q(g);if(0==C.legth)return A.one;let t=I;for(let g=C.length-2;g>=0;g--)t=A.square(t),C[g]&&(t=A.mul(t,I));return t}function wA(A){if(A.m%2==1)if(AA($(A.p,4),1))if(AA($(A.p,8),1))if(AA($(A.p,16),1))!function(A){A.sqrt_q=j(A.p,A.m),A.sqrt_s=0,A.sqrt_t=V(A.sqrt_q,1);for(;!Y(A.sqrt_t);)A.sqrt_s=A.sqrt_s+1,A.sqrt_t=_(A.sqrt_t,2);let I=A.one;for(;A.eq(I,A.one);){const g=A.random();A.sqrt_z=A.pow(g,A.sqrt_t),I=A.pow(A.sqrt_z,2**(A.sqrt_s-1))}A.sqrt_tm1d2=_(V(A.sqrt_t,1),2),A.sqrt=function(A){const I=this;if(I.isZero(A))return I.zero;let g=I.pow(A,I.sqrt_tm1d2);const C=I.pow(I.mul(I.square(g),A),2**(I.sqrt_s-1));if(I.eq(C,I.negone))return null;let t=I.sqrt_s,Q=I.mul(A,g),i=I.mul(Q,g),B=I.sqrt_z;for(;!I.eq(i,I.one);){let A=I.square(i),C=1;for(;!I.eq(A,I.one);)A=I.square(A),C++;g=B;for(let A=0;A>>0,A[t]=(A[t]^A[I])>>>0,A[t]=(A[t]<<16|A[t]>>>16&65535)>>>0,A[C]=A[C]+A[t]>>>0,A[g]=(A[g]^A[C])>>>0,A[g]=(A[g]<<12|A[g]>>>20&4095)>>>0,A[I]=A[I]+A[g]>>>0,A[t]=(A[t]^A[I])>>>0,A[t]=(A[t]<<8|A[t]>>>24&255)>>>0,A[C]=A[C]+A[t]>>>0,A[g]=(A[g]^A[C])>>>0,A[g]=(A[g]<<7|A[g]>>>25&127)>>>0}class DA{constructor(A){A=A||[0,0,0,0,0,0,0,0],this.state=[1634760805,857760878,2036477234,1797285236,A[0],A[1],A[2],A[3],A[4],A[5],A[6],A[7],0,0,0,0],this.idx=16,this.buff=new Array(16)}nextU32(){return 16==this.idx&&this.update(),this.buff[this.idx++]}nextU64(){return Z(O(this.nextU32(),4294967296),this.nextU32())}nextBool(){return 1==(1&this.nextU32())}update(){for(let A=0;A<16;A++)this.buff[A]=this.state[A];for(let I=0;I<10;I++)fA(A=this.buff,0,4,8,12),fA(A,1,5,9,13),fA(A,2,6,10,14),fA(A,3,7,11,15),fA(A,0,5,10,15),fA(A,1,6,11,12),fA(A,2,7,8,13),fA(A,3,4,9,14);var A;for(let A=0;A<16;A++)this.buff[A]=this.buff[A]+this.state[A]>>>0;this.idx=0,this.state[12]=this.state[12]+1>>>0,0==this.state[12]&&(this.state[13]=this.state[13]+1>>>0,0==this.state[13]&&(this.state[14]=this.state[14]+1>>>0,0==this.state[14]&&(this.state[15]=this.state[15]+1>>>0)))}}var cA={};function yA(A){let I=new Uint8Array(A);if(void 0!==globalThis.crypto)globalThis.crypto.getRandomValues(I);else for(let g=0;g>>0;return I}let uA=null;function lA(){return uA||(uA=new DA(function(){const A=yA(32),I=new Uint32Array(A.buffer),g=[];for(let A=0;A<8;A++)g.push(I[A]);return g}()),uA)}class FA{constructor(A){this.type="F1",this.one=BigInt(1),this.zero=BigInt(0),this.p=BigInt(A),this.m=1,this.negone=this.p-this.one,this.two=BigInt(2),this.half=this.p>>this.one,this.bitLength=b(this.p),this.mask=(this.one<>this.one;this.nqr=this.two;let g=this.pow(this.nqr,I);for(;!this.eq(g,this.negone);)this.nqr=this.nqr+this.one,g=this.pow(this.nqr,I);for(this.s=0,this.t=this.negone;(this.t&this.one)==this.zero;)this.s=this.s+1,this.t=this.t>>this.one;this.nqr_to_t=this.pow(this.nqr,this.t),wA(this)}e(A,I){let g;if(I?16==I&&(g=BigInt("0x"+A)):g=BigInt(A),g<0){let A=-g;return A>=this.p&&(A%=this.p),this.p-A}return g>=this.p?g%this.p:g}add(A,I){const g=A+I;return g>=this.p?g-this.p:g}sub(A,I){return A>=I?A-I:this.p-I+A}neg(A){return A?this.p-A:A}mul(A,I){return A*I%this.p}mulScalar(A,I){return A*this.e(I)%this.p}square(A){return A*A%this.p}eq(A,I){return A==I}neq(A,I){return A!=I}lt(A,I){return(A>this.half?A-this.p:A)<(I>this.half?I-this.p:I)}gt(A,I){return(A>this.half?A-this.p:A)>(I>this.half?I-this.p:I)}leq(A,I){return(A>this.half?A-this.p:A)<=(I>this.half?I-this.p:I)}geq(A,I){return(A>this.half?A-this.p:A)>=(I>this.half?I-this.p:I)}div(A,I){return this.mul(A,this.inv(I))}idiv(A,I){if(!I)throw new Error("Division by zero");return A/I}inv(A){if(!A)throw new Error("Division by zero");let I=this.zero,g=this.p,C=this.one,t=A%this.p;for(;t;){let A=g/t;[I,C]=[C,I-A*C],[g,t]=[t,g-A*t]}return I=this.p?g-this.p:g}bor(A,I){const g=(A|I)&this.mask;return g>=this.p?g-this.p:g}bxor(A,I){const g=(A^I)&this.mask;return g>=this.p?g-this.p:g}bnot(A){const I=A^this.mask;return I>=this.p?I-this.p:I}shl(A,I){if(Number(I)=this.p?g-this.p:g}{const g=this.p-I;return Number(g)>g:this.zero}}shr(A,I){if(Number(I)>I;{const g=this.p-I;if(Number(g)=this.p?I-this.p:I}return 0}}land(A,I){return A&&I?this.one:this.zero}lor(A,I){return A||I?this.one:this.zero}lnot(A){return A?this.zero:this.one}sqrt_old(A){if(A==this.zero)return this.zero;if(this.pow(A,this.negone>>this.one)!=this.one)return null;let I=this.s,g=this.nqr_to_t,C=this.pow(A,this.t),t=this.pow(A,this.add(this.t,this.one)>>this.one);for(;C!=this.one;){let A=this.square(C),Q=1;for(;A!=this.one;)Q++,A=this.square(A);let i=g;for(let A=0;Athis.p>>this.one&&(t=this.neg(t)),t}normalize(A,I){if((A=BigInt(A,I))<0){let I=-A;return I>=this.p&&(I%=this.p),this.p-I}return A>=this.p?A%this.p:A}random(){const A=2*this.bitLength/8;let I=this.zero;for(let g=0;gthis.half){g="-"+(this.p-A).toString(I)}else g=A.toString(I);return g}isZero(A){return A==this.zero}fromRng(A){let I;do{I=this.zero;for(let g=0;g=this.p);return I=I*this.Ri%this.p,I}}class MA{constructor(A){this.type="F1",this.one=a.one,this.zero=a.zero,this.p=a(A),this.m=1,this.negone=this.p.minus(a.one),this.two=a(2),this.half=this.p.shiftRight(1),this.bitLength=this.p.bitLength(),this.mask=a.one.shiftLeft(this.bitLength).minus(a.one),this.n64=Math.floor((this.bitLength-1)/64)+1,this.n32=2*this.n64,this.n8=8*this.n64,this.R=a.one.shiftLeft(64*this.n64),this.Ri=this.inv(this.R);const I=this.negone.shiftRight(this.one);this.nqr=this.two;let g=this.pow(this.nqr,I);for(;!g.equals(this.negone);)this.nqr=this.nqr.add(this.one),g=this.pow(this.nqr,I);for(this.s=this.zero,this.t=this.negone;!this.t.isOdd();)this.s=this.s.add(this.one),this.t=this.t.shiftRight(this.one);this.nqr_to_t=this.pow(this.nqr,this.t),wA(this)}e(A,I){const g=a(A,I);return this.normalize(g)}add(A,I){let g=A.add(I);return g.geq(this.p)&&(g=g.minus(this.p)),g}sub(A,I){return A.geq(I)?A.minus(I):this.p.minus(I.minus(A))}neg(A){return A.isZero()?A:this.p.minus(A)}mul(A,I){return A.times(I).mod(this.p)}mulScalar(A,I){return A.times(a(I)).mod(this.p)}square(A){return A.square().mod(this.p)}eq(A,I){return A.eq(I)}neq(A,I){return A.neq(I)}lt(A,I){const g=A.gt(this.half)?A.minus(this.p):A,C=I.gt(this.half)?I.minus(this.p):I;return g.lt(C)}gt(A,I){const g=A.gt(this.half)?A.minus(this.p):A,C=I.gt(this.half)?I.minus(this.p):I;return g.gt(C)}leq(A,I){const g=A.gt(this.half)?A.minus(this.p):A,C=I.gt(this.half)?I.minus(this.p):I;return g.leq(C)}geq(A,I){const g=A.gt(this.half)?A.minus(this.p):A,C=I.gt(this.half)?I.minus(this.p):I;return g.geq(C)}div(A,I){if(I.isZero())throw new Error("Division by zero");return A.times(I.modInv(this.p)).mod(this.p)}idiv(A,I){if(I.isZero())throw new Error("Division by zero");return A.divide(I)}inv(A){if(A.isZero())throw new Error("Division by zero");return A.modInv(this.p)}mod(A,I){return A.mod(I)}pow(A,I){return A.modPow(I,this.p)}exp(A,I){return A.modPow(I,this.p)}band(A,I){return A.and(I).and(this.mask).mod(this.p)}bor(A,I){return A.or(I).and(this.mask).mod(this.p)}bxor(A,I){return A.xor(I).and(this.mask).mod(this.p)}bnot(A){return A.xor(this.mask).mod(this.p)}shl(A,I){if(I.lt(this.bitLength))return A.shiftLeft(I).and(this.mask).mod(this.p);{const g=this.p.minus(I);return g.lt(this.bitLength)?this.shr(A,g):a.zero}}shr(A,I){if(I.lt(this.bitLength))return A.shiftRight(I);{const g=this.p.minus(I);return g.lt(this.bitLength)?this.shl(A,g):a.zero}}land(A,I){return A.isZero()||I.isZero()?a.zero:a.one}lor(A,I){return A.isZero()&&I.isZero()?a.zero:a.one}lnot(A){return A.isZero()?a.one:a.zero}sqrt_old(A){if(A.equals(this.zero))return this.zero;if(!this.pow(A,this.negone.shiftRight(this.one)).equals(this.one))return null;let I=parseInt(this.s),g=this.nqr_to_t,C=this.pow(A,this.t),t=this.pow(A,this.add(this.t,this.one).shiftRight(this.one));for(;!C.equals(this.one);){let A=this.square(C),Q=1;for(;!A.equals(this.one);)Q++,A=this.square(A);let i=g;for(let A=0;A{g[C]=A(I[C])})),g}return I},unstringifyBigInts:function A(I){if("string"==typeof I&&/^[0-9]+$/.test(I))return BigInt(I);if("string"==typeof I&&/^0x[0-9a-fA-F]+$/.test(I))return BigInt(I);if(Array.isArray(I))return I.map(A);if("object"==typeof I){if(null===I)return null;const g={};return Object.keys(I).forEach((C=>{g[C]=A(I[C])})),g}return I},beBuff2int:function(A){let I=BigInt(0),g=A.length,C=0;const t=new DataView(A.buffer,A.byteOffset,A.byteLength);for(;g>0;)g>=4?(g-=4,I+=BigInt(t.getUint32(g))<=2?(g-=2,I+=BigInt(t.getUint16(g))<0;)Q-4>=0?(Q-=4,t.setUint32(Q,Number(g&BigInt(4294967295))),g>>=BigInt(32)):Q-2>=0?(Q-=2,t.setUint16(Q,Number(g&BigInt(65535))),g>>=BigInt(16)):(Q-=1,t.setUint8(Q,Number(g&BigInt(255))),g>>=BigInt(8));if(g)throw new Error("Number does not fit in this length");return C},leBuff2int:function(A){let I=BigInt(0),g=0;const C=new DataView(A.buffer,A.byteOffset,A.byteLength);for(;g>=BigInt(32)):Q+2<=I?(t.setUint16(Number(Q,g&BigInt(65535)),!0),Q+=2,g>>=BigInt(16)):(t.setUint8(Number(Q,g&BigInt(255)),!0),Q+=1,g>>=BigInt(8));if(g)throw new Error("Number does not fit in this length");return C}});var mA=Object.freeze({__proto__:null,stringifyBigInts:function A(I){if("bigint"==typeof I||void 0!==I.eq)return I.toString(10);if(Array.isArray(I))return I.map(A);if("object"==typeof I){const g={};return Object.keys(I).forEach((C=>{g[C]=A(I[C])})),g}return I},unstringifyBigInts:function A(I){if("string"==typeof I&&/^[0-9]+$/.test(I))return a(I);if("string"==typeof I&&/^0x[0-9a-fA-F]+$/.test(I))return a(I);if(Array.isArray(I))return I.map(A);if("object"==typeof I){const g={};return Object.keys(I).forEach((C=>{g[C]=A(I[C])})),g}return I},beBuff2int:function(A){let I=a.zero;for(let g=0;g=0;){let A=Number(g.and(a("255")));t[C]=A,C--,g=g.shiftRight(8)}if(!g.eq(a.zero))throw new Error("Number does not fit in this length");return t},leBuff2int:function(A){let I=a.zero;for(let g=0;g>=1;return g}LA.bitReverse=function(A,I){return(bA[A>>>24]|bA[A>>>16&255]<<8|bA[A>>>8&255]<<16|bA[255&A]<<24)>>>32-I},LA.log2=function(A){return(0!=(4294901760&A)?(A&=4294901760,16):0)|(0!=(4278255360&A)?(A&=4278255360,8):0)|(0!=(4042322160&A)?(A&=4042322160,4):0)|(0!=(3435973836&A)?(A&=3435973836,2):0)|0!=(2863311530&A)},LA.buffReverseBits=function(A,I){const g=A.byteLength/I,C=LA.log2(g);if(g!=1<g){const C=A.slice(t*I,(t+1)*I);A.set(A.slice(g*I,(g+1)*I),t*I),A.set(C,g*I)}}};let{bitReverse:JA,log2:NA,buffReverseBits:SA,stringifyBigInts:RA,unstringifyBigInts:vA,beBuff2int:YA,beInt2Buff:PA,leBuff2int:qA,leInt2Buff:xA}=LA;var XA=Object.freeze({__proto__:null,bitReverse:JA,log2:NA,buffReverseBits:SA,stringifyBigInts:RA,unstringifyBigInts:vA,beBuff2int:YA,beInt2Buff:PA,leBuff2int:qA,leInt2Buff:xA});const ZA=1<<30;class VA{constructor(A){this.buffers=[],this.byteLength=A;for(let I=0;I0;){const A=i+B>ZA?ZA-i:B,I=new Uint8Array(this.buffers[Q].buffer,this.buffers[Q].byteOffset+i,A);if(A==g)return I.slice();t||(t=g<=ZA?new Uint8Array(g):new VA(g)),t.set(I,g-B),B-=A,Q++,i=0}return t}set(A,I){void 0===I&&(I=0);const g=A.byteLength;if(0==g)return;const C=Math.floor(I/ZA);if(C==Math.floor((I+g-1)/ZA))return A instanceof VA&&1==A.buffers.length?this.buffers[C].set(A.buffers[0],I%ZA):this.buffers[C].set(A,I%ZA);let t=C,Q=I%ZA,i=g;for(;i>0;){const I=Q+i>ZA?ZA-Q:i,C=A.slice(g-i,g-i+I);new Uint8Array(this.buffers[t].buffer,this.buffers[t].byteOffset+Q,I).set(C),i-=I,t++,Q=0}}}function KA(A,I,g,C){return async function(t){const Q=Math.floor(t.byteLength/g);if(Q*g!==t.byteLength)throw new Error("Invalid buffer size");const i=Math.floor(Q/A.concurrency),B=[];for(let E=0;E=0;A--)this.w[A]=this.square(this.w[A+1]);if(!this.eq(this.w[0],this.one))throw new Error("Error calculating roots of unity");this.batchToMontgomery=KA(A,I+"_batchToMontgomery",this.n8,this.n8),this.batchFromMontgomery=KA(A,I+"_batchFromMontgomery",this.n8,this.n8)}op2(A,I,g){return this.tm.setBuff(this.pOp1,I),this.tm.setBuff(this.pOp2,g),this.tm.instance.exports[this.prefix+A](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op2Bool(A,I,g){return this.tm.setBuff(this.pOp1,I),this.tm.setBuff(this.pOp2,g),!!this.tm.instance.exports[this.prefix+A](this.pOp1,this.pOp2)}op1(A,I){return this.tm.setBuff(this.pOp1,I),this.tm.instance.exports[this.prefix+A](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op1Bool(A,I){return this.tm.setBuff(this.pOp1,I),!!this.tm.instance.exports[this.prefix+A](this.pOp1,this.pOp3)}add(A,I){return this.op2("_add",A,I)}eq(A,I){return this.op2Bool("_eq",A,I)}isZero(A){return this.op1Bool("_isZero",A)}sub(A,I){return this.op2("_sub",A,I)}neg(A){return this.op1("_neg",A)}inv(A){return this.op1("_inverse",A)}toMontgomery(A){return this.op1("_toMontgomery",A)}fromMontgomery(A){return this.op1("_fromMontgomery",A)}mul(A,I){return this.op2("_mul",A,I)}div(A,I){return this.tm.setBuff(this.pOp1,A),this.tm.setBuff(this.pOp2,I),this.tm.instance.exports[this.prefix+"_inverse"](this.pOp2,this.pOp2),this.tm.instance.exports[this.prefix+"_mul"](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}square(A){return this.op1("_square",A)}isSquare(A){return this.op1Bool("_isSquare",A)}sqrt(A){return this.op1("_sqrt",A)}exp(A,I){return I instanceof Uint8Array||(I=G(m(I))),this.tm.setBuff(this.pOp1,A),this.tm.setBuff(this.pOp2,I),this.tm.instance.exports[this.prefix+"_exp"](this.pOp1,this.pOp2,I.byteLength,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}isNegative(A){return this.op1Bool("_isNegative",A)}e(A,I){if(A instanceof Uint8Array)return A;let g=m(A,I);k(g)?(g=K(g),CA(g,this.p)&&(g=$(g,this.p)),g=V(this.p,g)):CA(g,this.p)&&(g=$(g,this.p));const C=xA(g,this.n8);return this.toMontgomery(C)}toString(A,I){const g=this.fromMontgomery(A),C=F(g,0);return p(C,I)}fromRng(A){let I;const g=new Uint8Array(this.n8);do{I=H;for(let g=0;gC.buffer.byteLength){const t=C.buffer.byteLength/65536;let Q=Math.floor((g[0]+A)/65536)+1;Q>I&&(Q=I),C.grow(Q-t)}return t}function i(A){const I=Q(A.byteLength);return E(I,A),I}function B(A,I){const g=new Uint8Array(C.buffer);return new Uint8Array(g.buffer,g.byteOffset+A,I)}function E(A,I){new Uint8Array(C.buffer).set(new Uint8Array(I),A)}function e(A){if("INIT"==A[0].cmd)return t(A[0]);const I={vars:[],out:[]},e=new Uint32Array(C.buffer,0,1)[0];for(let C=0;C{this.reject=I,this.resolve=A}))}}function II(A){for(var I=globalThis.atob(A),g=I.length,C=new Uint8Array(g),t=0;t0;A++)if(0==this.working[A]){const I=this.actionQueue.shift();this.postAction(A,I.data,I.transfers,I.deferred)}}queueAction(A,I){const g=new AI;if(this.singleThread){const I=this.taskManager(A);g.resolve(I)}else this.actionQueue.push({data:A,transfers:I,deferred:g}),this.processWorks();return g.promise}resetMemory(){this.u32[0]=this.initalPFree}allocBuff(A){const I=this.alloc(A.byteLength);return this.setBuff(I,A),I}getBuff(A,I){return this.u8.slice(A,A+I)}setBuff(A,I){this.u8.set(new Uint8Array(I),A)}alloc(A){for(;3&this.u32[0];)this.u32[0]++;const I=this.u32[0];return this.u32[0]+=A,I}async terminate(){for(let A=0;AsetTimeout(I,A))))}}function QI(A,I){const g=A[I],C=A.Fr,t=A.tm;A[I].batchApplyKey=async function(A,Q,i,B,E){let e,n,a,o,r;if(B=B||"affine",E=E||"affine","G1"==I)"jacobian"==B?(a=3*g.F.n8,e="g1m_batchApplyKey"):(a=2*g.F.n8,e="g1m_batchApplyKeyMixed"),o=3*g.F.n8,"jacobian"==E?r=3*g.F.n8:(n="g1m_batchToAffine",r=2*g.F.n8);else if("G2"==I)"jacobian"==B?(a=3*g.F.n8,e="g2m_batchApplyKey"):(a=2*g.F.n8,e="g2m_batchApplyKeyMixed"),o=3*g.F.n8,"jacobian"==E?r=3*g.F.n8:(n="g2m_batchToAffine",r=2*g.F.n8);else{if("Fr"!=I)throw new Error("Invalid group: "+I);e="frm_batchApplyKey",a=g.n8,o=g.n8,r=g.n8}const h=Math.floor(A.byteLength/a),s=Math.floor(h/t.concurrency),w=[];i=C.e(i);let f=C.e(Q);for(let I=0;I=0;A--){if(!g.isZero(s))for(let A=0;Ae&&(s=e),s<1024&&(s=1024);const w=[];for(let I=0;I(B&&B.debug(`Multiexp end: ${E}: ${I}/${a}`),A))))}const f=await Promise.all(w);let D=g.zero;for(let A=f.length-1;A>=0;A--)D=g.add(D,f[A]);return D}g.multiExp=async function(A,I,g,C){return await Q(A,I,"jacobian",g,C)},g.multiExpAffine=async function(A,I,g,C){return await Q(A,I,"affine",g,C)}}function EI(A,I){const g=A[I],C=A.Fr,t=g.tm;async function Q(B,E,e,n,a,o){e=e||"affine",n=n||"affine";let r,h,s,w,f,D,c,y;"G1"==I?("affine"==e?(r=2*g.F.n8,w="g1m_batchToJacobian"):r=3*g.F.n8,h=3*g.F.n8,E&&(y="g1m_fftFinal"),c="g1m_fftJoin",D="g1m_fftMix","affine"==n?(s=2*g.F.n8,f="g1m_batchToAffine"):s=3*g.F.n8):"G2"==I?("affine"==e?(r=2*g.F.n8,w="g2m_batchToJacobian"):r=3*g.F.n8,h=3*g.F.n8,E&&(y="g2m_fftFinal"),c="g2m_fftJoin",D="g2m_fftMix","affine"==n?(s=2*g.F.n8,f="g2m_batchToAffine"):s=3*g.F.n8):"Fr"==I&&(r=g.n8,h=g.n8,s=g.n8,E&&(y="frm_fftFinal"),D="frm_fftMix",c="frm_fftJoin");let u=!1;Array.isArray(B)?(B=A.array2buffer(B,r),u=!0):B=B.slice(0,B.byteLength);const l=B.byteLength/r,F=NA(l);if(1<1<<28?new VA(2*a[0].byteLength):new Uint8Array(2*a[0].byteLength);return o.set(a[0]),o.set(a[1],a[0].byteLength),o}(B,e,n,a,o):await async function(A,I,g,t,B){let E,e;E=A.slice(0,A.byteLength/2),e=A.slice(A.byteLength/2,A.byteLength);const n=[];[E,e]=await i(E,e,"fftJoinExt",C.one,C.shift,I,"jacobian",t,B),n.push(Q(E,!1,"jacobian",g,t,B)),n.push(Q(e,!1,"jacobian",g,t,B));const a=await Promise.all(n);let o;o=a[0].byteLength>1<<28?new VA(2*a[0].byteLength):new Uint8Array(2*a[0].byteLength);return o.set(a[0]),o.set(a[1],a[0].byteLength),o}(B,e,n,a,o),u?A.buffer2array(I,s):I}let M,p,G;E&&(M=C.inv(C.e(l))),SA(B,r);let H=Math.min(16384,l),d=l/H;for(;d=16;)d*=2,H/=2;const U=NA(H),m=[];for(let A=0;A(a&&a.debug(`${o}: fft ${F} mix end: ${A}/${d}`),I))))}G=await Promise.all(m);for(let A=0;A(a&&a.debug(`${o}: fft ${F} join ${A}/${F} ${i+1}/${I} ${B}/${g/2}`),C))))}const i=await Promise.all(Q);for(let A=0;A0;I--)p.set(G[I],A),A+=H*s,delete G[I];p.set(G[0].slice(0,(H-1)*s),A),delete G[0]}else for(let A=0;A65536&&(y=65536);const u=[];for(let I=0;I(a&&a.debug(`${o}: fftJoinExt End: ${I}/${c}`),A))))}const l=await Promise.all(u);let F,M;c*w>1<<28?(F=new VA(c*w),M=new VA(c*w)):(F=new Uint8Array(c*w),M=new Uint8Array(c*w));let p=0;for(let A=0;AC.s+1)throw E&&E.error("lagrangeEvaluations input too big"),new Error("lagrangeEvaluations input too big");let r=A.slice(0,A.byteLength/2),h=A.slice(A.byteLength/2,A.byteLength);const s=C.exp(C.shift,a/2),w=C.inv(C.sub(C.one,s));[r,h]=await i(r,h,"prepareLagrangeEvaluation",w,C.shiftInv,t,"jacobian",E,e+" prep");const f=[];let D;return f.push(Q(r,!0,"jacobian",B,E,e+" t0")),f.push(Q(h,!0,"jacobian",B,E,e+" t1")),[r,h]=await Promise.all(f),D=r.byteLength>1<<28?new VA(2*r.byteLength):new Uint8Array(2*r.byteLength),D.set(r),D.set(h,r.byteLength),D},g.fftMix=async function(A){const Q=3*g.F.n8;let i,B;if("G1"==I)i="g1m_fftMix",B="g1m_fftJoin";else if("G2"==I)i="g2m_fftMix",B="g2m_fftJoin";else{if("Fr"!=I)throw new Error("Invalid group");i="frm_fftMix",B="frm_fftJoin"}const E=Math.floor(A.byteLength/Q),e=NA(E);let n=1<=0;A--)r.set(o[A][0],h),h+=o[A][0].byteLength;return r}}async function eI(A){const I=await async function(A,I){const g=new tI;g.memory=new WebAssembly.Memory({initial:25}),g.u8=new Uint8Array(g.memory.buffer),g.u32=new Uint32Array(g.memory.buffer);const C=await WebAssembly.compile(II(A.code));if(g.instance=await WebAssembly.instantiate(C,{env:{memory:g.memory}}),g.singleThread=I,g.initalPFree=g.u32[0],g.pq=A.pq,g.pr=A.pr,g.pG1gen=A.pG1gen,g.pG1zero=A.pG1zero,g.pG2gen=A.pG2gen,g.pG2zero=A.pG2zero,g.pOneT=A.pOneT,I)g.code=II(A.code),g.taskManager=TA(),await g.taskManager([{cmd:"INIT",init:25,code:g.code.slice()}]),g.concurrency=1;else{let I;g.workers=[],g.pendingDeferreds=[],g.working=[],I="object"==typeof navigator&&navigator.hardwareConcurrency?navigator.hardwareConcurrency:_A.cpus().length,I>64&&(I=64),g.concurrency=I;for(let A=0;A{I.pendingLoads.push({page:A,resolve:g,reject:C})}));return I.__statusPage("After Load request: ",A),g}__statusPage(A,I){const g=[],C=this;if(!C.logHistory)return;g.push("=="+A+" "+I);let t="";for(let A=0;A "+I.history[A][g][C])}_triggerLoad(){const A=this;if(A.reading)return;if(0==A.pendingLoads.length)return;const I=Object.keys(A.pages),g=[];for(let C=0;C0&&(void 0!==A.pages[A.pendingLoads[0].page]||C>0||g.length>0);){const I=A.pendingLoads.shift();if(void 0!==A.pages[I.page]){A.pages[I.page].pendingOps++;const C=g.indexOf(I.page);C>=0&&g.splice(C,1),A.pages[I.page].loading?A.pages[I.page].loading.push(I):I.resolve(),A.__statusPage("After Load (cached): ",I.page)}else{if(C)C--;else{const I=g.shift();A.__statusPage("Before Unload: ",I),A.avBuffs.unshift(A.pages[I]),delete A.pages[I],A.__statusPage("After Unload: ",I)}I.page>=A.totalPages?(A.pages[I.page]=Q(),I.resolve(),A.__statusPage("After Load (new): ",I.page)):(A.reading=!0,A.pages[I.page]=Q(),A.pages[I.page].loading=[I],t.push(A.fd.read(A.pages[I.page].buff,0,A.pageSize,I.page*A.pageSize).then((g=>{A.pages[I.page].size=g.bytesRead;const C=A.pages[I.page].loading;delete A.pages[I.page].loading;for(let A=0;A{I.reject(A)}))),A.__statusPage("After Load (loading): ",I.page))}}function Q(){if(A.avBuffs.length>0){const I=A.avBuffs.shift();return I.dirty=!1,I.pendingOps=1,I.size=0,I}return{dirty:!1,buff:new Uint8Array(A.pageSize),pendingOps:1,size:0}}Promise.all(t).then((()=>{A.reading=!1,A.pendingLoads.length>0&&setImmediate(A._triggerLoad.bind(A)),A._tryClose()}))}_triggerWrite(){const A=this;if(A.writing)return;const I=Object.keys(A.pages),g=[];for(let C=0;C{t.writing=!1}),(I=>{console.log("ERROR Writing: "+I),A.error=I,A._tryClose()}))))}A.writing&&Promise.all(g).then((()=>{A.writing=!1,setImmediate(A._triggerWrite.bind(A)),A._tryClose(),A.pendingLoads.length>0&&setImmediate(A._triggerLoad.bind(A))}))}_getDirtyPage(){for(let A in this.pages)if(this.pages[A].dirty)return A;return-1}async write(A,I){if(0==A.byteLength)return;const g=this;if(void 0===I&&(I=g.pos),g.pos=I+A.byteLength,g.totalSize0;){await Q[i-C];const I=B+E>g.pageSize?g.pageSize-B:E,t=A.slice(A.byteLength-E,A.byteLength-E+I);new Uint8Array(g.pages[i].buff.buffer,B,I).set(t),g.pages[i].dirty=!0,g.pages[i].pendingOps--,g.pages[i].size=Math.max(B+I,g.pages[i].size),i>=g.totalPages&&(g.totalPages=i+1),E-=I,i++,B=0,g.writing||setImmediate(g._triggerWrite.bind(g))}}async read(A,I){let g=new Uint8Array(A);return await this.readToBuffer(g,0,A,I),g}async readToBuffer(A,I,g,C){if(0==g)return;const t=this;if(g>t.pageSize*t.maxPagesLoaded*.8){const A=Math.floor(1.1*g);this.maxPagesLoaded=Math.floor(A/t.pageSize)+1}if(void 0===C&&(C=t.pos),t.pos=C+g,t.pendingClose)throw new Error("Reading a closing file");const Q=Math.floor(C/t.pageSize),i=Math.floor((C+g-1)/t.pageSize),B=[];for(let A=Q;A<=i;A++)B.push(t._loadPage(A));t._triggerLoad();let E=Q,e=C%t.pageSize,n=C+g>t.totalSize?g-(C+g-t.totalSize):g;for(;n>0;){await B[E-Q],t.__statusPage("After Await (read): ",E);const C=e+n>t.pageSize?t.pageSize-e:n,i=new Uint8Array(t.pages[E].buff.buffer,t.pages[E].buff.byteOffset+e,C);A.set(i,I+g-n),t.pages[E].pendingOps--,t.__statusPage("After Op done: ",E),n-=C,E++,e=0,t.pendingLoads.length>0&&setImmediate(t._triggerLoad.bind(t))}this.pos=C+g}_tryClose(){const A=this;if(!A.pendingClose)return;A.error&&A.pendingCloseReject(A.error);A._getDirtyPage()>=0||A.writing||A.reading||A.pendingLoads.length>0||A.pendingClose()}close(){const A=this;if(A.pendingClose)throw new Error("Closing the file twice");return new Promise(((I,g)=>{A.pendingClose=I,A.pendingCloseReject=g,A._tryClose()})).then((()=>{A.fd.close()}),(I=>{throw A.fd.close(),I}))}async discard(){await this.close(),await wI.promises.unlink(this.fileName)}async writeULE32(A,I){const g=new Uint8Array(4);new DataView(g.buffer).setUint32(0,A,!0),await this.write(g,I)}async writeUBE32(A,I){const g=new Uint8Array(4);new DataView(g.buffer).setUint32(0,A,!1),await this.write(g,I)}async writeULE64(A,I){const g=new Uint8Array(8),C=new DataView(g.buffer);C.setUint32(0,4294967295&A,!0),C.setUint32(4,Math.floor(A/4294967296),!0),await this.write(g,I)}async readULE32(A){const I=await this.read(4,A);return new Uint32Array(I.buffer)[0]}async readUBE32(A){const I=await this.read(4,A);return new DataView(I.buffer).getUint32(0,!1)}async readULE64(A){const I=await this.read(8,A),g=new Uint32Array(I.buffer);return 4294967296*g[1]+g[0]}}const cI=new Uint8Array(4),yI=new DataView(cI.buffer),uI=new Uint8Array(8),lI=new DataView(uI.buffer);class FI{constructor(){this.pageSize=16384}_resizeIfNeeded(A){if(A>this.allocSize){const I=Math.max(this.allocSize+(1<<20),Math.floor(1.1*this.allocSize),A),g=new Uint8Array(I);g.set(this.o.data),this.o.data=g,this.allocSize=I}}async write(A,I){if(void 0===I&&(I=this.pos),this.readOnly)throw new Error("Writing a read only file");this._resizeIfNeeded(I+A.byteLength),this.o.data.set(A.slice(),I),I+A.byteLength>this.totalSize&&(this.totalSize=I+A.byteLength),this.pos=I+A.byteLength}async readToBuffer(A,I,g,C){if(void 0===C&&(C=this.pos),this.readOnly&&C+g>this.totalSize)throw new Error("Reading out of bounds");this._resizeIfNeeded(C+g);const t=new Uint8Array(this.o.data.buffer,this.o.data.byteOffset+C,g);A.set(t,I),this.pos=C+g}async read(A,I){const g=new Uint8Array(A);return await this.readToBuffer(g,0,A,I),g}close(){this.o.data.byteLength!=this.totalSize&&(this.o.data=this.o.data.slice(0,this.totalSize))}async discard(){}async writeULE32(A,I){yI.setUint32(0,A,!0),await this.write(cI,I)}async writeUBE32(A,I){yI.setUint32(0,A,!1),await this.write(cI,I)}async writeULE64(A,I){lI.setUint32(0,4294967295&A,!0),lI.setUint32(4,Math.floor(A/4294967296),!0),await this.write(uI,I)}async readULE32(A){const I=await this.read(4,A);return new Uint32Array(I.buffer)[0]}async readUBE32(A){const I=await this.read(4,A);return new DataView(I.buffer).getUint32(0,!1)}async readULE64(A){const I=await this.read(8,A),g=new Uint32Array(I.buffer);return 4294967296*g[1]+g[0]}}const MI=1<<22;const pI=new Uint8Array(4),GI=new DataView(pI.buffer),HI=new Uint8Array(8),dI=new DataView(HI.buffer);class UI{constructor(){this.pageSize=16384}_resizeIfNeeded(A){if(A<=this.totalSize)return;if(this.readOnly)throw new Error("Reading out of file bounds");const I=Math.floor((A-1)/MI)+1;for(let g=Math.max(this.o.data.length-1,0);g0;){const I=t+Q>MI?MI-t:Q,i=A.slice(A.byteLength-Q,A.byteLength-Q+I);new Uint8Array(g.o.data[C].buffer,t,I).set(i),Q-=I,C++,t=0}this.pos=I+A.byteLength}async readToBuffer(A,I,g,C){const t=this;if(void 0===C&&(C=t.pos),this.readOnly&&C+g>this.totalSize)throw new Error("Reading out of bounds");this._resizeIfNeeded(C+g);let Q=Math.floor(C/MI),i=C%MI,B=g;for(;B>0;){const C=i+B>MI?MI-i:B,E=new Uint8Array(t.o.data[Q].buffer,i,C);A.set(E,I+g-B),B-=C,Q++,i=0}this.pos=C+g}async read(A,I){const g=new Uint8Array(A);return await this.readToBuffer(g,0,A,I),g}close(){}async discard(){}async writeULE32(A,I){GI.setUint32(0,A,!0),await this.write(pI,I)}async writeUBE32(A,I){GI.setUint32(0,A,!1),await this.write(pI,I)}async writeULE64(A,I){dI.setUint32(0,4294967295&A,!0),dI.setUint32(4,Math.floor(A/4294967296),!0),await this.write(HI,I)}async readULE32(A){const I=await this.read(4,A);return new Uint32Array(I.buffer)[0]}async readUBE32(A){const I=await this.read(4,A);return new DataView(I.buffer).getUint32(0,!1)}async readULE64(A){const I=await this.read(8,A),g=new Uint32Array(I.buffer);return 4294967296*g[1]+g[0]}}async function mI(A,I,g){if("string"==typeof A&&(A={type:"file",fileName:A,cacheSize:I||65536,pageSize:g||8192}),"file"==A.type)return await fI(A.fileName,"w+",A.cacheSize,A.pageSize);if("mem"==A.type)return function(A){const I=A.initialSize||1<<20,g=new FI;return g.o=A,g.o.data=new Uint8Array(I),g.allocSize=I,g.totalSize=0,g.readOnly=!1,g.pos=0,g}(A);if("bigMem"==A.type)return function(A){const I=A.initialSize||0,g=new UI;g.o=A;const C=I?Math.floor((I-1)/MI)+1:0;g.o.data=[];for(let A=0;Ag)throw new Error("Version not supported");const E=await Q.readULE32();let e=[];for(let A=0;A1)throw new Error(A.fileName+": Section Duplicated "+g);A.pos=I[g][0].p,A.readingSection=I[g][0]}async function RI(A,I){if(void 0===A.readingSection)throw new Error("Not reading a section");if(!I&&A.pos-A.readingSection.p!=A.readingSection.size)throw new Error("Invalid section size reading");delete A.readingSection}async function vI(A,I,g,C){const t=new Uint8Array(g);hI.toRprLE(t,0,I,g),await A.write(t,C)}async function YI(A,I,g){const C=await A.read(I,g);return hI.fromRprLE(C,0,I)}async function PI(A,I,g,C,t){void 0===t&&(t=I[C][0].size);const Q=A.pageSize;await SI(A,I,C),await JI(g,C);for(let I=0;II[g][0].size)throw new Error("Reading out of the range of the section");let Q;return Q=t<1<<30?new Uint8Array(t):new VA(t),await A.readToBuffer(Q,0,t,I[g][0].p+C),Q}async function xI(A,I,g,C,t){const Q=16*A.pageSize;if(await SI(A,I,t),await SI(g,C,t),I[t][0].size!=C[t][0].size)return!1;const i=I[t][0].size;for(let I=0;I=0)I=await nI();else{if(!(["BLS12381"].indexOf(g)>=0))throw new Error(`Curve not supported: ${A}`);I=await aI()}return I}var OI=function A(I,g){if(!I){var C=new WI(g);throw Error.captureStackTrace&&Error.captureStackTrace(C,A),C}};class WI extends Error{}WI.prototype.name="AssertionError";var jI=zI;function zI(A){if(!zI.supported)return null;var I,g=A&&A.imports,C=(I="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","function"==typeof atob?new Uint8Array(atob(I).split("").map(TI)):function(A){throw new Error('Could not dynamically require "'+A+'". Please configure the dynamicRequireTargets option of @rollup/plugin-commonjs appropriately for this require call to behave properly.')}("buffer").Buffer.from(I,"base64")),t=null,Q={buffer:C,memory:null,exports:null,realloc:function(A){Q.exports.memory.grow(Math.max(0,Math.ceil(Math.abs(A-Q.memory.length)/65536))),Q.memory=new Uint8Array(Q.exports.memory.buffer)},onload:i};return i((function(){})),Q;function i(I){if(Q.exports)return I();if(t)t.then(I.bind(null,null)).catch(I);else{try{if(A&&A.async)throw new Error("async");B({instance:new WebAssembly.Instance(new WebAssembly.Module(C),g)})}catch(A){t=WebAssembly.instantiate(C,g).then(B)}i(I)}}function B(A){Q.exports=A.instance.exports,Q.memory=Q.exports.memory&&Q.exports.memory.buffer&&new Uint8Array(Q.exports.memory.buffer)}}function TI(A){return A.charCodeAt(0)}zI.supported="undefined"!=typeof WebAssembly;var _I=n((function(A){var I=jI(),g=64,C=[];A.exports=n;var t=A.exports.BYTES_MIN=16,Q=A.exports.BYTES_MAX=64,i=(A.exports.BYTES=32,A.exports.KEYBYTES_MIN=16),B=A.exports.KEYBYTES_MAX=64,E=(A.exports.KEYBYTES=32,A.exports.SALTBYTES=16),e=A.exports.PERSONALBYTES=16;function n(A,a,o,r,h){if(!(this instanceof n))return new n(A,a,o,r,h);if(!I||!I.exports)throw new Error("WASM not loaded. Wait for Blake2b.ready(cb)");A||(A=32),!0!==h&&(OI(A>=t,"digestLength must be at least "+t+", was given "+A),OI(A<=Q,"digestLength must be at most "+Q+", was given "+A),null!=a&&(OI(a instanceof Uint8Array,"key must be Uint8Array or Buffer"),OI(a.length>=i,"key must be at least "+i+", was given "+a.length),OI(a.length<=B,"key must be at least "+B+", was given "+a.length)),null!=o&&(OI(o instanceof Uint8Array,"salt must be Uint8Array or Buffer"),OI(o.length===E,"salt must be exactly "+E+", was given "+o.length)),null!=r&&(OI(r instanceof Uint8Array,"personal must be Uint8Array or Buffer"),OI(r.length===e,"personal must be exactly "+e+", was given "+r.length))),C.length||(C.push(g),g+=216),this.digestLength=A,this.finalized=!1,this.pointer=C.pop(),I.memory.fill(0,0,64),I.memory[0]=this.digestLength,I.memory[1]=a?a.length:0,I.memory[2]=1,I.memory[3]=1,o&&I.memory.set(o,32),r&&I.memory.set(r,48),this.pointer+216>I.memory.length&&I.realloc(this.pointer+216),I.exports.blake2b_init(this.pointer,this.digestLength),a&&(this.update(a),I.memory.fill(0,g,g+a.length),I.memory[this.pointer+200]=128)}function a(){}function o(A){return A<16?"0"+A.toString(16):A.toString(16)}n.prototype.update=function(A){return OI(!1===this.finalized,"Hash instance finalized"),OI(A instanceof Uint8Array,"input must be Uint8Array or Buffer"),g+A.length>I.memory.length&&I.realloc(g+A.length),I.memory.set(A,g),I.exports.blake2b_update(this.pointer,g,g+A.length),this},n.prototype.digest=function(A){if(OI(!1===this.finalized,"Hash instance finalized"),this.finalized=!0,C.push(this.pointer),I.exports.blake2b_final(this.pointer),!A||"binary"===A)return I.memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if("hex"===A)return function(A,I,g){for(var C="",t=0;t=this.digestLength,"input must be Uint8Array or Buffer");for(var g=0;g>=1;return g}function Ig(A){return(0!=(4294901760&A)?(A&=4294901760,16):0)|(0!=(4278255360&A)?(A&=4278255360,8):0)|(0!=(4042322160&A)?(A&=4042322160,4):0)|(0!=(3435973836&A)?(A&=3435973836,2):0)|0!=(2863311530&A)}function gg(A,I){const g=new DataView(A.buffer,A.byteOffset,A.byteLength);let C="";for(let A=0;A<4;A++){A>0&&(C+="\n"),C+="\t\t";for(let I=0;I<4;I++)I>0&&(C+=" "),C+=g.getUint32(16*A+4*I).toString(16).padStart(8,"0")}return I&&(C=I+"\n"+C),C}function Cg(A,I){if(A.byteLength!=I.byteLength)return!1;for(var g=new Int8Array(A),C=new Int8Array(I),t=0;t!=A.byteLength;t++)if(g[t]!=C[t])return!1;return!0}function tg(A){const I=A.getPartialHash(),g=_I(64);return g.setPartialHash(I),g}async function Qg(A,I,g,C,t){if(A.G1.isZero(I))return!1;if(A.G1.isZero(g))return!1;if(A.G2.isZero(C))return!1;if(A.G2.isZero(t))return!1;return await A.pairingEq(I,t,A.G1.neg(g),C)}async function ig(A){for(;!A;)A=await window.prompt("Enter a random text. (Entropy): ","");const I=_I(64);I.update(cA.randomBytes(64));const g=new TextEncoder;I.update(g.encode(A));const C=Buffer.from(I.digest()),t=[];for(let A=0;A<8;A++)t[A]=C.readUInt32BE(4*A);return new DA(t)}function Bg(A,I){let g,C;I<32?(g=1<>>0,C=1):(g=4294967296,C=1<>>0);let t=A;for(let A=0;A0){const I=new Uint8Array(C);await A.writeULE32(I.byteLength),await A.write(I)}else await A.writeULE32(0)}async function cg(A,I,g){await JI(A,10),await A.write(g.csHash),await A.writeULE32(g.contributions.length);for(let C=0;C /\\../\\",r=52,h={32:{offset:0},64:{offset:[0,0,0,0]},128:{offset:[0,0,0,0,0,0,0,0]},256:{offset:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},512:{offset:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]},1024:{offset:[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}};for(A=0;A<256;A++)E[A]=(A>>4&15).toString(16)+(15&A).toString(16);function s(A,I){var g,C,t,Q=[0],i="";for(C=0;C0;)Q.push(g%I),g=g/I|0}for(C=Q.length-1;C>=0;--C)i+="0123456789abcdefghijklmnopqrstuvwxyz"[Q[C]];return i}function w(A,I){return{bits:I,value:A,dec:function(){return s(A,10)},hex:function(){return A},str:function(){return s(A,36)}}}function f(A,I){return{bits:I,value:A,dec:function(){return A.toString()},hex:function(){return E[A>>>24]+E[A>>>16&255]+E[A>>>8&255]+E[255&A]},str:function(){return A.toString(36)}}}function D(A,I){return{bits:I,value:A,dec:function(){return A.toString()},hex:function(){return("0000000000000000"+A.toString(16)).substr(-13)},str:function(){return A.toString(36)}}}function c(A,E){var e="object"==typeof A?JSON.stringify(A):A;switch(E||r){case 32:return I(e);case 64:return C(e);case 128:return t(e);case 256:return Q(e);case 512:return i(e);case 1024:return B(e);default:return g(e)}}function y(A){if("1a"===A)n=A,I=a?p:F,g=a?U:H,C=a?k:L,t=a?R:N,Q=a?q:Y,i=a?V:X,B=a?j:O;else{if("1"!==A)throw new Error("Supported FNV versions: 1, 1a");n=A,I=a?G:M,g=a?m:d,C=a?J:b,t=a?v:S,Q=a?x:P,i=a?K:Z,B=a?z:W}}function u(A){A?(a=!0,I="1a"==n?p:G,g="1a"==n?U:m,C="1a"==n?k:J,t="1a"==n?R:v,Q="1a"==n?q:x,i="1a"==n?V:K,B="1a"==n?j:z):(a=!1,I="1a"==n?F:M,g="1a"==n?H:d,C="1a"==n?L:b,t="1a"==n?N:S,Q="1a"==n?Y:P,i="1a"==n?X:Z,B="1a"==n?O:W)}function l(A){var I,g,C=n;for(var t in(A=A||0===A?A:o)===o&&y("1"),h){for(h[t].offset=[],g=0;g>>16)&65535),i+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),i+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),B=(i+=(Q^=A.charCodeAt(I++))<<8)+((t=403*Q)>>>16)&65535,Q=65535&t;for(;I>>16)&65535,Q=65535&t;return f((B<<16>>>0)+Q,32)}function M(A){var I,g=A.length-3,C=h[32].offset,t=0,Q=0|C[1],i=0,B=0|C[0];for(I=0;I>>16)&65535),i+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),i+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),B=(i+=(Q^=A.charCodeAt(I++))<<8)+((t=403*Q)>>>16)&65535,Q=65535&t,Q^=A.charCodeAt(I++);for(;I>>16)&65535,Q=65535&t,Q^=A.charCodeAt(I++);return f((B<<16>>>0)+Q,32)}function p(A){var I,g,C=A.length,t=h[32].offset,Q=0,i=0|t[1],B=0,E=0|t[0];for(g=0;g>6|192)<<8)+((Q=403*i)>>>16)&65535,i=65535&Q,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,i=65535&(Q=403*i),B=403*(E=B+(Q>>>16)&65535),B+=(i^=I>>12&63|128)<<8,i=65535&(Q=403*i),B=403*(E=B+(Q>>>16)&65535),E=(B+=(i^=I>>6&63|128)<<8)+((Q=403*i)>>>16)&65535,i=65535&Q,i^=63&I|128):(B=403*E,B+=(i^=I>>12|224)<<8,i=65535&(Q=403*i),B=403*(E=B+(Q>>>16)&65535),E=(B+=(i^=I>>6&63|128)<<8)+((Q=403*i)>>>16)&65535,i=65535&Q,i^=63&I|128),B=403*E,E=(B+=i<<8)+((Q=403*i)>>>16)&65535,i=65535&Q;return f((E<<16>>>0)+i,32)}function G(A){var I,g,C=A.length,t=h[32].offset,Q=0,i=0|t[1],B=0,E=0|t[0];for(g=0;g>>16)&65535,i=65535&Q,(I=A.charCodeAt(g))<128?i^=I:I<2048?(B=403*E,E=(B+=(i^=I>>6|192)<<8)+((Q=403*i)>>>16)&65535,i=65535&Q,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,i=65535&(Q=403*i),B=403*(E=B+(Q>>>16)&65535),B+=(i^=I>>12&63|128)<<8,i=65535&(Q=403*i),B=403*(E=B+(Q>>>16)&65535),E=(B+=(i^=I>>6&63|128)<<8)+((Q=403*i)>>>16)&65535,i=65535&Q,i^=63&I|128):(B=403*E,B+=(i^=I>>12|224)<<8,i=65535&(Q=403*i),B=403*(E=B+(Q>>>16)&65535),E=(B+=(i^=I>>6&63|128)<<8)+((Q=403*i)>>>16)&65535,i=65535&Q,i^=63&I|128);return f((E<<16>>>0)+i,32)}function H(A){var I,g=A.length-3,C=h[64].offset,t=0,Q=0|C[3],i=0,B=0|C[2],E=0,e=0|C[1],n=0,a=0|C[0];for(I=0;I>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),E=435*(e=65535&E),n=435*a,E+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=435*Q),a=(n+=B<<8)+((E+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),E=435*(e=65535&E),n=435*a,E+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=435*Q),a=(n+=B<<8)+((E+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),E=435*(e=65535&E),n=435*a,E+=(Q^=A.charCodeAt(I++))<<8,n+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),a=n+((E+=i>>>16)>>>16)&65535,e=65535&E;for(;I>>16),a=n+((E+=i>>>16)>>>16)&65535,e=65535&E;return D(281474976710656*(15&a)+4294967296*e+65536*B+(Q^a>>4),52)}function d(A){var I,g=A.length-3,C=h[64].offset,t=0,Q=0|C[3],i=0,B=0|C[2],E=0,e=0|C[1],n=0,a=0|C[0];for(I=0;I>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),E=435*(e=65535&E),n=435*a,E+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=435*Q),a=(n+=B<<8)+((E+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),E=435*(e=65535&E),n=435*a,E+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=435*Q),a=(n+=B<<8)+((E+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),E=435*(e=65535&E),n=435*a,E+=(Q^=A.charCodeAt(I++))<<8,n+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),a=n+((E+=i>>>16)>>>16)&65535,e=65535&E,Q^=A.charCodeAt(I++);for(;I>>16),a=n+((E+=i>>>16)>>>16)&65535,e=65535&E,Q^=A.charCodeAt(I++);return D(281474976710656*(15&a)+4294967296*e+65536*B+(Q^a>>4),52)}function U(A){var I,g,C=A.length,t=h[64].offset,Q=0,i=0|t[3],B=0,E=0|t[2],e=0,n=0|t[1],a=0,o=0|t[0];for(g=0;g>6|192)<<8,a+=E<<8,i=65535&(Q=435*i),E=65535&(B+=Q>>>16),o=a+((e+=B>>>16)>>>16)&65535,n=65535&e,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,i=65535&(Q=435*i),o=(a+=E<<8)+((e+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(E=65535&B),e=435*(n=65535&e),a=435*o,e+=(i^=I>>12&63|128)<<8,i=65535&(Q=435*i),o=(a+=E<<8)+((e+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(E=65535&B),e=435*(n=65535&e),a=435*o,e+=(i^=I>>6&63|128)<<8,a+=E<<8,i=65535&(Q=435*i),E=65535&(B+=Q>>>16),o=a+((e+=B>>>16)>>>16)&65535,n=65535&e,i^=63&I|128):(B=435*E,e=435*n,a=435*o,e+=(i^=I>>12|224)<<8,i=65535&(Q=435*i),o=(a+=E<<8)+((e+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(E=65535&B),e=435*(n=65535&e),a=435*o,e+=(i^=I>>6&63|128)<<8,a+=E<<8,i=65535&(Q=435*i),E=65535&(B+=Q>>>16),o=a+((e+=B>>>16)>>>16)&65535,n=65535&e,i^=63&I|128),B=435*E,e=435*n,a=435*o,e+=i<<8,a+=E<<8,i=65535&(Q=435*i),E=65535&(B+=Q>>>16),o=a+((e+=B>>>16)>>>16)&65535,n=65535&e;return D(281474976710656*(15&o)+4294967296*n+65536*E+(i^o>>4),52)}function m(A){var I,g,C=A.length,t=h[64].offset,Q=0,i=0|t[3],B=0,E=0|t[2],e=0,n=0|t[1],a=0,o=0|t[0];for(g=0;g>>16),o=a+((e+=B>>>16)>>>16)&65535,n=65535&e,(I=A.charCodeAt(g))<128?i^=I:I<2048?(B=435*E,e=435*n,a=435*o,e+=(i^=I>>6|192)<<8,a+=E<<8,i=65535&(Q=435*i),E=65535&(B+=Q>>>16),o=a+((e+=B>>>16)>>>16)&65535,n=65535&e,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,i=65535&(Q=435*i),o=(a+=E<<8)+((e+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(E=65535&B),e=435*(n=65535&e),a=435*o,e+=(i^=I>>12&63|128)<<8,i=65535&(Q=435*i),o=(a+=E<<8)+((e+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(E=65535&B),e=435*(n=65535&e),a=435*o,e+=(i^=I>>6&63|128)<<8,a+=E<<8,i=65535&(Q=435*i),E=65535&(B+=Q>>>16),o=a+((e+=B>>>16)>>>16)&65535,n=65535&e,i^=63&I|128):(B=435*E,e=435*n,a=435*o,e+=(i^=I>>12|224)<<8,i=65535&(Q=435*i),o=(a+=E<<8)+((e+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(E=65535&B),e=435*(n=65535&e),a=435*o,e+=(i^=I>>6&63|128)<<8,a+=E<<8,i=65535&(Q=435*i),E=65535&(B+=Q>>>16),o=a+((e+=B>>>16)>>>16)&65535,n=65535&e,i^=63&I|128);return D(281474976710656*(15&o)+4294967296*n+65536*E+(i^o>>4),52)}function L(A){var I,g=A.length-3,C=h[64].offset,t=0,Q=0|C[3],i=0,B=0|C[2],e=0,n=0|C[1],a=0,o=0|C[0];for(I=0;I>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),e=435*(n=65535&e),a=435*o,e+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=435*Q),o=(a+=B<<8)+((e+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),e=435*(n=65535&e),a=435*o,e+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=435*Q),o=(a+=B<<8)+((e+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),e=435*(n=65535&e),a=435*o,e+=(Q^=A.charCodeAt(I++))<<8,a+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),o=a+((e+=i>>>16)>>>16)&65535,n=65535&e;for(;I>>16),o=a+((e+=i>>>16)>>>16)&65535,n=65535&e;return w(E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],64)}function b(A){var I,g=A.length-3,C=h[64].offset,t=0,Q=0|C[3],i=0,B=0|C[2],e=0,n=0|C[1],a=0,o=0|C[0];for(I=0;I>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),e=435*(n=65535&e),a=435*o,e+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=435*Q),o=(a+=B<<8)+((e+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),e=435*(n=65535&e),a=435*o,e+=(Q^=A.charCodeAt(I++))<<8,Q=65535&(t=435*Q),o=(a+=B<<8)+((e+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),e=435*(n=65535&e),a=435*o,e+=(Q^=A.charCodeAt(I++))<<8,a+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),o=a+((e+=i>>>16)>>>16)&65535,n=65535&e,Q^=A.charCodeAt(I++);for(;I>>16),o=a+((e+=i>>>16)>>>16)&65535,n=65535&e,Q^=A.charCodeAt(I++);return w(E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],64)}function k(A){var I,g,C=A.length,t=h[64].offset,Q=0,i=0|t[3],B=0,e=0|t[2],n=0,a=0|t[1],o=0,r=0|t[0];for(g=0;g>6|192)<<8,o+=e<<8,i=65535&(Q=435*i),e=65535&(B+=Q>>>16),r=o+((n+=B>>>16)>>>16)&65535,a=65535&n,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,i=65535&(Q=435*i),r=(o+=e<<8)+((n+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(e=65535&B),n=435*(a=65535&n),o=435*r,n+=(i^=I>>12&63|128)<<8,i=65535&(Q=435*i),r=(o+=e<<8)+((n+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(e=65535&B),n=435*(a=65535&n),o=435*r,n+=(i^=I>>6&63|128)<<8,o+=e<<8,i=65535&(Q=435*i),e=65535&(B+=Q>>>16),r=o+((n+=B>>>16)>>>16)&65535,a=65535&n,i^=63&I|128):(B=435*e,n=435*a,o=435*r,n+=(i^=I>>12|224)<<8,i=65535&(Q=435*i),r=(o+=e<<8)+((n+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(e=65535&B),n=435*(a=65535&n),o=435*r,n+=(i^=I>>6&63|128)<<8,o+=e<<8,i=65535&(Q=435*i),e=65535&(B+=Q>>>16),r=o+((n+=B>>>16)>>>16)&65535,a=65535&n,i^=63&I|128),B=435*e,n=435*a,o=435*r,n+=i<<8,o+=e<<8,i=65535&(Q=435*i),e=65535&(B+=Q>>>16),r=o+((n+=B>>>16)>>>16)&65535,a=65535&n;return w(E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],64)}function J(A){var I,g,C=A.length,t=h[64].offset,Q=0,i=0|t[3],B=0,e=0|t[2],n=0,a=0|t[1],o=0,r=0|t[0];for(g=0;g>>16),r=o+((n+=B>>>16)>>>16)&65535,a=65535&n,(I=A.charCodeAt(g))<128?i^=I:I<2048?(B=435*e,n=435*a,o=435*r,n+=(i^=I>>6|192)<<8,o+=e<<8,i=65535&(Q=435*i),e=65535&(B+=Q>>>16),r=o+((n+=B>>>16)>>>16)&65535,a=65535&n,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,i=65535&(Q=435*i),r=(o+=e<<8)+((n+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(e=65535&B),n=435*(a=65535&n),o=435*r,n+=(i^=I>>12&63|128)<<8,i=65535&(Q=435*i),r=(o+=e<<8)+((n+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(e=65535&B),n=435*(a=65535&n),o=435*r,n+=(i^=I>>6&63|128)<<8,o+=e<<8,i=65535&(Q=435*i),e=65535&(B+=Q>>>16),r=o+((n+=B>>>16)>>>16)&65535,a=65535&n,i^=63&I|128):(B=435*e,n=435*a,o=435*r,n+=(i^=I>>12|224)<<8,i=65535&(Q=435*i),r=(o+=e<<8)+((n+=(B+=Q>>>16)>>>16)>>>16)&65535,B=435*(e=65535&B),n=435*(a=65535&n),o=435*r,n+=(i^=I>>6&63|128)<<8,o+=e<<8,i=65535&(Q=435*i),e=65535&(B+=Q>>>16),r=o+((n+=B>>>16)>>>16)&65535,a=65535&n,i^=63&I|128);return w(E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],64)}function N(A){var I,g=A.length-3,C=h[128].offset,t=0,Q=0|C[7],i=0,B=0|C[6],e=0,n=0|C[5],a=0,o=0|C[4],r=0,s=0|C[3],f=0,D=0|C[2],c=0,y=0|C[1],u=0,l=0|C[0];for(I=0;I>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=315*(B=65535&i),e=315*(n=65535&e),a=315*(o=65535&a),r=315*(s=65535&r),f=315*(D=65535&f),c=315*(y=65535&c),u=315*l,f+=(Q^=A.charCodeAt(I++))<<8,c+=B<<8,Q=65535&(t=315*Q),l=(u+=n<<8)+((c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=315*(B=65535&i),e=315*(n=65535&e),a=315*(o=65535&a),r=315*(s=65535&r),f=315*(D=65535&f),c=315*(y=65535&c),u=315*l,f+=(Q^=A.charCodeAt(I++))<<8,c+=B<<8,Q=65535&(t=315*Q),l=(u+=n<<8)+((c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=315*(B=65535&i),e=315*(n=65535&e),a=315*(o=65535&a),r=315*(s=65535&r),f=315*(D=65535&f),c=315*(y=65535&c),u=315*l,f+=(Q^=A.charCodeAt(I++))<<8,c+=B<<8,u+=n<<8,Q=65535&(t=315*Q),B=65535&(i+=t>>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),l=u+((c+=f>>>16)>>>16)&65535,y=65535&c;for(;I>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),l=u+((c+=f>>>16)>>>16)&65535,y=65535&c;return w(E[l>>8]+E[255&l]+E[y>>8]+E[255&y]+E[D>>8]+E[255&D]+E[s>>8]+E[255&s]+E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],128)}function S(A){var I,g=A.length-3,C=h[128].offset,t=0,Q=0|C[7],i=0,B=0|C[6],e=0,n=0|C[5],a=0,o=0|C[4],r=0,s=0|C[3],f=0,D=0|C[2],c=0,y=0|C[1],u=0,l=0|C[0];for(I=0;I>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=315*(B=65535&i),e=315*(n=65535&e),a=315*(o=65535&a),r=315*(s=65535&r),f=315*(D=65535&f),c=315*(y=65535&c),u=315*l,f+=(Q^=A.charCodeAt(I++))<<8,c+=B<<8,Q=65535&(t=315*Q),l=(u+=n<<8)+((c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=315*(B=65535&i),e=315*(n=65535&e),a=315*(o=65535&a),r=315*(s=65535&r),f=315*(D=65535&f),c=315*(y=65535&c),u=315*l,f+=(Q^=A.charCodeAt(I++))<<8,c+=B<<8,Q=65535&(t=315*Q),l=(u+=n<<8)+((c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=315*(B=65535&i),e=315*(n=65535&e),a=315*(o=65535&a),r=315*(s=65535&r),f=315*(D=65535&f),c=315*(y=65535&c),u=315*l,f+=(Q^=A.charCodeAt(I++))<<8,c+=B<<8,u+=n<<8,Q=65535&(t=315*Q),B=65535&(i+=t>>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),l=u+((c+=f>>>16)>>>16)&65535,y=65535&c,Q^=A.charCodeAt(I++);for(;I>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),l=u+((c+=f>>>16)>>>16)&65535,y=65535&c,Q^=A.charCodeAt(I++);return w(E[l>>8]+E[255&l]+E[y>>8]+E[255&y]+E[D>>8]+E[255&D]+E[s>>8]+E[255&s]+E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],128)}function R(A){var I,g,C=A.length,t=h[128].offset,Q=0,i=0|t[7],B=0,e=0|t[6],n=0,a=0|t[5],o=0,r=0|t[4],s=0,f=0|t[3],D=0,c=0|t[2],y=0,u=0|t[1],l=0,F=0|t[0];for(g=0;g>6|192)<<8,y+=e<<8,l+=a<<8,i=65535&(Q=315*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),F=l+((y+=D>>>16)>>>16)&65535,u=65535&y,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,y+=e<<8,i=65535&(Q=315*i),F=(l+=a<<8)+((y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=315*(e=65535&B),n=315*(a=65535&n),o=315*(r=65535&o),s=315*(f=65535&s),D=315*(c=65535&D),y=315*(u=65535&y),l=315*F,D+=(i^=I>>12&63|128)<<8,y+=e<<8,i=65535&(Q=315*i),F=(l+=a<<8)+((y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=315*(e=65535&B),n=315*(a=65535&n),o=315*(r=65535&o),s=315*(f=65535&s),D=315*(c=65535&D),y=315*(u=65535&y),l=315*F,D+=(i^=I>>6&63|128)<<8,y+=e<<8,l+=a<<8,i=65535&(Q=315*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),F=l+((y+=D>>>16)>>>16)&65535,u=65535&y,i^=63&I|128):(B=315*e,n=315*a,o=315*r,s=315*f,D=315*c,y=315*u,l=315*F,D+=(i^=I>>12|224)<<8,y+=e<<8,i=65535&(Q=315*i),F=(l+=a<<8)+((y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=315*(e=65535&B),n=315*(a=65535&n),o=315*(r=65535&o),s=315*(f=65535&s),D=315*(c=65535&D),y=315*(u=65535&y),l=315*F,D+=(i^=I>>6&63|128)<<8,y+=e<<8,l+=a<<8,i=65535&(Q=315*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),F=l+((y+=D>>>16)>>>16)&65535,u=65535&y,i^=63&I|128),B=315*e,n=315*a,o=315*r,s=315*f,D=315*c,y=315*u,l=315*F,D+=i<<8,y+=e<<8,l+=a<<8,i=65535&(Q=315*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),F=l+((y+=D>>>16)>>>16)&65535,u=65535&y;return w(E[F>>8]+E[255&F]+E[u>>8]+E[255&u]+E[c>>8]+E[255&c]+E[f>>8]+E[255&f]+E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],128)}function v(A){var I,g,C=A.length,t=h[128].offset,Q=0,i=0|t[7],B=0,e=0|t[6],n=0,a=0|t[5],o=0,r=0|t[4],s=0,f=0|t[3],D=0,c=0|t[2],y=0,u=0|t[1],l=0,F=0|t[0];for(g=0;g>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),F=l+((y+=D>>>16)>>>16)&65535,u=65535&y,(I=A.charCodeAt(g))<128?i^=I:I<2048?(B=315*e,n=315*a,o=315*r,s=315*f,D=315*c,y=315*u,l=315*F,D+=(i^=I>>6|192)<<8,y+=e<<8,l+=a<<8,i=65535&(Q=315*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),F=l+((y+=D>>>16)>>>16)&65535,u=65535&y,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,y+=e<<8,i=65535&(Q=315*i),F=(l+=a<<8)+((y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=315*(e=65535&B),n=315*(a=65535&n),o=315*(r=65535&o),s=315*(f=65535&s),D=315*(c=65535&D),y=315*(u=65535&y),l=315*F,D+=(i^=I>>12&63|128)<<8,y+=e<<8,i=65535&(Q=315*i),F=(l+=a<<8)+((y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=315*(e=65535&B),n=315*(a=65535&n),o=315*(r=65535&o),s=315*(f=65535&s),D=315*(c=65535&D),y=315*(u=65535&y),l=315*F,D+=(i^=I>>6&63|128)<<8,y+=e<<8,l+=a<<8,i=65535&(Q=315*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),F=l+((y+=D>>>16)>>>16)&65535,u=65535&y,i^=63&I|128):(B=315*e,n=315*a,o=315*r,s=315*f,D=315*c,y=315*u,l=315*F,D+=(i^=I>>12|224)<<8,y+=e<<8,i=65535&(Q=315*i),F=(l+=a<<8)+((y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=315*(e=65535&B),n=315*(a=65535&n),o=315*(r=65535&o),s=315*(f=65535&s),D=315*(c=65535&D),y=315*(u=65535&y),l=315*F,D+=(i^=I>>6&63|128)<<8,y+=e<<8,l+=a<<8,i=65535&(Q=315*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),F=l+((y+=D>>>16)>>>16)&65535,u=65535&y,i^=63&I|128);return w(E[F>>8]+E[255&F]+E[u>>8]+E[255&u]+E[c>>8]+E[255&c]+E[f>>8]+E[255&f]+E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],128)}function Y(A){var I,g=A.length-3,C=h[256].offset,t=0,Q=0|C[15],i=0,B=0|C[14],e=0,n=0|C[13],a=0,o=0|C[12],r=0,s=0|C[11],f=0,D=0|C[10],c=0,y=0|C[9],u=0,l=0|C[8],F=0,M=0|C[7],p=0,G=0|C[6],H=0,d=0|C[5],U=0,m=0|C[4],L=0,b=0|C[3],k=0,J=0|C[2],N=0,S=0|C[1],R=0,v=0|C[0];for(I=0;I>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=355*(B=65535&i),e=355*(n=65535&e),a=355*(o=65535&a),r=355*(s=65535&r),f=355*(D=65535&f),c=355*(y=65535&c),u=355*(l=65535&u),F=355*(M=65535&F),p=355*(G=65535&p),H=355*(d=65535&H),U=355*(m=65535&U),L=355*(b=65535&L),k=355*(J=65535&k),N=355*(S=65535&N),R=355*v,H+=(Q^=A.charCodeAt(I++))<<8,U+=B<<8,L+=n<<8,k+=o<<8,N+=s<<8,Q=65535&(t=355*Q),v=(R+=D<<8)+((N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=355*(B=65535&i),e=355*(n=65535&e),a=355*(o=65535&a),r=355*(s=65535&r),f=355*(D=65535&f),c=355*(y=65535&c),u=355*(l=65535&u),F=355*(M=65535&F),p=355*(G=65535&p),H=355*(d=65535&H),U=355*(m=65535&U),L=355*(b=65535&L),k=355*(J=65535&k),N=355*(S=65535&N),R=355*v,H+=(Q^=A.charCodeAt(I++))<<8,U+=B<<8,L+=n<<8,k+=o<<8,N+=s<<8,Q=65535&(t=355*Q),v=(R+=D<<8)+((N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=355*(B=65535&i),e=355*(n=65535&e),a=355*(o=65535&a),r=355*(s=65535&r),f=355*(D=65535&f),c=355*(y=65535&c),u=355*(l=65535&u),F=355*(M=65535&F),p=355*(G=65535&p),H=355*(d=65535&H),U=355*(m=65535&U),L=355*(b=65535&L),k=355*(J=65535&k),N=355*(S=65535&N),R=355*v,H+=(Q^=A.charCodeAt(I++))<<8,U+=B<<8,L+=n<<8,k+=o<<8,N+=s<<8,R+=D<<8,Q=65535&(t=355*Q),B=65535&(i+=t>>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),v=R+((N+=k>>>16)>>>16)&65535,S=65535&N;for(;I>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),v=R+((N+=k>>>16)>>>16)&65535,S=65535&N;return w(E[v>>8]+E[255&v]+E[S>>8]+E[255&S]+E[J>>8]+E[255&J]+E[b>>8]+E[255&b]+E[m>>8]+E[255&m]+E[d>>8]+E[255&d]+E[G>>8]+E[255&G]+E[M>>8]+E[255&M]+E[l>>8]+E[255&l]+E[y>>8]+E[255&y]+E[D>>8]+E[255&D]+E[s>>8]+E[255&s]+E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],256)}function P(A){var I,g=A.length-3,C=h[256].offset,t=0,Q=0|C[15],i=0,B=0|C[14],e=0,n=0|C[13],a=0,o=0|C[12],r=0,s=0|C[11],f=0,D=0|C[10],c=0,y=0|C[9],u=0,l=0|C[8],F=0,M=0|C[7],p=0,G=0|C[6],H=0,d=0|C[5],U=0,m=0|C[4],L=0,b=0|C[3],k=0,J=0|C[2],N=0,S=0|C[1],R=0,v=0|C[0];for(I=0;I>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=355*(B=65535&i),e=355*(n=65535&e),a=355*(o=65535&a),r=355*(s=65535&r),f=355*(D=65535&f),c=355*(y=65535&c),u=355*(l=65535&u),F=355*(M=65535&F),p=355*(G=65535&p),H=355*(d=65535&H),U=355*(m=65535&U),L=355*(b=65535&L),k=355*(J=65535&k),N=355*(S=65535&N),R=355*v,H+=(Q^=A.charCodeAt(I++))<<8,U+=B<<8,L+=n<<8,k+=o<<8,N+=s<<8,Q=65535&(t=355*Q),v=(R+=D<<8)+((N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=355*(B=65535&i),e=355*(n=65535&e),a=355*(o=65535&a),r=355*(s=65535&r),f=355*(D=65535&f),c=355*(y=65535&c),u=355*(l=65535&u),F=355*(M=65535&F),p=355*(G=65535&p),H=355*(d=65535&H),U=355*(m=65535&U),L=355*(b=65535&L),k=355*(J=65535&k),N=355*(S=65535&N),R=355*v,H+=(Q^=A.charCodeAt(I++))<<8,U+=B<<8,L+=n<<8,k+=o<<8,N+=s<<8,Q=65535&(t=355*Q),v=(R+=D<<8)+((N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=355*(B=65535&i),e=355*(n=65535&e),a=355*(o=65535&a),r=355*(s=65535&r),f=355*(D=65535&f),c=355*(y=65535&c),u=355*(l=65535&u),F=355*(M=65535&F),p=355*(G=65535&p),H=355*(d=65535&H),U=355*(m=65535&U),L=355*(b=65535&L),k=355*(J=65535&k),N=355*(S=65535&N),R=355*v,H+=(Q^=A.charCodeAt(I++))<<8,U+=B<<8,L+=n<<8,k+=o<<8,N+=s<<8,R+=D<<8,Q=65535&(t=355*Q),B=65535&(i+=t>>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),v=R+((N+=k>>>16)>>>16)&65535,S=65535&N,Q^=A.charCodeAt(I++);for(;I>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),v=R+((N+=k>>>16)>>>16)&65535,S=65535&N,Q^=A.charCodeAt(I++);return w(E[v>>8]+E[255&v]+E[S>>8]+E[255&S]+E[J>>8]+E[255&J]+E[b>>8]+E[255&b]+E[m>>8]+E[255&m]+E[d>>8]+E[255&d]+E[G>>8]+E[255&G]+E[M>>8]+E[255&M]+E[l>>8]+E[255&l]+E[y>>8]+E[255&y]+E[D>>8]+E[255&D]+E[s>>8]+E[255&s]+E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],256)}function q(A){var I,g,C=A.length,t=h[256].offset,Q=0,i=0|t[15],B=0,e=0|t[14],n=0,a=0|t[13],o=0,r=0|t[12],s=0,f=0|t[11],D=0,c=0|t[10],y=0,u=0|t[9],l=0,F=0|t[8],M=0,p=0|t[7],G=0,H=0|t[6],d=0,U=0|t[5],m=0,L=0|t[4],b=0,k=0|t[3],J=0,N=0|t[2],S=0,R=0|t[1],v=0,Y=0|t[0];for(g=0;g>6|192)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,v+=c<<8,i=65535&(Q=355*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),Y=v+((S+=J>>>16)>>>16)&65535,R=65535&S,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,i=65535&(Q=355*i),Y=(v+=c<<8)+((S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=355*(e=65535&B),n=355*(a=65535&n),o=355*(r=65535&o),s=355*(f=65535&s),D=355*(c=65535&D),y=355*(u=65535&y),l=355*(F=65535&l),M=355*(p=65535&M),G=355*(H=65535&G),d=355*(U=65535&d),m=355*(L=65535&m),b=355*(k=65535&b),J=355*(N=65535&J),S=355*(R=65535&S),v=355*Y,d+=(i^=I>>12&63|128)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,i=65535&(Q=355*i),Y=(v+=c<<8)+((S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=355*(e=65535&B),n=355*(a=65535&n),o=355*(r=65535&o),s=355*(f=65535&s),D=355*(c=65535&D),y=355*(u=65535&y),l=355*(F=65535&l),M=355*(p=65535&M),G=355*(H=65535&G),d=355*(U=65535&d),m=355*(L=65535&m),b=355*(k=65535&b),J=355*(N=65535&J),S=355*(R=65535&S),v=355*Y,d+=(i^=I>>6&63|128)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,v+=c<<8,i=65535&(Q=355*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),Y=v+((S+=J>>>16)>>>16)&65535,R=65535&S,i^=63&I|128):(B=355*e,n=355*a,o=355*r,s=355*f,D=355*c,y=355*u,l=355*F,M=355*p,G=355*H,d=355*U,m=355*L,b=355*k,J=355*N,S=355*R,v=355*Y,d+=(i^=I>>12|224)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,i=65535&(Q=355*i),Y=(v+=c<<8)+((S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=355*(e=65535&B),n=355*(a=65535&n),o=355*(r=65535&o),s=355*(f=65535&s),D=355*(c=65535&D),y=355*(u=65535&y),l=355*(F=65535&l),M=355*(p=65535&M),G=355*(H=65535&G),d=355*(U=65535&d),m=355*(L=65535&m),b=355*(k=65535&b),J=355*(N=65535&J),S=355*(R=65535&S),v=355*Y,d+=(i^=I>>6&63|128)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,v+=c<<8,i=65535&(Q=355*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),Y=v+((S+=J>>>16)>>>16)&65535,R=65535&S,i^=63&I|128),B=355*e,n=355*a,o=355*r,s=355*f,D=355*c,y=355*u,l=355*F,M=355*p,G=355*H,d=355*U,m=355*L,b=355*k,J=355*N,S=355*R,v=355*Y,d+=i<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,v+=c<<8,i=65535&(Q=355*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),Y=v+((S+=J>>>16)>>>16)&65535,R=65535&S;return w(E[Y>>8]+E[255&Y]+E[R>>8]+E[255&R]+E[N>>8]+E[255&N]+E[k>>8]+E[255&k]+E[L>>8]+E[255&L]+E[U>>8]+E[255&U]+E[H>>8]+E[255&H]+E[p>>8]+E[255&p]+E[F>>8]+E[255&F]+E[u>>8]+E[255&u]+E[c>>8]+E[255&c]+E[f>>8]+E[255&f]+E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],256)}function x(A){var I,g,C=A.length,t=h[256].offset,Q=0,i=0|t[15],B=0,e=0|t[14],n=0,a=0|t[13],o=0,r=0|t[12],s=0,f=0|t[11],D=0,c=0|t[10],y=0,u=0|t[9],l=0,F=0|t[8],M=0,p=0|t[7],G=0,H=0|t[6],d=0,U=0|t[5],m=0,L=0|t[4],b=0,k=0|t[3],J=0,N=0|t[2],S=0,R=0|t[1],v=0,Y=0|t[0];for(g=0;g>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),Y=v+((S+=J>>>16)>>>16)&65535,R=65535&S,(I=A.charCodeAt(g))<128?i^=I:I<2048?(B=355*e,n=355*a,o=355*r,s=355*f,D=355*c,y=355*u,l=355*F,M=355*p,G=355*H,d=355*U,m=355*L,b=355*k,J=355*N,S=355*R,v=355*Y,d+=(i^=I>>6|192)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,v+=c<<8,i=65535&(Q=355*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),Y=v+((S+=J>>>16)>>>16)&65535,R=65535&S,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,i=65535&(Q=355*i),Y=(v+=c<<8)+((S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=355*(e=65535&B),n=355*(a=65535&n),o=355*(r=65535&o),s=355*(f=65535&s),D=355*(c=65535&D),y=355*(u=65535&y),l=355*(F=65535&l),M=355*(p=65535&M),G=355*(H=65535&G),d=355*(U=65535&d),m=355*(L=65535&m),b=355*(k=65535&b),J=355*(N=65535&J),S=355*(R=65535&S),v=355*Y,d+=(i^=I>>12&63|128)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,i=65535&(Q=355*i),Y=(v+=c<<8)+((S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=355*(e=65535&B),n=355*(a=65535&n),o=355*(r=65535&o),s=355*(f=65535&s),D=355*(c=65535&D),y=355*(u=65535&y),l=355*(F=65535&l),M=355*(p=65535&M),G=355*(H=65535&G),d=355*(U=65535&d),m=355*(L=65535&m),b=355*(k=65535&b),J=355*(N=65535&J),S=355*(R=65535&S),v=355*Y,d+=(i^=I>>6&63|128)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,v+=c<<8,i=65535&(Q=355*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),Y=v+((S+=J>>>16)>>>16)&65535,R=65535&S,i^=63&I|128):(B=355*e,n=355*a,o=355*r,s=355*f,D=355*c,y=355*u,l=355*F,M=355*p,G=355*H,d=355*U,m=355*L,b=355*k,J=355*N,S=355*R,v=355*Y,d+=(i^=I>>12|224)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,i=65535&(Q=355*i),Y=(v+=c<<8)+((S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=355*(e=65535&B),n=355*(a=65535&n),o=355*(r=65535&o),s=355*(f=65535&s),D=355*(c=65535&D),y=355*(u=65535&y),l=355*(F=65535&l),M=355*(p=65535&M),G=355*(H=65535&G),d=355*(U=65535&d),m=355*(L=65535&m),b=355*(k=65535&b),J=355*(N=65535&J),S=355*(R=65535&S),v=355*Y,d+=(i^=I>>6&63|128)<<8,m+=e<<8,b+=a<<8,J+=r<<8,S+=f<<8,v+=c<<8,i=65535&(Q=355*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),Y=v+((S+=J>>>16)>>>16)&65535,R=65535&S,i^=63&I|128);return w(E[Y>>8]+E[255&Y]+E[R>>8]+E[255&R]+E[N>>8]+E[255&N]+E[k>>8]+E[255&k]+E[L>>8]+E[255&L]+E[U>>8]+E[255&U]+E[H>>8]+E[255&H]+E[p>>8]+E[255&p]+E[F>>8]+E[255&F]+E[u>>8]+E[255&u]+E[c>>8]+E[255&c]+E[f>>8]+E[255&f]+E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],256)}function X(A){var I,g=A.length-3,C=h[512].offset,t=0,Q=0|C[31],i=0,B=0|C[30],e=0,n=0|C[29],a=0,o=0|C[28],r=0,s=0|C[27],f=0,D=0|C[26],c=0,y=0|C[25],u=0,l=0|C[24],F=0,M=0|C[23],p=0,G=0|C[22],H=0,d=0|C[21],U=0,m=0|C[20],L=0,b=0|C[19],k=0,J=0|C[18],N=0,S=0|C[17],R=0,v=0|C[16],Y=0,P=0|C[15],q=0,x=0|C[14],X=0,Z=0|C[13],V=0,K=0|C[12],O=0,W=0|C[11],j=0,z=0|C[10],T=0,_=0|C[9],$=0,AA=0|C[8],IA=0,gA=0|C[7],CA=0,tA=0|C[6],QA=0,iA=0|C[5],BA=0,EA=0|C[4],eA=0,nA=0|C[3],aA=0,oA=0|C[2],rA=0,hA=0|C[1],sA=0,wA=0|C[0];for(I=0;I>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=343*(B=65535&i),e=343*(n=65535&e),a=343*(o=65535&a),r=343*(s=65535&r),f=343*(D=65535&f),c=343*(y=65535&c),u=343*(l=65535&u),F=343*(M=65535&F),p=343*(G=65535&p),H=343*(d=65535&H),U=343*(m=65535&U),L=343*(b=65535&L),k=343*(J=65535&k),N=343*(S=65535&N),R=343*(v=65535&R),Y=343*(P=65535&Y),q=343*(x=65535&q),X=343*(Z=65535&X),V=343*(K=65535&V),O=343*(W=65535&O),j=343*(z=65535&j),T=343*(_=65535&T),$=343*(AA=65535&$),IA=343*(gA=65535&IA),CA=343*(tA=65535&CA),QA=343*(iA=65535&QA),BA=343*(EA=65535&BA),eA=343*(nA=65535&eA),aA=343*(oA=65535&aA),rA=343*(hA=65535&rA),sA=343*wA,j+=(Q^=A.charCodeAt(I++))<<8,T+=B<<8,$+=n<<8,IA+=o<<8,CA+=s<<8,QA+=D<<8,BA+=y<<8,eA+=l<<8,aA+=M<<8,rA+=G<<8,Q=65535&(t=343*Q),wA=(sA+=d<<8)+((rA+=(aA+=(eA+=(BA+=(QA+=(CA+=(IA+=($+=(T+=(j+=(O+=(V+=(X+=(q+=(Y+=(R+=(N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=343*(B=65535&i),e=343*(n=65535&e),a=343*(o=65535&a),r=343*(s=65535&r),f=343*(D=65535&f),c=343*(y=65535&c),u=343*(l=65535&u),F=343*(M=65535&F),p=343*(G=65535&p),H=343*(d=65535&H),U=343*(m=65535&U),L=343*(b=65535&L),k=343*(J=65535&k),N=343*(S=65535&N),R=343*(v=65535&R),Y=343*(P=65535&Y),q=343*(x=65535&q),X=343*(Z=65535&X),V=343*(K=65535&V),O=343*(W=65535&O),j=343*(z=65535&j),T=343*(_=65535&T),$=343*(AA=65535&$),IA=343*(gA=65535&IA),CA=343*(tA=65535&CA),QA=343*(iA=65535&QA),BA=343*(EA=65535&BA),eA=343*(nA=65535&eA),aA=343*(oA=65535&aA),rA=343*(hA=65535&rA),sA=343*wA,j+=(Q^=A.charCodeAt(I++))<<8,T+=B<<8,$+=n<<8,IA+=o<<8,CA+=s<<8,QA+=D<<8,BA+=y<<8,eA+=l<<8,aA+=M<<8,rA+=G<<8,Q=65535&(t=343*Q),wA=(sA+=d<<8)+((rA+=(aA+=(eA+=(BA+=(QA+=(CA+=(IA+=($+=(T+=(j+=(O+=(V+=(X+=(q+=(Y+=(R+=(N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=343*(B=65535&i),e=343*(n=65535&e),a=343*(o=65535&a),r=343*(s=65535&r),f=343*(D=65535&f),c=343*(y=65535&c),u=343*(l=65535&u),F=343*(M=65535&F),p=343*(G=65535&p),H=343*(d=65535&H),U=343*(m=65535&U),L=343*(b=65535&L),k=343*(J=65535&k),N=343*(S=65535&N),R=343*(v=65535&R),Y=343*(P=65535&Y),q=343*(x=65535&q),X=343*(Z=65535&X),V=343*(K=65535&V),O=343*(W=65535&O),j=343*(z=65535&j),T=343*(_=65535&T),$=343*(AA=65535&$),IA=343*(gA=65535&IA),CA=343*(tA=65535&CA),QA=343*(iA=65535&QA),BA=343*(EA=65535&BA),eA=343*(nA=65535&eA),aA=343*(oA=65535&aA),rA=343*(hA=65535&rA),sA=343*wA,j+=(Q^=A.charCodeAt(I++))<<8,T+=B<<8,$+=n<<8,IA+=o<<8,CA+=s<<8,QA+=D<<8,BA+=y<<8,eA+=l<<8,aA+=M<<8,rA+=G<<8,sA+=d<<8,Q=65535&(t=343*Q),B=65535&(i+=t>>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),S=65535&(N+=k>>>16),v=65535&(R+=N>>>16),P=65535&(Y+=R>>>16),x=65535&(q+=Y>>>16),Z=65535&(X+=q>>>16),K=65535&(V+=X>>>16),W=65535&(O+=V>>>16),z=65535&(j+=O>>>16),_=65535&(T+=j>>>16),AA=65535&($+=T>>>16),gA=65535&(IA+=$>>>16),tA=65535&(CA+=IA>>>16),iA=65535&(QA+=CA>>>16),EA=65535&(BA+=QA>>>16),nA=65535&(eA+=BA>>>16),oA=65535&(aA+=eA>>>16),wA=sA+((rA+=aA>>>16)>>>16)&65535,hA=65535&rA;for(;I>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),S=65535&(N+=k>>>16),v=65535&(R+=N>>>16),P=65535&(Y+=R>>>16),x=65535&(q+=Y>>>16),Z=65535&(X+=q>>>16),K=65535&(V+=X>>>16),W=65535&(O+=V>>>16),z=65535&(j+=O>>>16),_=65535&(T+=j>>>16),AA=65535&($+=T>>>16),gA=65535&(IA+=$>>>16),tA=65535&(CA+=IA>>>16),iA=65535&(QA+=CA>>>16),EA=65535&(BA+=QA>>>16),nA=65535&(eA+=BA>>>16),oA=65535&(aA+=eA>>>16),wA=sA+((rA+=aA>>>16)>>>16)&65535,hA=65535&rA;return w(E[wA>>8]+E[255&wA]+E[hA>>8]+E[255&hA]+E[oA>>8]+E[255&oA]+E[nA>>8]+E[255&nA]+E[EA>>8]+E[255&EA]+E[iA>>8]+E[255&iA]+E[tA>>8]+E[255&tA]+E[gA>>8]+E[255&gA]+E[AA>>8]+E[255&AA]+E[_>>8]+E[255&_]+E[z>>8]+E[255&z]+E[W>>8]+E[255&W]+E[K>>8]+E[255&K]+E[Z>>8]+E[255&Z]+E[x>>8]+E[255&x]+E[P>>8]+E[255&P]+E[v>>8]+E[255&v]+E[S>>8]+E[255&S]+E[J>>8]+E[255&J]+E[b>>8]+E[255&b]+E[m>>8]+E[255&m]+E[d>>8]+E[255&d]+E[G>>8]+E[255&G]+E[M>>8]+E[255&M]+E[l>>8]+E[255&l]+E[y>>8]+E[255&y]+E[D>>8]+E[255&D]+E[s>>8]+E[255&s]+E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],512)}function Z(A){var I,g=A.length-3,C=h[512].offset,t=0,Q=0|C[31],i=0,B=0|C[30],e=0,n=0|C[29],a=0,o=0|C[28],r=0,s=0|C[27],f=0,D=0|C[26],c=0,y=0|C[25],u=0,l=0|C[24],F=0,M=0|C[23],p=0,G=0|C[22],H=0,d=0|C[21],U=0,m=0|C[20],L=0,b=0|C[19],k=0,J=0|C[18],N=0,S=0|C[17],R=0,v=0|C[16],Y=0,P=0|C[15],q=0,x=0|C[14],X=0,Z=0|C[13],V=0,K=0|C[12],O=0,W=0|C[11],j=0,z=0|C[10],T=0,_=0|C[9],$=0,AA=0|C[8],IA=0,gA=0|C[7],CA=0,tA=0|C[6],QA=0,iA=0|C[5],BA=0,EA=0|C[4],eA=0,nA=0|C[3],aA=0,oA=0|C[2],rA=0,hA=0|C[1],sA=0,wA=0|C[0];for(I=0;I>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=343*(B=65535&i),e=343*(n=65535&e),a=343*(o=65535&a),r=343*(s=65535&r),f=343*(D=65535&f),c=343*(y=65535&c),u=343*(l=65535&u),F=343*(M=65535&F),p=343*(G=65535&p),H=343*(d=65535&H),U=343*(m=65535&U),L=343*(b=65535&L),k=343*(J=65535&k),N=343*(S=65535&N),R=343*(v=65535&R),Y=343*(P=65535&Y),q=343*(x=65535&q),X=343*(Z=65535&X),V=343*(K=65535&V),O=343*(W=65535&O),j=343*(z=65535&j),T=343*(_=65535&T),$=343*(AA=65535&$),IA=343*(gA=65535&IA),CA=343*(tA=65535&CA),QA=343*(iA=65535&QA),BA=343*(EA=65535&BA),eA=343*(nA=65535&eA),aA=343*(oA=65535&aA),rA=343*(hA=65535&rA),sA=343*wA,j+=(Q^=A.charCodeAt(I++))<<8,T+=B<<8,$+=n<<8,IA+=o<<8,CA+=s<<8,QA+=D<<8,BA+=y<<8,eA+=l<<8,aA+=M<<8,rA+=G<<8,Q=65535&(t=343*Q),wA=(sA+=d<<8)+((rA+=(aA+=(eA+=(BA+=(QA+=(CA+=(IA+=($+=(T+=(j+=(O+=(V+=(X+=(q+=(Y+=(R+=(N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=343*(B=65535&i),e=343*(n=65535&e),a=343*(o=65535&a),r=343*(s=65535&r),f=343*(D=65535&f),c=343*(y=65535&c),u=343*(l=65535&u),F=343*(M=65535&F),p=343*(G=65535&p),H=343*(d=65535&H),U=343*(m=65535&U),L=343*(b=65535&L),k=343*(J=65535&k),N=343*(S=65535&N),R=343*(v=65535&R),Y=343*(P=65535&Y),q=343*(x=65535&q),X=343*(Z=65535&X),V=343*(K=65535&V),O=343*(W=65535&O),j=343*(z=65535&j),T=343*(_=65535&T),$=343*(AA=65535&$),IA=343*(gA=65535&IA),CA=343*(tA=65535&CA),QA=343*(iA=65535&QA),BA=343*(EA=65535&BA),eA=343*(nA=65535&eA),aA=343*(oA=65535&aA),rA=343*(hA=65535&rA),sA=343*wA,j+=(Q^=A.charCodeAt(I++))<<8,T+=B<<8,$+=n<<8,IA+=o<<8,CA+=s<<8,QA+=D<<8,BA+=y<<8,eA+=l<<8,aA+=M<<8,rA+=G<<8,Q=65535&(t=343*Q),wA=(sA+=d<<8)+((rA+=(aA+=(eA+=(BA+=(QA+=(CA+=(IA+=($+=(T+=(j+=(O+=(V+=(X+=(q+=(Y+=(R+=(N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=343*(B=65535&i),e=343*(n=65535&e),a=343*(o=65535&a),r=343*(s=65535&r),f=343*(D=65535&f),c=343*(y=65535&c),u=343*(l=65535&u),F=343*(M=65535&F),p=343*(G=65535&p),H=343*(d=65535&H),U=343*(m=65535&U),L=343*(b=65535&L),k=343*(J=65535&k),N=343*(S=65535&N),R=343*(v=65535&R),Y=343*(P=65535&Y),q=343*(x=65535&q),X=343*(Z=65535&X),V=343*(K=65535&V),O=343*(W=65535&O),j=343*(z=65535&j),T=343*(_=65535&T),$=343*(AA=65535&$),IA=343*(gA=65535&IA),CA=343*(tA=65535&CA),QA=343*(iA=65535&QA),BA=343*(EA=65535&BA),eA=343*(nA=65535&eA),aA=343*(oA=65535&aA),rA=343*(hA=65535&rA),sA=343*wA,j+=(Q^=A.charCodeAt(I++))<<8,T+=B<<8,$+=n<<8,IA+=o<<8,CA+=s<<8,QA+=D<<8,BA+=y<<8,eA+=l<<8,aA+=M<<8,rA+=G<<8,sA+=d<<8,Q=65535&(t=343*Q),B=65535&(i+=t>>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),S=65535&(N+=k>>>16),v=65535&(R+=N>>>16),P=65535&(Y+=R>>>16),x=65535&(q+=Y>>>16),Z=65535&(X+=q>>>16),K=65535&(V+=X>>>16),W=65535&(O+=V>>>16),z=65535&(j+=O>>>16),_=65535&(T+=j>>>16),AA=65535&($+=T>>>16),gA=65535&(IA+=$>>>16),tA=65535&(CA+=IA>>>16),iA=65535&(QA+=CA>>>16),EA=65535&(BA+=QA>>>16),nA=65535&(eA+=BA>>>16),oA=65535&(aA+=eA>>>16),wA=sA+((rA+=aA>>>16)>>>16)&65535,hA=65535&rA,Q^=A.charCodeAt(I++);for(;I>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),S=65535&(N+=k>>>16),v=65535&(R+=N>>>16),P=65535&(Y+=R>>>16),x=65535&(q+=Y>>>16),Z=65535&(X+=q>>>16),K=65535&(V+=X>>>16),W=65535&(O+=V>>>16),z=65535&(j+=O>>>16),_=65535&(T+=j>>>16),AA=65535&($+=T>>>16),gA=65535&(IA+=$>>>16),tA=65535&(CA+=IA>>>16),iA=65535&(QA+=CA>>>16),EA=65535&(BA+=QA>>>16),nA=65535&(eA+=BA>>>16),oA=65535&(aA+=eA>>>16),wA=sA+((rA+=aA>>>16)>>>16)&65535,hA=65535&rA,Q^=A.charCodeAt(I++);return w(E[wA>>8]+E[255&wA]+E[hA>>8]+E[255&hA]+E[oA>>8]+E[255&oA]+E[nA>>8]+E[255&nA]+E[EA>>8]+E[255&EA]+E[iA>>8]+E[255&iA]+E[tA>>8]+E[255&tA]+E[gA>>8]+E[255&gA]+E[AA>>8]+E[255&AA]+E[_>>8]+E[255&_]+E[z>>8]+E[255&z]+E[W>>8]+E[255&W]+E[K>>8]+E[255&K]+E[Z>>8]+E[255&Z]+E[x>>8]+E[255&x]+E[P>>8]+E[255&P]+E[v>>8]+E[255&v]+E[S>>8]+E[255&S]+E[J>>8]+E[255&J]+E[b>>8]+E[255&b]+E[m>>8]+E[255&m]+E[d>>8]+E[255&d]+E[G>>8]+E[255&G]+E[M>>8]+E[255&M]+E[l>>8]+E[255&l]+E[y>>8]+E[255&y]+E[D>>8]+E[255&D]+E[s>>8]+E[255&s]+E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],512)}function V(A){var I,g,C=A.length,t=h[512].offset,Q=0,i=0|t[31],B=0,e=0|t[30],n=0,a=0|t[29],o=0,r=0|t[28],s=0,f=0|t[27],D=0,c=0|t[26],y=0,u=0|t[25],l=0,F=0|t[24],M=0,p=0|t[23],G=0,H=0|t[22],d=0,U=0|t[21],m=0,L=0|t[20],b=0,k=0|t[19],J=0,N=0|t[18],S=0,R=0|t[17],v=0,Y=0|t[16],P=0,q=0|t[15],x=0,X=0|t[14],Z=0,V=0|t[13],K=0,O=0|t[12],W=0,j=0|t[11],z=0,T=0|t[10],_=0,$=0|t[9],AA=0,IA=0|t[8],gA=0,CA=0|t[7],tA=0,QA=0|t[6],iA=0,BA=0|t[5],EA=0,eA=0|t[4],nA=0,aA=0|t[3],oA=0,rA=0|t[2],hA=0,sA=0|t[1],wA=0,fA=0|t[0];for(g=0;g>6|192)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,wA+=U<<8,i=65535&(Q=343*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),fA=wA+((hA+=oA>>>16)>>>16)&65535,sA=65535&hA,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,i=65535&(Q=343*i),fA=(wA+=U<<8)+((hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=343*(e=65535&B),n=343*(a=65535&n),o=343*(r=65535&o),s=343*(f=65535&s),D=343*(c=65535&D),y=343*(u=65535&y),l=343*(F=65535&l),M=343*(p=65535&M),G=343*(H=65535&G),d=343*(U=65535&d),m=343*(L=65535&m),b=343*(k=65535&b),J=343*(N=65535&J),S=343*(R=65535&S),v=343*(Y=65535&v),P=343*(q=65535&P),x=343*(X=65535&x),Z=343*(V=65535&Z),K=343*(O=65535&K),W=343*(j=65535&W),z=343*(T=65535&z),_=343*($=65535&_),AA=343*(IA=65535&AA),gA=343*(CA=65535&gA),tA=343*(QA=65535&tA),iA=343*(BA=65535&iA),EA=343*(eA=65535&EA),nA=343*(aA=65535&nA),oA=343*(rA=65535&oA),hA=343*(sA=65535&hA),wA=343*fA,z+=(i^=I>>12&63|128)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,i=65535&(Q=343*i),fA=(wA+=U<<8)+((hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=343*(e=65535&B),n=343*(a=65535&n),o=343*(r=65535&o),s=343*(f=65535&s),D=343*(c=65535&D),y=343*(u=65535&y),l=343*(F=65535&l),M=343*(p=65535&M),G=343*(H=65535&G),d=343*(U=65535&d),m=343*(L=65535&m),b=343*(k=65535&b),J=343*(N=65535&J),S=343*(R=65535&S),v=343*(Y=65535&v),P=343*(q=65535&P),x=343*(X=65535&x),Z=343*(V=65535&Z),K=343*(O=65535&K),W=343*(j=65535&W),z=343*(T=65535&z),_=343*($=65535&_),AA=343*(IA=65535&AA),gA=343*(CA=65535&gA),tA=343*(QA=65535&tA),iA=343*(BA=65535&iA),EA=343*(eA=65535&EA),nA=343*(aA=65535&nA),oA=343*(rA=65535&oA),hA=343*(sA=65535&hA),wA=343*fA,z+=(i^=I>>6&63|128)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,wA+=U<<8,i=65535&(Q=343*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),fA=wA+((hA+=oA>>>16)>>>16)&65535,sA=65535&hA,i^=63&I|128):(B=343*e,n=343*a,o=343*r,s=343*f,D=343*c,y=343*u,l=343*F,M=343*p,G=343*H,d=343*U,m=343*L,b=343*k,J=343*N,S=343*R,v=343*Y,P=343*q,x=343*X,Z=343*V,K=343*O,W=343*j,z=343*T,_=343*$,AA=343*IA,gA=343*CA,tA=343*QA,iA=343*BA,EA=343*eA,nA=343*aA,oA=343*rA,hA=343*sA,wA=343*fA,z+=(i^=I>>12|224)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,i=65535&(Q=343*i),fA=(wA+=U<<8)+((hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=343*(e=65535&B),n=343*(a=65535&n),o=343*(r=65535&o),s=343*(f=65535&s),D=343*(c=65535&D),y=343*(u=65535&y),l=343*(F=65535&l),M=343*(p=65535&M),G=343*(H=65535&G),d=343*(U=65535&d),m=343*(L=65535&m),b=343*(k=65535&b),J=343*(N=65535&J),S=343*(R=65535&S),v=343*(Y=65535&v),P=343*(q=65535&P),x=343*(X=65535&x),Z=343*(V=65535&Z),K=343*(O=65535&K),W=343*(j=65535&W),z=343*(T=65535&z),_=343*($=65535&_),AA=343*(IA=65535&AA),gA=343*(CA=65535&gA),tA=343*(QA=65535&tA),iA=343*(BA=65535&iA),EA=343*(eA=65535&EA),nA=343*(aA=65535&nA),oA=343*(rA=65535&oA),hA=343*(sA=65535&hA),wA=343*fA,z+=(i^=I>>6&63|128)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,wA+=U<<8,i=65535&(Q=343*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),fA=wA+((hA+=oA>>>16)>>>16)&65535,sA=65535&hA,i^=63&I|128),B=343*e,n=343*a,o=343*r,s=343*f,D=343*c,y=343*u,l=343*F,M=343*p,G=343*H,d=343*U,m=343*L,b=343*k,J=343*N,S=343*R,v=343*Y,P=343*q,x=343*X,Z=343*V,K=343*O,W=343*j,z=343*T,_=343*$,AA=343*IA,gA=343*CA,tA=343*QA,iA=343*BA,EA=343*eA,nA=343*aA,oA=343*rA,hA=343*sA,wA=343*fA,z+=i<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,wA+=U<<8,i=65535&(Q=343*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),fA=wA+((hA+=oA>>>16)>>>16)&65535,sA=65535&hA;return w(E[fA>>8]+E[255&fA]+E[sA>>8]+E[255&sA]+E[rA>>8]+E[255&rA]+E[aA>>8]+E[255&aA]+E[eA>>8]+E[255&eA]+E[BA>>8]+E[255&BA]+E[QA>>8]+E[255&QA]+E[CA>>8]+E[255&CA]+E[IA>>8]+E[255&IA]+E[$>>8]+E[255&$]+E[T>>8]+E[255&T]+E[j>>8]+E[255&j]+E[O>>8]+E[255&O]+E[V>>8]+E[255&V]+E[X>>8]+E[255&X]+E[q>>8]+E[255&q]+E[Y>>8]+E[255&Y]+E[R>>8]+E[255&R]+E[N>>8]+E[255&N]+E[k>>8]+E[255&k]+E[L>>8]+E[255&L]+E[U>>8]+E[255&U]+E[H>>8]+E[255&H]+E[p>>8]+E[255&p]+E[F>>8]+E[255&F]+E[u>>8]+E[255&u]+E[c>>8]+E[255&c]+E[f>>8]+E[255&f]+E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],512)}function K(A){var I,g,C=A.length,t=h[512].offset,Q=0,i=0|t[31],B=0,e=0|t[30],n=0,a=0|t[29],o=0,r=0|t[28],s=0,f=0|t[27],D=0,c=0|t[26],y=0,u=0|t[25],l=0,F=0|t[24],M=0,p=0|t[23],G=0,H=0|t[22],d=0,U=0|t[21],m=0,L=0|t[20],b=0,k=0|t[19],J=0,N=0|t[18],S=0,R=0|t[17],v=0,Y=0|t[16],P=0,q=0|t[15],x=0,X=0|t[14],Z=0,V=0|t[13],K=0,O=0|t[12],W=0,j=0|t[11],z=0,T=0|t[10],_=0,$=0|t[9],AA=0,IA=0|t[8],gA=0,CA=0|t[7],tA=0,QA=0|t[6],iA=0,BA=0|t[5],EA=0,eA=0|t[4],nA=0,aA=0|t[3],oA=0,rA=0|t[2],hA=0,sA=0|t[1],wA=0,fA=0|t[0];for(g=0;g>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),fA=wA+((hA+=oA>>>16)>>>16)&65535,sA=65535&hA,(I=A.charCodeAt(g))<128?i^=I:I<2048?(B=343*e,n=343*a,o=343*r,s=343*f,D=343*c,y=343*u,l=343*F,M=343*p,G=343*H,d=343*U,m=343*L,b=343*k,J=343*N,S=343*R,v=343*Y,P=343*q,x=343*X,Z=343*V,K=343*O,W=343*j,z=343*T,_=343*$,AA=343*IA,gA=343*CA,tA=343*QA,iA=343*BA,EA=343*eA,nA=343*aA,oA=343*rA,hA=343*sA,wA=343*fA,z+=(i^=I>>6|192)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,wA+=U<<8,i=65535&(Q=343*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),fA=wA+((hA+=oA>>>16)>>>16)&65535,sA=65535&hA,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,i=65535&(Q=343*i),fA=(wA+=U<<8)+((hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=343*(e=65535&B),n=343*(a=65535&n),o=343*(r=65535&o),s=343*(f=65535&s),D=343*(c=65535&D),y=343*(u=65535&y),l=343*(F=65535&l),M=343*(p=65535&M),G=343*(H=65535&G),d=343*(U=65535&d),m=343*(L=65535&m),b=343*(k=65535&b),J=343*(N=65535&J),S=343*(R=65535&S),v=343*(Y=65535&v),P=343*(q=65535&P),x=343*(X=65535&x),Z=343*(V=65535&Z),K=343*(O=65535&K),W=343*(j=65535&W),z=343*(T=65535&z),_=343*($=65535&_),AA=343*(IA=65535&AA),gA=343*(CA=65535&gA),tA=343*(QA=65535&tA),iA=343*(BA=65535&iA),EA=343*(eA=65535&EA),nA=343*(aA=65535&nA),oA=343*(rA=65535&oA),hA=343*(sA=65535&hA),wA=343*fA,z+=(i^=I>>12&63|128)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,i=65535&(Q=343*i),fA=(wA+=U<<8)+((hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=343*(e=65535&B),n=343*(a=65535&n),o=343*(r=65535&o),s=343*(f=65535&s),D=343*(c=65535&D),y=343*(u=65535&y),l=343*(F=65535&l),M=343*(p=65535&M),G=343*(H=65535&G),d=343*(U=65535&d),m=343*(L=65535&m),b=343*(k=65535&b),J=343*(N=65535&J),S=343*(R=65535&S),v=343*(Y=65535&v),P=343*(q=65535&P),x=343*(X=65535&x),Z=343*(V=65535&Z),K=343*(O=65535&K),W=343*(j=65535&W),z=343*(T=65535&z),_=343*($=65535&_),AA=343*(IA=65535&AA),gA=343*(CA=65535&gA),tA=343*(QA=65535&tA),iA=343*(BA=65535&iA),EA=343*(eA=65535&EA),nA=343*(aA=65535&nA),oA=343*(rA=65535&oA),hA=343*(sA=65535&hA),wA=343*fA,z+=(i^=I>>6&63|128)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,wA+=U<<8,i=65535&(Q=343*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),fA=wA+((hA+=oA>>>16)>>>16)&65535,sA=65535&hA,i^=63&I|128):(B=343*e,n=343*a,o=343*r,s=343*f,D=343*c,y=343*u,l=343*F,M=343*p,G=343*H,d=343*U,m=343*L,b=343*k,J=343*N,S=343*R,v=343*Y,P=343*q,x=343*X,Z=343*V,K=343*O,W=343*j,z=343*T,_=343*$,AA=343*IA,gA=343*CA,tA=343*QA,iA=343*BA,EA=343*eA,nA=343*aA,oA=343*rA,hA=343*sA,wA=343*fA,z+=(i^=I>>12|224)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,i=65535&(Q=343*i),fA=(wA+=U<<8)+((hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=343*(e=65535&B),n=343*(a=65535&n),o=343*(r=65535&o),s=343*(f=65535&s),D=343*(c=65535&D),y=343*(u=65535&y),l=343*(F=65535&l),M=343*(p=65535&M),G=343*(H=65535&G),d=343*(U=65535&d),m=343*(L=65535&m),b=343*(k=65535&b),J=343*(N=65535&J),S=343*(R=65535&S),v=343*(Y=65535&v),P=343*(q=65535&P),x=343*(X=65535&x),Z=343*(V=65535&Z),K=343*(O=65535&K),W=343*(j=65535&W),z=343*(T=65535&z),_=343*($=65535&_),AA=343*(IA=65535&AA),gA=343*(CA=65535&gA),tA=343*(QA=65535&tA),iA=343*(BA=65535&iA),EA=343*(eA=65535&EA),nA=343*(aA=65535&nA),oA=343*(rA=65535&oA),hA=343*(sA=65535&hA),wA=343*fA,z+=(i^=I>>6&63|128)<<8,_+=e<<8,AA+=a<<8,gA+=r<<8,tA+=f<<8,iA+=c<<8,EA+=u<<8,nA+=F<<8,oA+=p<<8,hA+=H<<8,wA+=U<<8,i=65535&(Q=343*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),fA=wA+((hA+=oA>>>16)>>>16)&65535,sA=65535&hA,i^=63&I|128);return w(E[fA>>8]+E[255&fA]+E[sA>>8]+E[255&sA]+E[rA>>8]+E[255&rA]+E[aA>>8]+E[255&aA]+E[eA>>8]+E[255&eA]+E[BA>>8]+E[255&BA]+E[QA>>8]+E[255&QA]+E[CA>>8]+E[255&CA]+E[IA>>8]+E[255&IA]+E[$>>8]+E[255&$]+E[T>>8]+E[255&T]+E[j>>8]+E[255&j]+E[O>>8]+E[255&O]+E[V>>8]+E[255&V]+E[X>>8]+E[255&X]+E[q>>8]+E[255&q]+E[Y>>8]+E[255&Y]+E[R>>8]+E[255&R]+E[N>>8]+E[255&N]+E[k>>8]+E[255&k]+E[L>>8]+E[255&L]+E[U>>8]+E[255&U]+E[H>>8]+E[255&H]+E[p>>8]+E[255&p]+E[F>>8]+E[255&F]+E[u>>8]+E[255&u]+E[c>>8]+E[255&c]+E[f>>8]+E[255&f]+E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],512)}function O(A){var I,g=A.length-3,C=h[1024].offset,t=0,Q=0|C[63],i=0,B=0|C[62],e=0,n=0|C[61],a=0,o=0|C[60],r=0,s=0|C[59],f=0,D=0|C[58],c=0,y=0|C[57],u=0,l=0|C[56],F=0,M=0|C[55],p=0,G=0|C[54],H=0,d=0|C[53],U=0,m=0|C[52],L=0,b=0|C[51],k=0,J=0|C[50],N=0,S=0|C[49],R=0,v=0|C[48],Y=0,P=0|C[47],q=0,x=0|C[46],X=0,Z=0|C[45],V=0,K=0|C[44],O=0,W=0|C[43],j=0,z=0|C[42],T=0,_=0|C[41],$=0,AA=0|C[40],IA=0,gA=0|C[39],CA=0,tA=0|C[38],QA=0,iA=0|C[37],BA=0,EA=0|C[36],eA=0,nA=0|C[35],aA=0,oA=0|C[34],rA=0,hA=0|C[33],sA=0,wA=0|C[32],fA=0,DA=0|C[31],cA=0,yA=0|C[30],uA=0,lA=0|C[29],FA=0,MA=0|C[28],pA=0,GA=0|C[27],HA=0,dA=0|C[26],UA=0,mA=0|C[25],LA=0,bA=0|C[24],kA=0,JA=0|C[23],NA=0,SA=0|C[22],RA=0,vA=0|C[21],YA=0,PA=0|C[20],qA=0,xA=0|C[19],XA=0,ZA=0|C[18],VA=0,KA=0|C[17],OA=0,WA=0|C[16],jA=0,zA=0|C[15],TA=0,_A=0|C[14],$A=0,AI=0|C[13],II=0,gI=0|C[12],CI=0,tI=0|C[11],QI=0,iI=0|C[10],BI=0,EI=0|C[9],eI=0,nI=0|C[8],aI=0,oI=0|C[7],rI=0,hI=0|C[6],sI=0,wI=0|C[5],fI=0,DI=0|C[4],cI=0,yI=0|C[3],uI=0,lI=0|C[2],FI=0,MI=0|C[1],pI=0,GI=0|C[0];for(I=0;I>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=397*(B=65535&i),e=397*(n=65535&e),a=397*(o=65535&a),r=397*(s=65535&r),f=397*(D=65535&f),c=397*(y=65535&c),u=397*(l=65535&u),F=397*(M=65535&F),p=397*(G=65535&p),H=397*(d=65535&H),U=397*(m=65535&U),L=397*(b=65535&L),k=397*(J=65535&k),N=397*(S=65535&N),R=397*(v=65535&R),Y=397*(P=65535&Y),q=397*(x=65535&q),X=397*(Z=65535&X),V=397*(K=65535&V),O=397*(W=65535&O),j=397*(z=65535&j),T=397*(_=65535&T),$=397*(AA=65535&$),IA=397*(gA=65535&IA),CA=397*(tA=65535&CA),QA=397*(iA=65535&QA),BA=397*(EA=65535&BA),eA=397*(nA=65535&eA),aA=397*(oA=65535&aA),rA=397*(hA=65535&rA),sA=397*(wA=65535&sA),fA=397*(DA=65535&fA),cA=397*(yA=65535&cA),uA=397*(lA=65535&uA),FA=397*(MA=65535&FA),pA=397*(GA=65535&pA),HA=397*(dA=65535&HA),UA=397*(mA=65535&UA),LA=397*(bA=65535&LA),kA=397*(JA=65535&kA),NA=397*(SA=65535&NA),RA=397*(vA=65535&RA),YA=397*(PA=65535&YA),qA=397*(xA=65535&qA),XA=397*(ZA=65535&XA),VA=397*(KA=65535&VA),OA=397*(WA=65535&OA),jA=397*(zA=65535&jA),TA=397*(_A=65535&TA),$A=397*(AI=65535&$A),II=397*(gI=65535&II),CI=397*(tI=65535&CI),QI=397*(iI=65535&QI),BI=397*(EI=65535&BI),eI=397*(nI=65535&eI),aI=397*(oI=65535&aI),rI=397*(hI=65535&rI),sI=397*(wI=65535&sI),fI=397*(DI=65535&fI),cI=397*(yI=65535&cI),uI=397*(lI=65535&uI),FI=397*(MI=65535&FI),pI=397*GI,RA+=(Q^=A.charCodeAt(I++))<<8,YA+=B<<8,qA+=n<<8,XA+=o<<8,VA+=s<<8,OA+=D<<8,jA+=y<<8,TA+=l<<8,$A+=M<<8,II+=G<<8,CI+=d<<8,QI+=m<<8,BI+=b<<8,eI+=J<<8,aI+=S<<8,rI+=v<<8,sI+=P<<8,fI+=x<<8,cI+=Z<<8,uI+=K<<8,FI+=W<<8,Q=65535&(t=397*Q),GI=(pI+=z<<8)+((FI+=(uI+=(cI+=(fI+=(sI+=(rI+=(aI+=(eI+=(BI+=(QI+=(CI+=(II+=($A+=(TA+=(jA+=(OA+=(VA+=(XA+=(qA+=(YA+=(RA+=(NA+=(kA+=(LA+=(UA+=(HA+=(pA+=(FA+=(uA+=(cA+=(fA+=(sA+=(rA+=(aA+=(eA+=(BA+=(QA+=(CA+=(IA+=($+=(T+=(j+=(O+=(V+=(X+=(q+=(Y+=(R+=(N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=397*(B=65535&i),e=397*(n=65535&e),a=397*(o=65535&a),r=397*(s=65535&r),f=397*(D=65535&f),c=397*(y=65535&c),u=397*(l=65535&u),F=397*(M=65535&F),p=397*(G=65535&p),H=397*(d=65535&H),U=397*(m=65535&U),L=397*(b=65535&L),k=397*(J=65535&k),N=397*(S=65535&N),R=397*(v=65535&R),Y=397*(P=65535&Y),q=397*(x=65535&q),X=397*(Z=65535&X),V=397*(K=65535&V),O=397*(W=65535&O),j=397*(z=65535&j),T=397*(_=65535&T),$=397*(AA=65535&$),IA=397*(gA=65535&IA),CA=397*(tA=65535&CA),QA=397*(iA=65535&QA),BA=397*(EA=65535&BA),eA=397*(nA=65535&eA),aA=397*(oA=65535&aA),rA=397*(hA=65535&rA),sA=397*(wA=65535&sA),fA=397*(DA=65535&fA),cA=397*(yA=65535&cA),uA=397*(lA=65535&uA),FA=397*(MA=65535&FA),pA=397*(GA=65535&pA),HA=397*(dA=65535&HA),UA=397*(mA=65535&UA),LA=397*(bA=65535&LA),kA=397*(JA=65535&kA),NA=397*(SA=65535&NA),RA=397*(vA=65535&RA),YA=397*(PA=65535&YA),qA=397*(xA=65535&qA),XA=397*(ZA=65535&XA),VA=397*(KA=65535&VA),OA=397*(WA=65535&OA),jA=397*(zA=65535&jA),TA=397*(_A=65535&TA),$A=397*(AI=65535&$A),II=397*(gI=65535&II),CI=397*(tI=65535&CI),QI=397*(iI=65535&QI),BI=397*(EI=65535&BI),eI=397*(nI=65535&eI),aI=397*(oI=65535&aI),rI=397*(hI=65535&rI),sI=397*(wI=65535&sI),fI=397*(DI=65535&fI),cI=397*(yI=65535&cI),uI=397*(lI=65535&uI),FI=397*(MI=65535&FI),pI=397*GI,RA+=(Q^=A.charCodeAt(I++))<<8,YA+=B<<8,qA+=n<<8,XA+=o<<8,VA+=s<<8,OA+=D<<8,jA+=y<<8,TA+=l<<8,$A+=M<<8,II+=G<<8,CI+=d<<8,QI+=m<<8,BI+=b<<8,eI+=J<<8,aI+=S<<8,rI+=v<<8,sI+=P<<8,fI+=x<<8,cI+=Z<<8,uI+=K<<8,FI+=W<<8,Q=65535&(t=397*Q),GI=(pI+=z<<8)+((FI+=(uI+=(cI+=(fI+=(sI+=(rI+=(aI+=(eI+=(BI+=(QI+=(CI+=(II+=($A+=(TA+=(jA+=(OA+=(VA+=(XA+=(qA+=(YA+=(RA+=(NA+=(kA+=(LA+=(UA+=(HA+=(pA+=(FA+=(uA+=(cA+=(fA+=(sA+=(rA+=(aA+=(eA+=(BA+=(QA+=(CA+=(IA+=($+=(T+=(j+=(O+=(V+=(X+=(q+=(Y+=(R+=(N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=397*(B=65535&i),e=397*(n=65535&e),a=397*(o=65535&a),r=397*(s=65535&r),f=397*(D=65535&f),c=397*(y=65535&c),u=397*(l=65535&u),F=397*(M=65535&F),p=397*(G=65535&p),H=397*(d=65535&H),U=397*(m=65535&U),L=397*(b=65535&L),k=397*(J=65535&k),N=397*(S=65535&N),R=397*(v=65535&R),Y=397*(P=65535&Y),q=397*(x=65535&q),X=397*(Z=65535&X),V=397*(K=65535&V),O=397*(W=65535&O),j=397*(z=65535&j),T=397*(_=65535&T),$=397*(AA=65535&$),IA=397*(gA=65535&IA),CA=397*(tA=65535&CA),QA=397*(iA=65535&QA),BA=397*(EA=65535&BA),eA=397*(nA=65535&eA),aA=397*(oA=65535&aA),rA=397*(hA=65535&rA),sA=397*(wA=65535&sA),fA=397*(DA=65535&fA),cA=397*(yA=65535&cA),uA=397*(lA=65535&uA),FA=397*(MA=65535&FA),pA=397*(GA=65535&pA),HA=397*(dA=65535&HA),UA=397*(mA=65535&UA),LA=397*(bA=65535&LA),kA=397*(JA=65535&kA),NA=397*(SA=65535&NA),RA=397*(vA=65535&RA),YA=397*(PA=65535&YA),qA=397*(xA=65535&qA),XA=397*(ZA=65535&XA),VA=397*(KA=65535&VA),OA=397*(WA=65535&OA),jA=397*(zA=65535&jA),TA=397*(_A=65535&TA),$A=397*(AI=65535&$A),II=397*(gI=65535&II),CI=397*(tI=65535&CI),QI=397*(iI=65535&QI),BI=397*(EI=65535&BI),eI=397*(nI=65535&eI),aI=397*(oI=65535&aI),rI=397*(hI=65535&rI),sI=397*(wI=65535&sI),fI=397*(DI=65535&fI),cI=397*(yI=65535&cI),uI=397*(lI=65535&uI),FI=397*(MI=65535&FI),pI=397*GI,RA+=(Q^=A.charCodeAt(I++))<<8,YA+=B<<8,qA+=n<<8,XA+=o<<8,VA+=s<<8,OA+=D<<8,jA+=y<<8,TA+=l<<8,$A+=M<<8,II+=G<<8,CI+=d<<8,QI+=m<<8,BI+=b<<8,eI+=J<<8,aI+=S<<8,rI+=v<<8,sI+=P<<8,fI+=x<<8,cI+=Z<<8,uI+=K<<8,FI+=W<<8,pI+=z<<8,Q=65535&(t=397*Q),B=65535&(i+=t>>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),S=65535&(N+=k>>>16),v=65535&(R+=N>>>16),P=65535&(Y+=R>>>16),x=65535&(q+=Y>>>16),Z=65535&(X+=q>>>16),K=65535&(V+=X>>>16),W=65535&(O+=V>>>16),z=65535&(j+=O>>>16),_=65535&(T+=j>>>16),AA=65535&($+=T>>>16),gA=65535&(IA+=$>>>16),tA=65535&(CA+=IA>>>16),iA=65535&(QA+=CA>>>16),EA=65535&(BA+=QA>>>16),nA=65535&(eA+=BA>>>16),oA=65535&(aA+=eA>>>16),hA=65535&(rA+=aA>>>16),wA=65535&(sA+=rA>>>16),DA=65535&(fA+=sA>>>16),yA=65535&(cA+=fA>>>16),lA=65535&(uA+=cA>>>16),MA=65535&(FA+=uA>>>16),GA=65535&(pA+=FA>>>16),dA=65535&(HA+=pA>>>16),mA=65535&(UA+=HA>>>16),bA=65535&(LA+=UA>>>16),JA=65535&(kA+=LA>>>16),SA=65535&(NA+=kA>>>16),vA=65535&(RA+=NA>>>16),PA=65535&(YA+=RA>>>16),xA=65535&(qA+=YA>>>16),ZA=65535&(XA+=qA>>>16),KA=65535&(VA+=XA>>>16),WA=65535&(OA+=VA>>>16),zA=65535&(jA+=OA>>>16),_A=65535&(TA+=jA>>>16),AI=65535&($A+=TA>>>16),gI=65535&(II+=$A>>>16),tI=65535&(CI+=II>>>16),iI=65535&(QI+=CI>>>16),EI=65535&(BI+=QI>>>16),nI=65535&(eI+=BI>>>16),oI=65535&(aI+=eI>>>16),hI=65535&(rI+=aI>>>16),wI=65535&(sI+=rI>>>16),DI=65535&(fI+=sI>>>16),yI=65535&(cI+=fI>>>16),lI=65535&(uI+=cI>>>16),GI=pI+((FI+=uI>>>16)>>>16)&65535,MI=65535&FI;for(;I>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),S=65535&(N+=k>>>16),v=65535&(R+=N>>>16),P=65535&(Y+=R>>>16),x=65535&(q+=Y>>>16),Z=65535&(X+=q>>>16),K=65535&(V+=X>>>16),W=65535&(O+=V>>>16),z=65535&(j+=O>>>16),_=65535&(T+=j>>>16),AA=65535&($+=T>>>16),gA=65535&(IA+=$>>>16),tA=65535&(CA+=IA>>>16),iA=65535&(QA+=CA>>>16),EA=65535&(BA+=QA>>>16),nA=65535&(eA+=BA>>>16),oA=65535&(aA+=eA>>>16),hA=65535&(rA+=aA>>>16),wA=65535&(sA+=rA>>>16),DA=65535&(fA+=sA>>>16),yA=65535&(cA+=fA>>>16),lA=65535&(uA+=cA>>>16),MA=65535&(FA+=uA>>>16),GA=65535&(pA+=FA>>>16),dA=65535&(HA+=pA>>>16),mA=65535&(UA+=HA>>>16),bA=65535&(LA+=UA>>>16),JA=65535&(kA+=LA>>>16),SA=65535&(NA+=kA>>>16),vA=65535&(RA+=NA>>>16),PA=65535&(YA+=RA>>>16),xA=65535&(qA+=YA>>>16),ZA=65535&(XA+=qA>>>16),KA=65535&(VA+=XA>>>16),WA=65535&(OA+=VA>>>16),zA=65535&(jA+=OA>>>16),_A=65535&(TA+=jA>>>16),AI=65535&($A+=TA>>>16),gI=65535&(II+=$A>>>16),tI=65535&(CI+=II>>>16),iI=65535&(QI+=CI>>>16),EI=65535&(BI+=QI>>>16),nI=65535&(eI+=BI>>>16),oI=65535&(aI+=eI>>>16),hI=65535&(rI+=aI>>>16),wI=65535&(sI+=rI>>>16),DI=65535&(fI+=sI>>>16),yI=65535&(cI+=fI>>>16),lI=65535&(uI+=cI>>>16),GI=pI+((FI+=uI>>>16)>>>16)&65535,MI=65535&FI;return w(E[GI>>8]+E[255&GI]+E[MI>>8]+E[255&MI]+E[lI>>8]+E[255&lI]+E[yI>>8]+E[255&yI]+E[DI>>8]+E[255&DI]+E[wI>>8]+E[255&wI]+E[hI>>8]+E[255&hI]+E[oI>>8]+E[255&oI]+E[nI>>8]+E[255&nI]+E[EI>>8]+E[255&EI]+E[iI>>8]+E[255&iI]+E[tI>>8]+E[255&tI]+E[gI>>8]+E[255&gI]+E[AI>>8]+E[255&AI]+E[_A>>8]+E[255&_A]+E[zA>>8]+E[255&zA]+E[WA>>8]+E[255&WA]+E[KA>>8]+E[255&KA]+E[ZA>>8]+E[255&ZA]+E[xA>>8]+E[255&xA]+E[PA>>8]+E[255&PA]+E[vA>>8]+E[255&vA]+E[SA>>8]+E[255&SA]+E[JA>>8]+E[255&JA]+E[bA>>8]+E[255&bA]+E[mA>>8]+E[255&mA]+E[dA>>8]+E[255&dA]+E[GA>>8]+E[255&GA]+E[MA>>8]+E[255&MA]+E[lA>>8]+E[255&lA]+E[yA>>8]+E[255&yA]+E[DA>>8]+E[255&DA]+E[wA>>8]+E[255&wA]+E[hA>>8]+E[255&hA]+E[oA>>8]+E[255&oA]+E[nA>>8]+E[255&nA]+E[EA>>8]+E[255&EA]+E[iA>>8]+E[255&iA]+E[tA>>8]+E[255&tA]+E[gA>>8]+E[255&gA]+E[AA>>8]+E[255&AA]+E[_>>8]+E[255&_]+E[z>>8]+E[255&z]+E[W>>8]+E[255&W]+E[K>>8]+E[255&K]+E[Z>>8]+E[255&Z]+E[x>>8]+E[255&x]+E[P>>8]+E[255&P]+E[v>>8]+E[255&v]+E[S>>8]+E[255&S]+E[J>>8]+E[255&J]+E[b>>8]+E[255&b]+E[m>>8]+E[255&m]+E[d>>8]+E[255&d]+E[G>>8]+E[255&G]+E[M>>8]+E[255&M]+E[l>>8]+E[255&l]+E[y>>8]+E[255&y]+E[D>>8]+E[255&D]+E[s>>8]+E[255&s]+E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],1024)}function W(A){var I,g=A.length-3,C=h[1024].offset,t=0,Q=0|C[63],i=0,B=0|C[62],e=0,n=0|C[61],a=0,o=0|C[60],r=0,s=0|C[59],f=0,D=0|C[58],c=0,y=0|C[57],u=0,l=0|C[56],F=0,M=0|C[55],p=0,G=0|C[54],H=0,d=0|C[53],U=0,m=0|C[52],L=0,b=0|C[51],k=0,J=0|C[50],N=0,S=0|C[49],R=0,v=0|C[48],Y=0,P=0|C[47],q=0,x=0|C[46],X=0,Z=0|C[45],V=0,K=0|C[44],O=0,W=0|C[43],j=0,z=0|C[42],T=0,_=0|C[41],$=0,AA=0|C[40],IA=0,gA=0|C[39],CA=0,tA=0|C[38],QA=0,iA=0|C[37],BA=0,EA=0|C[36],eA=0,nA=0|C[35],aA=0,oA=0|C[34],rA=0,hA=0|C[33],sA=0,wA=0|C[32],fA=0,DA=0|C[31],cA=0,yA=0|C[30],uA=0,lA=0|C[29],FA=0,MA=0|C[28],pA=0,GA=0|C[27],HA=0,dA=0|C[26],UA=0,mA=0|C[25],LA=0,bA=0|C[24],kA=0,JA=0|C[23],NA=0,SA=0|C[22],RA=0,vA=0|C[21],YA=0,PA=0|C[20],qA=0,xA=0|C[19],XA=0,ZA=0|C[18],VA=0,KA=0|C[17],OA=0,WA=0|C[16],jA=0,zA=0|C[15],TA=0,_A=0|C[14],$A=0,AI=0|C[13],II=0,gI=0|C[12],CI=0,tI=0|C[11],QI=0,iI=0|C[10],BI=0,EI=0|C[9],eI=0,nI=0|C[8],aI=0,oI=0|C[7],rI=0,hI=0|C[6],sI=0,wI=0|C[5],fI=0,DI=0|C[4],cI=0,yI=0|C[3],uI=0,lI=0|C[2],FI=0,MI=0|C[1],pI=0,GI=0|C[0];for(I=0;I>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=397*(B=65535&i),e=397*(n=65535&e),a=397*(o=65535&a),r=397*(s=65535&r),f=397*(D=65535&f),c=397*(y=65535&c),u=397*(l=65535&u),F=397*(M=65535&F),p=397*(G=65535&p),H=397*(d=65535&H),U=397*(m=65535&U),L=397*(b=65535&L),k=397*(J=65535&k),N=397*(S=65535&N),R=397*(v=65535&R),Y=397*(P=65535&Y),q=397*(x=65535&q),X=397*(Z=65535&X),V=397*(K=65535&V),O=397*(W=65535&O),j=397*(z=65535&j),T=397*(_=65535&T),$=397*(AA=65535&$),IA=397*(gA=65535&IA),CA=397*(tA=65535&CA),QA=397*(iA=65535&QA),BA=397*(EA=65535&BA),eA=397*(nA=65535&eA),aA=397*(oA=65535&aA),rA=397*(hA=65535&rA),sA=397*(wA=65535&sA),fA=397*(DA=65535&fA),cA=397*(yA=65535&cA),uA=397*(lA=65535&uA),FA=397*(MA=65535&FA),pA=397*(GA=65535&pA),HA=397*(dA=65535&HA),UA=397*(mA=65535&UA),LA=397*(bA=65535&LA),kA=397*(JA=65535&kA),NA=397*(SA=65535&NA),RA=397*(vA=65535&RA),YA=397*(PA=65535&YA),qA=397*(xA=65535&qA),XA=397*(ZA=65535&XA),VA=397*(KA=65535&VA),OA=397*(WA=65535&OA),jA=397*(zA=65535&jA),TA=397*(_A=65535&TA),$A=397*(AI=65535&$A),II=397*(gI=65535&II),CI=397*(tI=65535&CI),QI=397*(iI=65535&QI),BI=397*(EI=65535&BI),eI=397*(nI=65535&eI),aI=397*(oI=65535&aI),rI=397*(hI=65535&rI),sI=397*(wI=65535&sI),fI=397*(DI=65535&fI),cI=397*(yI=65535&cI),uI=397*(lI=65535&uI),FI=397*(MI=65535&FI),pI=397*GI,RA+=(Q^=A.charCodeAt(I++))<<8,YA+=B<<8,qA+=n<<8,XA+=o<<8,VA+=s<<8,OA+=D<<8,jA+=y<<8,TA+=l<<8,$A+=M<<8,II+=G<<8,CI+=d<<8,QI+=m<<8,BI+=b<<8,eI+=J<<8,aI+=S<<8,rI+=v<<8,sI+=P<<8,fI+=x<<8,cI+=Z<<8,uI+=K<<8,FI+=W<<8,Q=65535&(t=397*Q),GI=(pI+=z<<8)+((FI+=(uI+=(cI+=(fI+=(sI+=(rI+=(aI+=(eI+=(BI+=(QI+=(CI+=(II+=($A+=(TA+=(jA+=(OA+=(VA+=(XA+=(qA+=(YA+=(RA+=(NA+=(kA+=(LA+=(UA+=(HA+=(pA+=(FA+=(uA+=(cA+=(fA+=(sA+=(rA+=(aA+=(eA+=(BA+=(QA+=(CA+=(IA+=($+=(T+=(j+=(O+=(V+=(X+=(q+=(Y+=(R+=(N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=397*(B=65535&i),e=397*(n=65535&e),a=397*(o=65535&a),r=397*(s=65535&r),f=397*(D=65535&f),c=397*(y=65535&c),u=397*(l=65535&u),F=397*(M=65535&F),p=397*(G=65535&p),H=397*(d=65535&H),U=397*(m=65535&U),L=397*(b=65535&L),k=397*(J=65535&k),N=397*(S=65535&N),R=397*(v=65535&R),Y=397*(P=65535&Y),q=397*(x=65535&q),X=397*(Z=65535&X),V=397*(K=65535&V),O=397*(W=65535&O),j=397*(z=65535&j),T=397*(_=65535&T),$=397*(AA=65535&$),IA=397*(gA=65535&IA),CA=397*(tA=65535&CA),QA=397*(iA=65535&QA),BA=397*(EA=65535&BA),eA=397*(nA=65535&eA),aA=397*(oA=65535&aA),rA=397*(hA=65535&rA),sA=397*(wA=65535&sA),fA=397*(DA=65535&fA),cA=397*(yA=65535&cA),uA=397*(lA=65535&uA),FA=397*(MA=65535&FA),pA=397*(GA=65535&pA),HA=397*(dA=65535&HA),UA=397*(mA=65535&UA),LA=397*(bA=65535&LA),kA=397*(JA=65535&kA),NA=397*(SA=65535&NA),RA=397*(vA=65535&RA),YA=397*(PA=65535&YA),qA=397*(xA=65535&qA),XA=397*(ZA=65535&XA),VA=397*(KA=65535&VA),OA=397*(WA=65535&OA),jA=397*(zA=65535&jA),TA=397*(_A=65535&TA),$A=397*(AI=65535&$A),II=397*(gI=65535&II),CI=397*(tI=65535&CI),QI=397*(iI=65535&QI),BI=397*(EI=65535&BI),eI=397*(nI=65535&eI),aI=397*(oI=65535&aI),rI=397*(hI=65535&rI),sI=397*(wI=65535&sI),fI=397*(DI=65535&fI),cI=397*(yI=65535&cI),uI=397*(lI=65535&uI),FI=397*(MI=65535&FI),pI=397*GI,RA+=(Q^=A.charCodeAt(I++))<<8,YA+=B<<8,qA+=n<<8,XA+=o<<8,VA+=s<<8,OA+=D<<8,jA+=y<<8,TA+=l<<8,$A+=M<<8,II+=G<<8,CI+=d<<8,QI+=m<<8,BI+=b<<8,eI+=J<<8,aI+=S<<8,rI+=v<<8,sI+=P<<8,fI+=x<<8,cI+=Z<<8,uI+=K<<8,FI+=W<<8,Q=65535&(t=397*Q),GI=(pI+=z<<8)+((FI+=(uI+=(cI+=(fI+=(sI+=(rI+=(aI+=(eI+=(BI+=(QI+=(CI+=(II+=($A+=(TA+=(jA+=(OA+=(VA+=(XA+=(qA+=(YA+=(RA+=(NA+=(kA+=(LA+=(UA+=(HA+=(pA+=(FA+=(uA+=(cA+=(fA+=(sA+=(rA+=(aA+=(eA+=(BA+=(QA+=(CA+=(IA+=($+=(T+=(j+=(O+=(V+=(X+=(q+=(Y+=(R+=(N+=(k+=(L+=(U+=(H+=(p+=(F+=(u+=(c+=(f+=(r+=(a+=(e+=(i+=t>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,i=397*(B=65535&i),e=397*(n=65535&e),a=397*(o=65535&a),r=397*(s=65535&r),f=397*(D=65535&f),c=397*(y=65535&c),u=397*(l=65535&u),F=397*(M=65535&F),p=397*(G=65535&p),H=397*(d=65535&H),U=397*(m=65535&U),L=397*(b=65535&L),k=397*(J=65535&k),N=397*(S=65535&N),R=397*(v=65535&R),Y=397*(P=65535&Y),q=397*(x=65535&q),X=397*(Z=65535&X),V=397*(K=65535&V),O=397*(W=65535&O),j=397*(z=65535&j),T=397*(_=65535&T),$=397*(AA=65535&$),IA=397*(gA=65535&IA),CA=397*(tA=65535&CA),QA=397*(iA=65535&QA),BA=397*(EA=65535&BA),eA=397*(nA=65535&eA),aA=397*(oA=65535&aA),rA=397*(hA=65535&rA),sA=397*(wA=65535&sA),fA=397*(DA=65535&fA),cA=397*(yA=65535&cA),uA=397*(lA=65535&uA),FA=397*(MA=65535&FA),pA=397*(GA=65535&pA),HA=397*(dA=65535&HA),UA=397*(mA=65535&UA),LA=397*(bA=65535&LA),kA=397*(JA=65535&kA),NA=397*(SA=65535&NA),RA=397*(vA=65535&RA),YA=397*(PA=65535&YA),qA=397*(xA=65535&qA),XA=397*(ZA=65535&XA),VA=397*(KA=65535&VA),OA=397*(WA=65535&OA),jA=397*(zA=65535&jA),TA=397*(_A=65535&TA),$A=397*(AI=65535&$A),II=397*(gI=65535&II),CI=397*(tI=65535&CI),QI=397*(iI=65535&QI),BI=397*(EI=65535&BI),eI=397*(nI=65535&eI),aI=397*(oI=65535&aI),rI=397*(hI=65535&rI),sI=397*(wI=65535&sI),fI=397*(DI=65535&fI),cI=397*(yI=65535&cI),uI=397*(lI=65535&uI),FI=397*(MI=65535&FI),pI=397*GI,RA+=(Q^=A.charCodeAt(I++))<<8,YA+=B<<8,qA+=n<<8,XA+=o<<8,VA+=s<<8,OA+=D<<8,jA+=y<<8,TA+=l<<8,$A+=M<<8,II+=G<<8,CI+=d<<8,QI+=m<<8,BI+=b<<8,eI+=J<<8,aI+=S<<8,rI+=v<<8,sI+=P<<8,fI+=x<<8,cI+=Z<<8,uI+=K<<8,FI+=W<<8,pI+=z<<8,Q=65535&(t=397*Q),B=65535&(i+=t>>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),S=65535&(N+=k>>>16),v=65535&(R+=N>>>16),P=65535&(Y+=R>>>16),x=65535&(q+=Y>>>16),Z=65535&(X+=q>>>16),K=65535&(V+=X>>>16),W=65535&(O+=V>>>16),z=65535&(j+=O>>>16),_=65535&(T+=j>>>16),AA=65535&($+=T>>>16),gA=65535&(IA+=$>>>16),tA=65535&(CA+=IA>>>16),iA=65535&(QA+=CA>>>16),EA=65535&(BA+=QA>>>16),nA=65535&(eA+=BA>>>16),oA=65535&(aA+=eA>>>16),hA=65535&(rA+=aA>>>16),wA=65535&(sA+=rA>>>16),DA=65535&(fA+=sA>>>16),yA=65535&(cA+=fA>>>16),lA=65535&(uA+=cA>>>16),MA=65535&(FA+=uA>>>16),GA=65535&(pA+=FA>>>16),dA=65535&(HA+=pA>>>16),mA=65535&(UA+=HA>>>16),bA=65535&(LA+=UA>>>16),JA=65535&(kA+=LA>>>16),SA=65535&(NA+=kA>>>16),vA=65535&(RA+=NA>>>16),PA=65535&(YA+=RA>>>16),xA=65535&(qA+=YA>>>16),ZA=65535&(XA+=qA>>>16),KA=65535&(VA+=XA>>>16),WA=65535&(OA+=VA>>>16),zA=65535&(jA+=OA>>>16),_A=65535&(TA+=jA>>>16),AI=65535&($A+=TA>>>16),gI=65535&(II+=$A>>>16),tI=65535&(CI+=II>>>16),iI=65535&(QI+=CI>>>16),EI=65535&(BI+=QI>>>16),nI=65535&(eI+=BI>>>16),oI=65535&(aI+=eI>>>16),hI=65535&(rI+=aI>>>16),wI=65535&(sI+=rI>>>16),DI=65535&(fI+=sI>>>16),yI=65535&(cI+=fI>>>16),lI=65535&(uI+=cI>>>16),GI=pI+((FI+=uI>>>16)>>>16)&65535,MI=65535&FI,Q^=A.charCodeAt(I++);for(;I>>16),n=65535&(e+=i>>>16),o=65535&(a+=e>>>16),s=65535&(r+=a>>>16),D=65535&(f+=r>>>16),y=65535&(c+=f>>>16),l=65535&(u+=c>>>16),M=65535&(F+=u>>>16),G=65535&(p+=F>>>16),d=65535&(H+=p>>>16),m=65535&(U+=H>>>16),b=65535&(L+=U>>>16),J=65535&(k+=L>>>16),S=65535&(N+=k>>>16),v=65535&(R+=N>>>16),P=65535&(Y+=R>>>16),x=65535&(q+=Y>>>16),Z=65535&(X+=q>>>16),K=65535&(V+=X>>>16),W=65535&(O+=V>>>16),z=65535&(j+=O>>>16),_=65535&(T+=j>>>16),AA=65535&($+=T>>>16),gA=65535&(IA+=$>>>16),tA=65535&(CA+=IA>>>16),iA=65535&(QA+=CA>>>16),EA=65535&(BA+=QA>>>16),nA=65535&(eA+=BA>>>16),oA=65535&(aA+=eA>>>16),hA=65535&(rA+=aA>>>16),wA=65535&(sA+=rA>>>16),DA=65535&(fA+=sA>>>16),yA=65535&(cA+=fA>>>16),lA=65535&(uA+=cA>>>16),MA=65535&(FA+=uA>>>16),GA=65535&(pA+=FA>>>16),dA=65535&(HA+=pA>>>16),mA=65535&(UA+=HA>>>16),bA=65535&(LA+=UA>>>16),JA=65535&(kA+=LA>>>16),SA=65535&(NA+=kA>>>16),vA=65535&(RA+=NA>>>16),PA=65535&(YA+=RA>>>16),xA=65535&(qA+=YA>>>16),ZA=65535&(XA+=qA>>>16),KA=65535&(VA+=XA>>>16),WA=65535&(OA+=VA>>>16),zA=65535&(jA+=OA>>>16),_A=65535&(TA+=jA>>>16),AI=65535&($A+=TA>>>16),gI=65535&(II+=$A>>>16),tI=65535&(CI+=II>>>16),iI=65535&(QI+=CI>>>16),EI=65535&(BI+=QI>>>16),nI=65535&(eI+=BI>>>16),oI=65535&(aI+=eI>>>16),hI=65535&(rI+=aI>>>16),wI=65535&(sI+=rI>>>16),DI=65535&(fI+=sI>>>16),yI=65535&(cI+=fI>>>16),lI=65535&(uI+=cI>>>16),GI=pI+((FI+=uI>>>16)>>>16)&65535,MI=65535&FI,Q^=A.charCodeAt(I++);return w(E[GI>>8]+E[255&GI]+E[MI>>8]+E[255&MI]+E[lI>>8]+E[255&lI]+E[yI>>8]+E[255&yI]+E[DI>>8]+E[255&DI]+E[wI>>8]+E[255&wI]+E[hI>>8]+E[255&hI]+E[oI>>8]+E[255&oI]+E[nI>>8]+E[255&nI]+E[EI>>8]+E[255&EI]+E[iI>>8]+E[255&iI]+E[tI>>8]+E[255&tI]+E[gI>>8]+E[255&gI]+E[AI>>8]+E[255&AI]+E[_A>>8]+E[255&_A]+E[zA>>8]+E[255&zA]+E[WA>>8]+E[255&WA]+E[KA>>8]+E[255&KA]+E[ZA>>8]+E[255&ZA]+E[xA>>8]+E[255&xA]+E[PA>>8]+E[255&PA]+E[vA>>8]+E[255&vA]+E[SA>>8]+E[255&SA]+E[JA>>8]+E[255&JA]+E[bA>>8]+E[255&bA]+E[mA>>8]+E[255&mA]+E[dA>>8]+E[255&dA]+E[GA>>8]+E[255&GA]+E[MA>>8]+E[255&MA]+E[lA>>8]+E[255&lA]+E[yA>>8]+E[255&yA]+E[DA>>8]+E[255&DA]+E[wA>>8]+E[255&wA]+E[hA>>8]+E[255&hA]+E[oA>>8]+E[255&oA]+E[nA>>8]+E[255&nA]+E[EA>>8]+E[255&EA]+E[iA>>8]+E[255&iA]+E[tA>>8]+E[255&tA]+E[gA>>8]+E[255&gA]+E[AA>>8]+E[255&AA]+E[_>>8]+E[255&_]+E[z>>8]+E[255&z]+E[W>>8]+E[255&W]+E[K>>8]+E[255&K]+E[Z>>8]+E[255&Z]+E[x>>8]+E[255&x]+E[P>>8]+E[255&P]+E[v>>8]+E[255&v]+E[S>>8]+E[255&S]+E[J>>8]+E[255&J]+E[b>>8]+E[255&b]+E[m>>8]+E[255&m]+E[d>>8]+E[255&d]+E[G>>8]+E[255&G]+E[M>>8]+E[255&M]+E[l>>8]+E[255&l]+E[y>>8]+E[255&y]+E[D>>8]+E[255&D]+E[s>>8]+E[255&s]+E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q],1024)}function j(A){var I,g,C=A.length,t=h[1024].offset,Q=0,i=0|t[63],B=0,e=0|t[62],n=0,a=0|t[61],o=0,r=0|t[60],s=0,f=0|t[59],D=0,c=0|t[58],y=0,u=0|t[57],l=0,F=0|t[56],M=0,p=0|t[55],G=0,H=0|t[54],d=0,U=0|t[53],m=0,L=0|t[52],b=0,k=0|t[51],J=0,N=0|t[50],S=0,R=0|t[49],v=0,Y=0|t[48],P=0,q=0|t[47],x=0,X=0|t[46],Z=0,V=0|t[45],K=0,O=0|t[44],W=0,j=0|t[43],z=0,T=0|t[42],_=0,$=0|t[41],AA=0,IA=0|t[40],gA=0,CA=0|t[39],tA=0,QA=0|t[38],iA=0,BA=0|t[37],EA=0,eA=0|t[36],nA=0,aA=0|t[35],oA=0,rA=0|t[34],hA=0,sA=0|t[33],wA=0,fA=0|t[32],DA=0,cA=0|t[31],yA=0,uA=0|t[30],lA=0,FA=0|t[29],MA=0,pA=0|t[28],GA=0,HA=0|t[27],dA=0,UA=0|t[26],mA=0,LA=0|t[25],bA=0,kA=0|t[24],JA=0,NA=0|t[23],SA=0,RA=0|t[22],vA=0,YA=0|t[21],PA=0,qA=0|t[20],xA=0,XA=0|t[19],ZA=0,VA=0|t[18],KA=0,OA=0|t[17],WA=0,jA=0|t[16],zA=0,TA=0|t[15],_A=0,$A=0|t[14],AI=0,II=0|t[13],gI=0,CI=0|t[12],tI=0,QI=0|t[11],iI=0,BI=0|t[10],EI=0,eI=0|t[9],nI=0,aI=0|t[8],oI=0,rI=0|t[7],hI=0,sI=0|t[6],wI=0,fI=0|t[5],DI=0,cI=0|t[4],yI=0,uI=0|t[3],lI=0,FI=0|t[2],MI=0,pI=0|t[1],GI=0,HI=0|t[0];for(g=0;g>6|192)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,GI+=T<<8,i=65535&(Q=397*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),sA=65535&(hA+=oA>>>16),fA=65535&(wA+=hA>>>16),cA=65535&(DA+=wA>>>16),uA=65535&(yA+=DA>>>16),FA=65535&(lA+=yA>>>16),pA=65535&(MA+=lA>>>16),HA=65535&(GA+=MA>>>16),UA=65535&(dA+=GA>>>16),LA=65535&(mA+=dA>>>16),kA=65535&(bA+=mA>>>16),NA=65535&(JA+=bA>>>16),RA=65535&(SA+=JA>>>16),YA=65535&(vA+=SA>>>16),qA=65535&(PA+=vA>>>16),XA=65535&(xA+=PA>>>16),VA=65535&(ZA+=xA>>>16),OA=65535&(KA+=ZA>>>16),jA=65535&(WA+=KA>>>16),TA=65535&(zA+=WA>>>16),$A=65535&(_A+=zA>>>16),II=65535&(AI+=_A>>>16),CI=65535&(gI+=AI>>>16),QI=65535&(tI+=gI>>>16),BI=65535&(iI+=tI>>>16),eI=65535&(EI+=iI>>>16),aI=65535&(nI+=EI>>>16),rI=65535&(oI+=nI>>>16),sI=65535&(hI+=oI>>>16),fI=65535&(wI+=hI>>>16),cI=65535&(DI+=wI>>>16),uI=65535&(yI+=DI>>>16),FI=65535&(lI+=yI>>>16),HI=GI+((MI+=lI>>>16)>>>16)&65535,pI=65535&MI,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,i=65535&(Q=397*i),HI=(GI+=T<<8)+((MI+=(lI+=(yI+=(DI+=(wI+=(hI+=(oI+=(nI+=(EI+=(iI+=(tI+=(gI+=(AI+=(_A+=(zA+=(WA+=(KA+=(ZA+=(xA+=(PA+=(vA+=(SA+=(JA+=(bA+=(mA+=(dA+=(GA+=(MA+=(lA+=(yA+=(DA+=(wA+=(hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=397*(e=65535&B),n=397*(a=65535&n),o=397*(r=65535&o),s=397*(f=65535&s),D=397*(c=65535&D),y=397*(u=65535&y),l=397*(F=65535&l),M=397*(p=65535&M),G=397*(H=65535&G),d=397*(U=65535&d),m=397*(L=65535&m),b=397*(k=65535&b),J=397*(N=65535&J),S=397*(R=65535&S),v=397*(Y=65535&v),P=397*(q=65535&P),x=397*(X=65535&x),Z=397*(V=65535&Z),K=397*(O=65535&K),W=397*(j=65535&W),z=397*(T=65535&z),_=397*($=65535&_),AA=397*(IA=65535&AA),gA=397*(CA=65535&gA),tA=397*(QA=65535&tA),iA=397*(BA=65535&iA),EA=397*(eA=65535&EA),nA=397*(aA=65535&nA),oA=397*(rA=65535&oA),hA=397*(sA=65535&hA),wA=397*(fA=65535&wA),DA=397*(cA=65535&DA),yA=397*(uA=65535&yA),lA=397*(FA=65535&lA),MA=397*(pA=65535&MA),GA=397*(HA=65535&GA),dA=397*(UA=65535&dA),mA=397*(LA=65535&mA),bA=397*(kA=65535&bA),JA=397*(NA=65535&JA),SA=397*(RA=65535&SA),vA=397*(YA=65535&vA),PA=397*(qA=65535&PA),xA=397*(XA=65535&xA),ZA=397*(VA=65535&ZA),KA=397*(OA=65535&KA),WA=397*(jA=65535&WA),zA=397*(TA=65535&zA),_A=397*($A=65535&_A),AI=397*(II=65535&AI),gI=397*(CI=65535&gI),tI=397*(QI=65535&tI),iI=397*(BI=65535&iI),EI=397*(eI=65535&EI),nI=397*(aI=65535&nI),oI=397*(rI=65535&oI),hI=397*(sI=65535&hI),wI=397*(fI=65535&wI),DI=397*(cI=65535&DI),yI=397*(uI=65535&yI),lI=397*(FI=65535&lI),MI=397*(pI=65535&MI),GI=397*HI,vA+=(i^=I>>12&63|128)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,i=65535&(Q=397*i),HI=(GI+=T<<8)+((MI+=(lI+=(yI+=(DI+=(wI+=(hI+=(oI+=(nI+=(EI+=(iI+=(tI+=(gI+=(AI+=(_A+=(zA+=(WA+=(KA+=(ZA+=(xA+=(PA+=(vA+=(SA+=(JA+=(bA+=(mA+=(dA+=(GA+=(MA+=(lA+=(yA+=(DA+=(wA+=(hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=397*(e=65535&B),n=397*(a=65535&n),o=397*(r=65535&o),s=397*(f=65535&s),D=397*(c=65535&D),y=397*(u=65535&y),l=397*(F=65535&l),M=397*(p=65535&M),G=397*(H=65535&G),d=397*(U=65535&d),m=397*(L=65535&m),b=397*(k=65535&b),J=397*(N=65535&J),S=397*(R=65535&S),v=397*(Y=65535&v),P=397*(q=65535&P),x=397*(X=65535&x),Z=397*(V=65535&Z),K=397*(O=65535&K),W=397*(j=65535&W),z=397*(T=65535&z),_=397*($=65535&_),AA=397*(IA=65535&AA),gA=397*(CA=65535&gA),tA=397*(QA=65535&tA),iA=397*(BA=65535&iA),EA=397*(eA=65535&EA),nA=397*(aA=65535&nA),oA=397*(rA=65535&oA),hA=397*(sA=65535&hA),wA=397*(fA=65535&wA),DA=397*(cA=65535&DA),yA=397*(uA=65535&yA),lA=397*(FA=65535&lA),MA=397*(pA=65535&MA),GA=397*(HA=65535&GA),dA=397*(UA=65535&dA),mA=397*(LA=65535&mA),bA=397*(kA=65535&bA),JA=397*(NA=65535&JA),SA=397*(RA=65535&SA),vA=397*(YA=65535&vA),PA=397*(qA=65535&PA),xA=397*(XA=65535&xA),ZA=397*(VA=65535&ZA),KA=397*(OA=65535&KA),WA=397*(jA=65535&WA),zA=397*(TA=65535&zA),_A=397*($A=65535&_A),AI=397*(II=65535&AI),gI=397*(CI=65535&gI),tI=397*(QI=65535&tI),iI=397*(BI=65535&iI),EI=397*(eI=65535&EI),nI=397*(aI=65535&nI),oI=397*(rI=65535&oI),hI=397*(sI=65535&hI),wI=397*(fI=65535&wI),DI=397*(cI=65535&DI),yI=397*(uI=65535&yI),lI=397*(FI=65535&lI),MI=397*(pI=65535&MI),GI=397*HI,vA+=(i^=I>>6&63|128)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,GI+=T<<8,i=65535&(Q=397*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),sA=65535&(hA+=oA>>>16),fA=65535&(wA+=hA>>>16),cA=65535&(DA+=wA>>>16),uA=65535&(yA+=DA>>>16),FA=65535&(lA+=yA>>>16),pA=65535&(MA+=lA>>>16),HA=65535&(GA+=MA>>>16),UA=65535&(dA+=GA>>>16),LA=65535&(mA+=dA>>>16),kA=65535&(bA+=mA>>>16),NA=65535&(JA+=bA>>>16),RA=65535&(SA+=JA>>>16),YA=65535&(vA+=SA>>>16),qA=65535&(PA+=vA>>>16),XA=65535&(xA+=PA>>>16),VA=65535&(ZA+=xA>>>16),OA=65535&(KA+=ZA>>>16),jA=65535&(WA+=KA>>>16),TA=65535&(zA+=WA>>>16),$A=65535&(_A+=zA>>>16),II=65535&(AI+=_A>>>16),CI=65535&(gI+=AI>>>16),QI=65535&(tI+=gI>>>16),BI=65535&(iI+=tI>>>16),eI=65535&(EI+=iI>>>16),aI=65535&(nI+=EI>>>16),rI=65535&(oI+=nI>>>16),sI=65535&(hI+=oI>>>16),fI=65535&(wI+=hI>>>16),cI=65535&(DI+=wI>>>16),uI=65535&(yI+=DI>>>16),FI=65535&(lI+=yI>>>16),HI=GI+((MI+=lI>>>16)>>>16)&65535,pI=65535&MI,i^=63&I|128):(B=397*e,n=397*a,o=397*r,s=397*f,D=397*c,y=397*u,l=397*F,M=397*p,G=397*H,d=397*U,m=397*L,b=397*k,J=397*N,S=397*R,v=397*Y,P=397*q,x=397*X,Z=397*V,K=397*O,W=397*j,z=397*T,_=397*$,AA=397*IA,gA=397*CA,tA=397*QA,iA=397*BA,EA=397*eA,nA=397*aA,oA=397*rA,hA=397*sA,wA=397*fA,DA=397*cA,yA=397*uA,lA=397*FA,MA=397*pA,GA=397*HA,dA=397*UA,mA=397*LA,bA=397*kA,JA=397*NA,SA=397*RA,vA=397*YA,PA=397*qA,xA=397*XA,ZA=397*VA,KA=397*OA,WA=397*jA,zA=397*TA,_A=397*$A,AI=397*II,gI=397*CI,tI=397*QI,iI=397*BI,EI=397*eI,nI=397*aI,oI=397*rI,hI=397*sI,wI=397*fI,DI=397*cI,yI=397*uI,lI=397*FI,MI=397*pI,GI=397*HI,vA+=(i^=I>>12|224)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,i=65535&(Q=397*i),HI=(GI+=T<<8)+((MI+=(lI+=(yI+=(DI+=(wI+=(hI+=(oI+=(nI+=(EI+=(iI+=(tI+=(gI+=(AI+=(_A+=(zA+=(WA+=(KA+=(ZA+=(xA+=(PA+=(vA+=(SA+=(JA+=(bA+=(mA+=(dA+=(GA+=(MA+=(lA+=(yA+=(DA+=(wA+=(hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=397*(e=65535&B),n=397*(a=65535&n),o=397*(r=65535&o),s=397*(f=65535&s),D=397*(c=65535&D),y=397*(u=65535&y),l=397*(F=65535&l),M=397*(p=65535&M),G=397*(H=65535&G),d=397*(U=65535&d),m=397*(L=65535&m),b=397*(k=65535&b),J=397*(N=65535&J),S=397*(R=65535&S),v=397*(Y=65535&v),P=397*(q=65535&P),x=397*(X=65535&x),Z=397*(V=65535&Z),K=397*(O=65535&K),W=397*(j=65535&W),z=397*(T=65535&z),_=397*($=65535&_),AA=397*(IA=65535&AA),gA=397*(CA=65535&gA),tA=397*(QA=65535&tA),iA=397*(BA=65535&iA),EA=397*(eA=65535&EA),nA=397*(aA=65535&nA),oA=397*(rA=65535&oA),hA=397*(sA=65535&hA),wA=397*(fA=65535&wA),DA=397*(cA=65535&DA),yA=397*(uA=65535&yA),lA=397*(FA=65535&lA),MA=397*(pA=65535&MA),GA=397*(HA=65535&GA),dA=397*(UA=65535&dA),mA=397*(LA=65535&mA),bA=397*(kA=65535&bA),JA=397*(NA=65535&JA),SA=397*(RA=65535&SA),vA=397*(YA=65535&vA),PA=397*(qA=65535&PA),xA=397*(XA=65535&xA),ZA=397*(VA=65535&ZA),KA=397*(OA=65535&KA),WA=397*(jA=65535&WA),zA=397*(TA=65535&zA),_A=397*($A=65535&_A),AI=397*(II=65535&AI),gI=397*(CI=65535&gI),tI=397*(QI=65535&tI),iI=397*(BI=65535&iI),EI=397*(eI=65535&EI),nI=397*(aI=65535&nI),oI=397*(rI=65535&oI),hI=397*(sI=65535&hI),wI=397*(fI=65535&wI),DI=397*(cI=65535&DI),yI=397*(uI=65535&yI),lI=397*(FI=65535&lI),MI=397*(pI=65535&MI),GI=397*HI,vA+=(i^=I>>6&63|128)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,GI+=T<<8,i=65535&(Q=397*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),sA=65535&(hA+=oA>>>16),fA=65535&(wA+=hA>>>16),cA=65535&(DA+=wA>>>16),uA=65535&(yA+=DA>>>16),FA=65535&(lA+=yA>>>16),pA=65535&(MA+=lA>>>16),HA=65535&(GA+=MA>>>16),UA=65535&(dA+=GA>>>16),LA=65535&(mA+=dA>>>16),kA=65535&(bA+=mA>>>16),NA=65535&(JA+=bA>>>16),RA=65535&(SA+=JA>>>16),YA=65535&(vA+=SA>>>16),qA=65535&(PA+=vA>>>16),XA=65535&(xA+=PA>>>16),VA=65535&(ZA+=xA>>>16),OA=65535&(KA+=ZA>>>16),jA=65535&(WA+=KA>>>16),TA=65535&(zA+=WA>>>16),$A=65535&(_A+=zA>>>16),II=65535&(AI+=_A>>>16),CI=65535&(gI+=AI>>>16),QI=65535&(tI+=gI>>>16),BI=65535&(iI+=tI>>>16),eI=65535&(EI+=iI>>>16),aI=65535&(nI+=EI>>>16),rI=65535&(oI+=nI>>>16),sI=65535&(hI+=oI>>>16),fI=65535&(wI+=hI>>>16),cI=65535&(DI+=wI>>>16),uI=65535&(yI+=DI>>>16),FI=65535&(lI+=yI>>>16),HI=GI+((MI+=lI>>>16)>>>16)&65535,pI=65535&MI,i^=63&I|128),B=397*e,n=397*a,o=397*r,s=397*f,D=397*c,y=397*u,l=397*F,M=397*p,G=397*H,d=397*U,m=397*L,b=397*k,J=397*N,S=397*R,v=397*Y,P=397*q,x=397*X,Z=397*V,K=397*O,W=397*j,z=397*T,_=397*$,AA=397*IA,gA=397*CA,tA=397*QA,iA=397*BA,EA=397*eA,nA=397*aA,oA=397*rA,hA=397*sA,wA=397*fA,DA=397*cA,yA=397*uA,lA=397*FA,MA=397*pA,GA=397*HA,dA=397*UA,mA=397*LA,bA=397*kA,JA=397*NA,SA=397*RA,vA=397*YA,PA=397*qA,xA=397*XA,ZA=397*VA,KA=397*OA,WA=397*jA,zA=397*TA,_A=397*$A,AI=397*II,gI=397*CI,tI=397*QI,iI=397*BI,EI=397*eI,nI=397*aI,oI=397*rI,hI=397*sI,wI=397*fI,DI=397*cI,yI=397*uI,lI=397*FI,MI=397*pI,GI=397*HI,vA+=i<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,GI+=T<<8,i=65535&(Q=397*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),sA=65535&(hA+=oA>>>16),fA=65535&(wA+=hA>>>16),cA=65535&(DA+=wA>>>16),uA=65535&(yA+=DA>>>16),FA=65535&(lA+=yA>>>16),pA=65535&(MA+=lA>>>16),HA=65535&(GA+=MA>>>16),UA=65535&(dA+=GA>>>16),LA=65535&(mA+=dA>>>16),kA=65535&(bA+=mA>>>16),NA=65535&(JA+=bA>>>16),RA=65535&(SA+=JA>>>16),YA=65535&(vA+=SA>>>16),qA=65535&(PA+=vA>>>16),XA=65535&(xA+=PA>>>16),VA=65535&(ZA+=xA>>>16),OA=65535&(KA+=ZA>>>16),jA=65535&(WA+=KA>>>16),TA=65535&(zA+=WA>>>16),$A=65535&(_A+=zA>>>16),II=65535&(AI+=_A>>>16),CI=65535&(gI+=AI>>>16),QI=65535&(tI+=gI>>>16),BI=65535&(iI+=tI>>>16),eI=65535&(EI+=iI>>>16),aI=65535&(nI+=EI>>>16),rI=65535&(oI+=nI>>>16),sI=65535&(hI+=oI>>>16),fI=65535&(wI+=hI>>>16),cI=65535&(DI+=wI>>>16),uI=65535&(yI+=DI>>>16),FI=65535&(lI+=yI>>>16),HI=GI+((MI+=lI>>>16)>>>16)&65535,pI=65535&MI;return w(E[HI>>8]+E[255&HI]+E[pI>>8]+E[255&pI]+E[FI>>8]+E[255&FI]+E[uI>>8]+E[255&uI]+E[cI>>8]+E[255&cI]+E[fI>>8]+E[255&fI]+E[sI>>8]+E[255&sI]+E[rI>>8]+E[255&rI]+E[aI>>8]+E[255&aI]+E[eI>>8]+E[255&eI]+E[BI>>8]+E[255&BI]+E[QI>>8]+E[255&QI]+E[CI>>8]+E[255&CI]+E[II>>8]+E[255&II]+E[$A>>8]+E[255&$A]+E[TA>>8]+E[255&TA]+E[jA>>8]+E[255&jA]+E[OA>>8]+E[255&OA]+E[VA>>8]+E[255&VA]+E[XA>>8]+E[255&XA]+E[qA>>8]+E[255&qA]+E[YA>>8]+E[255&YA]+E[RA>>8]+E[255&RA]+E[NA>>8]+E[255&NA]+E[kA>>8]+E[255&kA]+E[LA>>8]+E[255&LA]+E[UA>>8]+E[255&UA]+E[HA>>8]+E[255&HA]+E[pA>>8]+E[255&pA]+E[FA>>8]+E[255&FA]+E[uA>>8]+E[255&uA]+E[cA>>8]+E[255&cA]+E[fA>>8]+E[255&fA]+E[sA>>8]+E[255&sA]+E[rA>>8]+E[255&rA]+E[aA>>8]+E[255&aA]+E[eA>>8]+E[255&eA]+E[BA>>8]+E[255&BA]+E[QA>>8]+E[255&QA]+E[CA>>8]+E[255&CA]+E[IA>>8]+E[255&IA]+E[$>>8]+E[255&$]+E[T>>8]+E[255&T]+E[j>>8]+E[255&j]+E[O>>8]+E[255&O]+E[V>>8]+E[255&V]+E[X>>8]+E[255&X]+E[q>>8]+E[255&q]+E[Y>>8]+E[255&Y]+E[R>>8]+E[255&R]+E[N>>8]+E[255&N]+E[k>>8]+E[255&k]+E[L>>8]+E[255&L]+E[U>>8]+E[255&U]+E[H>>8]+E[255&H]+E[p>>8]+E[255&p]+E[F>>8]+E[255&F]+E[u>>8]+E[255&u]+E[c>>8]+E[255&c]+E[f>>8]+E[255&f]+E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],1024)}function z(A){var I,g,C=A.length,t=h[1024].offset,Q=0,i=0|t[63],B=0,e=0|t[62],n=0,a=0|t[61],o=0,r=0|t[60],s=0,f=0|t[59],D=0,c=0|t[58],y=0,u=0|t[57],l=0,F=0|t[56],M=0,p=0|t[55],G=0,H=0|t[54],d=0,U=0|t[53],m=0,L=0|t[52],b=0,k=0|t[51],J=0,N=0|t[50],S=0,R=0|t[49],v=0,Y=0|t[48],P=0,q=0|t[47],x=0,X=0|t[46],Z=0,V=0|t[45],K=0,O=0|t[44],W=0,j=0|t[43],z=0,T=0|t[42],_=0,$=0|t[41],AA=0,IA=0|t[40],gA=0,CA=0|t[39],tA=0,QA=0|t[38],iA=0,BA=0|t[37],EA=0,eA=0|t[36],nA=0,aA=0|t[35],oA=0,rA=0|t[34],hA=0,sA=0|t[33],wA=0,fA=0|t[32],DA=0,cA=0|t[31],yA=0,uA=0|t[30],lA=0,FA=0|t[29],MA=0,pA=0|t[28],GA=0,HA=0|t[27],dA=0,UA=0|t[26],mA=0,LA=0|t[25],bA=0,kA=0|t[24],JA=0,NA=0|t[23],SA=0,RA=0|t[22],vA=0,YA=0|t[21],PA=0,qA=0|t[20],xA=0,XA=0|t[19],ZA=0,VA=0|t[18],KA=0,OA=0|t[17],WA=0,jA=0|t[16],zA=0,TA=0|t[15],_A=0,$A=0|t[14],AI=0,II=0|t[13],gI=0,CI=0|t[12],tI=0,QI=0|t[11],iI=0,BI=0|t[10],EI=0,eI=0|t[9],nI=0,aI=0|t[8],oI=0,rI=0|t[7],hI=0,sI=0|t[6],wI=0,fI=0|t[5],DI=0,cI=0|t[4],yI=0,uI=0|t[3],lI=0,FI=0|t[2],MI=0,pI=0|t[1],GI=0,HI=0|t[0];for(g=0;g>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),sA=65535&(hA+=oA>>>16),fA=65535&(wA+=hA>>>16),cA=65535&(DA+=wA>>>16),uA=65535&(yA+=DA>>>16),FA=65535&(lA+=yA>>>16),pA=65535&(MA+=lA>>>16),HA=65535&(GA+=MA>>>16),UA=65535&(dA+=GA>>>16),LA=65535&(mA+=dA>>>16),kA=65535&(bA+=mA>>>16),NA=65535&(JA+=bA>>>16),RA=65535&(SA+=JA>>>16),YA=65535&(vA+=SA>>>16),qA=65535&(PA+=vA>>>16),XA=65535&(xA+=PA>>>16),VA=65535&(ZA+=xA>>>16),OA=65535&(KA+=ZA>>>16),jA=65535&(WA+=KA>>>16),TA=65535&(zA+=WA>>>16),$A=65535&(_A+=zA>>>16),II=65535&(AI+=_A>>>16),CI=65535&(gI+=AI>>>16),QI=65535&(tI+=gI>>>16),BI=65535&(iI+=tI>>>16),eI=65535&(EI+=iI>>>16),aI=65535&(nI+=EI>>>16),rI=65535&(oI+=nI>>>16),sI=65535&(hI+=oI>>>16),fI=65535&(wI+=hI>>>16),cI=65535&(DI+=wI>>>16),uI=65535&(yI+=DI>>>16),FI=65535&(lI+=yI>>>16),HI=GI+((MI+=lI>>>16)>>>16)&65535,pI=65535&MI,(I=A.charCodeAt(g))<128?i^=I:I<2048?(B=397*e,n=397*a,o=397*r,s=397*f,D=397*c,y=397*u,l=397*F,M=397*p,G=397*H,d=397*U,m=397*L,b=397*k,J=397*N,S=397*R,v=397*Y,P=397*q,x=397*X,Z=397*V,K=397*O,W=397*j,z=397*T,_=397*$,AA=397*IA,gA=397*CA,tA=397*QA,iA=397*BA,EA=397*eA,nA=397*aA,oA=397*rA,hA=397*sA,wA=397*fA,DA=397*cA,yA=397*uA,lA=397*FA,MA=397*pA,GA=397*HA,dA=397*UA,mA=397*LA,bA=397*kA,JA=397*NA,SA=397*RA,vA=397*YA,PA=397*qA,xA=397*XA,ZA=397*VA,KA=397*OA,WA=397*jA,zA=397*TA,_A=397*$A,AI=397*II,gI=397*CI,tI=397*QI,iI=397*BI,EI=397*eI,nI=397*aI,oI=397*rI,hI=397*sI,wI=397*fI,DI=397*cI,yI=397*uI,lI=397*FI,MI=397*pI,GI=397*HI,vA+=(i^=I>>6|192)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,GI+=T<<8,i=65535&(Q=397*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),sA=65535&(hA+=oA>>>16),fA=65535&(wA+=hA>>>16),cA=65535&(DA+=wA>>>16),uA=65535&(yA+=DA>>>16),FA=65535&(lA+=yA>>>16),pA=65535&(MA+=lA>>>16),HA=65535&(GA+=MA>>>16),UA=65535&(dA+=GA>>>16),LA=65535&(mA+=dA>>>16),kA=65535&(bA+=mA>>>16),NA=65535&(JA+=bA>>>16),RA=65535&(SA+=JA>>>16),YA=65535&(vA+=SA>>>16),qA=65535&(PA+=vA>>>16),XA=65535&(xA+=PA>>>16),VA=65535&(ZA+=xA>>>16),OA=65535&(KA+=ZA>>>16),jA=65535&(WA+=KA>>>16),TA=65535&(zA+=WA>>>16),$A=65535&(_A+=zA>>>16),II=65535&(AI+=_A>>>16),CI=65535&(gI+=AI>>>16),QI=65535&(tI+=gI>>>16),BI=65535&(iI+=tI>>>16),eI=65535&(EI+=iI>>>16),aI=65535&(nI+=EI>>>16),rI=65535&(oI+=nI>>>16),sI=65535&(hI+=oI>>>16),fI=65535&(wI+=hI>>>16),cI=65535&(DI+=wI>>>16),uI=65535&(yI+=DI>>>16),FI=65535&(lI+=yI>>>16),HI=GI+((MI+=lI>>>16)>>>16)&65535,pI=65535&MI,i^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,i=65535&(Q=397*i),HI=(GI+=T<<8)+((MI+=(lI+=(yI+=(DI+=(wI+=(hI+=(oI+=(nI+=(EI+=(iI+=(tI+=(gI+=(AI+=(_A+=(zA+=(WA+=(KA+=(ZA+=(xA+=(PA+=(vA+=(SA+=(JA+=(bA+=(mA+=(dA+=(GA+=(MA+=(lA+=(yA+=(DA+=(wA+=(hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=397*(e=65535&B),n=397*(a=65535&n),o=397*(r=65535&o),s=397*(f=65535&s),D=397*(c=65535&D),y=397*(u=65535&y),l=397*(F=65535&l),M=397*(p=65535&M),G=397*(H=65535&G),d=397*(U=65535&d),m=397*(L=65535&m),b=397*(k=65535&b),J=397*(N=65535&J),S=397*(R=65535&S),v=397*(Y=65535&v),P=397*(q=65535&P),x=397*(X=65535&x),Z=397*(V=65535&Z),K=397*(O=65535&K),W=397*(j=65535&W),z=397*(T=65535&z),_=397*($=65535&_),AA=397*(IA=65535&AA),gA=397*(CA=65535&gA),tA=397*(QA=65535&tA),iA=397*(BA=65535&iA),EA=397*(eA=65535&EA),nA=397*(aA=65535&nA),oA=397*(rA=65535&oA),hA=397*(sA=65535&hA),wA=397*(fA=65535&wA),DA=397*(cA=65535&DA),yA=397*(uA=65535&yA),lA=397*(FA=65535&lA),MA=397*(pA=65535&MA),GA=397*(HA=65535&GA),dA=397*(UA=65535&dA),mA=397*(LA=65535&mA),bA=397*(kA=65535&bA),JA=397*(NA=65535&JA),SA=397*(RA=65535&SA),vA=397*(YA=65535&vA),PA=397*(qA=65535&PA),xA=397*(XA=65535&xA),ZA=397*(VA=65535&ZA),KA=397*(OA=65535&KA),WA=397*(jA=65535&WA),zA=397*(TA=65535&zA),_A=397*($A=65535&_A),AI=397*(II=65535&AI),gI=397*(CI=65535&gI),tI=397*(QI=65535&tI),iI=397*(BI=65535&iI),EI=397*(eI=65535&EI),nI=397*(aI=65535&nI),oI=397*(rI=65535&oI),hI=397*(sI=65535&hI),wI=397*(fI=65535&wI),DI=397*(cI=65535&DI),yI=397*(uI=65535&yI),lI=397*(FI=65535&lI),MI=397*(pI=65535&MI),GI=397*HI,vA+=(i^=I>>12&63|128)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,i=65535&(Q=397*i),HI=(GI+=T<<8)+((MI+=(lI+=(yI+=(DI+=(wI+=(hI+=(oI+=(nI+=(EI+=(iI+=(tI+=(gI+=(AI+=(_A+=(zA+=(WA+=(KA+=(ZA+=(xA+=(PA+=(vA+=(SA+=(JA+=(bA+=(mA+=(dA+=(GA+=(MA+=(lA+=(yA+=(DA+=(wA+=(hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=397*(e=65535&B),n=397*(a=65535&n),o=397*(r=65535&o),s=397*(f=65535&s),D=397*(c=65535&D),y=397*(u=65535&y),l=397*(F=65535&l),M=397*(p=65535&M),G=397*(H=65535&G),d=397*(U=65535&d),m=397*(L=65535&m),b=397*(k=65535&b),J=397*(N=65535&J),S=397*(R=65535&S),v=397*(Y=65535&v),P=397*(q=65535&P),x=397*(X=65535&x),Z=397*(V=65535&Z),K=397*(O=65535&K),W=397*(j=65535&W),z=397*(T=65535&z),_=397*($=65535&_),AA=397*(IA=65535&AA),gA=397*(CA=65535&gA),tA=397*(QA=65535&tA),iA=397*(BA=65535&iA),EA=397*(eA=65535&EA),nA=397*(aA=65535&nA),oA=397*(rA=65535&oA),hA=397*(sA=65535&hA),wA=397*(fA=65535&wA),DA=397*(cA=65535&DA),yA=397*(uA=65535&yA),lA=397*(FA=65535&lA),MA=397*(pA=65535&MA),GA=397*(HA=65535&GA),dA=397*(UA=65535&dA),mA=397*(LA=65535&mA),bA=397*(kA=65535&bA),JA=397*(NA=65535&JA),SA=397*(RA=65535&SA),vA=397*(YA=65535&vA),PA=397*(qA=65535&PA),xA=397*(XA=65535&xA),ZA=397*(VA=65535&ZA),KA=397*(OA=65535&KA),WA=397*(jA=65535&WA),zA=397*(TA=65535&zA),_A=397*($A=65535&_A),AI=397*(II=65535&AI),gI=397*(CI=65535&gI),tI=397*(QI=65535&tI),iI=397*(BI=65535&iI),EI=397*(eI=65535&EI),nI=397*(aI=65535&nI),oI=397*(rI=65535&oI),hI=397*(sI=65535&hI),wI=397*(fI=65535&wI),DI=397*(cI=65535&DI),yI=397*(uI=65535&yI),lI=397*(FI=65535&lI),MI=397*(pI=65535&MI),GI=397*HI,vA+=(i^=I>>6&63|128)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,GI+=T<<8,i=65535&(Q=397*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),sA=65535&(hA+=oA>>>16),fA=65535&(wA+=hA>>>16),cA=65535&(DA+=wA>>>16),uA=65535&(yA+=DA>>>16),FA=65535&(lA+=yA>>>16),pA=65535&(MA+=lA>>>16),HA=65535&(GA+=MA>>>16),UA=65535&(dA+=GA>>>16),LA=65535&(mA+=dA>>>16),kA=65535&(bA+=mA>>>16),NA=65535&(JA+=bA>>>16),RA=65535&(SA+=JA>>>16),YA=65535&(vA+=SA>>>16),qA=65535&(PA+=vA>>>16),XA=65535&(xA+=PA>>>16),VA=65535&(ZA+=xA>>>16),OA=65535&(KA+=ZA>>>16),jA=65535&(WA+=KA>>>16),TA=65535&(zA+=WA>>>16),$A=65535&(_A+=zA>>>16),II=65535&(AI+=_A>>>16),CI=65535&(gI+=AI>>>16),QI=65535&(tI+=gI>>>16),BI=65535&(iI+=tI>>>16),eI=65535&(EI+=iI>>>16),aI=65535&(nI+=EI>>>16),rI=65535&(oI+=nI>>>16),sI=65535&(hI+=oI>>>16),fI=65535&(wI+=hI>>>16),cI=65535&(DI+=wI>>>16),uI=65535&(yI+=DI>>>16),FI=65535&(lI+=yI>>>16),HI=GI+((MI+=lI>>>16)>>>16)&65535,pI=65535&MI,i^=63&I|128):(B=397*e,n=397*a,o=397*r,s=397*f,D=397*c,y=397*u,l=397*F,M=397*p,G=397*H,d=397*U,m=397*L,b=397*k,J=397*N,S=397*R,v=397*Y,P=397*q,x=397*X,Z=397*V,K=397*O,W=397*j,z=397*T,_=397*$,AA=397*IA,gA=397*CA,tA=397*QA,iA=397*BA,EA=397*eA,nA=397*aA,oA=397*rA,hA=397*sA,wA=397*fA,DA=397*cA,yA=397*uA,lA=397*FA,MA=397*pA,GA=397*HA,dA=397*UA,mA=397*LA,bA=397*kA,JA=397*NA,SA=397*RA,vA=397*YA,PA=397*qA,xA=397*XA,ZA=397*VA,KA=397*OA,WA=397*jA,zA=397*TA,_A=397*$A,AI=397*II,gI=397*CI,tI=397*QI,iI=397*BI,EI=397*eI,nI=397*aI,oI=397*rI,hI=397*sI,wI=397*fI,DI=397*cI,yI=397*uI,lI=397*FI,MI=397*pI,GI=397*HI,vA+=(i^=I>>12|224)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,i=65535&(Q=397*i),HI=(GI+=T<<8)+((MI+=(lI+=(yI+=(DI+=(wI+=(hI+=(oI+=(nI+=(EI+=(iI+=(tI+=(gI+=(AI+=(_A+=(zA+=(WA+=(KA+=(ZA+=(xA+=(PA+=(vA+=(SA+=(JA+=(bA+=(mA+=(dA+=(GA+=(MA+=(lA+=(yA+=(DA+=(wA+=(hA+=(oA+=(nA+=(EA+=(iA+=(tA+=(gA+=(AA+=(_+=(z+=(W+=(K+=(Z+=(x+=(P+=(v+=(S+=(J+=(b+=(m+=(d+=(G+=(M+=(l+=(y+=(D+=(s+=(o+=(n+=(B+=Q>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)>>>16)&65535,B=397*(e=65535&B),n=397*(a=65535&n),o=397*(r=65535&o),s=397*(f=65535&s),D=397*(c=65535&D),y=397*(u=65535&y),l=397*(F=65535&l),M=397*(p=65535&M),G=397*(H=65535&G),d=397*(U=65535&d),m=397*(L=65535&m),b=397*(k=65535&b),J=397*(N=65535&J),S=397*(R=65535&S),v=397*(Y=65535&v),P=397*(q=65535&P),x=397*(X=65535&x),Z=397*(V=65535&Z),K=397*(O=65535&K),W=397*(j=65535&W),z=397*(T=65535&z),_=397*($=65535&_),AA=397*(IA=65535&AA),gA=397*(CA=65535&gA),tA=397*(QA=65535&tA),iA=397*(BA=65535&iA),EA=397*(eA=65535&EA),nA=397*(aA=65535&nA),oA=397*(rA=65535&oA),hA=397*(sA=65535&hA),wA=397*(fA=65535&wA),DA=397*(cA=65535&DA),yA=397*(uA=65535&yA),lA=397*(FA=65535&lA),MA=397*(pA=65535&MA),GA=397*(HA=65535&GA),dA=397*(UA=65535&dA),mA=397*(LA=65535&mA),bA=397*(kA=65535&bA),JA=397*(NA=65535&JA),SA=397*(RA=65535&SA),vA=397*(YA=65535&vA),PA=397*(qA=65535&PA),xA=397*(XA=65535&xA),ZA=397*(VA=65535&ZA),KA=397*(OA=65535&KA),WA=397*(jA=65535&WA),zA=397*(TA=65535&zA),_A=397*($A=65535&_A),AI=397*(II=65535&AI),gI=397*(CI=65535&gI),tI=397*(QI=65535&tI),iI=397*(BI=65535&iI),EI=397*(eI=65535&EI),nI=397*(aI=65535&nI),oI=397*(rI=65535&oI),hI=397*(sI=65535&hI),wI=397*(fI=65535&wI),DI=397*(cI=65535&DI),yI=397*(uI=65535&yI),lI=397*(FI=65535&lI),MI=397*(pI=65535&MI),GI=397*HI,vA+=(i^=I>>6&63|128)<<8,PA+=e<<8,xA+=a<<8,ZA+=r<<8,KA+=f<<8,WA+=c<<8,zA+=u<<8,_A+=F<<8,AI+=p<<8,gI+=H<<8,tI+=U<<8,iI+=L<<8,EI+=k<<8,nI+=N<<8,oI+=R<<8,hI+=Y<<8,wI+=q<<8,DI+=X<<8,yI+=V<<8,lI+=O<<8,MI+=j<<8,GI+=T<<8,i=65535&(Q=397*i),e=65535&(B+=Q>>>16),a=65535&(n+=B>>>16),r=65535&(o+=n>>>16),f=65535&(s+=o>>>16),c=65535&(D+=s>>>16),u=65535&(y+=D>>>16),F=65535&(l+=y>>>16),p=65535&(M+=l>>>16),H=65535&(G+=M>>>16),U=65535&(d+=G>>>16),L=65535&(m+=d>>>16),k=65535&(b+=m>>>16),N=65535&(J+=b>>>16),R=65535&(S+=J>>>16),Y=65535&(v+=S>>>16),q=65535&(P+=v>>>16),X=65535&(x+=P>>>16),V=65535&(Z+=x>>>16),O=65535&(K+=Z>>>16),j=65535&(W+=K>>>16),T=65535&(z+=W>>>16),$=65535&(_+=z>>>16),IA=65535&(AA+=_>>>16),CA=65535&(gA+=AA>>>16),QA=65535&(tA+=gA>>>16),BA=65535&(iA+=tA>>>16),eA=65535&(EA+=iA>>>16),aA=65535&(nA+=EA>>>16),rA=65535&(oA+=nA>>>16),sA=65535&(hA+=oA>>>16),fA=65535&(wA+=hA>>>16),cA=65535&(DA+=wA>>>16),uA=65535&(yA+=DA>>>16),FA=65535&(lA+=yA>>>16),pA=65535&(MA+=lA>>>16),HA=65535&(GA+=MA>>>16),UA=65535&(dA+=GA>>>16),LA=65535&(mA+=dA>>>16),kA=65535&(bA+=mA>>>16),NA=65535&(JA+=bA>>>16),RA=65535&(SA+=JA>>>16),YA=65535&(vA+=SA>>>16),qA=65535&(PA+=vA>>>16),XA=65535&(xA+=PA>>>16),VA=65535&(ZA+=xA>>>16),OA=65535&(KA+=ZA>>>16),jA=65535&(WA+=KA>>>16),TA=65535&(zA+=WA>>>16),$A=65535&(_A+=zA>>>16),II=65535&(AI+=_A>>>16),CI=65535&(gI+=AI>>>16),QI=65535&(tI+=gI>>>16),BI=65535&(iI+=tI>>>16),eI=65535&(EI+=iI>>>16),aI=65535&(nI+=EI>>>16),rI=65535&(oI+=nI>>>16),sI=65535&(hI+=oI>>>16),fI=65535&(wI+=hI>>>16),cI=65535&(DI+=wI>>>16),uI=65535&(yI+=DI>>>16),FI=65535&(lI+=yI>>>16),HI=GI+((MI+=lI>>>16)>>>16)&65535,pI=65535&MI,i^=63&I|128);return w(E[HI>>8]+E[255&HI]+E[pI>>8]+E[255&pI]+E[FI>>8]+E[255&FI]+E[uI>>8]+E[255&uI]+E[cI>>8]+E[255&cI]+E[fI>>8]+E[255&fI]+E[sI>>8]+E[255&sI]+E[rI>>8]+E[255&rI]+E[aI>>8]+E[255&aI]+E[eI>>8]+E[255&eI]+E[BI>>8]+E[255&BI]+E[QI>>8]+E[255&QI]+E[CI>>8]+E[255&CI]+E[II>>8]+E[255&II]+E[$A>>8]+E[255&$A]+E[TA>>8]+E[255&TA]+E[jA>>8]+E[255&jA]+E[OA>>8]+E[255&OA]+E[VA>>8]+E[255&VA]+E[XA>>8]+E[255&XA]+E[qA>>8]+E[255&qA]+E[YA>>8]+E[255&YA]+E[RA>>8]+E[255&RA]+E[NA>>8]+E[255&NA]+E[kA>>8]+E[255&kA]+E[LA>>8]+E[255&LA]+E[UA>>8]+E[255&UA]+E[HA>>8]+E[255&HA]+E[pA>>8]+E[255&pA]+E[FA>>8]+E[255&FA]+E[uA>>8]+E[255&uA]+E[cA>>8]+E[255&cA]+E[fA>>8]+E[255&fA]+E[sA>>8]+E[255&sA]+E[rA>>8]+E[255&rA]+E[aA>>8]+E[255&aA]+E[eA>>8]+E[255&eA]+E[BA>>8]+E[255&BA]+E[QA>>8]+E[255&QA]+E[CA>>8]+E[255&CA]+E[IA>>8]+E[255&IA]+E[$>>8]+E[255&$]+E[T>>8]+E[255&T]+E[j>>8]+E[255&j]+E[O>>8]+E[255&O]+E[V>>8]+E[255&V]+E[X>>8]+E[255&X]+E[q>>8]+E[255&q]+E[Y>>8]+E[255&Y]+E[R>>8]+E[255&R]+E[N>>8]+E[255&N]+E[k>>8]+E[255&k]+E[L>>8]+E[255&L]+E[U>>8]+E[255&U]+E[H>>8]+E[255&H]+E[p>>8]+E[255&p]+E[F>>8]+E[255&F]+E[u>>8]+E[255&u]+E[c>>8]+E[255&c]+E[f>>8]+E[255&f]+E[r>>8]+E[255&r]+E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i],1024)}return I=F,g=H,C=L,t=N,Q=Y,i=X,B=O,y("1a"),u(!1),l(),{hash:c,setKeyspace:function(A){if(52!==A&&!h[A])throw new Error("Supported FNV keyspacs: 32, 52, 64, 128, 256, 512, and 1024 bit");r=A},version:y,useUTF8:u,seed:l,fast1a32:function(A){var I,g=A.length-3,C=0,t=40389,Q=0,i=33052;for(I=0;I>>16)&65535),Q+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=403*t),Q=403*(i=Q+(C>>>16)&65535),Q+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=403*t),Q=403*(i=Q+(C>>>16)&65535),i=(Q+=(t^=A.charCodeAt(I++))<<8)+((C=403*t)>>>16)&65535,t=65535&C;for(;I>>16)&65535,t=65535&C;return(i<<16>>>0)+t},fast1a32hex:function(A){var I,g=A.length-3,C=0,t=40389,Q=0,i=33052;for(I=0;I>>16)&65535),Q+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=403*t),Q=403*(i=Q+(C>>>16)&65535),Q+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=403*t),Q=403*(i=Q+(C>>>16)&65535),i=(Q+=(t^=A.charCodeAt(I++))<<8)+((C=403*t)>>>16)&65535,t=65535&C;for(;I>>16)&65535,t=65535&C;return E[i>>>8&255]+E[255&i]+E[t>>>8&255]+E[255&t]},fast1a52:function(A){var I,g=A.length-3,C=0,t=8997,Q=0,i=33826,B=0,E=40164,e=0,n=52210;for(I=0;I>>16)>>>16)>>>16)&65535,Q=435*(i=65535&Q),B=435*(E=65535&B),e=435*n,B+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=435*t),n=(e+=i<<8)+((B+=(Q+=C>>>16)>>>16)>>>16)&65535,Q=435*(i=65535&Q),B=435*(E=65535&B),e=435*n,B+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=435*t),n=(e+=i<<8)+((B+=(Q+=C>>>16)>>>16)>>>16)&65535,Q=435*(i=65535&Q),B=435*(E=65535&B),e=435*n,B+=(t^=A.charCodeAt(I++))<<8,e+=i<<8,t=65535&(C=435*t),i=65535&(Q+=C>>>16),n=e+((B+=Q>>>16)>>>16)&65535,E=65535&B;for(;I>>16),n=e+((B+=Q>>>16)>>>16)&65535,E=65535&B;return 281474976710656*(15&n)+4294967296*E+65536*i+(t^n>>4)},fast1a52hex:function(A){var I,g=A.length-3,C=0,t=8997,Q=0,i=33826,B=0,n=40164,a=0,o=52210;for(I=0;I>>16)>>>16)>>>16)&65535,Q=435*(i=65535&Q),B=435*(n=65535&B),a=435*o,B+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=435*t),o=(a+=i<<8)+((B+=(Q+=C>>>16)>>>16)>>>16)&65535,Q=435*(i=65535&Q),B=435*(n=65535&B),a=435*o,B+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=435*t),o=(a+=i<<8)+((B+=(Q+=C>>>16)>>>16)>>>16)&65535,Q=435*(i=65535&Q),B=435*(n=65535&B),a=435*o,B+=(t^=A.charCodeAt(I++))<<8,a+=i<<8,t=65535&(C=435*t),i=65535&(Q+=C>>>16),o=a+((B+=Q>>>16)>>>16)&65535,n=65535&B;for(;I>>16),o=a+((B+=Q>>>16)>>>16)&65535,n=65535&B;return e[15&o]+E[n>>8]+E[255&n]+E[i>>8]+E[255&i]+E[t>>8^o>>12]+E[255&(t^o>>4)]},fast1a64:function(A){var I,g=A.length-3,C=0,t=8997,Q=0,i=33826,B=0,e=40164,n=0,a=52210;for(I=0;I>>16)>>>16)>>>16)&65535,Q=435*(i=65535&Q),B=435*(e=65535&B),n=435*a,B+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=435*t),a=(n+=i<<8)+((B+=(Q+=C>>>16)>>>16)>>>16)&65535,Q=435*(i=65535&Q),B=435*(e=65535&B),n=435*a,B+=(t^=A.charCodeAt(I++))<<8,t=65535&(C=435*t),a=(n+=i<<8)+((B+=(Q+=C>>>16)>>>16)>>>16)&65535,Q=435*(i=65535&Q),B=435*(e=65535&B),n=435*a,B+=(t^=A.charCodeAt(I++))<<8,n+=i<<8,t=65535&(C=435*t),i=65535&(Q+=C>>>16),a=n+((B+=Q>>>16)>>>16)&65535,e=65535&B;for(;I>>16),a=n+((B+=Q>>>16)>>>16)&65535,e=65535&B;return E[a>>8]+E[255&a]+E[e>>8]+E[255&e]+E[i>>8]+E[255&i]+E[t>>8]+E[255&t]},fast1a32utf:function(A){var I,g,C=A.length,t=0,Q=40389,i=0,B=33052;for(g=0;g>6|192)<<8)+((t=403*Q)>>>16)&65535,Q=65535&t,Q^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),i+=(Q^=I>>12&63|128)<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),B=(i+=(Q^=I>>6&63|128)<<8)+((t=403*Q)>>>16)&65535,Q=65535&t,Q^=63&I|128):(i=403*B,i+=(Q^=I>>12|224)<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),B=(i+=(Q^=I>>6&63|128)<<8)+((t=403*Q)>>>16)&65535,Q=65535&t,Q^=63&I|128),i=403*B,B=(i+=Q<<8)+((t=403*Q)>>>16)&65535,Q=65535&t;return(B<<16>>>0)+Q},fast1a32hexutf:function(A){var I,g,C=A.length,t=0,Q=40389,i=0,B=33052;for(g=0;g>6|192)<<8)+((t=403*Q)>>>16)&65535,Q=65535&t,Q^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),i+=(Q^=I>>12&63|128)<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),B=(i+=(Q^=I>>6&63|128)<<8)+((t=403*Q)>>>16)&65535,Q=65535&t,Q^=63&I|128):(i=403*B,i+=(Q^=I>>12|224)<<8,Q=65535&(t=403*Q),i=403*(B=i+(t>>>16)&65535),B=(i+=(Q^=I>>6&63|128)<<8)+((t=403*Q)>>>16)&65535,Q=65535&t,Q^=63&I|128),i=403*B,B=(i+=Q<<8)+((t=403*Q)>>>16)&65535,Q=65535&t;return E[B>>>8&255]+E[255&B]+E[Q>>>8&255]+E[255&Q]},fast1a52utf:function(A){var I,g,C=A.length,t=0,Q=8997,i=0,B=33826,E=0,e=40164,n=0,a=52210;for(g=0;g>6|192)<<8,n+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),a=n+((E+=i>>>16)>>>16)&65535,e=65535&E,Q^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,Q=65535&(t=435*Q),a=(n+=B<<8)+((E+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),E=435*(e=65535&E),n=435*a,E+=(Q^=I>>12&63|128)<<8,Q=65535&(t=435*Q),a=(n+=B<<8)+((E+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),E=435*(e=65535&E),n=435*a,E+=(Q^=I>>6&63|128)<<8,n+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),a=n+((E+=i>>>16)>>>16)&65535,e=65535&E,Q^=63&I|128):(i=435*B,E=435*e,n=435*a,E+=(Q^=I>>12|224)<<8,Q=65535&(t=435*Q),a=(n+=B<<8)+((E+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),E=435*(e=65535&E),n=435*a,E+=(Q^=I>>6&63|128)<<8,n+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),a=n+((E+=i>>>16)>>>16)&65535,e=65535&E,Q^=63&I|128),i=435*B,E=435*e,n=435*a,E+=Q<<8,n+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),a=n+((E+=i>>>16)>>>16)&65535,e=65535&E;return 281474976710656*(15&a)+4294967296*e+65536*B+(Q^a>>4)},fast1a52hexutf:function(A){var I,g,C=A.length,t=0,Q=8997,i=0,B=33826,n=0,a=40164,o=0,r=52210;for(g=0;g>6|192)<<8,o+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),r=o+((n+=i>>>16)>>>16)&65535,a=65535&n,Q^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,Q=65535&(t=435*Q),r=(o+=B<<8)+((n+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),n=435*(a=65535&n),o=435*r,n+=(Q^=I>>12&63|128)<<8,Q=65535&(t=435*Q),r=(o+=B<<8)+((n+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),n=435*(a=65535&n),o=435*r,n+=(Q^=I>>6&63|128)<<8,o+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),r=o+((n+=i>>>16)>>>16)&65535,a=65535&n,Q^=63&I|128):(i=435*B,n=435*a,o=435*r,n+=(Q^=I>>12|224)<<8,Q=65535&(t=435*Q),r=(o+=B<<8)+((n+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),n=435*(a=65535&n),o=435*r,n+=(Q^=I>>6&63|128)<<8,o+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),r=o+((n+=i>>>16)>>>16)&65535,a=65535&n,Q^=63&I|128),i=435*B,n=435*a,o=435*r,n+=Q<<8,o+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),r=o+((n+=i>>>16)>>>16)&65535,a=65535&n;return e[15&r]+E[a>>8]+E[255&a]+E[B>>8]+E[255&B]+E[Q>>8^r>>12]+E[255&(Q^r>>4)]},fast1a64utf:function(A){var I,g,C=A.length,t=0,Q=8997,i=0,B=33826,e=0,n=40164,a=0,o=52210;for(g=0;g>6|192)<<8,a+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),o=a+((e+=i>>>16)>>>16)&65535,n=65535&e,Q^=63&I|128):55296==(64512&I)&&g+1>18|240)<<8,Q=65535&(t=435*Q),o=(a+=B<<8)+((e+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),e=435*(n=65535&e),a=435*o,e+=(Q^=I>>12&63|128)<<8,Q=65535&(t=435*Q),o=(a+=B<<8)+((e+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),e=435*(n=65535&e),a=435*o,e+=(Q^=I>>6&63|128)<<8,a+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),o=a+((e+=i>>>16)>>>16)&65535,n=65535&e,Q^=63&I|128):(i=435*B,e=435*n,a=435*o,e+=(Q^=I>>12|224)<<8,Q=65535&(t=435*Q),o=(a+=B<<8)+((e+=(i+=t>>>16)>>>16)>>>16)&65535,i=435*(B=65535&i),e=435*(n=65535&e),a=435*o,e+=(Q^=I>>6&63|128)<<8,a+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),o=a+((e+=i>>>16)>>>16)&65535,n=65535&e,Q^=63&I|128),i=435*B,e=435*n,a=435*o,e+=Q<<8,a+=B<<8,Q=65535&(t=435*Q),B=65535&(i+=t>>>16),o=a+((e+=i>>>16)>>>16)&65535,n=65535&e;return E[o>>8]+E[255&o]+E[n>>8]+E[255&n]+E[B>>8]+E[255&B]+E[Q>>8]+E[255&Q]}}}();A.exports=I}));async function Gg(A,I){I=I||{};let g,C=32767,t=!1;for(;!t;)try{g=new WebAssembly.Memory({initial:C}),t=!0}catch(A){if(1===C)throw A;console.warn("Could not allocate "+1024*C*64+" bytes. This may cause severe instability. Trying with "+1024*C*64/2+" bytes"),C=Math.floor(C/2)}const Q=await WebAssembly.compile(A);let i;const B=await WebAssembly.instantiate(Q,{env:{memory:g},runtime:{error:function(A,g,C,t,Q,B){let E;throw E=7==A?e(g)+" "+i.getFr(t).toString()+" != "+i.getFr(Q).toString()+" "+e(B):9==A?e(g)+" "+i.getFr(t).toString()+" "+e(Q):5==A&&I.sym?e(g)+" "+I.sym.labelIdx2Name[Q]:e(g)+" "+C+" "+t+" "+Q+" "+B,console.log("ERROR: ",A,E),new Error(E)},log:function(A){console.log(i.getFr(A).toString())},logGetSignal:function(A,g){I.logGetSignal&&I.logGetSignal(A,i.getFr(g))},logSetSignal:function(A,g){I.logSetSignal&&I.logSetSignal(A,i.getFr(g))},logStartComponent:function(A){I.logStartComponent&&I.logStartComponent(A)},logFinishComponent:function(A){I.logFinishComponent&&I.logFinishComponent(A)}}}),E=I&&(I.sanityCheck||I.logGetSignal||I.logSetSignal||I.logStartComponent||I.logFinishComponent);return i=new Hg(g,B,E),i;function e(A){const I=new Uint8Array(g.buffer),C=[];for(let g=0;I[A+g]>0;g++)C.push(I[A+g]);return String.fromCharCode.apply(null,C)}}class Hg{constructor(A,I,g){this.memory=A,this.i32=new Uint32Array(A.buffer),this.instance=I,this.n32=(this.instance.exports.getFrLen()>>2)-2;const C=this.instance.exports.getPRawPrime(),t=new Array(this.n32);for(let A=0;A>2)+A];this.prime=hI.fromArray(t,4294967296),this.Fr=new HA(this.prime),this.mask32=hI.fromString("FFFFFFFF",16),this.NVars=this.instance.exports.getNVars(),this.n64=Math.floor((this.Fr.bitLength-1)/64)+1,this.R=this.Fr.e(hI.shiftLeft(1,64*this.n64)),this.RInv=this.Fr.inv(this.R),this.sanityCheck=g}async _doCalculateWitness(A,I){this.instance.exports.init(this.sanityCheck||I?1:0);const g=this.allocInt(),C=this.allocFr();Object.keys(A).forEach((I=>{const t=function(A){return pg.hash(A,64).hex()}(I),Q=parseInt(t.slice(0,8),16),i=parseInt(t.slice(8,16),16);try{this.instance.exports.getSignalOffset32(g,0,Q,i)}catch(A){throw new Error(`Signal ${I} is not an input of the circuit.`)}const B=this.getInt(g),E=(e=A[I],function A(I,g){if(Array.isArray(g))for(let C=0;C>2]}setInt(A,I){this.i32[A>>2]=I}getFr(A){const I=this,g=A>>2;if(2147483648&I.i32[g+1]){const A=new Array(I.n32);for(let C=0;C>2]=t,void(g.i32[1+(A>>2)]=0)}g.i32[A>>2]=0,g.i32[1+(A>>2)]=2147483648;const Q=hI.toArray(I,4294967296);for(let I=0;I>2)+I]=C>=0?Q[C]:0}}}async function dg(A,I,g,C){const t=await LI(I),Q=await t.read(t.totalSize);await t.close();const i=await Gg(Q),B=await i.calculateBinWitness(A),E=await kI(g,"wtns",2,2);await async function(A,I,g){await JI(A,1);const C=8*(Math.floor((hI.bitLength(g)-1)/64)+1);if(await A.writeULE32(C),await vI(A,g,C),I.byteLength%C!=0)throw new Error("Invalid witness length");await A.writeULE32(I.byteLength/C),await NI(A),await JI(A,2),await A.write(I),await NI(A)}(E,B,i.prime),await E.close()}const{unstringifyBigInts:Ug}=sI;function mg(A){let I=A.toString(16);for(;I.length<64;)I="0"+I;return I=`"0x${I}"`,I}var Lg=Object.freeze({__proto__:null,fullProve:async function(A,I,g,C){const t={type:"mem"};return await dg(A,I,t),await Mg(g,t,C)},prove:Mg,verify:async function(A,I,g,C){A=Ug(A),g=Ug(g),I=Ug(I);const t=await KI(A.curve),Q=t.G1.fromObject(A.IC[0]),i=new Uint8Array(2*t.G1.F.n8*I.length),B=new Uint8Array(t.Fr.n8*I.length);for(let g=0;g1)throw new Error(A.fileName+": File has more than one header");A.pos=I[1][0].p;const g=await A.readULE32(),C=await A.read(g),t=hI.fromRprLE(C),Q=await VI(t);if(8*Q.F1.n64!=g)throw new Error(A.fileName+": Invalid size");const i=await A.readULE32(),B=await A.readULE32();if(A.pos-I[1][0].p!=I[1][0].size)throw new Error("Invalid PTau header size");return{curve:Q,power:i,ceremonyPower:B}}function vg(A,I,g,C){const t={tau:{},alpha:{},beta:{}};return t.tau.g1_s=Q(),t.tau.g1_sx=Q(),t.alpha.g1_s=Q(),t.alpha.g1_sx=Q(),t.beta.g1_s=Q(),t.beta.g1_sx=Q(),t.tau.g2_spx=i(),t.alpha.g2_spx=i(),t.beta.g2_spx=i(),t;function Q(){let t;return t=C?g.G1.fromRprLEM(A,I):g.G1.fromRprUncompressed(A,I),I+=2*g.G1.F.n8,t}function i(){let t;return t=C?g.G2.fromRprLEM(A,I):g.G2.fromRprUncompressed(A,I),I+=2*g.G2.F.n8,t}}function Yg(A,I,g,C,t){async function Q(C){t?g.G1.toRprLEM(A,I,C):g.G1.toRprUncompressed(A,I,C),I+=2*g.F1.n8}async function i(C){t?g.G2.toRprLEM(A,I,C):g.G2.toRprUncompressed(A,I,C),I+=2*g.F2.n8}return Q(C.tau.g1_s),Q(C.tau.g1_sx),Q(C.alpha.g1_s),Q(C.alpha.g1_sx),Q(C.beta.g1_s),Q(C.beta.g1_sx),i(C.tau.g2_spx),i(C.alpha.g2_spx),i(C.beta.g2_spx),A}async function Pg(A,I){const g={};g.tauG1=await E(),g.tauG2=await e(),g.alphaG1=await E(),g.betaG1=await E(),g.betaG2=await e(),g.key=await async function(A,I,g){return vg(await A.read(2*I.F1.n8*6+2*I.F2.n8*3),0,I,g)}(A,I,!0),g.partialHash=await A.read(216),g.nextChallenge=await A.read(64),g.type=await A.readULE32();const C=new Uint8Array(2*I.G1.F.n8*6+2*I.G2.F.n8*3);Yg(C,0,I,g.key,!1);const t=_I(64);t.setPartialHash(g.partialHash),t.update(C),g.responseHash=t.digest();const Q=await A.readULE32(),i=A.pos;let B=0;for(;A.pos-i1)throw new Error(A.fileName+": File has more than one contributions section");A.pos=g[7][0].p;const C=await A.readULE32(),t=[];for(let g=0;g0){const I=new Uint8Array(Q);await A.writeULE32(I.byteLength),await A.write(I)}else await A.writeULE32(0);async function i(g){I.G1.toRprLEM(C,0,g),await A.write(C)}async function B(g){I.G2.toRprLEM(t,0,g),await A.write(t)}}async function Xg(A,I,g){await A.writeULE32(7);const C=A.pos;await A.writeULE64(0),await A.writeULE32(g.length);for(let C=0;C0?a[a.length-1].nextChallenge:Zg(e,n,Q);const c=await kI(g,"ptau",1,t?7:2);await Sg(c,e,n);const y=await f.read(64);if(Cg(i,D)&&(D=y,a[a.length-1].nextChallenge=D),!Cg(y,D))throw new Error("Wrong contribution. this contribution is not based on the previus hash");const u=new _I(64);u.update(y);const l=[];let F;F=await G(f,c,"G1",2,2**n*2-1,[1],"tauG1"),o.tauG1=F[0],F=await G(f,c,"G2",3,2**n,[1],"tauG2"),o.tauG2=F[0],F=await G(f,c,"G1",4,2**n,[0],"alphaG1"),o.alphaG1=F[0],F=await G(f,c,"G1",5,2**n,[0],"betaG1"),o.betaG1=F[0],F=await G(f,c,"G2",6,1,[0],"betaG2"),o.betaG2=F[0],o.partialHash=u.getPartialHash();const M=await f.read(2*e.F1.n8*6+2*e.F2.n8*3);o.key=vg(M,0,e,!1),u.update(new Uint8Array(M));const p=u.digest();if(Q&&Q.info(gg(p,"Contribution Response Hash imported: ")),t){const A=new _I(64);A.update(p),await H(A,c,"G1",2,2**n*2-1,"tauG1",Q),await H(A,c,"G2",3,2**n,"tauG2",Q),await H(A,c,"G1",4,2**n,"alphaTauG1",Q),await H(A,c,"G1",5,2**n,"betaTauG1",Q),await H(A,c,"G2",6,1,"betaG2",Q),o.nextChallenge=A.digest(),Q&&Q.info(gg(o.nextChallenge,"Next Challenge Hash: "))}else o.nextChallenge=i;return a.push(o),await Xg(c,e,a),await f.close(),await c.close(),await B.close(),o.nextChallenge;async function G(A,I,g,C,i,B,E){return t?await async function(A,I,g,C,t,i,B){const E=e[g],n=E.F.n8,a=2*E.F.n8,o=[];await JI(I,C);const r=Math.floor((1<<24)/a);l[C]=I.pos;for(let g=0;g=g&&I=I&&t1?E[E.length-2]:e;const a=E[E.length-1];if(I&&I.debug("Validating contribution #"+E[E.length-1].id),!await Og(Q,a,n,I))return!1;const o=_I(64);o.update(a.responseHash),I&&I.debug("Verifying powers in tau*G1 section");const r=await y(2,"G1","tauG1",2**i*2-1,[0,1],I);if(g=await Kg(Q,r.R1,r.R2,Q.G2.g,a.tauG2),!0!==g)return I&&I.error("tauG1 section. Powers do not match"),!1;if(!Q.G1.eq(Q.G1.g,r.singularPoints[0]))return I&&I.error("First element of tau*G1 section must be the generator"),!1;if(!Q.G1.eq(a.tauG1,r.singularPoints[1]))return I&&I.error("Second element of tau*G1 section does not match the one in the contribution section"),!1;I&&I.debug("Verifying powers in tau*G2 section");const h=await y(3,"G2","tauG2",2**i,[0,1],I);if(g=await Kg(Q,Q.G1.g,a.tauG1,h.R1,h.R2),!0!==g)return I&&I.error("tauG2 section. Powers do not match"),!1;if(!Q.G2.eq(Q.G2.g,h.singularPoints[0]))return I&&I.error("First element of tau*G2 section must be the generator"),!1;if(!Q.G2.eq(a.tauG2,h.singularPoints[1]))return I&&I.error("Second element of tau*G2 section does not match the one in the contribution section"),!1;I&&I.debug("Verifying powers in alpha*tau*G1 section");const s=await y(4,"G1","alphatauG1",2**i,[0],I);if(g=await Kg(Q,s.R1,s.R2,Q.G2.g,a.tauG2),!0!==g)return I&&I.error("alphaTauG1 section. Powers do not match"),!1;if(!Q.G1.eq(a.alphaG1,s.singularPoints[0]))return I&&I.error("First element of alpha*tau*G1 section (alpha*G1) does not match the one in the contribution section"),!1;I&&I.debug("Verifying powers in beta*tau*G1 section");const w=await y(5,"G1","betatauG1",2**i,[0],I);if(g=await Kg(Q,w.R1,w.R2,Q.G2.g,a.tauG2),!0!==g)return I&&I.error("betaTauG1 section. Powers do not match"),!1;if(!Q.G1.eq(a.betaG1,w.singularPoints[0]))return I&&I.error("First element of beta*tau*G1 section (beta*G1) does not match the one in the contribution section"),!1;const f=await async function(A){const I=Q.G2,g=2*I.F.n8,i=new Uint8Array(g);if(!t[6])throw A.error("File has no BetaG2 section"),new Error("File has no BetaG2 section");if(t[6].length>1)throw A.error("File has no BetaG2 section"),new Error("File has more than one GetaG2 section");C.pos=t[6][0].p;const B=await C.read(g),E=I.fromRprLEM(B);return I.toRprUncompressed(i,0,E),o.update(i),E}(I);if(!Q.G2.eq(a.betaG2,f))return I&&I.error("betaG2 element in betaG2 section does not match the one in the contribution section"),!1;const D=o.digest();if(i==B&&!Cg(D,a.nextChallenge))return I&&I.error("Hash of the values does not match the next challenge of the last contributor in the contributions section"),!1;I&&I.info(gg(D,"Next challenge hash: ")),c(a,n);for(let A=E.length-2;A>=0;A--){const g=E[A],C=A>0?E[A-1]:e;if(!await Og(Q,g,C,I))return!1;c(g,C)}if(I&&I.info("-----------------------------------------------------"),t[12]&&t[13]&&t[14]&&t[15]){let A;if(A=await u("G1",2,12,"tauG1",I),!A)return!1;if(A=await u("G2",3,13,"tauG2",I),!A)return!1;if(A=await u("G1",4,14,"alphaTauG1",I),!A)return!1;if(A=await u("G1",5,15,"betaTauG1",I),!A)return!1}else I&&I.warn('this file does not contain phase2 precalculated values. Please run: \n snarkjs "powersoftau preparephase2" to prepare this file to be used in the phase2 ceremony.');return await C.close(),I&&I.info("Powers of Tau Ok!"),!0;function c(A,g){if(!I)return;I.info("-----------------------------------------------------"),I.info(`Contribution #${A.id}: ${A.name||""}`),I.info(gg(A.nextChallenge,"Next Challenge: "));const C=new Uint8Array(2*Q.G1.F.n8*6+2*Q.G2.F.n8*3);Yg(C,0,Q,A.key,!1);const t=_I(64);t.setPartialHash(A.partialHash),t.update(C);const i=t.digest();I.info(gg(i,"Response Hash:")),I.info(gg(g.nextChallenge,"Response Hash:")),1==A.type&&(I.info(`Beacon generator: ${eg(A.beaconHash)}`),I.info(`Beacon iterations Exp: ${A.numIterationsExp}`))}async function y(A,I,g,i,B,E){const e=Q[I],n=2*e.F.n8;await SI(C,t,A);const a=[];let r=e.zero,h=e.zero,s=e.zero;for(let A=0;A0){const A=e.fromRprLEM(t,0),I=cA.randomBytes(4).readUInt32BE(0,!0);r=e.add(r,e.timesScalar(s,I)),h=e.add(h,e.timesScalar(A,I))}const f=await e.multiExpAffine(t.slice(0,(I-1)*n),w),D=await e.multiExpAffine(t.slice(n),w);r=e.add(r,f),h=e.add(h,D),s=e.fromRprLEM(t,(I-1)*n);for(let g=0;g=A&&C1;)e/=2,n+=1;if(2**n!=E)throw new Error("Invalid file size");t&&t.debug("Power to tau size: "+n);const a=await ig(C),o=await mI(g),r=_I(64);for(let A=0;A{t.debug(I+".g1_s: "+A.G1.toString(w[I].g1_s,16)),t.debug(I+".g1_sx: "+A.G1.toString(w[I].g1_sx,16)),t.debug(I+".g2_sp: "+A.G2.toString(w[I].g2_sp,16)),t.debug(I+".g2_spx: "+A.G2.toString(w[I].g2_spx,16)),t.debug("")}));const f=_I(64);await o.write(s),f.update(s),await jg(Q,o,f,A,"G1",2**n*2-1,A.Fr.one,w.tau.prvKey,"COMPRESSED","tauG1",t),await jg(Q,o,f,A,"G2",2**n,A.Fr.one,w.tau.prvKey,"COMPRESSED","tauG2",t),await jg(Q,o,f,A,"G1",2**n,w.alpha.prvKey,w.tau.prvKey,"COMPRESSED","alphaTauG1",t),await jg(Q,o,f,A,"G1",2**n,w.beta.prvKey,w.tau.prvKey,"COMPRESSED","betaTauG1",t),await jg(Q,o,f,A,"G2",1,w.beta.prvKey,w.tau.prvKey,"COMPRESSED","betaTauG2",t);const D=new Uint8Array(2*A.F1.n8*6+2*A.F2.n8*3);Yg(D,0,A,w,!1),await o.write(D),f.update(D);const c=f.digest();t&&t.info(gg(c,"Contribution Response Hash: ")),await o.close(),await Q.close()},beacon:async function(A,I,g,C,t,Q){const i=Eg(C);if(0==i.byteLength||2*i.byteLength!=C.length)return Q&&Q.error("Invalid Beacon Hash. (It must be a valid hexadecimal sequence)"),!1;if(i.length>=256)return Q&&Q.error("Maximum lenght of beacon hash is 255 bytes"),!1;if((t=parseInt(t))<10||t>63)return Q&&Q.error("Invalid numIterationsExp. (Must be between 10 and 63)"),!1;await _I.ready();const{fd:B,sections:E}=await bI(A,"ptau",1),{curve:e,power:n,ceremonyPower:a}=await Rg(B,E);if(n!=a)return Q&&Q.error("This file has been reduced. You cannot contribute into a reduced file."),!1;E[12]&&Q&&Q.warn("Contributing into a file that has phase2 calculated. You will have to prepare phase2 again.");const o=await qg(B,e,E),r={name:g,type:1,numIterationsExp:t,beaconHash:i};let h;h=o.length>0?o[o.length-1].nextChallenge:Zg(e,n,Q),r.key=Vg(e,h,i,t);const s=new _I(64);s.update(h);const w=await kI(I,"ptau",1,7);await Sg(w,e,n);const f=[];let D;D=await l(2,"G1",2**n*2-1,e.Fr.e(1),r.key.tau.prvKey,"tauG1",Q),r.tauG1=D[1],D=await l(3,"G2",2**n,e.Fr.e(1),r.key.tau.prvKey,"tauG2",Q),r.tauG2=D[1],D=await l(4,"G1",2**n,r.key.alpha.prvKey,r.key.tau.prvKey,"alphaTauG1",Q),r.alphaG1=D[0],D=await l(5,"G1",2**n,r.key.beta.prvKey,r.key.tau.prvKey,"betaTauG1",Q),r.betaG1=D[0],D=await l(6,"G2",1,r.key.beta.prvKey,r.key.tau.prvKey,"betaTauG2",Q),r.betaG2=D[0],r.partialHash=s.getPartialHash();const c=new Uint8Array(2*e.F1.n8*6+2*e.F2.n8*3);Yg(c,0,e,r.key,!1),s.update(new Uint8Array(c));const y=s.digest();Q&&Q.info(gg(y,"Contribution Response Hash imported: "));const u=new _I(64);return u.update(y),await F(w,"G1",2,2**n*2-1,"tauG1",Q),await F(w,"G2",3,2**n,"tauG2",Q),await F(w,"G1",4,2**n,"alphaTauG1",Q),await F(w,"G1",5,2**n,"betaTauG1",Q),await F(w,"G2",6,1,"betaG2",Q),r.nextChallenge=u.digest(),Q&&Q.info(gg(r.nextChallenge,"Next Challenge Hash: ")),o.push(r),await Xg(w,e,o),await B.close(),await w.close(),y;async function l(A,I,g,C,t,Q,i){const n=[];B.pos=E[A][0].p,await JI(w,A),f[A]=w.pos;const a=e[I],o=2*a.F.n8,r=Math.floor((1<<20)/o);let h=C;for(let A=0;A0?n[n.length-1].nextChallenge:Zg(B,E,t),a.key=Ng(B,o,r);const h=new _I(64);h.update(o);const s=await kI(I,"ptau",1,7);await Sg(s,B,E);const w=[];let f;f=await u(2,"G1",2**E*2-1,B.Fr.e(1),a.key.tau.prvKey,"tauG1"),a.tauG1=f[1],f=await u(3,"G2",2**E,B.Fr.e(1),a.key.tau.prvKey,"tauG2"),a.tauG2=f[1],f=await u(4,"G1",2**E,a.key.alpha.prvKey,a.key.tau.prvKey,"alphaTauG1"),a.alphaG1=f[0],f=await u(5,"G1",2**E,a.key.beta.prvKey,a.key.tau.prvKey,"betaTauG1"),a.betaG1=f[0],f=await u(6,"G2",1,a.key.beta.prvKey,a.key.tau.prvKey,"betaTauG2"),a.betaG2=f[0],a.partialHash=h.getPartialHash();const D=new Uint8Array(2*B.F1.n8*6+2*B.F2.n8*3);Yg(D,0,B,a.key,!1),h.update(new Uint8Array(D));const c=h.digest();t&&t.info(gg(c,"Contribution Response Hash imported: "));const y=new _I(64);return y.update(c),await l(s,"G1",2,2**E*2-1,"tauG1"),await l(s,"G2",3,2**E,"tauG2"),await l(s,"G1",4,2**E,"alphaTauG1"),await l(s,"G1",5,2**E,"betaTauG1"),await l(s,"G2",6,1,"betaG2"),a.nextChallenge=y.digest(),t&&t.info(gg(a.nextChallenge,"Next Challenge Hash: ")),n.push(a),await Xg(s,B,n),await Q.close(),await s.close(),c;async function u(A,I,g,C,E,e){const n=[];Q.pos=i[A][0].p,await JI(s,A),w[A]=s.pos;const a=B[I],o=2*a.F.n8,r=Math.floor((1<<20)/o);let f=C;for(let A=0;A=this.length&&(this.length=A+1),!0}getKeys(){const A=new AC;for(let I=0;I1<<20?new AC:[];for(let A=0;A1<<20?new AC:[];for(let A=0;A{g[C]=QC(A,I[C])})),g}return"bigint"==typeof I||void 0!==I.eq?I.toString(10):I}var iC=Object.freeze({__proto__:null,print:function(A,I,g){for(let I=0;I{let C="";return Object.keys(g).forEach((t=>{let Q=I.varIdx2Name[t];"one"==Q&&(Q="");let i=A.curve.Fr.toString(g[t]);"1"==i&&(i=""),"-1"==i&&(i="-"),""!=C&&"-"!=i[0]&&(i="+"+i),""!=C&&(i=" "+i),C=C+i+Q})),C},Q=`[ ${t(C[0])} ] * [ ${t(C[1])} ] - [ ${t(C[2])} ] = 0`;g&&g.info(Q)}},info:async function(A,I){const g=await gC(A);return hI.eq(g.prime,tC)?I&&I.info("Curve: bn-128"):hI.eq(g.prime,CC)?I&&I.info("Curve: bls12-381"):I&&I.info(`Unknown Curve. Prime: ${hI.toString(g.prime)}`),I&&I.info(`# of Wires: ${g.nVars}`),I&&I.info(`# of Constraints: ${g.nConstraints}`),I&&I.info(`# of Private Inputs: ${g.nPrvInputs}`),I&&I.info(`# of Public Inputs: ${g.nPubInputs}`),I&&I.info(`# of Labels: ${g.nLabels}`),I&&I.info(`# of Outputs: ${g.nOutputs}`),g},exportJson:async function(A,I){const g=await gC(A,!0,!0,!0,I),C=g.curve.Fr;return delete g.curve,QC(C,g)}});async function BC(A){const I={labelIdx2Name:["one"],varIdx2Name:["one"],componentIdx2Name:[]},g=await LI(A),C=await g.read(g.totalSize),t=new TextDecoder("utf-8").decode(C).split("\n");for(let A=0;A=this.length&&(this.length=A+1),!0}getKeys(){const A=new oC;for(let I=0;IE)return C&&C.error(`circuit too big for this power of tau ceremony. ${a.nConstraints}*2 > 2**${E}`),-1;if(!i[12])return C&&C.error("Powers of tau is not prepared."),-1;const w=a.nOutputs+a.nPubInputs,f=2**s;await JI(o,1),await o.writeULE32(1),await NI(o),await JI(o,2);const D=B.q,c=8*(Math.floor((hI.bitLength(D)-1)/64)+1),y=B.r,u=8*(Math.floor((hI.bitLength(y)-1)/64)+1),l=hI.mod(hI.shl(1,8*u),y),F=B.Fr.e(hI.mod(hI.mul(l,l),y));let M,p,G;await o.writeULE32(c),await vI(o,D,c),await o.writeULE32(u),await vI(o,y,u),await o.writeULE32(a.nVars),await o.writeULE32(w),await o.writeULE32(f),M=await Q.read(r,i[4][0].p),await o.write(M),M=await B.G1.batchLEMtoU(M),t.update(M),p=await Q.read(r,i[5][0].p),await o.write(p),p=await B.G1.batchLEMtoU(p),t.update(p),G=await Q.read(h,i[6][0].p),await o.write(G),G=await B.G2.batchLEMtoU(G),t.update(G);const H=new Uint8Array(r);B.G1.toRprLEM(H,0,B.G1.g);const d=new Uint8Array(h);B.G2.toRprLEM(d,0,B.G2.g);const U=new Uint8Array(r);B.G1.toRprUncompressed(U,0,B.G1.g);const m=new Uint8Array(h);B.G2.toRprUncompressed(m,0,B.G2.g),await o.write(d),await o.write(H),await o.write(d),t.update(m),t.update(U),t.update(m),await NI(o),C&&C.info("Reading r1cs");let L=await qI(e,n,2);const b=new oC(a.nVars),k=new oC(a.nVars),J=new oC(a.nVars),N=new oC(a.nVars-w-1),S=new Array(w+1);C&&C.info("Reading tauG1");let R=await qI(Q,i,12,(f-1)*r,f*r);C&&C.info("Reading tauG2");let v=await qI(Q,i,13,(f-1)*h,f*h);C&&C.info("Reading alphatauG1");let Y=await qI(Q,i,14,(f-1)*r,f*r);C&&C.info("Reading betatauG1");let P=await qI(Q,i,15,(f-1)*r,f*r);await async function(){const A=new Uint8Array(12+B.Fr.n8),I=new DataView(A.buffer),g=new Uint8Array(B.Fr.n8);B.Fr.toRprLE(g,0,B.Fr.e(1));let t=0;function Q(){const A=L.slice(t,t+4);t+=4;return new DataView(A.buffer).getUint32(0,!0)}const i=new oC;for(let A=0;A=0?B.Fr.fromRprLE(L.slice(C[3],C[3]+B.Fr.n8),0):B.Fr.fromRprLE(g,0);const Q=B.Fr.mul(t,F);B.Fr.toRprLE(A,12,Q),E.set(A,n),n+=A.length}await o.write(E),await NI(o)}(),await x(3,"G1",S,"IC"),await async function(){await JI(o,9);const A=new VA(f*r);if(s(C&&C.debug(`Writing points end ${Q}: ${n}/${g.length}`),A)))),e+=t,A++}const n=await Promise.all(E);for(let A=0;A32768?(r=new VA(s*Q),h=new VA(s*B.Fr.n8)):(r=new Uint8Array(s*Q),h=new Uint8Array(s*B.Fr.n8));let w=0,f=0;const D=[R,v,Y,P],c=new Uint8Array(B.Fr.n8);B.Fr.toRprLE(c,0,B.Fr.e(1));let y=0;for(let A=0;A=0?h.set(L.slice(I[A][t][2],I[A][t][2]+B.Fr.n8),y*B.Fr.n8):h.set(c,y*B.Fr.n8),y++;if(I.length>1){const A=[];A.push({cmd:"ALLOCSET",var:0,buff:r}),A.push({cmd:"ALLOCSET",var:1,buff:h}),A.push({cmd:"ALLOC",var:2,len:I.length*i}),w=0,f=0;let g=0;for(let C=0;C=0;A--){const I=n.contributions[A];C&&C.info("-------------------------"),C&&C.info(gg(I.contributionHash,`contribution #${A+1} ${I.name?I.name:""}:`)),1==I.type&&(C&&C.info(`Beacon generator: ${eg(I.beaconHash)}`),C&&C.info(`Beacon iterations Exp: ${I.numIterationsExp}`))}return C&&C.info("-------------------------"),C&&C.info("ZKey Ok!"),!0;async function D(A,I){const g=2*E.G1.F.n8,C=A.byteLength/g,t=E.tm.concurrency,Q=Math.floor(C/t),i=[];for(let g=0;go.contributions.length)return t&&t.error("The impoerted file does not include new contributions"),!1;for(let A=0;A