Created
May 1, 2023 07:02
-
-
Save hiroism007/8207b574ee0a02f7b5220f75a974e1f1 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: GPL-3.0 | |
/* | |
Copyright 2021 0KIMS association. | |
This file is generated with [snarkJS](https://github.com/iden3/snarkjs). | |
snarkJS 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. | |
snarkJS 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 snarkJS. If not, see <https://www.gnu.org/licenses/>. | |
*/ | |
pragma solidity >=0.7.0 <0.9.0; | |
contract PlonkVerifier { | |
uint32 constant n = 4194304; | |
uint16 constant nPublic = 100; | |
uint16 constant nLagrange = 100; | |
uint256 constant Qmx = 5739570690545581065832287246712859919776607218618802202348511291454720543079; | |
uint256 constant Qmy = 21374723997332032932137038399779128077382255233479859658808771457653276249556; | |
uint256 constant Qlx = 11075724989754018987119955331500000233088638465396558357456644439898854859440; | |
uint256 constant Qly = 18260245010649692245114056266704908335558606221048746908630198282438276640384; | |
uint256 constant Qrx = 3875864700993762651961929266462353291169437814283755258630781346416436209219; | |
uint256 constant Qry = 15402440550307371804006587645575506408950782995632585244971928498107670060888; | |
uint256 constant Qox = 3320679606054246491551655943391224636995389064082559580002393465068504401893; | |
uint256 constant Qoy = 21138501297499851211681427435827865781410444621684932281166236239989369471240; | |
uint256 constant Qcx = 4219253315713498971674710271650903890492417421752950859814664944033866802560; | |
uint256 constant Qcy = 6813035836816319212553329470776261472182179275981930509756423322197723596360; | |
uint256 constant S1x = 12997863828362631303240736578369868588038309723329350951869098323341743187809; | |
uint256 constant S1y = 16315217602953053503565612667583077686916939429083711367534190790118350021753; | |
uint256 constant S2x = 10281329781641270610159203541617141479288395430087509077314269948785688573322; | |
uint256 constant S2y = 1021105986247580595418699060379196696254909667280809146486496106770725971406; | |
uint256 constant S3x = 16303633328367125425320726426648715191387756973381135653635137503973044548097; | |
uint256 constant S3y = 20377209476451917979997217185794194981196034238601962431546472651483091028968; | |
uint256 constant k1 = 2; | |
uint256 constant k2 = 3; | |
uint256 constant X2x1 = 21831381940315734285607113342023901060522397560371972897001948545212302161822; | |
uint256 constant X2x2 = 17231025384763736816414546592865244497437017442647097510447326538965263639101; | |
uint256 constant X2y1 = 2388026358213174446665280700919698872609886601280537296205114254867301080648; | |
uint256 constant X2y2 = 11507326595632554467052522095592665270651932854513688777769618397986436103170; | |
uint256 constant q = 21888242871839275222246405745257275088548364400416034343698204186575808495617; | |
uint256 constant qf = 21888242871839275222246405745257275088696311157297823662689037894645226208583; | |
uint256 constant w1 = 12143866164239048021030917283424216263377309185099704096317235600302831912062; | |
uint256 constant G1x = 1; | |
uint256 constant G1y = 2; | |
uint256 constant G2x1 = 10857046999023057135944570762232829481370756359578518086990519993285655852781; | |
uint256 constant G2x2 = 11559732032986387107991004021392285783925812861821192530917403151452391805634; | |
uint256 constant G2y1 = 8495653923123431417604973247489272438418190587263600148770280649306958101930; | |
uint256 constant G2y2 = 4082367875863433681332203403145435568316851327593401208105741076214120093531; | |
uint16 constant pA = 32; | |
uint16 constant pB = 96; | |
uint16 constant pC = 160; | |
uint16 constant pZ = 224; | |
uint16 constant pT1 = 288; | |
uint16 constant pT2 = 352; | |
uint16 constant pT3 = 416; | |
uint16 constant pWxi = 480; | |
uint16 constant pWxiw = 544; | |
uint16 constant pEval_a = 608; | |
uint16 constant pEval_b = 640; | |
uint16 constant pEval_c = 672; | |
uint16 constant pEval_s1 = 704; | |
uint16 constant pEval_s2 = 736; | |
uint16 constant pEval_zw = 768; | |
uint16 constant pEval_r = 800; | |
uint16 constant pAlpha = 0; | |
uint16 constant pBeta = 32; | |
uint16 constant pGamma = 64; | |
uint16 constant pXi = 96; | |
uint16 constant pXin = 128; | |
uint16 constant pBetaXi = 160; | |
uint16 constant pV1 = 192; | |
uint16 constant pV2 = 224; | |
uint16 constant pV3 = 256; | |
uint16 constant pV4 = 288; | |
uint16 constant pV5 = 320; | |
uint16 constant pV6 = 352; | |
uint16 constant pU = 384; | |
uint16 constant pPl = 416; | |
uint16 constant pEval_t = 448; | |
uint16 constant pA1 = 480; | |
uint16 constant pB1 = 544; | |
uint16 constant pZh = 608; | |
uint16 constant pZhInv = 640; | |
uint16 constant pEval_l1 = 672; | |
uint16 constant pEval_l2 = 704; | |
uint16 constant pEval_l3 = 736; | |
uint16 constant pEval_l4 = 768; | |
uint16 constant pEval_l5 = 800; | |
uint16 constant pEval_l6 = 832; | |
uint16 constant pEval_l7 = 864; | |
uint16 constant pEval_l8 = 896; | |
uint16 constant pEval_l9 = 928; | |
uint16 constant pEval_l10 = 960; | |
uint16 constant pEval_l11 = 992; | |
uint16 constant pEval_l12 = 1024; | |
uint16 constant pEval_l13 = 1056; | |
uint16 constant pEval_l14 = 1088; | |
uint16 constant pEval_l15 = 1120; | |
uint16 constant pEval_l16 = 1152; | |
uint16 constant pEval_l17 = 1184; | |
uint16 constant pEval_l18 = 1216; | |
uint16 constant pEval_l19 = 1248; | |
uint16 constant pEval_l20 = 1280; | |
uint16 constant pEval_l21 = 1312; | |
uint16 constant pEval_l22 = 1344; | |
uint16 constant pEval_l23 = 1376; | |
uint16 constant pEval_l24 = 1408; | |
uint16 constant pEval_l25 = 1440; | |
uint16 constant pEval_l26 = 1472; | |
uint16 constant pEval_l27 = 1504; | |
uint16 constant pEval_l28 = 1536; | |
uint16 constant pEval_l29 = 1568; | |
uint16 constant pEval_l30 = 1600; | |
uint16 constant pEval_l31 = 1632; | |
uint16 constant pEval_l32 = 1664; | |
uint16 constant pEval_l33 = 1696; | |
uint16 constant pEval_l34 = 1728; | |
uint16 constant pEval_l35 = 1760; | |
uint16 constant pEval_l36 = 1792; | |
uint16 constant pEval_l37 = 1824; | |
uint16 constant pEval_l38 = 1856; | |
uint16 constant pEval_l39 = 1888; | |
uint16 constant pEval_l40 = 1920; | |
uint16 constant pEval_l41 = 1952; | |
uint16 constant pEval_l42 = 1984; | |
uint16 constant pEval_l43 = 2016; | |
uint16 constant pEval_l44 = 2048; | |
uint16 constant pEval_l45 = 2080; | |
uint16 constant pEval_l46 = 2112; | |
uint16 constant pEval_l47 = 2144; | |
uint16 constant pEval_l48 = 2176; | |
uint16 constant pEval_l49 = 2208; | |
uint16 constant pEval_l50 = 2240; | |
uint16 constant pEval_l51 = 2272; | |
uint16 constant pEval_l52 = 2304; | |
uint16 constant pEval_l53 = 2336; | |
uint16 constant pEval_l54 = 2368; | |
uint16 constant pEval_l55 = 2400; | |
uint16 constant pEval_l56 = 2432; | |
uint16 constant pEval_l57 = 2464; | |
uint16 constant pEval_l58 = 2496; | |
uint16 constant pEval_l59 = 2528; | |
uint16 constant pEval_l60 = 2560; | |
uint16 constant pEval_l61 = 2592; | |
uint16 constant pEval_l62 = 2624; | |
uint16 constant pEval_l63 = 2656; | |
uint16 constant pEval_l64 = 2688; | |
uint16 constant pEval_l65 = 2720; | |
uint16 constant pEval_l66 = 2752; | |
uint16 constant pEval_l67 = 2784; | |
uint16 constant pEval_l68 = 2816; | |
uint16 constant pEval_l69 = 2848; | |
uint16 constant pEval_l70 = 2880; | |
uint16 constant pEval_l71 = 2912; | |
uint16 constant pEval_l72 = 2944; | |
uint16 constant pEval_l73 = 2976; | |
uint16 constant pEval_l74 = 3008; | |
uint16 constant pEval_l75 = 3040; | |
uint16 constant pEval_l76 = 3072; | |
uint16 constant pEval_l77 = 3104; | |
uint16 constant pEval_l78 = 3136; | |
uint16 constant pEval_l79 = 3168; | |
uint16 constant pEval_l80 = 3200; | |
uint16 constant pEval_l81 = 3232; | |
uint16 constant pEval_l82 = 3264; | |
uint16 constant pEval_l83 = 3296; | |
uint16 constant pEval_l84 = 3328; | |
uint16 constant pEval_l85 = 3360; | |
uint16 constant pEval_l86 = 3392; | |
uint16 constant pEval_l87 = 3424; | |
uint16 constant pEval_l88 = 3456; | |
uint16 constant pEval_l89 = 3488; | |
uint16 constant pEval_l90 = 3520; | |
uint16 constant pEval_l91 = 3552; | |
uint16 constant pEval_l92 = 3584; | |
uint16 constant pEval_l93 = 3616; | |
uint16 constant pEval_l94 = 3648; | |
uint16 constant pEval_l95 = 3680; | |
uint16 constant pEval_l96 = 3712; | |
uint16 constant pEval_l97 = 3744; | |
uint16 constant pEval_l98 = 3776; | |
uint16 constant pEval_l99 = 3808; | |
uint16 constant pEval_l100 = 3840; | |
uint16 constant lastMem = 3872; | |
function verifyProof(bytes memory proof, uint[] memory pubSignals) public view returns (bool) { | |
assembly { | |
///////// | |
// Computes the inverse using the extended euclidean algorithm | |
///////// | |
function inverse(a, q) -> inv { | |
let t := 0 | |
let newt := 1 | |
let r := q | |
let newr := a | |
let quotient | |
let aux | |
for { } newr { } { | |
quotient := sdiv(r, newr) | |
aux := sub(t, mul(quotient, newt)) | |
t:= newt | |
newt:= aux | |
aux := sub(r,mul(quotient, newr)) | |
r := newr | |
newr := aux | |
} | |
if gt(r, 1) { revert(0,0) } | |
if slt(t, 0) { t:= add(t, q) } | |
inv := t | |
} | |
/////// | |
// Computes the inverse of an array of values | |
// See https://vitalik.ca/general/2018/07/21/starks_part_3.html in section where explain fields operations | |
////// | |
function inverseArray(pVals, n) { | |
let pAux := mload(0x40) // Point to the next free position | |
let pIn := pVals | |
let lastPIn := add(pVals, mul(n, 32)) // Read n elemnts | |
let acc := mload(pIn) // Read the first element | |
pIn := add(pIn, 32) // Point to the second element | |
let inv | |
for { } lt(pIn, lastPIn) { | |
pAux := add(pAux, 32) | |
pIn := add(pIn, 32) | |
} | |
{ | |
mstore(pAux, acc) | |
acc := mulmod(acc, mload(pIn), q) | |
} | |
acc := inverse(acc, q) | |
// At this point pAux pint to the next free position we substract 1 to point to the last used | |
pAux := sub(pAux, 32) | |
// pIn points to the n+1 element, we substract to point to n | |
pIn := sub(pIn, 32) | |
lastPIn := pVals // We don't process the first element | |
for { } gt(pIn, lastPIn) { | |
pAux := sub(pAux, 32) | |
pIn := sub(pIn, 32) | |
} | |
{ | |
inv := mulmod(acc, mload(pAux), q) | |
acc := mulmod(acc, mload(pIn), q) | |
mstore(pIn, inv) | |
} | |
// pIn points to first element, we just set it. | |
mstore(pIn, acc) | |
} | |
function checkField(v) { | |
if iszero(lt(v, q)) { | |
mstore(0, 0) | |
return(0,0x20) | |
} | |
} | |
function checkInput(pProof) { | |
if iszero(eq(mload(pProof), 800 )) { | |
mstore(0, 0) | |
return(0,0x20) | |
} | |
checkField(mload(add(pProof, pEval_a))) | |
checkField(mload(add(pProof, pEval_b))) | |
checkField(mload(add(pProof, pEval_c))) | |
checkField(mload(add(pProof, pEval_s1))) | |
checkField(mload(add(pProof, pEval_s2))) | |
checkField(mload(add(pProof, pEval_zw))) | |
checkField(mload(add(pProof, pEval_r))) | |
// Points are checked in the point operations precompiled smart contracts | |
} | |
function calculateChallanges(pProof, pMem, pPublic) { | |
let a | |
let b | |
mstore( add(pMem, 3872 ), mload( add( pPublic, 32))) | |
mstore( add(pMem, 3904 ), mload( add( pPublic, 64))) | |
mstore( add(pMem, 3936 ), mload( add( pPublic, 96))) | |
mstore( add(pMem, 3968 ), mload( add( pPublic, 128))) | |
mstore( add(pMem, 4000 ), mload( add( pPublic, 160))) | |
mstore( add(pMem, 4032 ), mload( add( pPublic, 192))) | |
mstore( add(pMem, 4064 ), mload( add( pPublic, 224))) | |
mstore( add(pMem, 4096 ), mload( add( pPublic, 256))) | |
mstore( add(pMem, 4128 ), mload( add( pPublic, 288))) | |
mstore( add(pMem, 4160 ), mload( add( pPublic, 320))) | |
mstore( add(pMem, 4192 ), mload( add( pPublic, 352))) | |
mstore( add(pMem, 4224 ), mload( add( pPublic, 384))) | |
mstore( add(pMem, 4256 ), mload( add( pPublic, 416))) | |
mstore( add(pMem, 4288 ), mload( add( pPublic, 448))) | |
mstore( add(pMem, 4320 ), mload( add( pPublic, 480))) | |
mstore( add(pMem, 4352 ), mload( add( pPublic, 512))) | |
mstore( add(pMem, 4384 ), mload( add( pPublic, 544))) | |
mstore( add(pMem, 4416 ), mload( add( pPublic, 576))) | |
mstore( add(pMem, 4448 ), mload( add( pPublic, 608))) | |
mstore( add(pMem, 4480 ), mload( add( pPublic, 640))) | |
mstore( add(pMem, 4512 ), mload( add( pPublic, 672))) | |
mstore( add(pMem, 4544 ), mload( add( pPublic, 704))) | |
mstore( add(pMem, 4576 ), mload( add( pPublic, 736))) | |
mstore( add(pMem, 4608 ), mload( add( pPublic, 768))) | |
mstore( add(pMem, 4640 ), mload( add( pPublic, 800))) | |
mstore( add(pMem, 4672 ), mload( add( pPublic, 832))) | |
mstore( add(pMem, 4704 ), mload( add( pPublic, 864))) | |
mstore( add(pMem, 4736 ), mload( add( pPublic, 896))) | |
mstore( add(pMem, 4768 ), mload( add( pPublic, 928))) | |
mstore( add(pMem, 4800 ), mload( add( pPublic, 960))) | |
mstore( add(pMem, 4832 ), mload( add( pPublic, 992))) | |
mstore( add(pMem, 4864 ), mload( add( pPublic, 1024))) | |
mstore( add(pMem, 4896 ), mload( add( pPublic, 1056))) | |
mstore( add(pMem, 4928 ), mload( add( pPublic, 1088))) | |
mstore( add(pMem, 4960 ), mload( add( pPublic, 1120))) | |
mstore( add(pMem, 4992 ), mload( add( pPublic, 1152))) | |
mstore( add(pMem, 5024 ), mload( add( pPublic, 1184))) | |
mstore( add(pMem, 5056 ), mload( add( pPublic, 1216))) | |
mstore( add(pMem, 5088 ), mload( add( pPublic, 1248))) | |
mstore( add(pMem, 5120 ), mload( add( pPublic, 1280))) | |
mstore( add(pMem, 5152 ), mload( add( pPublic, 1312))) | |
mstore( add(pMem, 5184 ), mload( add( pPublic, 1344))) | |
mstore( add(pMem, 5216 ), mload( add( pPublic, 1376))) | |
mstore( add(pMem, 5248 ), mload( add( pPublic, 1408))) | |
mstore( add(pMem, 5280 ), mload( add( pPublic, 1440))) | |
mstore( add(pMem, 5312 ), mload( add( pPublic, 1472))) | |
mstore( add(pMem, 5344 ), mload( add( pPublic, 1504))) | |
mstore( add(pMem, 5376 ), mload( add( pPublic, 1536))) | |
mstore( add(pMem, 5408 ), mload( add( pPublic, 1568))) | |
mstore( add(pMem, 5440 ), mload( add( pPublic, 1600))) | |
mstore( add(pMem, 5472 ), mload( add( pPublic, 1632))) | |
mstore( add(pMem, 5504 ), mload( add( pPublic, 1664))) | |
mstore( add(pMem, 5536 ), mload( add( pPublic, 1696))) | |
mstore( add(pMem, 5568 ), mload( add( pPublic, 1728))) | |
mstore( add(pMem, 5600 ), mload( add( pPublic, 1760))) | |
mstore( add(pMem, 5632 ), mload( add( pPublic, 1792))) | |
mstore( add(pMem, 5664 ), mload( add( pPublic, 1824))) | |
mstore( add(pMem, 5696 ), mload( add( pPublic, 1856))) | |
mstore( add(pMem, 5728 ), mload( add( pPublic, 1888))) | |
mstore( add(pMem, 5760 ), mload( add( pPublic, 1920))) | |
mstore( add(pMem, 5792 ), mload( add( pPublic, 1952))) | |
mstore( add(pMem, 5824 ), mload( add( pPublic, 1984))) | |
mstore( add(pMem, 5856 ), mload( add( pPublic, 2016))) | |
mstore( add(pMem, 5888 ), mload( add( pPublic, 2048))) | |
mstore( add(pMem, 5920 ), mload( add( pPublic, 2080))) | |
mstore( add(pMem, 5952 ), mload( add( pPublic, 2112))) | |
mstore( add(pMem, 5984 ), mload( add( pPublic, 2144))) | |
mstore( add(pMem, 6016 ), mload( add( pPublic, 2176))) | |
mstore( add(pMem, 6048 ), mload( add( pPublic, 2208))) | |
mstore( add(pMem, 6080 ), mload( add( pPublic, 2240))) | |
mstore( add(pMem, 6112 ), mload( add( pPublic, 2272))) | |
mstore( add(pMem, 6144 ), mload( add( pPublic, 2304))) | |
mstore( add(pMem, 6176 ), mload( add( pPublic, 2336))) | |
mstore( add(pMem, 6208 ), mload( add( pPublic, 2368))) | |
mstore( add(pMem, 6240 ), mload( add( pPublic, 2400))) | |
mstore( add(pMem, 6272 ), mload( add( pPublic, 2432))) | |
mstore( add(pMem, 6304 ), mload( add( pPublic, 2464))) | |
mstore( add(pMem, 6336 ), mload( add( pPublic, 2496))) | |
mstore( add(pMem, 6368 ), mload( add( pPublic, 2528))) | |
mstore( add(pMem, 6400 ), mload( add( pPublic, 2560))) | |
mstore( add(pMem, 6432 ), mload( add( pPublic, 2592))) | |
mstore( add(pMem, 6464 ), mload( add( pPublic, 2624))) | |
mstore( add(pMem, 6496 ), mload( add( pPublic, 2656))) | |
mstore( add(pMem, 6528 ), mload( add( pPublic, 2688))) | |
mstore( add(pMem, 6560 ), mload( add( pPublic, 2720))) | |
mstore( add(pMem, 6592 ), mload( add( pPublic, 2752))) | |
mstore( add(pMem, 6624 ), mload( add( pPublic, 2784))) | |
mstore( add(pMem, 6656 ), mload( add( pPublic, 2816))) | |
mstore( add(pMem, 6688 ), mload( add( pPublic, 2848))) | |
mstore( add(pMem, 6720 ), mload( add( pPublic, 2880))) | |
mstore( add(pMem, 6752 ), mload( add( pPublic, 2912))) | |
mstore( add(pMem, 6784 ), mload( add( pPublic, 2944))) | |
mstore( add(pMem, 6816 ), mload( add( pPublic, 2976))) | |
mstore( add(pMem, 6848 ), mload( add( pPublic, 3008))) | |
mstore( add(pMem, 6880 ), mload( add( pPublic, 3040))) | |
mstore( add(pMem, 6912 ), mload( add( pPublic, 3072))) | |
mstore( add(pMem, 6944 ), mload( add( pPublic, 3104))) | |
mstore( add(pMem, 6976 ), mload( add( pPublic, 3136))) | |
mstore( add(pMem, 7008 ), mload( add( pPublic, 3168))) | |
mstore( add(pMem, 7040 ), mload( add( pPublic, 3200))) | |
mstore( add(pMem, 7072 ), mload( add( pProof, pA))) | |
mstore( add(pMem, 7104 ), mload( add( pProof, add(pA,32)))) | |
mstore( add(pMem, 7136 ), mload( add( pProof, add(pA,64)))) | |
mstore( add(pMem, 7168 ), mload( add( pProof, add(pA,96)))) | |
mstore( add(pMem, 7200 ), mload( add( pProof, add(pA,128)))) | |
mstore( add(pMem, 7232 ), mload( add( pProof, add(pA,160)))) | |
b := mod(keccak256(add(pMem, lastMem), 3392), q) | |
mstore( add(pMem, pBeta), b) | |
mstore( add(pMem, pGamma), mod(keccak256(add(pMem, pBeta), 32), q)) | |
mstore( add(pMem, pAlpha), mod(keccak256(add(pProof, pZ), 64), q)) | |
a := mod(keccak256(add(pProof, pT1), 192), q) | |
mstore( add(pMem, pXi), a) | |
mstore( add(pMem, pBetaXi), mulmod(b, a, q)) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
a:= mulmod(a, a, q) | |
mstore( add(pMem, pXin), a) | |
a:= mod(add(sub(a, 1),q), q) | |
mstore( add(pMem, pZh), a) | |
mstore( add(pMem, pZhInv), a) // We will invert later together with lagrange pols | |
let v1 := mod(keccak256(add(pProof, pEval_a), 224), q) | |
mstore( add(pMem, pV1), v1) | |
a := mulmod(v1, v1, q) | |
mstore( add(pMem, pV2), a) | |
a := mulmod(a, v1, q) | |
mstore( add(pMem, pV3), a) | |
a := mulmod(a, v1, q) | |
mstore( add(pMem, pV4), a) | |
a := mulmod(a, v1, q) | |
mstore( add(pMem, pV5), a) | |
a := mulmod(a, v1, q) | |
mstore( add(pMem, pV6), a) | |
mstore( add(pMem, pU), mod(keccak256(add(pProof, pWxi), 128), q)) | |
} | |
function calculateLagrange(pMem) { | |
let w := 1 | |
mstore( | |
add(pMem, pEval_l1), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l2), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l3), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l4), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l5), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l6), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l7), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l8), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l9), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l10), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l11), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l12), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l13), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l14), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l15), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l16), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l17), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l18), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l19), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l20), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l21), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l22), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l23), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l24), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l25), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l26), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l27), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l28), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l29), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l30), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l31), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l32), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l33), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l34), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l35), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l36), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l37), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l38), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l39), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l40), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l41), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l42), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l43), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l44), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l45), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l46), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l47), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l48), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l49), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l50), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l51), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l52), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l53), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l54), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l55), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l56), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l57), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l58), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l59), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l60), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l61), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l62), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l63), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l64), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l65), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l66), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l67), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l68), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l69), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l70), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l71), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l72), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l73), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l74), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l75), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l76), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l77), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l78), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l79), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l80), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l81), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l82), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l83), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l84), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l85), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l86), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l87), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l88), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l89), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l90), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l91), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l92), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l93), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l94), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l95), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l96), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l97), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l98), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l99), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l100), | |
mulmod( | |
n, | |
mod( | |
add( | |
sub( | |
mload(add(pMem, pXi)), | |
w | |
), | |
q | |
), | |
q | |
), | |
q | |
) | |
) | |
inverseArray(add(pMem, pZhInv), 101 ) | |
let zh := mload(add(pMem, pZh)) | |
w := 1 | |
mstore( | |
add(pMem, pEval_l1 ), | |
mulmod( | |
mload(add(pMem, pEval_l1 )), | |
zh, | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l2), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l2)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l3), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l3)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l4), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l4)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l5), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l5)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l6), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l6)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l7), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l7)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l8), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l8)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l9), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l9)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l10), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l10)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l11), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l11)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l12), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l12)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l13), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l13)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l14), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l14)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l15), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l15)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l16), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l16)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l17), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l17)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l18), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l18)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l19), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l19)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l20), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l20)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l21), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l21)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l22), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l22)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l23), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l23)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l24), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l24)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l25), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l25)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l26), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l26)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l27), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l27)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l28), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l28)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l29), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l29)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l30), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l30)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l31), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l31)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l32), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l32)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l33), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l33)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l34), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l34)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l35), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l35)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l36), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l36)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l37), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l37)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l38), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l38)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l39), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l39)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l40), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l40)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l41), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l41)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l42), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l42)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l43), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l43)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l44), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l44)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l45), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l45)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l46), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l46)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l47), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l47)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l48), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l48)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l49), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l49)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l50), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l50)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l51), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l51)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l52), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l52)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l53), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l53)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l54), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l54)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l55), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l55)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l56), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l56)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l57), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l57)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l58), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l58)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l59), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l59)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l60), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l60)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l61), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l61)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l62), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l62)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l63), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l63)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l64), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l64)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l65), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l65)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l66), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l66)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l67), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l67)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l68), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l68)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l69), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l69)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l70), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l70)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l71), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l71)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l72), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l72)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l73), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l73)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l74), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l74)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l75), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l75)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l76), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l76)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l77), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l77)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l78), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l78)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l79), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l79)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l80), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l80)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l81), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l81)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l82), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l82)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l83), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l83)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l84), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l84)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l85), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l85)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l86), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l86)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l87), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l87)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l88), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l88)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l89), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l89)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l90), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l90)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l91), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l91)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l92), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l92)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l93), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l93)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l94), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l94)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l95), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l95)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l96), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l96)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l97), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l97)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l98), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l98)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l99), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l99)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
w := mulmod(w, w1, q) | |
mstore( | |
add(pMem, pEval_l100), | |
mulmod( | |
w, | |
mulmod( | |
mload(add(pMem, pEval_l100)), | |
zh, | |
q | |
), | |
q | |
) | |
) | |
} | |
function calculatePl(pMem, pPub) { | |
let pl := 0 | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l1)), | |
mload(add(pPub, 32)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l2)), | |
mload(add(pPub, 64)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l3)), | |
mload(add(pPub, 96)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l4)), | |
mload(add(pPub, 128)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l5)), | |
mload(add(pPub, 160)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l6)), | |
mload(add(pPub, 192)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l7)), | |
mload(add(pPub, 224)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l8)), | |
mload(add(pPub, 256)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l9)), | |
mload(add(pPub, 288)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l10)), | |
mload(add(pPub, 320)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l11)), | |
mload(add(pPub, 352)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l12)), | |
mload(add(pPub, 384)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l13)), | |
mload(add(pPub, 416)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l14)), | |
mload(add(pPub, 448)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l15)), | |
mload(add(pPub, 480)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l16)), | |
mload(add(pPub, 512)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l17)), | |
mload(add(pPub, 544)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l18)), | |
mload(add(pPub, 576)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l19)), | |
mload(add(pPub, 608)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l20)), | |
mload(add(pPub, 640)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l21)), | |
mload(add(pPub, 672)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l22)), | |
mload(add(pPub, 704)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l23)), | |
mload(add(pPub, 736)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l24)), | |
mload(add(pPub, 768)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l25)), | |
mload(add(pPub, 800)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l26)), | |
mload(add(pPub, 832)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l27)), | |
mload(add(pPub, 864)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l28)), | |
mload(add(pPub, 896)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l29)), | |
mload(add(pPub, 928)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l30)), | |
mload(add(pPub, 960)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l31)), | |
mload(add(pPub, 992)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l32)), | |
mload(add(pPub, 1024)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l33)), | |
mload(add(pPub, 1056)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l34)), | |
mload(add(pPub, 1088)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l35)), | |
mload(add(pPub, 1120)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l36)), | |
mload(add(pPub, 1152)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l37)), | |
mload(add(pPub, 1184)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l38)), | |
mload(add(pPub, 1216)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l39)), | |
mload(add(pPub, 1248)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l40)), | |
mload(add(pPub, 1280)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l41)), | |
mload(add(pPub, 1312)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l42)), | |
mload(add(pPub, 1344)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l43)), | |
mload(add(pPub, 1376)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l44)), | |
mload(add(pPub, 1408)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l45)), | |
mload(add(pPub, 1440)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l46)), | |
mload(add(pPub, 1472)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l47)), | |
mload(add(pPub, 1504)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l48)), | |
mload(add(pPub, 1536)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l49)), | |
mload(add(pPub, 1568)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l50)), | |
mload(add(pPub, 1600)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l51)), | |
mload(add(pPub, 1632)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l52)), | |
mload(add(pPub, 1664)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l53)), | |
mload(add(pPub, 1696)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l54)), | |
mload(add(pPub, 1728)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l55)), | |
mload(add(pPub, 1760)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l56)), | |
mload(add(pPub, 1792)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l57)), | |
mload(add(pPub, 1824)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l58)), | |
mload(add(pPub, 1856)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l59)), | |
mload(add(pPub, 1888)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l60)), | |
mload(add(pPub, 1920)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l61)), | |
mload(add(pPub, 1952)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l62)), | |
mload(add(pPub, 1984)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l63)), | |
mload(add(pPub, 2016)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l64)), | |
mload(add(pPub, 2048)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l65)), | |
mload(add(pPub, 2080)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l66)), | |
mload(add(pPub, 2112)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l67)), | |
mload(add(pPub, 2144)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l68)), | |
mload(add(pPub, 2176)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l69)), | |
mload(add(pPub, 2208)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l70)), | |
mload(add(pPub, 2240)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l71)), | |
mload(add(pPub, 2272)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l72)), | |
mload(add(pPub, 2304)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l73)), | |
mload(add(pPub, 2336)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l74)), | |
mload(add(pPub, 2368)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l75)), | |
mload(add(pPub, 2400)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l76)), | |
mload(add(pPub, 2432)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l77)), | |
mload(add(pPub, 2464)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l78)), | |
mload(add(pPub, 2496)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l79)), | |
mload(add(pPub, 2528)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l80)), | |
mload(add(pPub, 2560)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l81)), | |
mload(add(pPub, 2592)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l82)), | |
mload(add(pPub, 2624)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l83)), | |
mload(add(pPub, 2656)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l84)), | |
mload(add(pPub, 2688)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l85)), | |
mload(add(pPub, 2720)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l86)), | |
mload(add(pPub, 2752)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l87)), | |
mload(add(pPub, 2784)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l88)), | |
mload(add(pPub, 2816)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l89)), | |
mload(add(pPub, 2848)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l90)), | |
mload(add(pPub, 2880)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l91)), | |
mload(add(pPub, 2912)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l92)), | |
mload(add(pPub, 2944)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l93)), | |
mload(add(pPub, 2976)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l94)), | |
mload(add(pPub, 3008)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l95)), | |
mload(add(pPub, 3040)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l96)), | |
mload(add(pPub, 3072)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l97)), | |
mload(add(pPub, 3104)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l98)), | |
mload(add(pPub, 3136)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l99)), | |
mload(add(pPub, 3168)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
pl := mod( | |
add( | |
sub( | |
pl, | |
mulmod( | |
mload(add(pMem, pEval_l100)), | |
mload(add(pPub, 3200)), | |
q | |
) | |
), | |
q | |
), | |
q | |
) | |
mstore(add(pMem, pPl), pl) | |
} | |
function calculateT(pProof, pMem) { | |
let t | |
let t1 | |
let t2 | |
t := addmod( | |
mload(add(pProof, pEval_r)), | |
mload(add(pMem, pPl)), | |
q | |
) | |
t1 := mulmod( | |
mload(add(pProof, pEval_s1)), | |
mload(add(pMem, pBeta)), | |
q | |
) | |
t1 := addmod( | |
t1, | |
mload(add(pProof, pEval_a)), | |
q | |
) | |
t1 := addmod( | |
t1, | |
mload(add(pMem, pGamma)), | |
q | |
) | |
t2 := mulmod( | |
mload(add(pProof, pEval_s2)), | |
mload(add(pMem, pBeta)), | |
q | |
) | |
t2 := addmod( | |
t2, | |
mload(add(pProof, pEval_b)), | |
q | |
) | |
t2 := addmod( | |
t2, | |
mload(add(pMem, pGamma)), | |
q | |
) | |
t1 := mulmod(t1, t2, q) | |
t2 := addmod( | |
mload(add(pProof, pEval_c)), | |
mload(add(pMem, pGamma)), | |
q | |
) | |
t1 := mulmod(t1, t2, q) | |
t1 := mulmod(t1, mload(add(pProof, pEval_zw)), q) | |
t1 := mulmod(t1, mload(add(pMem, pAlpha)), q) | |
t2 := mulmod( | |
mload(add(pMem, pEval_l1)), | |
mload(add(pMem, pAlpha)), | |
q | |
) | |
t2 := mulmod( | |
t2, | |
mload(add(pMem, pAlpha)), | |
q | |
) | |
t1 := addmod(t1, t2, q) | |
t := mod(sub(add(t, q), t1), q) | |
t := mulmod(t, mload(add(pMem, pZhInv)), q) | |
mstore( add(pMem, pEval_t) , t) | |
} | |
function g1_set(pR, pP) { | |
mstore(pR, mload(pP)) | |
mstore(add(pR, 32), mload(add(pP,32))) | |
} | |
function g1_acc(pR, pP) { | |
let mIn := mload(0x40) | |
mstore(mIn, mload(pR)) | |
mstore(add(mIn,32), mload(add(pR, 32))) | |
mstore(add(mIn,64), mload(pP)) | |
mstore(add(mIn,96), mload(add(pP, 32))) | |
let success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) | |
if iszero(success) { | |
mstore(0, 0) | |
return(0,0x20) | |
} | |
} | |
function g1_mulAcc(pR, pP, s) { | |
let success | |
let mIn := mload(0x40) | |
mstore(mIn, mload(pP)) | |
mstore(add(mIn,32), mload(add(pP, 32))) | |
mstore(add(mIn,64), s) | |
success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64) | |
if iszero(success) { | |
mstore(0, 0) | |
return(0,0x20) | |
} | |
mstore(add(mIn,64), mload(pR)) | |
mstore(add(mIn,96), mload(add(pR, 32))) | |
success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) | |
if iszero(success) { | |
mstore(0, 0) | |
return(0,0x20) | |
} | |
} | |
function g1_mulAccC(pR, x, y, s) { | |
let success | |
let mIn := mload(0x40) | |
mstore(mIn, x) | |
mstore(add(mIn,32), y) | |
mstore(add(mIn,64), s) | |
success := staticcall(sub(gas(), 2000), 7, mIn, 96, mIn, 64) | |
if iszero(success) { | |
mstore(0, 0) | |
return(0,0x20) | |
} | |
mstore(add(mIn,64), mload(pR)) | |
mstore(add(mIn,96), mload(add(pR, 32))) | |
success := staticcall(sub(gas(), 2000), 6, mIn, 128, pR, 64) | |
if iszero(success) { | |
mstore(0, 0) | |
return(0,0x20) | |
} | |
} | |
function g1_mulSetC(pR, x, y, s) { | |
let success | |
let mIn := mload(0x40) | |
mstore(mIn, x) | |
mstore(add(mIn,32), y) | |
mstore(add(mIn,64), s) | |
success := staticcall(sub(gas(), 2000), 7, mIn, 96, pR, 64) | |
if iszero(success) { | |
mstore(0, 0) | |
return(0,0x20) | |
} | |
} | |
function calculateA1(pProof, pMem) { | |
let p := add(pMem, pA1) | |
g1_set(p, add(pProof, pWxi)) | |
g1_mulAcc(p, add(pProof, pWxiw), mload(add(pMem, pU))) | |
} | |
function calculateB1(pProof, pMem) { | |
let s | |
let s1 | |
let p := add(pMem, pB1) | |
// Calculate D | |
s := mulmod( mload(add(pProof, pEval_a)), mload(add(pMem, pV1)), q) | |
g1_mulSetC(p, Qlx, Qly, s) | |
s := mulmod( s, mload(add(pProof, pEval_b)), q) | |
g1_mulAccC(p, Qmx, Qmy, s) | |
s := mulmod( mload(add(pProof, pEval_b)), mload(add(pMem, pV1)), q) | |
g1_mulAccC(p, Qrx, Qry, s) | |
s := mulmod( mload(add(pProof, pEval_c)), mload(add(pMem, pV1)), q) | |
g1_mulAccC(p, Qox, Qoy, s) | |
s :=mload(add(pMem, pV1)) | |
g1_mulAccC(p, Qcx, Qcy, s) | |
s := addmod(mload(add(pProof, pEval_a)), mload(add(pMem, pBetaXi)), q) | |
s := addmod(s, mload(add(pMem, pGamma)), q) | |
s1 := mulmod(k1, mload(add(pMem, pBetaXi)), q) | |
s1 := addmod(s1, mload(add(pProof, pEval_b)), q) | |
s1 := addmod(s1, mload(add(pMem, pGamma)), q) | |
s := mulmod(s, s1, q) | |
s1 := mulmod(k2, mload(add(pMem, pBetaXi)), q) | |
s1 := addmod(s1, mload(add(pProof, pEval_c)), q) | |
s1 := addmod(s1, mload(add(pMem, pGamma)), q) | |
s := mulmod(s, s1, q) | |
s := mulmod(s, mload(add(pMem, pAlpha)), q) | |
s := mulmod(s, mload(add(pMem, pV1)), q) | |
s1 := mulmod(mload(add(pMem, pEval_l1)), mload(add(pMem, pAlpha)), q) | |
s1 := mulmod(s1, mload(add(pMem, pAlpha)), q) | |
s1 := mulmod(s1, mload(add(pMem, pV1)), q) | |
s := addmod(s, s1, q) | |
s := addmod(s, mload(add(pMem, pU)), q) | |
g1_mulAcc(p, add(pProof, pZ), s) | |
s := mulmod(mload(add(pMem, pBeta)), mload(add(pProof, pEval_s1)), q) | |
s := addmod(s, mload(add(pProof, pEval_a)), q) | |
s := addmod(s, mload(add(pMem, pGamma)), q) | |
s1 := mulmod(mload(add(pMem, pBeta)), mload(add(pProof, pEval_s2)), q) | |
s1 := addmod(s1, mload(add(pProof, pEval_b)), q) | |
s1 := addmod(s1, mload(add(pMem, pGamma)), q) | |
s := mulmod(s, s1, q) | |
s := mulmod(s, mload(add(pMem, pAlpha)), q) | |
s := mulmod(s, mload(add(pMem, pV1)), q) | |
s := mulmod(s, mload(add(pMem, pBeta)), q) | |
s := mulmod(s, mload(add(pProof, pEval_zw)), q) | |
s := mod(sub(q, s), q) | |
g1_mulAccC(p, S3x, S3y, s) | |
// calculate F | |
g1_acc(p , add(pProof, pT1)) | |
s := mload(add(pMem, pXin)) | |
g1_mulAcc(p, add(pProof, pT2), s) | |
s := mulmod(s, s, q) | |
g1_mulAcc(p, add(pProof, pT3), s) | |
g1_mulAcc(p, add(pProof, pA), mload(add(pMem, pV2))) | |
g1_mulAcc(p, add(pProof, pB), mload(add(pMem, pV3))) | |
g1_mulAcc(p, add(pProof, pC), mload(add(pMem, pV4))) | |
g1_mulAccC(p, S1x, S1y, mload(add(pMem, pV5))) | |
g1_mulAccC(p, S2x, S2y, mload(add(pMem, pV6))) | |
// calculate E | |
s := mload(add(pMem, pEval_t)) | |
s := addmod(s, mulmod(mload(add(pProof, pEval_r)), mload(add(pMem, pV1)), q), q) | |
s := addmod(s, mulmod(mload(add(pProof, pEval_a)), mload(add(pMem, pV2)), q), q) | |
s := addmod(s, mulmod(mload(add(pProof, pEval_b)), mload(add(pMem, pV3)), q), q) | |
s := addmod(s, mulmod(mload(add(pProof, pEval_c)), mload(add(pMem, pV4)), q), q) | |
s := addmod(s, mulmod(mload(add(pProof, pEval_s1)), mload(add(pMem, pV5)), q), q) | |
s := addmod(s, mulmod(mload(add(pProof, pEval_s2)), mload(add(pMem, pV6)), q), q) | |
s := addmod(s, mulmod(mload(add(pProof, pEval_zw)), mload(add(pMem, pU)), q), q) | |
s := mod(sub(q, s), q) | |
g1_mulAccC(p, G1x, G1y, s) | |
// Last part of B | |
s := mload(add(pMem, pXi)) | |
g1_mulAcc(p, add(pProof, pWxi), s) | |
s := mulmod(mload(add(pMem, pU)), mload(add(pMem, pXi)), q) | |
s := mulmod(s, w1, q) | |
g1_mulAcc(p, add(pProof, pWxiw), s) | |
} | |
function checkPairing(pMem) -> isOk { | |
let mIn := mload(0x40) | |
mstore(mIn, mload(add(pMem, pA1))) | |
mstore(add(mIn,32), mload(add(add(pMem, pA1), 32))) | |
mstore(add(mIn,64), X2x2) | |
mstore(add(mIn,96), X2x1) | |
mstore(add(mIn,128), X2y2) | |
mstore(add(mIn,160), X2y1) | |
mstore(add(mIn,192), mload(add(pMem, pB1))) | |
let s := mload(add(add(pMem, pB1), 32)) | |
s := mod(sub(qf, s), qf) | |
mstore(add(mIn,224), s) | |
mstore(add(mIn,256), G2x2) | |
mstore(add(mIn,288), G2x1) | |
mstore(add(mIn,320), G2y2) | |
mstore(add(mIn,352), G2y1) | |
let success := staticcall(sub(gas(), 2000), 8, mIn, 384, mIn, 0x20) | |
isOk := and(success, mload(mIn)) | |
} | |
let pMem := mload(0x40) | |
mstore(0x40, add(pMem, lastMem)) | |
checkInput(proof) | |
calculateChallanges(proof, pMem, pubSignals) | |
calculateLagrange(pMem) | |
calculatePl(pMem, pubSignals) | |
calculateT(proof, pMem) | |
calculateA1(proof, pMem) | |
calculateB1(proof, pMem) | |
let isValid := checkPairing(pMem) | |
mstore(0x40, sub(pMem, lastMem)) | |
mstore(0, isValid) | |
return(0,0x20) | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment