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=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;const{fd:B,sections:E}=await bI(A,"zkey",2),e=await sg(B,E);if("groth16"!=e.protocol)throw new Error("zkey file is not groth16");const n=await VI(e.q),a=await fg(B,n,E),o=await kI(I,"zkey",1,10),r=await Bg(i,t),h=_I(64);h.update(a.csHash);for(let A=0;A>BigInt(e)}const r=o,c=n;var l=Object.freeze({__proto__:null,fromString:a,e:i,fromArray:function(t,e){let a=BigInt(0);e=BigInt(e);for(let i=0;i>=BigInt(1)}return a},bits:function(t){let e=BigInt(t);const a=[];for(;e;)e&BigInt(1)?a.push(1):a.push(0),e>>=BigInt(1);return a},toNumber:function(t){if(t>BigInt(Number.MAX_SAFE_INTEGER))throw new Error("Number too big");return Number(t)},toArray:function(t,e){const a=[];let i=BigInt(t);for(e=BigInt(e);i;)a.unshift(Number(i%e)),i/=e;return a},add:function(t,e){return BigInt(t)+BigInt(e)},sub:function(t,e){return BigInt(t)-BigInt(e)},neg:function(t){return-BigInt(t)},mul:function(t,e){return BigInt(t)*BigInt(e)},square:function(t){return BigInt(t)*BigInt(t)},pow:function(t,e){return BigInt(t)**BigInt(e)},exp:function(t,e){return BigInt(t)**BigInt(e)},abs:function(t){return BigInt(t)>=0?BigInt(t):-BigInt(t)},div:function(t,e){return BigInt(t)/BigInt(e)},mod:function(t,e){return BigInt(t)%BigInt(e)},eq:function(t,e){return BigInt(t)==BigInt(e)},neq:function(t,e){return BigInt(t)!=BigInt(e)},lt:function(t,e){return BigInt(t)BigInt(e)},leq:function(t,e){return BigInt(t)<=BigInt(e)},geq:function(t,e){return BigInt(t)>=BigInt(e)},band:function(t,e){return BigInt(t)&BigInt(e)},bor:function(t,e){return BigInt(t)|BigInt(e)},bxor:function(t,e){return BigInt(t)^BigInt(e)},land:function(t,e){return BigInt(t)&&BigInt(e)},lor:function(t,e){return BigInt(t)||BigInt(e)},lnot:function(t){return!BigInt(t)}}),s="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{};function d(t){var e={exports:{}};return t(e,e.exports),e.exports}var u=d((function(t){var e=function(t){var a=1e7,i=9007199254740992,o=g(i),n="0123456789abcdefghijklmnopqrstuvwxyz",r="function"==typeof BigInt;function c(t,e,a,i){return void 0===t?c[0]:void 0!==e&&(10!=+e||a)?K(t,e,a,i):Z(t)}function l(t,e){this.value=t,this.sign=e,this.isSmall=!1}function s(t){this.value=t,this.sign=t<0,this.isSmall=!0}function d(t){this.value=t}function u(t){return-i0?Math.floor(t):Math.ceil(t)}function m(t,e){var i,o,n=t.length,r=e.length,c=new Array(n),l=0,s=a;for(o=0;o=s?1:0,c[o]=i-l*s;for(;o0&&c.push(l),c}function L(t,e){return t.length>=e.length?m(t,e):m(e,t)}function w(t,e){var i,o,n=t.length,r=new Array(n),c=a;for(o=0;o0;)r[o++]=e%c,e=Math.floor(e/c);return r}function A(t,e){var i,o,n=t.length,r=e.length,c=new Array(n),l=0,s=a;for(i=0;i0;)r[o++]=l%c,l=Math.floor(l/c);return r}function C(t,e){for(var a=[];e-- >0;)a.push(0);return a.concat(t)}function F(t,e){var a=Math.max(t.length,e.length);if(a<=30)return y(t,e);a=Math.ceil(a/2);var i=t.slice(a),o=t.slice(0,a),n=e.slice(a),r=e.slice(0,a),c=F(o,r),l=F(i,n),s=F(L(o,i),L(r,n)),d=L(L(c,C(A(A(s,c),l),a)),C(l,2*a));return _(d),d}function x(t,e,i){return new l(t=0;--a)o=(n=1e7*o+t[a])-(i=h(n/e))*e,c[a]=0|i;return[c,0|o]}function B(t,e){var i,o=Z(e);if(r)return[new d(t.value/o.value),new d(t.value%o.value)];var n,u=t.value,m=o.value;if(0===m)throw new Error("Cannot divide by zero");if(t.isSmall)return o.isSmall?[new s(h(u/m)),new s(u%m)]:[c[0],t];if(o.isSmall){if(1===m)return[t,c[0]];if(-1==m)return[t.negate(),c[0]];var L=Math.abs(m);if(L=0;o--){for(i=g-1,L[o+u]!==h&&(i=Math.floor((L[o+u]*g+L[o+u-1])/h)),n=0,r=0,l=w.length,c=0;cs&&(n=(n+1)*g),i=Math.ceil(n/r);do{if(S(c=I(e,i),u)<=0)break;i--}while(i);d.push(i),u=A(u,c)}return d.reverse(),[f(d),f(u)]}(u,m),n=i[0];var y=t.sign!==o.sign,C=i[1],F=t.sign;return"number"==typeof n?(y&&(n=-n),n=new s(n)):n=new l(n,y),"number"==typeof C?(F&&(C=-C),C=new s(C)):C=new l(C,F),[n,C]}function S(t,e){if(t.length!==e.length)return t.length>e.length?1:-1;for(var a=t.length-1;a>=0;a--)if(t[a]!==e[a])return t[a]>e[a]?1:-1;return 0}function G(t){var e=t.abs();return!e.isUnit()&&(!!(e.equals(2)||e.equals(3)||e.equals(5))||!(e.isEven()||e.isDivisibleBy(3)||e.isDivisibleBy(5))&&(!!e.lesser(49)||void 0))}function P(t,a){for(var i,o,n,r=t.prev(),c=r,l=0;c.isEven();)c=c.divide(2),l++;t:for(o=0;o=0?i=A(t,e):(i=A(e,t),a=!a),"number"==typeof(i=f(i))?(a&&(i=-i),new s(i)):new l(i,a)}(a,i,this.sign)},l.prototype.minus=l.prototype.subtract,s.prototype.subtract=function(t){var e=Z(t),a=this.value;if(a<0!==e.sign)return this.add(e.negate());var i=e.value;return e.isSmall?new s(a-i):b(i,Math.abs(a),a>=0)},s.prototype.minus=s.prototype.subtract,d.prototype.subtract=function(t){return new d(this.value-Z(t).value)},d.prototype.minus=d.prototype.subtract,l.prototype.negate=function(){return new l(this.value,!this.sign)},s.prototype.negate=function(){var t=this.sign,e=new s(-this.value);return e.sign=!t,e},d.prototype.negate=function(){return new d(-this.value)},l.prototype.abs=function(){return new l(this.value,!1)},s.prototype.abs=function(){return new s(Math.abs(this.value))},d.prototype.abs=function(){return new d(this.value>=0?this.value:-this.value)},l.prototype.multiply=function(t){var e,i,o,n=Z(t),r=this.value,s=n.value,d=this.sign!==n.sign;if(n.isSmall){if(0===s)return c[0];if(1===s)return this;if(-1===s)return this.negate();if((e=Math.abs(s))0?F(r,s):y(r,s),d)},l.prototype.times=l.prototype.multiply,s.prototype._multiplyBySmall=function(t){return u(t.value*this.value)?new s(t.value*this.value):x(Math.abs(t.value),g(Math.abs(this.value)),this.sign!==t.sign)},l.prototype._multiplyBySmall=function(t){return 0===t.value?c[0]:1===t.value?this:-1===t.value?this.negate():x(Math.abs(t.value),this.value,this.sign!==t.sign)},s.prototype.multiply=function(t){return Z(t)._multiplyBySmall(this)},s.prototype.times=s.prototype.multiply,d.prototype.multiply=function(t){return new d(this.value*Z(t).value)},d.prototype.times=d.prototype.multiply,l.prototype.square=function(){return new l(v(this.value),!1)},s.prototype.square=function(){var t=this.value*this.value;return u(t)?new s(t):new l(v(g(Math.abs(this.value))),!1)},d.prototype.square=function(t){return new d(this.value*this.value)},l.prototype.divmod=function(t){var e=B(this,t);return{quotient:e[0],remainder:e[1]}},d.prototype.divmod=s.prototype.divmod=l.prototype.divmod,l.prototype.divide=function(t){return B(this,t)[0]},d.prototype.over=d.prototype.divide=function(t){return new d(this.value/Z(t).value)},s.prototype.over=s.prototype.divide=l.prototype.over=l.prototype.divide,l.prototype.mod=function(t){return B(this,t)[1]},d.prototype.mod=d.prototype.remainder=function(t){return new d(this.value%Z(t).value)},s.prototype.remainder=s.prototype.mod=l.prototype.remainder=l.prototype.mod,l.prototype.pow=function(t){var e,a,i,o=Z(t),n=this.value,r=o.value;if(0===r)return c[1];if(0===n)return c[0];if(1===n)return c[1];if(-1===n)return o.isEven()?c[1]:c[-1];if(o.sign)return c[0];if(!o.isSmall)throw new Error("The exponent "+o.toString()+" is too large.");if(this.isSmall&&u(e=Math.pow(n,r)))return new s(h(e));for(a=this,i=c[1];!0&r&&(i=i.times(a),--r),0!==r;)r/=2,a=a.square();return i},s.prototype.pow=l.prototype.pow,d.prototype.pow=function(t){var e=Z(t),a=this.value,i=e.value,o=BigInt(0),n=BigInt(1),r=BigInt(2);if(i===o)return c[1];if(a===o)return c[0];if(a===n)return c[1];if(a===BigInt(-1))return e.isEven()?c[1]:c[-1];if(e.isNegative())return new d(o);for(var l=this,s=c[1];(i&n)===n&&(s=s.times(l),--i),i!==o;)i/=r,l=l.square();return s},l.prototype.modPow=function(t,e){if(t=Z(t),(e=Z(e)).isZero())throw new Error("Cannot take modPow with modulus 0");var a=c[1],i=this.mod(e);for(t.isNegative()&&(t=t.multiply(c[-1]),i=i.modInv(e));t.isPositive();){if(i.isZero())return c[0];t.isOdd()&&(a=a.multiply(i).mod(e)),t=t.divide(2),i=i.square().mod(e)}return a},d.prototype.modPow=s.prototype.modPow=l.prototype.modPow,l.prototype.compareAbs=function(t){var e=Z(t),a=this.value,i=e.value;return e.isSmall?1:S(a,i)},s.prototype.compareAbs=function(t){var e=Z(t),a=Math.abs(this.value),i=e.value;return e.isSmall?a===(i=Math.abs(i))?0:a>i?1:-1:-1},d.prototype.compareAbs=function(t){var e=this.value,a=Z(t).value;return(e=e>=0?e:-e)===(a=a>=0?a:-a)?0:e>a?1:-1},l.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var e=Z(t),a=this.value,i=e.value;return this.sign!==e.sign?e.sign?1:-1:e.isSmall?this.sign?-1:1:S(a,i)*(this.sign?-1:1)},l.prototype.compareTo=l.prototype.compare,s.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var e=Z(t),a=this.value,i=e.value;return e.isSmall?a==i?0:a>i?1:-1:a<0!==e.sign?a<0?-1:1:a<0?1:-1},s.prototype.compareTo=s.prototype.compare,d.prototype.compare=function(t){if(t===1/0)return-1;if(t===-1/0)return 1;var e=this.value,a=Z(t).value;return e===a?0:e>a?1:-1},d.prototype.compareTo=d.prototype.compare,l.prototype.equals=function(t){return 0===this.compare(t)},d.prototype.eq=d.prototype.equals=s.prototype.eq=s.prototype.equals=l.prototype.eq=l.prototype.equals,l.prototype.notEquals=function(t){return 0!==this.compare(t)},d.prototype.neq=d.prototype.notEquals=s.prototype.neq=s.prototype.notEquals=l.prototype.neq=l.prototype.notEquals,l.prototype.greater=function(t){return this.compare(t)>0},d.prototype.gt=d.prototype.greater=s.prototype.gt=s.prototype.greater=l.prototype.gt=l.prototype.greater,l.prototype.lesser=function(t){return this.compare(t)<0},d.prototype.lt=d.prototype.lesser=s.prototype.lt=s.prototype.lesser=l.prototype.lt=l.prototype.lesser,l.prototype.greaterOrEquals=function(t){return this.compare(t)>=0},d.prototype.geq=d.prototype.greaterOrEquals=s.prototype.geq=s.prototype.greaterOrEquals=l.prototype.geq=l.prototype.greaterOrEquals,l.prototype.lesserOrEquals=function(t){return this.compare(t)<=0},d.prototype.leq=d.prototype.lesserOrEquals=s.prototype.leq=s.prototype.lesserOrEquals=l.prototype.leq=l.prototype.lesserOrEquals,l.prototype.isEven=function(){return 0==(1&this.value[0])},s.prototype.isEven=function(){return 0==(1&this.value)},d.prototype.isEven=function(){return(this.value&BigInt(1))===BigInt(0)},l.prototype.isOdd=function(){return 1==(1&this.value[0])},s.prototype.isOdd=function(){return 1==(1&this.value)},d.prototype.isOdd=function(){return(this.value&BigInt(1))===BigInt(1)},l.prototype.isPositive=function(){return!this.sign},s.prototype.isPositive=function(){return this.value>0},d.prototype.isPositive=s.prototype.isPositive,l.prototype.isNegative=function(){return this.sign},s.prototype.isNegative=function(){return this.value<0},d.prototype.isNegative=s.prototype.isNegative,l.prototype.isUnit=function(){return!1},s.prototype.isUnit=function(){return 1===Math.abs(this.value)},d.prototype.isUnit=function(){return this.abs().value===BigInt(1)},l.prototype.isZero=function(){return!1},s.prototype.isZero=function(){return 0===this.value},d.prototype.isZero=function(){return this.value===BigInt(0)},l.prototype.isDivisibleBy=function(t){var e=Z(t);return!e.isZero()&&(!!e.isUnit()||(0===e.compareAbs(2)?this.isEven():this.mod(e).isZero()))},d.prototype.isDivisibleBy=s.prototype.isDivisibleBy=l.prototype.isDivisibleBy,l.prototype.isPrime=function(a){var i=G(this);if(i!==t)return i;var o=this.abs(),n=o.bitLength();if(n<=64)return P(o,[2,3,5,7,11,13,17,19,23,29,31,37]);for(var r=Math.log(2)*n.toJSNumber(),c=Math.ceil(!0===a?2*Math.pow(r,2):r),l=[],s=0;s-i?new s(t-1):new l(o,!0)},d.prototype.prev=function(){return new d(this.value-BigInt(1))};for(var O=[1];2*O[O.length-1]<=a;)O.push(2*O[O.length-1]);var U=O.length,z=O[U-1];function q(t){return Math.abs(t)<=a}function Q(t,a,i){a=Z(a);for(var o=t.isNegative(),n=a.isNegative(),r=o?t.not():t,c=n?a.not():a,l=0,s=0,d=null,u=null,g=[];!r.isZero()||!c.isZero();)l=(d=B(r,z))[1].toJSNumber(),o&&(l=z-1-l),s=(u=B(c,z))[1].toJSNumber(),n&&(s=z-1-s),r=d[0],c=u[0],g.push(i(l,s));for(var f=0!==i(o?1:0,n?1:0)?e(-1):e(0),_=g.length-1;_>=0;_-=1)f=f.multiply(z).add(e(g[_]));return f}l.prototype.shiftLeft=function(t){var e=Z(t).toJSNumber();if(!q(e))throw new Error(String(e)+" is too large for shifting.");if(e<0)return this.shiftRight(-e);var a=this;if(a.isZero())return a;for(;e>=U;)a=a.multiply(z),e-=U-1;return a.multiply(O[e])},d.prototype.shiftLeft=s.prototype.shiftLeft=l.prototype.shiftLeft,l.prototype.shiftRight=function(t){var e,a=Z(t).toJSNumber();if(!q(a))throw new Error(String(a)+" is too large for shifting.");if(a<0)return this.shiftLeft(-a);for(var i=this;a>=U;){if(i.isZero()||i.isNegative()&&i.isUnit())return i;i=(e=B(i,z))[1].isNegative()?e[0].prev():e[0],a-=U-1}return(e=B(i,O[a]))[1].isNegative()?e[0].prev():e[0]},d.prototype.shiftRight=s.prototype.shiftRight=l.prototype.shiftRight,l.prototype.not=function(){return this.negate().prev()},d.prototype.not=s.prototype.not=l.prototype.not,l.prototype.and=function(t){return Q(this,t,(function(t,e){return t&e}))},d.prototype.and=s.prototype.and=l.prototype.and,l.prototype.or=function(t){return Q(this,t,(function(t,e){return t|e}))},d.prototype.or=s.prototype.or=l.prototype.or,l.prototype.xor=function(t){return Q(this,t,(function(t,e){return t^e}))},d.prototype.xor=s.prototype.xor=l.prototype.xor;var M=1<<30;function k(t){var e=t.value,i="number"==typeof e?e|M:"bigint"==typeof e?e|BigInt(M):e[0]+e[1]*a|1073758208;return i&-i}function R(t,a){if(a.compareTo(t)<=0){var i=R(t,a.square(a)),o=i.p,n=i.e,r=o.multiply(a);return r.compareTo(t)<=0?{p:r,e:2*n+1}:{p:o,e:2*n}}return{p:e(1),e:0}}function N(t,e){return t=Z(t),e=Z(e),t.greater(e)?t:e}function T(t,e){return t=Z(t),e=Z(e),t.lesser(e)?t:e}function D(t,e){if(t=Z(t).abs(),e=Z(e).abs(),t.equals(e))return t;if(t.isZero())return e;if(e.isZero())return t;for(var a,i,o=c[1];t.isEven()&&e.isEven();)a=T(k(t),k(e)),t=t.divide(a),e=e.divide(a),o=o.multiply(a);for(;t.isEven();)t=t.divide(k(t));do{for(;e.isEven();)e=e.divide(k(e));t.greater(e)&&(i=e,e=t,t=i),e=e.subtract(t)}while(!e.isZero());return o.isUnit()?t:t.multiply(o)}l.prototype.bitLength=function(){var t=this;return t.compareTo(e(0))<0&&(t=t.negate().subtract(e(1))),0===t.compareTo(e(0))?e(0):e(R(t,e(2)).e).add(e(1))},d.prototype.bitLength=s.prototype.bitLength=l.prototype.bitLength;var K=function(t,e,a,i){a=a||n,t=String(t),i||(t=t.toLowerCase(),a=a.toLowerCase());var o,r=t.length,c=Math.abs(e),l={};for(o=0;o=c)){if("1"===u&&1===c)continue;throw new Error(u+" is not a valid digit in base "+e+".")}}e=Z(e);var s=[],d="-"===t[0];for(o=d?1:0;o"!==t[o]&&o=0;i--)o=o.add(t[i].times(n)),n=n.times(e);return a?o.negate():o}function j(t,a){if((a=e(a)).isZero()){if(t.isZero())return{value:[0],isNegative:!1};throw new Error("Cannot convert nonzero numbers to base 0.")}if(a.equals(-1)){if(t.isZero())return{value:[0],isNegative:!1};if(t.isNegative())return{value:[].concat.apply([],Array.apply(null,Array(-t.toJSNumber())).map(Array.prototype.valueOf,[1,0])),isNegative:!1};var i=Array.apply(null,Array(t.toJSNumber()-1)).map(Array.prototype.valueOf,[0,1]);return i.unshift([1]),{value:[].concat.apply([],i),isNegative:!1}}var o=!1;if(t.isNegative()&&a.isPositive()&&(o=!0,t=t.abs()),a.isUnit())return t.isZero()?{value:[0],isNegative:!1}:{value:Array.apply(null,Array(t.toJSNumber())).map(Number.prototype.valueOf,1),isNegative:o};for(var n,r=[],c=t;c.isNegative()||c.compareAbs(a)>=0;){n=c.divmod(a),c=n.quotient;var l=n.remainder;l.isNegative()&&(l=a.minus(l).abs(),c=c.next()),r.push(l.toJSNumber())}return r.push(c.toJSNumber()),{value:r.reverse(),isNegative:o}}function H(t,e,a){var i=j(t,e);return(i.isNegative?"-":"")+i.value.map((function(t){return function(t,e){return t<(e=e||n).length?e[t]:"<"+t+">"}(t,a)})).join("")}function $(t){if(u(+t)){var e=+t;if(e===h(e))return r?new d(BigInt(e)):new s(e);throw new Error("Invalid integer: "+t)}var a="-"===t[0];a&&(t=t.slice(1));var i=t.split(/e/i);if(i.length>2)throw new Error("Invalid integer: "+i.join("e"));if(2===i.length){var o=i[1];if("+"===o[0]&&(o=o.slice(1)),(o=+o)!==h(o)||!u(o))throw new Error("Invalid integer: "+o+" is not a valid exponent.");var n=i[0],c=n.indexOf(".");if(c>=0&&(o-=n.length-c-1,n=n.slice(0,c)+n.slice(c+1)),o<0)throw new Error("Cannot include negative exponent part for integers");t=n+=new Array(o+1).join("0")}if(!/^([0-9][0-9]*)$/.test(t))throw new Error("Invalid integer: "+t);if(r)return new d(BigInt(a?"-"+t:t));for(var g=[],f=t.length,p=f-7;f>0;)g.push(+t.slice(p,f)),(p-=7)<0&&(p=0),f-=7;return _(g),new l(g,a)}function Z(t){return"number"==typeof t?function(t){if(r)return new d(BigInt(t));if(u(t)){if(t!==h(t))throw new Error(t+" is not an integer.");return new s(t)}return $(t.toString())}(t):"string"==typeof t?$(t):"bigint"==typeof t?new d(t):t}l.prototype.toArray=function(t){return j(this,t)},s.prototype.toArray=function(t){return j(this,t)},d.prototype.toArray=function(t){return j(this,t)},l.prototype.toString=function(e,a){if(e===t&&(e=10),10!==e)return H(this,e,a);for(var i,o=this.value,n=o.length,r=String(o[--n]);--n>=0;)i=String(o[n]),r+="0000000".slice(i.length)+i;return(this.sign?"-":"")+r},s.prototype.toString=function(e,a){return e===t&&(e=10),10!=e?H(this,e,a):String(this.value)},d.prototype.toString=s.prototype.toString,d.prototype.toJSON=l.prototype.toJSON=s.prototype.toJSON=function(){return this.toString()},l.prototype.valueOf=function(){return parseInt(this.toString(),10)},l.prototype.toJSNumber=l.prototype.valueOf,s.prototype.valueOf=function(){return this.value},s.prototype.toJSNumber=s.prototype.valueOf,d.prototype.valueOf=d.prototype.toJSNumber=function(){return parseInt(this.toString(),10)};for(var Y=0;Y<1e3;Y++)c[Y]=Z(Y),Y>0&&(c[-Y]=Z(-Y));return c.one=c[1],c.zero=c[0],c.minusOne=c[-1],c.max=N,c.min=T,c.gcd=D,c.lcm=function(t,e){return t=Z(t).abs(),e=Z(e).abs(),t.divide(D(t,e)).multiply(e)},c.isInstance=function(t){return t instanceof l||t instanceof s||t instanceof d},c.randBetween=function(t,e,i){t=Z(t),e=Z(e);var o=i||Math.random,n=T(t,e),r=N(t,e).subtract(n).add(1);if(r.isSmall)return n.add(Math.floor(o()*r));for(var l=j(r,a).value,s=[],d=!0,u=0;u>5);for(let t=0;t>5);for(let t=0;to[o.length-e-1]=t.toString(16).padStart(8,"0"))),A.fromString(o.join(""),16)},A.fromRprBE=function(t,e,a){a=a||t.byteLength,e=e||0;const i=new DataView(t.buffer,t.byteOffset+e,a),o=new Array(a/4);for(let t=0;t>=1;return a}function pt(t,e,a){if(U(a))return t.one;const i=N(a);if(0==i.legth)return t.one;let o=e;for(let a=i.length-2;a>=0;a--)o=t.square(o),i[a]&&(o=t.mul(o,e));return o}function ht(t){if(t.m%2==1)if(tt(X(t.p,4),1))if(tt(X(t.p,8),1))if(tt(X(t.p,16),1))!function(t){t.sqrt_q=Z(t.p,t.m),t.sqrt_s=0,t.sqrt_t=V(t.sqrt_q,1);for(;!k(t.sqrt_t);)t.sqrt_s=t.sqrt_s+1,t.sqrt_t=W(t.sqrt_t,2);let e=t.one;for(;t.eq(e,t.one);){const a=t.random();t.sqrt_z=t.pow(a,t.sqrt_t),e=t.pow(t.sqrt_z,2**(t.sqrt_s-1))}t.sqrt_tm1d2=W(V(t.sqrt_t,1),2),t.sqrt=function(t){const e=this;if(e.isZero(t))return e.zero;let a=e.pow(t,e.sqrt_tm1d2);const i=e.pow(e.mul(e.square(a),t),2**(e.sqrt_s-1));if(e.eq(i,e.negone))return null;let o=e.sqrt_s,n=e.mul(t,a),r=e.mul(n,a),c=e.sqrt_z;for(;!e.eq(r,e.one);){let t=e.square(r),i=1;for(;!e.eq(t,e.one);)t=e.square(t),i++;a=c;for(let t=0;t>>0,t[o]=(t[o]^t[e])>>>0,t[o]=(t[o]<<16|t[o]>>>16&65535)>>>0,t[i]=t[i]+t[o]>>>0,t[a]=(t[a]^t[i])>>>0,t[a]=(t[a]<<12|t[a]>>>20&4095)>>>0,t[e]=t[e]+t[a]>>>0,t[o]=(t[o]^t[e])>>>0,t[o]=(t[o]<<8|t[o]>>>24&255)>>>0,t[i]=t[i]+t[o]>>>0,t[a]=(t[a]^t[i])>>>0,t[a]=(t[a]<<7|t[a]>>>25&127)>>>0}class Lt{constructor(t){t=t||[0,0,0,0,0,0,0,0],this.state=[1634760805,857760878,2036477234,1797285236,t[0],t[1],t[2],t[3],t[4],t[5],t[6],t[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 K(H(this.nextU32(),4294967296),this.nextU32())}nextBool(){return 1==(1&this.nextU32())}update(){for(let t=0;t<16;t++)this.buff[t]=this.state[t];for(let e=0;e<10;e++)mt(t=this.buff,0,4,8,12),mt(t,1,5,9,13),mt(t,2,6,10,14),mt(t,3,7,11,15),mt(t,0,5,10,15),mt(t,1,6,11,12),mt(t,2,7,8,13),mt(t,3,4,9,14);var t;for(let t=0;t<16;t++)this.buff[t]=this.buff[t]+this.state[t]>>>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 wt={};function At(t){let e=new Uint8Array(t);if(void 0!==globalThis.crypto)globalThis.crypto.getRandomValues(e);else for(let a=0;a>>0;return e}let bt=null;function yt(){return bt||(bt=new Lt(function(){const t=At(32),e=new Uint32Array(t.buffer),a=[];for(let t=0;t<8;t++)a.push(e[t]);return a}()),bt)}class It{constructor(t){this.type="F1",this.one=BigInt(1),this.zero=BigInt(0),this.p=BigInt(t),this.m=1,this.negone=this.p-this.one,this.two=BigInt(2),this.half=this.p>>this.one,this.bitLength=P(this.p),this.mask=(this.one<>this.one;this.nqr=this.two;let a=this.pow(this.nqr,e);for(;!this.eq(a,this.negone);)this.nqr=this.nqr+this.one,a=this.pow(this.nqr,e);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),ht(this)}e(t,e){let a;if(e?16==e&&(a=BigInt("0x"+t)):a=BigInt(t),a<0){let t=-a;return t>=this.p&&(t%=this.p),this.p-t}return a>=this.p?a%this.p:a}add(t,e){const a=t+e;return a>=this.p?a-this.p:a}sub(t,e){return t>=e?t-e:this.p-e+t}neg(t){return t?this.p-t:t}mul(t,e){return t*e%this.p}mulScalar(t,e){return t*this.e(e)%this.p}square(t){return t*t%this.p}eq(t,e){return t==e}neq(t,e){return t!=e}lt(t,e){return(t>this.half?t-this.p:t)<(e>this.half?e-this.p:e)}gt(t,e){return(t>this.half?t-this.p:t)>(e>this.half?e-this.p:e)}leq(t,e){return(t>this.half?t-this.p:t)<=(e>this.half?e-this.p:e)}geq(t,e){return(t>this.half?t-this.p:t)>=(e>this.half?e-this.p:e)}div(t,e){return this.mul(t,this.inv(e))}idiv(t,e){if(!e)throw new Error("Division by zero");return t/e}inv(t){if(!t)throw new Error("Division by zero");let e=this.zero,a=this.p,i=this.one,o=t%this.p;for(;o;){let t=a/o;[e,i]=[i,e-t*i],[a,o]=[o,a-t*o]}return e=this.p?a-this.p:a}bor(t,e){const a=(t|e)&this.mask;return a>=this.p?a-this.p:a}bxor(t,e){const a=(t^e)&this.mask;return a>=this.p?a-this.p:a}bnot(t){const e=t^this.mask;return e>=this.p?e-this.p:e}shl(t,e){if(Number(e)=this.p?a-this.p:a}{const a=this.p-e;return Number(a)>a:this.zero}}shr(t,e){if(Number(e)>e;{const a=this.p-e;if(Number(a)=this.p?e-this.p:e}return 0}}land(t,e){return t&&e?this.one:this.zero}lor(t,e){return t||e?this.one:this.zero}lnot(t){return t?this.zero:this.one}sqrt_old(t){if(t==this.zero)return this.zero;if(this.pow(t,this.negone>>this.one)!=this.one)return null;let e=this.s,a=this.nqr_to_t,i=this.pow(t,this.t),o=this.pow(t,this.add(this.t,this.one)>>this.one);for(;i!=this.one;){let t=this.square(i),n=1;for(;t!=this.one;)n++,t=this.square(t);let r=a;for(let t=0;tthis.p>>this.one&&(o=this.neg(o)),o}normalize(t,e){if((t=BigInt(t,e))<0){let e=-t;return e>=this.p&&(e%=this.p),this.p-e}return t>=this.p?t%this.p:t}random(){const t=2*this.bitLength/8;let e=this.zero;for(let a=0;athis.half){a="-"+(this.p-t).toString(e)}else a=t.toString(e);return a}isZero(t){return t==this.zero}fromRng(t){let e;do{e=this.zero;for(let a=0;a=this.p);return e=e*this.Ri%this.p,e}}class Ct{constructor(t){this.type="F1",this.one=u.one,this.zero=u.zero,this.p=u(t),this.m=1,this.negone=this.p.minus(u.one),this.two=u(2),this.half=this.p.shiftRight(1),this.bitLength=this.p.bitLength(),this.mask=u.one.shiftLeft(this.bitLength).minus(u.one),this.n64=Math.floor((this.bitLength-1)/64)+1,this.n32=2*this.n64,this.n8=8*this.n64,this.R=u.one.shiftLeft(64*this.n64),this.Ri=this.inv(this.R);const e=this.negone.shiftRight(this.one);this.nqr=this.two;let a=this.pow(this.nqr,e);for(;!a.equals(this.negone);)this.nqr=this.nqr.add(this.one),a=this.pow(this.nqr,e);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),ht(this)}e(t,e){const a=u(t,e);return this.normalize(a)}add(t,e){let a=t.add(e);return a.geq(this.p)&&(a=a.minus(this.p)),a}sub(t,e){return t.geq(e)?t.minus(e):this.p.minus(e.minus(t))}neg(t){return t.isZero()?t:this.p.minus(t)}mul(t,e){return t.times(e).mod(this.p)}mulScalar(t,e){return t.times(u(e)).mod(this.p)}square(t){return t.square().mod(this.p)}eq(t,e){return t.eq(e)}neq(t,e){return t.neq(e)}lt(t,e){const a=t.gt(this.half)?t.minus(this.p):t,i=e.gt(this.half)?e.minus(this.p):e;return a.lt(i)}gt(t,e){const a=t.gt(this.half)?t.minus(this.p):t,i=e.gt(this.half)?e.minus(this.p):e;return a.gt(i)}leq(t,e){const a=t.gt(this.half)?t.minus(this.p):t,i=e.gt(this.half)?e.minus(this.p):e;return a.leq(i)}geq(t,e){const a=t.gt(this.half)?t.minus(this.p):t,i=e.gt(this.half)?e.minus(this.p):e;return a.geq(i)}div(t,e){if(e.isZero())throw new Error("Division by zero");return t.times(e.modInv(this.p)).mod(this.p)}idiv(t,e){if(e.isZero())throw new Error("Division by zero");return t.divide(e)}inv(t){if(t.isZero())throw new Error("Division by zero");return t.modInv(this.p)}mod(t,e){return t.mod(e)}pow(t,e){return t.modPow(e,this.p)}exp(t,e){return t.modPow(e,this.p)}band(t,e){return t.and(e).and(this.mask).mod(this.p)}bor(t,e){return t.or(e).and(this.mask).mod(this.p)}bxor(t,e){return t.xor(e).and(this.mask).mod(this.p)}bnot(t){return t.xor(this.mask).mod(this.p)}shl(t,e){if(e.lt(this.bitLength))return t.shiftLeft(e).and(this.mask).mod(this.p);{const a=this.p.minus(e);return a.lt(this.bitLength)?this.shr(t,a):u.zero}}shr(t,e){if(e.lt(this.bitLength))return t.shiftRight(e);{const a=this.p.minus(e);return a.lt(this.bitLength)?this.shl(t,a):u.zero}}land(t,e){return t.isZero()||e.isZero()?u.zero:u.one}lor(t,e){return t.isZero()&&e.isZero()?u.zero:u.one}lnot(t){return t.isZero()?u.one:u.zero}sqrt_old(t){if(t.equals(this.zero))return this.zero;if(!this.pow(t,this.negone.shiftRight(this.one)).equals(this.one))return null;let e=parseInt(this.s),a=this.nqr_to_t,i=this.pow(t,this.t),o=this.pow(t,this.add(this.t,this.one).shiftRight(this.one));for(;!i.equals(this.one);){let t=this.square(i),n=1;for(;!t.equals(this.one);)n++,t=this.square(t);let r=a;for(let t=0;t>1&&i>1,t>>1)))),e.addCode(a.setLocal(l,a.i64_add(a.getLocal(l),a.i64_shr_u(a.getLocal(c),a.i64_const(32)))))),t>0&&(e.addCode(a.setLocal(c,a.i64_add(a.i64_and(a.getLocal(c),a.i64_const(4294967295)),a.i64_and(a.getLocal(s),a.i64_const(4294967295))))),e.addCode(a.setLocal(l,a.i64_add(a.i64_add(a.getLocal(l),a.i64_shr_u(a.getLocal(c),a.i64_const(32))),a.getLocal(d))))),e.addCode(a.i64_store32(a.getLocal("r"),4*t,a.getLocal(c))),e.addCode(a.setLocal(s,a.getLocal(l)),a.setLocal(d,a.i64_shr_u(a.getLocal(s),a.i64_const(32))))}e.addCode(a.i64_store32(a.getLocal("r"),4*o*2-4,a.getLocal(s)))}(),function(){const e=t.addFunction(i+"_squareOld");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(i+"_mul",a.getLocal("x"),a.getLocal("x"),a.getLocal("r")))}(),function(){!function(){const e=t.addFunction(i+"__mul1");e.addParam("px","i32"),e.addParam("y","i64"),e.addParam("pr","i32"),e.addLocal("c","i64");const a=e.getCodeBuilder();e.addCode(a.setLocal("c",a.i64_mul(a.i64_load32_u(a.getLocal("px"),0,0),a.getLocal("y")))),e.addCode(a.i64_store32(a.getLocal("pr"),0,0,a.getLocal("c")));for(let t=1;t>e)),[...l.setLocal("b",l.i32_sub(l.getLocal("b"),l.i32_const(128>>e))),...l.call(i,l.getLocal("r"),s,l.getLocal("r"))]));return t}(),l.br_if(1,l.i32_eqz(l.getLocal("i"))),l.br(0))))},Gt=function(t,e){const a=8*t.modules[e].n64,i=t.addFunction(e+"_batchInverse");i.addParam("pIn","i32"),i.addParam("inStep","i32"),i.addParam("n","i32"),i.addParam("pOut","i32"),i.addParam("outStep","i32"),i.addLocal("itAux","i32"),i.addLocal("itIn","i32"),i.addLocal("itOut","i32"),i.addLocal("i","i32");const o=i.getCodeBuilder(),n=o.i32_const(t.alloc(a));i.addCode(o.setLocal("itAux",o.i32_load(o.i32_const(0))),o.i32_store(o.i32_const(0),o.i32_add(o.getLocal("itAux"),o.i32_mul(o.i32_add(o.getLocal("n"),o.i32_const(1)),o.i32_const(a))))),i.addCode(o.call(e+"_one",o.getLocal("itAux")),o.setLocal("itIn",o.getLocal("pIn")),o.setLocal("itAux",o.i32_add(o.getLocal("itAux"),o.i32_const(a))),o.setLocal("i",o.i32_const(0)),o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("i"),o.getLocal("n"))),o.if(o.call(e+"_isZero",o.getLocal("itIn")),o.call(e+"_copy",o.i32_sub(o.getLocal("itAux"),o.i32_const(a)),o.getLocal("itAux")),o.call(e+"_mul",o.getLocal("itIn"),o.i32_sub(o.getLocal("itAux"),o.i32_const(a)),o.getLocal("itAux"))),o.setLocal("itIn",o.i32_add(o.getLocal("itIn"),o.getLocal("inStep"))),o.setLocal("itAux",o.i32_add(o.getLocal("itAux"),o.i32_const(a))),o.setLocal("i",o.i32_add(o.getLocal("i"),o.i32_const(1))),o.br(0))),o.setLocal("itIn",o.i32_sub(o.getLocal("itIn"),o.getLocal("inStep"))),o.setLocal("itAux",o.i32_sub(o.getLocal("itAux"),o.i32_const(a))),o.setLocal("itOut",o.i32_add(o.getLocal("pOut"),o.i32_mul(o.i32_sub(o.getLocal("n"),o.i32_const(1)),o.getLocal("outStep")))),o.call(e+"_inverse",o.getLocal("itAux"),o.getLocal("itAux")),o.block(o.loop(o.br_if(1,o.i32_eqz(o.getLocal("i"))),o.if(o.call(e+"_isZero",o.getLocal("itIn")),[...o.call(e+"_copy",o.getLocal("itAux"),o.i32_sub(o.getLocal("itAux"),o.i32_const(a))),...o.call(e+"_zero",o.getLocal("itOut"))],[...o.call(e+"_copy",o.i32_sub(o.getLocal("itAux"),o.i32_const(a)),n),...o.call(e+"_mul",o.getLocal("itAux"),o.getLocal("itIn"),o.i32_sub(o.getLocal("itAux"),o.i32_const(a))),...o.call(e+"_mul",o.getLocal("itAux"),n,o.getLocal("itOut"))]),o.setLocal("itIn",o.i32_sub(o.getLocal("itIn"),o.getLocal("inStep"))),o.setLocal("itOut",o.i32_sub(o.getLocal("itOut"),o.getLocal("outStep"))),o.setLocal("itAux",o.i32_sub(o.getLocal("itAux"),o.i32_const(a))),o.setLocal("i",o.i32_sub(o.getLocal("i"),o.i32_const(1))),o.br(0)))),i.addCode(o.i32_store(o.i32_const(0),o.getLocal("itAux")))};var Pt=function(t,e,a,i,o,n){void 0===n&&(n=i=r&&e.addCode(a.i64_store32(a.getLocal("r"),4*(t-r),a.getLocal(p))),[p,h]=[h,p],e.addCode(a.setLocal(h,a.i64_shr_u(a.getLocal(p),a.i64_const(32))))}e.addCode(a.i64_store32(a.getLocal("r"),4*r-4,a.getLocal(p))),e.addCode(a.if(a.i32_wrap_i64(a.getLocal(h)),a.drop(a.call(s+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))),a.if(a.call(s+"_gte",a.getLocal("r"),a.i32_const(d)),a.drop(a.call(s+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))))))}(),function(){const e=t.addFunction(l+"_square");e.addParam("x","i32"),e.addParam("r","i32"),e.addLocal("c0","i64"),e.addLocal("c1","i64"),e.addLocal("c0_old","i64"),e.addLocal("c1_old","i64"),e.addLocal("np32","i64");for(let t=0;t>1&&i>1,t>>1)))),e.addCode(a.setLocal(p,a.i64_add(a.getLocal(p),a.i64_shr_u(a.getLocal(_),a.i64_const(32)))))),t>0&&(e.addCode(a.setLocal(_,a.i64_add(a.i64_and(a.getLocal(_),a.i64_const(4294967295)),a.i64_and(a.getLocal(h),a.i64_const(4294967295))))),e.addCode(a.setLocal(p,a.i64_add(a.i64_add(a.getLocal(p),a.i64_shr_u(a.getLocal(_),a.i64_const(32))),a.getLocal(m)))));for(let i=Math.max(1,t-r+1);i<=t&&i=r&&e.addCode(a.i64_store32(a.getLocal("r"),4*(t-r),a.getLocal(_))),e.addCode(a.setLocal(h,a.getLocal(p)),a.setLocal(m,a.i64_shr_u(a.getLocal(h),a.i64_const(32))))}e.addCode(a.i64_store32(a.getLocal("r"),4*r-4,a.getLocal(h))),e.addCode(a.if(a.i32_wrap_i64(a.getLocal(m)),a.drop(a.call(s+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))),a.if(a.call(s+"_gte",a.getLocal("r"),a.i32_const(d)),a.drop(a.call(s+"_sub",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))))))}(),function(){const e=t.addFunction(l+"_squareOld");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(l+"_mul",a.getLocal("x"),a.getLocal("x"),a.getLocal("r")))}(),function(){const e=t.addFunction(l+"_toMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(l+"_mul",a.getLocal("x"),a.i32_const(g),a.getLocal("r")))}(),function(){const e=t.alloc(2*c),a=t.addFunction(l+"_fromMontgomery");a.addParam("x","i32"),a.addParam("r","i32");const i=a.getCodeBuilder();a.addCode(i.call(s+"_copy",i.getLocal("x"),i.i32_const(e))),a.addCode(i.call(s+"_zero",i.i32_const(e+c))),a.addCode(i.call(l+"_mReduct",i.i32_const(e),i.getLocal("r")))}(),function(){const e=t.addFunction(l+"_isNegative");e.addParam("x","i32"),e.setReturnType("i32");const a=e.getCodeBuilder(),i=a.i32_const(t.alloc(c));e.addCode(a.call(l+"_fromMontgomery",a.getLocal("x"),i),a.call(s+"_gte",i,a.i32_const(w)))}(),function(){const e=t.addFunction(l+"_sign");e.addParam("x","i32"),e.setReturnType("i32");const a=e.getCodeBuilder(),i=a.i32_const(t.alloc(c));e.addCode(a.if(a.call(s+"_isZero",a.getLocal("x")),a.ret(a.i32_const(0))),a.call(l+"_fromMontgomery",a.getLocal("x"),i),a.if(a.call(s+"_gte",i,a.i32_const(w)),a.ret(a.i32_const(-1))),a.ret(a.i32_const(1)))}(),function(){const e=t.addFunction(l+"_inverse");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(l+"_fromMontgomery",a.getLocal("x"),a.getLocal("r"))),e.addCode(a.call(s+"_inverseMod",a.getLocal("r"),a.i32_const(d),a.getLocal("r"))),e.addCode(a.call(l+"_toMontgomery",a.getLocal("r"),a.getLocal("r")))}(),function(){const e=t.addFunction(l+"_one");e.addParam("pr","i32");const a=e.getCodeBuilder();e.addCode(a.call(s+"_copy",a.i32_const(f),a.getLocal("pr")))}(),function(){const e=t.addFunction(l+"_load");e.addParam("scalar","i32"),e.addParam("scalarLen","i32"),e.addParam("r","i32"),e.addLocal("p","i32"),e.addLocal("l","i32"),e.addLocal("i","i32"),e.addLocal("j","i32");const a=e.getCodeBuilder(),i=a.i32_const(t.alloc(c)),o=t.alloc(c),n=a.i32_const(o);e.addCode(a.call(s+"_zero",a.getLocal("r")),a.setLocal("i",a.i32_const(c)),a.setLocal("p",a.getLocal("scalar")),a.block(a.loop(a.br_if(1,a.i32_gt_u(a.getLocal("i"),a.getLocal("scalarLen"))),a.if(a.i32_eq(a.getLocal("i"),a.i32_const(c)),a.call(l+"_one",i),a.call(l+"_mul",i,a.i32_const(g),i)),a.call(l+"_mul",a.getLocal("p"),i,n),a.call(l+"_add",a.getLocal("r"),n,a.getLocal("r")),a.setLocal("p",a.i32_add(a.getLocal("p"),a.i32_const(c))),a.setLocal("i",a.i32_add(a.getLocal("i"),a.i32_const(c))),a.br(0))),a.setLocal("l",a.i32_rem_u(a.getLocal("scalarLen"),a.i32_const(c))),a.if(a.i32_eqz(a.getLocal("l")),a.ret([])),a.call(s+"_zero",n),a.setLocal("j",a.i32_const(0)),a.block(a.loop(a.br_if(1,a.i32_eq(a.getLocal("j"),a.getLocal("l"))),a.i32_store8(a.getLocal("j"),o,a.i32_load8_u(a.getLocal("p"))),a.setLocal("p",a.i32_add(a.getLocal("p"),a.i32_const(1))),a.setLocal("j",a.i32_add(a.getLocal("j"),a.i32_const(1))),a.br(0))),a.if(a.i32_eq(a.getLocal("i"),a.i32_const(c)),a.call(l+"_one",i),a.call(l+"_mul",i,a.i32_const(g),i)),a.call(l+"_mul",n,i,n),a.call(l+"_add",a.getLocal("r"),n,a.getLocal("r")))}(),function(){const e=t.addFunction(l+"_timesScalar");e.addParam("x","i32"),e.addParam("scalar","i32"),e.addParam("scalarLen","i32"),e.addParam("r","i32");const a=e.getCodeBuilder(),i=a.i32_const(t.alloc(c));e.addCode(a.call(l+"_load",a.getLocal("scalar"),a.getLocal("scalarLen"),i),a.call(l+"_toMontgomery",i,i),a.call(l+"_mul",a.getLocal("x"),i,a.getLocal("r")))}(),Gt(t,l),Pt(t,l+"_batchToMontgomery",l+"_toMontgomery",c,c),Pt(t,l+"_batchFromMontgomery",l+"_fromMontgomery",c,c),Pt(t,l+"_batchNeg",l+"_neg",c,c),Ot(t,l+"_batchAdd",l+"_add",c,c),Ot(t,l+"_batchSub",l+"_sub",c,c),Ot(t,l+"_batchMul",l+"_mul",c,c),t.exportFunction(l+"_add"),t.exportFunction(l+"_sub"),t.exportFunction(l+"_neg"),t.exportFunction(l+"_isNegative"),t.exportFunction(l+"_isOne"),t.exportFunction(l+"_sign"),t.exportFunction(l+"_mReduct"),t.exportFunction(l+"_mul"),t.exportFunction(l+"_square"),t.exportFunction(l+"_squareOld"),t.exportFunction(l+"_fromMontgomery"),t.exportFunction(l+"_toMontgomery"),t.exportFunction(l+"_inverse"),t.exportFunction(l+"_one"),t.exportFunction(l+"_load"),t.exportFunction(l+"_timesScalar"),St(t,l+"_exp",c,l+"_mul",l+"_square",s+"_copy",l+"_one"),t.exportFunction(l+"_exp"),t.exportFunction(l+"_batchInverse"),o.isPrime()&&(!function(){const e=t.addFunction(l+"_sqrt");e.addParam("n","i32"),e.addParam("r","i32"),e.addLocal("m","i32"),e.addLocal("i","i32"),e.addLocal("j","i32");const a=e.getCodeBuilder(),i=a.i32_const(f),o=a.i32_const(t.alloc(c)),n=a.i32_const(t.alloc(c)),r=a.i32_const(t.alloc(c)),s=a.i32_const(t.alloc(c)),d=a.i32_const(t.alloc(c));e.addCode(a.if(a.call(l+"_isZero",a.getLocal("n")),a.ret(a.call(l+"_zero",a.getLocal("r")))),a.setLocal("m",a.i32_const(b)),a.call(l+"_copy",a.i32_const(F),o),a.call(l+"_exp",a.getLocal("n"),a.i32_const(I),a.i32_const(c),n),a.call(l+"_exp",a.getLocal("n"),a.i32_const(v),a.i32_const(c),r),a.block(a.loop(a.br_if(1,a.call(l+"_eq",n,i)),a.call(l+"_square",n,s),a.setLocal("i",a.i32_const(1)),a.block(a.loop(a.br_if(1,a.call(l+"_eq",s,i)),a.call(l+"_square",s,s),a.setLocal("i",a.i32_add(a.getLocal("i"),a.i32_const(1))),a.br(0))),a.call(l+"_copy",o,d),a.setLocal("j",a.i32_sub(a.i32_sub(a.getLocal("m"),a.getLocal("i")),a.i32_const(1))),a.block(a.loop(a.br_if(1,a.i32_eqz(a.getLocal("j"))),a.call(l+"_square",d,d),a.setLocal("j",a.i32_sub(a.getLocal("j"),a.i32_const(1))),a.br(0))),a.setLocal("m",a.getLocal("i")),a.call(l+"_square",d,o),a.call(l+"_mul",n,o,n),a.call(l+"_mul",r,d,r),a.br(0))),a.if(a.call(l+"_isNegative",r),a.call(l+"_neg",r,a.getLocal("r")),a.call(l+"_copy",r,a.getLocal("r"))))}(),function(){const e=t.addFunction(l+"_isSquare");e.addParam("n","i32"),e.setReturnType("i32");const a=e.getCodeBuilder(),i=a.i32_const(f),o=a.i32_const(t.alloc(c));e.addCode(a.if(a.call(l+"_isZero",a.getLocal("n")),a.ret(a.i32_const(1))),a.call(l+"_exp",a.getLocal("n"),a.i32_const(m),a.i32_const(c),o),a.call(l+"_eq",o,i))}(),t.exportFunction(l+"_sqrt"),t.exportFunction(l+"_isSquare")),t.exportFunction(l+"_batchToMontgomery"),t.exportFunction(l+"_batchFromMontgomery"),l},zt=function(t,e,a,i,o){const n=u(e),r=Math.floor((n.minus(1).bitLength()-1)/64)+1,c=8*r,l=a||"f1";if(t.modules[l])return l;t.modules[l]={n64:r};const s=o||"int",d=Ut(t,n,i,s),g=t.modules[d].pR2,f=t.modules[d].pq,_=t.modules[d].pePlusOne;return function(){const e=t.alloc(c),a=t.addFunction(l+"_mul");a.addParam("x","i32"),a.addParam("y","i32"),a.addParam("r","i32");const i=a.getCodeBuilder();a.addCode(i.call(d+"_mul",i.getLocal("x"),i.getLocal("y"),i.i32_const(e))),a.addCode(i.call(d+"_mul",i.i32_const(e),i.i32_const(g),i.getLocal("r")))}(),function(){const e=t.addFunction(l+"_square");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(l+"_mul",a.getLocal("x"),a.getLocal("x"),a.getLocal("r")))}(),function(){const e=t.addFunction(l+"_inverse");e.addParam("x","i32"),e.addParam("r","i32");const a=e.getCodeBuilder();e.addCode(a.call(s+"_inverseMod",a.getLocal("x"),a.i32_const(f),a.getLocal("r")))}(),function(){const e=t.addFunction(l+"_isNegative");e.addParam("x","i32"),e.setReturnType("i32");const a=e.getCodeBuilder();e.addCode(a.call(s+"_gte",a.getLocal("x"),a.i32_const(_)))}(),t.exportFunction(d+"_add",l+"_add"),t.exportFunction(d+"_sub",l+"_sub"),t.exportFunction(d+"_neg",l+"_neg"),t.exportFunction(l+"_mul"),t.exportFunction(l+"_square"),t.exportFunction(l+"_inverse"),t.exportFunction(l+"_isNegative"),t.exportFunction(d+"_copy",l+"_copy"),t.exportFunction(d+"_zero",l+"_zero"),t.exportFunction(d+"_one",l+"_one"),t.exportFunction(d+"_isZero",l+"_isZero"),t.exportFunction(d+"_eq",l+"_eq"),l},qt=function(t,e,a,i){if(t.modules[a])return a;const o=8*t.modules[i].n64,n=t.modules[i].q;return t.modules[a]={n64:2*t.modules[i].n64},function(){const e=t.addFunction(a+"_isZero");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.i32_and(n.call(i+"_isZero",r),n.call(i+"_isZero",c)))}(),function(){const e=t.addFunction(a+"_isOne");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.ret(n.i32_and(n.call(i+"_isOne",r),n.call(i+"_isZero",c))))}(),function(){const e=t.addFunction(a+"_zero");e.addParam("x","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.call(i+"_zero",r),n.call(i+"_zero",c))}(),function(){const e=t.addFunction(a+"_one");e.addParam("x","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.call(i+"_one",r),n.call(i+"_zero",c))}(),function(){const e=t.addFunction(a+"_copy");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("r"),s=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_copy",r,l),n.call(i+"_copy",c,s))}(),function(){const n=t.addFunction(a+"_mul");n.addParam("x","i32"),n.addParam("y","i32"),n.addParam("r","i32");const r=n.getCodeBuilder(),c=r.getLocal("x"),l=r.i32_add(r.getLocal("x"),r.i32_const(o)),s=r.getLocal("y"),d=r.i32_add(r.getLocal("y"),r.i32_const(o)),u=r.getLocal("r"),g=r.i32_add(r.getLocal("r"),r.i32_const(o)),f=r.i32_const(t.alloc(o)),_=r.i32_const(t.alloc(o)),p=r.i32_const(t.alloc(o)),h=r.i32_const(t.alloc(o));n.addCode(r.call(i+"_mul",c,s,f),r.call(i+"_mul",l,d,_),r.call(i+"_add",c,l,p),r.call(i+"_add",s,d,h),r.call(i+"_mul",p,h,p),r.call(e,_,u),r.call(i+"_add",f,u,u),r.call(i+"_add",f,_,g),r.call(i+"_sub",p,g,g))}(),function(){const e=t.addFunction(a+"_mul1");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("y"),s=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_mul",r,l,s),n.call(i+"_mul",c,l,d))}(),function(){const n=t.addFunction(a+"_square");n.addParam("x","i32"),n.addParam("r","i32");const r=n.getCodeBuilder(),c=r.getLocal("x"),l=r.i32_add(r.getLocal("x"),r.i32_const(o)),s=r.getLocal("r"),d=r.i32_add(r.getLocal("r"),r.i32_const(o)),u=r.i32_const(t.alloc(o)),g=r.i32_const(t.alloc(o)),f=r.i32_const(t.alloc(o)),_=r.i32_const(t.alloc(o));n.addCode(r.call(i+"_mul",c,l,u),r.call(i+"_add",c,l,g),r.call(e,l,f),r.call(i+"_add",c,f,f),r.call(e,u,_),r.call(i+"_add",_,u,_),r.call(i+"_mul",g,f,s),r.call(i+"_sub",s,_,s),r.call(i+"_add",u,u,d))}(),function(){const e=t.addFunction(a+"_add");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("y"),s=n.i32_add(n.getLocal("y"),n.i32_const(o)),d=n.getLocal("r"),u=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_add",r,l,d),n.call(i+"_add",c,s,u))}(),function(){const e=t.addFunction(a+"_sub");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("y"),s=n.i32_add(n.getLocal("y"),n.i32_const(o)),d=n.getLocal("r"),u=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_sub",r,l,d),n.call(i+"_sub",c,s,u))}(),function(){const e=t.addFunction(a+"_neg");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("r"),s=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_neg",r,l),n.call(i+"_neg",c,s))}(),function(){const e=t.addFunction(a+"_conjugate");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("r"),s=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_copy",r,l),n.call(i+"_neg",c,s))}(),function(){const e=t.addFunction(a+"_toMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("r"),s=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_toMontgomery",r,l),n.call(i+"_toMontgomery",c,s))}(),function(){const e=t.addFunction(a+"_fromMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("r"),s=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_fromMontgomery",r,l),n.call(i+"_fromMontgomery",c,s))}(),function(){const e=t.addFunction(a+"_eq");e.addParam("x","i32"),e.addParam("y","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("y"),s=n.i32_add(n.getLocal("y"),n.i32_const(o));e.addCode(n.i32_and(n.call(i+"_eq",r,l),n.call(i+"_eq",c,s)))}(),function(){const n=t.addFunction(a+"_inverse");n.addParam("x","i32"),n.addParam("r","i32");const r=n.getCodeBuilder(),c=r.getLocal("x"),l=r.i32_add(r.getLocal("x"),r.i32_const(o)),s=r.getLocal("r"),d=r.i32_add(r.getLocal("r"),r.i32_const(o)),u=r.i32_const(t.alloc(o)),g=r.i32_const(t.alloc(o)),f=r.i32_const(t.alloc(o)),_=r.i32_const(t.alloc(o));n.addCode(r.call(i+"_square",c,u),r.call(i+"_square",l,g),r.call(e,g,f),r.call(i+"_sub",u,f,f),r.call(i+"_inverse",f,_),r.call(i+"_mul",c,_,s),r.call(i+"_mul",l,_,d),r.call(i+"_neg",d,d))}(),function(){const e=t.addFunction(a+"_timesScalar");e.addParam("x","i32"),e.addParam("scalar","i32"),e.addParam("scalarLen","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.getLocal("r"),s=n.i32_add(n.getLocal("r"),n.i32_const(o));e.addCode(n.call(i+"_timesScalar",r,n.getLocal("scalar"),n.getLocal("scalarLen"),l),n.call(i+"_timesScalar",c,n.getLocal("scalar"),n.getLocal("scalarLen"),s))}(),function(){const e=t.addFunction(a+"_sign");e.addParam("x","i32"),e.addLocal("s","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.setLocal("s",n.call(i+"_sign",c)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.ret(n.call(i+"_sign",r)))}(),function(){const e=t.addFunction(a+"_isNegative");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o));e.addCode(n.if(n.call(i+"_isZero",c),n.ret(n.call(i+"_isNegative",r))),n.ret(n.call(i+"_isNegative",c)))}(),t.exportFunction(a+"_isZero"),t.exportFunction(a+"_isOne"),t.exportFunction(a+"_zero"),t.exportFunction(a+"_one"),t.exportFunction(a+"_copy"),t.exportFunction(a+"_mul"),t.exportFunction(a+"_mul1"),t.exportFunction(a+"_square"),t.exportFunction(a+"_add"),t.exportFunction(a+"_sub"),t.exportFunction(a+"_neg"),t.exportFunction(a+"_sign"),t.exportFunction(a+"_conjugate"),t.exportFunction(a+"_fromMontgomery"),t.exportFunction(a+"_toMontgomery"),t.exportFunction(a+"_eq"),t.exportFunction(a+"_inverse"),Gt(t,a),St(t,a+"_exp",2*o,a+"_mul",a+"_square",a+"_copy",a+"_one"),function(){const e=t.addFunction(a+"_sqrt");e.addParam("a","i32"),e.addParam("pr","i32");const r=e.getCodeBuilder(),c=r.i32_const(t.alloc(Et(u(n).minus(u(3)).divide(4),o))),l=r.i32_const(t.alloc(Et(u(n).minus(u(1)).divide(2),o))),s=r.getLocal("a"),d=r.i32_const(t.alloc(2*o)),g=r.i32_const(t.alloc(2*o)),f=r.i32_const(t.alloc(2*o)),_=t.alloc(2*o),p=r.i32_const(_),h=r.i32_const(_),m=r.i32_const(_+o),L=r.i32_const(t.alloc(2*o)),w=r.i32_const(t.alloc(2*o));e.addCode(r.call(a+"_one",p),r.call(a+"_neg",p,p),r.call(a+"_exp",s,c,r.i32_const(o),d),r.call(a+"_square",d,g),r.call(a+"_mul",s,g,g),r.call(a+"_conjugate",g,f),r.call(a+"_mul",f,g,f),r.if(r.call(a+"_eq",f,p),r.unreachable()),r.call(a+"_mul",d,s,L),r.if(r.call(a+"_eq",g,p),[...r.call(i+"_zero",h),...r.call(i+"_one",m),...r.call(a+"_mul",p,L,r.getLocal("pr"))],[...r.call(a+"_one",w),...r.call(a+"_add",w,g,w),...r.call(a+"_exp",w,l,r.i32_const(o),w),...r.call(a+"_mul",w,L,r.getLocal("pr"))]))}(),function(){const e=t.addFunction(a+"_isSquare");e.addParam("a","i32"),e.setReturnType("i32");const i=e.getCodeBuilder(),r=i.i32_const(t.alloc(Et(u(n).minus(u(3)).divide(4),o))),c=i.getLocal("a"),l=i.i32_const(t.alloc(2*o)),s=i.i32_const(t.alloc(2*o)),d=i.i32_const(t.alloc(2*o)),g=t.alloc(2*o),f=i.i32_const(g);e.addCode(i.call(a+"_one",f),i.call(a+"_neg",f,f),i.call(a+"_exp",c,r,i.i32_const(o),l),i.call(a+"_square",l,s),i.call(a+"_mul",c,s,s),i.call(a+"_conjugate",s,d),i.call(a+"_mul",d,s,d),i.if(i.call(a+"_eq",d,f),i.ret(i.i32_const(0))),i.ret(i.i32_const(1)))}(),t.exportFunction(a+"_exp"),t.exportFunction(a+"_timesScalar"),t.exportFunction(a+"_batchInverse"),t.exportFunction(a+"_sqrt"),t.exportFunction(a+"_isSquare"),t.exportFunction(a+"_isNegative"),a},Qt=function(t,e,a,i){if(t.modules[a])return a;const o=8*t.modules[i].n64;return t.modules[a]={n64:3*t.modules[i].n64},function(){const e=t.addFunction(a+"_isZero");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.i32_and(n.i32_and(n.call(i+"_isZero",r),n.call(i+"_isZero",c)),n.call(i+"_isZero",l)))}(),function(){const e=t.addFunction(a+"_isOne");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.ret(n.i32_and(n.i32_and(n.call(i+"_isOne",r),n.call(i+"_isZero",c)),n.call(i+"_isZero",l))))}(),function(){const e=t.addFunction(a+"_zero");e.addParam("x","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.call(i+"_zero",r),n.call(i+"_zero",c),n.call(i+"_zero",l))}(),function(){const e=t.addFunction(a+"_one");e.addParam("x","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.call(i+"_one",r),n.call(i+"_zero",c),n.call(i+"_zero",l))}(),function(){const e=t.addFunction(a+"_copy");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),s=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_copy",r,s),n.call(i+"_copy",c,d),n.call(i+"_copy",l,u))}(),function(){const n=t.addFunction(a+"_mul");n.addParam("x","i32"),n.addParam("y","i32"),n.addParam("r","i32");const r=n.getCodeBuilder(),c=r.getLocal("x"),l=r.i32_add(r.getLocal("x"),r.i32_const(o)),s=r.i32_add(r.getLocal("x"),r.i32_const(2*o)),d=r.getLocal("y"),u=r.i32_add(r.getLocal("y"),r.i32_const(o)),g=r.i32_add(r.getLocal("y"),r.i32_const(2*o)),f=r.getLocal("r"),_=r.i32_add(r.getLocal("r"),r.i32_const(o)),p=r.i32_add(r.getLocal("r"),r.i32_const(2*o)),h=r.i32_const(t.alloc(o)),m=r.i32_const(t.alloc(o)),L=r.i32_const(t.alloc(o)),w=r.i32_const(t.alloc(o)),A=r.i32_const(t.alloc(o)),b=r.i32_const(t.alloc(o)),y=r.i32_const(t.alloc(o)),I=r.i32_const(t.alloc(o)),C=r.i32_const(t.alloc(o)),F=r.i32_const(t.alloc(o)),x=r.i32_const(t.alloc(o)),v=r.i32_const(t.alloc(o)),E=r.i32_const(t.alloc(o));n.addCode(r.call(i+"_mul",c,d,h),r.call(i+"_mul",l,u,m),r.call(i+"_mul",s,g,L),r.call(i+"_add",c,l,w),r.call(i+"_add",d,u,A),r.call(i+"_add",c,s,b),r.call(i+"_add",d,g,y),r.call(i+"_add",l,s,I),r.call(i+"_add",u,g,C),r.call(i+"_add",h,m,F),r.call(i+"_add",h,L,x),r.call(i+"_add",m,L,v),r.call(i+"_mul",I,C,f),r.call(i+"_sub",f,v,f),r.call(e,f,f),r.call(i+"_add",h,f,f),r.call(i+"_mul",w,A,_),r.call(i+"_sub",_,F,_),r.call(e,L,E),r.call(i+"_add",_,E,_),r.call(i+"_mul",b,y,p),r.call(i+"_sub",p,x,p),r.call(i+"_add",p,m,p))}(),function(){const n=t.addFunction(a+"_square");n.addParam("x","i32"),n.addParam("r","i32");const r=n.getCodeBuilder(),c=r.getLocal("x"),l=r.i32_add(r.getLocal("x"),r.i32_const(o)),s=r.i32_add(r.getLocal("x"),r.i32_const(2*o)),d=r.getLocal("r"),u=r.i32_add(r.getLocal("r"),r.i32_const(o)),g=r.i32_add(r.getLocal("r"),r.i32_const(2*o)),f=r.i32_const(t.alloc(o)),_=r.i32_const(t.alloc(o)),p=r.i32_const(t.alloc(o)),h=r.i32_const(t.alloc(o)),m=r.i32_const(t.alloc(o)),L=r.i32_const(t.alloc(o)),w=r.i32_const(t.alloc(o));n.addCode(r.call(i+"_square",c,f),r.call(i+"_mul",c,l,_),r.call(i+"_add",_,_,p),r.call(i+"_sub",c,l,h),r.call(i+"_add",h,s,h),r.call(i+"_square",h,h),r.call(i+"_mul",l,s,m),r.call(i+"_add",m,m,L),r.call(i+"_square",s,w),r.call(e,L,d),r.call(i+"_add",f,d,d),r.call(e,w,u),r.call(i+"_add",p,u,u),r.call(i+"_add",f,w,g),r.call(i+"_sub",L,g,g),r.call(i+"_add",h,g,g),r.call(i+"_add",p,g,g))}(),function(){const e=t.addFunction(a+"_add");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),s=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(o)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*o)),g=n.getLocal("r"),f=n.i32_add(n.getLocal("r"),n.i32_const(o)),_=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_add",r,s,g),n.call(i+"_add",c,d,f),n.call(i+"_add",l,u,_))}(),function(){const e=t.addFunction(a+"_sub");e.addParam("x","i32"),e.addParam("y","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),s=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(o)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*o)),g=n.getLocal("r"),f=n.i32_add(n.getLocal("r"),n.i32_const(o)),_=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_sub",r,s,g),n.call(i+"_sub",c,d,f),n.call(i+"_sub",l,u,_))}(),function(){const e=t.addFunction(a+"_neg");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),s=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_neg",r,s),n.call(i+"_neg",c,d),n.call(i+"_neg",l,u))}(),function(){const e=t.addFunction(a+"_sign");e.addParam("x","i32"),e.addLocal("s","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.setLocal("s",n.call(i+"_sign",l)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.setLocal("s",n.call(i+"_sign",c)),n.if(n.getLocal("s"),n.ret(n.getLocal("s"))),n.ret(n.call(i+"_sign",r)))}(),function(){const e=t.addFunction(a+"_toMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),s=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_toMontgomery",r,s),n.call(i+"_toMontgomery",c,d),n.call(i+"_toMontgomery",l,u))}(),function(){const e=t.addFunction(a+"_fromMontgomery");e.addParam("x","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),s=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_fromMontgomery",r,s),n.call(i+"_fromMontgomery",c,d),n.call(i+"_fromMontgomery",l,u))}(),function(){const e=t.addFunction(a+"_eq");e.addParam("x","i32"),e.addParam("y","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),s=n.getLocal("y"),d=n.i32_add(n.getLocal("y"),n.i32_const(o)),u=n.i32_add(n.getLocal("y"),n.i32_const(2*o));e.addCode(n.i32_and(n.i32_and(n.call(i+"_eq",r,s),n.call(i+"_eq",c,d)),n.call(i+"_eq",l,u)))}(),function(){const n=t.addFunction(a+"_inverse");n.addParam("x","i32"),n.addParam("r","i32");const r=n.getCodeBuilder(),c=r.getLocal("x"),l=r.i32_add(r.getLocal("x"),r.i32_const(o)),s=r.i32_add(r.getLocal("x"),r.i32_const(2*o)),d=r.getLocal("r"),u=r.i32_add(r.getLocal("r"),r.i32_const(o)),g=r.i32_add(r.getLocal("r"),r.i32_const(2*o)),f=r.i32_const(t.alloc(o)),_=r.i32_const(t.alloc(o)),p=r.i32_const(t.alloc(o)),h=r.i32_const(t.alloc(o)),m=r.i32_const(t.alloc(o)),L=r.i32_const(t.alloc(o)),w=r.i32_const(t.alloc(o)),A=r.i32_const(t.alloc(o)),b=r.i32_const(t.alloc(o)),y=r.i32_const(t.alloc(o)),I=r.i32_const(t.alloc(o));n.addCode(r.call(i+"_square",c,f),r.call(i+"_square",l,_),r.call(i+"_square",s,p),r.call(i+"_mul",c,l,h),r.call(i+"_mul",c,s,m),r.call(i+"_mul",l,s,L),r.call(e,L,w),r.call(i+"_sub",f,w,w),r.call(e,p,A),r.call(i+"_sub",A,h,A),r.call(i+"_sub",_,m,b),r.call(i+"_mul",s,A,y),r.call(i+"_mul",l,b,I),r.call(i+"_add",y,I,y),r.call(e,y,y),r.call(i+"_mul",c,w,I),r.call(i+"_add",I,y,y),r.call(i+"_inverse",y,y),r.call(i+"_mul",y,w,d),r.call(i+"_mul",y,A,u),r.call(i+"_mul",y,b,g))}(),function(){const e=t.addFunction(a+"_timesScalar");e.addParam("x","i32"),e.addParam("scalar","i32"),e.addParam("scalarLen","i32"),e.addParam("r","i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o)),s=n.getLocal("r"),d=n.i32_add(n.getLocal("r"),n.i32_const(o)),u=n.i32_add(n.getLocal("r"),n.i32_const(2*o));e.addCode(n.call(i+"_timesScalar",r,n.getLocal("scalar"),n.getLocal("scalarLen"),s),n.call(i+"_timesScalar",c,n.getLocal("scalar"),n.getLocal("scalarLen"),d),n.call(i+"_timesScalar",l,n.getLocal("scalar"),n.getLocal("scalarLen"),u))}(),function(){const e=t.addFunction(a+"_isNegative");e.addParam("x","i32"),e.setReturnType("i32");const n=e.getCodeBuilder(),r=n.getLocal("x"),c=n.i32_add(n.getLocal("x"),n.i32_const(o)),l=n.i32_add(n.getLocal("x"),n.i32_const(2*o));e.addCode(n.if(n.call(i+"_isZero",l),n.if(n.call(i+"_isZero",c),n.ret(n.call(i+"_isNegative",r)),n.ret(n.call(i+"_isNegative",c)))),n.ret(n.call(i+"_isNegative",l)))}(),t.exportFunction(a+"_isZero"),t.exportFunction(a+"_isOne"),t.exportFunction(a+"_zero"),t.exportFunction(a+"_one"),t.exportFunction(a+"_copy"),t.exportFunction(a+"_mul"),t.exportFunction(a+"_square"),t.exportFunction(a+"_add"),t.exportFunction(a+"_sub"),t.exportFunction(a+"_neg"),t.exportFunction(a+"_sign"),t.exportFunction(a+"_fromMontgomery"),t.exportFunction(a+"_toMontgomery"),t.exportFunction(a+"_eq"),t.exportFunction(a+"_inverse"),Gt(t,a),St(t,a+"_exp",3*o,a+"_mul",a+"_square",a+"_copy",a+"_one"),t.exportFunction(a+"_exp"),t.exportFunction(a+"_timesScalar"),t.exportFunction(a+"_batchInverse"),t.exportFunction(a+"_isNegative"),a},Mt=function(t,e,a,i,o,n,r,c){const l=t.addFunction(e);l.addParam("base","i32"),l.addParam("scalar","i32"),l.addParam("scalarLength","i32"),l.addParam("r","i32"),l.addLocal("old0","i32"),l.addLocal("nbits","i32"),l.addLocal("i","i32"),l.addLocal("last","i32"),l.addLocal("cur","i32"),l.addLocal("carry","i32"),l.addLocal("p","i32");const s=l.getCodeBuilder(),d=s.i32_const(t.alloc(a));function u(t){return s.i32_and(s.i32_shr_u(s.i32_load(s.i32_add(s.getLocal("scalar"),s.i32_and(s.i32_shr_u(t,s.i32_const(3)),s.i32_const(4294967292)))),s.i32_and(t,s.i32_const(31))),s.i32_const(1))}function g(t){return[...s.i32_store8(s.getLocal("p"),s.i32_const(t)),...s.setLocal("p",s.i32_add(s.getLocal("p"),s.i32_const(1)))]}l.addCode(s.if(s.i32_eqz(s.getLocal("scalarLength")),[...s.call(c,s.getLocal("r")),...s.ret([])]),s.setLocal("nbits",s.i32_shl(s.getLocal("scalarLength"),s.i32_const(3))),s.setLocal("old0",s.i32_load(s.i32_const(0))),s.setLocal("p",s.getLocal("old0")),s.i32_store(s.i32_const(0),s.i32_and(s.i32_add(s.i32_add(s.getLocal("old0"),s.i32_const(32)),s.getLocal("nbits")),s.i32_const(4294967288))),s.setLocal("i",s.i32_const(1)),s.setLocal("last",u(s.i32_const(0))),s.setLocal("carry",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("nbits"))),s.setLocal("cur",u(s.getLocal("i"))),s.if(s.getLocal("last"),s.if(s.getLocal("cur"),s.if(s.getLocal("carry"),[...s.setLocal("last",s.i32_const(0)),...s.setLocal("carry",s.i32_const(1)),...g(1)],[...s.setLocal("last",s.i32_const(0)),...s.setLocal("carry",s.i32_const(1)),...g(255)]),s.if(s.getLocal("carry"),[...s.setLocal("last",s.i32_const(0)),...s.setLocal("carry",s.i32_const(1)),...g(255)],[...s.setLocal("last",s.i32_const(0)),...s.setLocal("carry",s.i32_const(0)),...g(1)])),s.if(s.getLocal("cur"),s.if(s.getLocal("carry"),[...s.setLocal("last",s.i32_const(0)),...s.setLocal("carry",s.i32_const(1)),...g(0)],[...s.setLocal("last",s.i32_const(1)),...s.setLocal("carry",s.i32_const(0)),...g(0)]),s.if(s.getLocal("carry"),[...s.setLocal("last",s.i32_const(1)),...s.setLocal("carry",s.i32_const(0)),...g(0)],[...s.setLocal("last",s.i32_const(0)),...s.setLocal("carry",s.i32_const(0)),...g(0)]))),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0))),s.if(s.getLocal("last"),s.if(s.getLocal("carry"),[...g(255),...g(0),...g(1)],[...g(1)]),s.if(s.getLocal("carry"),[...g(0),...g(1)])),s.setLocal("p",s.i32_sub(s.getLocal("p"),s.i32_const(1))),s.call(r,s.getLocal("base"),d),s.call(c,s.getLocal("r")),s.block(s.loop(s.call(o,s.getLocal("r"),s.getLocal("r")),s.setLocal("cur",s.i32_load8_u(s.getLocal("p"))),s.if(s.getLocal("cur"),s.if(s.i32_eq(s.getLocal("cur"),s.i32_const(1)),s.call(i,s.getLocal("r"),d,s.getLocal("r")),s.call(n,s.getLocal("r"),d,s.getLocal("r")))),s.br_if(1,s.i32_eq(s.getLocal("old0"),s.getLocal("p"))),s.setLocal("p",s.i32_sub(s.getLocal("p"),s.i32_const(1))),s.br(0))),s.i32_store(s.i32_const(0),s.getLocal("old0")))},kt=function(t,e,a,i,o){const n=8*t.modules[e].n64;function r(){const i=t.addFunction(a);i.addParam("pBases","i32"),i.addParam("pScalars","i32"),i.addParam("scalarSize","i32"),i.addParam("n","i32"),i.addParam("pr","i32"),i.addLocal("chunkSize","i32"),i.addLocal("nChunks","i32"),i.addLocal("itScalar","i32"),i.addLocal("endScalar","i32"),i.addLocal("itBase","i32"),i.addLocal("itBit","i32"),i.addLocal("i","i32"),i.addLocal("j","i32"),i.addLocal("nTable","i32"),i.addLocal("pTable","i32"),i.addLocal("idx","i32"),i.addLocal("pIdxTable","i32");const o=i.getCodeBuilder(),r=o.i32_const(t.alloc(n)),c=t.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]);i.addCode(o.call(e+"_zero",o.getLocal("pr")),o.if(o.i32_eqz(o.getLocal("n")),o.ret([])),o.setLocal("chunkSize",o.i32_load8_u(o.i32_clz(o.getLocal("n")),c)),o.setLocal("nChunks",o.i32_add(o.i32_div_u(o.i32_sub(o.i32_shl(o.getLocal("scalarSize"),o.i32_const(3)),o.i32_const(1)),o.getLocal("chunkSize")),o.i32_const(1))),o.setLocal("itBit",o.i32_mul(o.i32_sub(o.getLocal("nChunks"),o.i32_const(1)),o.getLocal("chunkSize"))),o.block(o.loop(o.br_if(1,o.i32_lt_s(o.getLocal("itBit"),o.i32_const(0))),o.if(o.i32_eqz(o.call(e+"_isZero",o.getLocal("pr"))),[...o.setLocal("j",o.i32_const(0)),...o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("j"),o.getLocal("chunkSize"))),o.call(e+"_double",o.getLocal("pr"),o.getLocal("pr")),o.setLocal("j",o.i32_add(o.getLocal("j"),o.i32_const(1))),o.br(0)))]),o.call(a+"_chunk",o.getLocal("pBases"),o.getLocal("pScalars"),o.getLocal("scalarSize"),o.getLocal("n"),o.getLocal("itBit"),o.getLocal("chunkSize"),r),o.call(e+"_add",o.getLocal("pr"),r,o.getLocal("pr")),o.setLocal("itBit",o.i32_sub(o.getLocal("itBit"),o.getLocal("chunkSize"))),o.br(0))))}!function(){const e=t.addFunction(a+"_getChunk");e.addParam("pScalar","i32"),e.addParam("scalarSize","i32"),e.addParam("startBit","i32"),e.addParam("chunkSize","i32"),e.addLocal("bitsToEnd","i32"),e.addLocal("mask","i32"),e.setReturnType("i32");const i=e.getCodeBuilder();e.addCode(i.setLocal("bitsToEnd",i.i32_sub(i.i32_mul(i.getLocal("scalarSize"),i.i32_const(8)),i.getLocal("startBit"))),i.if(i.i32_gt_s(i.getLocal("chunkSize"),i.getLocal("bitsToEnd")),i.setLocal("mask",i.i32_sub(i.i32_shl(i.i32_const(1),i.getLocal("bitsToEnd")),i.i32_const(1))),i.setLocal("mask",i.i32_sub(i.i32_shl(i.i32_const(1),i.getLocal("chunkSize")),i.i32_const(1)))),i.i32_and(i.i32_shr_u(i.i32_load(i.i32_add(i.getLocal("pScalar"),i.i32_shr_u(i.getLocal("startBit"),i.i32_const(3))),0,0),i.i32_and(i.getLocal("startBit"),i.i32_const(7))),i.getLocal("mask")))}(),function(){const i=t.addFunction(a+"_reduceTable");i.addParam("pTable","i32"),i.addParam("p","i32"),i.addLocal("half","i32"),i.addLocal("it1","i32"),i.addLocal("it2","i32"),i.addLocal("pAcc","i32");const o=i.getCodeBuilder();i.addCode(o.if(o.i32_eq(o.getLocal("p"),o.i32_const(1)),o.ret([])),o.setLocal("half",o.i32_shl(o.i32_const(1),o.i32_sub(o.getLocal("p"),o.i32_const(1)))),o.setLocal("it1",o.getLocal("pTable")),o.setLocal("it2",o.i32_add(o.getLocal("pTable"),o.i32_mul(o.getLocal("half"),o.i32_const(n)))),o.setLocal("pAcc",o.i32_sub(o.getLocal("it2"),o.i32_const(n))),o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("it1"),o.getLocal("pAcc"))),o.call(e+"_add",o.getLocal("it1"),o.getLocal("it2"),o.getLocal("it1")),o.call(e+"_add",o.getLocal("pAcc"),o.getLocal("it2"),o.getLocal("pAcc")),o.setLocal("it1",o.i32_add(o.getLocal("it1"),o.i32_const(n))),o.setLocal("it2",o.i32_add(o.getLocal("it2"),o.i32_const(n))),o.br(0))),o.call(a+"_reduceTable",o.getLocal("pTable"),o.i32_sub(o.getLocal("p"),o.i32_const(1))),o.setLocal("p",o.i32_sub(o.getLocal("p"),o.i32_const(1))),o.block(o.loop(o.br_if(1,o.i32_eqz(o.getLocal("p"))),o.call(e+"_double",o.getLocal("pAcc"),o.getLocal("pAcc")),o.setLocal("p",o.i32_sub(o.getLocal("p"),o.i32_const(1))),o.br(0))),o.call(e+"_add",o.getLocal("pTable"),o.getLocal("pAcc"),o.getLocal("pTable")))}(),function(){const r=t.addFunction(a+"_chunk");r.addParam("pBases","i32"),r.addParam("pScalars","i32"),r.addParam("scalarSize","i32"),r.addParam("n","i32"),r.addParam("startBit","i32"),r.addParam("chunkSize","i32"),r.addParam("pr","i32"),r.addLocal("nChunks","i32"),r.addLocal("itScalar","i32"),r.addLocal("endScalar","i32"),r.addLocal("itBase","i32"),r.addLocal("i","i32"),r.addLocal("j","i32"),r.addLocal("nTable","i32"),r.addLocal("pTable","i32"),r.addLocal("idx","i32"),r.addLocal("pIdxTable","i32");const c=r.getCodeBuilder();r.addCode(c.if(c.i32_eqz(c.getLocal("n")),[...c.call(e+"_zero",c.getLocal("pr")),...c.ret([])]),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(n)))),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(e+"_zero",c.i32_add(c.getLocal("pTable"),c.i32_mul(c.getLocal("j"),c.i32_const(n)))),c.setLocal("j",c.i32_add(c.getLocal("j"),c.i32_const(1))),c.br(0))),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(a+"_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(n)))),...c.call(i,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(o))),c.br(0))),c.call(a+"_reduceTable",c.getLocal("pTable"),c.getLocal("chunkSize")),c.call(e+"_copy",c.getLocal("pTable"),c.getLocal("pr")),c.i32_store(c.i32_const(0),c.getLocal("pTable")))}(),r(),t.exportFunction(a),t.exportFunction(a+"_chunk")},Rt=function(t,e,a,i){const o=t.modules[a].n64,n=8*o;if(t.modules[e])return e;return t.modules[e]={n64:3*o},function(){const i=t.addFunction(e+"_isZeroAffine");i.addParam("p1","i32"),i.setReturnType("i32");const o=i.getCodeBuilder();i.addCode(o.i32_and(o.call(a+"_isZero",o.getLocal("p1")),o.call(a+"_isZero",o.i32_add(o.getLocal("p1"),o.i32_const(n)))))}(),function(){const i=t.addFunction(e+"_isZero");i.addParam("p1","i32"),i.setReturnType("i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_isZero",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))))}(),function(){const i=t.addFunction(e+"_zeroAffine");i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_zero",o.getLocal("pr"))),i.addCode(o.call(a+"_zero",o.i32_add(o.getLocal("pr"),o.i32_const(n))))}(),function(){const i=t.addFunction(e+"_zero");i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_zero",o.getLocal("pr"))),i.addCode(o.call(a+"_one",o.i32_add(o.getLocal("pr"),o.i32_const(n)))),i.addCode(o.call(a+"_zero",o.i32_add(o.getLocal("pr"),o.i32_const(2*n))))}(),function(){const a=t.addFunction(e+"_copyAffine");a.addParam("ps","i32"),a.addParam("pd","i32");const i=a.getCodeBuilder();for(let t=0;t<2*o;t++)a.addCode(i.i64_store(i.getLocal("pd"),8*t,i.i64_load(i.getLocal("ps"),8*t)))}(),function(){const a=t.addFunction(e+"_copy");a.addParam("ps","i32"),a.addParam("pd","i32");const i=a.getCodeBuilder();for(let t=0;t<3*o;t++)a.addCode(i.i64_store(i.getLocal("pd"),8*t,i.i64_load(i.getLocal("ps"),8*t)))}(),function(){const i=t.addFunction(e+"_toJacobian");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n)),l=o.getLocal("pr"),s=o.i32_add(o.getLocal("pr"),o.i32_const(n)),d=o.i32_add(o.getLocal("pr"),o.i32_const(2*n));i.addCode(o.if(o.call(e+"_isZeroAffine",o.getLocal("p1")),o.call(e+"_zero",o.getLocal("pr")),[...o.call(a+"_one",d),...o.call(a+"_copy",c,s),...o.call(a+"_copy",r,l)]))}(),function(){const i=t.addFunction(e+"_eqAffine");i.addParam("p1","i32"),i.addParam("p2","i32"),i.setReturnType("i32"),i.addLocal("z1","i32");const o=i.getCodeBuilder();i.addCode(o.ret(o.i32_and(o.call(a+"_eq",o.getLocal("p1"),o.getLocal("p2")),o.call(a+"_eq",o.i32_add(o.getLocal("p1"),o.i32_const(n)),o.i32_add(o.getLocal("p2"),o.i32_const(n))))))}(),function(){const i=t.addFunction(e+"_eqMixed");i.addParam("p1","i32"),i.addParam("p2","i32"),i.setReturnType("i32"),i.addLocal("z1","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const l=o.getLocal("z1"),s=o.getLocal("p2"),d=o.i32_add(o.getLocal("p2"),o.i32_const(n)),u=o.i32_const(t.alloc(n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),o.ret(o.call(e+"_isZeroAffine",o.getLocal("p2")))),o.if(o.call(e+"_isZeroAffine",o.getLocal("p2")),o.ret(o.i32_const(0))),o.if(o.call(a+"_isOne",l),o.ret(o.call(e+"_eqAffine",o.getLocal("p1"),o.getLocal("p2")))),o.call(a+"_square",l,u),o.call(a+"_mul",s,u,g),o.call(a+"_mul",l,u,f),o.call(a+"_mul",d,f,_),o.if(o.call(a+"_eq",r,g),o.if(o.call(a+"_eq",c,_),o.ret(o.i32_const(1)))),o.ret(o.i32_const(0)))}(),function(){const i=t.addFunction(e+"_eq");i.addParam("p1","i32"),i.addParam("p2","i32"),i.setReturnType("i32"),i.addLocal("z1","i32"),i.addLocal("z2","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const l=o.getLocal("z1"),s=o.getLocal("p2"),d=o.i32_add(o.getLocal("p2"),o.i32_const(n));i.addCode(o.setLocal("z2",o.i32_add(o.getLocal("p2"),o.i32_const(2*n))));const u=o.getLocal("z2"),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),o.ret(o.call(e+"_isZero",o.getLocal("p2")))),o.if(o.call(e+"_isZero",o.getLocal("p2")),o.ret(o.i32_const(0))),o.if(o.call(a+"_isOne",l),o.ret(o.call(e+"_eqMixed",o.getLocal("p2"),o.getLocal("p1")))),o.if(o.call(a+"_isOne",u),o.ret(o.call(e+"_eqMixed",o.getLocal("p1"),o.getLocal("p2")))),o.call(a+"_square",l,g),o.call(a+"_square",u,f),o.call(a+"_mul",r,f,_),o.call(a+"_mul",s,g,p),o.call(a+"_mul",l,g,h),o.call(a+"_mul",u,f,m),o.call(a+"_mul",c,m,L),o.call(a+"_mul",d,h,w),o.if(o.call(a+"_eq",_,p),o.if(o.call(a+"_eq",L,w),o.ret(o.i32_const(1)))),o.ret(o.i32_const(0)))}(),function(){const i=t.addFunction(e+"_doubleAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n)),l=o.getLocal("pr"),s=o.i32_add(o.getLocal("pr"),o.i32_const(n)),d=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),u=o.i32_const(t.alloc(n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZeroAffine",o.getLocal("p1")),[...o.call(e+"_toJacobian",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])]),o.call(a+"_square",r,u),o.call(a+"_square",c,g),o.call(a+"_square",g,f),o.call(a+"_add",r,g,_),o.call(a+"_square",_,_),o.call(a+"_sub",_,u,_),o.call(a+"_sub",_,f,_),o.call(a+"_add",_,_,_),o.call(a+"_add",u,u,p),o.call(a+"_add",p,u,p),o.call(a+"_add",c,c,d),o.call(a+"_square",p,l),o.call(a+"_sub",l,_,l),o.call(a+"_sub",l,_,l),o.call(a+"_add",f,f,h),o.call(a+"_add",h,h,h),o.call(a+"_add",h,h,h),o.call(a+"_sub",_,l,s),o.call(a+"_mul",s,p,s),o.call(a+"_sub",s,h,s))}(),function(){const i=t.addFunction(e+"_double");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n)),l=o.i32_add(o.getLocal("p1"),o.i32_const(2*n)),s=o.getLocal("pr"),d=o.i32_add(o.getLocal("pr"),o.i32_const(n)),u=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),[...o.call(e+"_copy",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])]),o.if(o.call(a+"_isOne",l),[...o.ret(o.call(e+"_doubleAffine",o.getLocal("p1"),o.getLocal("pr"))),...o.ret([])]),o.call(a+"_square",r,g),o.call(a+"_square",c,f),o.call(a+"_square",f,_),o.call(a+"_add",r,f,p),o.call(a+"_square",p,p),o.call(a+"_sub",p,g,p),o.call(a+"_sub",p,_,p),o.call(a+"_add",p,p,p),o.call(a+"_add",g,g,h),o.call(a+"_add",h,g,h),o.call(a+"_square",h,m),o.call(a+"_mul",c,l,L),o.call(a+"_add",p,p,s),o.call(a+"_sub",m,s,s),o.call(a+"_add",_,_,w),o.call(a+"_add",w,w,w),o.call(a+"_add",w,w,w),o.call(a+"_sub",p,s,d),o.call(a+"_mul",d,h,d),o.call(a+"_sub",d,w,d),o.call(a+"_add",L,L,u))}(),function(){const i=t.addFunction(e+"_addAffine");i.addParam("p1","i32"),i.addParam("p2","i32"),i.addParam("pr","i32"),i.addLocal("z1","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const l=o.getLocal("p2"),s=o.i32_add(o.getLocal("p2"),o.i32_const(n)),d=o.getLocal("pr"),u=o.i32_add(o.getLocal("pr"),o.i32_const(n)),g=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),f=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n)),A=o.i32_const(t.alloc(n)),b=o.i32_const(t.alloc(n)),y=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZeroAffine",o.getLocal("p1")),[...o.call(e+"_copyAffine",o.getLocal("p2"),o.getLocal("pr")),...o.call(a+"_one",o.i32_add(o.getLocal("pr"),o.i32_const(2*n))),...o.ret([])]),o.if(o.call(e+"_isZeroAffine",o.getLocal("p2")),[...o.call(e+"_copyAffine",o.getLocal("p1"),o.getLocal("pr")),...o.call(a+"_one",o.i32_add(o.getLocal("pr"),o.i32_const(2*n))),...o.ret([])]),o.if(o.call(a+"_eq",r,l),o.if(o.call(a+"_eq",c,s),[...o.call(e+"_doubleAffine",o.getLocal("p2"),o.getLocal("pr")),...o.ret([])])),o.call(a+"_sub",l,r,f),o.call(a+"_sub",s,c,p),o.call(a+"_square",f,_),o.call(a+"_add",_,_,h),o.call(a+"_add",h,h,h),o.call(a+"_mul",f,h,m),o.call(a+"_add",p,p,L),o.call(a+"_mul",r,h,A),o.call(a+"_square",L,w),o.call(a+"_add",A,A,b),o.call(a+"_sub",w,m,d),o.call(a+"_sub",d,b,d),o.call(a+"_mul",c,m,y),o.call(a+"_add",y,y,y),o.call(a+"_sub",A,d,u),o.call(a+"_mul",u,L,u),o.call(a+"_sub",u,y,u),o.call(a+"_add",f,f,g))}(),function(){const i=t.addFunction(e+"_addMixed");i.addParam("p1","i32"),i.addParam("p2","i32"),i.addParam("pr","i32"),i.addLocal("z1","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const l=o.getLocal("z1"),s=o.getLocal("p2"),d=o.i32_add(o.getLocal("p2"),o.i32_const(n)),u=o.getLocal("pr"),g=o.i32_add(o.getLocal("pr"),o.i32_const(n)),f=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),_=o.i32_const(t.alloc(n)),p=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n)),A=o.i32_const(t.alloc(n)),b=o.i32_const(t.alloc(n)),y=o.i32_const(t.alloc(n)),I=o.i32_const(t.alloc(n)),C=o.i32_const(t.alloc(n)),F=o.i32_const(t.alloc(n)),x=o.i32_const(t.alloc(n)),v=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),[...o.call(e+"_copyAffine",o.getLocal("p2"),o.getLocal("pr")),...o.call(a+"_one",o.i32_add(o.getLocal("pr"),o.i32_const(2*n))),...o.ret([])]),o.if(o.call(e+"_isZeroAffine",o.getLocal("p2")),[...o.call(e+"_copy",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])]),o.if(o.call(a+"_isOne",l),[...o.call(e+"_addAffine",r,s,u),...o.ret([])]),o.call(a+"_square",l,_),o.call(a+"_mul",s,_,p),o.call(a+"_mul",l,_,h),o.call(a+"_mul",d,h,m),o.if(o.call(a+"_eq",r,p),o.if(o.call(a+"_eq",c,m),[...o.call(e+"_doubleAffine",o.getLocal("p2"),o.getLocal("pr")),...o.ret([])])),o.call(a+"_sub",p,r,L),o.call(a+"_sub",m,c,A),o.call(a+"_square",L,w),o.call(a+"_add",w,w,b),o.call(a+"_add",b,b,b),o.call(a+"_mul",L,b,y),o.call(a+"_add",A,A,I),o.call(a+"_mul",r,b,F),o.call(a+"_square",I,C),o.call(a+"_add",F,F,x),o.call(a+"_sub",C,y,u),o.call(a+"_sub",u,x,u),o.call(a+"_mul",c,y,v),o.call(a+"_add",v,v,v),o.call(a+"_sub",F,u,g),o.call(a+"_mul",g,I,g),o.call(a+"_sub",g,v,g),o.call(a+"_add",l,L,f),o.call(a+"_square",f,f),o.call(a+"_sub",f,_,f),o.call(a+"_sub",f,w,f))}(),function(){const i=t.addFunction(e+"_add");i.addParam("p1","i32"),i.addParam("p2","i32"),i.addParam("pr","i32"),i.addLocal("z1","i32"),i.addLocal("z2","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n));i.addCode(o.setLocal("z1",o.i32_add(o.getLocal("p1"),o.i32_const(2*n))));const l=o.getLocal("z1"),s=o.getLocal("p2"),d=o.i32_add(o.getLocal("p2"),o.i32_const(n));i.addCode(o.setLocal("z2",o.i32_add(o.getLocal("p2"),o.i32_const(2*n))));const u=o.getLocal("z2"),g=o.getLocal("pr"),f=o.i32_add(o.getLocal("pr"),o.i32_const(n)),_=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),p=o.i32_const(t.alloc(n)),h=o.i32_const(t.alloc(n)),m=o.i32_const(t.alloc(n)),L=o.i32_const(t.alloc(n)),w=o.i32_const(t.alloc(n)),A=o.i32_const(t.alloc(n)),b=o.i32_const(t.alloc(n)),y=o.i32_const(t.alloc(n)),I=o.i32_const(t.alloc(n)),C=o.i32_const(t.alloc(n)),F=o.i32_const(t.alloc(n)),x=o.i32_const(t.alloc(n)),v=o.i32_const(t.alloc(n)),E=o.i32_const(t.alloc(n)),B=o.i32_const(t.alloc(n)),S=o.i32_const(t.alloc(n)),G=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),[...o.call(e+"_copy",o.getLocal("p2"),o.getLocal("pr")),...o.ret([])]),o.if(o.call(e+"_isZero",o.getLocal("p2")),[...o.call(e+"_copy",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])]),o.if(o.call(a+"_isOne",l),[...o.call(e+"_addMixed",s,r,g),...o.ret([])]),o.if(o.call(a+"_isOne",u),[...o.call(e+"_addMixed",r,s,g),...o.ret([])]),o.call(a+"_square",l,p),o.call(a+"_square",u,h),o.call(a+"_mul",r,h,m),o.call(a+"_mul",s,p,L),o.call(a+"_mul",l,p,w),o.call(a+"_mul",u,h,A),o.call(a+"_mul",c,A,b),o.call(a+"_mul",d,w,y),o.if(o.call(a+"_eq",m,L),o.if(o.call(a+"_eq",b,y),[...o.call(e+"_double",o.getLocal("p1"),o.getLocal("pr")),...o.ret([])])),o.call(a+"_sub",L,m,I),o.call(a+"_sub",y,b,C),o.call(a+"_add",I,I,F),o.call(a+"_square",F,F),o.call(a+"_mul",I,F,x),o.call(a+"_add",C,C,v),o.call(a+"_mul",m,F,B),o.call(a+"_square",v,E),o.call(a+"_add",B,B,S),o.call(a+"_sub",E,x,g),o.call(a+"_sub",g,S,g),o.call(a+"_mul",b,x,G),o.call(a+"_add",G,G,G),o.call(a+"_sub",B,g,f),o.call(a+"_mul",f,v,f),o.call(a+"_sub",f,G,f),o.call(a+"_add",l,u,_),o.call(a+"_square",_,_),o.call(a+"_sub",_,p,_),o.call(a+"_sub",_,h,_),o.call(a+"_mul",_,I,_))}(),function(){const i=t.addFunction(e+"_negAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n)),l=o.getLocal("pr"),s=o.i32_add(o.getLocal("pr"),o.i32_const(n));i.addCode(o.call(a+"_copy",r,l),o.call(a+"_neg",c,s))}(),function(){const i=t.addFunction(e+"_neg");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n)),l=o.i32_add(o.getLocal("p1"),o.i32_const(2*n)),s=o.getLocal("pr"),d=o.i32_add(o.getLocal("pr"),o.i32_const(n)),u=o.i32_add(o.getLocal("pr"),o.i32_const(2*n));i.addCode(o.call(a+"_copy",r,s),o.call(a+"_neg",c,d),o.call(a+"_copy",l,u))}(),function(){const a=t.addFunction(e+"_subAffine");a.addParam("p1","i32"),a.addParam("p2","i32"),a.addParam("pr","i32");const i=a.getCodeBuilder(),o=i.i32_const(t.alloc(3*n));a.addCode(i.call(e+"_negAffine",i.getLocal("p2"),o),i.call(e+"_addAffine",i.getLocal("p1"),o,i.getLocal("pr")))}(),function(){const a=t.addFunction(e+"_subMixed");a.addParam("p1","i32"),a.addParam("p2","i32"),a.addParam("pr","i32");const i=a.getCodeBuilder(),o=i.i32_const(t.alloc(3*n));a.addCode(i.call(e+"_negAffine",i.getLocal("p2"),o),i.call(e+"_addMixed",i.getLocal("p1"),o,i.getLocal("pr")))}(),function(){const a=t.addFunction(e+"_sub");a.addParam("p1","i32"),a.addParam("p2","i32"),a.addParam("pr","i32");const i=a.getCodeBuilder(),o=i.i32_const(t.alloc(3*n));a.addCode(i.call(e+"_neg",i.getLocal("p2"),o),i.call(e+"_add",i.getLocal("p1"),o,i.getLocal("pr")))}(),function(){const i=t.addFunction(e+"_fromMontgomeryAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_fromMontgomery",o.getLocal("p1"),o.getLocal("pr")));for(let t=1;t<2;t++)i.addCode(o.call(a+"_fromMontgomery",o.i32_add(o.getLocal("p1"),o.i32_const(t*n)),o.i32_add(o.getLocal("pr"),o.i32_const(t*n))))}(),function(){const i=t.addFunction(e+"_fromMontgomery");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_fromMontgomery",o.getLocal("p1"),o.getLocal("pr")));for(let t=1;t<3;t++)i.addCode(o.call(a+"_fromMontgomery",o.i32_add(o.getLocal("p1"),o.i32_const(t*n)),o.i32_add(o.getLocal("pr"),o.i32_const(t*n))))}(),function(){const i=t.addFunction(e+"_toMontgomeryAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_toMontgomery",o.getLocal("p1"),o.getLocal("pr")));for(let t=1;t<2;t++)i.addCode(o.call(a+"_toMontgomery",o.i32_add(o.getLocal("p1"),o.i32_const(t*n)),o.i32_add(o.getLocal("pr"),o.i32_const(t*n))))}(),function(){const i=t.addFunction(e+"_toMontgomery");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder();i.addCode(o.call(a+"_toMontgomery",o.getLocal("p1"),o.getLocal("pr")));for(let t=1;t<3;t++)i.addCode(o.call(a+"_toMontgomery",o.i32_add(o.getLocal("p1"),o.i32_const(t*n)),o.i32_add(o.getLocal("pr"),o.i32_const(t*n))))}(),function(){const i=t.addFunction(e+"_toAffine");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n)),l=o.i32_add(o.getLocal("p1"),o.i32_const(2*n)),s=o.getLocal("pr"),d=o.i32_add(o.getLocal("pr"),o.i32_const(n)),u=o.i32_const(t.alloc(n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),[...o.call(a+"_zero",s),...o.call(a+"_zero",d)],[...o.call(a+"_inverse",l,u),...o.call(a+"_square",u,g),...o.call(a+"_mul",u,g,f),...o.call(a+"_mul",r,g,s),...o.call(a+"_mul",c,f,d)]))}(),function(){const o=t.addFunction(e+"_inCurveAffine");o.addParam("pIn","i32"),o.setReturnType("i32");const r=o.getCodeBuilder(),c=r.getLocal("pIn"),l=r.i32_add(r.getLocal("pIn"),r.i32_const(n)),s=r.i32_const(t.alloc(n)),d=r.i32_const(t.alloc(n));o.addCode(r.call(a+"_square",l,s),r.call(a+"_square",c,d),r.call(a+"_mul",c,d,d),r.call(a+"_add",d,r.i32_const(i),d),r.ret(r.call(a+"_eq",s,d)))}(),function(){const a=t.addFunction(e+"_inCurve");a.addParam("pIn","i32"),a.setReturnType("i32");const i=a.getCodeBuilder(),o=i.i32_const(t.alloc(2*n));a.addCode(i.call(e+"_toAffine",i.getLocal("pIn"),o),i.ret(i.call(e+"_inCurveAffine",o)))}(),function(){const i=t.addFunction(e+"_batchToAffine");i.addParam("pIn","i32"),i.addParam("n","i32"),i.addParam("pOut","i32"),i.addLocal("pAux","i32"),i.addLocal("itIn","i32"),i.addLocal("itAux","i32"),i.addLocal("itOut","i32"),i.addLocal("i","i32");const o=i.getCodeBuilder(),r=o.i32_const(t.alloc(n));i.addCode(o.setLocal("pAux",o.i32_load(o.i32_const(0))),o.i32_store(o.i32_const(0),o.i32_add(o.getLocal("pAux"),o.i32_mul(o.getLocal("n"),o.i32_const(n)))),o.call(a+"_batchInverse",o.i32_add(o.getLocal("pIn"),o.i32_const(2*n)),o.i32_const(3*n),o.getLocal("n"),o.getLocal("pAux"),o.i32_const(n)),o.setLocal("itIn",o.getLocal("pIn")),o.setLocal("itAux",o.getLocal("pAux")),o.setLocal("itOut",o.getLocal("pOut")),o.setLocal("i",o.i32_const(0)),o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("i"),o.getLocal("n"))),o.if(o.call(a+"_isZero",o.getLocal("itAux")),[...o.call(a+"_zero",o.getLocal("itOut")),...o.call(a+"_zero",o.i32_add(o.getLocal("itOut"),o.i32_const(n)))],[...o.call(a+"_mul",o.getLocal("itAux"),o.i32_add(o.getLocal("itIn"),o.i32_const(n)),r),...o.call(a+"_square",o.getLocal("itAux"),o.getLocal("itAux")),...o.call(a+"_mul",o.getLocal("itAux"),o.getLocal("itIn"),o.getLocal("itOut")),...o.call(a+"_mul",o.getLocal("itAux"),r,o.i32_add(o.getLocal("itOut"),o.i32_const(n)))]),o.setLocal("itIn",o.i32_add(o.getLocal("itIn"),o.i32_const(3*n))),o.setLocal("itOut",o.i32_add(o.getLocal("itOut"),o.i32_const(2*n))),o.setLocal("itAux",o.i32_add(o.getLocal("itAux"),o.i32_const(n))),o.setLocal("i",o.i32_add(o.getLocal("i"),o.i32_const(1))),o.br(0))),o.i32_store(o.i32_const(0),o.getLocal("pAux")))}(),function(){const i=t.addFunction(e+"_normalize");i.addParam("p1","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),r=o.getLocal("p1"),c=o.i32_add(o.getLocal("p1"),o.i32_const(n)),l=o.i32_add(o.getLocal("p1"),o.i32_const(2*n)),s=o.getLocal("pr"),d=o.i32_add(o.getLocal("pr"),o.i32_const(n)),u=o.i32_add(o.getLocal("pr"),o.i32_const(2*n)),g=o.i32_const(t.alloc(n)),f=o.i32_const(t.alloc(n)),_=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("p1")),o.call(e+"_zero",o.getLocal("pr")),[...o.call(a+"_inverse",l,g),...o.call(a+"_square",g,f),...o.call(a+"_mul",g,f,_),...o.call(a+"_mul",r,f,s),...o.call(a+"_mul",c,_,d),...o.call(a+"_one",u)]))}(),function(){const a=t.addFunction(e+"__reverseBytes");a.addParam("pIn","i32"),a.addParam("n","i32"),a.addParam("pOut","i32"),a.addLocal("itOut","i32"),a.addLocal("itIn","i32");const i=a.getCodeBuilder();a.addCode(i.setLocal("itOut",i.i32_sub(i.i32_add(i.getLocal("pOut"),i.getLocal("n")),i.i32_const(1))),i.setLocal("itIn",i.getLocal("pIn")),i.block(i.loop(i.br_if(1,i.i32_lt_s(i.getLocal("itOut"),i.getLocal("pOut"))),i.i32_store8(i.getLocal("itOut"),i.i32_load8_u(i.getLocal("itIn"))),i.setLocal("itOut",i.i32_sub(i.getLocal("itOut"),i.i32_const(1))),i.setLocal("itIn",i.i32_add(i.getLocal("itIn"),i.i32_const(1))),i.br(0))))}(),function(){const a=t.addFunction(e+"_LEMtoU");a.addParam("pIn","i32"),a.addParam("pOut","i32");const i=a.getCodeBuilder(),o=t.alloc(2*n),r=i.i32_const(o),c=i.i32_const(o),l=i.i32_const(o+n);a.addCode(i.if(i.call(e+"_isZeroAffine",i.getLocal("pIn")),[...i.call(e+"_zeroAffine",i.getLocal("pOut")),...i.i32_store8(i.getLocal("pOut"),i.i32_const(64)),...i.ret([])]),i.call(e+"_fromMontgomeryAffine",i.getLocal("pIn"),r),i.call(e+"__reverseBytes",c,i.i32_const(n),i.getLocal("pOut")),i.call(e+"__reverseBytes",l,i.i32_const(n),i.i32_add(i.getLocal("pOut"),i.i32_const(n))))}(),function(){const i=t.addFunction(e+"_LEMtoC");i.addParam("pIn","i32"),i.addParam("pOut","i32");const o=i.getCodeBuilder(),r=o.i32_const(t.alloc(n));i.addCode(o.if(o.call(e+"_isZero",o.getLocal("pIn")),[...o.call(a+"_zero",o.getLocal("pOut")),...o.i32_store8(o.getLocal("pOut"),o.i32_const(64)),...o.ret([])]),o.call(a+"_fromMontgomery",o.getLocal("pIn"),r),o.call(e+"__reverseBytes",r,o.i32_const(n),o.getLocal("pOut")),o.if(o.i32_eq(o.call(a+"_sign",o.i32_add(o.getLocal("pIn"),o.i32_const(n))),o.i32_const(-1)),o.i32_store8(o.getLocal("pOut"),o.i32_or(o.i32_load8_u(o.getLocal("pOut")),o.i32_const(128)))))}(),function(){const a=t.addFunction(e+"_UtoLEM");a.addParam("pIn","i32"),a.addParam("pOut","i32");const i=a.getCodeBuilder(),o=t.alloc(2*n),r=i.i32_const(o),c=i.i32_const(o),l=i.i32_const(o+n);a.addCode(i.if(i.i32_and(i.i32_load8_u(i.getLocal("pIn")),i.i32_const(64)),[...i.call(e+"_zeroAffine",i.getLocal("pOut")),...i.ret([])]),i.call(e+"__reverseBytes",i.getLocal("pIn"),i.i32_const(n),c),i.call(e+"__reverseBytes",i.i32_add(i.getLocal("pIn"),i.i32_const(n)),i.i32_const(n),l),i.call(e+"_toMontgomeryAffine",r,i.getLocal("pOut")))}(),function(){const o=t.addFunction(e+"_CtoLEM");o.addParam("pIn","i32"),o.addParam("pOut","i32"),o.addLocal("firstByte","i32"),o.addLocal("greatest","i32");const r=o.getCodeBuilder(),c=t.alloc(2*n),l=r.i32_const(c),s=r.i32_const(c+n);o.addCode(r.setLocal("firstByte",r.i32_load8_u(r.getLocal("pIn"))),r.if(r.i32_and(r.getLocal("firstByte"),r.i32_const(64)),[...r.call(e+"_zeroAffine",r.getLocal("pOut")),...r.ret([])]),r.setLocal("greatest",r.i32_and(r.getLocal("firstByte"),r.i32_const(128))),r.call(a+"_copy",r.getLocal("pIn"),s),r.i32_store8(s,r.i32_and(r.getLocal("firstByte"),r.i32_const(63))),r.call(e+"__reverseBytes",s,r.i32_const(n),l),r.call(a+"_toMontgomery",l,r.getLocal("pOut")),r.call(a+"_square",r.getLocal("pOut"),s),r.call(a+"_mul",r.getLocal("pOut"),s,s),r.call(a+"_add",s,r.i32_const(i),s),r.call(a+"_sqrt",s,s),r.call(a+"_neg",s,l),r.if(r.i32_eq(r.call(a+"_sign",s),r.i32_const(-1)),r.if(r.getLocal("greatest"),r.call(a+"_copy",s,r.i32_add(r.getLocal("pOut"),r.i32_const(n))),r.call(a+"_neg",s,r.i32_add(r.getLocal("pOut"),r.i32_const(n)))),r.if(r.getLocal("greatest"),r.call(a+"_neg",s,r.i32_add(r.getLocal("pOut"),r.i32_const(n))),r.call(a+"_copy",s,r.i32_add(r.getLocal("pOut"),r.i32_const(n))))))}(),Pt(t,e+"_batchLEMtoU",e+"_LEMtoU",2*n,2*n),Pt(t,e+"_batchLEMtoC",e+"_LEMtoC",2*n,n),Pt(t,e+"_batchUtoLEM",e+"_UtoLEM",2*n,2*n),Pt(t,e+"_batchCtoLEM",e+"_CtoLEM",n,2*n,!0),Pt(t,e+"_batchToJacobian",e+"_toJacobian",2*n,3*n,!0),kt(t,e,e+"_multiexp",e+"_add",3*n),kt(t,e,e+"_multiexpAffine",e+"_addMixed",2*n),Mt(t,e+"_timesScalar",3*n,e+"_add",e+"_double",e+"_sub",e+"_copy",e+"_zero"),Mt(t,e+"_timesScalarAffine",2*n,e+"_addMixed",e+"_double",e+"_subMixed",e+"_copyAffine",e+"_zero"),t.exportFunction(e+"_isZero"),t.exportFunction(e+"_isZeroAffine"),t.exportFunction(e+"_eq"),t.exportFunction(e+"_eqMixed"),t.exportFunction(e+"_eqAffine"),t.exportFunction(e+"_copy"),t.exportFunction(e+"_copyAffine"),t.exportFunction(e+"_zero"),t.exportFunction(e+"_zeroAffine"),t.exportFunction(e+"_double"),t.exportFunction(e+"_doubleAffine"),t.exportFunction(e+"_add"),t.exportFunction(e+"_addMixed"),t.exportFunction(e+"_addAffine"),t.exportFunction(e+"_neg"),t.exportFunction(e+"_negAffine"),t.exportFunction(e+"_sub"),t.exportFunction(e+"_subMixed"),t.exportFunction(e+"_subAffine"),t.exportFunction(e+"_fromMontgomery"),t.exportFunction(e+"_fromMontgomeryAffine"),t.exportFunction(e+"_toMontgomery"),t.exportFunction(e+"_toMontgomeryAffine"),t.exportFunction(e+"_timesScalar"),t.exportFunction(e+"_timesScalarAffine"),t.exportFunction(e+"_normalize"),t.exportFunction(e+"_LEMtoU"),t.exportFunction(e+"_LEMtoC"),t.exportFunction(e+"_UtoLEM"),t.exportFunction(e+"_CtoLEM"),t.exportFunction(e+"_batchLEMtoU"),t.exportFunction(e+"_batchLEMtoC"),t.exportFunction(e+"_batchUtoLEM"),t.exportFunction(e+"_batchCtoLEM"),t.exportFunction(e+"_toAffine"),t.exportFunction(e+"_toJacobian"),t.exportFunction(e+"_batchToAffine"),t.exportFunction(e+"_batchToJacobian"),t.exportFunction(e+"_inCurve"),t.exportFunction(e+"_inCurveAffine"),e},Nt=function(t,e,a,i,o){const n=8*t.modules[i].n64,r=8*t.modules[a].n64,c=t.modules[i].q;let l=c.minus(u(1)),s=0;for(;!l.isOdd();)s++,l=l.shiftRight(1);let d=u(2);for(;d.modPow(c.shiftRight(1),c).equals(1);)d=d.add(1);const g=new Array(s+1);g[s]=d.modPow(l,c);let f=s-1;for(;f>=0;)g[f]=g[f+1].modPow(2,c),f--;const _=[],p=u(1).shiftLeft(8*n).mod(c);for(let t=0;t>a);return e}const x=Array(256);for(let t=0;t<256;t++)x[t]=F(t);const v=t.alloc(x);function E(){const a=t.addFunction(e+"_fft");a.addParam("px","i32"),a.addParam("n","i32"),a.addLocal("bits","i32");const o=a.getCodeBuilder(),r=o.i32_const(t.alloc(n));a.addCode(o.setLocal("bits",o.call(e+"__log2",o.getLocal("n"))),o.call(i+"_one",r),o.call(e+"_rawfft",o.getLocal("px"),o.getLocal("bits"),o.i32_const(0),r))}!function(){const a=t.addFunction(e+"__rev");a.addParam("x","i32"),a.addParam("bits","i32"),a.setReturnType("i32");const i=a.getCodeBuilder();a.addCode(i.i32_rotl(i.i32_add(i.i32_add(i.i32_shl(i.i32_load8_u(i.i32_and(i.getLocal("x"),i.i32_const(255)),v,0),i.i32_const(24)),i.i32_shl(i.i32_load8_u(i.i32_and(i.i32_shr_u(i.getLocal("x"),i.i32_const(8)),i.i32_const(255)),v,0),i.i32_const(16))),i.i32_add(i.i32_shl(i.i32_load8_u(i.i32_and(i.i32_shr_u(i.getLocal("x"),i.i32_const(16)),i.i32_const(255)),v,0),i.i32_const(8)),i.i32_load8_u(i.i32_and(i.i32_shr_u(i.getLocal("x"),i.i32_const(24)),i.i32_const(255)),v,0))),i.getLocal("bits")))}(),function(){const i=t.addFunction(e+"__reversePermutation");i.addParam("px","i32"),i.addParam("bits","i32"),i.addLocal("n","i32"),i.addLocal("i","i32"),i.addLocal("ri","i32"),i.addLocal("idx1","i32"),i.addLocal("idx2","i32");const o=i.getCodeBuilder(),n=o.i32_const(t.alloc(r));i.addCode(o.setLocal("n",o.i32_shl(o.i32_const(1),o.getLocal("bits"))),o.setLocal("i",o.i32_const(0)),o.block(o.loop(o.br_if(1,o.i32_eq(o.getLocal("i"),o.getLocal("n"))),o.setLocal("idx1",o.i32_add(o.getLocal("px"),o.i32_mul(o.getLocal("i"),o.i32_const(r)))),o.setLocal("ri",o.call(e+"__rev",o.getLocal("i"),o.getLocal("bits"))),o.setLocal("idx2",o.i32_add(o.getLocal("px"),o.i32_mul(o.getLocal("ri"),o.i32_const(r)))),o.if(o.i32_lt_u(o.getLocal("i"),o.getLocal("ri")),[...o.call(a+"_copy",o.getLocal("idx1"),n),...o.call(a+"_copy",o.getLocal("idx2"),o.getLocal("idx1")),...o.call(a+"_copy",n,o.getLocal("idx2"))]),o.setLocal("i",o.i32_add(o.getLocal("i"),o.i32_const(1))),o.br(0))))}(),function(){const n=t.addFunction(e+"__fftFinal");n.addParam("px","i32"),n.addParam("bits","i32"),n.addParam("reverse","i32"),n.addParam("mulFactor","i32"),n.addLocal("n","i32"),n.addLocal("ndiv2","i32"),n.addLocal("pInv2","i32"),n.addLocal("i","i32"),n.addLocal("mask","i32"),n.addLocal("idx1","i32"),n.addLocal("idx2","i32");const c=n.getCodeBuilder(),l=c.i32_const(t.alloc(r));n.addCode(c.if(c.i32_and(c.i32_eqz(c.getLocal("reverse")),c.call(i+"_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(r)))),c.setLocal("idx2",c.i32_add(c.getLocal("px"),c.i32_mul(c.i32_sub(c.getLocal("n"),c.getLocal("i")),c.i32_const(r)))),c.if(c.getLocal("reverse"),c.if(c.call(i+"_isOne",c.getLocal("mulFactor")),[...c.call(a+"_copy",c.getLocal("idx1"),l),...c.call(a+"_copy",c.getLocal("idx2"),c.getLocal("idx1")),...c.call(a+"_copy",l,c.getLocal("idx2"))],[...c.call(a+"_copy",c.getLocal("idx1"),l),...c.call(o,c.getLocal("idx2"),c.getLocal("mulFactor"),c.getLocal("idx1")),...c.call(o,l,c.getLocal("mulFactor"),c.getLocal("idx2"))]),c.if(c.call(i+"_isOne",c.getLocal("mulFactor")),[],[...c.call(o,c.getLocal("idx1"),c.getLocal("mulFactor"),c.getLocal("idx1")),...c.call(o,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(i+"_isOne",c.getLocal("mulFactor")),[],[...c.call(o,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(r)))),...c.call(o,c.getLocal("idx2"),c.getLocal("mulFactor"),c.getLocal("idx2"))]))}(),function(){const c=t.addFunction(e+"_rawfft");c.addParam("px","i32"),c.addParam("bits","i32"),c.addParam("reverse","i32"),c.addParam("mulFactor","i32"),c.addLocal("s","i32"),c.addLocal("k","i32"),c.addLocal("j","i32"),c.addLocal("m","i32"),c.addLocal("mdiv2","i32"),c.addLocal("n","i32"),c.addLocal("pwm","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32");const l=c.getCodeBuilder(),s=l.i32_const(t.alloc(n)),d=l.i32_const(t.alloc(r)),u=l.i32_const(t.alloc(r));c.addCode(l.call(e+"__reversePermutation",l.getLocal("px"),l.getLocal("bits")),l.setLocal("n",l.i32_shl(l.i32_const(1),l.getLocal("bits"))),l.setLocal("s",l.i32_const(1)),l.block(l.loop(l.br_if(1,l.i32_gt_u(l.getLocal("s"),l.getLocal("bits"))),l.setLocal("m",l.i32_shl(l.i32_const(1),l.getLocal("s"))),l.setLocal("pwm",l.i32_add(l.i32_const(h),l.i32_mul(l.getLocal("s"),l.i32_const(n)))),l.setLocal("k",l.i32_const(0)),l.block(l.loop(l.br_if(1,l.i32_ge_u(l.getLocal("k"),l.getLocal("n"))),l.call(i+"_one",s),l.setLocal("mdiv2",l.i32_shr_u(l.getLocal("m"),l.i32_const(1))),l.setLocal("j",l.i32_const(0)),l.block(l.loop(l.br_if(1,l.i32_ge_u(l.getLocal("j"),l.getLocal("mdiv2"))),l.setLocal("idx1",l.i32_add(l.getLocal("px"),l.i32_mul(l.i32_add(l.getLocal("k"),l.getLocal("j")),l.i32_const(r)))),l.setLocal("idx2",l.i32_add(l.getLocal("idx1"),l.i32_mul(l.getLocal("mdiv2"),l.i32_const(r)))),l.call(o,l.getLocal("idx2"),s,d),l.call(a+"_copy",l.getLocal("idx1"),u),l.call(a+"_add",u,d,l.getLocal("idx1")),l.call(a+"_sub",u,d,l.getLocal("idx2")),l.call(i+"_mul",s,l.getLocal("pwm"),s),l.setLocal("j",l.i32_add(l.getLocal("j"),l.i32_const(1))),l.br(0))),l.setLocal("k",l.i32_add(l.getLocal("k"),l.getLocal("m"))),l.br(0))),l.setLocal("s",l.i32_add(l.getLocal("s"),l.i32_const(1))),l.br(0))),l.call(e+"__fftFinal",l.getLocal("px"),l.getLocal("bits"),l.getLocal("reverse"),l.getLocal("mulFactor")))}(),function(){const a=t.addFunction(e+"__log2");a.addParam("n","i32"),a.setReturnType("i32"),a.addLocal("bits","i32"),a.addLocal("aux","i32");const i=a.getCodeBuilder();a.addCode(i.setLocal("aux",i.i32_shr_u(i.getLocal("n"),i.i32_const(1)))),a.addCode(i.setLocal("bits",i.i32_const(0))),a.addCode(i.block(i.loop(i.br_if(1,i.i32_eqz(i.getLocal("aux"))),i.setLocal("aux",i.i32_shr_u(i.getLocal("aux"),i.i32_const(1))),i.setLocal("bits",i.i32_add(i.getLocal("bits"),i.i32_const(1))),i.br(0)))),a.addCode(i.if(i.i32_ne(i.getLocal("n"),i.i32_shl(i.i32_const(1),i.getLocal("bits"))),i.unreachable())),a.addCode(i.if(i.i32_gt_u(i.getLocal("bits"),i.i32_const(s)),i.unreachable())),a.addCode(i.getLocal("bits"))}(),E(),function(){const a=t.addFunction(e+"_ifft");a.addParam("px","i32"),a.addParam("n","i32"),a.addLocal("bits","i32"),a.addLocal("pInv2","i32");const i=a.getCodeBuilder();a.addCode(i.setLocal("bits",i.call(e+"__log2",i.getLocal("n"))),i.setLocal("pInv2",i.i32_add(i.i32_const(w),i.i32_mul(i.getLocal("bits"),i.i32_const(n)))),i.call(e+"_rawfft",i.getLocal("px"),i.getLocal("bits"),i.i32_const(1),i.getLocal("pInv2")))}(),function(){const c=t.addFunction(e+"_fftJoin");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32");const l=c.getCodeBuilder(),s=l.i32_const(t.alloc(n)),d=l.i32_const(t.alloc(r)),u=l.i32_const(t.alloc(r));c.addCode(l.call(i+"_copy",l.getLocal("first"),s),l.setLocal("i",l.i32_const(0)),l.block(l.loop(l.br_if(1,l.i32_eq(l.getLocal("i"),l.getLocal("n"))),l.setLocal("idx1",l.i32_add(l.getLocal("pBuff1"),l.i32_mul(l.getLocal("i"),l.i32_const(r)))),l.setLocal("idx2",l.i32_add(l.getLocal("pBuff2"),l.i32_mul(l.getLocal("i"),l.i32_const(r)))),l.call(o,l.getLocal("idx2"),s,d),l.call(a+"_copy",l.getLocal("idx1"),u),l.call(a+"_add",u,d,l.getLocal("idx1")),l.call(a+"_sub",u,d,l.getLocal("idx2")),l.call(i+"_mul",s,l.getLocal("inc"),s),l.setLocal("i",l.i32_add(l.getLocal("i"),l.i32_const(1))),l.br(0))))}(),function(){const c=t.addFunction(e+"_fftJoinExt");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addParam("totalBits","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("pShiftToM","i32");const l=c.getCodeBuilder(),s=l.i32_const(t.alloc(n)),d=l.i32_const(t.alloc(r));c.addCode(l.setLocal("pShiftToM",l.i32_add(l.i32_const(I),l.i32_mul(l.getLocal("totalBits"),l.i32_const(n)))),l.call(i+"_copy",l.getLocal("first"),s),l.setLocal("i",l.i32_const(0)),l.block(l.loop(l.br_if(1,l.i32_eq(l.getLocal("i"),l.getLocal("n"))),l.setLocal("idx1",l.i32_add(l.getLocal("pBuff1"),l.i32_mul(l.getLocal("i"),l.i32_const(r)))),l.setLocal("idx2",l.i32_add(l.getLocal("pBuff2"),l.i32_mul(l.getLocal("i"),l.i32_const(r)))),l.call(a+"_add",l.getLocal("idx1"),l.getLocal("idx2"),d),l.call(o,l.getLocal("idx2"),l.getLocal("pShiftToM"),l.getLocal("idx2")),l.call(a+"_add",l.getLocal("idx1"),l.getLocal("idx2"),l.getLocal("idx2")),l.call(o,l.getLocal("idx2"),s,l.getLocal("idx2")),l.call(a+"_copy",d,l.getLocal("idx1")),l.call(i+"_mul",s,l.getLocal("inc"),s),l.setLocal("i",l.i32_add(l.getLocal("i"),l.i32_const(1))),l.br(0))))}(),function(){const c=t.addFunction(e+"_fftJoinExtInv");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addParam("totalBits","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("pShiftToM","i32"),c.addLocal("pSConst","i32");const l=c.getCodeBuilder(),s=l.i32_const(t.alloc(n)),d=l.i32_const(t.alloc(r));c.addCode(l.setLocal("pShiftToM",l.i32_add(l.i32_const(I),l.i32_mul(l.getLocal("totalBits"),l.i32_const(n)))),l.setLocal("pSConst",l.i32_add(l.i32_const(C),l.i32_mul(l.getLocal("totalBits"),l.i32_const(n)))),l.call(i+"_copy",l.getLocal("first"),s),l.setLocal("i",l.i32_const(0)),l.block(l.loop(l.br_if(1,l.i32_eq(l.getLocal("i"),l.getLocal("n"))),l.setLocal("idx1",l.i32_add(l.getLocal("pBuff1"),l.i32_mul(l.getLocal("i"),l.i32_const(r)))),l.setLocal("idx2",l.i32_add(l.getLocal("pBuff2"),l.i32_mul(l.getLocal("i"),l.i32_const(r)))),l.call(o,l.getLocal("idx2"),s,d),l.call(a+"_sub",l.getLocal("idx1"),d,l.getLocal("idx2")),l.call(o,l.getLocal("idx2"),l.getLocal("pSConst"),l.getLocal("idx2")),l.call(o,l.getLocal("idx1"),l.getLocal("pShiftToM"),l.getLocal("idx1")),l.call(a+"_sub",d,l.getLocal("idx1"),l.getLocal("idx1")),l.call(o,l.getLocal("idx1"),l.getLocal("pSConst"),l.getLocal("idx1")),l.call(i+"_mul",s,l.getLocal("inc"),s),l.setLocal("i",l.i32_add(l.getLocal("i"),l.i32_const(1))),l.br(0))))}(),function(){const c=t.addFunction(e+"_fftMix");c.addParam("pBuff","i32"),c.addParam("n","i32"),c.addParam("exp","i32"),c.addLocal("nGroups","i32"),c.addLocal("nPerGroup","i32"),c.addLocal("nPerGroupDiv2","i32"),c.addLocal("pairOffset","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("j","i32"),c.addLocal("pwm","i32");const l=c.getCodeBuilder(),s=l.i32_const(t.alloc(n)),d=l.i32_const(t.alloc(r)),u=l.i32_const(t.alloc(r));c.addCode(l.setLocal("nPerGroup",l.i32_shl(l.i32_const(1),l.getLocal("exp"))),l.setLocal("nPerGroupDiv2",l.i32_shr_u(l.getLocal("nPerGroup"),l.i32_const(1))),l.setLocal("nGroups",l.i32_shr_u(l.getLocal("n"),l.getLocal("exp"))),l.setLocal("pairOffset",l.i32_mul(l.getLocal("nPerGroupDiv2"),l.i32_const(r))),l.setLocal("pwm",l.i32_add(l.i32_const(h),l.i32_mul(l.getLocal("exp"),l.i32_const(n)))),l.setLocal("i",l.i32_const(0)),l.block(l.loop(l.br_if(1,l.i32_eq(l.getLocal("i"),l.getLocal("nGroups"))),l.call(i+"_one",s),l.setLocal("j",l.i32_const(0)),l.block(l.loop(l.br_if(1,l.i32_eq(l.getLocal("j"),l.getLocal("nPerGroupDiv2"))),l.setLocal("idx1",l.i32_add(l.getLocal("pBuff"),l.i32_mul(l.i32_add(l.i32_mul(l.getLocal("i"),l.getLocal("nPerGroup")),l.getLocal("j")),l.i32_const(r)))),l.setLocal("idx2",l.i32_add(l.getLocal("idx1"),l.getLocal("pairOffset"))),l.call(o,l.getLocal("idx2"),s,d),l.call(a+"_copy",l.getLocal("idx1"),u),l.call(a+"_add",u,d,l.getLocal("idx1")),l.call(a+"_sub",u,d,l.getLocal("idx2")),l.call(i+"_mul",s,l.getLocal("pwm"),s),l.setLocal("j",l.i32_add(l.getLocal("j"),l.i32_const(1))),l.br(0))),l.setLocal("i",l.i32_add(l.getLocal("i"),l.i32_const(1))),l.br(0))))}(),function(){const i=t.addFunction(e+"_fftFinal");i.addParam("pBuff","i32"),i.addParam("n","i32"),i.addParam("factor","i32"),i.addLocal("idx1","i32"),i.addLocal("idx2","i32"),i.addLocal("i","i32"),i.addLocal("ndiv2","i32");const n=i.getCodeBuilder(),c=n.i32_const(t.alloc(r));i.addCode(n.setLocal("ndiv2",n.i32_shr_u(n.getLocal("n"),n.i32_const(1))),n.if(n.i32_and(n.getLocal("n"),n.i32_const(1)),n.call(o,n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("ndiv2"),n.i32_const(r))),n.getLocal("factor"),n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("ndiv2"),n.i32_const(r))))),n.setLocal("i",n.i32_const(0)),n.block(n.loop(n.br_if(1,n.i32_ge_u(n.getLocal("i"),n.getLocal("ndiv2"))),n.setLocal("idx1",n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.getLocal("i"),n.i32_const(r)))),n.setLocal("idx2",n.i32_add(n.getLocal("pBuff"),n.i32_mul(n.i32_sub(n.i32_sub(n.getLocal("n"),n.i32_const(1)),n.getLocal("i")),n.i32_const(r)))),n.call(o,n.getLocal("idx2"),n.getLocal("factor"),c),n.call(o,n.getLocal("idx1"),n.getLocal("factor"),n.getLocal("idx2")),n.call(a+"_copy",c,n.getLocal("idx1")),n.setLocal("i",n.i32_add(n.getLocal("i"),n.i32_const(1))),n.br(0))))}(),function(){const c=t.addFunction(e+"_prepareLagrangeEvaluation");c.addParam("pBuff1","i32"),c.addParam("pBuff2","i32"),c.addParam("n","i32"),c.addParam("first","i32"),c.addParam("inc","i32"),c.addParam("totalBits","i32"),c.addLocal("idx1","i32"),c.addLocal("idx2","i32"),c.addLocal("i","i32"),c.addLocal("pShiftToM","i32"),c.addLocal("pSConst","i32");const l=c.getCodeBuilder(),s=l.i32_const(t.alloc(n)),d=l.i32_const(t.alloc(r));c.addCode(l.setLocal("pShiftToM",l.i32_add(l.i32_const(I),l.i32_mul(l.getLocal("totalBits"),l.i32_const(n)))),l.setLocal("pSConst",l.i32_add(l.i32_const(C),l.i32_mul(l.getLocal("totalBits"),l.i32_const(n)))),l.call(i+"_copy",l.getLocal("first"),s),l.setLocal("i",l.i32_const(0)),l.block(l.loop(l.br_if(1,l.i32_eq(l.getLocal("i"),l.getLocal("n"))),l.setLocal("idx1",l.i32_add(l.getLocal("pBuff1"),l.i32_mul(l.getLocal("i"),l.i32_const(r)))),l.setLocal("idx2",l.i32_add(l.getLocal("pBuff2"),l.i32_mul(l.getLocal("i"),l.i32_const(r)))),l.call(o,l.getLocal("idx1"),l.getLocal("pShiftToM"),d),l.call(a+"_sub",l.getLocal("idx2"),d,d),l.call(a+"_sub",l.getLocal("idx1"),l.getLocal("idx2"),l.getLocal("idx2")),l.call(o,d,l.getLocal("pSConst"),l.getLocal("idx1")),l.call(o,l.getLocal("idx2"),s,l.getLocal("idx2")),l.call(i+"_mul",s,l.getLocal("inc"),s),l.setLocal("i",l.i32_add(l.getLocal("i"),l.i32_const(1))),l.br(0))))}(),t.exportFunction(e+"_fft"),t.exportFunction(e+"_ifft"),t.exportFunction(e+"_rawfft"),t.exportFunction(e+"_fftJoin"),t.exportFunction(e+"_fftJoinExt"),t.exportFunction(e+"_fftJoinExtInv"),t.exportFunction(e+"_fftMix"),t.exportFunction(e+"_fftFinal"),t.exportFunction(e+"_prepareLagrangeEvaluation")},Tt=function(t,e,a){const i=8*t.modules[a].n64;return function(){const o=t.addFunction(e+"_zero");o.addParam("px","i32"),o.addParam("n","i32"),o.addLocal("lastp","i32"),o.addLocal("p","i32");const n=o.getCodeBuilder();o.addCode(n.setLocal("p",n.getLocal("px")),n.setLocal("lastp",n.i32_add(n.getLocal("px"),n.i32_mul(n.getLocal("n"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("p"),n.getLocal("lastp"))),n.call(a+"_zero",n.getLocal("p")),n.setLocal("p",n.i32_add(n.getLocal("p"),n.i32_const(i))),n.br(0))))}(),function(){const o=t.addFunction(e+"_constructLC");o.addParam("ppolynomials","i32"),o.addParam("psignals","i32"),o.addParam("nSignals","i32"),o.addParam("pres","i32"),o.addLocal("i","i32"),o.addLocal("j","i32"),o.addLocal("pp","i32"),o.addLocal("ps","i32"),o.addLocal("pd","i32"),o.addLocal("ncoefs","i32");const n=o.getCodeBuilder(),r=n.i32_const(t.alloc(i));o.addCode(n.setLocal("i",n.i32_const(0)),n.setLocal("pp",n.getLocal("ppolynomials")),n.setLocal("ps",n.getLocal("psignals")),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("i"),n.getLocal("nSignals"))),n.setLocal("ncoefs",n.i32_load(n.getLocal("pp"))),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(4))),n.setLocal("j",n.i32_const(0)),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("j"),n.getLocal("ncoefs"))),n.setLocal("pd",n.i32_add(n.getLocal("pres"),n.i32_mul(n.i32_load(n.getLocal("pp")),n.i32_const(i)))),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(4))),n.call(a+"_mul",n.getLocal("ps"),n.getLocal("pp"),r),n.call(a+"_add",r,n.getLocal("pd"),n.getLocal("pd")),n.setLocal("pp",n.i32_add(n.getLocal("pp"),n.i32_const(i))),n.setLocal("j",n.i32_add(n.getLocal("j"),n.i32_const(1))),n.br(0))),n.setLocal("ps",n.i32_add(n.getLocal("ps"),n.i32_const(i))),n.setLocal("i",n.i32_add(n.getLocal("i"),n.i32_const(1))),n.br(0))))}(),t.exportFunction(e+"_zero"),t.exportFunction(e+"_constructLC"),e},Dt=function(t,e,a){const i=8*t.modules[a].n64;return function(){const o=t.addFunction(e+"_buildABC");o.addParam("pCoefs","i32"),o.addParam("nCoefs","i32"),o.addParam("pWitness","i32"),o.addParam("pA","i32"),o.addParam("pB","i32"),o.addParam("pC","i32"),o.addParam("offsetOut","i32"),o.addParam("nOut","i32"),o.addParam("offsetWitness","i32"),o.addParam("nWitness","i32"),o.addLocal("it","i32"),o.addLocal("ita","i32"),o.addLocal("itb","i32"),o.addLocal("last","i32"),o.addLocal("m","i32"),o.addLocal("c","i32"),o.addLocal("s","i32"),o.addLocal("pOut","i32");const n=o.getCodeBuilder(),r=n.i32_const(t.alloc(i));o.addCode(n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("nOut"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(a+"_zero",n.getLocal("ita")),n.call(a+"_zero",n.getLocal("itb")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(i))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(i))),n.br(0))),n.setLocal("it",n.getLocal("pCoefs")),n.setLocal("last",n.i32_add(n.getLocal("pCoefs"),n.i32_mul(n.getLocal("nCoefs"),n.i32_const(i+12)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("it"),n.getLocal("last"))),n.setLocal("s",n.i32_load(n.getLocal("it"),8)),n.if(n.i32_or(n.i32_lt_u(n.getLocal("s"),n.getLocal("offsetWitness")),n.i32_ge_u(n.getLocal("s"),n.i32_add(n.getLocal("offsetWitness"),n.getLocal("nWitness")))),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i+12))),...n.br(1)]),n.setLocal("m",n.i32_load(n.getLocal("it"))),n.if(n.i32_eq(n.getLocal("m"),n.i32_const(0)),n.setLocal("pOut",n.getLocal("pA")),n.if(n.i32_eq(n.getLocal("m"),n.i32_const(1)),n.setLocal("pOut",n.getLocal("pB")),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i+12))),...n.br(1)])),n.setLocal("c",n.i32_load(n.getLocal("it"),4)),n.if(n.i32_or(n.i32_lt_u(n.getLocal("c"),n.getLocal("offsetOut")),n.i32_ge_u(n.getLocal("c"),n.i32_add(n.getLocal("offsetOut"),n.getLocal("nOut")))),[...n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i+12))),...n.br(1)]),n.setLocal("pOut",n.i32_add(n.getLocal("pOut"),n.i32_mul(n.i32_sub(n.getLocal("c"),n.getLocal("offsetOut")),n.i32_const(i)))),n.call(a+"_mul",n.i32_add(n.getLocal("pWitness"),n.i32_mul(n.i32_sub(n.getLocal("s"),n.getLocal("offsetWitness")),n.i32_const(i))),n.i32_add(n.getLocal("it"),n.i32_const(12)),r),n.call(a+"_add",n.getLocal("pOut"),r,n.getLocal("pOut")),n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i+12))),n.br(0))),n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("it",n.getLocal("pC")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("nOut"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(a+"_mul",n.getLocal("ita"),n.getLocal("itb"),n.getLocal("it")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(i))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(i))),n.setLocal("it",n.i32_add(n.getLocal("it"),n.i32_const(i))),n.br(0))))}(),function(){const o=t.addFunction(e+"_joinABC");o.addParam("pA","i32"),o.addParam("pB","i32"),o.addParam("pC","i32"),o.addParam("n","i32"),o.addParam("pP","i32"),o.addLocal("ita","i32"),o.addLocal("itb","i32"),o.addLocal("itc","i32"),o.addLocal("itp","i32"),o.addLocal("last","i32");const n=o.getCodeBuilder(),r=n.i32_const(t.alloc(i));o.addCode(n.setLocal("ita",n.getLocal("pA")),n.setLocal("itb",n.getLocal("pB")),n.setLocal("itc",n.getLocal("pC")),n.setLocal("itp",n.getLocal("pP")),n.setLocal("last",n.i32_add(n.getLocal("pA"),n.i32_mul(n.getLocal("n"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(a+"_mul",n.getLocal("ita"),n.getLocal("itb"),r),n.call(a+"_sub",r,n.getLocal("itc"),n.getLocal("itp")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(i))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(i))),n.setLocal("itc",n.i32_add(n.getLocal("itc"),n.i32_const(i))),n.setLocal("itp",n.i32_add(n.getLocal("itp"),n.i32_const(i))),n.br(0))))}(),function(){const o=t.addFunction(e+"_batchAdd");o.addParam("pa","i32"),o.addParam("pb","i32"),o.addParam("n","i32"),o.addParam("pr","i32"),o.addLocal("ita","i32"),o.addLocal("itb","i32"),o.addLocal("itr","i32"),o.addLocal("last","i32");const n=o.getCodeBuilder();o.addCode(n.setLocal("ita",n.getLocal("pa")),n.setLocal("itb",n.getLocal("pb")),n.setLocal("itr",n.getLocal("pr")),n.setLocal("last",n.i32_add(n.getLocal("pa"),n.i32_mul(n.getLocal("n"),n.i32_const(i)))),n.block(n.loop(n.br_if(1,n.i32_eq(n.getLocal("ita"),n.getLocal("last"))),n.call(a+"_add",n.getLocal("ita"),n.getLocal("itb"),n.getLocal("itr")),n.setLocal("ita",n.i32_add(n.getLocal("ita"),n.i32_const(i))),n.setLocal("itb",n.i32_add(n.getLocal("itb"),n.i32_const(i))),n.setLocal("itr",n.i32_add(n.getLocal("itr"),n.i32_const(i))),n.br(0))))}(),t.exportFunction(e+"_buildABC"),t.exportFunction(e+"_joinABC"),t.exportFunction(e+"_batchAdd"),e},Kt=function(t,e,a,i,o,n,r,c){const l=t.addFunction(e);l.addParam("pIn","i32"),l.addParam("n","i32"),l.addParam("pFirst","i32"),l.addParam("pInc","i32"),l.addParam("pOut","i32"),l.addLocal("pOldFree","i32"),l.addLocal("i","i32"),l.addLocal("pFrom","i32"),l.addLocal("pTo","i32");const s=l.getCodeBuilder(),d=s.i32_const(t.alloc(r));l.addCode(s.setLocal("pFrom",s.getLocal("pIn")),s.setLocal("pTo",s.getLocal("pOut"))),l.addCode(s.call(i+"_copy",s.getLocal("pFirst"),d)),l.addCode(s.setLocal("i",s.i32_const(0)),s.block(s.loop(s.br_if(1,s.i32_eq(s.getLocal("i"),s.getLocal("n"))),s.call(c,s.getLocal("pFrom"),d,s.getLocal("pTo")),s.setLocal("pFrom",s.i32_add(s.getLocal("pFrom"),s.i32_const(o))),s.setLocal("pTo",s.i32_add(s.getLocal("pTo"),s.i32_const(n))),s.call(i+"_mul",d,s.getLocal("pInc"),d),s.setLocal("i",s.i32_add(s.getLocal("i"),s.i32_const(1))),s.br(0)))),t.exportFunction(e)},Vt=function(t,e){const a=e||"bn128";if(t.modules[a])return a;const i=u("21888242871839275222246405745257275088696311157297823662689037894645226208583"),o=u("21888242871839275222246405745257275088548364400416034343698204186575808495617"),n=Math.floor((i.minus(1).bitLength()-1)/64)+1,r=8*n,c=r,l=r,s=2*l,d=12*l,g=t.alloc(Et(o,c)),f=Ut(t,i,"f1m");zt(t,o,"fr","frm");const _=t.alloc(Et(A(u(3)),l)),p=Rt(t,"g1m","f1m",_);Nt(t,"frm","frm","frm","frm_mul"),Tt(t,"pol","frm"),Dt(t,"qap","frm");const h=qt(t,"f1m_neg","f2m","f1m"),m=t.alloc([...Et(A(u("19485874751759354771024239261021720505790618469301721065564631296452457478373")),l),...Et(A(u("266929791119991161246907387137283842545076965332900288569378510910307636690")),l)]),L=Rt(t,"g2m","f2m",m);function w(e,a){const i=t.addFunction(e);i.addParam("pG","i32"),i.addParam("pFr","i32"),i.addParam("pr","i32");const o=i.getCodeBuilder(),n=o.i32_const(t.alloc(r));i.addCode(o.call("frm_fromMontgomery",o.getLocal("pFr"),n),o.call(a,o.getLocal("pG"),n,o.i32_const(r),o.getLocal("pr"))),t.exportFunction(e)}function A(t){return u(t).times(u.one.shiftLeft(8*l)).mod(i)}w("g1m_timesFr","g1m_timesScalar"),Nt(t,"g1m","g1m","frm","g1m_timesFr"),w("g2m_timesFr","g2m_timesScalar"),Nt(t,"g2m","g2m","frm","g2m_timesFr"),w("g1m_timesFrAffine","g1m_timesScalarAffine"),w("g2m_timesFrAffine","g2m_timesScalarAffine"),Kt(t,"frm_batchApplyKey",0,"frm",r,r,r,"frm_mul"),Kt(t,"g1m_batchApplyKey",0,"frm",3*r,3*r,r,"g1m_timesFr"),Kt(t,"g1m_batchApplyKeyMixed",0,"frm",2*r,3*r,r,"g1m_timesFrAffine"),Kt(t,"g2m_batchApplyKey",0,"frm",2*r*3,3*r*2,r,"g2m_timesFr"),Kt(t,"g2m_batchApplyKeyMixed",0,"frm",2*r*2,3*r*2,r,"g2m_timesFrAffine");const b=[u("1"),u("2"),u.one],y=t.alloc([...Et(A(b[0]),l),...Et(A(b[1]),l),...Et(A(b[2]),l)]),I=[u.zero,u.one,u.zero],C=t.alloc([...Et(A(I[0]),l),...Et(A(I[1]),l),...Et(A(I[2]),l)]),F=[[u("10857046999023057135944570762232829481370756359578518086990519993285655852781"),u("11559732032986387107991004021392285783925812861821192530917403151452391805634")],[u("8495653923123431417604973247489272438418190587263600148770280649306958101930"),u("4082367875863433681332203403145435568316851327593401208105741076214120093531")],[u.one,u.zero]],x=t.alloc([...Et(A(F[0][0]),l),...Et(A(F[0][1]),l),...Et(A(F[1][0]),l),...Et(A(F[1][1]),l),...Et(A(F[2][0]),l),...Et(A(F[2][1]),l)]),v=[[u.zero,u.zero],[u.one,u.zero],[u.zero,u.zero]],E=t.alloc([...Et(A(v[0][0]),l),...Et(A(v[0][1]),l),...Et(A(v[1][0]),l),...Et(A(v[1][1]),l),...Et(A(v[2][0]),l),...Et(A(v[2][1]),l)]),B=t.alloc([...Et(A(1),l),...Et(A(0),l),...Et(A(0),l),...Et(A(0),l),...Et(A(0),l),...Et(A(0),l),...Et(A(0),l),...Et(A(0),l),...Et(A(0),l),...Et(A(0),l),...Et(A(0),l),...Et(A(0),l)]),S=t.alloc([...Et(A(9),l),...Et(A(1),l)]),G=t.alloc([...Et(A(u(2).modInv(i)),l),...Et(u(0),l)]),P=S,O=t.alloc([...Et(A("19485874751759354771024239261021720505790618469301721065564631296452457478373"),l),...Et(A("266929791119991161246907387137283842545076965332900288569378510910307636690"),l)]);!function(){const e=t.addFunction(a+"_mulNR6");e.addParam("x","i32"),e.addParam("pr","i32");const i=e.getCodeBuilder();e.addCode(i.call(h+"_mul",i.i32_const(S),i.getLocal("x"),i.getLocal("pr")))}();const U=Qt(t,a+"_mulNR6","f6m","f2m");!function(){const e=t.addFunction(a+"_mulNR12");e.addParam("x","i32"),e.addParam("pr","i32");const i=e.getCodeBuilder();e.addCode(i.call(h+"_mul",i.i32_const(S),i.i32_add(i.getLocal("x"),i.i32_const(4*r)),i.getLocal("pr")),i.call(h+"_copy",i.getLocal("x"),i.i32_add(i.getLocal("pr"),i.i32_const(2*r))),i.call(h+"_copy",i.i32_add(i.getLocal("x"),i.i32_const(2*r)),i.i32_add(i.getLocal("pr"),i.i32_const(4*r))))}();const z=qt(t,a+"_mulNR12","ftm",U),q=function(t){let e=t;const a=[];for(;e.gt(u.zero);)e.isOdd()?a.push(1):a.push(0),e=e.shiftRight(1);return a}(u("29793968203157093288")),Q=t.alloc(q),M=3*s,k=q.length-1,R=q.reduce(((t,e)=>t+(0!=e?1:0)),0),N=6*r,T=3*r*2+(R+k+1)*M;t.modules[a]={n64:n,pG1gen:y,pG1zero:C,pG1b:_,pG2gen:x,pG2zero:E,pG2b:m,pq:t.modules.f1m.pq,pr:g,pOneT:B,prePSize:N,preQSize:T,r:o.toString(),q:i.toString()};const D=u("4965661367192848881");function K(e){const o=[[[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")]],[[u("1"),u("0")],[u("8376118865763821496583973867626364092589906065868298776909617916018768340080"),u("16469823323077808223889137241176536799009286646108169935659301613961712198316")],[u("21888242871839275220042445260109153167277707414472061641714758635765020556617"),u("0")],[u("11697423496358154304825782922584725312912383441159505038794027105778954184319"),u("303847389135065887422783454877609941456349188919719272345083954437860409601")],[u("21888242871839275220042445260109153167277707414472061641714758635765020556616"),u("0")],[u("3321304630594332808241809054958361220322477375291206261884409189760185844239"),u("5722266937896532885780051958958348231143373700109372999374820235121374419868")],[u("21888242871839275222246405745257275088696311157297823662689037894645226208582"),u("0")],[u("13512124006075453725662431877630910996106405091429524885779419978626457868503"),u("5418419548761466998357268504080738289687024511189653727029736280683514010267")],[u("2203960485148121921418603742825762020974279258880205651966"),u("0")],[u("10190819375481120917420622822672549775783927716138318623895010788866272024264"),u("21584395482704209334823622290379665147239961968378104390343953940207365798982")],[u("2203960485148121921418603742825762020974279258880205651967"),u("0")],[u("18566938241244942414004596690298913868373833782006617400804628704885040364344"),u("16165975933942742336466353786298926857552937457188450663314217659523851788715")]]],n=[[[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")]],[[u("1"),u("0")],[u("21575463638280843010398324269430826099269044274347216827212613867836435027261"),u("10307601595873709700152284273816112264069230130616436755625194854815875713954")],[u("21888242871839275220042445260109153167277707414472061641714758635765020556616"),u("0")],[u("3772000881919853776433695186713858239009073593817195771773381919316419345261"),u("2236595495967245188281701248203181795121068902605861227855261137820944008926")],[u("2203960485148121921418603742825762020974279258880205651966"),u("0")],[u("18429021223477853657660792034369865839114504446431234726392080002137598044644"),u("9344045779998320333812420223237981029506012124075525679208581902008406485703")]],[[u("1"),u("0")],[u("2581911344467009335267311115468803099551665605076196740867805258568234346338"),u("19937756971775647987995932169929341994314640652964949448313374472400716661030")],[u("2203960485148121921418603742825762020974279258880205651966"),u("0")],[u("5324479202449903542726783395506214481928257762400643279780343368557297135718"),u("16208900380737693084919495127334387981393726419856888799917914180988844123039")],[u("21888242871839275220042445260109153167277707414472061641714758635765020556616"),u("0")],[u("13981852324922362344252311234282257507216387789820983642040889267519694726527"),u("7629828391165209371577384193250820201684255241773809077146787135900891633097")]]],r=t.addFunction(a+"__frobeniusMap"+e);r.addParam("x","i32"),r.addParam("r","i32");const c=r.getCodeBuilder();for(let a=0;a<6;a++){const i=0==a?c.getLocal("x"):c.i32_add(c.getLocal("x"),c.i32_const(a*s)),u=i,g=c.i32_add(c.getLocal("x"),c.i32_const(a*s+l)),_=0==a?c.getLocal("r"):c.i32_add(c.getLocal("r"),c.i32_const(a*s)),p=_,m=c.i32_add(c.getLocal("r"),c.i32_const(a*s+l)),L=d(o[Math.floor(a/3)][e%12],n[a%3][e%6]),w=t.alloc([...Et(A(L[0]),32),...Et(A(L[1]),32)]);e%2==1?r.addCode(c.call(f+"_copy",u,p),c.call(f+"_neg",g,m),c.call(h+"_mul",_,c.i32_const(w),_)):r.addCode(c.call(h+"_mul",i,c.i32_const(w),_))}function d(t,e){const a=u(t[0]),o=u(t[1]),n=u(e[0]),r=u(e[1]),c=[a.times(n).minus(o.times(r)).mod(i),a.times(r).add(o.times(n)).mod(i)];return c[0].isNegative()&&(c[0]=c[0].add(i)),c}}function V(e,i){const o=function(t){let e=t;const a=[];for(;e.gt(u.zero);){if(e.isOdd()){const t=2-e.mod(4).toJSNumber();a.push(t),e=e.minus(t)}else a.push(0);e=e.shiftRight(1)}return a}(e).map((t=>-1==t?255:t)),n=t.alloc(o);t.alloc(Et(e,32));const r=t.addFunction(a+"__cyclotomicExp_"+i);r.addParam("x","i32"),r.addParam("r","i32"),r.addLocal("bit","i32"),r.addLocal("i","i32");const c=r.getCodeBuilder(),l=c.getLocal("x"),s=c.getLocal("r"),g=c.i32_const(t.alloc(d));r.addCode(c.call(z+"_conjugate",l,g),c.call(z+"_one",s),c.if(c.teeLocal("bit",c.i32_load8_s(c.i32_const(o.length-1),n)),c.if(c.i32_eq(c.getLocal("bit"),c.i32_const(1)),c.call(z+"_mul",s,l,s),c.call(z+"_mul",s,g,s))),c.setLocal("i",c.i32_const(o.length-2)),c.block(c.loop(c.call(a+"__cyclotomicSquare",s,s),c.if(c.teeLocal("bit",c.i32_load8_s(c.getLocal("i"),n)),c.if(c.i32_eq(c.getLocal("bit"),c.i32_const(1)),c.call(z+"_mul",s,l,s),c.call(z+"_mul",s,g,s))),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 j(){!function(){const e=t.addFunction(a+"__cyclotomicSquare");e.addParam("x","i32"),e.addParam("r","i32");const i=e.getCodeBuilder(),o=i.getLocal("x"),n=i.i32_add(i.getLocal("x"),i.i32_const(s)),r=i.i32_add(i.getLocal("x"),i.i32_const(2*s)),c=i.i32_add(i.getLocal("x"),i.i32_const(3*s)),l=i.i32_add(i.getLocal("x"),i.i32_const(4*s)),d=i.i32_add(i.getLocal("x"),i.i32_const(5*s)),u=i.getLocal("r"),g=i.i32_add(i.getLocal("r"),i.i32_const(s)),f=i.i32_add(i.getLocal("r"),i.i32_const(2*s)),_=i.i32_add(i.getLocal("r"),i.i32_const(3*s)),p=i.i32_add(i.getLocal("r"),i.i32_const(4*s)),m=i.i32_add(i.getLocal("r"),i.i32_const(5*s)),L=i.i32_const(t.alloc(s)),w=i.i32_const(t.alloc(s)),A=i.i32_const(t.alloc(s)),b=i.i32_const(t.alloc(s)),y=i.i32_const(t.alloc(s)),I=i.i32_const(t.alloc(s)),C=i.i32_const(t.alloc(s)),F=i.i32_const(t.alloc(s));e.addCode(i.call(h+"_mul",o,l,C),i.call(h+"_mul",l,i.i32_const(S),L),i.call(h+"_add",o,L,L),i.call(h+"_add",o,l,F),i.call(h+"_mul",F,L,L),i.call(h+"_mul",i.i32_const(S),C,F),i.call(h+"_add",C,F,F),i.call(h+"_sub",L,F,L),i.call(h+"_add",C,C,w),i.call(h+"_mul",c,r,C),i.call(h+"_mul",r,i.i32_const(S),A),i.call(h+"_add",c,A,A),i.call(h+"_add",c,r,F),i.call(h+"_mul",F,A,A),i.call(h+"_mul",i.i32_const(S),C,F),i.call(h+"_add",C,F,F),i.call(h+"_sub",A,F,A),i.call(h+"_add",C,C,b),i.call(h+"_mul",n,d,C),i.call(h+"_mul",d,i.i32_const(S),y),i.call(h+"_add",n,y,y),i.call(h+"_add",n,d,F),i.call(h+"_mul",F,y,y),i.call(h+"_mul",i.i32_const(S),C,F),i.call(h+"_add",C,F,F),i.call(h+"_sub",y,F,y),i.call(h+"_add",C,C,I),i.call(h+"_sub",L,o,u),i.call(h+"_add",u,u,u),i.call(h+"_add",L,u,u),i.call(h+"_add",w,l,p),i.call(h+"_add",p,p,p),i.call(h+"_add",w,p,p),i.call(h+"_mul",I,i.i32_const(P),F),i.call(h+"_add",F,c,_),i.call(h+"_add",_,_,_),i.call(h+"_add",F,_,_),i.call(h+"_sub",y,r,f),i.call(h+"_add",f,f,f),i.call(h+"_add",y,f,f),i.call(h+"_sub",A,n,g),i.call(h+"_add",g,g,g),i.call(h+"_add",A,g,g),i.call(h+"_add",b,d,m),i.call(h+"_add",m,m,m),i.call(h+"_add",b,m,m))}(),V(D,"w0");const e=t.addFunction(a+"__finalExponentiationLastChunk");e.addParam("x","i32"),e.addParam("r","i32");const i=e.getCodeBuilder(),o=i.getLocal("x"),n=i.getLocal("r"),r=i.i32_const(t.alloc(d)),c=i.i32_const(t.alloc(d)),l=i.i32_const(t.alloc(d)),u=i.i32_const(t.alloc(d)),g=i.i32_const(t.alloc(d)),f=i.i32_const(t.alloc(d)),_=i.i32_const(t.alloc(d)),p=i.i32_const(t.alloc(d)),m=i.i32_const(t.alloc(d)),L=i.i32_const(t.alloc(d)),w=i.i32_const(t.alloc(d)),A=i.i32_const(t.alloc(d)),b=i.i32_const(t.alloc(d)),y=i.i32_const(t.alloc(d)),I=i.i32_const(t.alloc(d)),C=i.i32_const(t.alloc(d)),F=i.i32_const(t.alloc(d)),x=i.i32_const(t.alloc(d)),v=i.i32_const(t.alloc(d)),E=i.i32_const(t.alloc(d)),B=i.i32_const(t.alloc(d));e.addCode(i.call(a+"__cyclotomicExp_w0",o,r),i.call(z+"_conjugate",r,r),i.call(a+"__cyclotomicSquare",r,c),i.call(a+"__cyclotomicSquare",c,l),i.call(z+"_mul",l,c,u),i.call(a+"__cyclotomicExp_w0",u,g),i.call(z+"_conjugate",g,g),i.call(a+"__cyclotomicSquare",g,f),i.call(a+"__cyclotomicExp_w0",f,_),i.call(z+"_conjugate",_,_),i.call(z+"_conjugate",u,p),i.call(z+"_conjugate",_,m),i.call(z+"_mul",m,g,L),i.call(z+"_mul",L,p,w),i.call(z+"_mul",w,c,A),i.call(z+"_mul",w,g,b),i.call(z+"_mul",b,o,y),i.call(a+"__frobeniusMap1",A,I),i.call(z+"_mul",I,y,C),i.call(a+"__frobeniusMap2",w,F),i.call(z+"_mul",F,C,x),i.call(z+"_conjugate",o,v),i.call(z+"_mul",v,A,E),i.call(a+"__frobeniusMap3",E,B),i.call(z+"_mul",B,x,n))}const H=t.alloc(N),$=t.alloc(T);function Z(e){const i=t.addFunction(a+"_pairingEq"+e);for(let t=0;tt+(0!=e?1:0)),0),R=6*r,N=3*r*2+(k+M+1)*Q,T=u("15132376222941642752");function D(e){const a=[[[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")]],[[u("1"),u("0")],[u("3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760"),u("151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027")],[u("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351"),u("0")],[u("2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530"),u("1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257")],[u("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),u("0")],[u("3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557"),u("877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230")],[u("4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786"),u("0")],[u("151655185184498381465642749684540099398075398968325446656007613510403227271200139370504932015952886146304766135027"),u("3850754370037169011952147076051364057158807420970682438676050522613628423219637725072182697113062777891589506424760")],[u("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),u("0")],[u("1028732146235106349975324479215795277384839936929757896155643118032610843298655225875571310552543014690878354869257"),u("2973677408986561043442465346520108879172042883009249989176415018091420807192182638567116318576472649347015917690530")],[u("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437"),u("0")],[u("877076961050607968509681729531255177986764537961432449499635504522207616027455086505066378536590128544573588734230"),u("3125332594171059424908108096204648978570118281977575435832422631601824034463382777937621250592425535493320683825557")]]],o=[[[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")],[u("1"),u("0")]],[[u("1"),u("0")],[u("0"),u("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436")],[u("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),u("0")],[u("0"),u("1")],[u("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),u("0")],[u("0"),u("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350")]],[[u("1"),u("0")],[u("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939437"),u("0")],[u("4002409555221667392624310435006688643935503118305586438271171395842971157480381377015405980053539358417135540939436"),u("0")],[u("4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559786"),u("0")],[u("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620350"),u("0")],[u("793479390729215512621379701633421447060886740281060493010456487427281649075476305620758731620351"),u("0")]]],n=t.addFunction(U+"_frobeniusMap"+e);n.addParam("x","i32"),n.addParam("r","i32");const s=n.getCodeBuilder();for(let i=0;i<6;i++){const u=0==i?s.getLocal("x"):s.i32_add(s.getLocal("x"),s.i32_const(i*l)),g=u,f=s.i32_add(s.getLocal("x"),s.i32_const(i*l+c)),_=0==i?s.getLocal("r"):s.i32_add(s.getLocal("r"),s.i32_const(i*l)),h=_,m=s.i32_add(s.getLocal("r"),s.i32_const(i*l+c)),w=d(a[Math.floor(i/3)][e%12],o[i%3][e%6]),A=t.alloc([...Et(y(w[0]),r),...Et(y(w[1]),r)]);e%2==1?n.addCode(s.call(p+"_copy",g,h),s.call(p+"_neg",f,m),s.call(L+"_mul",_,s.i32_const(A),_)):n.addCode(s.call(L+"_mul",u,s.i32_const(A),_))}function d(t,e){const a=u(t[0]),o=u(t[1]),n=u(e[0]),r=u(e[1]),c=[a.times(n).minus(o.times(r)).mod(i),a.times(r).add(o.times(n)).mod(i)];return c[0].isNegative()&&(c[0]=c[0].add(i)),c}}function K(e,i,o){const n=function(t){let e=t;const a=[];for(;e.gt(u.zero);){if(e.isOdd()){const t=2-e.mod(4).toJSNumber();a.push(t),e=e.minus(t)}else a.push(0);e=e.shiftRight(1)}return a}(e).map((t=>-1==t?255:t)),r=t.alloc(n),c=t.addFunction(a+"__cyclotomicExp_"+o);c.addParam("x","i32"),c.addParam("r","i32"),c.addLocal("bit","i32"),c.addLocal("i","i32");const l=c.getCodeBuilder(),d=l.getLocal("x"),g=l.getLocal("r"),f=l.i32_const(t.alloc(s));c.addCode(l.call(U+"_conjugate",d,f),l.call(U+"_one",g),l.if(l.teeLocal("bit",l.i32_load8_s(l.i32_const(n.length-1),r)),l.if(l.i32_eq(l.getLocal("bit"),l.i32_const(1)),l.call(U+"_mul",g,d,g),l.call(U+"_mul",g,f,g))),l.setLocal("i",l.i32_const(n.length-2)),l.block(l.loop(l.call(a+"__cyclotomicSquare",g,g),l.if(l.teeLocal("bit",l.i32_load8_s(l.getLocal("i"),r)),l.if(l.i32_eq(l.getLocal("bit"),l.i32_const(1)),l.call(U+"_mul",g,d,g),l.call(U+"_mul",g,f,g))),l.br_if(1,l.i32_eqz(l.getLocal("i"))),l.setLocal("i",l.i32_sub(l.getLocal("i"),l.i32_const(1))),l.br(0)))),i&&c.addCode(l.call(U+"_conjugate",g,g))}t.modules[a]={n64q:n,n64r:d,n8q:r,n8r:g,pG1gen:C,pG1zero:x,pG1b:h,pG2gen:E,pG2zero:S,pG2b:w,pq:t.modules.f1m.pq,pr:_,pOneT:G,r:o,q:i,prePSize:R,preQSize:N},function(){const e=t.addFunction(O+"_mul1");e.addParam("pA","i32"),e.addParam("pC1","i32"),e.addParam("pR","i32");const a=e.getCodeBuilder(),i=a.getLocal("pA"),o=a.i32_add(a.getLocal("pA"),a.i32_const(2*c)),n=a.i32_add(a.getLocal("pA"),a.i32_const(4*c)),r=a.getLocal("pC1"),l=a.getLocal("pR"),s=a.i32_add(a.getLocal("pR"),a.i32_const(2*c)),d=a.i32_add(a.getLocal("pR"),a.i32_const(4*c)),u=a.i32_const(t.alloc(2*c)),g=a.i32_const(t.alloc(2*c));e.addCode(a.call(L+"_add",i,o,u),a.call(L+"_add",o,n,g),a.call(L+"_mul",o,r,d),a.call(L+"_mul",g,r,l),a.call(L+"_sub",l,d,l),a.call(L+"_mulNR",l,l),a.call(L+"_mul",u,r,s),a.call(L+"_sub",s,d,s))}(),function(){const e=t.addFunction(O+"_mul01");e.addParam("pA","i32"),e.addParam("pC0","i32"),e.addParam("pC1","i32"),e.addParam("pR","i32");const a=e.getCodeBuilder(),i=a.getLocal("pA"),o=a.i32_add(a.getLocal("pA"),a.i32_const(2*c)),n=a.i32_add(a.getLocal("pA"),a.i32_const(4*c)),r=a.getLocal("pC0"),l=a.getLocal("pC1"),s=a.getLocal("pR"),d=a.i32_add(a.getLocal("pR"),a.i32_const(2*c)),u=a.i32_add(a.getLocal("pR"),a.i32_const(4*c)),g=a.i32_const(t.alloc(2*c)),f=a.i32_const(t.alloc(2*c)),_=a.i32_const(t.alloc(2*c)),p=a.i32_const(t.alloc(2*c));e.addCode(a.call(L+"_mul",i,r,g),a.call(L+"_mul",o,l,f),a.call(L+"_add",i,o,_),a.call(L+"_add",i,n,p),a.call(L+"_add",o,n,s),a.call(L+"_mul",s,l,s),a.call(L+"_sub",s,f,s),a.call(L+"_mulNR",s,s),a.call(L+"_add",s,g,s),a.call(L+"_add",r,l,d),a.call(L+"_mul",d,_,d),a.call(L+"_sub",d,g,d),a.call(L+"_sub",d,f,d),a.call(L+"_mul",p,r,u),a.call(L+"_sub",u,g,u),a.call(L+"_add",u,f,u))}(),function(){const e=t.addFunction(U+"_mul014");e.addParam("pA","i32"),e.addParam("pC0","i32"),e.addParam("pC1","i32"),e.addParam("pC4","i32"),e.addParam("pR","i32");const a=e.getCodeBuilder(),i=a.getLocal("pA"),o=a.i32_add(a.getLocal("pA"),a.i32_const(6*c)),n=a.getLocal("pC0"),r=a.getLocal("pC1"),l=a.getLocal("pC4"),s=a.i32_const(t.alloc(6*c)),d=a.i32_const(t.alloc(6*c)),u=a.i32_const(t.alloc(2*c)),g=a.getLocal("pR"),f=a.i32_add(a.getLocal("pR"),a.i32_const(6*c));e.addCode(a.call(O+"_mul01",i,n,r,s),a.call(O+"_mul1",o,l,d),a.call(L+"_add",r,l,u),a.call(O+"_add",o,i,f),a.call(O+"_mul01",f,n,u,f),a.call(O+"_sub",f,s,f),a.call(O+"_sub",f,d,f),a.call(O+"_copy",d,g),a.call(O+"_mulNR",g,g),a.call(O+"_add",g,s,g))}(),function(){const e=t.addFunction(a+"_ell");e.addParam("pP","i32"),e.addParam("pCoefs","i32"),e.addParam("pF","i32");const i=e.getCodeBuilder(),o=i.getLocal("pP"),n=i.i32_add(i.getLocal("pP"),i.i32_const(r)),l=i.getLocal("pF"),s=i.getLocal("pCoefs"),d=i.i32_add(i.getLocal("pCoefs"),i.i32_const(c)),u=i.i32_add(i.getLocal("pCoefs"),i.i32_const(2*c)),g=i.i32_add(i.getLocal("pCoefs"),i.i32_const(3*c)),f=i.i32_add(i.getLocal("pCoefs"),i.i32_const(4*c)),_=t.alloc(2*c),h=i.i32_const(_),m=i.i32_const(_),L=i.i32_const(_+c),w=t.alloc(2*c),A=i.i32_const(w),b=i.i32_const(w),y=i.i32_const(w+c);e.addCode(i.call(p+"_mul",s,n,m),i.call(p+"_mul",d,n,L),i.call(p+"_mul",u,o,b),i.call(p+"_mul",g,o,y),i.call(U+"_mul014",l,f,A,h,l))}();const V=t.alloc(R),j=t.alloc(N);function H(e){const i=t.addFunction(a+"_pairingEq"+e);for(let t=0;t{a[i]=t(e[i])})),a}return e},unstringifyBigInts:function t(e){if("string"==typeof e&&/^[0-9]+$/.test(e))return BigInt(e);if("string"==typeof e&&/^0x[0-9a-fA-F]+$/.test(e))return BigInt(e);if(Array.isArray(e))return e.map(t);if("object"==typeof e){if(null===e)return null;const a={};return Object.keys(e).forEach((i=>{a[i]=t(e[i])})),a}return e},beBuff2int:function(t){let e=BigInt(0),a=t.length,i=0;const o=new DataView(t.buffer,t.byteOffset,t.byteLength);for(;a>0;)a>=4?(a-=4,e+=BigInt(o.getUint32(a))<=2?(a-=2,e+=BigInt(o.getUint16(a))<0;)n-4>=0?(n-=4,o.setUint32(n,Number(a&BigInt(4294967295))),a>>=BigInt(32)):n-2>=0?(n-=2,o.setUint16(n,Number(a&BigInt(65535))),a>>=BigInt(16)):(n-=1,o.setUint8(n,Number(a&BigInt(255))),a>>=BigInt(8));if(a)throw new Error("Number does not fit in this length");return i},leBuff2int:function(t){let e=BigInt(0),a=0;const i=new DataView(t.buffer,t.byteOffset,t.byteLength);for(;a>=BigInt(32)):n+2<=e?(o.setUint16(Number(n,a&BigInt(65535)),!0),n+=2,a>>=BigInt(16)):(o.setUint8(Number(n,a&BigInt(255)),!0),n+=1,a>>=BigInt(8));if(a)throw new Error("Number does not fit in this length");return i},stringifyFElements:function t(e,a){if("bigint"==typeof a||void 0!==a.eq)return a.toString(10);if(a instanceof Uint8Array)return e.toString(e.e(a));if(Array.isArray(a))return a.map(t.bind(this,e));if("object"==typeof a){const i={};return Object.keys(a).forEach((o=>{i[o]=t(e,a[o])})),i}return a},unstringifyFElements:function t(e,a){if("string"==typeof a&&/^[0-9]+$/.test(a))return e.e(a);if("string"==typeof a&&/^0x[0-9a-fA-F]+$/.test(a))return e.e(a);if(Array.isArray(a))return a.map(t.bind(this,e));if("object"==typeof a){if(null===a)return null;const i={};return Object.keys(a).forEach((o=>{i[o]=t(e,a[o])})),i}return a}});var $t=Object.freeze({__proto__:null,stringifyBigInts:function t(e){if("bigint"==typeof e||void 0!==e.eq)return e.toString(10);if(Array.isArray(e))return e.map(t);if("object"==typeof e){const a={};return Object.keys(e).forEach((i=>{a[i]=t(e[i])})),a}return e},unstringifyBigInts:function t(e){if("string"==typeof e&&/^[0-9]+$/.test(e))return u(e);if("string"==typeof e&&/^0x[0-9a-fA-F]+$/.test(e))return u(e);if(Array.isArray(e))return e.map(t);if("object"==typeof e){const a={};return Object.keys(e).forEach((i=>{a[i]=t(e[i])})),a}return e},beBuff2int:function(t){let e=u.zero;for(let a=0;a=0;){let t=Number(a.and(u("255")));o[i]=t,i--,a=a.shiftRight(8)}if(!a.eq(u.zero))throw new Error("Number does not fit in this length");return o},leBuff2int:function(t){let e=u.zero;for(let a=0;a>=1;return a}Zt.bitReverse=function(t,e){return(Yt[t>>>24]|Yt[t>>>16&255]<<8|Yt[t>>>8&255]<<16|Yt[255&t]<<24)>>>32-e},Zt.log2=function(t){return(0!=(4294901760&t)?(t&=4294901760,16):0)|(0!=(4278255360&t)?(t&=4278255360,8):0)|(0!=(4042322160&t)?(t&=4042322160,4):0)|(0!=(3435973836&t)?(t&=3435973836,2):0)|0!=(2863311530&t)},Zt.buffReverseBits=function(t,e){const a=t.byteLength/e,i=Zt.log2(a);if(a!=1<a){const i=t.slice(o*e,(o+1)*e);t.set(t.slice(a*e,(a+1)*e),o*e),t.set(i,a*e)}}},Zt.array2buffer=function(t,e){const a=new Uint8Array(e*t.length);for(let i=0;i0;){const t=r+c>ge?ge-r:c,e=new Uint8Array(this.buffers[n].buffer,this.buffers[n].byteOffset+r,t);if(t==a)return e.slice();o||(o=a<=ge?new Uint8Array(a):new fe(a)),o.set(e,a-c),c-=t,n++,r=0}return o}set(t,e){void 0===e&&(e=0);const a=t.byteLength;if(0==a)return;const i=Math.floor(e/ge);if(i==Math.floor((e+a-1)/ge))return t instanceof fe&&1==t.buffers.length?this.buffers[i].set(t.buffers[0],e%ge):this.buffers[i].set(t,e%ge);let o=i,n=e%ge,r=a;for(;r>0;){const e=n+r>ge?ge-n:r,i=t.slice(a-r,a-r+e);new Uint8Array(this.buffers[o].buffer,this.buffers[o].byteOffset+n,e).set(i),r-=e,o++,n=0}}}function _e(t,e,a,i){return async function(o){const n=Math.floor(o.byteLength/a);if(n*a!==o.byteLength)throw new Error("Invalid buffer size");const r=Math.floor(n/t.concurrency),c=[];for(let l=0;l=0;t--)this.w[t]=this.square(this.w[t+1]);if(!this.eq(this.w[0],this.one))throw new Error("Error calculating roots of unity");this.batchToMontgomery=_e(t,e+"_batchToMontgomery",this.n8,this.n8),this.batchFromMontgomery=_e(t,e+"_batchFromMontgomery",this.n8,this.n8)}op2(t,e,a){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,a),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op2Bool(t,e,a){return this.tm.setBuff(this.pOp1,e),this.tm.setBuff(this.pOp2,a),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp2)}op1(t,e){return this.tm.setBuff(this.pOp1,e),this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}op1Bool(t,e){return this.tm.setBuff(this.pOp1,e),!!this.tm.instance.exports[this.prefix+t](this.pOp1,this.pOp3)}add(t,e){return this.op2("_add",t,e)}eq(t,e){return this.op2Bool("_eq",t,e)}isZero(t){return this.op1Bool("_isZero",t)}sub(t,e){return this.op2("_sub",t,e)}neg(t){return this.op1("_neg",t)}inv(t){return this.op1("_inverse",t)}toMontgomery(t){return this.op1("_toMontgomery",t)}fromMontgomery(t){return this.op1("_fromMontgomery",t)}mul(t,e){return this.op2("_mul",t,e)}div(t,e){return this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),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(t){return this.op1("_square",t)}isSquare(t){return this.op1Bool("_isSquare",t)}sqrt(t){return this.op1("_sqrt",t)}exp(t,e){return e instanceof Uint8Array||(e=x(S(e))),this.tm.setBuff(this.pOp1,t),this.tm.setBuff(this.pOp2,e),this.tm.instance.exports[this.prefix+"_exp"](this.pOp1,this.pOp2,e.byteLength,this.pOp3),this.tm.getBuff(this.pOp3,this.n8)}isNegative(t){return this.op1Bool("_isNegative",t)}e(t,e){if(t instanceof Uint8Array)return t;let a=S(t,e);O(a)?(a=j(a),it(a,this.p)&&(a=X(a,this.p)),a=V(this.p,a)):it(a,this.p)&&(a=X(a,this.p));const i=re(a,this.n8);return this.toMontgomery(i)}toString(t,e){const a=this.fromMontgomery(t),i=I(a,0);return F(i,e)}fromRng(t){let e;const a=new Uint8Array(this.n8);do{e=v;for(let a=0;ai.buffer.byteLength){const o=i.buffer.byteLength/65536;let n=Math.floor((a[0]+t)/65536)+1;n>e&&(n=e),i.grow(n-o)}return o}function r(t){const e=n(t.byteLength);return l(e,t),e}function c(t,e){const a=new Uint8Array(i.buffer);return new Uint8Array(a.buffer,a.byteOffset+t,e)}function l(t,e){new Uint8Array(i.buffer).set(new Uint8Array(e),t)}function s(t){if("INIT"==t[0].cmd)return o(t[0]);const e={vars:[],out:[]},s=new Uint32Array(i.buffer,0,1)[0];for(let i=0;i{this.reject=e,this.resolve=t}))}}var Ie;const Ce="data:application/javascript;base64,"+(Ie="("+we.toString()+")(self)",globalThis.btoa(Ie));class Fe{constructor(){this.actionQueue=[],this.oldPFree=0}startSyncOp(){if(0!=this.oldPFree)throw new Error("Sync operation in progress");this.oldPFree=this.u32[0]}endSyncOp(){if(0==this.oldPFree)throw new Error("No sync operation in progress");this.u32[0]=this.oldPFree,this.oldPFree=0}postAction(t,e,a,i){if(this.working[t])throw new Error("Posting a job t a working worker");return this.working[t]=!0,this.pendingDeferreds[t]=i||new ye,this.workers[t].postMessage(e,a),this.pendingDeferreds[t].promise}processWorks(){for(let t=0;t0;t++)if(0==this.working[t]){const e=this.actionQueue.shift();this.postAction(t,e.data,e.transfers,e.deferred)}}queueAction(t,e){const a=new ye;if(this.singleThread){const e=this.taskManager(t);a.resolve(e)}else this.actionQueue.push({data:t,transfers:e,deferred:a}),this.processWorks();return a.promise}resetMemory(){this.u32[0]=this.initalPFree}allocBuff(t){const e=this.alloc(t.byteLength);return this.setBuff(e,t),e}getBuff(t,e){return this.u8.slice(t,t+e)}setBuff(t,e){this.u8.set(new Uint8Array(e),t)}alloc(t){for(;3&this.u32[0];)this.u32[0]++;const e=this.u32[0];return this.u32[0]+=t,e}async terminate(){for(let t=0;tsetTimeout(e,t))))}}function xe(t,e){const a=t[e],i=t.Fr,o=t.tm;t[e].batchApplyKey=async function(t,n,r,c,l){let s,d,u,g,f;if(c=c||"affine",l=l||"affine","G1"==e)"jacobian"==c?(u=3*a.F.n8,s="g1m_batchApplyKey"):(u=2*a.F.n8,s="g1m_batchApplyKeyMixed"),g=3*a.F.n8,"jacobian"==l?f=3*a.F.n8:(d="g1m_batchToAffine",f=2*a.F.n8);else if("G2"==e)"jacobian"==c?(u=3*a.F.n8,s="g2m_batchApplyKey"):(u=2*a.F.n8,s="g2m_batchApplyKeyMixed"),g=3*a.F.n8,"jacobian"==l?f=3*a.F.n8:(d="g2m_batchToAffine",f=2*a.F.n8);else{if("Fr"!=e)throw new Error("Invalid group: "+e);s="frm_batchApplyKey",u=a.n8,g=a.n8,f=a.n8}const _=Math.floor(t.byteLength/u),p=Math.floor(_/o.concurrency),h=[];r=i.e(r);let m=i.e(n);for(let e=0;e=0;t--){if(!a.isZero(p))for(let t=0;ts&&(p=s),p<1024&&(p=1024);const h=[];for(let e=0;e(c&&c.debug(`Multiexp end: ${l}: ${e}/${u}`),t))))}const m=await Promise.all(h);let L=a.zero;for(let t=m.length-1;t>=0;t--)L=a.add(L,m[t]);return L}a.multiExp=async function(t,e,a,i){return await n(t,e,"jacobian",a,i)},a.multiExpAffine=async function(t,e,a,i){return await n(t,e,"affine",a,i)}}function Be(t,e){const a=t[e],i=t.Fr,o=a.tm;async function n(t,c,l,s,d,u){l=l||"affine",s=s||"affine";let g,f,_,p,h,m,L,w;"G1"==e?("affine"==l?(g=2*a.F.n8,p="g1m_batchToJacobian"):g=3*a.F.n8,f=3*a.F.n8,c&&(w="g1m_fftFinal"),L="g1m_fftJoin",m="g1m_fftMix","affine"==s?(_=2*a.F.n8,h="g1m_batchToAffine"):_=3*a.F.n8):"G2"==e?("affine"==l?(g=2*a.F.n8,p="g2m_batchToJacobian"):g=3*a.F.n8,f=3*a.F.n8,c&&(w="g2m_fftFinal"),L="g2m_fftJoin",m="g2m_fftMix","affine"==s?(_=2*a.F.n8,h="g2m_batchToAffine"):_=3*a.F.n8):"Fr"==e&&(g=a.n8,f=a.n8,_=a.n8,c&&(w="frm_fftFinal"),m="frm_fftMix",L="frm_fftJoin");let A=!1;Array.isArray(t)?(t=ce(t,g),A=!0):t=t.slice(0,t.byteLength);const b=t.byteLength/g,y=Xt(b);if(1<1<<28?new fe(2*u[0].byteLength):new Uint8Array(2*u[0].byteLength);return g.set(u[0]),g.set(u[1],u[0].byteLength),g}(t,l,s,d,u):await async function(t,e,a,o,c){let l,s;l=t.slice(0,t.byteLength/2),s=t.slice(t.byteLength/2,t.byteLength);const d=[];[l,s]=await r(l,s,"fftJoinExt",i.one,i.shift,e,"jacobian",o,c),d.push(n(l,!1,"jacobian",a,o,c)),d.push(n(s,!1,"jacobian",a,o,c));const u=await Promise.all(d);let g;g=u[0].byteLength>1<<28?new fe(2*u[0].byteLength):new Uint8Array(2*u[0].byteLength);return g.set(u[0]),g.set(u[1],u[0].byteLength),g}(t,l,s,d,u),A?le(e,_):e}let I,C,F;c&&(I=i.inv(i.e(b))),te(t,g);let x=Math.min(16384,b),v=b/x;for(;v=16;)v*=2,x/=2;const E=Xt(x),B=[];for(let e=0;e(d&&d.debug(`${u}: fft ${y} mix end: ${e}/${v}`),t))))}F=await Promise.all(B);for(let t=0;t(d&&d.debug(`${u}: fft ${y} join ${t}/${y} ${r+1}/${e} ${c}/${a/2}`),i))))}const r=await Promise.all(n);for(let t=0;t0;e--)C.set(F[e],t),t+=x*_,delete F[e];C.set(F[0].slice(0,(x-1)*_),t),delete F[0]}else for(let t=0;t65536&&(A=65536);const b=[];for(let e=0;e(u&&u.debug(`${g}: fftJoinExt End: ${e}/${w}`),t))))}const y=await Promise.all(b);let I,C;w*h>1<<28?(I=new fe(w*h),C=new fe(w*h)):(I=new Uint8Array(w*h),C=new Uint8Array(w*h));let F=0;for(let t=0;ti.s+1)throw l&&l.error("lagrangeEvaluations input too big"),new Error("lagrangeEvaluations input too big");let f=t.slice(0,t.byteLength/2),_=t.slice(t.byteLength/2,t.byteLength);const p=i.exp(i.shift,u/2),h=i.inv(i.sub(i.one,p));[f,_]=await r(f,_,"prepareLagrangeEvaluation",h,i.shiftInv,o,"jacobian",l,s+" prep");const m=[];let L;return m.push(n(f,!0,"jacobian",c,l,s+" t0")),m.push(n(_,!0,"jacobian",c,l,s+" t1")),[f,_]=await Promise.all(m),L=f.byteLength>1<<28?new fe(2*f.byteLength):new Uint8Array(2*f.byteLength),L.set(f),L.set(_,f.byteLength),L},a.fftMix=async function(t){const n=3*a.F.n8;let r,c;if("G1"==e)r="g1m_fftMix",c="g1m_fftJoin";else if("G2"==e)r="g2m_fftMix",c="g2m_fftJoin";else{if("Fr"!=e)throw new Error("Invalid group");r="frm_fftMix",c="frm_fftJoin"}const l=Math.floor(t.byteLength/n),s=Xt(l);let d=1<=0;t--)f.set(g[t][0],_),_+=g[t][0].byteLength;return f}}async function Se(t){const e=await async function(t,e){const a=new Fe;a.memory=new WebAssembly.Memory({initial:25}),a.u8=new Uint8Array(a.memory.buffer),a.u32=new Uint32Array(a.memory.buffer);const i=await WebAssembly.compile(t.code);if(a.instance=await WebAssembly.instantiate(i,{env:{memory:a.memory}}),a.singleThread=e,a.initalPFree=a.u32[0],a.pq=t.pq,a.pr=t.pr,a.pG1gen=t.pG1gen,a.pG1zero=t.pG1zero,a.pG2gen=t.pG2gen,a.pG2zero=t.pG2zero,a.pOneT=t.pOneT,e)a.code=t.code,a.taskManager=we(),await a.taskManager([{cmd:"INIT",init:25,code:a.code.slice()}]),a.concurrency=1;else{let e;a.workers=[],a.pendingDeferreds=[],a.working=[],e="object"==typeof navigator&&navigator.hardwareConcurrency?navigator.hardwareConcurrency:Ae.cpus().length,0==e&&(e=2),e>64&&(e=64),a.concurrency=e;for(let t=0;t>6,128|63&i):i<55296||i>=57344?e.push(224|i>>12,128|i>>6&63,128|63&i):(a++,i=65536+((1023&i)<<10|1023&t.charCodeAt(a)),e.push(240|i>>18,128|i>>12&63,128|i>>6&63,128|63&i))}return e}(t);return[...Ue(e.length),...e]},qe=function t(e){if("string"==typeof e){let t=e.split("\n");for(let e=0;eke[t.type]))],...this.returnType?[1,ke[this.returnType]]:[0]]}getBody(){const t=this.locals.map((t=>[...Qe.varuint32(t.length),ke[t.type]])),e=[...Qe.varuint32(this.locals.length),...[].concat(...t),...this.code,11];return[...Qe.varuint32(e.length),...e]}addCode(...t){this.code.push(...[].concat(...t))}getCodeBuilder(){return new Me(this)}};var Ne=class{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(){return this._setSignatures(),new Uint8Array([...Qe.u32(1836278016),...Qe.u32(1),...this._buildType(),...this._buildImport(),...this._buildFunctionDeclarations(),...this._buildFunctionsTable(),...this._buildExports(),...this._buildElements(),...this._buildCode(),...this._buildData()])}addFunction(t){if(void 0!==this.functionIdxByName[t])throw new Error(`Function already defined: ${t}`);const e=this.functions.length;return this.functionIdxByName[t]=e,this.functions.push(new Re(this,t,"internal")),this.nInternalFunctions++,this.functions[e]}addIimportFunction(t,e,a){if(void 0!==this.functionIdxByName[t])throw new Error(`Function already defined: ${t}`);if(this.functions.length>0&&"internal"==this.functions[this.functions.length-1].type)throw new Error(`Import functions must be declared before internal: ${t}`);let i=a||t;const o=this.functions.length;return this.functionIdxByName[t]=o,this.functions.push(new Re(this,t,"import",e,i)),this.nImportFunctions++,this.functions[o]}setMemory(t,e,a){this.memory={pagesSize:t,moduleName:e||"env",fieldName:a||"memory"}}exportFunction(t,e){const a=e||t;if(void 0===this.functionIdxByName[t])throw new Error(`Function not defined: ${t}`);const i=this.functionIdxByName[t];a!=t&&(this.functionIdxByName[a]=i),this.exports.push({exportName:a,idx:i})}addFunctionToTable(t){const e=this.functionIdxByName[t];this.functionsTable.push(e)}addData(t,e){this.datas.push({offset:t,bytes:e})}alloc(t,e){let a,i;(Array.isArray(t)||ArrayBuffer.isView(t))&&void 0===e?(a=t.length,i=t):(a=t,i=e),a=1+(a-1>>3)<<3;const o=this.free;return this.free+=a,i&&this.addData(o,i),o}allocString(t){const e=(new globalThis.TextEncoder).encode(t);return this.alloc([...e,0])}_setSignatures(){this.signatures=[];const t={};if(this.functionsTable.length>0){const e=this.functions[this.functionsTable[0]].getSignature();t["s_"+Qe.toHexString(e)]=0,this.signatures.push(e)}for(let e=0;e{e.pendingLoads.push({page:t,resolve:a,reject:i})}));return e.__statusPage("After Load request: ",t),a}__statusPage(t,e){const a=[],i=this;if(!i.logHistory)return;a.push("=="+t+" "+e);let o="";for(let t=0;t "+e.history[t][a][i])}_triggerLoad(){const t=this;if(t.reading)return;if(0==t.pendingLoads.length)return;const e=Object.keys(t.pages),a=[];for(let i=0;i0&&(void 0!==t.pages[t.pendingLoads[0].page]||i>0||a.length>0);){const e=t.pendingLoads.shift();if(void 0!==t.pages[e.page]){t.pages[e.page].pendingOps++;const i=a.indexOf(e.page);i>=0&&a.splice(i,1),t.pages[e.page].loading?t.pages[e.page].loading.push(e):e.resolve(),t.__statusPage("After Load (cached): ",e.page)}else{if(i)i--;else{const e=a.shift();t.__statusPage("Before Unload: ",e),t.avBuffs.unshift(t.pages[e]),delete t.pages[e],t.__statusPage("After Unload: ",e)}e.page>=t.totalPages?(t.pages[e.page]=n(),e.resolve(),t.__statusPage("After Load (new): ",e.page)):(t.reading=!0,t.pages[e.page]=n(),t.pages[e.page].loading=[e],o.push(t.fd.read(t.pages[e.page].buff,0,t.pageSize,e.page*t.pageSize).then((a=>{t.pages[e.page].size=a.bytesRead;const i=t.pages[e.page].loading;delete t.pages[e.page].loading;for(let t=0;t{e.reject(t)}))),t.__statusPage("After Load (loading): ",e.page))}}function n(){if(t.avBuffs.length>0){const e=t.avBuffs.shift();return e.dirty=!1,e.pendingOps=1,e.size=0,e}return{dirty:!1,buff:new Uint8Array(t.pageSize),pendingOps:1,size:0}}Promise.all(o).then((()=>{t.reading=!1,t.pendingLoads.length>0&&setImmediate(t._triggerLoad.bind(t)),t._tryClose()}))}_triggerWrite(){const t=this;if(t.writing)return;const e=Object.keys(t.pages),a=[];for(let i=0;i{o.writing=!1}),(e=>{console.log("ERROR Writing: "+e),t.error=e,t._tryClose()}))))}t.writing&&Promise.all(a).then((()=>{t.writing=!1,setImmediate(t._triggerWrite.bind(t)),t._tryClose(),t.pendingLoads.length>0&&setImmediate(t._triggerLoad.bind(t))}))}_getDirtyPage(){for(let t in this.pages)if(this.pages[t].dirty)return t;return-1}async write(t,e){if(0==t.byteLength)return;const a=this;if(void 0===e&&(e=a.pos),a.pos=e+t.byteLength,a.totalSize0;){await n[r-i];const e=c+l>a.pageSize?a.pageSize-c:l,o=t.slice(t.byteLength-l,t.byteLength-l+e);new Uint8Array(a.pages[r].buff.buffer,c,e).set(o),a.pages[r].dirty=!0,a.pages[r].pendingOps--,a.pages[r].size=Math.max(c+e,a.pages[r].size),r>=a.totalPages&&(a.totalPages=r+1),l-=e,r++,c=0,a.writing||setImmediate(a._triggerWrite.bind(a))}}async read(t,e){let a=new Uint8Array(t);return await this.readToBuffer(a,0,t,e),a}async readToBuffer(t,e,a,i){if(0==a)return;const o=this;if(a>o.pageSize*o.maxPagesLoaded*.8){const t=Math.floor(1.1*a);this.maxPagesLoaded=Math.floor(t/o.pageSize)+1}if(void 0===i&&(i=o.pos),o.pos=i+a,o.pendingClose)throw new Error("Reading a closing file");const n=Math.floor(i/o.pageSize),r=Math.floor((i+a-1)/o.pageSize),c=[];for(let t=n;t<=r;t++)c.push(o._loadPage(t));o._triggerLoad();let l=n,s=i%o.pageSize,d=i+a>o.totalSize?a-(i+a-o.totalSize):a;for(;d>0;){await c[l-n],o.__statusPage("After Await (read): ",l);const i=s+d>o.pageSize?o.pageSize-s:d,r=new Uint8Array(o.pages[l].buff.buffer,o.pages[l].buff.byteOffset+s,i);t.set(r,e+a-d),o.pages[l].pendingOps--,o.__statusPage("After Op done: ",l),d-=i,l++,s=0,o.pendingLoads.length>0&&setImmediate(o._triggerLoad.bind(o))}this.pos=i+a}_tryClose(){const t=this;if(!t.pendingClose)return;t.error&&t.pendingCloseReject(t.error);t._getDirtyPage()>=0||t.writing||t.reading||t.pendingLoads.length>0||t.pendingClose()}close(){const t=this;if(t.pendingClose)throw new Error("Closing the file twice");return new Promise(((e,a)=>{t.pendingClose=e,t.pendingCloseReject=a,t._tryClose()})).then((()=>{t.fd.close()}),(e=>{throw t.fd.close(),e}))}async discard(){await this.close(),await Ze.promises.unlink(this.fileName)}async writeULE32(t,e){const a=new Uint8Array(4);new DataView(a.buffer).setUint32(0,t,!0),await this.write(a,e)}async writeUBE32(t,e){const a=new Uint8Array(4);new DataView(a.buffer).setUint32(0,t,!1),await this.write(a,e)}async writeULE64(t,e){const a=new Uint8Array(8),i=new DataView(a.buffer);i.setUint32(0,4294967295&t,!0),i.setUint32(4,Math.floor(t/4294967296),!0),await this.write(a,e)}async readULE32(t){const e=await this.read(4,t);return new Uint32Array(e.buffer)[0]}async readUBE32(t){const e=await this.read(4,t);return new DataView(e.buffer).getUint32(0,!1)}async readULE64(t){const e=await this.read(8,t),a=new Uint32Array(e.buffer);return 4294967296*a[1]+a[0]}}const We=new Uint8Array(4),Xe=new DataView(We.buffer),ta=new Uint8Array(8),ea=new DataView(ta.buffer);class aa{constructor(){this.pageSize=16384}_resizeIfNeeded(t){if(t>this.allocSize){const e=Math.max(this.allocSize+(1<<20),Math.floor(1.1*this.allocSize),t),a=new Uint8Array(e);a.set(this.o.data),this.o.data=a,this.allocSize=e}}async write(t,e){if(void 0===e&&(e=this.pos),this.readOnly)throw new Error("Writing a read only file");this._resizeIfNeeded(e+t.byteLength),this.o.data.set(t.slice(),e),e+t.byteLength>this.totalSize&&(this.totalSize=e+t.byteLength),this.pos=e+t.byteLength}async readToBuffer(t,e,a,i){if(void 0===i&&(i=this.pos),this.readOnly&&i+a>this.totalSize)throw new Error("Reading out of bounds");this._resizeIfNeeded(i+a);const o=new Uint8Array(this.o.data.buffer,this.o.data.byteOffset+i,a);t.set(o,e),this.pos=i+a}async read(t,e){const a=new Uint8Array(t);return await this.readToBuffer(a,0,t,e),a}close(){this.o.data.byteLength!=this.totalSize&&(this.o.data=this.o.data.slice(0,this.totalSize))}async discard(){}async writeULE32(t,e){Xe.setUint32(0,t,!0),await this.write(We,e)}async writeUBE32(t,e){Xe.setUint32(0,t,!1),await this.write(We,e)}async writeULE64(t,e){ea.setUint32(0,4294967295&t,!0),ea.setUint32(4,Math.floor(t/4294967296),!0),await this.write(ta,e)}async readULE32(t){const e=await this.read(4,t);return new Uint32Array(e.buffer)[0]}async readUBE32(t){const e=await this.read(4,t);return new DataView(e.buffer).getUint32(0,!1)}async readULE64(t){const e=await this.read(8,t),a=new Uint32Array(e.buffer);return 4294967296*a[1]+a[0]}}const ia=1<<22;const oa=new Uint8Array(4),na=new DataView(oa.buffer),ra=new Uint8Array(8),ca=new DataView(ra.buffer);class la{constructor(){this.pageSize=16384}_resizeIfNeeded(t){if(t<=this.totalSize)return;if(this.readOnly)throw new Error("Reading out of file bounds");const e=Math.floor((t-1)/ia)+1;for(let a=Math.max(this.o.data.length-1,0);a0;){const e=o+n>ia?ia-o:n,r=t.slice(t.byteLength-n,t.byteLength-n+e);new Uint8Array(a.o.data[i].buffer,o,e).set(r),n-=e,i++,o=0}this.pos=e+t.byteLength}async readToBuffer(t,e,a,i){const o=this;if(void 0===i&&(i=o.pos),this.readOnly&&i+a>this.totalSize)throw new Error("Reading out of bounds");this._resizeIfNeeded(i+a);let n=Math.floor(i/ia),r=i%ia,c=a;for(;c>0;){const i=r+c>ia?ia-r:c,l=new Uint8Array(o.o.data[n].buffer,r,i);t.set(l,e+a-c),c-=i,n++,r=0}this.pos=i+a}async read(t,e){const a=new Uint8Array(t);return await this.readToBuffer(a,0,t,e),a}close(){}async discard(){}async writeULE32(t,e){na.setUint32(0,t,!0),await this.write(oa,e)}async writeUBE32(t,e){na.setUint32(0,t,!1),await this.write(oa,e)}async writeULE64(t,e){ca.setUint32(0,4294967295&t,!0),ca.setUint32(4,Math.floor(t/4294967296),!0),await this.write(ra,e)}async readULE32(t){const e=await this.read(4,t);return new Uint32Array(e.buffer)[0]}async readUBE32(t){const e=await this.read(4,t);return new DataView(e.buffer).getUint32(0,!1)}async readULE64(t){const e=await this.read(8,t),a=new Uint32Array(e.buffer);return 4294967296*a[1]+a[0]}}async function sa(t,e,a){if("string"==typeof t&&(t={type:"file",fileName:t,cacheSize:e||65536,pageSize:a||8192}),"file"==t.type)return await Ye(t.fileName,"w+",t.cacheSize,t.pageSize);if("mem"==t.type)return function(t){const e=t.initialSize||1<<20,a=new aa;return a.o=t,a.o.data=new Uint8Array(e),a.allocSize=e,a.totalSize=0,a.readOnly=!1,a.pos=0,a}(t);if("bigMem"==t.type)return function(t){const e=t.initialSize||0,a=new la;a.o=t;const i=e?Math.floor((e-1)/ia)+1:0;a.o.data=[];for(let t=0;ta)throw new Error("Version not supported");const l=await n.readULE32();let s=[];for(let t=0;t1)throw new Error(t.fileName+": Section Duplicated "+a);t.pos=e[a][0].p,t.readingSection=e[a][0]}async function ha(t,e){if(void 0===t.readingSection)throw new Error("Not reading a section");if(!e&&t.pos-t.readingSection.p!=t.readingSection.size)throw new Error("Invalid section size reading");delete t.readingSection}async function ma(t,e,a,i){const o=new Uint8Array(a);He.toRprLE(o,0,e,a),await t.write(o,i)}async function La(t,e,a){const i=await t.read(e,a);return He.fromRprLE(i,0,e)}async function wa(t,e,a,i,o){void 0===o&&(o=e[i][0].size);const n=t.pageSize;await pa(t,e,i),await fa(a,i);for(let e=0;ee[a][0].size)throw new Error("Reading out of the range of the section");let n;return n=o<1<<30?new Uint8Array(o):new fe(o),await t.readToBuffer(n,0,o,e[a][0].p+i),n}async function ba(t,e,a,i,o){const n=16*t.pageSize;if(await pa(t,e,o),await pa(a,i,o),e[o][0].size!=i[o][0].size)return!1;const r=e[o][0].size;for(let e=0;e=0)e=await De();else{if(!(["BLS12381"].indexOf(a)>=0))throw new Error(`Curve not supported: ${t}`);e=await Ke()}return e}var xa=function t(e,a){if(!e){var i=new va(a);throw Error.captureStackTrace&&Error.captureStackTrace(i,t),i}};class va extends Error{}function Ea(t){return t.length}va.prototype.name="AssertionError";var Ba={byteLength:Ea,toString:function(t){const e=t.byteLength;let a="";for(let i=0;i1&&61===t.charCodeAt(e-1)&&e--,3*e>>>2}Ga[45]=62,Ga[95]=63;var Oa={byteLength:Pa,toString:function(t){const e=t.byteLength;let a="";for(let i=0;i>2]+Sa[(3&t[i])<<4|t[i+1]>>4]+Sa[(15&t[i+1])<<2|t[i+2]>>6]+Sa[63&t[i+2]];return e%3==2?a=a.substring(0,a.length-1)+"=":e%3==1&&(a=a.substring(0,a.length-2)+"=="),a},write:function(t,e,a=0,i=Pa(e)){const o=Math.min(i,t.byteLength-a);for(let a=0,i=0;a>4,t[i++]=(15&n)<<4|r>>2,t[i++]=(3&r)<<6|63&c}return o}};function Ua(t){return t.length>>>1}var za={byteLength:Ua,toString:function(t){const e=t.byteLength;t=new DataView(t.buffer,t.byteOffset,e);let a="",i=0;for(let o=e-e%4;i=48&&t<=57?t-48:t>=65&&t<=70?t-65+10:t>=97&&t<=102?t-97+10:void 0}function Qa(t){let e=0;for(let a=0,i=t.length;a=55296&&o<=56319&&a+1=56320&&i<=57343){e+=4,a++;continue}}e+=o<=127?1:o<=2047?2:3}return e}let Ma,ka;if("undefined"!=typeof TextDecoder){const t=new TextDecoder;Ma=function(e){return t.decode(e)}}else Ma=function(t){const e=t.byteLength;let a="",i=0;for(;i0){let e=0;for(;e>i,i-=6;i>=0;)t[r++]=128|a>>i&63,i-=6;n+=a>=65536?2:1}return o};var Ra={byteLength:Qa,toString:Ma,write:ka};function Na(t){return 2*t.length}var Ta={byteLength:Na,toString:function(t){const e=t.byteLength;let a="";for(let i=0;i>8,r=o%256;t[a+2*i]=r,t[a+2*i+1]=n}return o}};function Da(t){switch(t){case"ascii":return Ba;case"base64":return Oa;case"hex":return za;case"utf8":case"utf-8":case void 0:return Ra;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return Ta;default:throw new Error(`Unknown encoding: ${t}`)}}function Ka(t){return t instanceof Uint8Array}function Va(t,e,a){return"string"==typeof t?function(t,e){const a=Da(e),i=new Uint8Array(a.byteLength(t));return a.write(i,t,0,i.byteLength),i}(t,e):Array.isArray(t)?function(t){const e=new Uint8Array(t.length);return e.set(t),e}(t):ArrayBuffer.isView(t)?function(t){const e=new Uint8Array(t.byteLength);return e.set(t),e}(t):function(t,e,a){return new Uint8Array(t,e,a)}(t,e,a)}function ja(t,e,a){const i=t[e];t[e]=t[a],t[a]=i}var Ha={isBuffer:Ka,alloc:function(t,e,a){const i=new Uint8Array(t);return void 0!==e&&e(i,e,0,i.byteLength,a),i},allocUnsafe:function(t){return new Uint8Array(t)},allocUnsafeSlow:function(t){return new Uint8Array(t)},byteLength:function(t,e){return Da(e).byteLength(t)},compare:function(t,e){if(t===e)return 0;const a=Math.min(t.byteLength,e.byteLength);t=new DataView(t.buffer,t.byteOffset,t.byteLength),e=new DataView(e.buffer,e.byteOffset,e.byteLength);let i=0;for(let o=a-a%4;io)return 1}for(;io)return 1}return t.byteLength>e.byteLength?1:t.byteLengtht+e.byteLength),0));const a=new Uint8Array(e);return t.reduce(((t,e)=>(a.set(e,t),t+e.byteLength)),0),a},copy:function(t,e,a=0,i=0,o=t.byteLength){if(o>0&&o=t.byteLength)throw new RangeError("sourceStart is out of range");if(o<0)throw new RangeError("sourceEnd is out of range");a>=e.byteLength&&(a=e.byteLength),o>t.byteLength&&(o=t.byteLength),e.byteLength-a=o||i<=a?"":(a<0&&(a=0),i>o&&(i=o),(0!==a||i{for(var t=new Uint8Array(128),e=0;e<64;e++)t[e<26?e+65:e<52?e+71:e<62?e-4:4*e-205]=e;return e=>{for(var a=e.length,i=new Uint8Array(3*(a-("="==e[a-1])-("="==e[a-2]))/4|0),o=0,n=0;o>4,i[n++]=c<<4|l>>2,i[n++]=l<<6|s}return i}})(),Za=((t,e)=>function(){return e||(0,t[Object.keys(t)[0]])((e={exports:{}}).exports,e),e.exports})({"wasm-binary:./blake2b.wat"(t,e){e.exports=$a("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")}}),Ya=Za(),Ja=WebAssembly.compile(Ya),Wa=d((function(t){var e=null,a="undefined"!=typeof WebAssembly&&(async t=>(await WebAssembly.instantiate(await Ja,t)).exports)().then((t=>{e=t})),i=64,o=[];t.exports=u;var n=t.exports.BYTES_MIN=16,r=t.exports.BYTES_MAX=64;t.exports.BYTES=32;var c=t.exports.KEYBYTES_MIN=16,l=t.exports.KEYBYTES_MAX=64;t.exports.KEYBYTES=32;var s=t.exports.SALTBYTES=16,d=t.exports.PERSONALBYTES=16;function u(t,a,g,f,_){if(!(this instanceof u))return new u(t,a,g,f,_);if(!e)throw new Error("WASM not loaded. Wait for Blake2b.ready(cb)");t||(t=32),!0!==_&&(xa(t>=n,"digestLength must be at least "+n+", was given "+t),xa(t<=r,"digestLength must be at most "+r+", was given "+t),null!=a&&(xa(a instanceof Uint8Array,"key must be Uint8Array or Buffer"),xa(a.length>=c,"key must be at least "+c+", was given "+a.length),xa(a.length<=l,"key must be at least "+l+", was given "+a.length)),null!=g&&(xa(g instanceof Uint8Array,"salt must be Uint8Array or Buffer"),xa(g.length===s,"salt must be exactly "+s+", was given "+g.length)),null!=f&&(xa(f instanceof Uint8Array,"personal must be Uint8Array or Buffer"),xa(f.length===d,"personal must be exactly "+d+", was given "+f.length))),o.length||(o.push(i),i+=216),this.digestLength=t,this.finalized=!1,this.pointer=o.pop(),this._memory=new Uint8Array(e.memory.buffer),this._memory.fill(0,0,64),this._memory[0]=this.digestLength,this._memory[1]=a?a.length:0,this._memory[2]=1,this._memory[3]=1,g&&this._memory.set(g,32),f&&this._memory.set(f,48),this.pointer+216>this._memory.length&&this._realloc(this.pointer+216),e.blake2b_init(this.pointer,this.digestLength),a&&(this.update(a),this._memory.fill(0,i,i+a.length),this._memory[this.pointer+200]=128)}function g(){}u.prototype._realloc=function(t){e.memory.grow(Math.max(0,Math.ceil(Math.abs(t-this._memory.length)/65536))),this._memory=new Uint8Array(e.memory.buffer)},u.prototype.update=function(t){return xa(!1===this.finalized,"Hash instance finalized"),xa(t instanceof Uint8Array,"input must be Uint8Array or Buffer"),i+t.length>this._memory.length&&this._realloc(i+t.length),this._memory.set(t,i),e.blake2b_update(this.pointer,i,i+t.length),this},u.prototype.digest=function(t){if(xa(!1===this.finalized,"Hash instance finalized"),this.finalized=!0,o.push(this.pointer),e.blake2b_final(this.pointer),!t||"binary"===t)return this._memory.slice(this.pointer+128,this.pointer+128+this.digestLength);if("string"==typeof t)return Ha.toString(this._memory,t,this.pointer+128,this.pointer+128+this.digestLength);xa(t instanceof Uint8Array&&t.length>=this.digestLength,"input must be Uint8Array or Buffer");for(var a=0;at()),t):t(new Error("WebAssembly not supported"))},u.prototype.ready=u.ready,u.prototype.getPartialHash=function(){return this._memory.slice(this.pointer,this.pointer+216)},u.prototype.setPartialHash=function(t){this._memory.set(t,this.pointer)}}));const Xa=[];for(let t=0;t<256;t++)Xa[t]=ti(t,8);function ti(t,e){let a=0,i=t;for(let t=0;t>=1;return a}function ei(t){return(0!=(4294901760&t)?(t&=4294901760,16):0)|(0!=(4278255360&t)?(t&=4278255360,8):0)|(0!=(4042322160&t)?(t&=4042322160,4):0)|(0!=(3435973836&t)?(t&=3435973836,2):0)|0!=(2863311530&t)}function ai(t,e){const a=new DataView(t.buffer,t.byteOffset,t.byteLength);let i="";for(let t=0;t<4;t++){t>0&&(i+="\n"),i+="\t\t";for(let e=0;e<4;e++)e>0&&(i+=" "),i+=a.getUint32(16*t+4*e).toString(16).padStart(8,"0")}return e&&(i=e+"\n"+i),i}function ii(t,e){if(t.byteLength!=e.byteLength)return!1;for(var a=new Int8Array(t),i=new Int8Array(e),o=0;o!=t.byteLength;o++)if(a[o]!=i[o])return!1;return!0}function oi(t){const e=t.getPartialHash(),a=Wa(64);return a.setPartialHash(e),a}async function ni(t,e,a,i,o){if(t.G1.isZero(e))return!1;if(t.G1.isZero(a))return!1;if(t.G2.isZero(i))return!1;if(t.G2.isZero(o))return!1;return await t.pairingEq(e,o,t.G1.neg(a),i)}async function ri(t){for(;!t;)t=await window.prompt("Enter a random text. (Entropy): ","");const e=Wa(64);e.update(wt.randomBytes(64));const a=new TextEncoder;e.update(a.encode(t));const i=Buffer.from(e.digest()),o=[];for(let t=0;t<8;t++)o[t]=i.readUInt32BE(4*t);return new Lt(o)}function ci(t,e){let a,i;e<32?(a=1<>>0,i=1):(a=4294967296,i=1<>>0);let o=t;for(let t=0;t0){const e=new Uint8Array(i);await t.writeULE32(e.byteLength),await t.write(e)}else await t.writeULE32(0)}async function wi(t,e,a){await fa(t,10),await t.write(a.csHash),await t.writeULE32(a.contributions.length);for(let i=0;i0;)a.unshift(0),n--;return a}async function Ei(t,e){e=e||{};let a,i=32767,o=!1;for(;!o;)try{a=new WebAssembly.Memory({initial:i}),o=!0}catch(t){if(1===i)throw t;console.warn("Could not allocate "+1024*i*64+" bytes. This may cause severe instability. Trying with "+1024*i*64/2+" bytes"),i=Math.floor(i/2)}const n=await WebAssembly.compile(t);let r;const c=await WebAssembly.instantiate(n,{env:{memory:a},runtime:{exceptionHandler:function(t){let e;throw e=1==t?"Signal not found. ":2==t?"Too many signals set. ":3==t?"Signal already set. ":4==t?"Assert Failed. ":5==t?"Not enough memory. ":"Unknown error.",console.log("ERROR: ",t,e),new Error(e)},showSharedRWMemory:function(){const t=c.exports.getFieldNumLen32(),e=new Uint32Array(t);for(let a=0;a0;a++)i.push(e[t+a]);return String.fromCharCode.apply(null,i)}}class Bi{constructor(t,e,a){this.memory=t,this.i32=new Uint32Array(t.buffer),this.instance=e,this.n32=(this.instance.exports.getFrLen()>>2)-2;const i=this.instance.exports.getPRawPrime(),o=new Array(this.n32);for(let t=0;t>2)+t];this.prime=He.fromArray(o,4294967296),this.Fr=new vt(this.prime),this.mask32=He.fromString("FFFFFFFF",16),this.NVars=this.instance.exports.getNVars(),this.n64=Math.floor((this.Fr.bitLength-1)/64)+1,this.R=this.Fr.e(He.shiftLeft(1,64*this.n64)),this.RInv=this.Fr.inv(this.R),this.sanityCheck=a}circom_version(){return 1}async _doCalculateWitness(t,e){this.instance.exports.init(this.sanityCheck||e?1:0);const a=this.allocInt(),i=this.allocFr();Object.keys(t).forEach((e=>{const o=xi(e),n=parseInt(o.slice(0,8),16),r=parseInt(o.slice(8,16),16);try{this.instance.exports.getSignalOffset32(a,0,n,r)}catch(t){throw new Error(`Signal ${e} is not an input of the circuit.`)}const c=this.getInt(a),l=Fi(t[e]);for(let t=0;t>2]}setInt(t,e){this.i32[t>>2]=e}getFr(t){const e=this,a=t>>2;if(2147483648&e.i32[a+1]){const t=new Array(e.n32);for(let i=0;i>2]=o,void(a.i32[1+(t>>2)]=0)}a.i32[t>>2]=0,a.i32[1+(t>>2)]=2147483648;const n=He.toArray(e,4294967296);for(let e=0;e>2)+e]=i>=0?n[i]:0}}}class Si{constructor(t,e){this.instance=t,this.version=this.instance.exports.getVersion(),this.n32=this.instance.exports.getFieldNumLen32(),this.instance.exports.getRawPrime();const a=new Array(this.n32);for(let t=0;t{const a=xi(e),o=parseInt(a.slice(0,8),16),n=parseInt(a.slice(8,16),16),r=Fi(t[e]);for(let t=0;t1)throw new Error(t.fileName+": File has more than one header");t.pos=e[1][0].p;const a=await t.readULE32(),i=await t.read(a),o=He.fromRprLE(i),n=await Ca(o);if(8*n.F1.n64!=a)throw new Error(t.fileName+": Invalid size");const r=await t.readULE32(),c=await t.readULE32();if(t.pos-e[1][0].p!=e[1][0].size)throw new Error("Invalid PTau header size");return{curve:n,power:r,ceremonyPower:c}}function Ni(t,e,a,i){const o={tau:{},alpha:{},beta:{}};return o.tau.g1_s=n(),o.tau.g1_sx=n(),o.alpha.g1_s=n(),o.alpha.g1_sx=n(),o.beta.g1_s=n(),o.beta.g1_sx=n(),o.tau.g2_spx=r(),o.alpha.g2_spx=r(),o.beta.g2_spx=r(),o;function n(){let o;return o=i?a.G1.fromRprLEM(t,e):a.G1.fromRprUncompressed(t,e),e+=2*a.G1.F.n8,o}function r(){let o;return o=i?a.G2.fromRprLEM(t,e):a.G2.fromRprUncompressed(t,e),e+=2*a.G2.F.n8,o}}function Ti(t,e,a,i,o){async function n(i){o?a.G1.toRprLEM(t,e,i):a.G1.toRprUncompressed(t,e,i),e+=2*a.F1.n8}async function r(i){o?a.G2.toRprLEM(t,e,i):a.G2.toRprUncompressed(t,e,i),e+=2*a.F2.n8}return n(i.tau.g1_s),n(i.tau.g1_sx),n(i.alpha.g1_s),n(i.alpha.g1_sx),n(i.beta.g1_s),n(i.beta.g1_sx),r(i.tau.g2_spx),r(i.alpha.g2_spx),r(i.beta.g2_spx),t}async function Di(t,e){const a={};a.tauG1=await l(),a.tauG2=await s(),a.alphaG1=await l(),a.betaG1=await l(),a.betaG2=await s(),a.key=await async function(t,e,a){return Ni(await t.read(2*e.F1.n8*6+2*e.F2.n8*3),0,e,a)}(t,e,!0),a.partialHash=await t.read(216),a.nextChallenge=await t.read(64),a.type=await t.readULE32();const i=new Uint8Array(2*e.G1.F.n8*6+2*e.G2.F.n8*3);Ti(i,0,e,a.key,!1);const o=Wa(64);o.setPartialHash(a.partialHash),o.update(i),a.responseHash=o.digest();const n=await t.readULE32(),r=t.pos;let c=0;for(;t.pos-r1)throw new Error(t.fileName+": File has more than one contributions section");t.pos=a[7][0].p;const i=await t.readULE32(),o=[];for(let a=0;a0){const e=new Uint8Array(n);await t.writeULE32(e.byteLength),await t.write(e)}else await t.writeULE32(0);async function r(a){e.G1.toRprLEM(i,0,a),await t.write(i)}async function c(a){e.G2.toRprLEM(o,0,a),await t.write(o)}}async function ji(t,e,a){await t.writeULE32(7);const i=t.pos;await t.writeULE64(0),await t.writeULE32(a.length);for(let i=0;i0?u[u.length-1].nextChallenge:Hi(s,d,n);const w=await ga(a,"ptau",1,o?7:2);await ki(w,s,d);const A=await m.read(64);if(ii(r,L)&&(L=A,u[u.length-1].nextChallenge=L),!ii(A,L))throw new Error("Wrong contribution. this contribution is not based on the previus hash");const b=new Wa(64);b.update(A);const y=[];let I;I=await x(m,w,"G1",2,2**d*2-1,[1],"tauG1"),g.tauG1=I[0],I=await x(m,w,"G2",3,2**d,[1],"tauG2"),g.tauG2=I[0],I=await x(m,w,"G1",4,2**d,[0],"alphaG1"),g.alphaG1=I[0],I=await x(m,w,"G1",5,2**d,[0],"betaG1"),g.betaG1=I[0],I=await x(m,w,"G2",6,1,[0],"betaG2"),g.betaG2=I[0],g.partialHash=b.getPartialHash();const C=await m.read(2*s.F1.n8*6+2*s.F2.n8*3);g.key=Ni(C,0,s,!1),b.update(new Uint8Array(C));const F=b.digest();if(n&&n.info(ai(F,"Contribution Response Hash imported: ")),o){const t=new Wa(64);t.update(F),await v(t,w,"G1",2,2**d*2-1,"tauG1",n),await v(t,w,"G2",3,2**d,"tauG2",n),await v(t,w,"G1",4,2**d,"alphaTauG1",n),await v(t,w,"G1",5,2**d,"betaTauG1",n),await v(t,w,"G2",6,1,"betaG2",n),g.nextChallenge=t.digest(),n&&n.info(ai(g.nextChallenge,"Next Challenge Hash: "))}else g.nextChallenge=r;return u.push(g),await ji(w,s,u),await m.close(),await w.close(),await c.close(),g.nextChallenge;async function x(t,e,a,i,r,c,l){return o?await async function(t,e,a,i,o,r,c){const l=s[a],d=l.F.n8,u=2*l.F.n8,g=[];await fa(e,i);const f=Math.floor((1<<24)/u);y[i]=e.pos;for(let a=0;a=a&&e=e&&o1?l[l.length-2]:s;const u=l[l.length-1];if(e&&e.debug("Validating contribution #"+l[l.length-1].id),!await Yi(n,u,d,e))return!1;const g=Wa(64);g.update(u.responseHash),e&&e.debug("Verifying powers in tau*G1 section");const f=await A(2,"G1","tauG1",2**r*2-1,[0,1],e);if(a=await Zi(n,f.R1,f.R2,n.G2.g,u.tauG2),!0!==a)return e&&e.error("tauG1 section. Powers do not match"),!1;if(!n.G1.eq(n.G1.g,f.singularPoints[0]))return e&&e.error("First element of tau*G1 section must be the generator"),!1;if(!n.G1.eq(u.tauG1,f.singularPoints[1]))return e&&e.error("Second element of tau*G1 section does not match the one in the contribution section"),!1;e&&e.debug("Verifying powers in tau*G2 section");const _=await A(3,"G2","tauG2",2**r,[0,1],e);if(a=await Zi(n,n.G1.g,u.tauG1,_.R1,_.R2),!0!==a)return e&&e.error("tauG2 section. Powers do not match"),!1;if(!n.G2.eq(n.G2.g,_.singularPoints[0]))return e&&e.error("First element of tau*G2 section must be the generator"),!1;if(!n.G2.eq(u.tauG2,_.singularPoints[1]))return e&&e.error("Second element of tau*G2 section does not match the one in the contribution section"),!1;e&&e.debug("Verifying powers in alpha*tau*G1 section");const p=await A(4,"G1","alphatauG1",2**r,[0],e);if(a=await Zi(n,p.R1,p.R2,n.G2.g,u.tauG2),!0!==a)return e&&e.error("alphaTauG1 section. Powers do not match"),!1;if(!n.G1.eq(u.alphaG1,p.singularPoints[0]))return e&&e.error("First element of alpha*tau*G1 section (alpha*G1) does not match the one in the contribution section"),!1;e&&e.debug("Verifying powers in beta*tau*G1 section");const h=await A(5,"G1","betatauG1",2**r,[0],e);if(a=await Zi(n,h.R1,h.R2,n.G2.g,u.tauG2),!0!==a)return e&&e.error("betaTauG1 section. Powers do not match"),!1;if(!n.G1.eq(u.betaG1,h.singularPoints[0]))return e&&e.error("First element of beta*tau*G1 section (beta*G1) does not match the one in the contribution section"),!1;const m=await async function(t){const e=n.G2,a=2*e.F.n8,r=new Uint8Array(a);if(!o[6])throw t.error("File has no BetaG2 section"),new Error("File has no BetaG2 section");if(o[6].length>1)throw t.error("File has no BetaG2 section"),new Error("File has more than one GetaG2 section");i.pos=o[6][0].p;const c=await i.read(a),l=e.fromRprLEM(c);return e.toRprUncompressed(r,0,l),g.update(r),l}(e);if(!n.G2.eq(u.betaG2,m))return e&&e.error("betaG2 element in betaG2 section does not match the one in the contribution section"),!1;const L=g.digest();if(r==c&&!ii(L,u.nextChallenge))return e&&e.error("Hash of the values does not match the next challenge of the last contributor in the contributions section"),!1;e&&e.info(ai(L,"Next challenge hash: ")),w(u,d);for(let t=l.length-2;t>=0;t--){const a=l[t],i=t>0?l[t-1]:s;if(!await Yi(n,a,i,e))return!1;w(a,i)}if(e&&e.info("-----------------------------------------------------"),o[12]&&o[13]&&o[14]&&o[15]){let t;if(t=await b("G1",2,12,"tauG1",e),!t)return!1;if(t=await b("G2",3,13,"tauG2",e),!t)return!1;if(t=await b("G1",4,14,"alphaTauG1",e),!t)return!1;if(t=await b("G1",5,15,"betaTauG1",e),!t)return!1}else e&&e.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 i.close(),e&&e.info("Powers of Tau Ok!"),!0;function w(t,a){if(!e)return;e.info("-----------------------------------------------------"),e.info(`Contribution #${t.id}: ${t.name||""}`),e.info(ai(t.nextChallenge,"Next Challenge: "));const i=new Uint8Array(2*n.G1.F.n8*6+2*n.G2.F.n8*3);Ti(i,0,n,t.key,!1);const o=Wa(64);o.setPartialHash(t.partialHash),o.update(i);const r=o.digest();e.info(ai(r,"Response Hash:")),e.info(ai(a.nextChallenge,"Response Hash:")),1==t.type&&(e.info(`Beacon generator: ${si(t.beaconHash)}`),e.info(`Beacon iterations Exp: ${t.numIterationsExp}`))}async function A(t,e,a,r,c,l){const s=n[e],d=2*s.F.n8;await pa(i,o,t);const u=[];let f=s.zero,_=s.zero,p=s.zero;for(let t=0;t0){const t=s.fromRprLEM(o,0),e=wt.randomBytes(4).readUInt32BE(0,!0);f=s.add(f,s.timesScalar(p,e)),_=s.add(_,s.timesScalar(t,e))}const m=await s.multiExpAffine(o.slice(0,(e-1)*d),h),L=await s.multiExpAffine(o.slice(d),h);f=s.add(f,m),_=s.add(_,L),p=s.fromRprLEM(o,(e-1)*d);for(let a=0;a=t&&i1;)s/=2,d+=1;if(2**d!=l)throw new Error("Invalid file size");o&&o.debug("Power to tau size: "+d);const u=await ri(i),g=await sa(a),f=Wa(64);for(let t=0;t{o.debug(e+".g1_s: "+t.G1.toString(h[e].g1_s,16)),o.debug(e+".g1_sx: "+t.G1.toString(h[e].g1_sx,16)),o.debug(e+".g2_sp: "+t.G2.toString(h[e].g2_sp,16)),o.debug(e+".g2_spx: "+t.G2.toString(h[e].g2_spx,16)),o.debug("")}));const m=Wa(64);await g.write(p),m.update(p),await Wi(n,g,m,t,"G1",2**d*2-1,t.Fr.one,h.tau.prvKey,"COMPRESSED","tauG1",o),await Wi(n,g,m,t,"G2",2**d,t.Fr.one,h.tau.prvKey,"COMPRESSED","tauG2",o),await Wi(n,g,m,t,"G1",2**d,h.alpha.prvKey,h.tau.prvKey,"COMPRESSED","alphaTauG1",o),await Wi(n,g,m,t,"G1",2**d,h.beta.prvKey,h.tau.prvKey,"COMPRESSED","betaTauG1",o),await Wi(n,g,m,t,"G2",1,h.beta.prvKey,h.tau.prvKey,"COMPRESSED","betaTauG2",o);const L=new Uint8Array(2*t.F1.n8*6+2*t.F2.n8*3);Ti(L,0,t,h,!1),await g.write(L),m.update(L);const w=m.digest();o&&o.info(ai(w,"Contribution Response Hash: ")),await g.close(),await n.close()},beacon:async function(t,e,a,i,o,n){const r=li(i);if(0==r.byteLength||2*r.byteLength!=i.length)return n&&n.error("Invalid Beacon Hash. (It must be a valid hexadecimal sequence)"),!1;if(r.length>=256)return n&&n.error("Maximum lenght of beacon hash is 255 bytes"),!1;if((o=parseInt(o))<10||o>63)return n&&n.error("Invalid numIterationsExp. (Must be between 10 and 63)"),!1;await Wa.ready();const{fd:c,sections:l}=await ua(t,"ptau",1),{curve:s,power:d,ceremonyPower:u}=await Ri(c,l);if(d!=u)return n&&n.error("This file has been reduced. You cannot contribute into a reduced file."),!1;l[12]&&n&&n.warn("Contributing into a file that has phase2 calculated. You will have to prepare phase2 again.");const g=await Ki(c,s,l),f={name:a,type:1,numIterationsExp:o,beaconHash:r};let _;_=g.length>0?g[g.length-1].nextChallenge:Hi(s,d,n),f.key=$i(s,_,r,o);const p=new Wa(64);p.update(_);const h=await ga(e,"ptau",1,7);await ki(h,s,d);const m=[];let L;L=await y(2,"G1",2**d*2-1,s.Fr.e(1),f.key.tau.prvKey,"tauG1",n),f.tauG1=L[1],L=await y(3,"G2",2**d,s.Fr.e(1),f.key.tau.prvKey,"tauG2",n),f.tauG2=L[1],L=await y(4,"G1",2**d,f.key.alpha.prvKey,f.key.tau.prvKey,"alphaTauG1",n),f.alphaG1=L[0],L=await y(5,"G1",2**d,f.key.beta.prvKey,f.key.tau.prvKey,"betaTauG1",n),f.betaG1=L[0],L=await y(6,"G2",1,f.key.beta.prvKey,f.key.tau.prvKey,"betaTauG2",n),f.betaG2=L[0],f.partialHash=p.getPartialHash();const w=new Uint8Array(2*s.F1.n8*6+2*s.F2.n8*3);Ti(w,0,s,f.key,!1),p.update(new Uint8Array(w));const A=p.digest();n&&n.info(ai(A,"Contribution Response Hash imported: "));const b=new Wa(64);return b.update(A),await I(h,"G1",2,2**d*2-1,"tauG1",n),await I(h,"G2",3,2**d,"tauG2",n),await I(h,"G1",4,2**d,"alphaTauG1",n),await I(h,"G1",5,2**d,"betaTauG1",n),await I(h,"G2",6,1,"betaG2",n),f.nextChallenge=b.digest(),n&&n.info(ai(f.nextChallenge,"Next Challenge Hash: ")),g.push(f),await ji(h,s,g),await c.close(),await h.close(),A;async function y(t,e,a,i,o,n,r){const d=[];c.pos=l[t][0].p,await fa(h,t),m[t]=h.pos;const u=s[e],g=2*u.F.n8,f=Math.floor((1<<20)/g);let _=i;for(let t=0;t0?d[d.length-1].nextChallenge:Hi(c,l,o),u.key=Mi(c,g,f);const _=new Wa(64);_.update(g);const p=await ga(e,"ptau",1,7);await ki(p,c,l);const h=[];let m;m=await b(2,"G1",2**l*2-1,c.Fr.e(1),u.key.tau.prvKey,"tauG1"),u.tauG1=m[1],m=await b(3,"G2",2**l,c.Fr.e(1),u.key.tau.prvKey,"tauG2"),u.tauG2=m[1],m=await b(4,"G1",2**l,u.key.alpha.prvKey,u.key.tau.prvKey,"alphaTauG1"),u.alphaG1=m[0],m=await b(5,"G1",2**l,u.key.beta.prvKey,u.key.tau.prvKey,"betaTauG1"),u.betaG1=m[0],m=await b(6,"G2",1,u.key.beta.prvKey,u.key.tau.prvKey,"betaTauG2"),u.betaG2=m[0],u.partialHash=_.getPartialHash();const L=new Uint8Array(2*c.F1.n8*6+2*c.F2.n8*3);Ti(L,0,c,u.key,!1),_.update(new Uint8Array(L));const w=_.digest();o&&o.info(ai(w,"Contribution Response Hash imported: "));const A=new Wa(64);return A.update(w),await y(p,"G1",2,2**l*2-1,"tauG1"),await y(p,"G2",3,2**l,"tauG2"),await y(p,"G1",4,2**l,"alphaTauG1"),await y(p,"G1",5,2**l,"betaTauG1"),await y(p,"G2",6,1,"betaG2"),u.nextChallenge=A.digest(),o&&o.info(ai(u.nextChallenge,"Next Challenge Hash: ")),d.push(u),await ji(p,c,d),await n.close(),await p.close(),w;async function b(t,e,a,i,l,s){const d=[];n.pos=r[t][0].p,await fa(p,t),h[t]=p.pos;const u=c[e],g=2*u.F.n8,f=Math.floor((1<<20)/g);let m=i;for(let t=0;t=this.length&&(this.length=t+1),!0}getKeys(){const t=new io;for(let e=0;e1<<20?new io:[];for(let t=0;t1<<20?new io:[];for(let t=0;t{a[i]=lo(t,e[i])})),a}return"bigint"==typeof e||void 0!==e.eq?e.toString(10):e}var so=Object.freeze({__proto__:null,print:function(t,e,a){for(let e=0;e{let i="";return Object.keys(a).forEach((o=>{let n=e.varIdx2Name[o];"one"==n&&(n="");let r=t.curve.Fr.toString(a[o]);"1"==r&&(r=""),"-1"==r&&(r="-"),""!=i&&"-"!=r[0]&&(r="+"+r),""!=i&&(r=" "+r),i=i+r+n})),i},n=`[ ${o(i[0])} ] * [ ${o(i[1])} ] - [ ${o(i[2])} ] = 0`;a&&a.info(n)}},info:async function(t,e){const a=await no(t);return He.eq(a.prime,co)?e&&e.info("Curve: bn-128"):He.eq(a.prime,ro)?e&&e.info("Curve: bls12-381"):e&&e.info(`Unknown Curve. Prime: ${He.toString(a.prime)}`),e&&e.info(`# of Wires: ${a.nVars}`),e&&e.info(`# of Constraints: ${a.nConstraints}`),e&&e.info(`# of Private Inputs: ${a.nPrvInputs}`),e&&e.info(`# of Public Inputs: ${a.nPubInputs}`),e&&e.info(`# of Labels: ${a.nLabels}`),e&&e.info(`# of Outputs: ${a.nOutputs}`),a},exportJson:async function(t,e){const a=await no(t,!0,!0,!0,e),i=a.curve.Fr;return delete a.curve,lo(i,a)}});async function uo(t){const e={labelIdx2Name:["one"],varIdx2Name:["one"],componentIdx2Name:[]},a=await da(t),i=await a.read(a.totalSize),o=new TextDecoder("utf-8").decode(i).split("\n");for(let t=0;t=this.length&&(this.length=t+1),!0}getKeys(){const t=new ho;for(let e=0;el)return i&&i.error(`circuit too big for this power of tau ceremony. ${u.nConstraints}*2 > 2**${l}`),-1;if(!r[12])return i&&i.error("Powers of tau is not prepared."),-1;const h=u.nOutputs+u.nPubInputs,m=2**p;await fa(g,1),await g.writeULE32(1),await _a(g),await fa(g,2);const L=c.q,w=8*(Math.floor((He.bitLength(L)-1)/64)+1),A=c.r,b=8*(Math.floor((He.bitLength(A)-1)/64)+1),y=He.mod(He.shl(1,8*b),A),I=c.Fr.e(He.mod(He.mul(y,y),A));let C,F,x;await g.writeULE32(w),await ma(g,L,w),await g.writeULE32(b),await ma(g,A,b),await g.writeULE32(u.nVars),await g.writeULE32(h),await g.writeULE32(m),C=await n.read(f,r[4][0].p),await g.write(C),C=await c.G1.batchLEMtoU(C),o.update(C),F=await n.read(f,r[5][0].p),await g.write(F),F=await c.G1.batchLEMtoU(F),o.update(F),x=await n.read(_,r[6][0].p),await g.write(x),x=await c.G2.batchLEMtoU(x),o.update(x);const v=new Uint8Array(f);c.G1.toRprLEM(v,0,c.G1.g);const E=new Uint8Array(_);c.G2.toRprLEM(E,0,c.G2.g);const B=new Uint8Array(f);c.G1.toRprUncompressed(B,0,c.G1.g);const S=new Uint8Array(_);c.G2.toRprUncompressed(S,0,c.G2.g),await g.write(E),await g.write(v),await g.write(E),o.update(S),o.update(B),o.update(S),await _a(g),i&&i.info("Reading r1cs");let G=await Aa(s,d,2);const P=new ho(u.nVars),O=new ho(u.nVars),U=new ho(u.nVars),z=new ho(u.nVars-h-1),q=new Array(h+1);i&&i.info("Reading tauG1");let Q=await Aa(n,r,12,(m-1)*f,m*f);i&&i.info("Reading tauG2");let M=await Aa(n,r,13,(m-1)*_,m*_);i&&i.info("Reading alphatauG1");let k=await Aa(n,r,14,(m-1)*f,m*f);i&&i.info("Reading betatauG1");let R=await Aa(n,r,15,(m-1)*f,m*f);await async function(){const t=new Uint8Array(12+c.Fr.n8),e=new DataView(t.buffer),a=new Uint8Array(c.Fr.n8);c.Fr.toRprLE(a,0,c.Fr.e(1));let o=0;function n(){const t=G.slice(o,o+4);o+=4;return new DataView(t.buffer).getUint32(0,!0)}const r=new ho;for(let t=0;t=0?c.Fr.fromRprLE(G.slice(i[3],i[3]+c.Fr.n8),0):c.Fr.fromRprLE(a,0);const n=c.Fr.mul(o,I);c.Fr.toRprLE(t,12,n),l.set(t,d),d+=t.length}await g.write(l),await _a(g)}(),await T(3,"G1",q,"IC"),await async function(){await fa(g,9);const t=new fe(m*f);if(p(i&&i.debug(`Writing points end ${n}: ${d}/${a.length}`),t)))),s+=o,t++}const d=await Promise.all(l);for(let t=0;t32768?(f=new fe(p*n),_=new fe(p*c.Fr.n8)):(f=new Uint8Array(p*n),_=new Uint8Array(p*c.Fr.n8));let h=0,m=0;const L=[Q,M,k,R],w=new Uint8Array(c.Fr.n8);c.Fr.toRprLE(w,0,c.Fr.e(1));let A=0;for(let t=0;t=0?_.set(G.slice(e[t][o][2],e[t][o][2]+c.Fr.n8),A*c.Fr.n8):_.set(w,A*c.Fr.n8),A++;if(e.length>1){const t=[];t.push({cmd:"ALLOCSET",var:0,buff:f}),t.push({cmd:"ALLOCSET",var:1,buff:_}),t.push({cmd:"ALLOC",var:2,len:e.length*r}),h=0,m=0;let a=0;for(let i=0;i=0;t--){const e=d.contributions[t];i&&i.info("-------------------------"),i&&i.info(ai(e.contributionHash,`contribution #${t+1} ${e.name?e.name:""}:`)),1==e.type&&(i&&i.info(`Beacon generator: ${si(e.beaconHash)}`),i&&i.info(`Beacon iterations Exp: ${e.numIterationsExp}`))}return i&&i.info("-------------------------"),i&&i.info("ZKey Ok!"),!0;async function L(t,e){const a=2*l.G1.F.n8,i=t.byteLength/a,o=l.tm.concurrency,n=Math.floor(i/o),r=[];for(let a=0;ag.contributions.length)return o&&o.error("The impoerted file does not include new contributions"),!1;for(let t=0;t=256)return n&&n.error("Maximum lenght of beacon hash is 255 bytes"),!1;if((o=parseInt(o))<10||o>63)return n&&n.error("Invalid numIterationsExp. (Must be between 10 and 63)"),!1;const{fd:c,sections:l}=await ua(t,"zkey",2),s=await pi(c,l);if("groth16"!=s.protocol)throw new Error("zkey file is not groth16");const d=await Ca(s.q),u=await mi(c,d,l),g=await ga(e,"zkey",1,10),f=await ci(r,o),_=Wa(64);_.update(u.csHash);for(let t=0;t>5,this.byteCount=this.blockCount<<2,this.outputBlocks=g>>5,this.extraBytes=(31&g)>>3;for(var C=0;C<50;++C)this.s[C]=0}function b(A,I,g){L.call(this,A,I,g)}L.prototype.update=function(A){if(this.finalized)throw new Error("finalize already called");var g,C=typeof A;if("string"!==C){if("object"!==C)throw new Error(I);if(null===A)throw new Error(I);if(i&&A.constructor===ArrayBuffer)A=new Uint8Array(A);else if(!(Array.isArray(A)||i&&ArrayBuffer.isView(A)))throw new Error(I);g=!0}for(var t,Q,B=this.blocks,E=this.byteCount,e=A.length,a=this.blockCount,o=0,r=this.s;o>2]|=A[o]<>2]|=Q<>2]|=(192|Q>>6)<>2]|=(128|63&Q)<=57344?(B[t>>2]|=(224|Q>>12)<>2]|=(128|Q>>6&63)<>2]|=(128|63&Q)<>2]|=(240|Q>>18)<>2]|=(128|Q>>12&63)<>2]|=(128|Q>>6&63)<>2]|=(128|63&Q)<=E){for(this.start=t-E,this.block=B[a],t=0;t>=8);g>0;)t.unshift(g),g=255&(A>>=8),++C;return I?t.push(C):t.unshift(C),this.update(t),t.length},L.prototype.encodeString=function(A){var g,C=typeof A;if("string"!==C){if("object"!==C)throw new Error(I);if(null===A)throw new Error(I);if(i&&A.constructor===ArrayBuffer)A=new Uint8Array(A);else if(!(Array.isArray(A)||i&&ArrayBuffer.isView(A)))throw new Error(I);g=!0}var t=0,Q=A.length;if(g)t=Q;else for(var B=0;B=57344?t+=3:(E=65536+((1023&E)<<10|1023&A.charCodeAt(++B)),t+=4)}return t+=this.encode(8*t),this.update(A),t},L.prototype.bytepad=function(A,I){for(var g=this.encode(I),C=0;C>2]|=this.padding[3&I],this.lastByteIndex===this.byteCount)for(A[0]=A[g],I=1;I>4&15]+B[15&A]+B[A>>12&15]+B[A>>8&15]+B[A>>20&15]+B[A>>16&15]+B[A>>28&15]+B[A>>24&15];i%I==0&&(k(g),Q=0)}return t&&(A=g[Q],E+=B[A>>4&15]+B[15&A],t>1&&(E+=B[A>>12&15]+B[A>>8&15]),t>2&&(E+=B[A>>20&15]+B[A>>16&15])),E},L.prototype.arrayBuffer=function(){this.finalize();var A,I=this.blockCount,g=this.s,C=this.outputBlocks,t=this.extraBytes,Q=0,i=0,B=this.outputBits>>3;A=t?new ArrayBuffer(C+1<<2):new ArrayBuffer(B);for(var E=new Uint32Array(A);i>8&255,E[A+2]=I>>16&255,E[A+3]=I>>24&255;B%g==0&&k(C)}return Q&&(A=B<<2,I=C[i],E[A]=255&I,Q>1&&(E[A+1]=I>>8&255),Q>2&&(E[A+2]=I>>16&255)),E},b.prototype=new L,b.prototype.finalize=function(){return this.encode(this.outputBits,!0),L.prototype.finalize.call(this)};var k=function(A){var I,g,C,t,Q,i,B,E,e,n,o,r,h,s,w,f,D,c,y,u,l,F,M,p,G,H,d,U,m,L,b,k,J,N,S,R,v,Y,P,q,x,X,Z,V,K,O,W,j,z,T,_,$,AA,IA,gA,CA,tA,QA,iA,BA,EA,eA,nA;for(C=0;C<48;C+=2)t=A[0]^A[10]^A[20]^A[30]^A[40],Q=A[1]^A[11]^A[21]^A[31]^A[41],i=A[2]^A[12]^A[22]^A[32]^A[42],B=A[3]^A[13]^A[23]^A[33]^A[43],E=A[4]^A[14]^A[24]^A[34]^A[44],e=A[5]^A[15]^A[25]^A[35]^A[45],n=A[6]^A[16]^A[26]^A[36]^A[46],o=A[7]^A[17]^A[27]^A[37]^A[47],I=(r=A[8]^A[18]^A[28]^A[38]^A[48])^(i<<1|B>>>31),g=(h=A[9]^A[19]^A[29]^A[39]^A[49])^(B<<1|i>>>31),A[0]^=I,A[1]^=g,A[10]^=I,A[11]^=g,A[20]^=I,A[21]^=g,A[30]^=I,A[31]^=g,A[40]^=I,A[41]^=g,I=t^(E<<1|e>>>31),g=Q^(e<<1|E>>>31),A[2]^=I,A[3]^=g,A[12]^=I,A[13]^=g,A[22]^=I,A[23]^=g,A[32]^=I,A[33]^=g,A[42]^=I,A[43]^=g,I=i^(n<<1|o>>>31),g=B^(o<<1|n>>>31),A[4]^=I,A[5]^=g,A[14]^=I,A[15]^=g,A[24]^=I,A[25]^=g,A[34]^=I,A[35]^=g,A[44]^=I,A[45]^=g,I=E^(r<<1|h>>>31),g=e^(h<<1|r>>>31),A[6]^=I,A[7]^=g,A[16]^=I,A[17]^=g,A[26]^=I,A[27]^=g,A[36]^=I,A[37]^=g,A[46]^=I,A[47]^=g,I=n^(t<<1|Q>>>31),g=o^(Q<<1|t>>>31),A[8]^=I,A[9]^=g,A[18]^=I,A[19]^=g,A[28]^=I,A[29]^=g,A[38]^=I,A[39]^=g,A[48]^=I,A[49]^=g,s=A[0],w=A[1],O=A[11]<<4|A[10]>>>28,W=A[10]<<4|A[11]>>>28,U=A[20]<<3|A[21]>>>29,m=A[21]<<3|A[20]>>>29,BA=A[31]<<9|A[30]>>>23,EA=A[30]<<9|A[31]>>>23,X=A[40]<<18|A[41]>>>14,Z=A[41]<<18|A[40]>>>14,N=A[2]<<1|A[3]>>>31,S=A[3]<<1|A[2]>>>31,f=A[13]<<12|A[12]>>>20,D=A[12]<<12|A[13]>>>20,j=A[22]<<10|A[23]>>>22,z=A[23]<<10|A[22]>>>22,L=A[33]<<13|A[32]>>>19,b=A[32]<<13|A[33]>>>19,eA=A[42]<<2|A[43]>>>30,nA=A[43]<<2|A[42]>>>30,IA=A[5]<<30|A[4]>>>2,gA=A[4]<<30|A[5]>>>2,R=A[14]<<6|A[15]>>>26,v=A[15]<<6|A[14]>>>26,c=A[25]<<11|A[24]>>>21,y=A[24]<<11|A[25]>>>21,T=A[34]<<15|A[35]>>>17,_=A[35]<<15|A[34]>>>17,k=A[45]<<29|A[44]>>>3,J=A[44]<<29|A[45]>>>3,p=A[6]<<28|A[7]>>>4,G=A[7]<<28|A[6]>>>4,CA=A[17]<<23|A[16]>>>9,tA=A[16]<<23|A[17]>>>9,Y=A[26]<<25|A[27]>>>7,P=A[27]<<25|A[26]>>>7,u=A[36]<<21|A[37]>>>11,l=A[37]<<21|A[36]>>>11,$=A[47]<<24|A[46]>>>8,AA=A[46]<<24|A[47]>>>8,V=A[8]<<27|A[9]>>>5,K=A[9]<<27|A[8]>>>5,H=A[18]<<20|A[19]>>>12,d=A[19]<<20|A[18]>>>12,QA=A[29]<<7|A[28]>>>25,iA=A[28]<<7|A[29]>>>25,q=A[38]<<8|A[39]>>>24,x=A[39]<<8|A[38]>>>24,F=A[48]<<14|A[49]>>>18,M=A[49]<<14|A[48]>>>18,A[0]=s^~f&c,A[1]=w^~D&y,A[10]=p^~H&U,A[11]=G^~d&m,A[20]=N^~R&Y,A[21]=S^~v&P,A[30]=V^~O&j,A[31]=K^~W&z,A[40]=IA^~CA&QA,A[41]=gA^~tA&iA,A[2]=f^~c&u,A[3]=D^~y&l,A[12]=H^~U&L,A[13]=d^~m&b,A[22]=R^~Y&q,A[23]=v^~P&x,A[32]=O^~j&T,A[33]=W^~z&_,A[42]=CA^~QA&BA,A[43]=tA^~iA&EA,A[4]=c^~u&F,A[5]=y^~l&M,A[14]=U^~L&k,A[15]=m^~b&J,A[24]=Y^~q&X,A[25]=P^~x&Z,A[34]=j^~T&$,A[35]=z^~_&AA,A[44]=QA^~BA&eA,A[45]=iA^~EA&nA,A[6]=u^~F&s,A[7]=l^~M&w,A[16]=L^~k&p,A[17]=b^~J&G,A[26]=q^~X&N,A[27]=x^~Z&S,A[36]=T^~$&V,A[37]=_^~AA&K,A[46]=BA^~eA&IA,A[47]=EA^~nA&gA,A[8]=F^~s&f,A[9]=M^~w&D,A[18]=k^~p&H,A[19]=J^~G&d,A[28]=X^~N&R,A[29]=Z^~S&v,A[38]=$^~V&O,A[39]=AA^~K&W,A[48]=eA^~IA&CA,A[49]=nA^~gA&tA,A[0]^=a[C],A[1]^=a[C+1]};if(Q)A.exports=F;else for(p=0;p3*E.domainSize-4&&!n.isZero(I))throw new Error("T Polynomial is not divisible")}g&&g.debug("ifft Tz");const G=await n.ifft(F);for(let A=0;A<4*E.domainSize;A++){const I=G.slice(A*o,(A+1)*o);if(A>3*E.domainSize+5){if(!n.isZero(I))throw new Error("Tz Polynomial is not well calculated")}else p.set(n.add(p.slice(A*o,(A+1)*o),I),A*o)}function d(A,I,g,C,t){let Q,i;const B=n.mul(A,I),E=n.mul(A,C),e=n.mul(g,I);Q=B;let a=n.mul(g,C);return i=n.add(E,e),t&&(i=n.add(i,n.mul(h[t],a))),[Q,i]}function L(A,I,g,C,t,Q,i,B,E){let e,a;const o=n.mul(A,I),r=n.mul(A,Q),s=n.mul(t,I),D=n.mul(t,Q),c=n.mul(g,C),y=n.mul(g,B),u=n.mul(i,C),l=n.mul(i,B);e=n.mul(o,c);let F=n.mul(s,c);F=n.add(F,n.mul(r,c)),F=n.add(F,n.mul(o,u)),F=n.add(F,n.mul(o,y));let M=n.mul(D,c);M=n.add(M,n.mul(s,u)),M=n.add(M,n.mul(s,y)),M=n.add(M,n.mul(r,u)),M=n.add(M,n.mul(r,y)),M=n.add(M,n.mul(o,l));let p=n.mul(r,l);p=n.add(p,n.mul(s,l)),p=n.add(p,n.mul(D,y)),p=n.add(p,n.mul(D,u));let G=n.mul(D,l);return a=F,E&&(a=n.add(a,n.mul(h[E],M)),a=n.add(a,n.mul(w[E],p)),a=n.add(a,n.mul(f[E],G))),[e,a]}H=p.slice(0,(3*E.domainSize+6)*o),U.T1=await x(p.slice(0,E.domainSize*o),"multiexp T1"),U.T2=await x(p.slice(E.domainSize*o,2*E.domainSize*o),"multiexp T2"),U.T3=await x(p.slice(2*E.domainSize*o,(3*E.domainSize+6)*o),"multiexp T3")}(),await async function(){const A=new VA(E.domainSize*o);await i.readToBuffer(A,0,E.domainSize*o,B[7][0].p);const I=new VA(E.domainSize*o);await i.readToBuffer(I,0,E.domainSize*o,B[8][0].p);const C=new VA(E.domainSize*o);await i.readToBuffer(C,0,E.domainSize*o,B[9][0].p);const t=new VA(E.domainSize*o);await i.readToBuffer(t,0,E.domainSize*o,B[10][0].p);const Q=new VA(E.domainSize*o);await i.readToBuffer(Q,0,E.domainSize*o,B[11][0].p);const e=new VA(E.domainSize*o);await i.readToBuffer(e,0,E.domainSize*o,B[12][0].p+10*E.domainSize*o);const r=new Uint8Array(2*a.F.n8*3);a.toRprUncompressed(r,0,U.T1),a.toRprUncompressed(r,2*a.F.n8,U.T2),a.toRprUncompressed(r,4*a.F.n8,U.T3),N.xi=Y(r),g&&g.debug("xi: "+n.toString(N.xi));U.eval_a=P(F,N.xi),U.eval_b=P(M,N.xi),U.eval_c=P(p,N.xi),U.eval_s1=P(b,N.xi),U.eval_s2=P(k,N.xi),U.eval_t=P(H,N.xi),U.eval_zw=P(G,n.mul(N.xi,n.w[E.power]));const h=n.mul(U.eval_a,U.eval_b);let s=U.eval_a;const w=n.mul(N.beta,N.xi);s=n.add(s,w),s=n.add(s,N.gamma);let f=U.eval_b;f=n.add(f,n.mul(w,E.k1)),f=n.add(f,N.gamma);let D=U.eval_c;D=n.add(D,n.mul(w,E.k2)),D=n.add(D,N.gamma);const c=n.mul(n.mul(n.mul(s,f),D),N.alpha);let y=U.eval_a;y=n.add(y,n.mul(N.beta,U.eval_s1)),y=n.add(y,N.gamma);let u=U.eval_b;u=n.add(u,n.mul(N.beta,U.eval_s2)),u=n.add(u,N.gamma);let l=n.mul(y,u);l=n.mul(l,N.beta),l=n.mul(l,U.eval_zw),l=n.mul(l,N.alpha),N.xim=N.xi;for(let A=0;A=0;t--)C=n.add(n.mul(C,I),A.slice(t*o,(t+1)*o));return C}function q(A,I){const g=A.byteLength/o,C=new VA(g*o);C.set(n.zero,(g-1)*o),C.set(A.slice((g-1)*o,g*o),(g-2)*o);for(let t=g-3;t>=0;t--)C.set(n.add(A.slice((t+1)*o,(t+2)*o),n.mul(I,C.slice((t+1)*o,(t+2)*o))),t*o);if(!n.eq(A.slice(0,o),n.mul(n.neg(I),C.slice(0,o))))throw new Error("Polinomial does not divide");return C}async function x(A,I){const C=A.byteLength/o,t=J.slice(0,C*e.G1.F.n8*2),Q=await e.Fr.batchFromMontgomery(A);let i=await e.G1.multiExpAffine(t,Q,g,I);return i=e.G1.toAffine(i),i}async function X(A,I){I=I||[];let g=await n.ifft(A);const C=new VA(o*E.domainSize*4);C.set(g,0);const t=new VA(o*(E.domainSize+I.length));t.set(g,0);for(let A=0;A>1),g=A.slice(A.length>>1),C=Q(I),t=Q(g),B=C[0],E=t[0],e=c++,n=i.Fr.zero,a=h.neg(C[1]),o=h.neg(t[1]),r=i.Fr.one,s=i.Fr.zero;return f.push([B,E,e,n,a,o,r,s]),D.push([B,E,C[1],t[1]]),[e,i.Fr.one]}for(let A=1;A<=y;A++){const I=A,g=0,C=0,t=i.Fr.zero,Q=i.Fr.one,B=i.Fr.zero,E=i.Fr.zero,e=i.Fr.zero;f.push([I,g,C,t,Q,B,E,e])}for(let A=0;AB)return C&&C.error(`circuit too big for this power of tau ceremony. ${f.length} > 2**${B}`),-1;if(!Q[12])return C&&C.error("Powers of tau is not prepared."),-1;const M=new VA(F*a),p=Q[12][0].p+(2**l-1)*a;await t.readToBuffer(M,0,F*a,p);const[G,H]=function(){let A=h.two;for(;g(A,[],l);)h.add(A,h.one);let I=h.add(A,h.one);for(;g(I,[A],l);)h.add(I,h.one);return[A,I];function g(A,I,g){const C=2**g;let t=h.one;for(let Q=0;Q>5,this.byteCount=this.blockCount<<2,this.outputBlocks=a>>5,this.extraBytes=(31&a)>>3;for(var i=0;i<50;++i)this.s[i]=0}function P(t,e,a){G.call(this,t,e,a)}G.prototype.update=function(t){if(this.finalized)throw new Error("finalize already called");var a,i=typeof t;if("string"!==i){if("object"!==i)throw new Error(e);if(null===t)throw new Error(e);if(r&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||r&&ArrayBuffer.isView(t)))throw new Error(e);a=!0}for(var o,n,c=this.blocks,l=this.byteCount,s=t.length,u=this.blockCount,g=0,f=this.s;g>2]|=t[g]<>2]|=n<>2]|=(192|n>>6)<>2]|=(128|63&n)<=57344?(c[o>>2]|=(224|n>>12)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<>2]|=(240|n>>18)<>2]|=(128|n>>12&63)<>2]|=(128|n>>6&63)<>2]|=(128|63&n)<=l){for(this.start=o-l,this.block=c[u],o=0;o>=8);a>0;)o.unshift(a),a=255&(t>>=8),++i;return e?o.push(i):o.unshift(i),this.update(o),o.length},G.prototype.encodeString=function(t){var a,i=typeof t;if("string"!==i){if("object"!==i)throw new Error(e);if(null===t)throw new Error(e);if(r&&t.constructor===ArrayBuffer)t=new Uint8Array(t);else if(!(Array.isArray(t)||r&&ArrayBuffer.isView(t)))throw new Error(e);a=!0}var o=0,n=t.length;if(a)o=n;else for(var c=0;c=57344?o+=3:(l=65536+((1023&l)<<10|1023&t.charCodeAt(++c)),o+=4)}return o+=this.encode(8*o),this.update(t),o},G.prototype.bytepad=function(t,e){for(var a=this.encode(e),i=0;i>2]|=this.padding[3&e],this.lastByteIndex===this.byteCount)for(t[0]=t[a],e=1;e>4&15]+c[15&t]+c[t>>12&15]+c[t>>8&15]+c[t>>20&15]+c[t>>16&15]+c[t>>28&15]+c[t>>24&15];r%e==0&&(O(a),n=0)}return o&&(t=a[n],l+=c[t>>4&15]+c[15&t],o>1&&(l+=c[t>>12&15]+c[t>>8&15]),o>2&&(l+=c[t>>20&15]+c[t>>16&15])),l},G.prototype.arrayBuffer=function(){this.finalize();var t,e=this.blockCount,a=this.s,i=this.outputBlocks,o=this.extraBytes,n=0,r=0,c=this.outputBits>>3;t=o?new ArrayBuffer(i+1<<2):new ArrayBuffer(c);for(var l=new Uint32Array(t);r>8&255,l[t+2]=e>>16&255,l[t+3]=e>>24&255;c%a==0&&O(i)}return n&&(t=c<<2,e=i[r],l[t]=255&e,n>1&&(l[t+1]=e>>8&255),n>2&&(l[t+2]=e>>16&255)),l},P.prototype=new G,P.prototype.finalize=function(){return this.encode(this.outputBits,!0),G.prototype.finalize.call(this)};var O=function(t){var e,a,i,o,n,r,c,l,s,d,g,f,_,p,h,m,L,w,A,b,y,I,C,F,x,v,E,B,S,G,P,O,U,z,q,Q,M,k,R,N,T,D,K,V,j,H,$,Z,Y,J,W,X,tt,et,at,it,ot,nt,rt,ct,lt,st,dt;for(i=0;i<48;i+=2)o=t[0]^t[10]^t[20]^t[30]^t[40],n=t[1]^t[11]^t[21]^t[31]^t[41],r=t[2]^t[12]^t[22]^t[32]^t[42],c=t[3]^t[13]^t[23]^t[33]^t[43],l=t[4]^t[14]^t[24]^t[34]^t[44],s=t[5]^t[15]^t[25]^t[35]^t[45],d=t[6]^t[16]^t[26]^t[36]^t[46],g=t[7]^t[17]^t[27]^t[37]^t[47],e=(f=t[8]^t[18]^t[28]^t[38]^t[48])^(r<<1|c>>>31),a=(_=t[9]^t[19]^t[29]^t[39]^t[49])^(c<<1|r>>>31),t[0]^=e,t[1]^=a,t[10]^=e,t[11]^=a,t[20]^=e,t[21]^=a,t[30]^=e,t[31]^=a,t[40]^=e,t[41]^=a,e=o^(l<<1|s>>>31),a=n^(s<<1|l>>>31),t[2]^=e,t[3]^=a,t[12]^=e,t[13]^=a,t[22]^=e,t[23]^=a,t[32]^=e,t[33]^=a,t[42]^=e,t[43]^=a,e=r^(d<<1|g>>>31),a=c^(g<<1|d>>>31),t[4]^=e,t[5]^=a,t[14]^=e,t[15]^=a,t[24]^=e,t[25]^=a,t[34]^=e,t[35]^=a,t[44]^=e,t[45]^=a,e=l^(f<<1|_>>>31),a=s^(_<<1|f>>>31),t[6]^=e,t[7]^=a,t[16]^=e,t[17]^=a,t[26]^=e,t[27]^=a,t[36]^=e,t[37]^=a,t[46]^=e,t[47]^=a,e=d^(o<<1|n>>>31),a=g^(n<<1|o>>>31),t[8]^=e,t[9]^=a,t[18]^=e,t[19]^=a,t[28]^=e,t[29]^=a,t[38]^=e,t[39]^=a,t[48]^=e,t[49]^=a,p=t[0],h=t[1],H=t[11]<<4|t[10]>>>28,$=t[10]<<4|t[11]>>>28,B=t[20]<<3|t[21]>>>29,S=t[21]<<3|t[20]>>>29,ct=t[31]<<9|t[30]>>>23,lt=t[30]<<9|t[31]>>>23,D=t[40]<<18|t[41]>>>14,K=t[41]<<18|t[40]>>>14,z=t[2]<<1|t[3]>>>31,q=t[3]<<1|t[2]>>>31,m=t[13]<<12|t[12]>>>20,L=t[12]<<12|t[13]>>>20,Z=t[22]<<10|t[23]>>>22,Y=t[23]<<10|t[22]>>>22,G=t[33]<<13|t[32]>>>19,P=t[32]<<13|t[33]>>>19,st=t[42]<<2|t[43]>>>30,dt=t[43]<<2|t[42]>>>30,et=t[5]<<30|t[4]>>>2,at=t[4]<<30|t[5]>>>2,Q=t[14]<<6|t[15]>>>26,M=t[15]<<6|t[14]>>>26,w=t[25]<<11|t[24]>>>21,A=t[24]<<11|t[25]>>>21,J=t[34]<<15|t[35]>>>17,W=t[35]<<15|t[34]>>>17,O=t[45]<<29|t[44]>>>3,U=t[44]<<29|t[45]>>>3,F=t[6]<<28|t[7]>>>4,x=t[7]<<28|t[6]>>>4,it=t[17]<<23|t[16]>>>9,ot=t[16]<<23|t[17]>>>9,k=t[26]<<25|t[27]>>>7,R=t[27]<<25|t[26]>>>7,b=t[36]<<21|t[37]>>>11,y=t[37]<<21|t[36]>>>11,X=t[47]<<24|t[46]>>>8,tt=t[46]<<24|t[47]>>>8,V=t[8]<<27|t[9]>>>5,j=t[9]<<27|t[8]>>>5,v=t[18]<<20|t[19]>>>12,E=t[19]<<20|t[18]>>>12,nt=t[29]<<7|t[28]>>>25,rt=t[28]<<7|t[29]>>>25,N=t[38]<<8|t[39]>>>24,T=t[39]<<8|t[38]>>>24,I=t[48]<<14|t[49]>>>18,C=t[49]<<14|t[48]>>>18,t[0]=p^~m&w,t[1]=h^~L&A,t[10]=F^~v&B,t[11]=x^~E&S,t[20]=z^~Q&k,t[21]=q^~M&R,t[30]=V^~H&Z,t[31]=j^~$&Y,t[40]=et^~it&nt,t[41]=at^~ot&rt,t[2]=m^~w&b,t[3]=L^~A&y,t[12]=v^~B&G,t[13]=E^~S&P,t[22]=Q^~k&N,t[23]=M^~R&T,t[32]=H^~Z&J,t[33]=$^~Y&W,t[42]=it^~nt&ct,t[43]=ot^~rt<,t[4]=w^~b&I,t[5]=A^~y&C,t[14]=B^~G&O,t[15]=S^~P&U,t[24]=k^~N&D,t[25]=R^~T&K,t[34]=Z^~J&X,t[35]=Y^~W&tt,t[44]=nt^~ct&st,t[45]=rt^~lt&dt,t[6]=b^~I&p,t[7]=y^~C&h,t[16]=G^~O&F,t[17]=P^~U&x,t[26]=N^~D&z,t[27]=T^~K&q,t[36]=J^~X&V,t[37]=W^~tt&j,t[46]=ct^~st&et,t[47]=lt^~dt&at,t[8]=I^~p&m,t[9]=C^~h&L,t[18]=O^~F&v,t[19]=U^~x&E,t[28]=D^~z&Q,t[29]=K^~q&M,t[38]=X^~V&H,t[39]=tt^~j&$,t[48]=st^~et&it,t[49]=dt^~at&ot,t[0]^=u[i],t[1]^=u[i+1]};if(n)t.exports=I;else for(F=0;F3*l.domainSize-4&&!d.isZero(e))throw new Error("T Polynomial is not divisible")}a&&a.debug("ifft Tz");const x=await d.ifft(I);for(let t=0;t<4*l.domainSize;t++){const e=x.slice(t*g,(t+1)*g);if(t>3*l.domainSize+5){if(!d.isZero(e))throw new Error("Tz Polynomial is not well calculated")}else F.set(d.add(F.slice(t*g,(t+1)*g),e),t*g)}function E(t,e,a,i,o){let n,r;const c=d.mul(t,e),l=d.mul(t,i),s=d.mul(a,e);n=c;let u=d.mul(a,i);return r=d.add(l,s),o&&(r=d.add(r,d.mul(_[o],u))),[n,r]}function G(t,e,a,i,o,n,r,c,l){let s,u;const g=d.mul(t,e),f=d.mul(t,n),p=d.mul(o,e),L=d.mul(o,n),w=d.mul(a,i),A=d.mul(a,c),b=d.mul(r,i),y=d.mul(r,c);s=d.mul(g,w);let I=d.mul(p,w);I=d.add(I,d.mul(f,w)),I=d.add(I,d.mul(g,b)),I=d.add(I,d.mul(g,A));let C=d.mul(L,w);C=d.add(C,d.mul(p,b)),C=d.add(C,d.mul(p,A)),C=d.add(C,d.mul(f,b)),C=d.add(C,d.mul(f,A)),C=d.add(C,d.mul(g,y));let F=d.mul(f,y);F=d.add(F,d.mul(p,y)),F=d.add(F,d.mul(L,A)),F=d.add(F,d.mul(L,b));let x=d.mul(L,y);return u=I,l&&(u=d.add(u,d.mul(_[l],C)),u=d.add(u,d.mul(h[l],F)),u=d.add(u,d.mul(m[l],x))),[s,u]}v=F.slice(0,(3*l.domainSize+6)*g),B.T1=await T(F.slice(0,l.domainSize*g),"multiexp T1"),B.T2=await T(F.slice(l.domainSize*g,2*l.domainSize*g),"multiexp T2"),B.T3=await T(F.slice(2*l.domainSize*g,(3*l.domainSize+6)*g),"multiexp T3")}(),await async function(){const t=new fe(l.domainSize*g);await r.readToBuffer(t,0,l.domainSize*g,c[7][0].p);const e=new fe(l.domainSize*g);await r.readToBuffer(e,0,l.domainSize*g,c[8][0].p);const i=new fe(l.domainSize*g);await r.readToBuffer(i,0,l.domainSize*g,c[9][0].p);const o=new fe(l.domainSize*g);await r.readToBuffer(o,0,l.domainSize*g,c[10][0].p);const n=new fe(l.domainSize*g);await r.readToBuffer(n,0,l.domainSize*g,c[11][0].p);const s=new fe(l.domainSize*g);await r.readToBuffer(s,0,l.domainSize*g,c[12][0].p+10*l.domainSize*g);const f=new Uint8Array(2*u.F.n8*3);u.toRprUncompressed(f,0,B.T1),u.toRprUncompressed(f,2*u.F.n8,B.T2),u.toRprUncompressed(f,4*u.F.n8,B.T3),z.xi=k(f),a&&a.debug("xi: "+d.toString(z.xi));B.eval_a=R(I,z.xi),B.eval_b=R(C,z.xi),B.eval_c=R(F,z.xi),B.eval_s1=R(P,z.xi),B.eval_s2=R(O,z.xi),B.eval_t=R(v,z.xi),B.eval_zw=R(x,d.mul(z.xi,d.w[l.power]));const _=d.mul(B.eval_a,B.eval_b);let p=B.eval_a;const h=d.mul(z.beta,z.xi);p=d.add(p,h),p=d.add(p,z.gamma);let m=B.eval_b;m=d.add(m,d.mul(h,l.k1)),m=d.add(m,z.gamma);let L=B.eval_c;L=d.add(L,d.mul(h,l.k2)),L=d.add(L,z.gamma);const w=d.mul(d.mul(d.mul(p,m),L),z.alpha);let A=B.eval_a;A=d.add(A,d.mul(z.beta,B.eval_s1)),A=d.add(A,z.gamma);let b=B.eval_b;b=d.add(b,d.mul(z.beta,B.eval_s2)),b=d.add(b,z.gamma);let y=d.mul(A,b);y=d.mul(y,z.beta),y=d.mul(y,B.eval_zw),y=d.mul(y,z.alpha),z.xim=z.xi;for(let t=0;t=0;o--)i=d.add(d.mul(i,e),t.slice(o*g,(o+1)*g));return i}function N(t,e){const a=t.byteLength/g,i=new fe(a*g);i.set(d.zero,(a-1)*g),i.set(t.slice((a-1)*g,a*g),(a-2)*g);for(let o=a-3;o>=0;o--)i.set(d.add(t.slice((o+1)*g,(o+2)*g),d.mul(e,i.slice((o+1)*g,(o+2)*g))),o*g);if(!d.eq(t.slice(0,g),d.mul(d.neg(e),i.slice(0,g))))throw new Error("Polinomial does not divide");return i}async function T(t,e){const i=t.byteLength/g,o=U.slice(0,i*s.G1.F.n8*2),n=await s.Fr.batchFromMontgomery(t);let r=await s.G1.multiExpAffine(o,n,a,e);return r=s.G1.toAffine(r),r}async function D(t,e){e=e||[];let a=await d.ifft(t);const i=new fe(g*l.domainSize*4);i.set(a,0);const o=new fe(g*(l.domainSize+e.length));o.set(a,0);for(let t=0;t>1),a=t.slice(t.length>>1),i=n(e),o=n(a),c=i[0],l=o[0],s=w++,d=r.Fr.zero,u=_.neg(i[1]),g=_.neg(o[1]),f=r.Fr.one,p=r.Fr.zero;return m.push([c,l,s,d,u,g,f,p]),L.push([c,l,i[1],o[1]]),[s,r.Fr.one]}for(let t=1;t<=A;t++){const e=t,a=0,i=0,o=r.Fr.zero,n=r.Fr.one,c=r.Fr.zero,l=r.Fr.zero,s=r.Fr.zero;m.push([e,a,i,o,n,c,l,s])}for(let t=0;tc)return i&&i.error(`circuit too big for this power of tau ceremony. ${m.length} > 2**${c}`),-1;if(!n[12])return i&&i.error("Powers of tau is not prepared."),-1;const C=new fe(I*u),F=n[12][0].p+(2**y-1)*u;await o.readToBuffer(C,0,I*u,F);const[x,v]=function(){let t=_.two;for(;a(t,[],y);)_.add(t,_.one);let e=_.add(t,_.one);for(;a(e,[t],y);)_.add(e,_.one);return[t,e];function a(t,e,a){const i=2**a;let o=_.one;for(let n=0;n=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", - "dev": true + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } }, "node_modules/@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" }, "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "node": ">=6.9.0" } }, "node_modules/@iden3/bigarray": { @@ -132,18 +79,18 @@ "integrity": "sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g==" }, "node_modules/@iden3/binfileutils": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@iden3/binfileutils/-/binfileutils-0.0.8.tgz", - "integrity": "sha512-/GqTsujUssGuQY+sd/XaLrA+OiCwzm+6yH28C57QQDWCHET2Logry9fGxU10n6XKdhCQBjZ7T/YMQkLwwkpRTQ==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@iden3/binfileutils/-/binfileutils-0.0.10.tgz", + "integrity": "sha512-mDtBiKYcHs9K8vnznd8md0In6e5hL6i7ITzlHQ6Xxx6kvGAgB8UZeHJ0KswS6IJK4x9v2mwHsh5kIDl245cQZg==", "dependencies": { "fastfile": "0.0.19", - "ffjavascript": "^0.2.30" + "ffjavascript": "^0.2.48" } }, "node_modules/@rollup/plugin-commonjs": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz", - "integrity": "sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", + "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -156,28 +103,25 @@ }, "engines": { "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^2.30.0" } }, "node_modules/@rollup/plugin-inject": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.2.tgz", - "integrity": "sha512-TSLMA8waJ7Dmgmoc8JfPnwUwVZgLjjIAM6MqeIFqPO2ODK36JqE0Cf2F54UTgCUuW8da93Mvoj75a6KAVWgylw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", + "integrity": "sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==", "dev": true, "dependencies": { - "@rollup/pluginutils": "^3.0.4", - "estree-walker": "^1.0.1", - "magic-string": "^0.25.5" + "@rollup/pluginutils": "^3.1.0", + "estree-walker": "^2.0.1", + "magic-string": "^0.25.7" }, "peerDependencies": { "rollup": "^1.20.0 || ^2.0.0" } }, - "node_modules/@rollup/plugin-inject/node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, "node_modules/@rollup/plugin-json": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", @@ -185,12 +129,15 @@ "dev": true, "dependencies": { "@rollup/pluginutils": "^3.0.8" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" } }, "node_modules/@rollup/plugin-node-resolve": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.0.tgz", - "integrity": "sha512-ouBBppRdWJKCllDXGzJ7ZIkYbaq+5TmyP0smt1vdJCFfoZhLi31vhpmjLhyo8lreHf4RoeSNllaWrvSqHpHRog==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -202,23 +149,32 @@ }, "engines": { "node": ">= 10.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, "node_modules/@rollup/plugin-replace": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz", - "integrity": "sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, "dependencies": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" } }, "node_modules/@rollup/plugin-virtual": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-2.0.3.tgz", "integrity": "sha512-pw6ziJcyjZtntQ//bkad9qXaBx665SgEL8C8KI5wO8G5iU5MPxvdWrQyVaAvjojGm9tJoS8M9Z/EEepbqieYmw==", - "dev": true + "dev": true, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } }, "node_modules/@rollup/pluginutils": { "version": "3.1.0", @@ -232,6 +188,9 @@ }, "engines": { "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" } }, "node_modules/@rollup/pluginutils/node_modules/estree-walker": { @@ -247,9 +206,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "14.14.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", - "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.10.tgz", + "integrity": "sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==", "dev": true }, "node_modules/@types/resolve": { @@ -274,10 +233,13 @@ } }, "node_modules/acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } }, "node_modules/ajv": { "version": "6.12.6", @@ -289,54 +251,72 @@ "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true, + "engines": { + "node": ">=6" } }, "node_modules/ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "dependencies": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, "engines": { "node": ">=4" } }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -378,15 +358,20 @@ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" }, + "node_modules/b4a": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.3.1.tgz", + "integrity": "sha512-ULHjbJGjZcdA5bugDNAAcMA6GWXX/9N10I6AQc14TH+Sr7bMfT+NHuJnOFGPJWLtzYa6Tz+PnFD2D/1bISLLZQ==" + }, "node_modules/balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==", + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==", "engines": { "node": ">=0.6" } @@ -401,17 +386,18 @@ } }, "node_modules/blake2b-wasm": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.3.0.tgz", - "integrity": "sha512-opFKx7sIXpKiG2/N24km9mJObgLOpu0JRf8CDgE/orn8LI/F7pUOSuZVSdZTJ7BMyFJunNdqoSInjwx1ty/z8A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", + "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", "dependencies": { + "b4a": "^1.0.1", "nanoassert": "^2.0.0" } }, "node_modules/blakejs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz", - "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", + "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -441,9 +427,9 @@ "dev": true }, "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "node_modules/builtin-modules": { @@ -453,6 +439,9 @@ "dev": true, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/call-bind": { @@ -463,6 +452,9 @@ "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/callsites": { @@ -484,16 +476,16 @@ } }, "node_modules/chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.1.0", + "pathval": "^1.1.1", "type-detect": "^4.0.5" }, "engines": { @@ -501,16 +493,16 @@ } }, "node_modules/chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, "node_modules/chardet": { @@ -528,13 +520,33 @@ "node": "*" } }, - "node_modules/circom_runtime": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.14.tgz", - "integrity": "sha512-MLbHHZVkYuWyZiYErLmT5y0qbTRXDD1NhaDyLhQNF0JCb6brx8r/VJDevwne7sT1re7qHpHCQAL5rhqByQ7obQ==", + "node_modules/chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, "dependencies": { - "ffjavascript": "0.2.39", - "fnv-plus": "^1.3.1" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.1.1" + } + }, + "node_modules/circom_runtime": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.17.tgz", + "integrity": "sha512-FCOCPz7ZbqL4TpzBlISRZ7/fcYHkdZz0DMfju1DYHiRU/+ZzJQfDS8JYENlnb9PO+HsLTr6/QtzphqvnEBp9AQ==", + "dependencies": { + "ffjavascript": "0.2.48" }, "bin": { "calcwit": "calcwit.js" @@ -572,13 +584,19 @@ "wrap-ansi": "^5.1.0" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/cliui/node_modules/string-width": { @@ -595,35 +613,18 @@ "node": ">=6" } }, - "node_modules/cliui/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "node_modules/commander": { "version": "2.20.3", @@ -667,28 +668,21 @@ "semver": "bin/semver" } }, - "node_modules/cross-spawn/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, "node_modules/debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "dependencies": { "ms": "2.1.2" }, "engines": { "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/decamelize": { @@ -713,9 +707,9 @@ } }, "node_modules/deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "node_modules/deepmerge": { @@ -739,6 +733,15 @@ "node": ">= 0.4" } }, + "node_modules/diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -766,34 +769,43 @@ } }, "node_modules/emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "node_modules/es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-abstract/node_modules/object.assign": { @@ -809,6 +821,9 @@ }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/es-to-primitive": { @@ -823,6 +838,9 @@ }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/escalade": { @@ -891,6 +909,9 @@ }, "engines": { "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-scope": { @@ -927,89 +948,6 @@ "node": ">=4" } }, - "node_modules/eslint/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/eslint/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/eslint/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/eslint/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/espree": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", @@ -1038,9 +976,9 @@ } }, "node_modules/esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -1050,9 +988,9 @@ } }, "node_modules/esquery/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -1071,9 +1009,9 @@ } }, "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, "engines": { "node": ">=4.0" @@ -1141,13 +1079,14 @@ "integrity": "sha512-tz9nWR5KYb6eR2odFQ7oxqEkx8F3YQZ6NBJoJR92YEG3DqYOqyxMck8PKvTVNKx3uwvOqGnLXNScnqpdHRdHGQ==" }, "node_modules/ffjavascript": { - "version": "0.2.39", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.39.tgz", - "integrity": "sha512-9ewb5keKHL1owKTxCK7sDuA34SPJxnznWqdJgwBW51moCvg+wf9L0W5mcxm8qMUxt2OE/KjBQUKmYLaKyNNrPw==", + "version": "0.2.48", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.48.tgz", + "integrity": "sha512-uNrWP+odLofNmmO+iCCPi/Xt/sJh1ku3pVKmKWVWCLFfdCP69hvRrogKUIGnsdiINcWn0lGxcEh5oEjStMFXQQ==", "dependencies": { "big-integer": "^1.6.48", - "wasmcurves": "0.0.14", - "web-worker": "^1.0.0" + "wasmbuilder": "^0.0.12", + "wasmcurves": "0.1.0", + "web-worker": "^1.2.0" } }, "node_modules/figures": { @@ -1160,6 +1099,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/file-entry-cache": { @@ -1194,6 +1136,30 @@ "node": ">=8" } }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "dependencies": { + "is-buffer": "~2.0.3" + }, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -1214,11 +1180,6 @@ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, - "node_modules/fnv-plus": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", - "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==" - }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1229,7 +1190,9 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "deprecated": "\"Please update to latest v2.3 or v2.2\"", "dev": true, + "hasInstallScript": true, "optional": true, "os": [ "darwin" @@ -1269,20 +1232,39 @@ } }, "node_modules/get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "dependencies": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -1294,6 +1276,9 @@ }, "engines": { "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { @@ -1318,6 +1303,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/growl": { @@ -1341,22 +1329,48 @@ "node": ">= 0.4.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/he": { @@ -1400,6 +1414,9 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { @@ -1452,55 +1469,122 @@ } }, "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, - "node_modules/inquirer/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "color-convert": "^2.0.1" }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } }, "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -1513,52 +1597,97 @@ "node": ">=8" } }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "engines": { "node": ">=4" } }, "node_modules/is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "dependencies": { "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, "bin": { "is-docker": "cli.js" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-extglob": { @@ -1571,18 +1700,18 @@ } }, "node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true, "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "dependencies": { "is-extglob": "^2.1.1" @@ -1598,12 +1727,15 @@ "dev": true }, "node_modules/is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-number": { @@ -1615,6 +1747,21 @@ "node": ">=0.12.0" } }, + "node_modules/is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -1625,27 +1772,70 @@ } }, "node_modules/is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "dependencies": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "dependencies": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-wsl": { @@ -1683,62 +1873,6 @@ "node": "*" } }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jake/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/jake/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/jake/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "node_modules/jake/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "engines": { - "node": ">=4" - } - }, - "node_modules/jake/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/jest-worker": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", @@ -1753,6 +1887,27 @@ "node": ">= 10.13.0" } }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/js-sha3": { "version": "0.8.0", "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", @@ -1765,9 +1920,9 @@ "dev": true }, "node_modules/js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "dependencies": { "argparse": "^1.0.7", @@ -1802,12 +1957,37 @@ "node": ">= 0.8.0" } }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/logplease": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/logplease/-/logplease-1.2.15.tgz", @@ -1903,133 +2083,22 @@ }, "engines": { "node": ">= 8.10.0" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" }, - "engines": { - "node": ">=4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" } }, - "node_modules/mocha/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/chalk/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "dependencies": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.1.1" - } - }, - "node_modules/mocha/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/mocha/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/mocha/node_modules/debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "dependencies": { "ms": "^2.1.1" } }, - "node_modules/mocha/node_modules/diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "dependencies": { - "is-buffer": "~2.0.3" - }, - "bin": { - "flat": "cli.js" - } - }, "node_modules/mocha/node_modules/glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -2047,15 +2116,6 @@ "node": "*" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/mocha/node_modules/js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -2069,82 +2129,12 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/mocha/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/mocha/node_modules/ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "node_modules/mocha/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/mocha/node_modules/readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "dependencies": { - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/mocha/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -2166,32 +2156,6 @@ "node": ">=6" } }, - "node_modules/mocha/node_modules/which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "which": "bin/which" - } - }, - "node_modules/mocha/node_modules/yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "dependencies": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -2210,15 +2174,15 @@ "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" }, "node_modules/nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", - "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true, "bin": { "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": "^10 || ^12 || >=13.7" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, "node_modules/natural-compare": { @@ -2262,10 +2226,13 @@ } }, "node_modules/object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", - "dev": true + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/object-keys": { "version": "1.1.1", @@ -2292,17 +2259,20 @@ } }, "node_modules/object.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.19.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/once": { @@ -2324,12 +2294,15 @@ }, "engines": { "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/open": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.1.tgz", - "integrity": "sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "dependencies": { "is-docker": "^2.0.0", @@ -2337,6 +2310,9 @@ }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/optionator": { @@ -2365,6 +2341,33 @@ "node": ">=0.10.0" } }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -2386,6 +2389,15 @@ "node": ">=6" } }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true, + "engines": { + "node": ">=4" + } + }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -2411,21 +2423,24 @@ "dev": true }, "node_modules/pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true, "engines": { "node": "*" } }, "node_modules/picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, "engines": { "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/prelude-ls": { @@ -2456,14 +2471,14 @@ } }, "node_modules/r1csfile": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.33.tgz", - "integrity": "sha512-aSZa/Vy6avJ146MOewUNRYdDLJCDINZ7aqSt0Zhw4uVrd4TijOz6gBfmckr7tPILaT3RNp7THVpUzeW0++OlJw==", + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.35.tgz", + "integrity": "sha512-n6RTn7KxtfHxw5gjljYBaEuhVkXEQ2sZW1XVan7fwdwvQt9Kd65/A0cy+nNHL4GRGAHEaBMdYj0JOl/3kXln4Q==", "dependencies": { "@iden3/bigarray": "0.0.2", - "@iden3/binfileutils": "0.0.8", + "@iden3/binfileutils": "0.0.10", "fastfile": "0.0.19", - "ffjavascript": "0.2.39" + "ffjavascript": "0.2.48" } }, "node_modules/randombytes": { @@ -2475,6 +2490,18 @@ "safe-buffer": "^5.1.0" } }, + "node_modules/readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "dependencies": { + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/readline": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", @@ -2505,13 +2532,20 @@ "dev": true }, "node_modules/resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-from": { @@ -2549,9 +2583,9 @@ } }, "node_modules/rollup": { - "version": "2.37.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", - "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "version": "2.64.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.64.0.tgz", + "integrity": "sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==", "dev": true, "bin": { "rollup": "dist/bin/rollup" @@ -2560,7 +2594,7 @@ "node": ">=10.0.0" }, "optionalDependencies": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.2" } }, "node_modules/rollup-plugin-terser": { @@ -2573,44 +2607,95 @@ "jest-worker": "^26.2.1", "serialize-javascript": "^4.0.0", "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" } }, - "node_modules/rollup-plugin-terser/node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "node_modules/rollup-plugin-terser/node_modules/acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "optional": true, + "peer": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/rollup-plugin-terser/node_modules/terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "dependencies": { - "randombytes": "^2.1.0" + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "acorn": "^8.5.0" + }, + "peerDependenciesMeta": { + "acorn": { + "optional": true + } } }, "node_modules/rollup-plugin-visualizer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-4.2.0.tgz", - "integrity": "sha512-xjfvoK4x0G7lBT3toMx8K/9tkCEWhRehnSJnn+PLY3Hjk8sNvyo407b68Cd3hdV9j42xcb8HXt0ZrmRi5NWeaQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-4.2.2.tgz", + "integrity": "sha512-10/TsugsaQL5rdynl0lrklBngTtkRBESZdxUJy+3fN+xKqNdg5cr7JQU1OoPx4p5mhQ+nspa6EvX3qc8SsBvnA==", "dev": true, "dependencies": { - "nanoid": "^3.0.1", - "open": "^7.0.3", + "nanoid": "^3.1.22", + "open": "^7.4.2", "source-map": "^0.7.3", - "yargs": "^16.0.3" + "yargs": "^16.2.0" }, "bin": { "rollup-plugin-visualizer": "bin/cli.js" }, "engines": { "node": ">=10" + }, + "peerDependencies": { + "rollup": ">=1.20.0" } }, "node_modules/rollup-plugin-visualizer/node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, "engines": { "node": ">=8" } }, + "node_modules/rollup-plugin-visualizer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, "node_modules/rollup-plugin-visualizer/node_modules/cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -2622,42 +2707,31 @@ "wrap-ansi": "^7.0.0" } }, - "node_modules/rollup-plugin-visualizer/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/rollup-plugin-visualizer/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/rollup-plugin-visualizer/node_modules/string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "node_modules/rollup-plugin-visualizer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, + "node_modules/rollup-plugin-visualizer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "node_modules/rollup-plugin-visualizer/node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "dependencies": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" @@ -2675,12 +2749,15 @@ }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/rollup-plugin-visualizer/node_modules/y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, "engines": { "node": ">=10" @@ -2705,14 +2782,28 @@ } }, "node_modules/rollup-plugin-visualizer/node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, "engines": { "node": ">=10" } }, + "node_modules/rollup/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -2723,9 +2814,9 @@ } }, "node_modules/rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "dependencies": { "tslib": "^1.9.0" @@ -2738,7 +2829,21 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, "node_modules/safer-buffer": { "version": "2.1.2", @@ -2755,6 +2860,15 @@ "semver": "bin/semver.js" } }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -2782,10 +2896,24 @@ "node": ">=0.10.0" } }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "node_modules/slice-ansi": { @@ -2802,33 +2930,15 @@ "node": ">=6" } }, - "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, "engines": { "node": ">=4" } }, - "node_modules/slice-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/slice-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/source-map": { "version": "0.7.3", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", @@ -2839,9 +2949,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "dependencies": { "buffer-from": "^1.0.0", @@ -2870,48 +2980,76 @@ "dev": true }, "node_modules/string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, "node_modules/string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "dependencies": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/strip-json-comments": { @@ -2921,18 +3059,32 @@ "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dependencies": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/table": { @@ -2950,13 +3102,19 @@ "node": ">=6.0.0" } }, - "node_modules/table/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/table/node_modules/string-width": { @@ -2973,35 +3131,6 @@ "node": ">=6" } }, - "node_modules/table/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/terser": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", - "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3074,6 +3203,21 @@ "node": ">=8" } }, + "node_modules/unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3084,24 +3228,60 @@ } }, "node_modules/v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "node_modules/wasmbuilder": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.12.tgz", + "integrity": "sha512-dTMpBgrnLOXrN58i2zakn2ScynsBhq9LfyQIsPz4CyxRF9k1GAORniuqn3xmE9NnI1l7g3iiVCkoB2Cl0/oG8w==", + "dependencies": { + "big-integer": "^1.6.48" + } + }, "node_modules/wasmcurves": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.14.tgz", - "integrity": "sha512-G1iMkxlRaQSdqQ1JrwHcU+awLmwyH6kFKfT8g9obd8MWe+u5oSdFXrODB0zmSI5aGGvJPG+4cAmqCGYv9R+7qg==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.1.0.tgz", + "integrity": "sha512-kIlcgbVUAv2uQ6lGsepGz/m5V40+Z6rvTBkqCYn3Y2+OcXst+UaP4filJYLh/xDxjJl62FFjZZeAnpeli1Y5/Q==", "dependencies": { "big-integer": "^1.6.42", "blakejs": "^1.1.0" } }, "node_modules/web-worker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.0.0.tgz", - "integrity": "sha512-BzuMqeKVkKKwHV6tJuwePFcxYMxvC97D448mXTgh/CxXAB4sRtoV26gRPN+JDxsXRR7QZyioMV9O6NzQaASf7Q==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/which-module": { "version": "2.0.0", @@ -3118,6 +3298,49 @@ "string-width": "^1.0.2 || 2" } }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -3141,42 +3364,21 @@ "node": ">=6" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, "engines": { "node": ">=4" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/wrap-ansi/node_modules/string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", @@ -3191,18 +3393,6 @@ "node": ">=6" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", @@ -3222,9 +3412,9 @@ } }, "node_modules/y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "node_modules/yargs": { @@ -3255,68 +3445,30 @@ "decamelize": "^1.2.0" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "node_modules/yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", "dev": true, "dependencies": { - "locate-path": "^3.0.0" + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" }, "engines": { "node": ">=6" } }, - "node_modules/yargs/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } + "node_modules/yargs/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true }, - "node_modules/yargs/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/yargs/node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true, "engines": { "node": ">=4" @@ -3335,97 +3487,33 @@ "engines": { "node": ">=6" } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "dependencies": { - "ansi-regex": "^4.1.0" - }, - "engines": { - "node": ">=6" - } } }, "dependencies": { "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", "dev": true, "requires": { - "@babel/highlight": "^7.10.4" + "@babel/highlight": "^7.16.7" } }, "@babel/helper-validator-identifier": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", - "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "version": "7.16.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", "dev": true }, "@babel/highlight": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", - "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "version": "7.16.10", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", + "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.10.4", + "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", "js-tokens": "^4.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "@iden3/bigarray": { @@ -3434,18 +3522,18 @@ "integrity": "sha512-Xzdyxqm1bOFF6pdIsiHLLl3HkSLjbhqJHVyqaTxXt3RqXBEnmsUmEW47H7VOi/ak7TdkRpNkxjyK5Zbkm+y52g==" }, "@iden3/binfileutils": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@iden3/binfileutils/-/binfileutils-0.0.8.tgz", - "integrity": "sha512-/GqTsujUssGuQY+sd/XaLrA+OiCwzm+6yH28C57QQDWCHET2Logry9fGxU10n6XKdhCQBjZ7T/YMQkLwwkpRTQ==", + "version": "0.0.10", + "resolved": "https://registry.npmjs.org/@iden3/binfileutils/-/binfileutils-0.0.10.tgz", + "integrity": "sha512-mDtBiKYcHs9K8vnznd8md0In6e5hL6i7ITzlHQ6Xxx6kvGAgB8UZeHJ0KswS6IJK4x9v2mwHsh5kIDl245cQZg==", "requires": { "fastfile": "0.0.19", - "ffjavascript": "^0.2.30" + "ffjavascript": "^0.2.48" } }, "@rollup/plugin-commonjs": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.0.0.tgz", - "integrity": "sha512-/omBIJG1nHQc+bgkYDuLpb/V08QyutP9amOrJRUSlYJZP+b/68gM//D8sxJe3Yry2QnYIr3QjR3x4AlxJEN3GA==", + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-17.1.0.tgz", + "integrity": "sha512-PoMdXCw0ZyvjpCMT5aV4nkL0QywxP29sODQsSGeDpr/oI49Qq9tRtAsb/LbYbDzFlOydVEqHmmZWFtXJEAX9ew==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -3458,22 +3546,14 @@ } }, "@rollup/plugin-inject": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.2.tgz", - "integrity": "sha512-TSLMA8waJ7Dmgmoc8JfPnwUwVZgLjjIAM6MqeIFqPO2ODK36JqE0Cf2F54UTgCUuW8da93Mvoj75a6KAVWgylw==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-inject/-/plugin-inject-4.0.4.tgz", + "integrity": "sha512-4pbcU4J/nS+zuHk+c+OL3WtmEQhqxlZ9uqfjQMQDOHOPld7PsCd8k5LWs8h5wjwJN7MgnAn768F2sDxEP4eNFQ==", "dev": true, "requires": { - "@rollup/pluginutils": "^3.0.4", - "estree-walker": "^1.0.1", - "magic-string": "^0.25.5" - }, - "dependencies": { - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - } + "@rollup/pluginutils": "^3.1.0", + "estree-walker": "^2.0.1", + "magic-string": "^0.25.7" } }, "@rollup/plugin-json": { @@ -3486,9 +3566,9 @@ } }, "@rollup/plugin-node-resolve": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.1.0.tgz", - "integrity": "sha512-ouBBppRdWJKCllDXGzJ7ZIkYbaq+5TmyP0smt1vdJCFfoZhLi31vhpmjLhyo8lreHf4RoeSNllaWrvSqHpHRog==", + "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -3500,9 +3580,9 @@ } }, "@rollup/plugin-replace": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz", - "integrity": "sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.4.2.tgz", + "integrity": "sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==", "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", @@ -3513,7 +3593,8 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/@rollup/plugin-virtual/-/plugin-virtual-2.0.3.tgz", "integrity": "sha512-pw6ziJcyjZtntQ//bkad9qXaBx665SgEL8C8KI5wO8G5iU5MPxvdWrQyVaAvjojGm9tJoS8M9Z/EEepbqieYmw==", - "dev": true + "dev": true, + "requires": {} }, "@rollup/pluginutils": { "version": "3.1.0", @@ -3541,9 +3622,9 @@ "dev": true }, "@types/node": { - "version": "14.14.22", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.22.tgz", - "integrity": "sha512-g+f/qj/cNcqKkc3tFqlXOYjrmZA+jNBiDzbP3kH+B+otKFqAdPgVTGP1IeKRdMml/aE69as5S4FqtxAbl+LaMw==", + "version": "17.0.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.10.tgz", + "integrity": "sha512-S/3xB4KzyFxYGCppyDt68yzBU9ysL88lSdIah4D6cptdcltc4NCPCAMc0+PCpg/lLIyC7IPvj2Z52OJWeIUkog==", "dev": true }, "@types/resolve": { @@ -3562,10 +3643,11 @@ "dev": true }, "acorn-jsx": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", - "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", - "dev": true + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "requires": {} }, "ajv": { "version": "6.12.6", @@ -3579,42 +3661,47 @@ "uri-js": "^4.2.2" } }, + "ansi-colors": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", + "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", + "dev": true + }, "ansi-escapes": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.1.tgz", - "integrity": "sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, "requires": { - "type-fest": "^0.11.0" + "type-fest": "^0.21.3" }, "dependencies": { "type-fest": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.11.0.tgz", - "integrity": "sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==", + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true } } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", "dev": true }, "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "^2.0.1" + "color-convert": "^1.9.0" } }, "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "dev": true, "requires": { "normalize-path": "^3.0.0", @@ -3647,15 +3734,20 @@ "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" }, + "b4a": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.3.1.tgz", + "integrity": "sha512-ULHjbJGjZcdA5bugDNAAcMA6GWXX/9N10I6AQc14TH+Sr7bMfT+NHuJnOFGPJWLtzYa6Tz+PnFD2D/1bISLLZQ==" + }, "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "big-integer": { - "version": "1.6.48", - "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.48.tgz", - "integrity": "sha512-j51egjPa7/i+RdiRuJbPdJ2FIUYYPhvYLjzoYbcMMm62ooO6F94fETG4MTs46zPAF9Brs04OajboA/qTGuz78w==" + "version": "1.6.51", + "resolved": "https://registry.npmjs.org/big-integer/-/big-integer-1.6.51.tgz", + "integrity": "sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==" }, "binary-extensions": { "version": "2.2.0", @@ -3664,17 +3756,18 @@ "dev": true }, "blake2b-wasm": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.3.0.tgz", - "integrity": "sha512-opFKx7sIXpKiG2/N24km9mJObgLOpu0JRf8CDgE/orn8LI/F7pUOSuZVSdZTJ7BMyFJunNdqoSInjwx1ty/z8A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/blake2b-wasm/-/blake2b-wasm-2.4.0.tgz", + "integrity": "sha512-S1kwmW2ZhZFFFOghcx73+ZajEfKBqhP82JMssxtLVMxlaPea1p9uoLiUZ5WYyHn0KddwbLc+0vh4wR0KBNoT5w==", "requires": { + "b4a": "^1.0.1", "nanoassert": "^2.0.0" } }, "blakejs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.0.tgz", - "integrity": "sha1-ad+S75U6qIylGjLfarHFShVfx6U=" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.1.1.tgz", + "integrity": "sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg==" }, "brace-expansion": { "version": "1.1.11", @@ -3701,9 +3794,9 @@ "dev": true }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, "builtin-modules": { @@ -3735,27 +3828,27 @@ "dev": true }, "chai": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.2.0.tgz", - "integrity": "sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.4.tgz", + "integrity": "sha512-yS5H68VYOCtN1cjfwumDSuzn/9c+yza4f3reKXlE5rUg7SFcCEy90gJvydNgOYtblyf4Zi6jIWRnXOgErta0KA==", "dev": true, "requires": { "assertion-error": "^1.1.0", "check-error": "^1.0.2", "deep-eql": "^3.0.1", "get-func-name": "^2.0.0", - "pathval": "^1.1.0", + "pathval": "^1.1.1", "type-detect": "^4.0.5" } }, "chalk": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", - "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", - "dev": true, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chardet": { @@ -3770,13 +3863,28 @@ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=", "dev": true }, - "circom_runtime": { - "version": "0.1.14", - "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.14.tgz", - "integrity": "sha512-MLbHHZVkYuWyZiYErLmT5y0qbTRXDD1NhaDyLhQNF0JCb6brx8r/VJDevwne7sT1re7qHpHCQAL5rhqByQ7obQ==", + "chokidar": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", + "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", + "dev": true, "requires": { - "ffjavascript": "0.2.39", - "fnv-plus": "^1.3.1" + "anymatch": "~3.1.1", + "braces": "~3.0.2", + "fsevents": "~2.1.1", + "glob-parent": "~5.1.0", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.2.0" + } + }, + "circom_runtime": { + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.17.tgz", + "integrity": "sha512-FCOCPz7ZbqL4TpzBlISRZ7/fcYHkdZz0DMfju1DYHiRU/+ZzJQfDS8JYENlnb9PO+HsLTr6/QtzphqvnEBp9AQ==", + "requires": { + "ffjavascript": "0.2.48" } }, "cli-cursor": { @@ -3805,10 +3913,16 @@ "wrap-ansi": "^5.1.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "string-width": { @@ -3821,32 +3935,21 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "commander": { "version": "2.20.3", @@ -3883,22 +3986,13 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } } } }, "debug": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.2.0.tgz", - "integrity": "sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -3920,9 +4014,9 @@ } }, "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, "deepmerge": { @@ -3940,6 +4034,12 @@ "object-keys": "^1.0.12" } }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3958,31 +4058,37 @@ } }, "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "es-abstract": { - "version": "1.18.0-next.2", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.0-next.2.tgz", - "integrity": "sha512-Ih4ZMFHEtZupnUh6497zEL4y2+w8+1ljnCyaTa+adcoafI1GOvMwFlDjBLfWR7y9VLfrjRJe9ocuHY1PSR9jjw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", + "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.2.2", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.1", - "object-inspect": "^1.9.0", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.1", + "is-string": "^1.0.7", + "is-weakref": "^1.0.1", + "object-inspect": "^1.11.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.3", - "string.prototype.trimstart": "^1.0.3" + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" }, "dependencies": { "object.assign": { @@ -4064,73 +4170,6 @@ "table": "^5.2.3", "text-table": "^0.2.0", "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } } }, "eslint-scope": { @@ -4176,18 +4215,18 @@ "dev": true }, "esquery": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", - "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", "dev": true, "requires": { "estraverse": "^5.1.0" }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -4202,9 +4241,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -4262,13 +4301,14 @@ "integrity": "sha512-tz9nWR5KYb6eR2odFQ7oxqEkx8F3YQZ6NBJoJR92YEG3DqYOqyxMck8PKvTVNKx3uwvOqGnLXNScnqpdHRdHGQ==" }, "ffjavascript": { - "version": "0.2.39", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.39.tgz", - "integrity": "sha512-9ewb5keKHL1owKTxCK7sDuA34SPJxnznWqdJgwBW51moCvg+wf9L0W5mcxm8qMUxt2OE/KjBQUKmYLaKyNNrPw==", + "version": "0.2.48", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.2.48.tgz", + "integrity": "sha512-uNrWP+odLofNmmO+iCCPi/Xt/sJh1ku3pVKmKWVWCLFfdCP69hvRrogKUIGnsdiINcWn0lGxcEh5oEjStMFXQQ==", "requires": { "big-integer": "^1.6.48", - "wasmcurves": "0.0.14", - "web-worker": "^1.0.0" + "wasmbuilder": "^0.0.12", + "wasmcurves": "0.1.0", + "web-worker": "^1.2.0" } }, "figures": { @@ -4306,6 +4346,24 @@ "to-regex-range": "^5.0.1" } }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "flat": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", + "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", + "dev": true, + "requires": { + "is-buffer": "~2.0.3" + } + }, "flat-cache": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", @@ -4323,11 +4381,6 @@ "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", "dev": true }, - "fnv-plus": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/fnv-plus/-/fnv-plus-1.3.1.tgz", - "integrity": "sha512-Gz1EvfOneuFfk4yG458dJ3TLJ7gV19q3OM/vVvvHf7eT02Hm1DleB4edsia6ahbKgAYxO9gvyQ1ioWZR+a00Yw==" - }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -4366,9 +4419,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.0.2.tgz", - "integrity": "sha512-aeX0vrFm21ILl3+JpFFRNe9aUvp6VFZb2/CTbgLb8j75kOhvoNYjt9d8KA/tJG4gSo8nzEDedRl0h7vDmBYRVg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -4376,10 +4429,20 @@ "has-symbols": "^1.0.1" } }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -4423,18 +4486,32 @@ "function-bind": "^1.1.1" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", "dev": true }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", "dev": true }, + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, "he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -4510,45 +4587,91 @@ }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "color-convert": "^2.0.1" } }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" } } } }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -4558,6 +4681,16 @@ "binary-extensions": "^2.0.0" } }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, "is-buffer": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", @@ -4565,30 +4698,33 @@ "dev": true }, "is-callable": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.2.tgz", - "integrity": "sha512-dnMqspv5nU3LoewK2N/y7KLtxtakvTuaCsU9FU50/QDmdbHNy/4/JuRtMHqRU22o3q+W89YQndQEeCVwK+3qrA==", + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, "is-core-module": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", - "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz", + "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==", "dev": true, "requires": { "has": "^1.0.3" } }, "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-docker": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", - "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true }, "is-extglob": { @@ -4598,15 +4734,15 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { "is-extglob": "^2.1.1" @@ -4619,9 +4755,9 @@ "dev": true }, "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, "is-number": { @@ -4630,6 +4766,15 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "is-number-object": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", + "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-reference": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", @@ -4640,21 +4785,46 @@ } }, "is-regex": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.1.tgz", - "integrity": "sha512-1+QkEcxiLlB7VEyFtyBg94e08OAsvq7FUBgApTq/w2ymCLyKJgDPsybBENVtA7XCQEgEXxKPonG+mvYRxh/LIg==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", + "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "dev": true + }, + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" } }, "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, "requires": { - "has-symbols": "^1.0.1" + "has-symbols": "^1.0.2" + } + }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" } }, "is-wsl": { @@ -4681,52 +4851,6 @@ "chalk": "^2.4.2", "filelist": "^1.0.1", "minimatch": "^3.0.4" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "requires": { - "has-flag": "^3.0.0" - } - } } }, "jest-worker": { @@ -4738,6 +4862,23 @@ "@types/node": "*", "merge-stream": "^2.0.0", "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, "js-sha3": { @@ -4752,9 +4893,9 @@ "dev": true }, "js-yaml": { - "version": "3.14.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", - "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -4783,12 +4924,31 @@ "type-check": "~0.3.2" } }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, + "log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "requires": { + "chalk": "^2.4.2" + } + }, "logplease": { "version": "1.2.15", "resolved": "https://registry.npmjs.org/logplease/-/logplease-1.2.15.tgz", @@ -4870,74 +5030,6 @@ "yargs-unparser": "1.6.0" }, "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "dependencies": { - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", @@ -4947,30 +5039,6 @@ "ms": "^2.1.1" } }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", - "dev": true - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "flat": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.1.tgz", - "integrity": "sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA==", - "dev": true, - "requires": { - "is-buffer": "~2.0.3" - } - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -4985,12 +5053,6 @@ "path-is-absolute": "^1.0.0" } }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", @@ -5001,64 +5063,12 @@ "esprima": "^4.0.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - } - }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", @@ -5073,26 +5083,6 @@ "requires": { "has-flag": "^3.0.0" } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" - } } } }, @@ -5114,9 +5104,9 @@ "integrity": "sha512-7vO7n28+aYO4J+8w96AzhmU8G+Y/xpPDJz/se19ICsqj/momRbb9mh9ZUtkoJ5X3nTnPdhEJyc0qnM6yAsHBaA==" }, "nanoid": { - "version": "3.1.12", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.12.tgz", - "integrity": "sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz", + "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==", "dev": true }, "natural-compare": { @@ -5156,9 +5146,9 @@ "dev": true }, "object-inspect": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.9.0.tgz", - "integrity": "sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw==", + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", "dev": true }, "object-keys": { @@ -5180,14 +5170,14 @@ } }, "object.getownpropertydescriptors": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.1.tgz", - "integrity": "sha512-6DtXgZ/lIZ9hqx4GtZETobXLR/ZLaa0aqV0kzbn80Rf8Z2e/XFnhA0I7p07N2wH8bBBltr2xQPi6sbKWAY2Eng==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.1" + "es-abstract": "^1.19.1" } }, "once": { @@ -5209,9 +5199,9 @@ } }, "open": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/open/-/open-7.3.1.tgz", - "integrity": "sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A==", + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", "dev": true, "requires": { "is-docker": "^2.0.0", @@ -5238,6 +5228,24 @@ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -5253,6 +5261,12 @@ "callsites": "^3.0.0" } }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -5272,15 +5286,15 @@ "dev": true }, "pathval": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz", - "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", + "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", "dev": true }, "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, "prelude-ls": { @@ -5302,14 +5316,14 @@ "dev": true }, "r1csfile": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.33.tgz", - "integrity": "sha512-aSZa/Vy6avJ146MOewUNRYdDLJCDINZ7aqSt0Zhw4uVrd4TijOz6gBfmckr7tPILaT3RNp7THVpUzeW0++OlJw==", + "version": "0.0.35", + "resolved": "https://registry.npmjs.org/r1csfile/-/r1csfile-0.0.35.tgz", + "integrity": "sha512-n6RTn7KxtfHxw5gjljYBaEuhVkXEQ2sZW1XVan7fwdwvQt9Kd65/A0cy+nNHL4GRGAHEaBMdYj0JOl/3kXln4Q==", "requires": { "@iden3/bigarray": "0.0.2", - "@iden3/binfileutils": "0.0.8", + "@iden3/binfileutils": "0.0.10", "fastfile": "0.0.19", - "ffjavascript": "0.2.39" + "ffjavascript": "0.2.48" } }, "randombytes": { @@ -5321,6 +5335,15 @@ "safe-buffer": "^5.1.0" } }, + "readdirp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", + "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", + "dev": true, + "requires": { + "picomatch": "^2.0.4" + } + }, "readline": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/readline/-/readline-1.3.0.tgz", @@ -5345,13 +5368,14 @@ "dev": true }, "resolve": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", - "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.21.0.tgz", + "integrity": "sha512-3wCbTpk5WJlyE4mSOtDLhqQmGFi0/TD9VPwmiolnk8U0wRgMEktqCXd3vy5buTO3tljvalNvKrjHEfrd2WpEKA==", "dev": true, "requires": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" + "is-core-module": "^2.8.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, "resolve-from": { @@ -5380,12 +5404,21 @@ } }, "rollup": { - "version": "2.37.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.37.1.tgz", - "integrity": "sha512-V3ojEeyGeSdrMSuhP3diBb06P+qV4gKQeanbDv+Qh/BZbhdZ7kHV0xAt8Yjk4GFshq/WjO7R4c7DFM20AwTFVQ==", + "version": "2.64.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.64.0.tgz", + "integrity": "sha512-+c+lbw1lexBKSMb1yxGDVfJ+vchJH3qLbmavR+awDinTDA2C5Ug9u7lkOzj62SCu0PKUExsW36tpgW7Fmpn3yQ==", "dev": true, "requires": { - "fsevents": "~2.1.2" + "fsevents": "~2.3.2" + }, + "dependencies": { + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + } } }, "rollup-plugin-terser": { @@ -5400,35 +5433,54 @@ "terser": "^5.0.0" }, "dependencies": { - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "acorn": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", + "dev": true, + "optional": true, + "peer": true + }, + "terser": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "requires": { - "randombytes": "^2.1.0" + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.20" } } } }, "rollup-plugin-visualizer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-4.2.0.tgz", - "integrity": "sha512-xjfvoK4x0G7lBT3toMx8K/9tkCEWhRehnSJnn+PLY3Hjk8sNvyo407b68Cd3hdV9j42xcb8HXt0ZrmRi5NWeaQ==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-visualizer/-/rollup-plugin-visualizer-4.2.2.tgz", + "integrity": "sha512-10/TsugsaQL5rdynl0lrklBngTtkRBESZdxUJy+3fN+xKqNdg5cr7JQU1OoPx4p5mhQ+nspa6EvX3qc8SsBvnA==", "dev": true, "requires": { - "nanoid": "^3.0.1", - "open": "^7.0.3", + "nanoid": "^3.1.22", + "open": "^7.4.2", "source-map": "^0.7.3", - "yargs": "^16.0.3" + "yargs": "^16.2.0" }, "dependencies": { "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, "cliui": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", @@ -5440,36 +5492,28 @@ "wrap-ansi": "^7.0.0" } }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", - "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" + "color-name": "~1.1.4" } }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "ansi-regex": "^5.0.0" + "ansi-regex": "^5.0.1" } }, "wrap-ansi": { @@ -5484,9 +5528,9 @@ } }, "y18n": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { @@ -5505,9 +5549,9 @@ } }, "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true } } @@ -5519,9 +5563,9 @@ "dev": true }, "rxjs": { - "version": "6.6.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.3.tgz", - "integrity": "sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==", + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -5545,6 +5589,15 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", @@ -5566,10 +5619,21 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", "dev": true }, "slice-ansi": { @@ -5583,28 +5647,10 @@ "is-fullwidth-code-point": "^2.0.0" }, "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true } } @@ -5616,9 +5662,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -5646,42 +5692,60 @@ "dev": true }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "string.prototype.trimend": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.3.tgz", - "integrity": "sha512-ayH0pB+uf0U28CtjlLvL7NaohvR1amUvVZk+y3DYb0Ey2PUV5zPkkKy9+U1ndVEIXO8hNg18eIv9Jntbii+dKw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "string.prototype.trimstart": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.3.tgz", - "integrity": "sha512-oBIBUy5lea5tt0ovtOFiEQaBkoBBkyJhZXzJYrSmDo5IUUqbOPvVezuRs/agBIdZ2p2Eo1FD6bD9USyBLfl3xg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", "dev": true, "requires": { - "call-bind": "^1.0.0", + "call-bind": "^1.0.2", "define-properties": "^1.1.3" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "strip-json-comments": { @@ -5691,14 +5755,19 @@ "dev": true }, "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "^4.0.0" + "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, "table": { "version": "5.4.6", "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", @@ -5711,10 +5780,16 @@ "string-width": "^3.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "string-width": { @@ -5727,29 +5802,9 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, - "terser": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", - "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - } - }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -5807,6 +5862,18 @@ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5817,24 +5884,54 @@ } }, "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", "dev": true }, + "wasmbuilder": { + "version": "0.0.12", + "resolved": "https://registry.npmjs.org/wasmbuilder/-/wasmbuilder-0.0.12.tgz", + "integrity": "sha512-dTMpBgrnLOXrN58i2zakn2ScynsBhq9LfyQIsPz4CyxRF9k1GAORniuqn3xmE9NnI1l7g3iiVCkoB2Cl0/oG8w==", + "requires": { + "big-integer": "^1.6.48" + } + }, "wasmcurves": { - "version": "0.0.14", - "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.0.14.tgz", - "integrity": "sha512-G1iMkxlRaQSdqQ1JrwHcU+awLmwyH6kFKfT8g9obd8MWe+u5oSdFXrODB0zmSI5aGGvJPG+4cAmqCGYv9R+7qg==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/wasmcurves/-/wasmcurves-0.1.0.tgz", + "integrity": "sha512-kIlcgbVUAv2uQ6lGsepGz/m5V40+Z6rvTBkqCYn3Y2+OcXst+UaP4filJYLh/xDxjJl62FFjZZeAnpeli1Y5/Q==", "requires": { "big-integer": "^1.6.42", "blakejs": "^1.1.0" } }, "web-worker": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.0.0.tgz", - "integrity": "sha512-BzuMqeKVkKKwHV6tJuwePFcxYMxvC97D448mXTgh/CxXAB4sRtoV26gRPN+JDxsXRR7QZyioMV9O6NzQaASf7Q==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.2.0.tgz", + "integrity": "sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==" + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } }, "which-module": { "version": "2.0.0", @@ -5849,6 +5946,39 @@ "dev": true, "requires": { "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } } }, "word-wrap": { @@ -5868,34 +5998,16 @@ "strip-ansi": "^5.0.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "string-width": { @@ -5908,15 +6020,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -5936,9 +6039,9 @@ } }, "y18n": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", - "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yargs": { @@ -5959,53 +6062,16 @@ "yargs-parser": "^13.1.2" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", "dev": true }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, "string-width": { @@ -6018,15 +6084,6 @@ "is-fullwidth-code-point": "^2.0.0", "strip-ansi": "^5.1.0" } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } } } }, @@ -6039,6 +6096,17 @@ "camelcase": "^5.0.0", "decamelize": "^1.2.0" } + }, + "yargs-unparser": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", + "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", + "dev": true, + "requires": { + "flat": "^4.1.0", + "lodash": "^4.17.15", + "yargs": "^13.3.0" + } } } } diff --git a/package.json b/package.json index a41e130..3d6890a 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "snarkjs", "type": "module", - "version": "0.4.10", + "version": "0.4.11", "description": "zkSNARKs implementation in JavaScript", "main": "./build/main.cjs", "module": "./main.js", @@ -38,15 +38,15 @@ "url": "https://github.com/iden3/snarkjs.git" }, "dependencies": { - "@iden3/binfileutils": "0.0.8", - "blake2b-wasm": "^2.3.0", - "circom_runtime": "0.1.14", + "@iden3/binfileutils": "0.0.10", + "blake2b-wasm": "^2.4.0", + "circom_runtime": "0.1.17", "ejs": "^3.1.6", "fastfile": "0.0.19", - "ffjavascript": "0.2.39", + "ffjavascript": "0.2.48", "js-sha3": "^0.8.0", "logplease": "^1.2.15", - "r1csfile": "0.0.33", + "r1csfile": "0.0.35", "readline": "^1.3.0" }, "devDependencies": {