diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 2f564c30..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,48 +0,0 @@ -# This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node -# For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions - -name: Main CI - -on: - pull_request: - branches: - - main - - develop - - develop-banana - push: - branches: - - main - - develop - -jobs: - build: - runs-on: ubuntu-latest - services: - act: - image: lucasalt/act_base:latest - ports: - - 8545:8545 - steps: - - name: Checkout code - uses: actions/checkout@v3 - - uses: actions/setup-node@v3 - with: - node-version: 20 - - name: Clone repos - run: | - cd .. - git clone https://github.com/0xPolygonHermez/zkevm-testvectors.git --branch feature/log0-tests - cd zkevm-testvectors/tools-inputs/tools-eth - git clone https://github.com/0xPolygonHermez/ethereum-tests tests - cd tests - git checkout test-vectors - cd ../../../../zkevm-proverjs - - name: setup zkevm-proverjs - run: | - npm i - - name: Run full tracer tests - run: | - chmod -R 777 tools - npm run test:full-tracer - - name: eslint:tracer - run: npm run eslint:tracer diff --git a/.gitignore b/.gitignore index 7a7926a8..8f48ec08 100644 --- a/.gitignore +++ b/.gitignore @@ -20,3 +20,6 @@ tracer-options.json main.pil.json tools/full-tracer-tests/ft-traces/ batch-l2-data.json +*.sage.py +*.json.bz2 +*.json.gz \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index f3dc0f5d..2fa8ddf1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,11 @@ "version": "6.0.0", "license": "AGPL3", "dependencies": { - "@0xpolygonhermez/zkasmcom": "github:0xPolygonHermez/zkasmcom#v5.0.0-fork.8", - "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#feature/v8.0.0-rc.1-fork.12", - "@0xpolygonhermez/zkevm-rom": "github:0xPolygonHermez/zkevm-rom#v8.0.0-rc.1-fork.12", + "@0xpolygonhermez/zkasmcom": "github:0xPolygonHermez/zkasmcom#develop-durian", + "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v9.0.0-rc.3-fork.13", + "@0xpolygonhermez/zkevm-rom": "github:0xPolygonHermez/zkevm-rom#release/v9.0.0-rc.3-fork.13", "@0xpolygonhermez/zkevm-storage-rom": "https://github.com/0xPolygonHermez/zkevm-storage-rom.git#v4.0.0-fork.7", - "@0xpolygonhermez/zkevm-testvectors": "github:0xPolygonHermez/zkevm-testvectors#v8.0.0-rc.2-fork.12", + "@0xpolygonhermez/zkevm-testvectors": "github:0xPolygonHermez/zkevm-testvectors#v9.0.0-rc.3-fork.13", "@grpc/grpc-js": "^1.8.14", "chalk": "^3.0.0", "circomlib": "^2.0.3", @@ -42,8 +42,7 @@ }, "node_modules/@0xpolygonhermez/zkasmcom": { "version": "2.0.0", - "resolved": "git+ssh://git@github.com/0xPolygonHermez/zkasmcom.git#1f8904c3d966ef65567bfa6d273ecc51228134ec", - "license": "UNLICENSED", + "resolved": "git+ssh://git@github.com/0xPolygonHermez/zkasmcom.git#178f40b07bafff576fd9c495ecefdffee2653276", "dependencies": { "ffjavascript": "^0.2.46", "jison": "^0.4.18", @@ -55,13 +54,12 @@ }, "node_modules/@0xpolygonhermez/zkevm-commonjs": { "version": "5.0.0", - "resolved": "git+ssh://git@github.com/0xpolygonhermez/zkevm-commonjs.git#31a4957ee9dce61ed226a87b32ad01b2cfa0793e", - "license": "pending", + "resolved": "git+ssh://git@github.com/0xpolygonhermez/zkevm-commonjs.git#2684480082a2f374863dfe8de886d739b85e7c08", "dependencies": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/tx": "^3.4.0", - "@polygon-hermez/common": "2.6.4", - "@polygon-hermez/vm": "6.0.12", + "@polygon-hermez/common": "2.6.5", + "@polygon-hermez/vm": "7.0.3", "ethereumjs-util": "^7.1.4", "ethers": "^5.5.4", "ffjavascript": "^0.2.55", @@ -71,10 +69,9 @@ }, "node_modules/@0xpolygonhermez/zkevm-rom": { "version": "6.0.0", - "resolved": "git+ssh://git@github.com/0xPolygonHermez/zkevm-rom.git#9cb62807563335a4ddef972dc9b76a8d71384c2a", - "license": "AGPL", + "resolved": "git+ssh://git@github.com/0xPolygonHermez/zkevm-rom.git#c94abf0783b0039658203ee28702715d99f3a25c", "dependencies": { - "@0xpolygonhermez/zkasmcom": "https://github.com/0xPolygonHermez/zkasmcom.git#v5.0.0-fork.8", + "@0xpolygonhermez/zkasmcom": "https://github.com/0xPolygonHermez/zkasmcom.git#develop-durian", "yargs": "^17.5.1" } }, @@ -82,7 +79,6 @@ "name": "@hermeznetwork/zkasm", "version": "4.0.0", "resolved": "git+ssh://git@github.com/0xPolygonHermez/zkevm-storage-rom.git#287c56f81afc793c89852d9ad97bf2beba374527", - "license": "UNLICENSED", "dependencies": { "yargs": "^17.1.1" } @@ -90,28 +86,30 @@ "node_modules/@0xpolygonhermez/zkevm-testvectors": { "name": "@0xpolygonhermez/test-vectors", "version": "6.0.0", - "resolved": "git+ssh://git@github.com/0xPolygonHermez/zkevm-testvectors.git#13f143b93793f03daa0879bb799fd9232960b56a", - "license": "pending" + "resolved": "git+ssh://git@github.com/0xPolygonHermez/zkevm-testvectors.git#2b70027e11a427c15994713b41ef9b6794c2f3bb" }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -141,9 +139,9 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -356,6 +354,11 @@ "bn.js": "^5.2.1" } }, + "node_modules/@ethersproject/bignumber/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "node_modules/@ethersproject/bytes": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", @@ -711,6 +714,30 @@ "hash.js": "1.1.7" } }, + "node_modules/@ethersproject/signing-key/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/@ethersproject/signing-key/node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" + }, "node_modules/@ethersproject/solidity": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", @@ -877,9 +904,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.11.1.tgz", - "integrity": "sha512-gyt/WayZrVPH2w/UTLansS7F9Nwld472JxxaETamrM8HNlsa+jSLNyKAZmhxI2Me4c3mQHFiS1wWHDY1g1Kthw==", + "version": "1.12.5", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.12.5.tgz", + "integrity": "sha512-d3iiHxdpg5+ZcJ6jnDSOT8Z0O0VMVGy34jAnYLUX8yd36b1qn8f1TwOA/Lc7TsOh03IkPJ38eGI5qD2EjNkoEA==", "dependencies": { "@grpc/proto-loader": "^0.7.13", "@js-sdsl/ordered-map": "^4.4.2" @@ -906,13 +933,13 @@ } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", + "@humanwhocodes/object-schema": "^2.0.3", "debug": "^4.3.1", "minimatch": "^3.0.5" }, @@ -999,18 +1026,18 @@ } }, "node_modules/@polygon-hermez/common": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/@polygon-hermez/common/-/common-2.6.4.tgz", - "integrity": "sha512-ZGl/K1MaXHaDagqKCqkQgCRu9EfJ+mbK+t4GeVnDywMYGCyi7jF1u71Pyh4Rch3XFd/8rW/eVL4x4jkGwN16JQ==", + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@polygon-hermez/common/-/common-2.6.5.tgz", + "integrity": "sha512-zJOIbAeM4Wn0aJ/YPRg9JyE8jMIdfVKO4DxiJs0y7JMjO7T9yAiZm0gqxD79/3uWPcPt3U7NXCG9rSA2fvze8w==", "dependencies": { "crc-32": "^1.2.0", "ethereumjs-util": "^7.1.4" } }, "node_modules/@polygon-hermez/vm": { - "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@polygon-hermez/vm/-/vm-6.0.12.tgz", - "integrity": "sha512-X882QZUmbLFRBgD+uA5I4bP+i62bmixRgXsDu9vEhy7fVOfZvH4AbzgZ9lOivylkdj7oNfJO1WC5fvugiAa6pw==", + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@polygon-hermez/vm/-/vm-7.0.3.tgz", + "integrity": "sha512-zDZ+2Z+Xt/ZlB7/+jH0t6gXQ+3crICzmlo/fum0Kjv7CU57kX1p3uOxZ0Dy9yrLVMGzKy3fGtC98g92S4xSAhw==", "dependencies": { "@ethereumjs/block": "^3.6.1", "@ethereumjs/blockchain": "^5.5.1", @@ -1020,6 +1047,7 @@ "async-eventemitter": "^0.2.4", "core-js-pure": "^3.0.1", "debug": "^4.3.3", + "elliptic": "^6.5.7", "ethereumjs-util": "^7.1.4", "ethers": "^5.6.2", "functional-red-black-tree": "^1.0.1", @@ -1033,7 +1061,6 @@ "name": "@0xpolygonhermez/zkevm-commonjs", "version": "1.0.0", "resolved": "git+ssh://git@github.com/hermeznetwork/zkevm-commonjs.git#34f72fe9f7a4c3c45965742476a87148c9e05c0f", - "license": "pending", "dependencies": { "@ethereumjs/block": "^3.6.2", "@ethereumjs/tx": "^3.4.0", @@ -1046,6 +1073,15 @@ "pg": "^8.7.1" } }, + "node_modules/@polygon-hermez/zkevm-commonjs/node_modules/@polygon-hermez/common": { + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/@polygon-hermez/common/-/common-2.6.4.tgz", + "integrity": "sha512-ZGl/K1MaXHaDagqKCqkQgCRu9EfJ+mbK+t4GeVnDywMYGCyi7jF1u71Pyh4Rch3XFd/8rW/eVL4x4jkGwN16JQ==", + "dependencies": { + "crc-32": "^1.2.0", + "ethereumjs-util": "^7.1.4" + } + }, "node_modules/@polygon-hermez/zkevm-commonjs/node_modules/@polygon-hermez/vm": { "version": "5.7.30", "resolved": "https://registry.npmjs.org/@polygon-hermez/vm/-/vm-5.7.30.tgz", @@ -1122,15 +1158,22 @@ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "peer": true + }, "node_modules/@types/abstract-leveldown": { "version": "7.2.5", "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.5.tgz", "integrity": "sha512-/2B0nQF4UdupuxeKTJA2+Rj1D+uDemo6P4kMwKCpbfpnzeVaWSELTsAw4Lxn3VJD6APtRrZOCuYo+4nHUQfTfg==" }, "node_modules/@types/bn.js": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.5.tgz", - "integrity": "sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==", + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", "dependencies": { "@types/node": "*" } @@ -1158,11 +1201,11 @@ } }, "node_modules/@types/node": { - "version": "22.5.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.2.tgz", - "integrity": "sha512-acJsPTEqYqulZS/Yp/S3GgeE6GZ0qYODUR8aVr/DkhHQ8l9nd4j5x1/ZJy9/gHrRlFMqkO6i0I3E27Alu4jjPg==", + "version": "22.10.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.10.2.tgz", + "integrity": "sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.20.0" } }, "node_modules/@types/pbkdf2": { @@ -1188,15 +1231,16 @@ "dev": true }, "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", "dev": true }, "node_modules/abstract-leveldown": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dependencies": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -1209,9 +1253,9 @@ } }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -1369,16 +1413,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1388,16 +1432,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -1407,20 +1451,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -1470,9 +1513,9 @@ } }, "node_modules/b4a": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", - "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==" }, "node_modules/balanced-match": { "version": "1.0.2", @@ -1597,9 +1640,9 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.1.tgz", + "integrity": "sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -1701,16 +1744,44 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -1839,29 +1910,32 @@ } }, "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.6.tgz", + "integrity": "sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==", "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">= 0.10" } }, "node_modules/circom_runtime": { - "version": "0.1.25", - "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.25.tgz", - "integrity": "sha512-xBGsBFF5Uv6AKvbpgExYqpHfmfawH2HKe+LyjfKSRevqEV8u63i9KGHVIILsbJNW+0c5bm/66f0PUYQ7qZSkJA==", + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/circom_runtime/-/circom_runtime-0.1.28.tgz", + "integrity": "sha512-ACagpQ7zBRLKDl5xRZ4KpmYIcZDUjOiNRuxvXLqhnnlLSVY1Dbvh73TI853nqoR0oEbihtWmMSjgc5f+pXf/jQ==", "dependencies": { - "ffjavascript": "0.3.0" + "ffjavascript": "0.3.1" }, "bin": { "calcwit": "calcwit.js" } }, "node_modules/circom_runtime/node_modules/ffjavascript": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.3.0.tgz", - "integrity": "sha512-l7sR5kmU3gRwDy8g0Z2tYBXy5ttmafRPFOqY7S6af5cq51JqJWt5eQ/lSR/rs2wQNbDYaYlQr5O+OSUf/oMLoQ==", + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/ffjavascript/-/ffjavascript-0.3.1.tgz", + "integrity": "sha512-4PbK1WYodQtuF47D4pRI5KUg3Q392vuP5WjE1THSnceHdXwU3ijaoS0OqxTzLknCtz4Z2TtABzkBdBdMn3B/Aw==", "dependencies": { "wasmbuilder": "0.0.16", "wasmcurves": "0.2.2", @@ -1959,9 +2033,9 @@ "dev": true }, "node_modules/core-js-pure": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.38.1.tgz", - "integrity": "sha512-BY8Etc1FZqdw1glX0XNOq2FDwfrg/VGqoZOZCdaL+UmdaqDwQwYXkMJT4t6In+zfEfOJDcM9T0KdbBeJg8KKCQ==", + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.39.0.tgz", + "integrity": "sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -2005,9 +2079,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "dependencies": { "path-key": "^3.1.0", @@ -2055,13 +2129,13 @@ } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -2073,11 +2147,11 @@ } }, "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -2121,6 +2195,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dependencies": { "abstract-leveldown": "~6.2.1", "inherits": "^2.0.3" @@ -2133,6 +2208,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dependencies": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -2210,6 +2286,20 @@ "node": ">=6.0.0" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ebnf-parser": { "version": "0.1.10", "resolved": "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz", @@ -2230,9 +2320,9 @@ } }, "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "version": "6.6.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.6.1.tgz", + "integrity": "sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==", "dependencies": { "bn.js": "^4.11.9", "brorand": "^1.1.0", @@ -2243,11 +2333,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -2279,58 +2364,60 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.6.tgz", + "integrity": "sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==", "dev": true, "peer": true, "dependencies": { "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.7", + "get-intrinsic": "^1.2.6", "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", + "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", + "is-string": "^1.1.1", "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.0.0", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", + "typed-array-byte-offset": "^1.0.3", + "typed-array-length": "^1.0.7", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -2340,13 +2427,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -2398,15 +2482,15 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "peer": true, "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -2472,16 +2556,17 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -2568,9 +2653,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.2.tgz", - "integrity": "sha512-3XnC5fDyc8M4J2E8pt8pmSVRX2M+5yWMCfI/kDZwauQeFgzQOuhcRBFKjTeJagqgk4sFKxe1mvNVnaWwImx/Tg==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", "dev": true, "peer": true, "dependencies": { @@ -2596,35 +2681,37 @@ } }, "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", "dev": true, "peer": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", "array.prototype.flat": "^1.3.2", "array.prototype.flatmap": "^1.3.2", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", "tsconfig-paths": "^3.15.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "node_modules/eslint-plugin-import/node_modules/debug": { @@ -2845,6 +2932,11 @@ "node": ">=10.0.0" } }, + "node_modules/ethereumjs-util/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "node_modules/ethers": { "version": "5.7.2", "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", @@ -3033,9 +3125,9 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true }, "node_modules/fnv-plus": { @@ -3101,16 +3193,17 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.7.tgz", + "integrity": "sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -3152,16 +3245,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3171,15 +3269,15 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -3254,12 +3352,12 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3286,11 +3384,14 @@ } }, "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", "dev": true, "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -3316,10 +3417,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, + "peer": true, + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -3328,9 +3433,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "engines": { "node": ">= 0.4" @@ -3490,28 +3595,28 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "peer": true, "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3521,14 +3626,31 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -3538,13 +3660,16 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "peer": true, "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -3563,14 +3688,14 @@ } }, "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==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3592,9 +3717,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz", + "integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==", "dev": true, "peer": true, "dependencies": { @@ -3608,12 +3733,14 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "peer": true, "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -3624,13 +3751,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3648,6 +3776,22 @@ "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "peer": true, + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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", @@ -3683,6 +3827,19 @@ "node": ">=0.10.0" } }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", @@ -3706,13 +3863,14 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3740,14 +3898,16 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -3756,14 +3916,27 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -3773,13 +3946,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3789,13 +3963,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "peer": true, "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3805,12 +3981,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -3831,14 +4007,47 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "peer": true, + "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==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "peer": true, + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4130,6 +4339,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", + "deprecated": "Superseded by memory-level (https://github.com/Level/community#faq)", "dependencies": { "level-packager": "^5.0.3", "memdown": "^5.0.0" @@ -4178,6 +4388,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dependencies": { "deferred-leveldown": "~5.3.0", "level-errors": "~2.0.0", @@ -4302,6 +4513,15 @@ "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==" }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mcl-wasm": { "version": "0.7.9", "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", @@ -4324,6 +4544,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", + "deprecated": "Superseded by memory-level (https://github.com/Level/community#faq)", "dependencies": { "abstract-leveldown": "~6.2.1", "functional-red-black-tree": "~1.0.1", @@ -4340,6 +4561,7 @@ "version": "6.2.3", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", + "deprecated": "Superseded by abstract-level (https://github.com/Level/community#faq)", "dependencies": { "buffer": "^5.5.0", "immediate": "^3.2.3", @@ -4381,11 +4603,6 @@ "miller-rabin": "bin/miller-rabin" } }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" - }, "node_modules/minimalistic-assert": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", @@ -4506,12 +4723,6 @@ "node": ">=10" } }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, "node_modules/mocha/node_modules/supports-color": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", @@ -4546,9 +4757,9 @@ } }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/nanoassert": { "version": "2.0.0", @@ -4579,9 +4790,9 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node_modules/node-gyp-build": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", - "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -4611,9 +4822,9 @@ } }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "peer": true, "engines": { @@ -4633,14 +4844,16 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", "dev": true, "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -4699,13 +4912,14 @@ } }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -4843,13 +5057,13 @@ } }, "node_modules/pg": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.12.0.tgz", - "integrity": "sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==", + "version": "8.13.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.13.1.tgz", + "integrity": "sha512-OUir1A0rPNZlX//c7ksiu7crsGZTKSOXJPgtNiHGIlC9H0lO+NC6ZDYksSgBYY/thSWhnSRBv8w1lieNNGATNQ==", "dependencies": { - "pg-connection-string": "^2.6.4", - "pg-pool": "^3.6.2", - "pg-protocol": "^1.6.1", + "pg-connection-string": "^2.7.0", + "pg-pool": "^3.7.0", + "pg-protocol": "^1.7.0", "pg-types": "^2.1.0", "pgpass": "1.x" }, @@ -4875,9 +5089,9 @@ "optional": true }, "node_modules/pg-connection-string": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.4.tgz", - "integrity": "sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.7.0.tgz", + "integrity": "sha512-PI2W9mv53rXJQEOb8xNR8lH7Hr+EKa6oJa38zsK0S/ky2er16ios1wLKhZyxzD7jUReiWokc9WK5nxSnC7W1TA==" }, "node_modules/pg-int8": { "version": "1.0.1", @@ -4888,17 +5102,17 @@ } }, "node_modules/pg-pool": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.6.2.tgz", - "integrity": "sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==", + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.7.0.tgz", + "integrity": "sha512-ZOBQForurqh4zZWjrgSwwAtzJ7QiRX0ovFkZr2klsen3Nm0aoh33Ls0fzfv3imeH/nw/O27cjdz5kzYJfeGp/g==", "peerDependencies": { "pg": ">=8.0" } }, "node_modules/pg-protocol": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.1.tgz", - "integrity": "sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==" + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.7.0.tgz", + "integrity": "sha512-hTK/mE36i8fDDhgDFjy6xNOG+LCorxLG3WO17tku+ij6sVHXh1jQUJ8hYAnRhNla4QVD2H8er/FOjc/+EgC6yQ==" }, "node_modules/pg-types": { "version": "2.2.0", @@ -5200,17 +5414,40 @@ "node": ">=8.10.0" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.9.tgz", + "integrity": "sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==", + "dev": true, + "peer": true, + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "dunder-proto": "^1.0.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -5228,13 +5465,13 @@ } }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.9", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.9.tgz", + "integrity": "sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==", "dev": true, "peer": true, "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -5300,6 +5537,11 @@ "rlp": "bin/rlp" } }, + "node_modules/rlp/node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -5329,15 +5571,16 @@ "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==" }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -5367,15 +5610,15 @@ ] }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -5390,23 +5633,23 @@ "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==" }, "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.4.tgz", + "integrity": "sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw==", "hasInstallScript": true, "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", + "elliptic": "^6.5.7", + "node-addon-api": "^5.0.0", "node-gyp-build": "^4.2.0" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/secp256k1/node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" }, "node_modules/semaphore-async-await": { "version": "1.5.1", @@ -5506,16 +5749,73 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "peer": true, + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -5767,16 +6067,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5786,16 +6089,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5963,32 +6270,32 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -5998,18 +6305,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", "dev": true, "peer": true, "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -6019,18 +6327,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "peer": true, "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -6040,16 +6348,19 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "peer": true, "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6064,9 +6375,9 @@ } }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "6.20.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==" }, "node_modules/universalify": { "version": "2.0.1", @@ -6137,32 +6448,83 @@ } }, "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "peer": true, + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "peer": true, + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", "dev": true, "peer": 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" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.18.tgz", + "integrity": "sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==", "dev": true, "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "for-each": "^0.3.3", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { diff --git a/package.json b/package.json index b4503af9..e1c590dd 100644 --- a/package.json +++ b/package.json @@ -82,7 +82,7 @@ "test:arith": "mocha --max-old-space-size=25000 test/sm/sm_arith.js", "test:storage": "mocha test/sm/sm_storage/sm_storage_test.js", "test:mem_align": "mocha test/sm_mem_align_test.js", - "test:diagnostic:exec": "mkdir -p tmp/diagnostic && node test/zkasmtest.js -dE -R '2**23' -N '2**23' test/diagnostic/main.zkasm", + "test:diagnostic:exec": "mkdir -p tmp/diagnostic && node test/zkasmtest.js -dE -R '2**23' -N '2**23' test/diagnostic/main.zkasm", "test:diagnostic": "mkdir -p tmp/diagnostic && node --max-old-space-size=130000 test/zkasmtest.js -aCe -Es -R '2**23' -o 'tmp/diagnostic' test/diagnostic/main.zkasm", "test:big:keccak": "mkdir -p tmp/big/keccak && node --max-old-space-size=130000 test/zkasmtest.js -Ce -Es -R '2**23' -n 'Global,Main,Rom,PaddingKK,KeccakF,PaddingKKBit,Bits2Field' -o 'tmp/big/keccak' test/features/biggest_keccak.zkasm", "test:big:poseidon": "mkdir -p tmp/big/poseidon && node --max-old-space-size=130000 test/zkasmtest.js -Ce -Es -R '2**23' -n 'Global,Main,Rom,PoseidonG,Binary,Storage,ClimbKey' -o 'tmp/big/poseidon' test/features/biggest_poseidon.zkasm", @@ -104,11 +104,11 @@ "author": "Jordi Baylina", "license": "AGPL3", "dependencies": { - "@0xpolygonhermez/zkasmcom": "github:0xPolygonHermez/zkasmcom#v5.0.0-fork.8", - "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v8.0.0-fork.12", - "@0xpolygonhermez/zkevm-rom": "github:0xPolygonHermez/zkevm-rom#v8.0.0-rc.3-fork.12", + "@0xpolygonhermez/zkasmcom": "github:0xPolygonHermez/zkasmcom#develop-durian", + "@0xpolygonhermez/zkevm-commonjs": "github:0xpolygonhermez/zkevm-commonjs#v9.0.0-rc.3-fork.13", + "@0xpolygonhermez/zkevm-rom": "github:0xPolygonHermez/zkevm-rom#release/v9.0.0-rc.3-fork.13", "@0xpolygonhermez/zkevm-storage-rom": "https://github.com/0xPolygonHermez/zkevm-storage-rom.git#v4.0.0-fork.7", - "@0xpolygonhermez/zkevm-testvectors": "github:0xPolygonHermez/zkevm-testvectors#v8.0.0-rc.3-fork.12", + "@0xpolygonhermez/zkevm-testvectors": "github:0xPolygonHermez/zkevm-testvectors#v9.0.0-rc.3-fork.13", "@grpc/grpc-js": "^1.8.14", "chalk": "^3.0.0", "circomlib": "^2.0.3", diff --git a/pil/arith.pil b/pil/arith.pil index 0b6b1aa3..8d7446b1 100644 --- a/pil/arith.pil +++ b/pil/arith.pil @@ -1,27 +1,35 @@ /* Equations: + selEq arithEq + EQ0: A(x1) * B(y1) + C(x2) = D (y2) * 2 ** 256 + op (y3) 0 1 ARITH - EQ0: A(x1) * B(y1) + C(x2) = D (y2) * 2 ** 256 + op (y3) - selEq[0] + EQ1: s * x2 - s * x1 - y2 + y1 + (q0 * p1) lambda - ADD 1 2 ARITH_ECADD_DIFFERENT + EQ2: 2 * s * y1 - 3 * x1 * x1 + (q0 * p1) lambda - DBL 2 3 ARITH_ECADD_SAME + EQ3: s * s - x1 - x2 - x3 + (q1 * p1) x3 1+2 2,3 ARITH_ECADD_DIFFERENT, ARITH_ECADD_SAME + EQ4: s * x1 - s * x3 - y1 - y3 + (q2 * p1) y3 1+2 2,3 ARITH_ECADD_DIFFERENT, ARITH_ECADD_SAME - EQ1: s * x2 - s * x1 - y2 + y1 + (q0 * p1) lambda - ADD - selEq[1] - EQ2: 2 * s * y1 - 3 * x1 * x1 + (q0 * p1) lambda - DBL - selEq[2] - EQ3: s * s - x1 - x2 - x3 + (q1 * p1) x3 - selEq[3] - EQ4: s * x1 - s * x3 - y1 - y3 + (q2 * p1) y3 - selEq[3] + EQ5: x1 * x2 - y1 * y2 - x3 + (q1 * p2) 3 4 ARITH_BN254_MULFP2 + EQ6: y1 * x2 + x1 * y2 - y3 + (q2 * p2) 3 4 ARITH_BN254_MULFP2 - EQ5: x1 * x2 - y1 * y2 - x3 + (q1 * p2) - selEq[4] - EQ6: y1 * x2 + x1 * y2 - y3 + (q2 * p2) - selEq[4] + EQ7: x1 + x2 - x3 + (q1 * p2) 4 5 ARITH_BN254_ADDFP2 + EQ8: y1 + y2 - y3 + (q2 * p2) 4 5 ARITH_BN254_ADDFP2 - EQ7: x1 + x2 - x3 + (q1 * p2) - selEq[5] - EQ8: y1 + y2 - y3 + (q2 * p2) - selEq[5] + EQ9: x1 - x2 - x3 + (q1 * p2) 5 6 ARITH_BN254_SUBFP2 + EQ10: y1 - y2 - y3 + (q2 * p2) 5 6 ARITH_BN254_SUBFP2 - EQ9: x1 - x2 - x3 + (q1 * p2) - selEq[6] - EQ10: y1 - y2 - y3 + (q2 * p2) - selEq[6] + EQ11: s * x2 - s * x1 - y2 + y1 + (q0 * p3) lambda - ADD 6 7 ARITH_SECP256R1_ECADD_DIFFERENT + EQ12: 2 * s * y1 - 3 * x1 * x1 - a + (q0 * p3) lambda - DBL 7 8 ARITH_SECP256R1_ECADD_SAME + EQ13: s * s - x1 - x2 - x3 + (q1 * p3) x3 6+7 7,8 ARITH_SECP256R1_ECADD_DIFFERENT, ARITH_SECP256R1_ECADD_SAME + EQ14: s * x1 - s * x3 - y1 - y3 + (q2 * p3) y3 6+7 7,8 ARITH_SECP256R1_ECADD_DIFFERENT, ARITH_SECP256R1_ECADD_SAME where p1 refers to the base field order of: · Secp256k1: 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE FFFF FC2F and p2 refers to the base field order of: · BN254: 0x3064 4E72 E131 A029 B850 45B6 8181 585D 9781 6A91 6871 CA8D 3C20 8C16 D87C FD47 + and p3 refers to the base field order of: + · Secp256r1: 0xFFFF FFFF 0000 0001 0000 0000 0000 0000 0000 0000 FFFF FFFF FFFF FFFF FFFF FFFF + */ include "global.pil"; @@ -43,13 +51,16 @@ namespace Arith(%N); pol commit q1[16]; pol commit q2[16]; - pol commit resultEq0; - pol commit resultEq1; - pol commit resultEq2; + pol commit resultEq; + + resultEq * (1 - resultEq) = 0; - resultEq0 * (1 - resultEq0) = 0; - resultEq1 * (1 - resultEq1) = 0; - resultEq2 * (1 - resultEq2) = 0; + pol sel_secp256k1 = selEq[1] + selEq[2]; + pol sel_bn254 = selEq[3] + selEq[4] + selEq[5]; + pol sel_secp256r1 = selEq[6] + selEq[7]; + + pol sel_check_diff = selEq[1] + selEq[6]; + pol sel_check_lt_prime = sel_secp256k1 + sel_bn254 + sel_secp256r1; // FEATURE: // · Verify that the x1,x2 are different when adding different elliptic curve points (EQ1,EQ3,EQ4). @@ -115,21 +126,18 @@ namespace Arith(%N); // (A) forbidden, executor must control this situation, because expending an // unnecessary inverse. - (xAreDifferent - selEq[1]) * Global.CLK32[16] = 0; + (xAreDifferent - sel_check_diff) * Global.CLK32[16] = 0; // COST: 2 commit, 2 im, 0 constant, 4 constraints - // FEATURE: // - // Verify that the result of Secp256k1 addition (EQ1/EQ2,EQ3,EQ4) is free of aliases, i.e. that x3,y3 ∊ [0, p-1] - // Verify that the result of 𝔽p² = 𝔽p[u]/(u² + 1) multiplication, addition and subtraction (EQ5,EQ6 || EQ7,EQ8 || EQ9,EQ10) - // is free of aliases, i.e. that x3,y3 ∊ [0, p-1] - // + // Verify that the result of Secp256k1, Secp256r1 and BN254 operations are free of aliases, i.e. that x3,y3 ∊ [0, p-1] // Here, p refers, respectively, to the base field order of any of the following elliptic curves: // // Secp256k1: 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE FFFF FC2F // BN254: 0x3064 4E72 E131 A029 B850 45B6 8181 585D 9781 6A91 6871 CA8D 3C20 8C16 D87C FD47 + // Secp256r1: 0xFFFF FFFF 0000 0001 0000 0000 0000 0000 0000 0000 FFFF FFFF FFFF FFFF FFFF FFFF // // Strategy: Compare from the most significant chunk to the least significant chunk of x3 and y3 (A). On each chunk, // chunkLtPrime indicates whether the chunk is smaller than the FPEC chunk. valueLtPrime indicates if any @@ -151,68 +159,47 @@ namespace Arith(%N); // chunkPrime(0..15) - 1 = [0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFD, 0xFFFE, 0xFC2E] // chunkPrime(0..15) = [0x3064, 0x4e72, 0xe131, 0xa029, 0xb850, 0x45b6, 0x8181, 0x585d, 0x9781, 0x6a91, 0x6871, 0xca8d, 0x3c20, 0x8c16, 0xd87c, 0xfd47] // chunkPrime(0..15) - 1 = [0x3063, 0x4e71, 0xe130, 0xa028, 0xb84f, 0x45b5, 0x8180, 0x585c, 0x9780, 0x6a90, 0x6870, 0xca8c, 0x3c1f, 0x8c15, 0xd87b, 0xfd46] + // chunkPrime(0..15) = [0xFFFF, 0xFFFF, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF] + // chunkPrime(0..15) - 1 = [0xFFFE, 0xFFFE, N/A, 0x0000, N/A, N/A, N/A, N/A, N/A, N/A, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE] // - // different Secp256k1 prime chunks [0xFFFF, 0xFFFE, 0xFFFD, 0xFC2F, 0xFC2E] - // different BN254 prime chunks [0x3064, 0x4e72, 0xe131, 0xa029, 0xb850, 0x45b6, 0x8181, 0x585d, 0x9781, 0x6a91, 0x6871, 0xca8d, 0x3c20, 0x8c16, 0xd87c, 0xfd47, - // 0x3063, 0x4e71, 0xe130, 0xa028, 0xb84f, 0x45b5, 0x8180, 0x585c, 0x9780, 0x6a90, 0x6870, 0xca8c, 0x3c1f, 0x8c15, 0xd87b, 0xfd46] - - // CLK0 CLK1 CLK2 CLK3 CLK4 CLK5 CLK6 CLK7 CLK8 CLK9 CLK10 CLK11 CLK12 CLK13 CLK14 CLK15 - // Secp256k1: 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF fffe FFFF fc2f - // BN254: 0x3064 4e72 e131 a029 b850 45b6 8181 585d 9781 6a91 6871 ca8d 3c20 8c16 d87c fd47 + // N/A: means there aren't valid values, if prover said that this chunk is smaller it's false. + // NOTE: first block of 2^16 values are all valid, This is convenient because the range selector 0 then indicates any valid 16-bit value // - // RANGE_SEL P_RANGE BASE - // / 0 [0,0xFFFF] CLK0, ..., CLK12, CLK14 - // | 1 [0,0xFFFE] CLK13 - // Secp256k1 | 2 [0,0xFFFD] - // | 3 [0,0xFC2F] CLK15 - // \ 4 [0,0xFC2E] - // / 5 [0,0x3064] CLK0 - // | 6 [0,0x3063] - // | 7 [0,0x4e72] CLK1 - // | 8 [0,0x4e71] - // | 9 [0,0xe131] CLK2 - // | 10 [0,0xe130] - // | 11 [0,0xa029] CLK3 - // | 12 [0,0xa028] - // | 13 [0,0xb850] CLK4 - // | 14 [0,0xb84f] - // | 15 [0,0x45b6] CLK5 - // | 16 [0,0x45b5] - // | 17 [0,0x8181] CLK6 - // | 18 [0,0x8180] - // | 19 [0,0x585d] CLK7 - // BN254 | 20 [0,0x585c] - // | 21 [0,0x9781] CLK8 - // | 22 [0,0x9780] - // | 23 [0,0x6a91] CLK9 - // | 24 [0,0x6a90] - // | 25 [0,0x6871] CLK10 - // | 26 [0,0x6870] - // | 27 [0,0xca8d] CLK11 - // | 28 [0,0xca8c] - // | 29 [0,0x3c20] CLK12 - // | 30 [0,0x3c1f] - // | 31 [0,0x8c16] CLK13 - // | 32 [0,0x8c15] - // | 33 [0,0xd87c] CLK14 - // | 34 [0,0xd87b] - // | 35 [0,0xfd47] CLK15 - // \ 36 [0,0xfd46] + // RANGE_SEL BYTE2 + // 0 0..2**16-1 + // ---------------------------- + // 1 0..2**16-2 + // 0 2**16-1 (*) + // ----------------------------- + // 2 0..TO <--- this block check a value from 0..TO + // 0 TO+1..2**16-1 (*) (even range_sel was used to check a value not is greater than prime chunk) + // ----------------------------- + // 3 0..TO-1 <--- this block check a value less than TO + // 0 TO..2**16-1 (*) (odd range_sel was used to check a value is less than prime chunk) + // ----------------------------- // - // pRangeSecp256k1 = (CLK13 + 3 * CLK15 + chunkLtPrime) * selEq[3] - // pRangeBN254 = (5 * CLK0 + 7 * CLK1 + 9 * CLK2 + 11 * CLK3 + 13 * CLK4 + 15 * CLK5 + 17 * CLK6 + 19 * CLK7 + 21 * CLK8 + 23 * CLK9 + 25 * CLK10 + 27 * CLK11 + 29 * CLK12 + 31 * CLK13 + 33 * CLK14 + 35 * CLK15) * (selEq[4] + selEq[5] + selEq[6]) - // pRange = (pRangeSecp256k1 + pRangeBN254) * (1 - valueLtPrime) + // (*) it's possible compact table if invalid values are eleminated, but after it's necessary a constant pol to + // indicate values. If this values remains with range_sel = 0, it's possible reuse BYTE2 for values. // - // CLK pRange pRange - // [selEq[3] = 1, chunkLtPrime = 0] [selEq[3] = 1, chunkLtPrime = 1] + // ----------------------------- + // 2*K 0 <--- this block check a value is 0. + // 0 1..2**16-1 + // ----------------------------- + // 0 1..2**16-1 <--- no values less than 0. + // ----------------------------- // + // BLOCKS (2**16) x 16 clocks/chunks = 2**20 values * 7 blocks = (2**22 - 2**20) < 2**23 + // ------------------------------------------------------------------------------------- + // (clp) + // 0: FULL ( 0 + 0 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 1: pSecp256k1 (16 + 0 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 2: LT(pSecp256k1) (16 + 16 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 3: BN254 (48 + 0 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 4: LT(BN254) (48 + 16 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 5: pSecp256r1 (80 + 0 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 6: LT(pSecp256r1) (80 + 16 + 0,1,2,3,4,5,6,7,8,...,14,15) // - // 0 0 + 3 * 0 + 0 = 0 0 + 3 * 0 + 1 = 1 - // : : : - // 12 0 + 3 * 0 + 0 = 0 0 + 3 * 0 + 1 = 1 - // 13 1 + 3 * 0 + 0 = 1 1 + 3 * 0 + 1 = 2 - // 14 0 + 3 * 0 + 0 = 0 0 + 3 * 0 + 1 = 1 - // 15 0 + 3 * 1 + 0 = 3 0 + 3 * 1 + 1 = 4 + // clp = chunkLtPrime * 16 // // valueLtPrime' = valueLtPrime * (1 - CLK0 - CLK16) + chunkLtPrime // @@ -231,14 +218,13 @@ namespace Arith(%N); // (D) when valueLtPrime = 0 ==> chunkLtPrime must be zero, if not it FAILS // (E) on clocks 0 and 16, current value of valueLtPrime isn't considered // - // - // Examples (Secp256k1 prime): + // // Examples (Secp256k1 prime): // ┌──────── pRange // ┌── max_value │ ┌───── chunkLtPrime // │ ┌─ example │ │ ┌── valueLtPrime // │ │ │ │ │ - // CLK0 0xFFFF 0xFFFF 0 0 0 - // CLK1 0xFFFF 0xFF00 1 1 0 // RANGE [0, 0xFFFE] + // CLK0 0xFFFF 0xFFFF 16 0 0 (16 = clock(0) + Secp256k1(16)) + // CLK1 0xFFFF 0xFF00 33 1 0 RANGE [0, 0xFFFE] (33 = clock(1) + Secp256k1(16) + chunkLtPrime(16)) // CLK2 0xFFFF 0x0000 0 0 1 // CLK3 0xFFFF 0x0000 0 0 1 // CLK4 0xFFFF 0xFFFF 0 0 1 @@ -251,22 +237,22 @@ namespace Arith(%N); // ┌── max_value │ ┌───── chunkLtPrime // │ ┌─ example │ │ ┌── valueLtPrime // │ │ │ │ │ - // CLK0 0xFFFF 0xFFFF 0 0 0 - // CLK1 0xFFFF 0xFFFF 0 0 0 - // CLK2 0xFFFF 0xFFFF 0 0 0 + // CLK0 0xFFFF 0xFFFF 16 0 0 (16 = clock(0) + Secp256k1(16)) + // CLK1 0xFFFF 0xFFFF 17 0 0 (17 = clock(1) + Secp256k1(16)) + // CLK2 0xFFFF 0xFFFF 18 0 0 (18 = clock(2) + Secp256k1(16)) // : - // CLK12 0xFFFF 0xFFFF 0 0 0 - // CLK13 0xFFFE 0xFFFF 1 0 0 // CLK13 == 1 RANGE [0, 0xFFFE] - // CLK14 0xFFFF 0xFFFF 0 0 0 - // CLK15 0xFC2F 0xFC00 4 1 0 // CLK15 == 1 RANGE [0, 0xFC2F] + // CLK12 0xFFFF 0xFFFF 28 0 0 (28 = clock(12) + Secp256k1(16)) + // CLK13 0xFFFE 0xFFFF 29 0 0 CLK13 == 1 RANGE [0, 0xFFFE] (29 = clock(13) + Secp256k1(16)) + // CLK14 0xFFFF 0xFFFF 30 0 0 (30 = clock(14) + Secp256k1(16)) + // CLK15 0xFC2F 0xFC00 47 1 0 CLK15 == 1 RANGE [0, 0xFC2F] 47 = 46+1 (47 = clock(15) + Secp256k1(16) + chunkLtPrime(16)) // CLK16 0xFFFF 0xFFFF 0 0 1 // valueLtPrime indicates whether, at this point, we know that the value is smaller than the prime. - // If selEq[3],selEq[4],selEq[5],selEq[6] = 0, it must be 0. + // For regular ARITH (selEq[0] = 1), it must be 0. pol commit valueLtPrime; // chunkLtPrime indicates whether the current value chunk is smaller than the prime chunk. - // If selEq[3],selEq[4],selEq[5],selEq[6] = 0 or valueLtPrime = 1, it must be 0. + // For regular ARITH (selEq[0] = 1) or if valueLtPrime =1, it must be 0. pol commit chunkLtPrime; // binary constraints @@ -278,38 +264,18 @@ namespace Arith(%N); valueLtPrime' = valueLtPrime * (1 - Global.CLK32[0] - Global.CLK32[16]) + chunkLtPrime; // This constraint is used to verify (and to enforce) that at the end of a 16-clock cycle, valueLtPrime is equal to 1. - // This constraint is applied when one of selEq[3],selEq[4],selEq[5],selEq[6] equals 1. - (valueLtPrime' - selEq[3] - selEq[4] - selEq[5] - selEq[6]) * (Global.CLK32[15] + Global.CLK32[31]) = 0; - - pol constant RANGE_SEL; // 0:2**16, - // 1:2**16-1,0 - // 2:2**16-2,0:2 - // 3:2**16-976,0:976 - // 4:2**16-977,0:977 - // ----------------------------------------------------------------------- - // 5:2**16-53147,0:53147 16:2**16-47688,0:47688 27:2**16-13682,0:13682 - // 6:2**16-53146,0:53146 17:2**16-32382,0:32382 28:2**16-13681,0:13681 - // 7:2**16-45453,0:45453 18:2**16-32381,0:32381 29:2**16-50143,0:50143 - // 8:2**16-45452,0:45452 19:2**16-42914,0:42914 30:2**16-50142,0:50142 - // 9:2**16-7886,0:7886 20:2**16-42913,0:42913 31:2**16-29673,0:29673 - // 10:2**16-7885,0:7885 21:2**16-26750,0:26750 32:2**16-29672,0:29672 - // 11:2**16-24534,0:24534 22:2**16-26749,0:26749 33:2**16-10115,0:10115 - // 12:2**16-24533,0:24533 23:2**16-38254,0:38254 34:2**16-10114,0:10114 - // 13:2**16-18351,0:18351 24:2**16-38253,0:38253 35:2**16-696,0:696 - // 14:2**16-18350,0:18350 25:2**16-38798,0:38798 36:2**16-695,0:695 - // 15:2**16-47689,0:47689 26:2**16-38797,0:38797 - - // range to be looked up for each chunk and for each prime - pol pRangeSecp256k1 = (Global.CLK32[13] + Global.CLK32[29] + 3 * (Global.CLK32[15] + Global.CLK32[31]) + chunkLtPrime) * selEq[3]; - pol pRangeBN254 = (5 * (Global.CLK32[0] + Global.CLK32[16]) + 7 * (Global.CLK32[1] + Global.CLK32[17]) + 9 * (Global.CLK32[2] + Global.CLK32[18]) - + 11 * (Global.CLK32[3] + Global.CLK32[19]) + 13 * (Global.CLK32[4] + Global.CLK32[20]) + 15 * (Global.CLK32[5] + Global.CLK32[21]) - + 17 * (Global.CLK32[6] + Global.CLK32[22]) + 19 * (Global.CLK32[7] + Global.CLK32[23]) + 21 * (Global.CLK32[8] + Global.CLK32[24]) - + 23 * (Global.CLK32[9] + Global.CLK32[25]) + 25 * (Global.CLK32[10] + Global.CLK32[26]) + 27 * (Global.CLK32[11] + Global.CLK32[27]) - + 29 * (Global.CLK32[12] + Global.CLK32[28]) + 31 * (Global.CLK32[13] + Global.CLK32[29]) + 33 * (Global.CLK32[14] + Global.CLK32[30]) - + 35 * (Global.CLK32[15] + Global.CLK32[31]) + chunkLtPrime) * (selEq[4] + selEq[5] + selEq[6]); + // This constraint is applied on SECP256K1(1,2), BN254(3,4,5), SECP256R1(6,7) equals 1. + (valueLtPrime' - sel_check_lt_prime) * (Global.CLK32[15] + Global.CLK32[31]) = 0; + + pol constant RANGE_SEL; // lookup with RANGE_SEL as first column and BYTE2 as second column - {(pRangeSecp256k1 + pRangeBN254) * (1 - valueLtPrime), x3[15]*Global.CLK32[0] + x3[14]*Global.CLK32[1] + x3[13]*Global.CLK32[2] + x3[12]*Global.CLK32[3] + x3[11]*Global.CLK32[4] + x3[10]*Global.CLK32[5] + x3[9]*Global.CLK32[6] + x3[8]*Global.CLK32[7] + {(0*Global.CLK32[0] + 1*Global.CLK32[1] + 2*Global.CLK32[2] + 3*Global.CLK32[3] + 4*Global.CLK32[4] + 5*Global.CLK32[5] + 6*Global.CLK32[6] + 7*Global.CLK32[7] + + 8*Global.CLK32[8] + 9*Global.CLK32[9] + 10*Global.CLK32[10] + 11*Global.CLK32[11] + 12*Global.CLK32[12] + 13*Global.CLK32[13] + 14*Global.CLK32[14] + 15*Global.CLK32[15] + + 0*Global.CLK32[16] + 1*Global.CLK32[17] + 2*Global.CLK32[18] + 3*Global.CLK32[19] + 4*Global.CLK32[20] + 5*Global.CLK32[21] + 6*Global.CLK32[22] + 7*Global.CLK32[23] + + 8*Global.CLK32[24] + 9*Global.CLK32[25] + 10*Global.CLK32[26] + 11*Global.CLK32[27] + 12*Global.CLK32[28] + 13*Global.CLK32[29] + 14*Global.CLK32[30] + 15*Global.CLK32[31] + + 16 * sel_secp256k1 + 48 * sel_bn254 + 80 * sel_secp256r1 + 16 * chunkLtPrime) * (1 - valueLtPrime), + x3[15]*Global.CLK32[0] + x3[14]*Global.CLK32[1] + x3[13]*Global.CLK32[2] + x3[12]*Global.CLK32[3] + x3[11]*Global.CLK32[4] + x3[10]*Global.CLK32[5] + x3[9]*Global.CLK32[6] + x3[8]*Global.CLK32[7] + x3[7]*Global.CLK32[8] + x3[6]*Global.CLK32[9] + x3[5]*Global.CLK32[10] + x3[4]*Global.CLK32[11] + x3[3]*Global.CLK32[12] + x3[2]*Global.CLK32[13] + x3[1]*Global.CLK32[14] + x3[0]*Global.CLK32[15] + y3[15]*Global.CLK32[16] + y3[14]*Global.CLK32[17] + y3[13]*Global.CLK32[18] + y3[12]*Global.CLK32[19] + y3[11]*Global.CLK32[20] + y3[10]*Global.CLK32[21] + y3[9]*Global.CLK32[22] + y3[8]*Global.CLK32[23] + y3[7]*Global.CLK32[24] + y3[6]*Global.CLK32[25] + y3[5]*Global.CLK32[26] + y3[4]*Global.CLK32[27] + y3[3]*Global.CLK32[28] + y3[2]*Global.CLK32[29] + y3[1]*Global.CLK32[30] + y3[0]*Global.CLK32[31]} in {RANGE_SEL, Global.BYTE2}; @@ -4361,88 +4327,1539 @@ namespace Arith(%N); 0; - pol eq0 = eq0_0*Global.CLK32[0] + eq0_1*Global.CLK32[1] + eq0_2*Global.CLK32[2] + eq0_3*Global.CLK32[3] + eq0_4*Global.CLK32[4] + eq0_5*Global.CLK32[5] + eq0_6*Global.CLK32[6] + eq0_7*Global.CLK32[7] - + eq0_8*Global.CLK32[8] + eq0_9*Global.CLK32[9] + eq0_10*Global.CLK32[10] + eq0_11*Global.CLK32[11] + eq0_12*Global.CLK32[12] + eq0_13*Global.CLK32[13] + eq0_14*Global.CLK32[14] + eq0_15*Global.CLK32[15] - + eq0_16*Global.CLK32[16] + eq0_17*Global.CLK32[17] + eq0_18*Global.CLK32[18] + eq0_19*Global.CLK32[19] + eq0_20*Global.CLK32[20] + eq0_21*Global.CLK32[21] + eq0_22*Global.CLK32[22] + eq0_23*Global.CLK32[23] - + eq0_24*Global.CLK32[24] + eq0_25*Global.CLK32[25] + eq0_26*Global.CLK32[26] + eq0_27*Global.CLK32[27] + eq0_28*Global.CLK32[28] + eq0_29*Global.CLK32[29] + eq0_30*Global.CLK32[30] + eq0_31*Global.CLK32[31]; - pol eq1 = eq1_0*Global.CLK32[0] + eq1_1*Global.CLK32[1] + eq1_2*Global.CLK32[2] + eq1_3*Global.CLK32[3] + eq1_4*Global.CLK32[4] + eq1_5*Global.CLK32[5] + eq1_6*Global.CLK32[6] + eq1_7*Global.CLK32[7] - + eq1_8*Global.CLK32[8] + eq1_9*Global.CLK32[9] + eq1_10*Global.CLK32[10] + eq1_11*Global.CLK32[11] + eq1_12*Global.CLK32[12] + eq1_13*Global.CLK32[13] + eq1_14*Global.CLK32[14] + eq1_15*Global.CLK32[15] - + eq1_16*Global.CLK32[16] + eq1_17*Global.CLK32[17] + eq1_18*Global.CLK32[18] + eq1_19*Global.CLK32[19] + eq1_20*Global.CLK32[20] + eq1_21*Global.CLK32[21] + eq1_22*Global.CLK32[22] + eq1_23*Global.CLK32[23] - + eq1_24*Global.CLK32[24] + eq1_25*Global.CLK32[25] + eq1_26*Global.CLK32[26] + eq1_27*Global.CLK32[27] + eq1_28*Global.CLK32[28] + eq1_29*Global.CLK32[29] + eq1_30*Global.CLK32[30] + eq1_31*Global.CLK32[31]; - pol eq2 = eq2_0*Global.CLK32[0] + eq2_1*Global.CLK32[1] + eq2_2*Global.CLK32[2] + eq2_3*Global.CLK32[3] + eq2_4*Global.CLK32[4] + eq2_5*Global.CLK32[5] + eq2_6*Global.CLK32[6] + eq2_7*Global.CLK32[7] - + eq2_8*Global.CLK32[8] + eq2_9*Global.CLK32[9] + eq2_10*Global.CLK32[10] + eq2_11*Global.CLK32[11] + eq2_12*Global.CLK32[12] + eq2_13*Global.CLK32[13] + eq2_14*Global.CLK32[14] + eq2_15*Global.CLK32[15] - + eq2_16*Global.CLK32[16] + eq2_17*Global.CLK32[17] + eq2_18*Global.CLK32[18] + eq2_19*Global.CLK32[19] + eq2_20*Global.CLK32[20] + eq2_21*Global.CLK32[21] + eq2_22*Global.CLK32[22] + eq2_23*Global.CLK32[23] - + eq2_24*Global.CLK32[24] + eq2_25*Global.CLK32[25] + eq2_26*Global.CLK32[26] + eq2_27*Global.CLK32[27] + eq2_28*Global.CLK32[28] + eq2_29*Global.CLK32[29] + eq2_30*Global.CLK32[30] + eq2_31*Global.CLK32[31]; - pol eq3 = eq3_0*Global.CLK32[0] + eq3_1*Global.CLK32[1] + eq3_2*Global.CLK32[2] + eq3_3*Global.CLK32[3] + eq3_4*Global.CLK32[4] + eq3_5*Global.CLK32[5] + eq3_6*Global.CLK32[6] + eq3_7*Global.CLK32[7] - + eq3_8*Global.CLK32[8] + eq3_9*Global.CLK32[9] + eq3_10*Global.CLK32[10] + eq3_11*Global.CLK32[11] + eq3_12*Global.CLK32[12] + eq3_13*Global.CLK32[13] + eq3_14*Global.CLK32[14] + eq3_15*Global.CLK32[15] - + eq3_16*Global.CLK32[16] + eq3_17*Global.CLK32[17] + eq3_18*Global.CLK32[18] + eq3_19*Global.CLK32[19] + eq3_20*Global.CLK32[20] + eq3_21*Global.CLK32[21] + eq3_22*Global.CLK32[22] + eq3_23*Global.CLK32[23] - + eq3_24*Global.CLK32[24] + eq3_25*Global.CLK32[25] + eq3_26*Global.CLK32[26] + eq3_27*Global.CLK32[27] + eq3_28*Global.CLK32[28] + eq3_29*Global.CLK32[29] + eq3_30*Global.CLK32[30] + eq3_31*Global.CLK32[31]; - pol eq4 = eq4_0*Global.CLK32[0] + eq4_1*Global.CLK32[1] + eq4_2*Global.CLK32[2] + eq4_3*Global.CLK32[3] + eq4_4*Global.CLK32[4] + eq4_5*Global.CLK32[5] + eq4_6*Global.CLK32[6] + eq4_7*Global.CLK32[7] - + eq4_8*Global.CLK32[8] + eq4_9*Global.CLK32[9] + eq4_10*Global.CLK32[10] + eq4_11*Global.CLK32[11] + eq4_12*Global.CLK32[12] + eq4_13*Global.CLK32[13] + eq4_14*Global.CLK32[14] + eq4_15*Global.CLK32[15] - + eq4_16*Global.CLK32[16] + eq4_17*Global.CLK32[17] + eq4_18*Global.CLK32[18] + eq4_19*Global.CLK32[19] + eq4_20*Global.CLK32[20] + eq4_21*Global.CLK32[21] + eq4_22*Global.CLK32[22] + eq4_23*Global.CLK32[23] - + eq4_24*Global.CLK32[24] + eq4_25*Global.CLK32[25] + eq4_26*Global.CLK32[26] + eq4_27*Global.CLK32[27] + eq4_28*Global.CLK32[28] + eq4_29*Global.CLK32[29] + eq4_30*Global.CLK32[30] + eq4_31*Global.CLK32[31]; - pol eq5 = eq5_0*Global.CLK32[0] + eq5_1*Global.CLK32[1] + eq5_2*Global.CLK32[2] + eq5_3*Global.CLK32[3] + eq5_4*Global.CLK32[4] + eq5_5*Global.CLK32[5] + eq5_6*Global.CLK32[6] + eq5_7*Global.CLK32[7] - + eq5_8*Global.CLK32[8] + eq5_9*Global.CLK32[9] + eq5_10*Global.CLK32[10] + eq5_11*Global.CLK32[11] + eq5_12*Global.CLK32[12] + eq5_13*Global.CLK32[13] + eq5_14*Global.CLK32[14] + eq5_15*Global.CLK32[15] - + eq5_16*Global.CLK32[16] + eq5_17*Global.CLK32[17] + eq5_18*Global.CLK32[18] + eq5_19*Global.CLK32[19] + eq5_20*Global.CLK32[20] + eq5_21*Global.CLK32[21] + eq5_22*Global.CLK32[22] + eq5_23*Global.CLK32[23] - + eq5_24*Global.CLK32[24] + eq5_25*Global.CLK32[25] + eq5_26*Global.CLK32[26] + eq5_27*Global.CLK32[27] + eq5_28*Global.CLK32[28] + eq5_29*Global.CLK32[29] + eq5_30*Global.CLK32[30] + eq5_31*Global.CLK32[31]; - pol eq6 = eq6_0*Global.CLK32[0] + eq6_1*Global.CLK32[1] + eq6_2*Global.CLK32[2] + eq6_3*Global.CLK32[3] + eq6_4*Global.CLK32[4] + eq6_5*Global.CLK32[5] + eq6_6*Global.CLK32[6] + eq6_7*Global.CLK32[7] - + eq6_8*Global.CLK32[8] + eq6_9*Global.CLK32[9] + eq6_10*Global.CLK32[10] + eq6_11*Global.CLK32[11] + eq6_12*Global.CLK32[12] + eq6_13*Global.CLK32[13] + eq6_14*Global.CLK32[14] + eq6_15*Global.CLK32[15] - + eq6_16*Global.CLK32[16] + eq6_17*Global.CLK32[17] + eq6_18*Global.CLK32[18] + eq6_19*Global.CLK32[19] + eq6_20*Global.CLK32[20] + eq6_21*Global.CLK32[21] + eq6_22*Global.CLK32[22] + eq6_23*Global.CLK32[23] - + eq6_24*Global.CLK32[24] + eq6_25*Global.CLK32[25] + eq6_26*Global.CLK32[26] + eq6_27*Global.CLK32[27] + eq6_28*Global.CLK32[28] + eq6_29*Global.CLK32[29] + eq6_30*Global.CLK32[30] + eq6_31*Global.CLK32[31]; - pol eq7 = eq7_0*Global.CLK32[0] + eq7_1*Global.CLK32[1] + eq7_2*Global.CLK32[2] + eq7_3*Global.CLK32[3] + eq7_4*Global.CLK32[4] + eq7_5*Global.CLK32[5] + eq7_6*Global.CLK32[6] + eq7_7*Global.CLK32[7] - + eq7_8*Global.CLK32[8] + eq7_9*Global.CLK32[9] + eq7_10*Global.CLK32[10] + eq7_11*Global.CLK32[11] + eq7_12*Global.CLK32[12] + eq7_13*Global.CLK32[13] + eq7_14*Global.CLK32[14] + eq7_15*Global.CLK32[15] - + eq7_16*Global.CLK32[16] + eq7_17*Global.CLK32[17] + eq7_18*Global.CLK32[18] + eq7_19*Global.CLK32[19] + eq7_20*Global.CLK32[20] + eq7_21*Global.CLK32[21] + eq7_22*Global.CLK32[22] + eq7_23*Global.CLK32[23] - + eq7_24*Global.CLK32[24] + eq7_25*Global.CLK32[25] + eq7_26*Global.CLK32[26] + eq7_27*Global.CLK32[27] + eq7_28*Global.CLK32[28] + eq7_29*Global.CLK32[29] + eq7_30*Global.CLK32[30] + eq7_31*Global.CLK32[31]; - pol eq8 = eq8_0*Global.CLK32[0] + eq8_1*Global.CLK32[1] + eq8_2*Global.CLK32[2] + eq8_3*Global.CLK32[3] + eq8_4*Global.CLK32[4] + eq8_5*Global.CLK32[5] + eq8_6*Global.CLK32[6] + eq8_7*Global.CLK32[7] - + eq8_8*Global.CLK32[8] + eq8_9*Global.CLK32[9] + eq8_10*Global.CLK32[10] + eq8_11*Global.CLK32[11] + eq8_12*Global.CLK32[12] + eq8_13*Global.CLK32[13] + eq8_14*Global.CLK32[14] + eq8_15*Global.CLK32[15] - + eq8_16*Global.CLK32[16] + eq8_17*Global.CLK32[17] + eq8_18*Global.CLK32[18] + eq8_19*Global.CLK32[19] + eq8_20*Global.CLK32[20] + eq8_21*Global.CLK32[21] + eq8_22*Global.CLK32[22] + eq8_23*Global.CLK32[23] - + eq8_24*Global.CLK32[24] + eq8_25*Global.CLK32[25] + eq8_26*Global.CLK32[26] + eq8_27*Global.CLK32[27] + eq8_28*Global.CLK32[28] + eq8_29*Global.CLK32[29] + eq8_30*Global.CLK32[30] + eq8_31*Global.CLK32[31]; - pol eq9 = eq9_0*Global.CLK32[0] + eq9_1*Global.CLK32[1] + eq9_2*Global.CLK32[2] + eq9_3*Global.CLK32[3] + eq9_4*Global.CLK32[4] + eq9_5*Global.CLK32[5] + eq9_6*Global.CLK32[6] + eq9_7*Global.CLK32[7] - + eq9_8*Global.CLK32[8] + eq9_9*Global.CLK32[9] + eq9_10*Global.CLK32[10] + eq9_11*Global.CLK32[11] + eq9_12*Global.CLK32[12] + eq9_13*Global.CLK32[13] + eq9_14*Global.CLK32[14] + eq9_15*Global.CLK32[15] - + eq9_16*Global.CLK32[16] + eq9_17*Global.CLK32[17] + eq9_18*Global.CLK32[18] + eq9_19*Global.CLK32[19] + eq9_20*Global.CLK32[20] + eq9_21*Global.CLK32[21] + eq9_22*Global.CLK32[22] + eq9_23*Global.CLK32[23] - + eq9_24*Global.CLK32[24] + eq9_25*Global.CLK32[25] + eq9_26*Global.CLK32[26] + eq9_27*Global.CLK32[27] + eq9_28*Global.CLK32[28] + eq9_29*Global.CLK32[29] + eq9_30*Global.CLK32[30] + eq9_31*Global.CLK32[31]; - pol eq10 = eq10_0*Global.CLK32[0] + eq10_1*Global.CLK32[1] + eq10_2*Global.CLK32[2] + eq10_3*Global.CLK32[3] + eq10_4*Global.CLK32[4] + eq10_5*Global.CLK32[5] + eq10_6*Global.CLK32[6] + eq10_7*Global.CLK32[7] - + eq10_8*Global.CLK32[8] + eq10_9*Global.CLK32[9] + eq10_10*Global.CLK32[10] + eq10_11*Global.CLK32[11] + eq10_12*Global.CLK32[12] + eq10_13*Global.CLK32[13] + eq10_14*Global.CLK32[14] + eq10_15*Global.CLK32[15] - + eq10_16*Global.CLK32[16] + eq10_17*Global.CLK32[17] + eq10_18*Global.CLK32[18] + eq10_19*Global.CLK32[19] + eq10_20*Global.CLK32[20] + eq10_21*Global.CLK32[21] + eq10_22*Global.CLK32[22] + eq10_23*Global.CLK32[23] - + eq10_24*Global.CLK32[24] + eq10_25*Global.CLK32[25] + eq10_26*Global.CLK32[26] + eq10_27*Global.CLK32[27] + eq10_28*Global.CLK32[28] + eq10_29*Global.CLK32[29] + eq10_30*Global.CLK32[30] + eq10_31*Global.CLK32[31]; + /******* + * + * EQ11: s * x2 - s * x1 - y2 + y1 - p * (q0 - offset) = 0 + * + *******/ - pol commit selEq[7]; + pol eq11_0 = + (s[0] * x2[0] - s[0] * x1[0] - 65535 * q0[0]) + - y2[0] + y1[0]; - selEq[0]' * (1-Global.CLK32[31]) = selEq[0] * (1-Global.CLK32[31]); - selEq[1]' * (1-Global.CLK32[31]) = selEq[1] * (1-Global.CLK32[31]); - selEq[2]' * (1-Global.CLK32[31]) = selEq[2] * (1-Global.CLK32[31]); - selEq[3]' * (1-Global.CLK32[31]) = selEq[3] * (1-Global.CLK32[31]); - selEq[4]' * (1-Global.CLK32[31]) = selEq[4] * (1-Global.CLK32[31]); - selEq[5]' * (1-Global.CLK32[31]) = selEq[5] * (1-Global.CLK32[31]); - selEq[6]' * (1-Global.CLK32[31]) = selEq[6] * (1-Global.CLK32[31]); + pol eq11_1 = + (s[0] * x2[1] - s[0] * x1[1] - 65535 * q0[1]) + + (s[1] * x2[0] - s[1] * x1[0] - 65535 * q0[0]) + - y2[1] + y1[1]; - selEq[0] * (1-selEq[0]) = 0; - selEq[1] * (1-selEq[1]) = 0; - selEq[2] * (1-selEq[2]) = 0; - selEq[3] * (1-selEq[3]) = 0; - selEq[4] * (1-selEq[4]) = 0; - selEq[5] * (1-selEq[5]) = 0; - selEq[6] * (1-selEq[6]) = 0; + pol eq11_2 = + (s[0] * x2[2] - s[0] * x1[2] - 65535 * q0[2]) + + (s[1] * x2[1] - s[1] * x1[1] - 65535 * q0[1]) + + (s[2] * x2[0] - s[2] * x1[0] - 65535 * q0[0]) + - y2[2] + y1[2]; + pol eq11_3 = + (s[0] * x2[3] - s[0] * x1[3] - 65535 * q0[3]) + + (s[1] * x2[2] - s[1] * x1[2] - 65535 * q0[2]) + + (s[2] * x2[1] - s[2] * x1[1] - 65535 * q0[1]) + + (s[3] * x2[0] - s[3] * x1[0] - 65535 * q0[0]) + - y2[3] + y1[3]; - pol commit carry[3]; + pol eq11_4 = + (s[0] * x2[4] - s[0] * x1[4] - 65535 * q0[4]) + + (s[1] * x2[3] - s[1] * x1[3] - 65535 * q0[3]) + + (s[2] * x2[2] - s[2] * x1[2] - 65535 * q0[2]) + + (s[3] * x2[1] - s[3] * x1[1] - 65535 * q0[1]) + + (s[4] * x2[0] - s[4] * x1[0] - 65535 * q0[0]) + - y2[4] + y1[4]; - carry[0] * Global.CLK32[0] = 0; - carry[1] * Global.CLK32[0] = 0; - carry[2] * Global.CLK32[0] = 0; + pol eq11_5 = + (s[0] * x2[5] - s[0] * x1[5] - 65535 * q0[5]) + + (s[1] * x2[4] - s[1] * x1[4] - 65535 * q0[4]) + + (s[2] * x2[3] - s[2] * x1[3] - 65535 * q0[3]) + + (s[3] * x2[2] - s[3] * x1[2] - 65535 * q0[2]) + + (s[4] * x2[1] - s[4] * x1[1] - 65535 * q0[1]) + + (s[5] * x2[0] - s[5] * x1[0] - 65535 * q0[0]) + - y2[5] + y1[5]; - carry[0] in GL_SIGNED_22BITS; - carry[1] in GL_SIGNED_22BITS; - carry[2] in GL_SIGNED_22BITS; + pol eq11_6 = + (s[0] * x2[6] - s[0] * x1[6] - 65535 * q0[6]) + + (s[1] * x2[5] - s[1] * x1[5] - 65535 * q0[5]) + + (s[2] * x2[4] - s[2] * x1[4] - 65535 * q0[4]) + + (s[3] * x2[3] - s[3] * x1[3] - 65535 * q0[3]) + + (s[4] * x2[2] - s[4] * x1[2] - 65535 * q0[2]) + + (s[5] * x2[1] - s[5] * x1[1] - 65535 * q0[1]) + + (s[6] * x2[0] - s[6] * x1[0]) + - y2[6] + y1[6]; + + pol eq11_7 = + (s[0] * x2[7] - s[0] * x1[7] - 65535 * q0[7]) + + (s[1] * x2[6] - s[1] * x1[6] - 65535 * q0[6]) + + (s[2] * x2[5] - s[2] * x1[5] - 65535 * q0[5]) + + (s[3] * x2[4] - s[3] * x1[4] - 65535 * q0[4]) + + (s[4] * x2[3] - s[4] * x1[3] - 65535 * q0[3]) + + (s[5] * x2[2] - s[5] * x1[2] - 65535 * q0[2]) + + (s[6] * x2[1] - s[6] * x1[1]) + + (s[7] * x2[0] - s[7] * x1[0]) + - y2[7] + y1[7]; + + pol eq11_8 = + (s[0] * x2[8] - s[0] * x1[8] - 65535 * q0[8]) + + (s[1] * x2[7] - s[1] * x1[7] - 65535 * q0[7]) + + (s[2] * x2[6] - s[2] * x1[6] - 65535 * q0[6]) + + (s[3] * x2[5] - s[3] * x1[5] - 65535 * q0[5]) + + (s[4] * x2[4] - s[4] * x1[4] - 65535 * q0[4]) + + (s[5] * x2[3] - s[5] * x1[3] - 65535 * q0[3]) + + (s[6] * x2[2] - s[6] * x1[2]) + + (s[7] * x2[1] - s[7] * x1[1]) + + (s[8] * x2[0] - s[8] * x1[0]) + - y2[8] + y1[8]; + + pol eq11_9 = + (s[0] * x2[9] - s[0] * x1[9] - 65535 * q0[9]) + + (s[1] * x2[8] - s[1] * x1[8] - 65535 * q0[8]) + + (s[2] * x2[7] - s[2] * x1[7] - 65535 * q0[7]) + + (s[3] * x2[6] - s[3] * x1[6] - 65535 * q0[6]) + + (s[4] * x2[5] - s[4] * x1[5] - 65535 * q0[5]) + + (s[5] * x2[4] - s[5] * x1[4] - 65535 * q0[4]) + + (s[6] * x2[3] - s[6] * x1[3]) + + (s[7] * x2[2] - s[7] * x1[2]) + + (s[8] * x2[1] - s[8] * x1[1]) + + (s[9] * x2[0] - s[9] * x1[0]) + - y2[9] + y1[9]; + + pol eq11_10 = + (s[0] * x2[10] - s[0] * x1[10] - 65535 * q0[10]) + + (s[1] * x2[9] - s[1] * x1[9] - 65535 * q0[9]) + + (s[2] * x2[8] - s[2] * x1[8] - 65535 * q0[8]) + + (s[3] * x2[7] - s[3] * x1[7] - 65535 * q0[7]) + + (s[4] * x2[6] - s[4] * x1[6] - 65535 * q0[6]) + + (s[5] * x2[5] - s[5] * x1[5] - 65535 * q0[5]) + + (s[6] * x2[4] - s[6] * x1[4]) + + (s[7] * x2[3] - s[7] * x1[3]) + + (s[8] * x2[2] - s[8] * x1[2]) + + (s[9] * x2[1] - s[9] * x1[1]) + + (s[10] * x2[0] - s[10] * x1[0]) + - y2[10] + y1[10]; + + pol eq11_11 = + (s[0] * x2[11] - s[0] * x1[11] - 65535 * q0[11]) + + (s[1] * x2[10] - s[1] * x1[10] - 65535 * q0[10]) + + (s[2] * x2[9] - s[2] * x1[9] - 65535 * q0[9]) + + (s[3] * x2[8] - s[3] * x1[8] - 65535 * q0[8]) + + (s[4] * x2[7] - s[4] * x1[7] - 65535 * q0[7]) + + (s[5] * x2[6] - s[5] * x1[6] - 65535 * q0[6]) + + (s[6] * x2[5] - s[6] * x1[5]) + + (s[7] * x2[4] - s[7] * x1[4]) + + (s[8] * x2[3] - s[8] * x1[3]) + + (s[9] * x2[2] - s[9] * x1[2]) + + (s[10] * x2[1] - s[10] * x1[1]) + + (s[11] * x2[0] - s[11] * x1[0]) + - y2[11] + y1[11]; + + pol eq11_12 = + (s[0] * x2[12] - s[0] * x1[12] - 65535 * q0[12]) + + (s[1] * x2[11] - s[1] * x1[11] - 65535 * q0[11]) + + (s[2] * x2[10] - s[2] * x1[10] - 65535 * q0[10]) + + (s[3] * x2[9] - s[3] * x1[9] - 65535 * q0[9]) + + (s[4] * x2[8] - s[4] * x1[8] - 65535 * q0[8]) + + (s[5] * x2[7] - s[5] * x1[7] - 65535 * q0[7]) + + (s[6] * x2[6] - s[6] * x1[6]) + + (s[7] * x2[5] - s[7] * x1[5]) + + (s[8] * x2[4] - s[8] * x1[4]) + + (s[9] * x2[3] - s[9] * x1[3]) + + (s[10] * x2[2] - s[10] * x1[2]) + + (s[11] * x2[1] - s[11] * x1[1]) + + (s[12] * x2[0] - s[12] * x1[0]) + - q0[0] - y2[12] + y1[12]; + + pol eq11_13 = + (s[0] * x2[13] - s[0] * x1[13] - 65535 * q0[13]) + + (s[1] * x2[12] - s[1] * x1[12] - 65535 * q0[12]) + + (s[2] * x2[11] - s[2] * x1[11] - 65535 * q0[11]) + + (s[3] * x2[10] - s[3] * x1[10] - 65535 * q0[10]) + + (s[4] * x2[9] - s[4] * x1[9] - 65535 * q0[9]) + + (s[5] * x2[8] - s[5] * x1[8] - 65535 * q0[8]) + + (s[6] * x2[7] - s[6] * x1[7]) + + (s[7] * x2[6] - s[7] * x1[6]) + + (s[8] * x2[5] - s[8] * x1[5]) + + (s[9] * x2[4] - s[9] * x1[4]) + + (s[10] * x2[3] - s[10] * x1[3]) + + (s[11] * x2[2] - s[11] * x1[2]) + + (s[12] * x2[1] - s[12] * x1[1]) + + (s[13] * x2[0] - s[13] * x1[0]) + - q0[1] - y2[13] + y1[13]; + + pol eq11_14 = + (s[0] * x2[14] - s[0] * x1[14] - 65535 * q0[14]) + + (s[1] * x2[13] - s[1] * x1[13] - 65535 * q0[13]) + + (s[2] * x2[12] - s[2] * x1[12] - 65535 * q0[12]) + + (s[3] * x2[11] - s[3] * x1[11] - 65535 * q0[11]) + + (s[4] * x2[10] - s[4] * x1[10] - 65535 * q0[10]) + + (s[5] * x2[9] - s[5] * x1[9] - 65535 * q0[9]) + + (s[6] * x2[8] - s[6] * x1[8]) + + (s[7] * x2[7] - s[7] * x1[7]) + + (s[8] * x2[6] - s[8] * x1[6]) + + (s[9] * x2[5] - s[9] * x1[5]) + + (s[10] * x2[4] - s[10] * x1[4]) + + (s[11] * x2[3] - s[11] * x1[3]) + + (s[12] * x2[2] - s[12] * x1[2]) + + (s[13] * x2[1] - s[13] * x1[1]) + + (s[14] * x2[0] - s[14] * x1[0] - 65535 * q0[0]) + - q0[2] - y2[14] + y1[14]; + + pol eq11_15 = + (s[0] * x2[15] - s[0] * x1[15] - 65535 * q0[15]) + + (s[1] * x2[14] - s[1] * x1[14] - 65535 * q0[14]) + + (s[2] * x2[13] - s[2] * x1[13] - 65535 * q0[13]) + + (s[3] * x2[12] - s[3] * x1[12] - 65535 * q0[12]) + + (s[4] * x2[11] - s[4] * x1[11] - 65535 * q0[11]) + + (s[5] * x2[10] - s[5] * x1[10] - 65535 * q0[10]) + + (s[6] * x2[9] - s[6] * x1[9]) + + (s[7] * x2[8] - s[7] * x1[8]) + + (s[8] * x2[7] - s[8] * x1[7]) + + (s[9] * x2[6] - s[9] * x1[6]) + + (s[10] * x2[5] - s[10] * x1[5]) + + (s[11] * x2[4] - s[11] * x1[4]) + + (s[12] * x2[3] - s[12] * x1[3]) + + (s[13] * x2[2] - s[13] * x1[2]) + + (s[14] * x2[1] - s[14] * x1[1] - 65535 * q0[1]) + + (s[15] * x2[0] - s[15] * x1[0] - 65535 * q0[0]) + - q0[3] - y2[15] + y1[15]; + + pol eq11_16 = + (s[1] * x2[15] - s[1] * x1[15] - 65535 * q0[15]) + + (s[2] * x2[14] - s[2] * x1[14] - 65535 * q0[14]) + + (s[3] * x2[13] - s[3] * x1[13] - 65535 * q0[13]) + + (s[4] * x2[12] - s[4] * x1[12] - 65535 * q0[12]) + + (s[5] * x2[11] - s[5] * x1[11] - 65535 * q0[11]) + + (s[6] * x2[10] - s[6] * x1[10]) + + (s[7] * x2[9] - s[7] * x1[9]) + + (s[8] * x2[8] - s[8] * x1[8]) + + (s[9] * x2[7] - s[9] * x1[7]) + + (s[10] * x2[6] - s[10] * x1[6]) + + (s[11] * x2[5] - s[11] * x1[5]) + + (s[12] * x2[4] - s[12] * x1[4]) + + (s[13] * x2[3] - s[13] * x1[3]) + + (s[14] * x2[2] - s[14] * x1[2] - 65535 * q0[2]) + + (s[15] * x2[1] - s[15] * x1[1] - 65535 * q0[1]) + + 131070 - q0[4]; + + pol eq11_17 = + (s[2] * x2[15] - s[2] * x1[15] - 65535 * q0[15]) + + (s[3] * x2[14] - s[3] * x1[14] - 65535 * q0[14]) + + (s[4] * x2[13] - s[4] * x1[13] - 65535 * q0[13]) + + (s[5] * x2[12] - s[5] * x1[12] - 65535 * q0[12]) + + (s[6] * x2[11] - s[6] * x1[11]) + + (s[7] * x2[10] - s[7] * x1[10]) + + (s[8] * x2[9] - s[8] * x1[9]) + + (s[9] * x2[8] - s[9] * x1[8]) + + (s[10] * x2[7] - s[10] * x1[7]) + + (s[11] * x2[6] - s[11] * x1[6]) + + (s[12] * x2[5] - s[12] * x1[5]) + + (s[13] * x2[4] - s[13] * x1[4]) + + (s[14] * x2[3] - s[14] * x1[3] - 65535 * q0[3]) + + (s[15] * x2[2] - s[15] * x1[2] - 65535 * q0[2]) + + 131070 - q0[5]; + + pol eq11_18 = + (s[3] * x2[15] - s[3] * x1[15] - 65535 * q0[15]) + + (s[4] * x2[14] - s[4] * x1[14] - 65535 * q0[14]) + + (s[5] * x2[13] - s[5] * x1[13] - 65535 * q0[13]) + + (s[6] * x2[12] - s[6] * x1[12]) + + (s[7] * x2[11] - s[7] * x1[11]) + + (s[8] * x2[10] - s[8] * x1[10]) + + (s[9] * x2[9] - s[9] * x1[9]) + + (s[10] * x2[8] - s[10] * x1[8]) + + (s[11] * x2[7] - s[11] * x1[7]) + + (s[12] * x2[6] - s[12] * x1[6]) + + (s[13] * x2[5] - s[13] * x1[5]) + + (s[14] * x2[4] - s[14] * x1[4] - 65535 * q0[4]) + + (s[15] * x2[3] - s[15] * x1[3] - 65535 * q0[3]) + + 131070 - q0[6]; + + pol eq11_19 = + (s[4] * x2[15] - s[4] * x1[15] - 65535 * q0[15]) + + (s[5] * x2[14] - s[5] * x1[14] - 65535 * q0[14]) + + (s[6] * x2[13] - s[6] * x1[13]) + + (s[7] * x2[12] - s[7] * x1[12]) + + (s[8] * x2[11] - s[8] * x1[11]) + + (s[9] * x2[10] - s[9] * x1[10]) + + (s[10] * x2[9] - s[10] * x1[9]) + + (s[11] * x2[8] - s[11] * x1[8]) + + (s[12] * x2[7] - s[12] * x1[7]) + + (s[13] * x2[6] - s[13] * x1[6]) + + (s[14] * x2[5] - s[14] * x1[5] - 65535 * q0[5]) + + (s[15] * x2[4] - s[15] * x1[4] - 65535 * q0[4]) + + 131070 - q0[7]; + + pol eq11_20 = + (s[5] * x2[15] - s[5] * x1[15] - 65535 * q0[15]) + + (s[6] * x2[14] - s[6] * x1[14]) + + (s[7] * x2[13] - s[7] * x1[13]) + + (s[8] * x2[12] - s[8] * x1[12]) + + (s[9] * x2[11] - s[9] * x1[11]) + + (s[10] * x2[10] - s[10] * x1[10]) + + (s[11] * x2[9] - s[11] * x1[9]) + + (s[12] * x2[8] - s[12] * x1[8]) + + (s[13] * x2[7] - s[13] * x1[7]) + + (s[14] * x2[6] - s[14] * x1[6] - 65535 * q0[6]) + + (s[15] * x2[5] - s[15] * x1[5] - 65535 * q0[5]) + + 131070 - q0[8]; + + pol eq11_21 = + (s[6] * x2[15] - s[6] * x1[15]) + + (s[7] * x2[14] - s[7] * x1[14]) + + (s[8] * x2[13] - s[8] * x1[13]) + + (s[9] * x2[12] - s[9] * x1[12]) + + (s[10] * x2[11] - s[10] * x1[11]) + + (s[11] * x2[10] - s[11] * x1[10]) + + (s[12] * x2[9] - s[12] * x1[9]) + + (s[13] * x2[8] - s[13] * x1[8]) + + (s[14] * x2[7] - s[14] * x1[7] - 65535 * q0[7]) + + (s[15] * x2[6] - s[15] * x1[6] - 65535 * q0[6]) + + 131070 - q0[9]; + + pol eq11_22 = + (s[7] * x2[15] - s[7] * x1[15]) + + (s[8] * x2[14] - s[8] * x1[14]) + + (s[9] * x2[13] - s[9] * x1[13]) + + (s[10] * x2[12] - s[10] * x1[12]) + + (s[11] * x2[11] - s[11] * x1[11]) + + (s[12] * x2[10] - s[12] * x1[10]) + + (s[13] * x2[9] - s[13] * x1[9]) + + (s[14] * x2[8] - s[14] * x1[8] - 65535 * q0[8]) + + (s[15] * x2[7] - s[15] * x1[7] - 65535 * q0[7]) + - q0[10]; + + pol eq11_23 = + (s[8] * x2[15] - s[8] * x1[15]) + + (s[9] * x2[14] - s[9] * x1[14]) + + (s[10] * x2[13] - s[10] * x1[13]) + + (s[11] * x2[12] - s[11] * x1[12]) + + (s[12] * x2[11] - s[12] * x1[11]) + + (s[13] * x2[10] - s[13] * x1[10]) + + (s[14] * x2[9] - s[14] * x1[9] - 65535 * q0[9]) + + (s[15] * x2[8] - s[15] * x1[8] - 65535 * q0[8]) + - q0[11]; + + pol eq11_24 = + (s[9] * x2[15] - s[9] * x1[15]) + + (s[10] * x2[14] - s[10] * x1[14]) + + (s[11] * x2[13] - s[11] * x1[13]) + + (s[12] * x2[12] - s[12] * x1[12]) + + (s[13] * x2[11] - s[13] * x1[11]) + + (s[14] * x2[10] - s[14] * x1[10] - 65535 * q0[10]) + + (s[15] * x2[9] - s[15] * x1[9] - 65535 * q0[9]) + - q0[12]; + + pol eq11_25 = + (s[10] * x2[15] - s[10] * x1[15]) + + (s[11] * x2[14] - s[11] * x1[14]) + + (s[12] * x2[13] - s[12] * x1[13]) + + (s[13] * x2[12] - s[13] * x1[12]) + + (s[14] * x2[11] - s[14] * x1[11] - 65535 * q0[11]) + + (s[15] * x2[10] - s[15] * x1[10] - 65535 * q0[10]) + - q0[13]; + + pol eq11_26 = + (s[11] * x2[15] - s[11] * x1[15]) + + (s[12] * x2[14] - s[12] * x1[14]) + + (s[13] * x2[13] - s[13] * x1[13]) + + (s[14] * x2[12] - s[14] * x1[12] - 65535 * q0[12]) + + (s[15] * x2[11] - s[15] * x1[11] - 65535 * q0[11]) + - q0[14]; + + pol eq11_27 = + (s[12] * x2[15] - s[12] * x1[15]) + + (s[13] * x2[14] - s[13] * x1[14]) + + (s[14] * x2[13] - s[14] * x1[13] - 65535 * q0[13]) + + (s[15] * x2[12] - s[15] * x1[12] - 65535 * q0[12]) + - q0[15]; + + pol eq11_28 = + (s[13] * x2[15] - s[13] * x1[15]) + + (s[14] * x2[14] - s[14] * x1[14] - 65535 * q0[14]) + + (s[15] * x2[13] - s[15] * x1[13] - 65535 * q0[13]) + + 2; + + pol eq11_29 = + (s[14] * x2[15] - s[14] * x1[15] - 65535 * q0[15]) + + (s[15] * x2[14] - s[15] * x1[14] - 65535 * q0[14]); + + pol eq11_30 = + (s[15] * x2[15] - s[15] * x1[15] - 65535 * q0[15]) + + 131070; + + pol eq11_31 = 131070; + + + /******* + * + * EQ12: 2 * s * y1 - 3 * x1 * x1 - a + (q0 * offset) = 0 + * + *******/ + + pol eq12_0 = + (s[0] * y1[0] + s[0] * y1[0] - x1[0] * x1[0] - x1[0] * x1[0] - x1[0] * x1[0] + 65535 * q0[0]) + - 65532; + + pol eq12_1 = + (s[0] * y1[1] + s[0] * y1[1] - x1[0] * x1[1] - x1[0] * x1[1] - x1[0] * x1[1] + 65535 * q0[1]) + + (s[1] * y1[0] + s[1] * y1[0] - x1[1] * x1[0] - x1[1] * x1[0] - x1[1] * x1[0] + 65535 * q0[0]) + - 65535; + + pol eq12_2 = + (s[0] * y1[2] + s[0] * y1[2] - x1[0] * x1[2] - x1[0] * x1[2] - x1[0] * x1[2] + 65535 * q0[2]) + + (s[1] * y1[1] + s[1] * y1[1] - x1[1] * x1[1] - x1[1] * x1[1] - x1[1] * x1[1] + 65535 * q0[1]) + + (s[2] * y1[0] + s[2] * y1[0] - x1[2] * x1[0] - x1[2] * x1[0] - x1[2] * x1[0] + 65535 * q0[0]) + - 65535; + + pol eq12_3 = + (s[0] * y1[3] + s[0] * y1[3] - x1[0] * x1[3] - x1[0] * x1[3] - x1[0] * x1[3] + 65535 * q0[3]) + + (s[1] * y1[2] + s[1] * y1[2] - x1[1] * x1[2] - x1[1] * x1[2] - x1[1] * x1[2] + 65535 * q0[2]) + + (s[2] * y1[1] + s[2] * y1[1] - x1[2] * x1[1] - x1[2] * x1[1] - x1[2] * x1[1] + 65535 * q0[1]) + + (s[3] * y1[0] + s[3] * y1[0] - x1[3] * x1[0] - x1[3] * x1[0] - x1[3] * x1[0] + 65535 * q0[0]) + - 65535; + + pol eq12_4 = + (s[0] * y1[4] + s[0] * y1[4] - x1[0] * x1[4] - x1[0] * x1[4] - x1[0] * x1[4] + 65535 * q0[4]) + + (s[1] * y1[3] + s[1] * y1[3] - x1[1] * x1[3] - x1[1] * x1[3] - x1[1] * x1[3] + 65535 * q0[3]) + + (s[2] * y1[2] + s[2] * y1[2] - x1[2] * x1[2] - x1[2] * x1[2] - x1[2] * x1[2] + 65535 * q0[2]) + + (s[3] * y1[1] + s[3] * y1[1] - x1[3] * x1[1] - x1[3] * x1[1] - x1[3] * x1[1] + 65535 * q0[1]) + + (s[4] * y1[0] + s[4] * y1[0] - x1[4] * x1[0] - x1[4] * x1[0] - x1[4] * x1[0] + 65535 * q0[0]) + - 65535; + + pol eq12_5 = + (s[0] * y1[5] + s[0] * y1[5] - x1[0] * x1[5] - x1[0] * x1[5] - x1[0] * x1[5] + 65535 * q0[5]) + + (s[1] * y1[4] + s[1] * y1[4] - x1[1] * x1[4] - x1[1] * x1[4] - x1[1] * x1[4] + 65535 * q0[4]) + + (s[2] * y1[3] + s[2] * y1[3] - x1[2] * x1[3] - x1[2] * x1[3] - x1[2] * x1[3] + 65535 * q0[3]) + + (s[3] * y1[2] + s[3] * y1[2] - x1[3] * x1[2] - x1[3] * x1[2] - x1[3] * x1[2] + 65535 * q0[2]) + + (s[4] * y1[1] + s[4] * y1[1] - x1[4] * x1[1] - x1[4] * x1[1] - x1[4] * x1[1] + 65535 * q0[1]) + + (s[5] * y1[0] + s[5] * y1[0] - x1[5] * x1[0] - x1[5] * x1[0] - x1[5] * x1[0] + 65535 * q0[0]) + - 65535; + + pol eq12_6 = + (s[0] * y1[6] + s[0] * y1[6] - x1[0] * x1[6] - x1[0] * x1[6] - x1[0] * x1[6] + 65535 * q0[6]) + + (s[1] * y1[5] + s[1] * y1[5] - x1[1] * x1[5] - x1[1] * x1[5] - x1[1] * x1[5] + 65535 * q0[5]) + + (s[2] * y1[4] + s[2] * y1[4] - x1[2] * x1[4] - x1[2] * x1[4] - x1[2] * x1[4] + 65535 * q0[4]) + + (s[3] * y1[3] + s[3] * y1[3] - x1[3] * x1[3] - x1[3] * x1[3] - x1[3] * x1[3] + 65535 * q0[3]) + + (s[4] * y1[2] + s[4] * y1[2] - x1[4] * x1[2] - x1[4] * x1[2] - x1[4] * x1[2] + 65535 * q0[2]) + + (s[5] * y1[1] + s[5] * y1[1] - x1[5] * x1[1] - x1[5] * x1[1] - x1[5] * x1[1] + 65535 * q0[1]) + + (s[6] * y1[0] + s[6] * y1[0] - x1[6] * x1[0] - x1[6] * x1[0] - x1[6] * x1[0]); + + pol eq12_7 = + (s[0] * y1[7] + s[0] * y1[7] - x1[0] * x1[7] - x1[0] * x1[7] - x1[0] * x1[7] + 65535 * q0[7]) + + (s[1] * y1[6] + s[1] * y1[6] - x1[1] * x1[6] - x1[1] * x1[6] - x1[1] * x1[6] + 65535 * q0[6]) + + (s[2] * y1[5] + s[2] * y1[5] - x1[2] * x1[5] - x1[2] * x1[5] - x1[2] * x1[5] + 65535 * q0[5]) + + (s[3] * y1[4] + s[3] * y1[4] - x1[3] * x1[4] - x1[3] * x1[4] - x1[3] * x1[4] + 65535 * q0[4]) + + (s[4] * y1[3] + s[4] * y1[3] - x1[4] * x1[3] - x1[4] * x1[3] - x1[4] * x1[3] + 65535 * q0[3]) + + (s[5] * y1[2] + s[5] * y1[2] - x1[5] * x1[2] - x1[5] * x1[2] - x1[5] * x1[2] + 65535 * q0[2]) + + (s[6] * y1[1] + s[6] * y1[1] - x1[6] * x1[1] - x1[6] * x1[1] - x1[6] * x1[1]) + + (s[7] * y1[0] + s[7] * y1[0] - x1[7] * x1[0] - x1[7] * x1[0] - x1[7] * x1[0]); + + pol eq12_8 = + (s[0] * y1[8] + s[0] * y1[8] - x1[0] * x1[8] - x1[0] * x1[8] - x1[0] * x1[8] + 65535 * q0[8]) + + (s[1] * y1[7] + s[1] * y1[7] - x1[1] * x1[7] - x1[1] * x1[7] - x1[1] * x1[7] + 65535 * q0[7]) + + (s[2] * y1[6] + s[2] * y1[6] - x1[2] * x1[6] - x1[2] * x1[6] - x1[2] * x1[6] + 65535 * q0[6]) + + (s[3] * y1[5] + s[3] * y1[5] - x1[3] * x1[5] - x1[3] * x1[5] - x1[3] * x1[5] + 65535 * q0[5]) + + (s[4] * y1[4] + s[4] * y1[4] - x1[4] * x1[4] - x1[4] * x1[4] - x1[4] * x1[4] + 65535 * q0[4]) + + (s[5] * y1[3] + s[5] * y1[3] - x1[5] * x1[3] - x1[5] * x1[3] - x1[5] * x1[3] + 65535 * q0[3]) + + (s[6] * y1[2] + s[6] * y1[2] - x1[6] * x1[2] - x1[6] * x1[2] - x1[6] * x1[2]) + + (s[7] * y1[1] + s[7] * y1[1] - x1[7] * x1[1] - x1[7] * x1[1] - x1[7] * x1[1]) + + (s[8] * y1[0] + s[8] * y1[0] - x1[8] * x1[0] - x1[8] * x1[0] - x1[8] * x1[0]); + + pol eq12_9 = + (s[0] * y1[9] + s[0] * y1[9] - x1[0] * x1[9] - x1[0] * x1[9] - x1[0] * x1[9] + 65535 * q0[9]) + + (s[1] * y1[8] + s[1] * y1[8] - x1[1] * x1[8] - x1[1] * x1[8] - x1[1] * x1[8] + 65535 * q0[8]) + + (s[2] * y1[7] + s[2] * y1[7] - x1[2] * x1[7] - x1[2] * x1[7] - x1[2] * x1[7] + 65535 * q0[7]) + + (s[3] * y1[6] + s[3] * y1[6] - x1[3] * x1[6] - x1[3] * x1[6] - x1[3] * x1[6] + 65535 * q0[6]) + + (s[4] * y1[5] + s[4] * y1[5] - x1[4] * x1[5] - x1[4] * x1[5] - x1[4] * x1[5] + 65535 * q0[5]) + + (s[5] * y1[4] + s[5] * y1[4] - x1[5] * x1[4] - x1[5] * x1[4] - x1[5] * x1[4] + 65535 * q0[4]) + + (s[6] * y1[3] + s[6] * y1[3] - x1[6] * x1[3] - x1[6] * x1[3] - x1[6] * x1[3]) + + (s[7] * y1[2] + s[7] * y1[2] - x1[7] * x1[2] - x1[7] * x1[2] - x1[7] * x1[2]) + + (s[8] * y1[1] + s[8] * y1[1] - x1[8] * x1[1] - x1[8] * x1[1] - x1[8] * x1[1]) + + (s[9] * y1[0] + s[9] * y1[0] - x1[9] * x1[0] - x1[9] * x1[0] - x1[9] * x1[0]); + + pol eq12_10 = + (s[0] * y1[10] + s[0] * y1[10] - x1[0] * x1[10] - x1[0] * x1[10] - x1[0] * x1[10] + 65535 * q0[10]) + + (s[1] * y1[9] + s[1] * y1[9] - x1[1] * x1[9] - x1[1] * x1[9] - x1[1] * x1[9] + 65535 * q0[9]) + + (s[2] * y1[8] + s[2] * y1[8] - x1[2] * x1[8] - x1[2] * x1[8] - x1[2] * x1[8] + 65535 * q0[8]) + + (s[3] * y1[7] + s[3] * y1[7] - x1[3] * x1[7] - x1[3] * x1[7] - x1[3] * x1[7] + 65535 * q0[7]) + + (s[4] * y1[6] + s[4] * y1[6] - x1[4] * x1[6] - x1[4] * x1[6] - x1[4] * x1[6] + 65535 * q0[6]) + + (s[5] * y1[5] + s[5] * y1[5] - x1[5] * x1[5] - x1[5] * x1[5] - x1[5] * x1[5] + 65535 * q0[5]) + + (s[6] * y1[4] + s[6] * y1[4] - x1[6] * x1[4] - x1[6] * x1[4] - x1[6] * x1[4]) + + (s[7] * y1[3] + s[7] * y1[3] - x1[7] * x1[3] - x1[7] * x1[3] - x1[7] * x1[3]) + + (s[8] * y1[2] + s[8] * y1[2] - x1[8] * x1[2] - x1[8] * x1[2] - x1[8] * x1[2]) + + (s[9] * y1[1] + s[9] * y1[1] - x1[9] * x1[1] - x1[9] * x1[1] - x1[9] * x1[1]) + + (s[10] * y1[0] + s[10] * y1[0] - x1[10] * x1[0] - x1[10] * x1[0] - x1[10] * x1[0]); + + pol eq12_11 = + (s[0] * y1[11] + s[0] * y1[11] - x1[0] * x1[11] - x1[0] * x1[11] - x1[0] * x1[11] + 65535 * q0[11]) + + (s[1] * y1[10] + s[1] * y1[10] - x1[1] * x1[10] - x1[1] * x1[10] - x1[1] * x1[10] + 65535 * q0[10]) + + (s[2] * y1[9] + s[2] * y1[9] - x1[2] * x1[9] - x1[2] * x1[9] - x1[2] * x1[9] + 65535 * q0[9]) + + (s[3] * y1[8] + s[3] * y1[8] - x1[3] * x1[8] - x1[3] * x1[8] - x1[3] * x1[8] + 65535 * q0[8]) + + (s[4] * y1[7] + s[4] * y1[7] - x1[4] * x1[7] - x1[4] * x1[7] - x1[4] * x1[7] + 65535 * q0[7]) + + (s[5] * y1[6] + s[5] * y1[6] - x1[5] * x1[6] - x1[5] * x1[6] - x1[5] * x1[6] + 65535 * q0[6]) + + (s[6] * y1[5] + s[6] * y1[5] - x1[6] * x1[5] - x1[6] * x1[5] - x1[6] * x1[5]) + + (s[7] * y1[4] + s[7] * y1[4] - x1[7] * x1[4] - x1[7] * x1[4] - x1[7] * x1[4]) + + (s[8] * y1[3] + s[8] * y1[3] - x1[8] * x1[3] - x1[8] * x1[3] - x1[8] * x1[3]) + + (s[9] * y1[2] + s[9] * y1[2] - x1[9] * x1[2] - x1[9] * x1[2] - x1[9] * x1[2]) + + (s[10] * y1[1] + s[10] * y1[1] - x1[10] * x1[1] - x1[10] * x1[1] - x1[10] * x1[1]) + + (s[11] * y1[0] + s[11] * y1[0] - x1[11] * x1[0] - x1[11] * x1[0] - x1[11] * x1[0]); + + pol eq12_12 = + (s[0] * y1[12] + s[0] * y1[12] - x1[0] * x1[12] - x1[0] * x1[12] - x1[0] * x1[12] + 65535 * q0[12]) + + (s[1] * y1[11] + s[1] * y1[11] - x1[1] * x1[11] - x1[1] * x1[11] - x1[1] * x1[11] + 65535 * q0[11]) + + (s[2] * y1[10] + s[2] * y1[10] - x1[2] * x1[10] - x1[2] * x1[10] - x1[2] * x1[10] + 65535 * q0[10]) + + (s[3] * y1[9] + s[3] * y1[9] - x1[3] * x1[9] - x1[3] * x1[9] - x1[3] * x1[9] + 65535 * q0[9]) + + (s[4] * y1[8] + s[4] * y1[8] - x1[4] * x1[8] - x1[4] * x1[8] - x1[4] * x1[8] + 65535 * q0[8]) + + (s[5] * y1[7] + s[5] * y1[7] - x1[5] * x1[7] - x1[5] * x1[7] - x1[5] * x1[7] + 65535 * q0[7]) + + (s[6] * y1[6] + s[6] * y1[6] - x1[6] * x1[6] - x1[6] * x1[6] - x1[6] * x1[6]) + + (s[7] * y1[5] + s[7] * y1[5] - x1[7] * x1[5] - x1[7] * x1[5] - x1[7] * x1[5]) + + (s[8] * y1[4] + s[8] * y1[4] - x1[8] * x1[4] - x1[8] * x1[4] - x1[8] * x1[4]) + + (s[9] * y1[3] + s[9] * y1[3] - x1[9] * x1[3] - x1[9] * x1[3] - x1[9] * x1[3]) + + (s[10] * y1[2] + s[10] * y1[2] - x1[10] * x1[2] - x1[10] * x1[2] - x1[10] * x1[2]) + + (s[11] * y1[1] + s[11] * y1[1] - x1[11] * x1[1] - x1[11] * x1[1] - x1[11] * x1[1]) + + (s[12] * y1[0] + s[12] * y1[0] - x1[12] * x1[0] - x1[12] * x1[0] - x1[12] * x1[0]) + + q0[0] - 1; + + pol eq12_13 = + (s[0] * y1[13] + s[0] * y1[13] - x1[0] * x1[13] - x1[0] * x1[13] - x1[0] * x1[13] + 65535 * q0[13]) + + (s[1] * y1[12] + s[1] * y1[12] - x1[1] * x1[12] - x1[1] * x1[12] - x1[1] * x1[12] + 65535 * q0[12]) + + (s[2] * y1[11] + s[2] * y1[11] - x1[2] * x1[11] - x1[2] * x1[11] - x1[2] * x1[11] + 65535 * q0[11]) + + (s[3] * y1[10] + s[3] * y1[10] - x1[3] * x1[10] - x1[3] * x1[10] - x1[3] * x1[10] + 65535 * q0[10]) + + (s[4] * y1[9] + s[4] * y1[9] - x1[4] * x1[9] - x1[4] * x1[9] - x1[4] * x1[9] + 65535 * q0[9]) + + (s[5] * y1[8] + s[5] * y1[8] - x1[5] * x1[8] - x1[5] * x1[8] - x1[5] * x1[8] + 65535 * q0[8]) + + (s[6] * y1[7] + s[6] * y1[7] - x1[6] * x1[7] - x1[6] * x1[7] - x1[6] * x1[7]) + + (s[7] * y1[6] + s[7] * y1[6] - x1[7] * x1[6] - x1[7] * x1[6] - x1[7] * x1[6]) + + (s[8] * y1[5] + s[8] * y1[5] - x1[8] * x1[5] - x1[8] * x1[5] - x1[8] * x1[5]) + + (s[9] * y1[4] + s[9] * y1[4] - x1[9] * x1[4] - x1[9] * x1[4] - x1[9] * x1[4]) + + (s[10] * y1[3] + s[10] * y1[3] - x1[10] * x1[3] - x1[10] * x1[3] - x1[10] * x1[3]) + + (s[11] * y1[2] + s[11] * y1[2] - x1[11] * x1[2] - x1[11] * x1[2] - x1[11] * x1[2]) + + (s[12] * y1[1] + s[12] * y1[1] - x1[12] * x1[1] - x1[12] * x1[1] - x1[12] * x1[1]) + + (s[13] * y1[0] + s[13] * y1[0] - x1[13] * x1[0] - x1[13] * x1[0] - x1[13] * x1[0]) + + q0[1]; + + pol eq12_14 = + (s[0] * y1[14] + s[0] * y1[14] - x1[0] * x1[14] - x1[0] * x1[14] - x1[0] * x1[14] + 65535 * q0[14]) + + (s[1] * y1[13] + s[1] * y1[13] - x1[1] * x1[13] - x1[1] * x1[13] - x1[1] * x1[13] + 65535 * q0[13]) + + (s[2] * y1[12] + s[2] * y1[12] - x1[2] * x1[12] - x1[2] * x1[12] - x1[2] * x1[12] + 65535 * q0[12]) + + (s[3] * y1[11] + s[3] * y1[11] - x1[3] * x1[11] - x1[3] * x1[11] - x1[3] * x1[11] + 65535 * q0[11]) + + (s[4] * y1[10] + s[4] * y1[10] - x1[4] * x1[10] - x1[4] * x1[10] - x1[4] * x1[10] + 65535 * q0[10]) + + (s[5] * y1[9] + s[5] * y1[9] - x1[5] * x1[9] - x1[5] * x1[9] - x1[5] * x1[9] + 65535 * q0[9]) + + (s[6] * y1[8] + s[6] * y1[8] - x1[6] * x1[8] - x1[6] * x1[8] - x1[6] * x1[8]) + + (s[7] * y1[7] + s[7] * y1[7] - x1[7] * x1[7] - x1[7] * x1[7] - x1[7] * x1[7]) + + (s[8] * y1[6] + s[8] * y1[6] - x1[8] * x1[6] - x1[8] * x1[6] - x1[8] * x1[6]) + + (s[9] * y1[5] + s[9] * y1[5] - x1[9] * x1[5] - x1[9] * x1[5] - x1[9] * x1[5]) + + (s[10] * y1[4] + s[10] * y1[4] - x1[10] * x1[4] - x1[10] * x1[4] - x1[10] * x1[4]) + + (s[11] * y1[3] + s[11] * y1[3] - x1[11] * x1[3] - x1[11] * x1[3] - x1[11] * x1[3]) + + (s[12] * y1[2] + s[12] * y1[2] - x1[12] * x1[2] - x1[12] * x1[2] - x1[12] * x1[2]) + + (s[13] * y1[1] + s[13] * y1[1] - x1[13] * x1[1] - x1[13] * x1[1] - x1[13] * x1[1]) + + (s[14] * y1[0] + s[14] * y1[0] - x1[14] * x1[0] - x1[14] * x1[0] - x1[14] * x1[0] + 65535 * q0[0]) + + q0[2] - 65535; + + pol eq12_15 = + (s[0] * y1[15] + s[0] * y1[15] - x1[0] * x1[15] - x1[0] * x1[15] - x1[0] * x1[15] + 65535 * q0[15]) + + (s[1] * y1[14] + s[1] * y1[14] - x1[1] * x1[14] - x1[1] * x1[14] - x1[1] * x1[14] + 65535 * q0[14]) + + (s[2] * y1[13] + s[2] * y1[13] - x1[2] * x1[13] - x1[2] * x1[13] - x1[2] * x1[13] + 65535 * q0[13]) + + (s[3] * y1[12] + s[3] * y1[12] - x1[3] * x1[12] - x1[3] * x1[12] - x1[3] * x1[12] + 65535 * q0[12]) + + (s[4] * y1[11] + s[4] * y1[11] - x1[4] * x1[11] - x1[4] * x1[11] - x1[4] * x1[11] + 65535 * q0[11]) + + (s[5] * y1[10] + s[5] * y1[10] - x1[5] * x1[10] - x1[5] * x1[10] - x1[5] * x1[10] + 65535 * q0[10]) + + (s[6] * y1[9] + s[6] * y1[9] - x1[6] * x1[9] - x1[6] * x1[9] - x1[6] * x1[9]) + + (s[7] * y1[8] + s[7] * y1[8] - x1[7] * x1[8] - x1[7] * x1[8] - x1[7] * x1[8]) + + (s[8] * y1[7] + s[8] * y1[7] - x1[8] * x1[7] - x1[8] * x1[7] - x1[8] * x1[7]) + + (s[9] * y1[6] + s[9] * y1[6] - x1[9] * x1[6] - x1[9] * x1[6] - x1[9] * x1[6]) + + (s[10] * y1[5] + s[10] * y1[5] - x1[10] * x1[5] - x1[10] * x1[5] - x1[10] * x1[5]) + + (s[11] * y1[4] + s[11] * y1[4] - x1[11] * x1[4] - x1[11] * x1[4] - x1[11] * x1[4]) + + (s[12] * y1[3] + s[12] * y1[3] - x1[12] * x1[3] - x1[12] * x1[3] - x1[12] * x1[3]) + + (s[13] * y1[2] + s[13] * y1[2] - x1[13] * x1[2] - x1[13] * x1[2] - x1[13] * x1[2]) + + (s[14] * y1[1] + s[14] * y1[1] - x1[14] * x1[1] - x1[14] * x1[1] - x1[14] * x1[1] + 65535 * q0[1]) + + (s[15] * y1[0] + s[15] * y1[0] - x1[15] * x1[0] - x1[15] * x1[0] - x1[15] * x1[0] + 65535 * q0[0]) + + q0[3] - 65535; + + pol eq12_16 = + (s[1] * y1[15] + s[1] * y1[15] - x1[1] * x1[15] - x1[1] * x1[15] - x1[1] * x1[15] + 65535 * q0[15]) + + (s[2] * y1[14] + s[2] * y1[14] - x1[2] * x1[14] - x1[2] * x1[14] - x1[2] * x1[14] + 65535 * q0[14]) + + (s[3] * y1[13] + s[3] * y1[13] - x1[3] * x1[13] - x1[3] * x1[13] - x1[3] * x1[13] + 65535 * q0[13]) + + (s[4] * y1[12] + s[4] * y1[12] - x1[4] * x1[12] - x1[4] * x1[12] - x1[4] * x1[12] + 65535 * q0[12]) + + (s[5] * y1[11] + s[5] * y1[11] - x1[5] * x1[11] - x1[5] * x1[11] - x1[5] * x1[11] + 65535 * q0[11]) + + (s[6] * y1[10] + s[6] * y1[10] - x1[6] * x1[10] - x1[6] * x1[10] - x1[6] * x1[10]) + + (s[7] * y1[9] + s[7] * y1[9] - x1[7] * x1[9] - x1[7] * x1[9] - x1[7] * x1[9]) + + (s[8] * y1[8] + s[8] * y1[8] - x1[8] * x1[8] - x1[8] * x1[8] - x1[8] * x1[8]) + + (s[9] * y1[7] + s[9] * y1[7] - x1[9] * x1[7] - x1[9] * x1[7] - x1[9] * x1[7]) + + (s[10] * y1[6] + s[10] * y1[6] - x1[10] * x1[6] - x1[10] * x1[6] - x1[10] * x1[6]) + + (s[11] * y1[5] + s[11] * y1[5] - x1[11] * x1[5] - x1[11] * x1[5] - x1[11] * x1[5]) + + (s[12] * y1[4] + s[12] * y1[4] - x1[12] * x1[4] - x1[12] * x1[4] - x1[12] * x1[4]) + + (s[13] * y1[3] + s[13] * y1[3] - x1[13] * x1[3] - x1[13] * x1[3] - x1[13] * x1[3]) + + (s[14] * y1[2] + s[14] * y1[2] - x1[14] * x1[2] - x1[14] * x1[2] - x1[14] * x1[2] + 65535 * q0[2]) + + (s[15] * y1[1] + s[15] * y1[1] - x1[15] * x1[1] - x1[15] * x1[1] - x1[15] * x1[1] + 65535 * q0[1]) + - 262140 + q0[4]; + + pol eq12_17 = + (s[2] * y1[15] + s[2] * y1[15] - x1[2] * x1[15] - x1[2] * x1[15] - x1[2] * x1[15] + 65535 * q0[15]) + + (s[3] * y1[14] + s[3] * y1[14] - x1[3] * x1[14] - x1[3] * x1[14] - x1[3] * x1[14] + 65535 * q0[14]) + + (s[4] * y1[13] + s[4] * y1[13] - x1[4] * x1[13] - x1[4] * x1[13] - x1[4] * x1[13] + 65535 * q0[13]) + + (s[5] * y1[12] + s[5] * y1[12] - x1[5] * x1[12] - x1[5] * x1[12] - x1[5] * x1[12] + 65535 * q0[12]) + + (s[6] * y1[11] + s[6] * y1[11] - x1[6] * x1[11] - x1[6] * x1[11] - x1[6] * x1[11]) + + (s[7] * y1[10] + s[7] * y1[10] - x1[7] * x1[10] - x1[7] * x1[10] - x1[7] * x1[10]) + + (s[8] * y1[9] + s[8] * y1[9] - x1[8] * x1[9] - x1[8] * x1[9] - x1[8] * x1[9]) + + (s[9] * y1[8] + s[9] * y1[8] - x1[9] * x1[8] - x1[9] * x1[8] - x1[9] * x1[8]) + + (s[10] * y1[7] + s[10] * y1[7] - x1[10] * x1[7] - x1[10] * x1[7] - x1[10] * x1[7]) + + (s[11] * y1[6] + s[11] * y1[6] - x1[11] * x1[6] - x1[11] * x1[6] - x1[11] * x1[6]) + + (s[12] * y1[5] + s[12] * y1[5] - x1[12] * x1[5] - x1[12] * x1[5] - x1[12] * x1[5]) + + (s[13] * y1[4] + s[13] * y1[4] - x1[13] * x1[4] - x1[13] * x1[4] - x1[13] * x1[4]) + + (s[14] * y1[3] + s[14] * y1[3] - x1[14] * x1[3] - x1[14] * x1[3] - x1[14] * x1[3] + 65535 * q0[3]) + + (s[15] * y1[2] + s[15] * y1[2] - x1[15] * x1[2] - x1[15] * x1[2] - x1[15] * x1[2] + 65535 * q0[2]) + - 262140 + q0[5]; + + pol eq12_18 = + (s[3] * y1[15] + s[3] * y1[15] - x1[3] * x1[15] - x1[3] * x1[15] - x1[3] * x1[15] + 65535 * q0[15]) + + (s[4] * y1[14] + s[4] * y1[14] - x1[4] * x1[14] - x1[4] * x1[14] - x1[4] * x1[14] + 65535 * q0[14]) + + (s[5] * y1[13] + s[5] * y1[13] - x1[5] * x1[13] - x1[5] * x1[13] - x1[5] * x1[13] + 65535 * q0[13]) + + (s[6] * y1[12] + s[6] * y1[12] - x1[6] * x1[12] - x1[6] * x1[12] - x1[6] * x1[12]) + + (s[7] * y1[11] + s[7] * y1[11] - x1[7] * x1[11] - x1[7] * x1[11] - x1[7] * x1[11]) + + (s[8] * y1[10] + s[8] * y1[10] - x1[8] * x1[10] - x1[8] * x1[10] - x1[8] * x1[10]) + + (s[9] * y1[9] + s[9] * y1[9] - x1[9] * x1[9] - x1[9] * x1[9] - x1[9] * x1[9]) + + (s[10] * y1[8] + s[10] * y1[8] - x1[10] * x1[8] - x1[10] * x1[8] - x1[10] * x1[8]) + + (s[11] * y1[7] + s[11] * y1[7] - x1[11] * x1[7] - x1[11] * x1[7] - x1[11] * x1[7]) + + (s[12] * y1[6] + s[12] * y1[6] - x1[12] * x1[6] - x1[12] * x1[6] - x1[12] * x1[6]) + + (s[13] * y1[5] + s[13] * y1[5] - x1[13] * x1[5] - x1[13] * x1[5] - x1[13] * x1[5]) + + (s[14] * y1[4] + s[14] * y1[4] - x1[14] * x1[4] - x1[14] * x1[4] - x1[14] * x1[4] + 65535 * q0[4]) + + (s[15] * y1[3] + s[15] * y1[3] - x1[15] * x1[3] - x1[15] * x1[3] - x1[15] * x1[3] + 65535 * q0[3]) + - 262140 + q0[6]; + + pol eq12_19 = + (s[4] * y1[15] + s[4] * y1[15] - x1[4] * x1[15] - x1[4] * x1[15] - x1[4] * x1[15] + 65535 * q0[15]) + + (s[5] * y1[14] + s[5] * y1[14] - x1[5] * x1[14] - x1[5] * x1[14] - x1[5] * x1[14] + 65535 * q0[14]) + + (s[6] * y1[13] + s[6] * y1[13] - x1[6] * x1[13] - x1[6] * x1[13] - x1[6] * x1[13]) + + (s[7] * y1[12] + s[7] * y1[12] - x1[7] * x1[12] - x1[7] * x1[12] - x1[7] * x1[12]) + + (s[8] * y1[11] + s[8] * y1[11] - x1[8] * x1[11] - x1[8] * x1[11] - x1[8] * x1[11]) + + (s[9] * y1[10] + s[9] * y1[10] - x1[9] * x1[10] - x1[9] * x1[10] - x1[9] * x1[10]) + + (s[10] * y1[9] + s[10] * y1[9] - x1[10] * x1[9] - x1[10] * x1[9] - x1[10] * x1[9]) + + (s[11] * y1[8] + s[11] * y1[8] - x1[11] * x1[8] - x1[11] * x1[8] - x1[11] * x1[8]) + + (s[12] * y1[7] + s[12] * y1[7] - x1[12] * x1[7] - x1[12] * x1[7] - x1[12] * x1[7]) + + (s[13] * y1[6] + s[13] * y1[6] - x1[13] * x1[6] - x1[13] * x1[6] - x1[13] * x1[6]) + + (s[14] * y1[5] + s[14] * y1[5] - x1[14] * x1[5] - x1[14] * x1[5] - x1[14] * x1[5] + 65535 * q0[5]) + + (s[15] * y1[4] + s[15] * y1[4] - x1[15] * x1[4] - x1[15] * x1[4] - x1[15] * x1[4] + 65535 * q0[4]) + - 262140 + q0[7]; + + pol eq12_20 = + (s[5] * y1[15] + s[5] * y1[15] - x1[5] * x1[15] - x1[5] * x1[15] - x1[5] * x1[15] + 65535 * q0[15]) + + (s[6] * y1[14] + s[6] * y1[14] - x1[6] * x1[14] - x1[6] * x1[14] - x1[6] * x1[14]) + + (s[7] * y1[13] + s[7] * y1[13] - x1[7] * x1[13] - x1[7] * x1[13] - x1[7] * x1[13]) + + (s[8] * y1[12] + s[8] * y1[12] - x1[8] * x1[12] - x1[8] * x1[12] - x1[8] * x1[12]) + + (s[9] * y1[11] + s[9] * y1[11] - x1[9] * x1[11] - x1[9] * x1[11] - x1[9] * x1[11]) + + (s[10] * y1[10] + s[10] * y1[10] - x1[10] * x1[10] - x1[10] * x1[10] - x1[10] * x1[10]) + + (s[11] * y1[9] + s[11] * y1[9] - x1[11] * x1[9] - x1[11] * x1[9] - x1[11] * x1[9]) + + (s[12] * y1[8] + s[12] * y1[8] - x1[12] * x1[8] - x1[12] * x1[8] - x1[12] * x1[8]) + + (s[13] * y1[7] + s[13] * y1[7] - x1[13] * x1[7] - x1[13] * x1[7] - x1[13] * x1[7]) + + (s[14] * y1[6] + s[14] * y1[6] - x1[14] * x1[6] - x1[14] * x1[6] - x1[14] * x1[6] + 65535 * q0[6]) + + (s[15] * y1[5] + s[15] * y1[5] - x1[15] * x1[5] - x1[15] * x1[5] - x1[15] * x1[5] + 65535 * q0[5]) + - 262140 + q0[8]; + + pol eq12_21 = + (s[6] * y1[15] + s[6] * y1[15] - x1[6] * x1[15] - x1[6] * x1[15] - x1[6] * x1[15]) + + (s[7] * y1[14] + s[7] * y1[14] - x1[7] * x1[14] - x1[7] * x1[14] - x1[7] * x1[14]) + + (s[8] * y1[13] + s[8] * y1[13] - x1[8] * x1[13] - x1[8] * x1[13] - x1[8] * x1[13]) + + (s[9] * y1[12] + s[9] * y1[12] - x1[9] * x1[12] - x1[9] * x1[12] - x1[9] * x1[12]) + + (s[10] * y1[11] + s[10] * y1[11] - x1[10] * x1[11] - x1[10] * x1[11] - x1[10] * x1[11]) + + (s[11] * y1[10] + s[11] * y1[10] - x1[11] * x1[10] - x1[11] * x1[10] - x1[11] * x1[10]) + + (s[12] * y1[9] + s[12] * y1[9] - x1[12] * x1[9] - x1[12] * x1[9] - x1[12] * x1[9]) + + (s[13] * y1[8] + s[13] * y1[8] - x1[13] * x1[8] - x1[13] * x1[8] - x1[13] * x1[8]) + + (s[14] * y1[7] + s[14] * y1[7] - x1[14] * x1[7] - x1[14] * x1[7] - x1[14] * x1[7] + 65535 * q0[7]) + + (s[15] * y1[6] + s[15] * y1[6] - x1[15] * x1[6] - x1[15] * x1[6] - x1[15] * x1[6] + 65535 * q0[6]) + - 262140 + q0[9]; + + pol eq12_22 = + (s[7] * y1[15] + s[7] * y1[15] - x1[7] * x1[15] - x1[7] * x1[15] - x1[7] * x1[15]) + + (s[8] * y1[14] + s[8] * y1[14] - x1[8] * x1[14] - x1[8] * x1[14] - x1[8] * x1[14]) + + (s[9] * y1[13] + s[9] * y1[13] - x1[9] * x1[13] - x1[9] * x1[13] - x1[9] * x1[13]) + + (s[10] * y1[12] + s[10] * y1[12] - x1[10] * x1[12] - x1[10] * x1[12] - x1[10] * x1[12]) + + (s[11] * y1[11] + s[11] * y1[11] - x1[11] * x1[11] - x1[11] * x1[11] - x1[11] * x1[11]) + + (s[12] * y1[10] + s[12] * y1[10] - x1[12] * x1[10] - x1[12] * x1[10] - x1[12] * x1[10]) + + (s[13] * y1[9] + s[13] * y1[9] - x1[13] * x1[9] - x1[13] * x1[9] - x1[13] * x1[9]) + + (s[14] * y1[8] + s[14] * y1[8] - x1[14] * x1[8] - x1[14] * x1[8] - x1[14] * x1[8] + 65535 * q0[8]) + + (s[15] * y1[7] + s[15] * y1[7] - x1[15] * x1[7] - x1[15] * x1[7] - x1[15] * x1[7] + 65535 * q0[7]) + + q0[10]; + + pol eq12_23 = + (s[8] * y1[15] + s[8] * y1[15] - x1[8] * x1[15] - x1[8] * x1[15] - x1[8] * x1[15]) + + (s[9] * y1[14] + s[9] * y1[14] - x1[9] * x1[14] - x1[9] * x1[14] - x1[9] * x1[14]) + + (s[10] * y1[13] + s[10] * y1[13] - x1[10] * x1[13] - x1[10] * x1[13] - x1[10] * x1[13]) + + (s[11] * y1[12] + s[11] * y1[12] - x1[11] * x1[12] - x1[11] * x1[12] - x1[11] * x1[12]) + + (s[12] * y1[11] + s[12] * y1[11] - x1[12] * x1[11] - x1[12] * x1[11] - x1[12] * x1[11]) + + (s[13] * y1[10] + s[13] * y1[10] - x1[13] * x1[10] - x1[13] * x1[10] - x1[13] * x1[10]) + + (s[14] * y1[9] + s[14] * y1[9] - x1[14] * x1[9] - x1[14] * x1[9] - x1[14] * x1[9] + 65535 * q0[9]) + + (s[15] * y1[8] + s[15] * y1[8] - x1[15] * x1[8] - x1[15] * x1[8] - x1[15] * x1[8] + 65535 * q0[8]) + + q0[11]; + + pol eq12_24 = + (s[9] * y1[15] + s[9] * y1[15] - x1[9] * x1[15] - x1[9] * x1[15] - x1[9] * x1[15]) + + (s[10] * y1[14] + s[10] * y1[14] - x1[10] * x1[14] - x1[10] * x1[14] - x1[10] * x1[14]) + + (s[11] * y1[13] + s[11] * y1[13] - x1[11] * x1[13] - x1[11] * x1[13] - x1[11] * x1[13]) + + (s[12] * y1[12] + s[12] * y1[12] - x1[12] * x1[12] - x1[12] * x1[12] - x1[12] * x1[12]) + + (s[13] * y1[11] + s[13] * y1[11] - x1[13] * x1[11] - x1[13] * x1[11] - x1[13] * x1[11]) + + (s[14] * y1[10] + s[14] * y1[10] - x1[14] * x1[10] - x1[14] * x1[10] - x1[14] * x1[10] + 65535 * q0[10]) + + (s[15] * y1[9] + s[15] * y1[9] - x1[15] * x1[9] - x1[15] * x1[9] - x1[15] * x1[9] + 65535 * q0[9]) + + q0[12]; + + pol eq12_25 = + (s[10] * y1[15] + s[10] * y1[15] - x1[10] * x1[15] - x1[10] * x1[15] - x1[10] * x1[15]) + + (s[11] * y1[14] + s[11] * y1[14] - x1[11] * x1[14] - x1[11] * x1[14] - x1[11] * x1[14]) + + (s[12] * y1[13] + s[12] * y1[13] - x1[12] * x1[13] - x1[12] * x1[13] - x1[12] * x1[13]) + + (s[13] * y1[12] + s[13] * y1[12] - x1[13] * x1[12] - x1[13] * x1[12] - x1[13] * x1[12]) + + (s[14] * y1[11] + s[14] * y1[11] - x1[14] * x1[11] - x1[14] * x1[11] - x1[14] * x1[11] + 65535 * q0[11]) + + (s[15] * y1[10] + s[15] * y1[10] - x1[15] * x1[10] - x1[15] * x1[10] - x1[15] * x1[10] + 65535 * q0[10]) + + q0[13]; + + pol eq12_26 = + (s[11] * y1[15] + s[11] * y1[15] - x1[11] * x1[15] - x1[11] * x1[15] - x1[11] * x1[15]) + + (s[12] * y1[14] + s[12] * y1[14] - x1[12] * x1[14] - x1[12] * x1[14] - x1[12] * x1[14]) + + (s[13] * y1[13] + s[13] * y1[13] - x1[13] * x1[13] - x1[13] * x1[13] - x1[13] * x1[13]) + + (s[14] * y1[12] + s[14] * y1[12] - x1[14] * x1[12] - x1[14] * x1[12] - x1[14] * x1[12] + 65535 * q0[12]) + + (s[15] * y1[11] + s[15] * y1[11] - x1[15] * x1[11] - x1[15] * x1[11] - x1[15] * x1[11] + 65535 * q0[11]) + + q0[14]; + + pol eq12_27 = + (s[12] * y1[15] + s[12] * y1[15] - x1[12] * x1[15] - x1[12] * x1[15] - x1[12] * x1[15]) + + (s[13] * y1[14] + s[13] * y1[14] - x1[13] * x1[14] - x1[13] * x1[14] - x1[13] * x1[14]) + + (s[14] * y1[13] + s[14] * y1[13] - x1[14] * x1[13] - x1[14] * x1[13] - x1[14] * x1[13] + 65535 * q0[13]) + + (s[15] * y1[12] + s[15] * y1[12] - x1[15] * x1[12] - x1[15] * x1[12] - x1[15] * x1[12] + 65535 * q0[12]) + + q0[15]; + + pol eq12_28 = + (s[13] * y1[15] + s[13] * y1[15] - x1[13] * x1[15] - x1[13] * x1[15] - x1[13] * x1[15]) + + (s[14] * y1[14] + s[14] * y1[14] - x1[14] * x1[14] - x1[14] * x1[14] - x1[14] * x1[14] + 65535 * q0[14]) + + (s[15] * y1[13] + s[15] * y1[13] - x1[15] * x1[13] - x1[15] * x1[13] - x1[15] * x1[13] + 65535 * q0[13]) + - 4; + + pol eq12_29 = + (s[14] * y1[15] + s[14] * y1[15] - x1[14] * x1[15] - x1[14] * x1[15] - x1[14] * x1[15] + 65535 * q0[15]) + + (s[15] * y1[14] + s[15] * y1[14] - x1[15] * x1[14] - x1[15] * x1[14] - x1[15] * x1[14] + 65535 * q0[14]); + + pol eq12_30 = + (s[15] * y1[15] + s[15] * y1[15] - x1[15] * x1[15] - x1[15] * x1[15] - x1[15] * x1[15] + 65535 * q0[15]) + - 262140; + + pol eq12_31 = - 262140; + + + /******* + * + * EQ13: s * s - x1 - x2 - x3 - p * (q1 - offset) = 0 + * + *******/ + + pol eq13_0 = + (s[0] * s[0] - 65535 * q1[0]) + + 262140 - x1[0] - x2[0] - x3[0]; + + pol eq13_1 = + (s[0] * s[1] - 65535 * q1[1]) + + (s[1] * s[0] - 65535 * q1[0]) + + 262140 - x1[1] - x2[1] - x3[1]; + + pol eq13_2 = + (s[0] * s[2] - 65535 * q1[2]) + + (s[1] * s[1] - 65535 * q1[1]) + + (s[2] * s[0] - 65535 * q1[0]) + + 262140 - x1[2] - x2[2] - x3[2]; + + pol eq13_3 = + (s[0] * s[3] - 65535 * q1[3]) + + (s[1] * s[2] - 65535 * q1[2]) + + (s[2] * s[1] - 65535 * q1[1]) + + (s[3] * s[0] - 65535 * q1[0]) + + 262140 - x1[3] - x2[3] - x3[3]; + + pol eq13_4 = + (s[0] * s[4] - 65535 * q1[4]) + + (s[1] * s[3] - 65535 * q1[3]) + + (s[2] * s[2] - 65535 * q1[2]) + + (s[3] * s[1] - 65535 * q1[1]) + + (s[4] * s[0] - 65535 * q1[0]) + + 262140 - x1[4] - x2[4] - x3[4]; + + pol eq13_5 = + (s[0] * s[5] - 65535 * q1[5]) + + (s[1] * s[4] - 65535 * q1[4]) + + (s[2] * s[3] - 65535 * q1[3]) + + (s[3] * s[2] - 65535 * q1[2]) + + (s[4] * s[1] - 65535 * q1[1]) + + (s[5] * s[0] - 65535 * q1[0]) + + 262140 - x1[5] - x2[5] - x3[5]; + + pol eq13_6 = + (s[0] * s[6] - 65535 * q1[6]) + + (s[1] * s[5] - 65535 * q1[5]) + + (s[2] * s[4] - 65535 * q1[4]) + + (s[3] * s[3] - 65535 * q1[3]) + + (s[4] * s[2] - 65535 * q1[2]) + + (s[5] * s[1] - 65535 * q1[1]) + + (s[6] * s[0]) + - x1[6] - x2[6] - x3[6]; + + pol eq13_7 = + (s[0] * s[7] - 65535 * q1[7]) + + (s[1] * s[6] - 65535 * q1[6]) + + (s[2] * s[5] - 65535 * q1[5]) + + (s[3] * s[4] - 65535 * q1[4]) + + (s[4] * s[3] - 65535 * q1[3]) + + (s[5] * s[2] - 65535 * q1[2]) + + (s[6] * s[1]) + + (s[7] * s[0]) + - x1[7] - x2[7] - x3[7]; + + pol eq13_8 = + (s[0] * s[8] - 65535 * q1[8]) + + (s[1] * s[7] - 65535 * q1[7]) + + (s[2] * s[6] - 65535 * q1[6]) + + (s[3] * s[5] - 65535 * q1[5]) + + (s[4] * s[4] - 65535 * q1[4]) + + (s[5] * s[3] - 65535 * q1[3]) + + (s[6] * s[2]) + + (s[7] * s[1]) + + (s[8] * s[0]) + - x1[8] - x2[8] - x3[8]; + + pol eq13_9 = + (s[0] * s[9] - 65535 * q1[9]) + + (s[1] * s[8] - 65535 * q1[8]) + + (s[2] * s[7] - 65535 * q1[7]) + + (s[3] * s[6] - 65535 * q1[6]) + + (s[4] * s[5] - 65535 * q1[5]) + + (s[5] * s[4] - 65535 * q1[4]) + + (s[6] * s[3]) + + (s[7] * s[2]) + + (s[8] * s[1]) + + (s[9] * s[0]) + - x1[9] - x2[9] - x3[9]; + + pol eq13_10 = + (s[0] * s[10] - 65535 * q1[10]) + + (s[1] * s[9] - 65535 * q1[9]) + + (s[2] * s[8] - 65535 * q1[8]) + + (s[3] * s[7] - 65535 * q1[7]) + + (s[4] * s[6] - 65535 * q1[6]) + + (s[5] * s[5] - 65535 * q1[5]) + + (s[6] * s[4]) + + (s[7] * s[3]) + + (s[8] * s[2]) + + (s[9] * s[1]) + + (s[10] * s[0]) + - x1[10] - x2[10] - x3[10]; + + pol eq13_11 = + (s[0] * s[11] - 65535 * q1[11]) + + (s[1] * s[10] - 65535 * q1[10]) + + (s[2] * s[9] - 65535 * q1[9]) + + (s[3] * s[8] - 65535 * q1[8]) + + (s[4] * s[7] - 65535 * q1[7]) + + (s[5] * s[6] - 65535 * q1[6]) + + (s[6] * s[5]) + + (s[7] * s[4]) + + (s[8] * s[3]) + + (s[9] * s[2]) + + (s[10] * s[1]) + + (s[11] * s[0]) + - x1[11] - x2[11] - x3[11]; + + pol eq13_12 = + (s[0] * s[12] - 65535 * q1[12]) + + (s[1] * s[11] - 65535 * q1[11]) + + (s[2] * s[10] - 65535 * q1[10]) + + (s[3] * s[9] - 65535 * q1[9]) + + (s[4] * s[8] - 65535 * q1[8]) + + (s[5] * s[7] - 65535 * q1[7]) + + (s[6] * s[6]) + + (s[7] * s[5]) + + (s[8] * s[4]) + + (s[9] * s[3]) + + (s[10] * s[2]) + + (s[11] * s[1]) + + (s[12] * s[0]) + - q1[0] + 4 - x1[12] - x2[12] - x3[12]; + + pol eq13_13 = + (s[0] * s[13] - 65535 * q1[13]) + + (s[1] * s[12] - 65535 * q1[12]) + + (s[2] * s[11] - 65535 * q1[11]) + + (s[3] * s[10] - 65535 * q1[10]) + + (s[4] * s[9] - 65535 * q1[9]) + + (s[5] * s[8] - 65535 * q1[8]) + + (s[6] * s[7]) + + (s[7] * s[6]) + + (s[8] * s[5]) + + (s[9] * s[4]) + + (s[10] * s[3]) + + (s[11] * s[2]) + + (s[12] * s[1]) + + (s[13] * s[0]) + - q1[1] - x1[13] - x2[13] - x3[13]; + + pol eq13_14 = + (s[0] * s[14] - 65535 * q1[14]) + + (s[1] * s[13] - 65535 * q1[13]) + + (s[2] * s[12] - 65535 * q1[12]) + + (s[3] * s[11] - 65535 * q1[11]) + + (s[4] * s[10] - 65535 * q1[10]) + + (s[5] * s[9] - 65535 * q1[9]) + + (s[6] * s[8]) + + (s[7] * s[7]) + + (s[8] * s[6]) + + (s[9] * s[5]) + + (s[10] * s[4]) + + (s[11] * s[3]) + + (s[12] * s[2]) + + (s[13] * s[1]) + + (s[14] * s[0] - 65535 * q1[0]) + - q1[2] + 262140 - x1[14] - x2[14] - x3[14]; + + pol eq13_15 = + (s[0] * s[15] - 65535 * q1[15]) + + (s[1] * s[14] - 65535 * q1[14]) + + (s[2] * s[13] - 65535 * q1[13]) + + (s[3] * s[12] - 65535 * q1[12]) + + (s[4] * s[11] - 65535 * q1[11]) + + (s[5] * s[10] - 65535 * q1[10]) + + (s[6] * s[9]) + + (s[7] * s[8]) + + (s[8] * s[7]) + + (s[9] * s[6]) + + (s[10] * s[5]) + + (s[11] * s[4]) + + (s[12] * s[3]) + + (s[13] * s[2]) + + (s[14] * s[1] - 65535 * q1[1]) + + (s[15] * s[0] - 65535 * q1[0]) + - q1[3] + 262140 - x1[15] - x2[15] - x3[15]; + + pol eq13_16 = + (s[1] * s[15] - 65535 * q1[15]) + + (s[2] * s[14] - 65535 * q1[14]) + + (s[3] * s[13] - 65535 * q1[13]) + + (s[4] * s[12] - 65535 * q1[12]) + + (s[5] * s[11] - 65535 * q1[11]) + + (s[6] * s[10]) + + (s[7] * s[9]) + + (s[8] * s[8]) + + (s[9] * s[7]) + + (s[10] * s[6]) + + (s[11] * s[5]) + + (s[12] * s[4]) + + (s[13] * s[3]) + + (s[14] * s[2] - 65535 * q1[2]) + + (s[15] * s[1] - 65535 * q1[1]) + - q1[4]; + + pol eq13_17 = + (s[2] * s[15] - 65535 * q1[15]) + + (s[3] * s[14] - 65535 * q1[14]) + + (s[4] * s[13] - 65535 * q1[13]) + + (s[5] * s[12] - 65535 * q1[12]) + + (s[6] * s[11]) + + (s[7] * s[10]) + + (s[8] * s[9]) + + (s[9] * s[8]) + + (s[10] * s[7]) + + (s[11] * s[6]) + + (s[12] * s[5]) + + (s[13] * s[4]) + + (s[14] * s[3] - 65535 * q1[3]) + + (s[15] * s[2] - 65535 * q1[2]) + - q1[5]; + + pol eq13_18 = + (s[3] * s[15] - 65535 * q1[15]) + + (s[4] * s[14] - 65535 * q1[14]) + + (s[5] * s[13] - 65535 * q1[13]) + + (s[6] * s[12]) + + (s[7] * s[11]) + + (s[8] * s[10]) + + (s[9] * s[9]) + + (s[10] * s[8]) + + (s[11] * s[7]) + + (s[12] * s[6]) + + (s[13] * s[5]) + + (s[14] * s[4] - 65535 * q1[4]) + + (s[15] * s[3] - 65535 * q1[3]) + - q1[6]; + + pol eq13_19 = + (s[4] * s[15] - 65535 * q1[15]) + + (s[5] * s[14] - 65535 * q1[14]) + + (s[6] * s[13]) + + (s[7] * s[12]) + + (s[8] * s[11]) + + (s[9] * s[10]) + + (s[10] * s[9]) + + (s[11] * s[8]) + + (s[12] * s[7]) + + (s[13] * s[6]) + + (s[14] * s[5] - 65535 * q1[5]) + + (s[15] * s[4] - 65535 * q1[4]) + - q1[7]; + + pol eq13_20 = + (s[5] * s[15] - 65535 * q1[15]) + + (s[6] * s[14]) + + (s[7] * s[13]) + + (s[8] * s[12]) + + (s[9] * s[11]) + + (s[10] * s[10]) + + (s[11] * s[9]) + + (s[12] * s[8]) + + (s[13] * s[7]) + + (s[14] * s[6] - 65535 * q1[6]) + + (s[15] * s[5] - 65535 * q1[5]) + - q1[8]; + + pol eq13_21 = + (s[6] * s[15]) + + (s[7] * s[14]) + + (s[8] * s[13]) + + (s[9] * s[12]) + + (s[10] * s[11]) + + (s[11] * s[10]) + + (s[12] * s[9]) + + (s[13] * s[8]) + + (s[14] * s[7] - 65535 * q1[7]) + + (s[15] * s[6] - 65535 * q1[6]) + - q1[9]; + + pol eq13_22 = + (s[7] * s[15]) + + (s[8] * s[14]) + + (s[9] * s[13]) + + (s[10] * s[12]) + + (s[11] * s[11]) + + (s[12] * s[10]) + + (s[13] * s[9]) + + (s[14] * s[8] - 65535 * q1[8]) + + (s[15] * s[7] - 65535 * q1[7]) + - q1[10]; + + pol eq13_23 = + (s[8] * s[15]) + + (s[9] * s[14]) + + (s[10] * s[13]) + + (s[11] * s[12]) + + (s[12] * s[11]) + + (s[13] * s[10]) + + (s[14] * s[9] - 65535 * q1[9]) + + (s[15] * s[8] - 65535 * q1[8]) + - q1[11]; + + pol eq13_24 = + (s[9] * s[15]) + + (s[10] * s[14]) + + (s[11] * s[13]) + + (s[12] * s[12]) + + (s[13] * s[11]) + + (s[14] * s[10] - 65535 * q1[10]) + + (s[15] * s[9] - 65535 * q1[9]) + - q1[12]; + + pol eq13_25 = + (s[10] * s[15]) + + (s[11] * s[14]) + + (s[12] * s[13]) + + (s[13] * s[12]) + + (s[14] * s[11] - 65535 * q1[11]) + + (s[15] * s[10] - 65535 * q1[10]) + - q1[13]; + + pol eq13_26 = + (s[11] * s[15]) + + (s[12] * s[14]) + + (s[13] * s[13]) + + (s[14] * s[12] - 65535 * q1[12]) + + (s[15] * s[11] - 65535 * q1[11]) + - q1[14]; + + pol eq13_27 = + (s[12] * s[15]) + + (s[13] * s[14]) + + (s[14] * s[13] - 65535 * q1[13]) + + (s[15] * s[12] - 65535 * q1[12]) + - q1[15]; + + pol eq13_28 = + (s[13] * s[15]) + + (s[14] * s[14] - 65535 * q1[14]) + + (s[15] * s[13] - 65535 * q1[13]); + + pol eq13_29 = + (s[14] * s[15] - 65535 * q1[15]) + + (s[15] * s[14] - 65535 * q1[14]); + + pol eq13_30 = + (s[15] * s[15] - 65535 * q1[15]); + + pol eq13_31 = + 0; + + + /******* + * + * EQ14: s * x1 - s * x3 - y1 - y3 + p * (q2 - offset) = 0 + * + *******/ + + pol eq14_0 = + (s[0] * x1[0] - s[0] * x3[0] + 65535 * q2[0]) + - y1[0] - y3[0]; + + pol eq14_1 = + (s[0] * x1[1] - s[0] * x3[1] + 65535 * q2[1]) + + (s[1] * x1[0] - s[1] * x3[0] + 65535 * q2[0]) + - y1[1] - y3[1]; + + pol eq14_2 = + (s[0] * x1[2] - s[0] * x3[2] + 65535 * q2[2]) + + (s[1] * x1[1] - s[1] * x3[1] + 65535 * q2[1]) + + (s[2] * x1[0] - s[2] * x3[0] + 65535 * q2[0]) + - y1[2] - y3[2]; + + pol eq14_3 = + (s[0] * x1[3] - s[0] * x3[3] + 65535 * q2[3]) + + (s[1] * x1[2] - s[1] * x3[2] + 65535 * q2[2]) + + (s[2] * x1[1] - s[2] * x3[1] + 65535 * q2[1]) + + (s[3] * x1[0] - s[3] * x3[0] + 65535 * q2[0]) + - y1[3] - y3[3]; + + pol eq14_4 = + (s[0] * x1[4] - s[0] * x3[4] + 65535 * q2[4]) + + (s[1] * x1[3] - s[1] * x3[3] + 65535 * q2[3]) + + (s[2] * x1[2] - s[2] * x3[2] + 65535 * q2[2]) + + (s[3] * x1[1] - s[3] * x3[1] + 65535 * q2[1]) + + (s[4] * x1[0] - s[4] * x3[0] + 65535 * q2[0]) + - y1[4] - y3[4]; + + pol eq14_5 = + (s[0] * x1[5] - s[0] * x3[5] + 65535 * q2[5]) + + (s[1] * x1[4] - s[1] * x3[4] + 65535 * q2[4]) + + (s[2] * x1[3] - s[2] * x3[3] + 65535 * q2[3]) + + (s[3] * x1[2] - s[3] * x3[2] + 65535 * q2[2]) + + (s[4] * x1[1] - s[4] * x3[1] + 65535 * q2[1]) + + (s[5] * x1[0] - s[5] * x3[0] + 65535 * q2[0]) + - y1[5] - y3[5]; + + pol eq14_6 = + (s[0] * x1[6] - s[0] * x3[6] + 65535 * q2[6]) + + (s[1] * x1[5] - s[1] * x3[5] + 65535 * q2[5]) + + (s[2] * x1[4] - s[2] * x3[4] + 65535 * q2[4]) + + (s[3] * x1[3] - s[3] * x3[3] + 65535 * q2[3]) + + (s[4] * x1[2] - s[4] * x3[2] + 65535 * q2[2]) + + (s[5] * x1[1] - s[5] * x3[1] + 65535 * q2[1]) + + (s[6] * x1[0] - s[6] * x3[0]) + - y1[6] - y3[6]; + + pol eq14_7 = + (s[0] * x1[7] - s[0] * x3[7] + 65535 * q2[7]) + + (s[1] * x1[6] - s[1] * x3[6] + 65535 * q2[6]) + + (s[2] * x1[5] - s[2] * x3[5] + 65535 * q2[5]) + + (s[3] * x1[4] - s[3] * x3[4] + 65535 * q2[4]) + + (s[4] * x1[3] - s[4] * x3[3] + 65535 * q2[3]) + + (s[5] * x1[2] - s[5] * x3[2] + 65535 * q2[2]) + + (s[6] * x1[1] - s[6] * x3[1]) + + (s[7] * x1[0] - s[7] * x3[0]) + - y1[7] - y3[7]; + + pol eq14_8 = + (s[0] * x1[8] - s[0] * x3[8] + 65535 * q2[8]) + + (s[1] * x1[7] - s[1] * x3[7] + 65535 * q2[7]) + + (s[2] * x1[6] - s[2] * x3[6] + 65535 * q2[6]) + + (s[3] * x1[5] - s[3] * x3[5] + 65535 * q2[5]) + + (s[4] * x1[4] - s[4] * x3[4] + 65535 * q2[4]) + + (s[5] * x1[3] - s[5] * x3[3] + 65535 * q2[3]) + + (s[6] * x1[2] - s[6] * x3[2]) + + (s[7] * x1[1] - s[7] * x3[1]) + + (s[8] * x1[0] - s[8] * x3[0]) + - y1[8] - y3[8]; + + pol eq14_9 = + (s[0] * x1[9] - s[0] * x3[9] + 65535 * q2[9]) + + (s[1] * x1[8] - s[1] * x3[8] + 65535 * q2[8]) + + (s[2] * x1[7] - s[2] * x3[7] + 65535 * q2[7]) + + (s[3] * x1[6] - s[3] * x3[6] + 65535 * q2[6]) + + (s[4] * x1[5] - s[4] * x3[5] + 65535 * q2[5]) + + (s[5] * x1[4] - s[5] * x3[4] + 65535 * q2[4]) + + (s[6] * x1[3] - s[6] * x3[3]) + + (s[7] * x1[2] - s[7] * x3[2]) + + (s[8] * x1[1] - s[8] * x3[1]) + + (s[9] * x1[0] - s[9] * x3[0]) + - y1[9] - y3[9]; + + pol eq14_10 = + (s[0] * x1[10] - s[0] * x3[10] + 65535 * q2[10]) + + (s[1] * x1[9] - s[1] * x3[9] + 65535 * q2[9]) + + (s[2] * x1[8] - s[2] * x3[8] + 65535 * q2[8]) + + (s[3] * x1[7] - s[3] * x3[7] + 65535 * q2[7]) + + (s[4] * x1[6] - s[4] * x3[6] + 65535 * q2[6]) + + (s[5] * x1[5] - s[5] * x3[5] + 65535 * q2[5]) + + (s[6] * x1[4] - s[6] * x3[4]) + + (s[7] * x1[3] - s[7] * x3[3]) + + (s[8] * x1[2] - s[8] * x3[2]) + + (s[9] * x1[1] - s[9] * x3[1]) + + (s[10] * x1[0] - s[10] * x3[0]) + - y1[10] - y3[10]; + + pol eq14_11 = + (s[0] * x1[11] - s[0] * x3[11] + 65535 * q2[11]) + + (s[1] * x1[10] - s[1] * x3[10] + 65535 * q2[10]) + + (s[2] * x1[9] - s[2] * x3[9] + 65535 * q2[9]) + + (s[3] * x1[8] - s[3] * x3[8] + 65535 * q2[8]) + + (s[4] * x1[7] - s[4] * x3[7] + 65535 * q2[7]) + + (s[5] * x1[6] - s[5] * x3[6] + 65535 * q2[6]) + + (s[6] * x1[5] - s[6] * x3[5]) + + (s[7] * x1[4] - s[7] * x3[4]) + + (s[8] * x1[3] - s[8] * x3[3]) + + (s[9] * x1[2] - s[9] * x3[2]) + + (s[10] * x1[1] - s[10] * x3[1]) + + (s[11] * x1[0] - s[11] * x3[0]) + - y1[11] - y3[11]; + + pol eq14_12 = + (s[0] * x1[12] - s[0] * x3[12] + 65535 * q2[12]) + + (s[1] * x1[11] - s[1] * x3[11] + 65535 * q2[11]) + + (s[2] * x1[10] - s[2] * x3[10] + 65535 * q2[10]) + + (s[3] * x1[9] - s[3] * x3[9] + 65535 * q2[9]) + + (s[4] * x1[8] - s[4] * x3[8] + 65535 * q2[8]) + + (s[5] * x1[7] - s[5] * x3[7] + 65535 * q2[7]) + + (s[6] * x1[6] - s[6] * x3[6]) + + (s[7] * x1[5] - s[7] * x3[5]) + + (s[8] * x1[4] - s[8] * x3[4]) + + (s[9] * x1[3] - s[9] * x3[3]) + + (s[10] * x1[2] - s[10] * x3[2]) + + (s[11] * x1[1] - s[11] * x3[1]) + + (s[12] * x1[0] - s[12] * x3[0]) + + q2[0] - y1[12] - y3[12]; + + pol eq14_13 = + (s[0] * x1[13] - s[0] * x3[13] + 65535 * q2[13]) + + (s[1] * x1[12] - s[1] * x3[12] + 65535 * q2[12]) + + (s[2] * x1[11] - s[2] * x3[11] + 65535 * q2[11]) + + (s[3] * x1[10] - s[3] * x3[10] + 65535 * q2[10]) + + (s[4] * x1[9] - s[4] * x3[9] + 65535 * q2[9]) + + (s[5] * x1[8] - s[5] * x3[8] + 65535 * q2[8]) + + (s[6] * x1[7] - s[6] * x3[7]) + + (s[7] * x1[6] - s[7] * x3[6]) + + (s[8] * x1[5] - s[8] * x3[5]) + + (s[9] * x1[4] - s[9] * x3[4]) + + (s[10] * x1[3] - s[10] * x3[3]) + + (s[11] * x1[2] - s[11] * x3[2]) + + (s[12] * x1[1] - s[12] * x3[1]) + + (s[13] * x1[0] - s[13] * x3[0]) + + q2[1] - y1[13] - y3[13]; + + pol eq14_14 = + (s[0] * x1[14] - s[0] * x3[14] + 65535 * q2[14]) + + (s[1] * x1[13] - s[1] * x3[13] + 65535 * q2[13]) + + (s[2] * x1[12] - s[2] * x3[12] + 65535 * q2[12]) + + (s[3] * x1[11] - s[3] * x3[11] + 65535 * q2[11]) + + (s[4] * x1[10] - s[4] * x3[10] + 65535 * q2[10]) + + (s[5] * x1[9] - s[5] * x3[9] + 65535 * q2[9]) + + (s[6] * x1[8] - s[6] * x3[8]) + + (s[7] * x1[7] - s[7] * x3[7]) + + (s[8] * x1[6] - s[8] * x3[6]) + + (s[9] * x1[5] - s[9] * x3[5]) + + (s[10] * x1[4] - s[10] * x3[4]) + + (s[11] * x1[3] - s[11] * x3[3]) + + (s[12] * x1[2] - s[12] * x3[2]) + + (s[13] * x1[1] - s[13] * x3[1]) + + (s[14] * x1[0] - s[14] * x3[0] + 65535 * q2[0]) + + q2[2] - y1[14] - y3[14]; + + pol eq14_15 = + (s[0] * x1[15] - s[0] * x3[15] + 65535 * q2[15]) + + (s[1] * x1[14] - s[1] * x3[14] + 65535 * q2[14]) + + (s[2] * x1[13] - s[2] * x3[13] + 65535 * q2[13]) + + (s[3] * x1[12] - s[3] * x3[12] + 65535 * q2[12]) + + (s[4] * x1[11] - s[4] * x3[11] + 65535 * q2[11]) + + (s[5] * x1[10] - s[5] * x3[10] + 65535 * q2[10]) + + (s[6] * x1[9] - s[6] * x3[9]) + + (s[7] * x1[8] - s[7] * x3[8]) + + (s[8] * x1[7] - s[8] * x3[7]) + + (s[9] * x1[6] - s[9] * x3[6]) + + (s[10] * x1[5] - s[10] * x3[5]) + + (s[11] * x1[4] - s[11] * x3[4]) + + (s[12] * x1[3] - s[12] * x3[3]) + + (s[13] * x1[2] - s[13] * x3[2]) + + (s[14] * x1[1] - s[14] * x3[1] + 65535 * q2[1]) + + (s[15] * x1[0] - s[15] * x3[0] + 65535 * q2[0]) + + q2[3] - y1[15] - y3[15]; + + pol eq14_16 = + (s[1] * x1[15] - s[1] * x3[15] + 65535 * q2[15]) + + (s[2] * x1[14] - s[2] * x3[14] + 65535 * q2[14]) + + (s[3] * x1[13] - s[3] * x3[13] + 65535 * q2[13]) + + (s[4] * x1[12] - s[4] * x3[12] + 65535 * q2[12]) + + (s[5] * x1[11] - s[5] * x3[11] + 65535 * q2[11]) + + (s[6] * x1[10] - s[6] * x3[10]) + + (s[7] * x1[9] - s[7] * x3[9]) + + (s[8] * x1[8] - s[8] * x3[8]) + + (s[9] * x1[7] - s[9] * x3[7]) + + (s[10] * x1[6] - s[10] * x3[6]) + + (s[11] * x1[5] - s[11] * x3[5]) + + (s[12] * x1[4] - s[12] * x3[4]) + + (s[13] * x1[3] - s[13] * x3[3]) + + (s[14] * x1[2] - s[14] * x3[2] + 65535 * q2[2]) + + (s[15] * x1[1] - s[15] * x3[1] + 65535 * q2[1]) + - 131070 + q2[4]; + + pol eq14_17 = + (s[2] * x1[15] - s[2] * x3[15] + 65535 * q2[15]) + + (s[3] * x1[14] - s[3] * x3[14] + 65535 * q2[14]) + + (s[4] * x1[13] - s[4] * x3[13] + 65535 * q2[13]) + + (s[5] * x1[12] - s[5] * x3[12] + 65535 * q2[12]) + + (s[6] * x1[11] - s[6] * x3[11]) + + (s[7] * x1[10] - s[7] * x3[10]) + + (s[8] * x1[9] - s[8] * x3[9]) + + (s[9] * x1[8] - s[9] * x3[8]) + + (s[10] * x1[7] - s[10] * x3[7]) + + (s[11] * x1[6] - s[11] * x3[6]) + + (s[12] * x1[5] - s[12] * x3[5]) + + (s[13] * x1[4] - s[13] * x3[4]) + + (s[14] * x1[3] - s[14] * x3[3] + 65535 * q2[3]) + + (s[15] * x1[2] - s[15] * x3[2] + 65535 * q2[2]) + - 131070 + q2[5]; + + pol eq14_18 = + (s[3] * x1[15] - s[3] * x3[15] + 65535 * q2[15]) + + (s[4] * x1[14] - s[4] * x3[14] + 65535 * q2[14]) + + (s[5] * x1[13] - s[5] * x3[13] + 65535 * q2[13]) + + (s[6] * x1[12] - s[6] * x3[12]) + + (s[7] * x1[11] - s[7] * x3[11]) + + (s[8] * x1[10] - s[8] * x3[10]) + + (s[9] * x1[9] - s[9] * x3[9]) + + (s[10] * x1[8] - s[10] * x3[8]) + + (s[11] * x1[7] - s[11] * x3[7]) + + (s[12] * x1[6] - s[12] * x3[6]) + + (s[13] * x1[5] - s[13] * x3[5]) + + (s[14] * x1[4] - s[14] * x3[4] + 65535 * q2[4]) + + (s[15] * x1[3] - s[15] * x3[3] + 65535 * q2[3]) + - 131070 + q2[6]; + + pol eq14_19 = + (s[4] * x1[15] - s[4] * x3[15] + 65535 * q2[15]) + + (s[5] * x1[14] - s[5] * x3[14] + 65535 * q2[14]) + + (s[6] * x1[13] - s[6] * x3[13]) + + (s[7] * x1[12] - s[7] * x3[12]) + + (s[8] * x1[11] - s[8] * x3[11]) + + (s[9] * x1[10] - s[9] * x3[10]) + + (s[10] * x1[9] - s[10] * x3[9]) + + (s[11] * x1[8] - s[11] * x3[8]) + + (s[12] * x1[7] - s[12] * x3[7]) + + (s[13] * x1[6] - s[13] * x3[6]) + + (s[14] * x1[5] - s[14] * x3[5] + 65535 * q2[5]) + + (s[15] * x1[4] - s[15] * x3[4] + 65535 * q2[4]) + - 131070 + q2[7]; + + pol eq14_20 = + (s[5] * x1[15] - s[5] * x3[15] + 65535 * q2[15]) + + (s[6] * x1[14] - s[6] * x3[14]) + + (s[7] * x1[13] - s[7] * x3[13]) + + (s[8] * x1[12] - s[8] * x3[12]) + + (s[9] * x1[11] - s[9] * x3[11]) + + (s[10] * x1[10] - s[10] * x3[10]) + + (s[11] * x1[9] - s[11] * x3[9]) + + (s[12] * x1[8] - s[12] * x3[8]) + + (s[13] * x1[7] - s[13] * x3[7]) + + (s[14] * x1[6] - s[14] * x3[6] + 65535 * q2[6]) + + (s[15] * x1[5] - s[15] * x3[5] + 65535 * q2[5]) + - 131070 + q2[8]; + + pol eq14_21 = + (s[6] * x1[15] - s[6] * x3[15]) + + (s[7] * x1[14] - s[7] * x3[14]) + + (s[8] * x1[13] - s[8] * x3[13]) + + (s[9] * x1[12] - s[9] * x3[12]) + + (s[10] * x1[11] - s[10] * x3[11]) + + (s[11] * x1[10] - s[11] * x3[10]) + + (s[12] * x1[9] - s[12] * x3[9]) + + (s[13] * x1[8] - s[13] * x3[8]) + + (s[14] * x1[7] - s[14] * x3[7] + 65535 * q2[7]) + + (s[15] * x1[6] - s[15] * x3[6] + 65535 * q2[6]) + - 131070 + q2[9]; + + pol eq14_22 = + (s[7] * x1[15] - s[7] * x3[15]) + + (s[8] * x1[14] - s[8] * x3[14]) + + (s[9] * x1[13] - s[9] * x3[13]) + + (s[10] * x1[12] - s[10] * x3[12]) + + (s[11] * x1[11] - s[11] * x3[11]) + + (s[12] * x1[10] - s[12] * x3[10]) + + (s[13] * x1[9] - s[13] * x3[9]) + + (s[14] * x1[8] - s[14] * x3[8] + 65535 * q2[8]) + + (s[15] * x1[7] - s[15] * x3[7] + 65535 * q2[7]) + + q2[10]; + + pol eq14_23 = + (s[8] * x1[15] - s[8] * x3[15]) + + (s[9] * x1[14] - s[9] * x3[14]) + + (s[10] * x1[13] - s[10] * x3[13]) + + (s[11] * x1[12] - s[11] * x3[12]) + + (s[12] * x1[11] - s[12] * x3[11]) + + (s[13] * x1[10] - s[13] * x3[10]) + + (s[14] * x1[9] - s[14] * x3[9] + 65535 * q2[9]) + + (s[15] * x1[8] - s[15] * x3[8] + 65535 * q2[8]) + + q2[11]; + + pol eq14_24 = + (s[9] * x1[15] - s[9] * x3[15]) + + (s[10] * x1[14] - s[10] * x3[14]) + + (s[11] * x1[13] - s[11] * x3[13]) + + (s[12] * x1[12] - s[12] * x3[12]) + + (s[13] * x1[11] - s[13] * x3[11]) + + (s[14] * x1[10] - s[14] * x3[10] + 65535 * q2[10]) + + (s[15] * x1[9] - s[15] * x3[9] + 65535 * q2[9]) + + q2[12]; + + pol eq14_25 = + (s[10] * x1[15] - s[10] * x3[15]) + + (s[11] * x1[14] - s[11] * x3[14]) + + (s[12] * x1[13] - s[12] * x3[13]) + + (s[13] * x1[12] - s[13] * x3[12]) + + (s[14] * x1[11] - s[14] * x3[11] + 65535 * q2[11]) + + (s[15] * x1[10] - s[15] * x3[10] + 65535 * q2[10]) + + q2[13]; + + pol eq14_26 = + (s[11] * x1[15] - s[11] * x3[15]) + + (s[12] * x1[14] - s[12] * x3[14]) + + (s[13] * x1[13] - s[13] * x3[13]) + + (s[14] * x1[12] - s[14] * x3[12] + 65535 * q2[12]) + + (s[15] * x1[11] - s[15] * x3[11] + 65535 * q2[11]) + + q2[14]; + + pol eq14_27 = + (s[12] * x1[15] - s[12] * x3[15]) + + (s[13] * x1[14] - s[13] * x3[14]) + + (s[14] * x1[13] - s[14] * x3[13] + 65535 * q2[13]) + + (s[15] * x1[12] - s[15] * x3[12] + 65535 * q2[12]) + + q2[15]; + + pol eq14_28 = + (s[13] * x1[15] - s[13] * x3[15]) + + (s[14] * x1[14] - s[14] * x3[14] + 65535 * q2[14]) + + (s[15] * x1[13] - s[15] * x3[13] + 65535 * q2[13]) + - 2; + + pol eq14_29 = + (s[14] * x1[15] - s[14] * x3[15] + 65535 * q2[15]) + + (s[15] * x1[14] - s[15] * x3[14] + 65535 * q2[14]); + + pol eq14_30 = + (s[15] * x1[15] - s[15] * x3[15] + 65535 * q2[15]) + - 131070; + + pol eq14_31 = - 131070; + + + + + pol eq0 = eq0_0*Global.CLK32[0] + eq0_1*Global.CLK32[1] + eq0_2*Global.CLK32[2] + eq0_3*Global.CLK32[3] + eq0_4*Global.CLK32[4] + eq0_5*Global.CLK32[5] + eq0_6*Global.CLK32[6] + eq0_7*Global.CLK32[7] + + eq0_8*Global.CLK32[8] + eq0_9*Global.CLK32[9] + eq0_10*Global.CLK32[10] + eq0_11*Global.CLK32[11] + eq0_12*Global.CLK32[12] + eq0_13*Global.CLK32[13] + eq0_14*Global.CLK32[14] + eq0_15*Global.CLK32[15] + + eq0_16*Global.CLK32[16] + eq0_17*Global.CLK32[17] + eq0_18*Global.CLK32[18] + eq0_19*Global.CLK32[19] + eq0_20*Global.CLK32[20] + eq0_21*Global.CLK32[21] + eq0_22*Global.CLK32[22] + eq0_23*Global.CLK32[23] + + eq0_24*Global.CLK32[24] + eq0_25*Global.CLK32[25] + eq0_26*Global.CLK32[26] + eq0_27*Global.CLK32[27] + eq0_28*Global.CLK32[28] + eq0_29*Global.CLK32[29] + eq0_30*Global.CLK32[30] + eq0_31*Global.CLK32[31]; + pol eq1 = eq1_0*Global.CLK32[0] + eq1_1*Global.CLK32[1] + eq1_2*Global.CLK32[2] + eq1_3*Global.CLK32[3] + eq1_4*Global.CLK32[4] + eq1_5*Global.CLK32[5] + eq1_6*Global.CLK32[6] + eq1_7*Global.CLK32[7] + + eq1_8*Global.CLK32[8] + eq1_9*Global.CLK32[9] + eq1_10*Global.CLK32[10] + eq1_11*Global.CLK32[11] + eq1_12*Global.CLK32[12] + eq1_13*Global.CLK32[13] + eq1_14*Global.CLK32[14] + eq1_15*Global.CLK32[15] + + eq1_16*Global.CLK32[16] + eq1_17*Global.CLK32[17] + eq1_18*Global.CLK32[18] + eq1_19*Global.CLK32[19] + eq1_20*Global.CLK32[20] + eq1_21*Global.CLK32[21] + eq1_22*Global.CLK32[22] + eq1_23*Global.CLK32[23] + + eq1_24*Global.CLK32[24] + eq1_25*Global.CLK32[25] + eq1_26*Global.CLK32[26] + eq1_27*Global.CLK32[27] + eq1_28*Global.CLK32[28] + eq1_29*Global.CLK32[29] + eq1_30*Global.CLK32[30] + eq1_31*Global.CLK32[31]; + pol eq2 = eq2_0*Global.CLK32[0] + eq2_1*Global.CLK32[1] + eq2_2*Global.CLK32[2] + eq2_3*Global.CLK32[3] + eq2_4*Global.CLK32[4] + eq2_5*Global.CLK32[5] + eq2_6*Global.CLK32[6] + eq2_7*Global.CLK32[7] + + eq2_8*Global.CLK32[8] + eq2_9*Global.CLK32[9] + eq2_10*Global.CLK32[10] + eq2_11*Global.CLK32[11] + eq2_12*Global.CLK32[12] + eq2_13*Global.CLK32[13] + eq2_14*Global.CLK32[14] + eq2_15*Global.CLK32[15] + + eq2_16*Global.CLK32[16] + eq2_17*Global.CLK32[17] + eq2_18*Global.CLK32[18] + eq2_19*Global.CLK32[19] + eq2_20*Global.CLK32[20] + eq2_21*Global.CLK32[21] + eq2_22*Global.CLK32[22] + eq2_23*Global.CLK32[23] + + eq2_24*Global.CLK32[24] + eq2_25*Global.CLK32[25] + eq2_26*Global.CLK32[26] + eq2_27*Global.CLK32[27] + eq2_28*Global.CLK32[28] + eq2_29*Global.CLK32[29] + eq2_30*Global.CLK32[30] + eq2_31*Global.CLK32[31]; + pol eq3 = eq3_0*Global.CLK32[0] + eq3_1*Global.CLK32[1] + eq3_2*Global.CLK32[2] + eq3_3*Global.CLK32[3] + eq3_4*Global.CLK32[4] + eq3_5*Global.CLK32[5] + eq3_6*Global.CLK32[6] + eq3_7*Global.CLK32[7] + + eq3_8*Global.CLK32[8] + eq3_9*Global.CLK32[9] + eq3_10*Global.CLK32[10] + eq3_11*Global.CLK32[11] + eq3_12*Global.CLK32[12] + eq3_13*Global.CLK32[13] + eq3_14*Global.CLK32[14] + eq3_15*Global.CLK32[15] + + eq3_16*Global.CLK32[16] + eq3_17*Global.CLK32[17] + eq3_18*Global.CLK32[18] + eq3_19*Global.CLK32[19] + eq3_20*Global.CLK32[20] + eq3_21*Global.CLK32[21] + eq3_22*Global.CLK32[22] + eq3_23*Global.CLK32[23] + + eq3_24*Global.CLK32[24] + eq3_25*Global.CLK32[25] + eq3_26*Global.CLK32[26] + eq3_27*Global.CLK32[27] + eq3_28*Global.CLK32[28] + eq3_29*Global.CLK32[29] + eq3_30*Global.CLK32[30] + eq3_31*Global.CLK32[31]; + pol eq4 = eq4_0*Global.CLK32[0] + eq4_1*Global.CLK32[1] + eq4_2*Global.CLK32[2] + eq4_3*Global.CLK32[3] + eq4_4*Global.CLK32[4] + eq4_5*Global.CLK32[5] + eq4_6*Global.CLK32[6] + eq4_7*Global.CLK32[7] + + eq4_8*Global.CLK32[8] + eq4_9*Global.CLK32[9] + eq4_10*Global.CLK32[10] + eq4_11*Global.CLK32[11] + eq4_12*Global.CLK32[12] + eq4_13*Global.CLK32[13] + eq4_14*Global.CLK32[14] + eq4_15*Global.CLK32[15] + + eq4_16*Global.CLK32[16] + eq4_17*Global.CLK32[17] + eq4_18*Global.CLK32[18] + eq4_19*Global.CLK32[19] + eq4_20*Global.CLK32[20] + eq4_21*Global.CLK32[21] + eq4_22*Global.CLK32[22] + eq4_23*Global.CLK32[23] + + eq4_24*Global.CLK32[24] + eq4_25*Global.CLK32[25] + eq4_26*Global.CLK32[26] + eq4_27*Global.CLK32[27] + eq4_28*Global.CLK32[28] + eq4_29*Global.CLK32[29] + eq4_30*Global.CLK32[30] + eq4_31*Global.CLK32[31]; + pol eq5 = eq5_0*Global.CLK32[0] + eq5_1*Global.CLK32[1] + eq5_2*Global.CLK32[2] + eq5_3*Global.CLK32[3] + eq5_4*Global.CLK32[4] + eq5_5*Global.CLK32[5] + eq5_6*Global.CLK32[6] + eq5_7*Global.CLK32[7] + + eq5_8*Global.CLK32[8] + eq5_9*Global.CLK32[9] + eq5_10*Global.CLK32[10] + eq5_11*Global.CLK32[11] + eq5_12*Global.CLK32[12] + eq5_13*Global.CLK32[13] + eq5_14*Global.CLK32[14] + eq5_15*Global.CLK32[15] + + eq5_16*Global.CLK32[16] + eq5_17*Global.CLK32[17] + eq5_18*Global.CLK32[18] + eq5_19*Global.CLK32[19] + eq5_20*Global.CLK32[20] + eq5_21*Global.CLK32[21] + eq5_22*Global.CLK32[22] + eq5_23*Global.CLK32[23] + + eq5_24*Global.CLK32[24] + eq5_25*Global.CLK32[25] + eq5_26*Global.CLK32[26] + eq5_27*Global.CLK32[27] + eq5_28*Global.CLK32[28] + eq5_29*Global.CLK32[29] + eq5_30*Global.CLK32[30] + eq5_31*Global.CLK32[31]; + pol eq6 = eq6_0*Global.CLK32[0] + eq6_1*Global.CLK32[1] + eq6_2*Global.CLK32[2] + eq6_3*Global.CLK32[3] + eq6_4*Global.CLK32[4] + eq6_5*Global.CLK32[5] + eq6_6*Global.CLK32[6] + eq6_7*Global.CLK32[7] + + eq6_8*Global.CLK32[8] + eq6_9*Global.CLK32[9] + eq6_10*Global.CLK32[10] + eq6_11*Global.CLK32[11] + eq6_12*Global.CLK32[12] + eq6_13*Global.CLK32[13] + eq6_14*Global.CLK32[14] + eq6_15*Global.CLK32[15] + + eq6_16*Global.CLK32[16] + eq6_17*Global.CLK32[17] + eq6_18*Global.CLK32[18] + eq6_19*Global.CLK32[19] + eq6_20*Global.CLK32[20] + eq6_21*Global.CLK32[21] + eq6_22*Global.CLK32[22] + eq6_23*Global.CLK32[23] + + eq6_24*Global.CLK32[24] + eq6_25*Global.CLK32[25] + eq6_26*Global.CLK32[26] + eq6_27*Global.CLK32[27] + eq6_28*Global.CLK32[28] + eq6_29*Global.CLK32[29] + eq6_30*Global.CLK32[30] + eq6_31*Global.CLK32[31]; + pol eq7 = eq7_0*Global.CLK32[0] + eq7_1*Global.CLK32[1] + eq7_2*Global.CLK32[2] + eq7_3*Global.CLK32[3] + eq7_4*Global.CLK32[4] + eq7_5*Global.CLK32[5] + eq7_6*Global.CLK32[6] + eq7_7*Global.CLK32[7] + + eq7_8*Global.CLK32[8] + eq7_9*Global.CLK32[9] + eq7_10*Global.CLK32[10] + eq7_11*Global.CLK32[11] + eq7_12*Global.CLK32[12] + eq7_13*Global.CLK32[13] + eq7_14*Global.CLK32[14] + eq7_15*Global.CLK32[15] + + eq7_16*Global.CLK32[16] + eq7_17*Global.CLK32[17] + eq7_18*Global.CLK32[18] + eq7_19*Global.CLK32[19] + eq7_20*Global.CLK32[20] + eq7_21*Global.CLK32[21] + eq7_22*Global.CLK32[22] + eq7_23*Global.CLK32[23] + + eq7_24*Global.CLK32[24] + eq7_25*Global.CLK32[25] + eq7_26*Global.CLK32[26] + eq7_27*Global.CLK32[27] + eq7_28*Global.CLK32[28] + eq7_29*Global.CLK32[29] + eq7_30*Global.CLK32[30] + eq7_31*Global.CLK32[31]; + pol eq8 = eq8_0*Global.CLK32[0] + eq8_1*Global.CLK32[1] + eq8_2*Global.CLK32[2] + eq8_3*Global.CLK32[3] + eq8_4*Global.CLK32[4] + eq8_5*Global.CLK32[5] + eq8_6*Global.CLK32[6] + eq8_7*Global.CLK32[7] + + eq8_8*Global.CLK32[8] + eq8_9*Global.CLK32[9] + eq8_10*Global.CLK32[10] + eq8_11*Global.CLK32[11] + eq8_12*Global.CLK32[12] + eq8_13*Global.CLK32[13] + eq8_14*Global.CLK32[14] + eq8_15*Global.CLK32[15] + + eq8_16*Global.CLK32[16] + eq8_17*Global.CLK32[17] + eq8_18*Global.CLK32[18] + eq8_19*Global.CLK32[19] + eq8_20*Global.CLK32[20] + eq8_21*Global.CLK32[21] + eq8_22*Global.CLK32[22] + eq8_23*Global.CLK32[23] + + eq8_24*Global.CLK32[24] + eq8_25*Global.CLK32[25] + eq8_26*Global.CLK32[26] + eq8_27*Global.CLK32[27] + eq8_28*Global.CLK32[28] + eq8_29*Global.CLK32[29] + eq8_30*Global.CLK32[30] + eq8_31*Global.CLK32[31]; + pol eq9 = eq9_0*Global.CLK32[0] + eq9_1*Global.CLK32[1] + eq9_2*Global.CLK32[2] + eq9_3*Global.CLK32[3] + eq9_4*Global.CLK32[4] + eq9_5*Global.CLK32[5] + eq9_6*Global.CLK32[6] + eq9_7*Global.CLK32[7] + + eq9_8*Global.CLK32[8] + eq9_9*Global.CLK32[9] + eq9_10*Global.CLK32[10] + eq9_11*Global.CLK32[11] + eq9_12*Global.CLK32[12] + eq9_13*Global.CLK32[13] + eq9_14*Global.CLK32[14] + eq9_15*Global.CLK32[15] + + eq9_16*Global.CLK32[16] + eq9_17*Global.CLK32[17] + eq9_18*Global.CLK32[18] + eq9_19*Global.CLK32[19] + eq9_20*Global.CLK32[20] + eq9_21*Global.CLK32[21] + eq9_22*Global.CLK32[22] + eq9_23*Global.CLK32[23] + + eq9_24*Global.CLK32[24] + eq9_25*Global.CLK32[25] + eq9_26*Global.CLK32[26] + eq9_27*Global.CLK32[27] + eq9_28*Global.CLK32[28] + eq9_29*Global.CLK32[29] + eq9_30*Global.CLK32[30] + eq9_31*Global.CLK32[31]; + pol eq10 = eq10_0*Global.CLK32[0] + eq10_1*Global.CLK32[1] + eq10_2*Global.CLK32[2] + eq10_3*Global.CLK32[3] + eq10_4*Global.CLK32[4] + eq10_5*Global.CLK32[5] + eq10_6*Global.CLK32[6] + eq10_7*Global.CLK32[7] + + eq10_8*Global.CLK32[8] + eq10_9*Global.CLK32[9] + eq10_10*Global.CLK32[10] + eq10_11*Global.CLK32[11] + eq10_12*Global.CLK32[12] + eq10_13*Global.CLK32[13] + eq10_14*Global.CLK32[14] + eq10_15*Global.CLK32[15] + + eq10_16*Global.CLK32[16] + eq10_17*Global.CLK32[17] + eq10_18*Global.CLK32[18] + eq10_19*Global.CLK32[19] + eq10_20*Global.CLK32[20] + eq10_21*Global.CLK32[21] + eq10_22*Global.CLK32[22] + eq10_23*Global.CLK32[23] + + eq10_24*Global.CLK32[24] + eq10_25*Global.CLK32[25] + eq10_26*Global.CLK32[26] + eq10_27*Global.CLK32[27] + eq10_28*Global.CLK32[28] + eq10_29*Global.CLK32[29] + eq10_30*Global.CLK32[30] + eq10_31*Global.CLK32[31]; + pol eq11 = eq11_0*Global.CLK32[0] + eq11_1*Global.CLK32[1] + eq11_2*Global.CLK32[2] + eq11_3*Global.CLK32[3] + eq11_4*Global.CLK32[4] + eq11_5*Global.CLK32[5] + eq11_6*Global.CLK32[6] + eq11_7*Global.CLK32[7] + + eq11_8*Global.CLK32[8] + eq11_9*Global.CLK32[9] + eq11_10*Global.CLK32[10] + eq11_11*Global.CLK32[11] + eq11_12*Global.CLK32[12] + eq11_13*Global.CLK32[13] + eq11_14*Global.CLK32[14] + eq11_15*Global.CLK32[15] + + eq11_16*Global.CLK32[16] + eq11_17*Global.CLK32[17] + eq11_18*Global.CLK32[18] + eq11_19*Global.CLK32[19] + eq11_20*Global.CLK32[20] + eq11_21*Global.CLK32[21] + eq11_22*Global.CLK32[22] + eq11_23*Global.CLK32[23] + + eq11_24*Global.CLK32[24] + eq11_25*Global.CLK32[25] + eq11_26*Global.CLK32[26] + eq11_27*Global.CLK32[27] + eq11_28*Global.CLK32[28] + eq11_29*Global.CLK32[29] + eq11_30*Global.CLK32[30] + eq11_31*Global.CLK32[31]; + pol eq12 = eq12_0*Global.CLK32[0] + eq12_1*Global.CLK32[1] + eq12_2*Global.CLK32[2] + eq12_3*Global.CLK32[3] + eq12_4*Global.CLK32[4] + eq12_5*Global.CLK32[5] + eq12_6*Global.CLK32[6] + eq12_7*Global.CLK32[7] + + eq12_8*Global.CLK32[8] + eq12_9*Global.CLK32[9] + eq12_10*Global.CLK32[10] + eq12_11*Global.CLK32[11] + eq12_12*Global.CLK32[12] + eq12_13*Global.CLK32[13] + eq12_14*Global.CLK32[14] + eq12_15*Global.CLK32[15] + + eq12_16*Global.CLK32[16] + eq12_17*Global.CLK32[17] + eq12_18*Global.CLK32[18] + eq12_19*Global.CLK32[19] + eq12_20*Global.CLK32[20] + eq12_21*Global.CLK32[21] + eq12_22*Global.CLK32[22] + eq12_23*Global.CLK32[23] + + eq12_24*Global.CLK32[24] + eq12_25*Global.CLK32[25] + eq12_26*Global.CLK32[26] + eq12_27*Global.CLK32[27] + eq12_28*Global.CLK32[28] + eq12_29*Global.CLK32[29] + eq12_30*Global.CLK32[30] + eq12_31*Global.CLK32[31]; + pol eq13 = eq13_0*Global.CLK32[0] + eq13_1*Global.CLK32[1] + eq13_2*Global.CLK32[2] + eq13_3*Global.CLK32[3] + eq13_4*Global.CLK32[4] + eq13_5*Global.CLK32[5] + eq13_6*Global.CLK32[6] + eq13_7*Global.CLK32[7] + + eq13_8*Global.CLK32[8] + eq13_9*Global.CLK32[9] + eq13_10*Global.CLK32[10] + eq13_11*Global.CLK32[11] + eq13_12*Global.CLK32[12] + eq13_13*Global.CLK32[13] + eq13_14*Global.CLK32[14] + eq13_15*Global.CLK32[15] + + eq13_16*Global.CLK32[16] + eq13_17*Global.CLK32[17] + eq13_18*Global.CLK32[18] + eq13_19*Global.CLK32[19] + eq13_20*Global.CLK32[20] + eq13_21*Global.CLK32[21] + eq13_22*Global.CLK32[22] + eq13_23*Global.CLK32[23] + + eq13_24*Global.CLK32[24] + eq13_25*Global.CLK32[25] + eq13_26*Global.CLK32[26] + eq13_27*Global.CLK32[27] + eq13_28*Global.CLK32[28] + eq13_29*Global.CLK32[29] + eq13_30*Global.CLK32[30] + eq13_31*Global.CLK32[31]; + pol eq14 = eq14_0*Global.CLK32[0] + eq14_1*Global.CLK32[1] + eq14_2*Global.CLK32[2] + eq14_3*Global.CLK32[3] + eq14_4*Global.CLK32[4] + eq14_5*Global.CLK32[5] + eq14_6*Global.CLK32[6] + eq14_7*Global.CLK32[7] + + eq14_8*Global.CLK32[8] + eq14_9*Global.CLK32[9] + eq14_10*Global.CLK32[10] + eq14_11*Global.CLK32[11] + eq14_12*Global.CLK32[12] + eq14_13*Global.CLK32[13] + eq14_14*Global.CLK32[14] + eq14_15*Global.CLK32[15] + + eq14_16*Global.CLK32[16] + eq14_17*Global.CLK32[17] + eq14_18*Global.CLK32[18] + eq14_19*Global.CLK32[19] + eq14_20*Global.CLK32[20] + eq14_21*Global.CLK32[21] + eq14_22*Global.CLK32[22] + eq14_23*Global.CLK32[23] + + eq14_24*Global.CLK32[24] + eq14_25*Global.CLK32[25] + eq14_26*Global.CLK32[26] + eq14_27*Global.CLK32[27] + eq14_28*Global.CLK32[28] + eq14_29*Global.CLK32[29] + eq14_30*Global.CLK32[30] + eq14_31*Global.CLK32[31]; + + pol commit selEq[8]; + + (selEq[0] + selEq[1] + selEq[2] + selEq[3] + selEq[4] + selEq[5] + selEq[6] + selEq[7]) * (1 - selEq[0] - selEq[1] - selEq[2] - selEq[3] - selEq[4] - selEq[5] - selEq[6] - selEq[7]) = 0; + + selEq[0]' * (1-Global.CLK32[31]) = selEq[0] * (1-Global.CLK32[31]); + selEq[1]' * (1-Global.CLK32[31]) = selEq[1] * (1-Global.CLK32[31]); + selEq[2]' * (1-Global.CLK32[31]) = selEq[2] * (1-Global.CLK32[31]); + selEq[3]' * (1-Global.CLK32[31]) = selEq[3] * (1-Global.CLK32[31]); + selEq[4]' * (1-Global.CLK32[31]) = selEq[4] * (1-Global.CLK32[31]); + selEq[5]' * (1-Global.CLK32[31]) = selEq[5] * (1-Global.CLK32[31]); + selEq[6]' * (1-Global.CLK32[31]) = selEq[6] * (1-Global.CLK32[31]); + selEq[7]' * (1-Global.CLK32[31]) = selEq[7] * (1-Global.CLK32[31]); + + + selEq[0] * (1-selEq[0]) = 0; + selEq[1] * (1-selEq[1]) = 0; + selEq[2] * (1-selEq[2]) = 0; + selEq[3] * (1-selEq[3]) = 0; + selEq[4] * (1-selEq[4]) = 0; + selEq[5] * (1-selEq[5]) = 0; + selEq[6] * (1-selEq[6]) = 0; + selEq[7] * (1-selEq[7]) = 0; + + + pol commit carry[3]; + + carry[0] * Global.CLK32[0] = 0; + carry[1] * Global.CLK32[0] = 0; + carry[2] * Global.CLK32[0] = 0; + + carry[0] in GL_SIGNED_22BITS; + carry[1] in GL_SIGNED_22BITS; + carry[2] in GL_SIGNED_22BITS; + + selEq[0] * (eq0 + carry[0]) = selEq[0] * carry[0]' * 2**16; - selEq[0] * (eq0 + carry[0]) = selEq[0] * carry[0]' * 2**16; selEq[1] * (eq1 + carry[0]) = selEq[1] * carry[0]' * 2**16; selEq[2] * (eq2 + carry[0]) = selEq[2] * carry[0]' * 2**16; - selEq[3] * (eq3 + carry[1]) = selEq[3] * carry[1]' * 2**16; - selEq[3] * (eq4 + carry[2]) = selEq[3] * carry[2]' * 2**16; - selEq[4] * (eq5 + carry[1]) = selEq[4] * carry[1]' * 2**16; - selEq[4] * (eq6 + carry[2]) = selEq[4] * carry[2]' * 2**16; - selEq[5] * (eq7 + carry[1]) = selEq[5] * carry[1]' * 2**16; - selEq[5] * (eq8 + carry[2]) = selEq[5] * carry[2]' * 2**16; - selEq[6] * (eq9 + carry[1]) = selEq[6] * carry[1]' * 2**16; - selEq[6] * (eq10 + carry[2]) = selEq[6] * carry[2]' * 2**16; + sel_secp256k1 * (eq3 + carry[1]) = sel_secp256k1 * carry[1]' * 2**16; + sel_secp256k1 * (eq4 + carry[2]) = sel_secp256k1 * carry[2]' * 2**16; + + selEq[3] * (eq5 + carry[1]) = selEq[3] * carry[1]' * 2**16; + selEq[3] * (eq6 + carry[2]) = selEq[3] * carry[2]' * 2**16; + selEq[4] * (eq7 + carry[1]) = selEq[4] * carry[1]' * 2**16; + selEq[4] * (eq8 + carry[2]) = selEq[4] * carry[2]' * 2**16; + selEq[5] * (eq9 + carry[1]) = selEq[5] * carry[1]' * 2**16; + selEq[5] * (eq10 + carry[2]) = selEq[5] * carry[2]' * 2**16; + + selEq[6] * (eq11 + carry[0]) = selEq[6] * carry[0]' * 2**16; + selEq[7] * (eq12 + carry[0]) = selEq[7] * carry[0]' * 2**16; + sel_secp256r1 * (eq13 + carry[1]) = sel_secp256r1 * carry[1]' * 2**16; + sel_secp256r1 * (eq14 + carry[2]) = sel_secp256r1 * carry[2]' * 2**16; diff --git a/pil/main.pil b/pil/main.pil index 1b2e268a..4c7c5354 100644 --- a/pil/main.pil +++ b/pil/main.pil @@ -56,11 +56,12 @@ namespace Main(%N); pol commit ind, indRR; pol commit useCTX; pol commit carry; + pol commit assumeFree; // operations pol commit mOp, mWR; pol commit sWR, sRD; - pol commit arithEq0, arithEq1, arithEq2, arithEq3, arithEq4, arithEq5; + pol commit arith, arithEq, arithSame12, arithUseE; pol commit memAlignRD, memAlignWR, memAlignWR8; pol commit hashK, hashK1, hashKLen, hashKDigest; pol commit hashP, hashP1, hashPLen, hashPDigest; @@ -82,9 +83,8 @@ namespace Main(%N); // Intermediary calculations and checks /////////// - - /////// op - pol op0 = + pol commit op0; + op0 = A0 * inA + B0 * inB + C0 * inC + @@ -110,7 +110,8 @@ namespace Main(%N); RCX * inRCX + CONST0; - pol op1 = + pol commit op1; + op1 = A1 * inA + B1 * inB + C1 * inC + @@ -121,7 +122,8 @@ namespace Main(%N); FREE1 * inFREE + CONST1; - pol op2 = + pol commit op2; + op2 = A2 * inA + B2 * inB + C2 * inC + @@ -132,7 +134,8 @@ namespace Main(%N); FREE2 * inFREE + CONST2; - pol op3 = + pol commit op3; + op3 = A3 * inA + B3 * inB + C3 * inC + @@ -143,7 +146,8 @@ namespace Main(%N); FREE3 * inFREE + CONST3; - pol op4 = + pol commit op4; + op4 = A4 * inA + B4 * inB + C4 * inC + @@ -154,7 +158,8 @@ namespace Main(%N); FREE4 * inFREE + CONST4; - pol op5 = + pol commit op5; + op5 = A5 * inA + B5 * inB + C5 * inC + @@ -165,7 +170,8 @@ namespace Main(%N); FREE5 * inFREE + CONST5; - pol op6 = + pol commit op6; + op6 = A6 * inA + B6 * inB + C6 * inC + @@ -176,7 +182,8 @@ namespace Main(%N); FREE6 * inFREE + CONST6; - pol op7 = + pol commit op7; + op7 = A7 * inA + B7 * inB + C7 * inC + @@ -450,11 +457,11 @@ namespace Main(%N); /* code generated with: - node tools/pil_pol_table/bits_compose.js "arithEq0,arithEq1,arithEq2,assert,bin,hashK,hashKDigest,hashKLen,hashP,hashPDigest,hashPLen,ind,indRR,isMem,isStack,JMP,JMPC,JMPN,memAlignRD,memAlignWR,memAlignWR8,mOp,mWR,repeat,setA,setB,setC,setCTX,setD,setE,setGAS,setHASHPOS,setPC,setRCX,setRR,setSP,setSR,sRD,sWR,useCTX,useJmpAddr,JMPZ,call,return,hashK1,hashP1,useElseAddr,arithEq3,arithEq4,arithEq5,hashS,hashSDigest,hashSLen,hashS1" -b + node tools/pil_pol_table/bits_compose.js "arith,arithSame12,arithUseE,assert,bin,hashK,hashKDigest,hashKLen,hashP,hashPDigest,hashPLen,ind,indRR,isMem,isStack,JMP,JMPC,JMPN,memAlignRD,memAlignWR,memAlignWR8,mOp,mWR,repeat,setA,setB,setC,setCTX,setD,setE,setGAS,setHASHPOS,setPC,setRCX,setRR,setSP,setSR,sRD,sWR,useCTX,useJmpAddr,JMPZ,call,return,hashK1,hashP1,useElseAddr,hashS,hashSDigest,hashSLen,hashS1,assumeFree" -b */ pol operations = - 2**0 * arithEq0 + 2**1 * arithEq1 + 2**2 * arithEq2 + 2**3 * assert + 2**0 * arith + 2**1 * arithSame12 + 2**2 * arithUseE + 2**3 * assert + 2**4 * bin + 2**5 * hashK + 2**6 * hashKDigest + 2**7 * hashKLen + 2**8 * hashP + 2**9 * hashPDigest + 2**10 * hashPLen + 2**11 * ind + 2**12 * indRR + 2**13 * isMem + 2**14 * isStack + 2**15 * JMP @@ -465,13 +472,12 @@ namespace Main(%N); + 2**32 * setPC + 2**33 * setRCX + 2**34 * setRR + 2**35 * setSP + 2**36 * setSR + 2**37 * sRD + 2**38 * sWR + 2**39 * useCTX + 2**40 * useJmpAddr + 2**41 * JMPZ + 2**42 * call + 2**43 * return - + 2**44 * hashK1 + 2**45 * hashP1 + 2**46 * useElseAddr + 2**47 * arithEq3 - + 2**48 * arithEq4 + 2**49 * arithEq5 + 2**50 * hashS + 2**51 * hashSDigest - + 2**52 * hashSLen + 2**53 * hashS1; + + 2**44 * hashK1 + 2**45 * hashP1 + 2**46 * useElseAddr + 2**47 * hashS + + 2**48 * hashSDigest + 2**49 * hashSLen + 2**50 * hashS1 + 2**51 * assumeFree; - (1 - arithEq0) * arithEq0 = 0; - (1 - arithEq1) * arithEq1 = 0; - (1 - arithEq2) * arithEq2 = 0; + (1 - arith) * arith = 0; + (1 - arithSame12) * arithSame12 = 0; + (1 - arithUseE) * arithUseE = 0; (1 - assert) * assert = 0; (1 - bin) * bin = 0; (1 - hashK) * hashK = 0; @@ -516,24 +522,21 @@ namespace Main(%N); (1 - hashK1) * hashK1 = 0; (1 - hashP1) * hashP1 = 0; (1 - useElseAddr) * useElseAddr = 0; - (1 - arithEq3) * arithEq3 = 0; - (1 - arithEq4) * arithEq4 = 0; - (1 - arithEq5) * arithEq5 = 0; (1 - hashS) * hashS = 0; (1 - hashSDigest) * hashSDigest = 0; (1 - hashSLen) * hashSLen = 0; (1 - hashS1) * hashS1 = 0; - + (1 - assumeFree) * assumeFree = 0; { CONST0, CONST1, CONST2, CONST3, CONST4, CONST5, CONST6, CONST7, inA, inB, inC, inROTL_C, inD, inE, inSR, inFREE, inFREE0, - inCTX, inSP, inPC, inGAS, inHASHPOS, inSTEP, inRR, inRCX, + inCTX, inSP, inPC, inGAS, inHASHPOS, inSTEP, inRR, inRCX, arithEq, inCntArith, inCntBinary, inCntKeccakF, inCntSha256F, inCntMemAlign, inCntPaddingPG, inCntPoseidonG, operations, offset, incStack, binOpcode, jmpAddr, elseAddr, zkPC } in { Rom.CONST0, Rom.CONST1, Rom.CONST2, Rom.CONST3, Rom.CONST4, Rom.CONST5, Rom.CONST6, Rom.CONST7, Rom.inA, Rom.inB, Rom.inC, Rom.inROTL_C, Rom.inD, Rom.inE, Rom.inSR, Rom.inFREE, Rom.inFREE0, - Rom.inCTX, Rom.inSP, Rom.inPC, Rom.inGAS, Rom.inHASHPOS, Rom.inSTEP, Rom.inRR, Rom.inRCX, + Rom.inCTX, Rom.inSP, Rom.inPC, Rom.inGAS, Rom.inHASHPOS, Rom.inSTEP, Rom.inRR, Rom.inRCX, Rom.arithEq, Rom.inCntArith, Rom.inCntBinary, Rom.inCntKeccakF, Rom.inCntSha256F, Rom.inCntMemAlign, Rom.inCntPaddingPG, Rom.inCntPoseidonG, Rom.operations, Rom.offset, Rom.incStack, Rom.binOpcode, Rom.jmpAddr, Rom.elseAddr, Rom.line }; @@ -599,61 +602,70 @@ namespace Main(%N); pol ay3_6 = Arith.y3[12] + Arith.y3[13]*2**16; pol ay3_7 = Arith.y3[14] + Arith.y3[15]*2**16; - // We group arithmetic operations by the number of inputs they have - // 1] 5 inputs (A * B + C = D * 2^256 + E) - arithEq0 { 1, 0, 0, 0, 0, 0, 0, - A0, A1, A2, A3, A4, A5, A6, A7, - B0, B1, B2, B3, B4, B5, B6, B7, - C0, C1, C2, C3, C4, C5, C6, C7, - D0, D1, D2, D3, D4, D5, D6, D7, - op0, op1, op2, op3, op4, op5, op6, op7 } is - Arith.resultEq0 { - Arith.selEq[0], Arith.selEq[1], Arith.selEq[2], Arith.selEq[3], Arith.selEq[4], Arith.selEq[5], Arith.selEq[6], - ax1_0, ax1_1, ax1_2, ax1_3, ax1_4, ax1_5, ax1_6, ax1_7, - ay1_0, ay1_1, ay1_2, ay1_3, ay1_4, ay1_5, ay1_6, ay1_7, - ax2_0, ax2_1, ax2_2, ax2_3, ax2_4, ax2_5, ax2_6, ax2_7, - ay2_0, ay2_1, ay2_2, ay2_3, ay2_4, ay2_5, ay2_6, ay2_7, - ay3_0, ay3_1, ay3_2, ay3_3, ay3_4, ay3_5, ay3_6, ay3_7 - }; - - // 2] 6 inputs (Point addition, complex multiplication, complex addition, complex subtraction) - arithEq1 + arithEq3 + arithEq4 + arithEq5 { - 0, arithEq1, 0, arithEq1, arithEq3, arithEq4, arithEq5, - A0, A1, A2, A3, A4, A5, A6, A7, - B0, B1, B2, B3, B4, B5, B6, B7, - C0, C1, C2, C3, C4, C5, C6, C7, - D0, D1, D2, D3, D4, D5, D6, D7, - E0, E1, E2, E3, E4, E5, E6, E7, - op0, op1, op2, op3, op4, op5, op6, op7 } is - Arith.resultEq1 { - Arith.selEq[0], Arith.selEq[1], Arith.selEq[2], Arith.selEq[3], Arith.selEq[4], Arith.selEq[5], Arith.selEq[6], - ax1_0, ax1_1, ax1_2, ax1_3, ax1_4, ax1_5, ax1_6, ax1_7, - ay1_0, ay1_1, ay1_2, ay1_3, ay1_4, ay1_5, ay1_6, ay1_7, - ax2_0, ax2_1, ax2_2, ax2_3, ax2_4, ax2_5, ax2_6, ax2_7, - ay2_0, ay2_1, ay2_2, ay2_3, ay2_4, ay2_5, ay2_6, ay2_7, - ax3_0, ax3_1, ax3_2, ax3_3, ax3_4, ax3_5, ax3_6, ax3_7, - ay3_0, ay3_1, ay3_2, ay3_3, ay3_4, ay3_5, ay3_6, ay3_7 - }; - - // 3] 4 inputs (Point doubling) - arithEq2 { 0, 0, 1, 1, 0, 0, 0, + // List of arithmetic equations: Conversion Table: + // EQ0: x1·y1 + x2 = y2·2²⁵⁶ + y3 A <--> x1 + // EQ1: s·(x2 - x1) = (y2 - y1) - q0 · p1 B <--> y1 + // EQ2: 2s·y1 = 3x1² - q0·p1 C <--> x2 + // EQ3: s² - x1 - x2 = x3 - q1·p1 D <--> y2 + // EQ4: s·(x1 - x3) - y1 = y3 - q2·p1 E <--> x3 + // EQ5: x1·x2 - y1·y2 = x3 - q1·p2 op <--> y3 + // EQ6: y1·x2 + x1·y2 = y3 - q2·p2 + // EQ7: x1 + x2 = x3 - q1·p2 + // EQ8: y1 + y2 = y3 - q2·p2 + // EQ9: x1 - x2 = x3 - q1·p2 + // EQ10: y1 - y2 = y3 - q2·p2 + // EQ11: s·(x2 - x1) = (y2 - y1) - q0 · p1 + // EQ12: 2s·y1 = 3x1² - q0·p1 + // EQ13: s² - x1 - x2 = x3 - q1·p1 + + arith { + arithEq, A0, A1, A2, A3, A4, A5, A6, A7, B0, B1, B2, B3, B4, B5, B6, B7, - A0, A1, A2, A3, A4, A5, A6, A7, - B0, B1, B2, B3, B4, B5, B6, B7, - E0, E1, E2, E3, E4, E5, E6, E7, + arithSame12 * (A0 - C0) + C0, // This should be A iff EQ2 or EQ9 (point doubling) + arithSame12 * (A1 - C1) + C1, + arithSame12 * (A2 - C2) + C2, + arithSame12 * (A3 - C3) + C3, + arithSame12 * (A4 - C4) + C4, + arithSame12 * (A5 - C5) + C5, + arithSame12 * (A6 - C6) + C6, + arithSame12 * (A7 - C7) + C7, + arithSame12 * (B0 - D0) + D0, // This should be B iff EQ2 or EQ9 (point doubling) + arithSame12 * (B1 - D1) + D1, + arithSame12 * (B2 - D2) + D2, + arithSame12 * (B3 - D3) + D3, + arithSame12 * (B4 - D4) + D4, + arithSame12 * (B5 - D5) + D5, + arithSame12 * (B6 - D6) + D6, + arithSame12 * (B7 - D7) + D7, + arithUseE * E0, // This must be deactivated in EQ0 (standard) + arithUseE * E1, + arithUseE * E2, + arithUseE * E3, + arithUseE * E4, + arithUseE * E5, + arithUseE * E6, + arithUseE * E7, op0, op1, op2, op3, op4, op5, op6, op7 } is - Arith.resultEq2 { - Arith.selEq[0], Arith.selEq[1], Arith.selEq[2], Arith.selEq[3], Arith.selEq[4], Arith.selEq[5], Arith.selEq[6], + Arith.resultEq { + Arith.selEq[0] + 2 * Arith.selEq[1] + 3 * Arith.selEq[2] + 4 * Arith.selEq[3] + 5 * Arith.selEq[4] + + 6 * Arith.selEq[5] + 7 * Arith.selEq[6] + 8 * Arith.selEq[7], ax1_0, ax1_1, ax1_2, ax1_3, ax1_4, ax1_5, ax1_6, ax1_7, ay1_0, ay1_1, ay1_2, ay1_3, ay1_4, ay1_5, ay1_6, ay1_7, ax2_0, ax2_1, ax2_2, ax2_3, ax2_4, ax2_5, ax2_6, ax2_7, ay2_0, ay2_1, ay2_2, ay2_3, ay2_4, ay2_5, ay2_6, ay2_7, - ax3_0, ax3_1, ax3_2, ax3_3, ax3_4, ax3_5, ax3_6, ax3_7, + ax3_0, + ax3_1, + ax3_2, + ax3_3, + ax3_4, + ax3_5, + ax3_6, + ax3_7, ay3_0, ay3_1, ay3_2, ay3_3, ay3_4, ay3_5, ay3_6, ay3_7 }; - cntArith' = cntArith*(1-Global.L1) + arithEq0 + arithEq1 + arithEq2 + arithEq3 + arithEq4 + arithEq5; + cntArith' = cntArith*(1-Global.L1) + arith; ///////// // Binary Plookpups @@ -817,8 +829,8 @@ namespace Main(%N); addr, Global.STEP, mWR, - op0, op1, op2, op3, - op4, op5, op6, op7 + assumeFree * (FREE0 - op0) + op0, assumeFree * (FREE1 - op1) + op1, assumeFree * (FREE2 - op2) + op2, assumeFree * (FREE3 - op3) + op3, + assumeFree * (FREE4 - op4) + op4, assumeFree * (FREE5 - op5) + op5, assumeFree * (FREE6 - op6) + op6, assumeFree * (FREE7 - op7) + op7 } is Mem.mOp { Mem.addr, diff --git a/pil/rom.pil b/pil/rom.pil index a81480d4..0d34eb3b 100644 --- a/pil/rom.pil +++ b/pil/rom.pil @@ -15,6 +15,7 @@ namespace Rom(%N); pol constant incStack; pol constant binOpcode; pol constant jmpAddr, elseAddr; + pol constant arithEq; pol constant line; @@ -22,10 +23,10 @@ namespace Rom(%N); /* comment genereated with: - node tools/pil_pol_table/bits_compose.js "arithEq0,arithEq1,arithEq2,assert,bin,hashK,hashKDigest,hashKLen,hashP,hashPDigest,hashPLen,ind,indRR,isMem,isStack,JMP,JMPC,JMPN,memAlignRD,memAlignWR,memAlignWR8,mOp,mWR,repeat,setA,setB,setC,setCTX,setD,setE,setGAS,setHASHPOS,setPC,setRCX,setRR,setSP,setSR,sRD,sWR,useCTX,useJmpAddr,JMPZ,call,return,hashK1,hashP1,useElseAddr,arithEq3,arithEq4,arithEq5, hashS, hashSDigest, hashSLen, hashS1" + node tools/pil_pol_table/bits_compose.js "arith,arithSame12,arithUseE,assert,bin,hashK,hashKDigest,hashKLen,hashP,hashPDigest,hashPLen,ind,indRR,isMem,isStack,JMP,JMPC,JMPN,memAlignRD,memAlignWR,memAlignWR8,mOp,mWR,repeat,setA,setB,setC,setCTX,setD,setE,setGAS,setHASHPOS,setPC,setRCX,setRR,setSP,setSR,sRD,sWR,useCTX,useJmpAddr,JMPZ,call,return,hashK1,hashP1,useElseAddr,hashS,hashSDigest,hashSLen,hashS1,assumeFree" operations = - 2**0 * arithEq0 + 2**1 * arithEq1 + 2**2 * arithEq2 + 2**3 * assert + 2**0 * arith + 2**1 * arithSame12 + 2**2 * arithUseE + 2**3 * assert + 2**4 * bin + 2**5 * hashK + 2**6 * hashKDigest + 2**7 * hashKLen + 2**8 * hashP + 2**9 * hashPDigest + 2**10 * hashPLen + 2**11 * ind + 2**12 * indRR + 2**13 * isMem + 2**14 * isStack + 2**15 * JMP @@ -36,8 +37,6 @@ namespace Rom(%N); + 2**32 * setPC + 2**33 * setRCX + 2**34 * setRR + 2**35 * setSP + 2**36 * setSR + 2**37 * sRD + 2**38 * sWR + 2**39 * useCTX + 2**40 * useJmpAddr + 2**41 * JMPZ + 2**42 * call + 2**43 * return - + 2**44 * hashK1 + 2**45 * hashP1 + 2**46 * useElseAddr + 2**47 * arithEq3 - + 2**48 * arithEq4 + 2**49 * arithEq5 + 2**50 * hashS + 2**51 * hashSDigest - + 2**52 * hashSLen + 2**53 * hashS1 - + + 2**44 * hashK1 + 2**45 * hashP1 + 2**46 * useElseAddr + 2**47 * hashS + + 2**48 * hashSDigest + 2**49 * hashSLen + 2**50 * hashS1 + 2**51 * assumeFree; */ diff --git a/src/sm/sm_arith/sm_arith.js b/src/sm/sm_arith/sm_arith.js index 331689c6..f45bcf4a 100644 --- a/src/sm/sm_arith/sm_arith.js +++ b/src/sm/sm_arith/sm_arith.js @@ -14,35 +14,108 @@ const arithEq7 = require('./sm_arith_eq7'); const arithEq8 = require('./sm_arith_eq8'); const arithEq9 = require('./sm_arith_eq9'); const arithEq10 = require('./sm_arith_eq10'); +const arithEq11 = require('./sm_arith_eq11'); +const arithEq12 = require('./sm_arith_eq12'); +const arithEq13 = require('./sm_arith_eq13'); +const arithEq14 = require('./sm_arith_eq14'); const F1Field = require("ffjavascript").F1Field; +const ARITH = 1; +const ARITH_ECADD_DIFFERENT = 2; +const ARITH_ECADD_SAME = 3; +const ARITH_BN254_MULFP2 = 4; +const ARITH_BN254_ADDFP2 = 5; +const ARITH_BN254_SUBFP2 = 6; +const ARITH_SECP256R1_ECADD_DIFFERENT = 7; +const ARITH_SECP256R1_ECADD_SAME = 8; + +const PRIME_SECP256K1_CHUNKS = [ 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, + 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFEn, 0xFFFFn, 0xFC2Fn ]; + +const PRIME_BN254_CHUNKS = [ 0x3064n, 0x4E72n, 0xE131n, 0xA029n, 0xB850n, 0x45B6n, 0x8181n, 0x585Dn, + 0x9781n, 0x6A91n, 0x6871n, 0xCA8Dn, 0x3C20n, 0x8C16n, 0xD87Cn, 0xFD47n ]; + +const PRIME_SECP256R1_CHUNKS = [ 0xFFFFn, 0xFFFFn, 0x0000n, 0x0001n, 0x0000n, 0x0000n, 0x0000n, 0x0000n, + 0x0000n, 0x0000n, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn ]; + +const PRIME_SECP256K1_INDEX = 0; +const PRIME_BN254_INDEX = 1; +const PRIME_SECP256R1_INDEX = 2; + +const PRIME_CHUNKS = [PRIME_SECP256K1_CHUNKS, PRIME_BN254_CHUNKS, PRIME_SECP256R1_CHUNKS]; +const PRIME_NAMES = ['SECP256K1', 'BN254', 'SECP256R1']; + +const EQ_INDEX_TO_CARRY_INDEX = [0, 0, 0, 1, 2, 1, 2, 1, 2, 1, 2, 0, 0, 1, 2]; + +// Field Elliptic Curve secp256k1 +const pSecp256k1 = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn; +const Fsecp256k1 = new F1Field(pSecp256k1); + +// Field Elliptic Curve secp256r1 +const aSecp256r1 = 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffcn; +const pSecp256r1 = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffffn; +const Fsecp256r1 = new F1Field(pSecp256r1); + +// Field Complex Multiplication +const pBN254 = 21888242871839275222246405745257275088696311157297823662689037894645226208583n; +const FpBN254 = new F1Field(pBN254); + + module.exports.buildConstants = async function(pols) { const N = pols.SEL_BYTE2_BIT21.length; buildByte2Bits16(pols, N); buildRange(pols, N, 'GL_SIGNED_22BITS', -(2n**22n), (2n**22n)-1n); - buildRangeSelector(pols.RANGE_SEL, N, 2 ** 16, [0xFFFF,0xFFFE,0xFFFD,0xFC2F,0xFC2E, - 0x3064,0x3063,0x4E72,0x4E71,0xE131,0xE130,0xA029,0xA028,0xB850, - 0xB84F,0x45B6,0x45B5,0x8181,0x8180,0x585D,0x585C,0x9781,0x9780, - 0x6A91,0x6A90,0x6871,0x6870,0xCA8D,0xCA8C,0x3C20,0x3C1F,0x8C16, - 0x8C15,0xD87C,0xD87B,0xFD47,0xFD46]); + buildRangeChunks(pols.RANGE_SEL, N); } -function buildRangeSelector(pol, N, cycle, maxValues, paddingValue = 0n) { - let i = 0; - let valueIndex = 0; - while (i < N) { - const from = i; - while ((i - from) <= maxValues[valueIndex] && i < N) { - pol[i] = BigInt(valueIndex); - ++i; +function fillRange(pol, irow, rangeSel, from, to, label = '') { + if (from > to) { + return irow; + } + const fromRowH = irow.toString(16).padStart(8,'0').toUpperCase(); + for (let j = from; j <= to; ++j) { + if ((irow & 0xFFFF) != j) { + throw new Error(`Inconsistent value ${j} with byte2 ${irow & 0xFFFF} on row ${irow} at ${label}`); } - while ((i - from) < cycle && i < N) { - pol[i] = paddingValue; - ++i; + pol[irow++] = rangeSel; + } + const fromH = from.toString(16).padStart(4,'0').toUpperCase(); + const toH = to.toString(16).padStart(4,'0').toUpperCase(); + const toRowH = (irow-1).toString(16).padStart(8,'0').toUpperCase(); + console.log(`RANGE ${rangeSel.toString().padStart(3)} [0x${fromH},0x${toH}] [${from.toString().padStart(5)},${to.toString().padStart(5)}] #0x${fromRowH}:0x${toRowH} ${label}`); + return irow; +} +function buildRangeChunks(pol, N) { + let rangeSel = 0n; + const limit = 2n**16n - 1n; + let irow = 0; + + // 0 - 15 rangeSel used for "stantard" ranges [0,0xFFFF] + for (let ichunk = 0; ichunk < 16; ++ichunk) { + irow = fillRange(pol, irow, rangeSel++, 0, limit, 'FULL'); + } + + for (let iprime = 0; iprime < PRIME_CHUNKS.length; ++iprime) { + const prime = PRIME_CHUNKS[iprime]; + const name = PRIME_NAMES[iprime]; + // two loops by prime, first with value and after that one with value - 1, + // to be used when flag "chunkLtPrime" is set. + for (let i = 0; i < 2; i++) { + for (let ichunk = 0; ichunk < 16; ++ichunk) { + let chunkValue = prime[ichunk] - BigInt(i); + // values inside the range use identifier rangeSel + const label = `${name}[${ichunk}] = 0x${prime[ichunk].toString(16).toUpperCase().padStart(4, '0')}` + irow = fillRange(pol, irow, rangeSel++, 0n, chunkValue, `${label} (allowed values${i?' for LT':''})`); + // values outside the range use identifier 0, that it's for the full range + irow = fillRange(pol, irow, 0n, chunkValue + 1n, limit, ''); + } } - valueIndex = valueIndex < maxValues.length ? valueIndex + 1: 0; + } + while (irow < N) { + pol[irow] = 0n; + ++irow; } } @@ -68,13 +141,6 @@ function buildByte2Bits16(pols, N) { } } -function buildBitsRange(pols, N, name, bits) { - let moduleBase = (2 ** bits); - for (let i = 0; i < N; i++) { - pols[name][i] = BigInt(i % moduleBase); - } -} - function buildRange(pols, N, name, fromValue, toValue, steps = 1) { let value = fromValue; let csteps = steps; @@ -89,17 +155,121 @@ function buildRange(pols, N, name, fromValue, toValue, steps = 1) { } } +function getArithInfo(arithEq) { + switch (arithEq) { + case ARITH: + return { + selEq: [1n, 0n, 0n, 0n, 0n, 0n, 0n, 0n], + eqIndexes: [0], + primeIndex: false, + checkAliasFree: false, + checkDifferent: false, + prime: false, + fp: false, + name: 'ARITH', + curve: '' + } + + case ARITH_ECADD_DIFFERENT: + return { + selEq: [0n, 1n, 0n, 0n, 0n, 0n, 0n, 0n], + eqIndexes: [1,3,4], // s.diff, x3, y3 + primeIndex: PRIME_SECP256K1_INDEX, + checkAliasFree: true, + checkDifferent: true, + prime: pSecp256k1, + fp: Fsecp256k1, + name: 'ARITH_ECADD_DIFFERENT', + curve: 'SECP256K1', + } + + case ARITH_ECADD_SAME: + return { + selEq: [0n, 0n, 1n, 0n, 0n, 0n, 0n, 0n], + eqIndexes: [2,3,4], // s.diff, x3, y3 + primeIndex: PRIME_SECP256K1_INDEX, + checkAliasFree: true, + checkDifferent: false, + prime: pSecp256k1, + fp: Fsecp256k1, + name: 'ARITH_ECADD_SAME', + curve: 'SECP256K1', + } + + case ARITH_BN254_MULFP2: + return { + selEq: [0n, 0n, 0n, 1n, 0n, 0n, 0n, 0n], + eqIndexes: [5, 6], // x3, y3 + primeIndex: PRIME_BN254_INDEX, + checkAliasFree: true, + checkDifferent: false, + prime: pBN254, + fp: FpBN254, + name: 'ARITH_BN254_MULFP2', + curve: 'BN254', + } + + case ARITH_BN254_ADDFP2: + return { + selEq: [0n, 0n, 0n, 0n, 1n, 0n, 0n, 0n], + eqIndexes: [7, 8], // x3, y3 + primeIndex: PRIME_BN254_INDEX, + checkAliasFree: true, + checkDifferent: false, + prime: pBN254, + fp: FpBN254, + name: 'ARITH_BN254_ADDFP2', + curve: 'BN254', + } + + case ARITH_BN254_SUBFP2: + return { + selEq: [0n, 0n, 0n, 0n, 0n, 1n, 0n, 0n], + eqIndexes: [9, 10], // x3, y3 + primeIndex: PRIME_BN254_INDEX, + checkAliasFree: true, + checkDifferent: false, + prime: pBN254, + fp: FpBN254, + name: 'ARITH_BN254_SUBFP2', + curve: 'BN254', + } + + case ARITH_SECP256R1_ECADD_DIFFERENT: + return { + selEq: [0n, 0n, 0n, 0n, 0n, 0n, 1n, 0n], + eqIndexes: [11,13,14], // s.diff, x3, y3 + primeIndex: PRIME_SECP256R1_INDEX, + checkAliasFree: true, + checkDifferent: true, + prime: pSecp256r1, + fp: Fsecp256r1, + name: 'ARITH_SECP256R1_ECADD_DIFFERENT', + curve: 'SECP256R1', + } + + case ARITH_SECP256R1_ECADD_SAME: + return { + selEq: [0n, 0n, 0n, 0n, 0n, 0n, 0n, 1n], + eqIndexes: [12,13,14], // s.diff, x3, y3 + primeIndex: PRIME_SECP256R1_INDEX, + checkAliasFree: true, + checkDifferent: false, + prime: pSecp256r1, + a: aSecp256r1, + fp: Fsecp256r1, + name: 'ARITH_SECP256R1_ECADD_SAME', + curve: 'SECP256R1', + } + + default: + throw new Error(`Unknown arithEq value ${arithEq}`); + } +} module.exports.execute = async function(pols, input, continueOnError = false) { // Get N from definitions const N = pols.x1[0].length; - // Field Elliptic Curve - let pFec = 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn; - const Fec = new F1Field(pFec); - - // Field Complex Multiplication - let pBN254 = 21888242871839275222246405745257275088696311157297823662689037894645226208583n; - const FpBN254 = new F1Field(pBN254); const Fr = new F1Field(0xffffffff00000001n); @@ -108,7 +278,7 @@ module.exports.execute = async function(pols, input, continueOnError = false) { inputFeaTo16bits(input, N, ['x1', 'y1', 'x2', 'y2', 'x3', 'y3']); let eqCalculates = [arithEq0.calculate, arithEq1.calculate, arithEq2.calculate, arithEq3.calculate, arithEq4.calculate, arithEq5.calculate, arithEq6.calculate, arithEq7.calculate, arithEq8.calculate, arithEq9.calculate, - arithEq10.calculate]; + arithEq10.calculate, arithEq11.calculate, arithEq12.calculate, arithEq13.calculate, arithEq14.calculate]; // Initialization for (let i = 0; i < N; i++) { @@ -126,9 +296,7 @@ module.exports.execute = async function(pols, input, continueOnError = false) { if (j < pols.carry.length) pols.carry[j][i] = 0n; if (j < pols.selEq.length) pols.selEq[j][i] = 0n; } - pols.resultEq0[i] = 0n; - pols.resultEq1[i] = 0n; - pols.resultEq2[i] = 0n; + pols.resultEq[i] = 0n; pols.xDeltaChunkInverse[i] = 0n; pols.xAreDifferent[i] = 0n; @@ -148,6 +316,11 @@ module.exports.execute = async function(pols, input, continueOnError = false) { let x3 = fea2scalar(Fr, input[i]["x3"]); let y3 = fea2scalar(Fr, input[i]["y3"]); + const arithInfo = getArithInfo(input[i].arithEq); + const Fec = arithInfo.fp; + const pFec = arithInfo.prime; + + // In the following, recall that we can only work with unsiged integers of 256 bits. // Therefore, as the quotient needs to be represented in our VM, we need to know // the worst negative case and add an offset so that the resulting name is never negative. @@ -156,10 +329,14 @@ module.exports.execute = async function(pols, input, continueOnError = false) { // that the added offset is the lowest. // Note2: x1,x2,y1,y2 can be assumed to be alias free, as this is the pre condition in the Arith SM. // I.e, x1,x2,y1,y2 ∈ [0, 2^256-1]. - if (input[i].selEq1) { + + let calculateS = false; + + if (input[i].arithEq == ARITH_ECADD_DIFFERENT || input[i].arithEq == ARITH_SECP256R1_ECADD_DIFFERENT) { + calculateS = true; let pq0; if (Fec.eq(x2, x1) && !continueOnError) { - throw new Error(`For input ${i}, x1 and x2 are equals, but ADD_EC_DIFFERENT is called`); + throw new Error(`For input ${i}, x1 and x2 are equals, but ${arithInfo.name} is called`); } else { if (typeof input[i]["s"] !== 'undefined') { s = input[i]["s"]; @@ -184,7 +361,8 @@ module.exports.execute = async function(pols, input, continueOnError = false) { nNegErrors ); } - else if (input[i].selEq2) { + else if (input[i].arithEq == ARITH_ECADD_SAME) { + calculateS = true; if (typeof input[i]["s"] !== 'undefined') { s = input[i]["s"]; } else { @@ -208,12 +386,38 @@ module.exports.execute = async function(pols, input, continueOnError = false) { nNegErrors ); } + else if (input[i].arithEq == ARITH_SECP256R1_ECADD_SAME) { + calculateS = true; + const a = arithInfo.a; + if (typeof input[i]["s"] !== 'undefined') { + s = input[i]["s"]; + } else { + s = Fec.div(Fec.add(Fec.mul(3n, Fec.mul(x1, x1)), a), Fec.add(y1, y1)); + } + let pq0 = s * 2n * y1 - 3n * x1 * x1 - a; // Worst values are {-3*(2^256-1)**2 - a,2*(2^256-1)**2 - a} + // with |-3*(2^256-1)**2| > 2*(2^256-1)**2 + q0 = -(pq0/pFec); + nDivErrors = errorHandler( + (pq0 + pFec*q0) != 0n, + `For input ${i}, with the calculated q0 the residual is not zero (same point)`, + continueOnError, + nDivErrors + ); + // offset + q0 += 2n ** 258n; + nNegErrors = errorHandler( + q0 < 0n, + `For input ${i}, the q0 with offset is negative (same point). Actual value: ${q0}, previous value: ${q0 - 2n ** 258n}`, + continueOnError, + nNegErrors + ); + } else { s = 0n; q0 = 0n; } - if (input[i].selEq3) { + if (calculateS) { let pq1 = s * s - x1 - x2 - x3; // Worst values are {-3*(2^256-1),(2^256-1)**2} // with (2^256-1)**2 > |-3*(2^256-1)| q1 = pq1/pFec; @@ -253,7 +457,7 @@ module.exports.execute = async function(pols, input, continueOnError = false) { nNegErrors ); } - else if (input[i].selEq4) { + else if (input[i].arithEq === ARITH_BN254_MULFP2) { let pq1 = x1 * x2 - y1 * y2 - x3; // Worst values are {-2^256*(2^256-1),(2^256-1)**2} // with |-2^256*(2^256-1)| > (2^256-1)**2 q1 = -(pq1/pBN254); @@ -290,7 +494,7 @@ module.exports.execute = async function(pols, input, continueOnError = false) { nNegErrors ); } - else if (input[i].selEq5) { + else if (input[i].arithEq === ARITH_BN254_ADDFP2) { let pq1 = x1 + x2 - x3; // Worst values are {-(2^256-1),2*(2^256-1)} // with 2*(2^256-1) > |-(2^256-1)| q1 = pq1/pBN254; @@ -327,7 +531,7 @@ module.exports.execute = async function(pols, input, continueOnError = false) { nNegErrors ); } - else if (input[i].selEq6) { + else if (input[i].arithEq == ARITH_BN254_SUBFP2) { let pq1 = x1 - x2 - x3; // Worst values are {-2*(2^256-1),(2^256-1)} // with |-2*(2^256-1)| > (2^256-1) q1 = -(pq1/pBN254); @@ -380,14 +584,11 @@ module.exports.execute = async function(pols, input, continueOnError = false) { throw new Error(`There are ${nDivErrors} divisions errors`); } - const chunksPrimeSecp256k1 = [ 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, - 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFFn, 0xFFFEn, 0xFFFFn, 0xFC2Fn ]; - const chunksPrimeBN254 = [ 0x3064n, 0x4E72n, 0xE131n, 0xA029n, 0xB850n, 0x45B6n, 0x8181n, 0x585Dn, - 0x9781n, 0x6A91n, 0x6871n, 0xCA8Dn, 0x3C20n, 0x8C16n, 0xD87Cn, 0xFD47n ]; for (let i = 0; i < input.length; i++) { let offset = i * 32; let xAreDifferent = false; let valueLtPrime; + const arithInfo = getArithInfo(input[i].arithEq); for (let step = 0; step < 32; ++step) { const index = offset + step; const nextIndex = (index + 1) % N; @@ -406,17 +607,13 @@ module.exports.execute = async function(pols, input, continueOnError = false) { pols.q0[j][index] = BigInt(input[i]["_q0"][j]) pols.q1[j][index] = BigInt(input[i]["_q1"][j]) pols.q2[j][index] = BigInt(input[i]["_q2"][j]) + if (j < arithInfo.selEq.length) { + pols.selEq[j][index] = BigInt(arithInfo.selEq[j]); + } } - pols.selEq[0][index] = BigInt(input[i].selEq0); - pols.selEq[1][index] = BigInt(input[i].selEq1); - pols.selEq[2][index] = BigInt(input[i].selEq2); - pols.selEq[3][index] = BigInt(input[i].selEq3); - pols.selEq[4][index] = BigInt(input[i].selEq4); - pols.selEq[5][index] = BigInt(input[i].selEq5); - pols.selEq[6][index] = BigInt(input[i].selEq6); // selEq1 (addition different points) is select need to check that points are diferent - if (pols.selEq[1][index] && step < 16) { + if (arithInfo.checkDifferent && step < 16) { if (xAreDifferent === false) { const delta = Fr.sub(pols.x2[step][index], pols.x1[step][index]); pols.xDeltaChunkInverse[index] = Fr.isZero(delta) ? 0n : Fr.inv(delta); @@ -425,52 +622,31 @@ module.exports.execute = async function(pols, input, continueOnError = false) { pols.xAreDifferent[nextIndex] = xAreDifferent ? 1n : 0n; } - // If either selEq3,selEq4,selEq5,selEq6 is selected, we need to ensure that x3, y3 is alias free. - // Recall that selEq3 work over the Secp256k1 curve, and selEq4,selEq5,selEq6 work over the BN254 curve. - if (pols.selEq[3][index] || pols.selEq[4][index] || pols.selEq[5][index] || pols.selEq[6][index]) { + // If either checkAliasFree is selected, we need to ensure that x3, y3 is alias free + if (arithInfo.checkAliasFree) { const chunkValue = step < 16 ? pols.x3[15 - step16][offset] : pols.y3[15 - step16][offset]; - const chunkPrime = pols.selEq[3][index] ? chunksPrimeSecp256k1[step16] : chunksPrimeBN254[step16]; + const chunkPrime = PRIME_CHUNKS[arithInfo.primeIndex][step16]; const chunkLtPrime = valueLtPrime ? 0n : Fr.lt(chunkValue, chunkPrime); valueLtPrime = valueLtPrime || chunkLtPrime; pols.chunkLtPrime[index] = chunkLtPrime ? 1n : 0n; pols.valueLtPrime[nextIndex] = valueLtPrime ? 1n : 0n; } - - pols.selEq[0][offset + step] = BigInt(input[i].selEq0); - pols.selEq[1][offset + step] = BigInt(input[i].selEq1); - pols.selEq[2][offset + step] = BigInt(input[i].selEq2); - pols.selEq[3][offset + step] = BigInt(input[i].selEq3); - pols.selEq[4][offset + step] = BigInt(input[i].selEq4); - pols.selEq[5][offset + step] = BigInt(input[i].selEq5); - pols.selEq[6][offset + step] = BigInt(input[i].selEq6); } let carry = [0n, 0n, 0n]; - const eqIndexToCarryIndex = [0, 0, 0, 1, 2, 1, 2, 1, 2, 1, 2]; - let eq = [0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n] - - let eqIndexes = []; - if (pols.selEq[0][offset]) eqIndexes.push(0); - if (pols.selEq[1][offset]) eqIndexes.push(1); - if (pols.selEq[2][offset]) eqIndexes.push(2); - if (pols.selEq[3][offset]) eqIndexes = eqIndexes.concat([3, 4]); - if (pols.selEq[4][offset]) eqIndexes = eqIndexes.concat([5, 6]); - if (pols.selEq[5][offset]) eqIndexes = eqIndexes.concat([7, 8]); - if (pols.selEq[6][offset]) eqIndexes = eqIndexes.concat([9, 10]); + let eq = [0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n, 0n]; for (let step = 0; step < 32; ++step) { - eqIndexes.forEach((eqIndex) => { - let carryIndex = eqIndexToCarryIndex[eqIndex]; + arithInfo.eqIndexes.forEach((eqIndex) => { + let carryIndex = EQ_INDEX_TO_CARRY_INDEX[eqIndex]; eq[eqIndex] = eqCalculates[eqIndex](pols, step, offset); pols.carry[carryIndex][offset + step] = Fr.e(carry[carryIndex]); if ((eq[eqIndex] + carry[carryIndex]) % (2n ** 16n) !== 0n && !continueOnError) { - throw new Error(`Equation ${eqIndex}:${eq[eqIndex]} and carry ${carryIndex}:${carry[carryIndex]} do not sum 0 mod 2¹⁶.`); + throw new Error(`Equation ${eqIndex}:${eq[eqIndex]} and carry ${carryIndex}:${carry[carryIndex]} do not sum 0 mod 2¹⁶ (step ${step}).`); } carry[carryIndex] = (eq[eqIndex] + carry[carryIndex]) / (2n ** 16n); }); } - pols.resultEq0[offset + 31] = pols.selEq[0][offset] ? 1n : 0n; - pols.resultEq1[offset + 31] = ((pols.selEq[1][offset] && pols.selEq[3][offset]) || pols.selEq[4][offset] || pols.selEq[5][offset] || pols.selEq[6][offset]) ? 1n : 0n; - pols.resultEq2[offset + 31] = (pols.selEq[2][offset] && pols.selEq[3][offset]) ? 1n : 0n; + pols.resultEq[offset + 31] = 1n; } } diff --git a/src/sm/sm_arith/sm_arith_eq11.js b/src/sm/sm_arith/sm_arith_eq11.js new file mode 100644 index 00000000..e82f9dd3 --- /dev/null +++ b/src/sm/sm_arith/sm_arith_eq11.js @@ -0,0 +1,363 @@ +/* +* code generated with arith_eq_gen.js +* equation: s*x2-s*x1-y2+y1-p*q0+p*offset +* +* p=0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff +* offset=0x20000000000000000000000000000000000000000000000000000000000000000 +*/ + +module.exports.calculate = function (p, step, _o) +{ + switch(step) { + case 0: return ( + (p.s[0][_o] * p.x2[0][_o] - p.s[0][_o] * p.x1[0][_o] - 0xffffn * p.q0[0][_o] ) + - p.y2[0][_o] + p.y1[0][_o] ); + + case 1: return ( + (p.s[0][_o] * p.x2[1][_o] - p.s[0][_o] * p.x1[1][_o] - 0xffffn * p.q0[1][_o] ) + + (p.s[1][_o] * p.x2[0][_o] - p.s[1][_o] * p.x1[0][_o] - 0xffffn * p.q0[0][_o] ) + - p.y2[1][_o] + p.y1[1][_o] ); + + case 2: return ( + (p.s[0][_o] * p.x2[2][_o] - p.s[0][_o] * p.x1[2][_o] - 0xffffn * p.q0[2][_o] ) + + (p.s[1][_o] * p.x2[1][_o] - p.s[1][_o] * p.x1[1][_o] - 0xffffn * p.q0[1][_o] ) + + (p.s[2][_o] * p.x2[0][_o] - p.s[2][_o] * p.x1[0][_o] - 0xffffn * p.q0[0][_o] ) + - p.y2[2][_o] + p.y1[2][_o] ); + + case 3: return ( + (p.s[0][_o] * p.x2[3][_o] - p.s[0][_o] * p.x1[3][_o] - 0xffffn * p.q0[3][_o] ) + + (p.s[1][_o] * p.x2[2][_o] - p.s[1][_o] * p.x1[2][_o] - 0xffffn * p.q0[2][_o] ) + + (p.s[2][_o] * p.x2[1][_o] - p.s[2][_o] * p.x1[1][_o] - 0xffffn * p.q0[1][_o] ) + + (p.s[3][_o] * p.x2[0][_o] - p.s[3][_o] * p.x1[0][_o] - 0xffffn * p.q0[0][_o] ) + - p.y2[3][_o] + p.y1[3][_o] ); + + case 4: return ( + (p.s[0][_o] * p.x2[4][_o] - p.s[0][_o] * p.x1[4][_o] - 0xffffn * p.q0[4][_o] ) + + (p.s[1][_o] * p.x2[3][_o] - p.s[1][_o] * p.x1[3][_o] - 0xffffn * p.q0[3][_o] ) + + (p.s[2][_o] * p.x2[2][_o] - p.s[2][_o] * p.x1[2][_o] - 0xffffn * p.q0[2][_o] ) + + (p.s[3][_o] * p.x2[1][_o] - p.s[3][_o] * p.x1[1][_o] - 0xffffn * p.q0[1][_o] ) + + (p.s[4][_o] * p.x2[0][_o] - p.s[4][_o] * p.x1[0][_o] - 0xffffn * p.q0[0][_o] ) + - p.y2[4][_o] + p.y1[4][_o] ); + + case 5: return ( + (p.s[0][_o] * p.x2[5][_o] - p.s[0][_o] * p.x1[5][_o] - 0xffffn * p.q0[5][_o] ) + + (p.s[1][_o] * p.x2[4][_o] - p.s[1][_o] * p.x1[4][_o] - 0xffffn * p.q0[4][_o] ) + + (p.s[2][_o] * p.x2[3][_o] - p.s[2][_o] * p.x1[3][_o] - 0xffffn * p.q0[3][_o] ) + + (p.s[3][_o] * p.x2[2][_o] - p.s[3][_o] * p.x1[2][_o] - 0xffffn * p.q0[2][_o] ) + + (p.s[4][_o] * p.x2[1][_o] - p.s[4][_o] * p.x1[1][_o] - 0xffffn * p.q0[1][_o] ) + + (p.s[5][_o] * p.x2[0][_o] - p.s[5][_o] * p.x1[0][_o] - 0xffffn * p.q0[0][_o] ) + - p.y2[5][_o] + p.y1[5][_o] ); + + case 6: return ( + (p.s[0][_o] * p.x2[6][_o] - p.s[0][_o] * p.x1[6][_o] - 0xffffn * p.q0[6][_o] ) + + (p.s[1][_o] * p.x2[5][_o] - p.s[1][_o] * p.x1[5][_o] - 0xffffn * p.q0[5][_o] ) + + (p.s[2][_o] * p.x2[4][_o] - p.s[2][_o] * p.x1[4][_o] - 0xffffn * p.q0[4][_o] ) + + (p.s[3][_o] * p.x2[3][_o] - p.s[3][_o] * p.x1[3][_o] - 0xffffn * p.q0[3][_o] ) + + (p.s[4][_o] * p.x2[2][_o] - p.s[4][_o] * p.x1[2][_o] - 0xffffn * p.q0[2][_o] ) + + (p.s[5][_o] * p.x2[1][_o] - p.s[5][_o] * p.x1[1][_o] - 0xffffn * p.q0[1][_o] ) + + (p.s[6][_o] * p.x2[0][_o] - p.s[6][_o] * p.x1[0][_o] ) + - p.y2[6][_o] + p.y1[6][_o] ); + + case 7: return ( + (p.s[0][_o] * p.x2[7][_o] - p.s[0][_o] * p.x1[7][_o] - 0xffffn * p.q0[7][_o] ) + + (p.s[1][_o] * p.x2[6][_o] - p.s[1][_o] * p.x1[6][_o] - 0xffffn * p.q0[6][_o] ) + + (p.s[2][_o] * p.x2[5][_o] - p.s[2][_o] * p.x1[5][_o] - 0xffffn * p.q0[5][_o] ) + + (p.s[3][_o] * p.x2[4][_o] - p.s[3][_o] * p.x1[4][_o] - 0xffffn * p.q0[4][_o] ) + + (p.s[4][_o] * p.x2[3][_o] - p.s[4][_o] * p.x1[3][_o] - 0xffffn * p.q0[3][_o] ) + + (p.s[5][_o] * p.x2[2][_o] - p.s[5][_o] * p.x1[2][_o] - 0xffffn * p.q0[2][_o] ) + + (p.s[6][_o] * p.x2[1][_o] - p.s[6][_o] * p.x1[1][_o] ) + + (p.s[7][_o] * p.x2[0][_o] - p.s[7][_o] * p.x1[0][_o] ) + - p.y2[7][_o] + p.y1[7][_o] ); + + case 8: return ( + (p.s[0][_o] * p.x2[8][_o] - p.s[0][_o] * p.x1[8][_o] - 0xffffn * p.q0[8][_o] ) + + (p.s[1][_o] * p.x2[7][_o] - p.s[1][_o] * p.x1[7][_o] - 0xffffn * p.q0[7][_o] ) + + (p.s[2][_o] * p.x2[6][_o] - p.s[2][_o] * p.x1[6][_o] - 0xffffn * p.q0[6][_o] ) + + (p.s[3][_o] * p.x2[5][_o] - p.s[3][_o] * p.x1[5][_o] - 0xffffn * p.q0[5][_o] ) + + (p.s[4][_o] * p.x2[4][_o] - p.s[4][_o] * p.x1[4][_o] - 0xffffn * p.q0[4][_o] ) + + (p.s[5][_o] * p.x2[3][_o] - p.s[5][_o] * p.x1[3][_o] - 0xffffn * p.q0[3][_o] ) + + (p.s[6][_o] * p.x2[2][_o] - p.s[6][_o] * p.x1[2][_o] ) + + (p.s[7][_o] * p.x2[1][_o] - p.s[7][_o] * p.x1[1][_o] ) + + (p.s[8][_o] * p.x2[0][_o] - p.s[8][_o] * p.x1[0][_o] ) + - p.y2[8][_o] + p.y1[8][_o] ); + + case 9: return ( + (p.s[0][_o] * p.x2[9][_o] - p.s[0][_o] * p.x1[9][_o] - 0xffffn * p.q0[9][_o] ) + + (p.s[1][_o] * p.x2[8][_o] - p.s[1][_o] * p.x1[8][_o] - 0xffffn * p.q0[8][_o] ) + + (p.s[2][_o] * p.x2[7][_o] - p.s[2][_o] * p.x1[7][_o] - 0xffffn * p.q0[7][_o] ) + + (p.s[3][_o] * p.x2[6][_o] - p.s[3][_o] * p.x1[6][_o] - 0xffffn * p.q0[6][_o] ) + + (p.s[4][_o] * p.x2[5][_o] - p.s[4][_o] * p.x1[5][_o] - 0xffffn * p.q0[5][_o] ) + + (p.s[5][_o] * p.x2[4][_o] - p.s[5][_o] * p.x1[4][_o] - 0xffffn * p.q0[4][_o] ) + + (p.s[6][_o] * p.x2[3][_o] - p.s[6][_o] * p.x1[3][_o] ) + + (p.s[7][_o] * p.x2[2][_o] - p.s[7][_o] * p.x1[2][_o] ) + + (p.s[8][_o] * p.x2[1][_o] - p.s[8][_o] * p.x1[1][_o] ) + + (p.s[9][_o] * p.x2[0][_o] - p.s[9][_o] * p.x1[0][_o] ) + - p.y2[9][_o] + p.y1[9][_o] ); + + case 10: return ( + (p.s[0][_o] * p.x2[10][_o] - p.s[0][_o] * p.x1[10][_o] - 0xffffn * p.q0[10][_o]) + + (p.s[1][_o] * p.x2[9][_o] - p.s[1][_o] * p.x1[9][_o] - 0xffffn * p.q0[9][_o] ) + + (p.s[2][_o] * p.x2[8][_o] - p.s[2][_o] * p.x1[8][_o] - 0xffffn * p.q0[8][_o] ) + + (p.s[3][_o] * p.x2[7][_o] - p.s[3][_o] * p.x1[7][_o] - 0xffffn * p.q0[7][_o] ) + + (p.s[4][_o] * p.x2[6][_o] - p.s[4][_o] * p.x1[6][_o] - 0xffffn * p.q0[6][_o] ) + + (p.s[5][_o] * p.x2[5][_o] - p.s[5][_o] * p.x1[5][_o] - 0xffffn * p.q0[5][_o] ) + + (p.s[6][_o] * p.x2[4][_o] - p.s[6][_o] * p.x1[4][_o] ) + + (p.s[7][_o] * p.x2[3][_o] - p.s[7][_o] * p.x1[3][_o] ) + + (p.s[8][_o] * p.x2[2][_o] - p.s[8][_o] * p.x1[2][_o] ) + + (p.s[9][_o] * p.x2[1][_o] - p.s[9][_o] * p.x1[1][_o] ) + + (p.s[10][_o] * p.x2[0][_o] - p.s[10][_o] * p.x1[0][_o] ) + - p.y2[10][_o] + p.y1[10][_o]); + + case 11: return ( + (p.s[0][_o] * p.x2[11][_o] - p.s[0][_o] * p.x1[11][_o] - 0xffffn * p.q0[11][_o]) + + (p.s[1][_o] * p.x2[10][_o] - p.s[1][_o] * p.x1[10][_o] - 0xffffn * p.q0[10][_o]) + + (p.s[2][_o] * p.x2[9][_o] - p.s[2][_o] * p.x1[9][_o] - 0xffffn * p.q0[9][_o] ) + + (p.s[3][_o] * p.x2[8][_o] - p.s[3][_o] * p.x1[8][_o] - 0xffffn * p.q0[8][_o] ) + + (p.s[4][_o] * p.x2[7][_o] - p.s[4][_o] * p.x1[7][_o] - 0xffffn * p.q0[7][_o] ) + + (p.s[5][_o] * p.x2[6][_o] - p.s[5][_o] * p.x1[6][_o] - 0xffffn * p.q0[6][_o] ) + + (p.s[6][_o] * p.x2[5][_o] - p.s[6][_o] * p.x1[5][_o] ) + + (p.s[7][_o] * p.x2[4][_o] - p.s[7][_o] * p.x1[4][_o] ) + + (p.s[8][_o] * p.x2[3][_o] - p.s[8][_o] * p.x1[3][_o] ) + + (p.s[9][_o] * p.x2[2][_o] - p.s[9][_o] * p.x1[2][_o] ) + + (p.s[10][_o] * p.x2[1][_o] - p.s[10][_o] * p.x1[1][_o] ) + + (p.s[11][_o] * p.x2[0][_o] - p.s[11][_o] * p.x1[0][_o] ) + - p.y2[11][_o] + p.y1[11][_o]); + + case 12: return ( + (p.s[0][_o] * p.x2[12][_o] - p.s[0][_o] * p.x1[12][_o] - 0xffffn * p.q0[12][_o]) + + (p.s[1][_o] * p.x2[11][_o] - p.s[1][_o] * p.x1[11][_o] - 0xffffn * p.q0[11][_o]) + + (p.s[2][_o] * p.x2[10][_o] - p.s[2][_o] * p.x1[10][_o] - 0xffffn * p.q0[10][_o]) + + (p.s[3][_o] * p.x2[9][_o] - p.s[3][_o] * p.x1[9][_o] - 0xffffn * p.q0[9][_o] ) + + (p.s[4][_o] * p.x2[8][_o] - p.s[4][_o] * p.x1[8][_o] - 0xffffn * p.q0[8][_o] ) + + (p.s[5][_o] * p.x2[7][_o] - p.s[5][_o] * p.x1[7][_o] - 0xffffn * p.q0[7][_o] ) + + (p.s[6][_o] * p.x2[6][_o] - p.s[6][_o] * p.x1[6][_o] ) + + (p.s[7][_o] * p.x2[5][_o] - p.s[7][_o] * p.x1[5][_o] ) + + (p.s[8][_o] * p.x2[4][_o] - p.s[8][_o] * p.x1[4][_o] ) + + (p.s[9][_o] * p.x2[3][_o] - p.s[9][_o] * p.x1[3][_o] ) + + (p.s[10][_o] * p.x2[2][_o] - p.s[10][_o] * p.x1[2][_o] ) + + (p.s[11][_o] * p.x2[1][_o] - p.s[11][_o] * p.x1[1][_o] ) + + (p.s[12][_o] * p.x2[0][_o] - p.s[12][_o] * p.x1[0][_o] ) + - p.q0[0][_o] - p.y2[12][_o] + p.y1[12][_o]); + + case 13: return ( + (p.s[0][_o] * p.x2[13][_o] - p.s[0][_o] * p.x1[13][_o] - 0xffffn * p.q0[13][_o]) + + (p.s[1][_o] * p.x2[12][_o] - p.s[1][_o] * p.x1[12][_o] - 0xffffn * p.q0[12][_o]) + + (p.s[2][_o] * p.x2[11][_o] - p.s[2][_o] * p.x1[11][_o] - 0xffffn * p.q0[11][_o]) + + (p.s[3][_o] * p.x2[10][_o] - p.s[3][_o] * p.x1[10][_o] - 0xffffn * p.q0[10][_o]) + + (p.s[4][_o] * p.x2[9][_o] - p.s[4][_o] * p.x1[9][_o] - 0xffffn * p.q0[9][_o] ) + + (p.s[5][_o] * p.x2[8][_o] - p.s[5][_o] * p.x1[8][_o] - 0xffffn * p.q0[8][_o] ) + + (p.s[6][_o] * p.x2[7][_o] - p.s[6][_o] * p.x1[7][_o] ) + + (p.s[7][_o] * p.x2[6][_o] - p.s[7][_o] * p.x1[6][_o] ) + + (p.s[8][_o] * p.x2[5][_o] - p.s[8][_o] * p.x1[5][_o] ) + + (p.s[9][_o] * p.x2[4][_o] - p.s[9][_o] * p.x1[4][_o] ) + + (p.s[10][_o] * p.x2[3][_o] - p.s[10][_o] * p.x1[3][_o] ) + + (p.s[11][_o] * p.x2[2][_o] - p.s[11][_o] * p.x1[2][_o] ) + + (p.s[12][_o] * p.x2[1][_o] - p.s[12][_o] * p.x1[1][_o] ) + + (p.s[13][_o] * p.x2[0][_o] - p.s[13][_o] * p.x1[0][_o] ) + - p.q0[1][_o] - p.y2[13][_o] + p.y1[13][_o]); + + case 14: return ( + (p.s[0][_o] * p.x2[14][_o] - p.s[0][_o] * p.x1[14][_o] - 0xffffn * p.q0[14][_o]) + + (p.s[1][_o] * p.x2[13][_o] - p.s[1][_o] * p.x1[13][_o] - 0xffffn * p.q0[13][_o]) + + (p.s[2][_o] * p.x2[12][_o] - p.s[2][_o] * p.x1[12][_o] - 0xffffn * p.q0[12][_o]) + + (p.s[3][_o] * p.x2[11][_o] - p.s[3][_o] * p.x1[11][_o] - 0xffffn * p.q0[11][_o]) + + (p.s[4][_o] * p.x2[10][_o] - p.s[4][_o] * p.x1[10][_o] - 0xffffn * p.q0[10][_o]) + + (p.s[5][_o] * p.x2[9][_o] - p.s[5][_o] * p.x1[9][_o] - 0xffffn * p.q0[9][_o] ) + + (p.s[6][_o] * p.x2[8][_o] - p.s[6][_o] * p.x1[8][_o] ) + + (p.s[7][_o] * p.x2[7][_o] - p.s[7][_o] * p.x1[7][_o] ) + + (p.s[8][_o] * p.x2[6][_o] - p.s[8][_o] * p.x1[6][_o] ) + + (p.s[9][_o] * p.x2[5][_o] - p.s[9][_o] * p.x1[5][_o] ) + + (p.s[10][_o] * p.x2[4][_o] - p.s[10][_o] * p.x1[4][_o] ) + + (p.s[11][_o] * p.x2[3][_o] - p.s[11][_o] * p.x1[3][_o] ) + + (p.s[12][_o] * p.x2[2][_o] - p.s[12][_o] * p.x1[2][_o] ) + + (p.s[13][_o] * p.x2[1][_o] - p.s[13][_o] * p.x1[1][_o] ) + + (p.s[14][_o] * p.x2[0][_o] - p.s[14][_o] * p.x1[0][_o] - 0xffffn * p.q0[0][_o] ) + - p.q0[2][_o] - p.y2[14][_o] + p.y1[14][_o]); + + case 15: return ( + (p.s[0][_o] * p.x2[15][_o] - p.s[0][_o] * p.x1[15][_o] - 0xffffn * p.q0[15][_o]) + + (p.s[1][_o] * p.x2[14][_o] - p.s[1][_o] * p.x1[14][_o] - 0xffffn * p.q0[14][_o]) + + (p.s[2][_o] * p.x2[13][_o] - p.s[2][_o] * p.x1[13][_o] - 0xffffn * p.q0[13][_o]) + + (p.s[3][_o] * p.x2[12][_o] - p.s[3][_o] * p.x1[12][_o] - 0xffffn * p.q0[12][_o]) + + (p.s[4][_o] * p.x2[11][_o] - p.s[4][_o] * p.x1[11][_o] - 0xffffn * p.q0[11][_o]) + + (p.s[5][_o] * p.x2[10][_o] - p.s[5][_o] * p.x1[10][_o] - 0xffffn * p.q0[10][_o]) + + (p.s[6][_o] * p.x2[9][_o] - p.s[6][_o] * p.x1[9][_o] ) + + (p.s[7][_o] * p.x2[8][_o] - p.s[7][_o] * p.x1[8][_o] ) + + (p.s[8][_o] * p.x2[7][_o] - p.s[8][_o] * p.x1[7][_o] ) + + (p.s[9][_o] * p.x2[6][_o] - p.s[9][_o] * p.x1[6][_o] ) + + (p.s[10][_o] * p.x2[5][_o] - p.s[10][_o] * p.x1[5][_o] ) + + (p.s[11][_o] * p.x2[4][_o] - p.s[11][_o] * p.x1[4][_o] ) + + (p.s[12][_o] * p.x2[3][_o] - p.s[12][_o] * p.x1[3][_o] ) + + (p.s[13][_o] * p.x2[2][_o] - p.s[13][_o] * p.x1[2][_o] ) + + (p.s[14][_o] * p.x2[1][_o] - p.s[14][_o] * p.x1[1][_o] - 0xffffn * p.q0[1][_o] ) + + (p.s[15][_o] * p.x2[0][_o] - p.s[15][_o] * p.x1[0][_o] - 0xffffn * p.q0[0][_o] ) + - p.q0[3][_o] - p.y2[15][_o] + p.y1[15][_o]); + + case 16: return ( + (p.s[1][_o] * p.x2[15][_o] - p.s[1][_o] * p.x1[15][_o] - 0xffffn * p.q0[15][_o]) + + (p.s[2][_o] * p.x2[14][_o] - p.s[2][_o] * p.x1[14][_o] - 0xffffn * p.q0[14][_o]) + + (p.s[3][_o] * p.x2[13][_o] - p.s[3][_o] * p.x1[13][_o] - 0xffffn * p.q0[13][_o]) + + (p.s[4][_o] * p.x2[12][_o] - p.s[4][_o] * p.x1[12][_o] - 0xffffn * p.q0[12][_o]) + + (p.s[5][_o] * p.x2[11][_o] - p.s[5][_o] * p.x1[11][_o] - 0xffffn * p.q0[11][_o]) + + (p.s[6][_o] * p.x2[10][_o] - p.s[6][_o] * p.x1[10][_o]) + + (p.s[7][_o] * p.x2[9][_o] - p.s[7][_o] * p.x1[9][_o] ) + + (p.s[8][_o] * p.x2[8][_o] - p.s[8][_o] * p.x1[8][_o] ) + + (p.s[9][_o] * p.x2[7][_o] - p.s[9][_o] * p.x1[7][_o] ) + + (p.s[10][_o] * p.x2[6][_o] - p.s[10][_o] * p.x1[6][_o] ) + + (p.s[11][_o] * p.x2[5][_o] - p.s[11][_o] * p.x1[5][_o] ) + + (p.s[12][_o] * p.x2[4][_o] - p.s[12][_o] * p.x1[4][_o] ) + + (p.s[13][_o] * p.x2[3][_o] - p.s[13][_o] * p.x1[3][_o] ) + + (p.s[14][_o] * p.x2[2][_o] - p.s[14][_o] * p.x1[2][_o] - 0xffffn * p.q0[2][_o] ) + + (p.s[15][_o] * p.x2[1][_o] - p.s[15][_o] * p.x1[1][_o] - 0xffffn * p.q0[1][_o] ) + + 0x1fffen - p.q0[4][_o] ); + + case 17: return ( + (p.s[2][_o] * p.x2[15][_o] - p.s[2][_o] * p.x1[15][_o] - 0xffffn * p.q0[15][_o]) + + (p.s[3][_o] * p.x2[14][_o] - p.s[3][_o] * p.x1[14][_o] - 0xffffn * p.q0[14][_o]) + + (p.s[4][_o] * p.x2[13][_o] - p.s[4][_o] * p.x1[13][_o] - 0xffffn * p.q0[13][_o]) + + (p.s[5][_o] * p.x2[12][_o] - p.s[5][_o] * p.x1[12][_o] - 0xffffn * p.q0[12][_o]) + + (p.s[6][_o] * p.x2[11][_o] - p.s[6][_o] * p.x1[11][_o]) + + (p.s[7][_o] * p.x2[10][_o] - p.s[7][_o] * p.x1[10][_o]) + + (p.s[8][_o] * p.x2[9][_o] - p.s[8][_o] * p.x1[9][_o] ) + + (p.s[9][_o] * p.x2[8][_o] - p.s[9][_o] * p.x1[8][_o] ) + + (p.s[10][_o] * p.x2[7][_o] - p.s[10][_o] * p.x1[7][_o] ) + + (p.s[11][_o] * p.x2[6][_o] - p.s[11][_o] * p.x1[6][_o] ) + + (p.s[12][_o] * p.x2[5][_o] - p.s[12][_o] * p.x1[5][_o] ) + + (p.s[13][_o] * p.x2[4][_o] - p.s[13][_o] * p.x1[4][_o] ) + + (p.s[14][_o] * p.x2[3][_o] - p.s[14][_o] * p.x1[3][_o] - 0xffffn * p.q0[3][_o] ) + + (p.s[15][_o] * p.x2[2][_o] - p.s[15][_o] * p.x1[2][_o] - 0xffffn * p.q0[2][_o] ) + + 0x1fffen - p.q0[5][_o] ); + + case 18: return ( + (p.s[3][_o] * p.x2[15][_o] - p.s[3][_o] * p.x1[15][_o] - 0xffffn * p.q0[15][_o]) + + (p.s[4][_o] * p.x2[14][_o] - p.s[4][_o] * p.x1[14][_o] - 0xffffn * p.q0[14][_o]) + + (p.s[5][_o] * p.x2[13][_o] - p.s[5][_o] * p.x1[13][_o] - 0xffffn * p.q0[13][_o]) + + (p.s[6][_o] * p.x2[12][_o] - p.s[6][_o] * p.x1[12][_o]) + + (p.s[7][_o] * p.x2[11][_o] - p.s[7][_o] * p.x1[11][_o]) + + (p.s[8][_o] * p.x2[10][_o] - p.s[8][_o] * p.x1[10][_o]) + + (p.s[9][_o] * p.x2[9][_o] - p.s[9][_o] * p.x1[9][_o] ) + + (p.s[10][_o] * p.x2[8][_o] - p.s[10][_o] * p.x1[8][_o] ) + + (p.s[11][_o] * p.x2[7][_o] - p.s[11][_o] * p.x1[7][_o] ) + + (p.s[12][_o] * p.x2[6][_o] - p.s[12][_o] * p.x1[6][_o] ) + + (p.s[13][_o] * p.x2[5][_o] - p.s[13][_o] * p.x1[5][_o] ) + + (p.s[14][_o] * p.x2[4][_o] - p.s[14][_o] * p.x1[4][_o] - 0xffffn * p.q0[4][_o] ) + + (p.s[15][_o] * p.x2[3][_o] - p.s[15][_o] * p.x1[3][_o] - 0xffffn * p.q0[3][_o] ) + + 0x1fffen - p.q0[6][_o] ); + + case 19: return ( + (p.s[4][_o] * p.x2[15][_o] - p.s[4][_o] * p.x1[15][_o] - 0xffffn * p.q0[15][_o]) + + (p.s[5][_o] * p.x2[14][_o] - p.s[5][_o] * p.x1[14][_o] - 0xffffn * p.q0[14][_o]) + + (p.s[6][_o] * p.x2[13][_o] - p.s[6][_o] * p.x1[13][_o]) + + (p.s[7][_o] * p.x2[12][_o] - p.s[7][_o] * p.x1[12][_o]) + + (p.s[8][_o] * p.x2[11][_o] - p.s[8][_o] * p.x1[11][_o]) + + (p.s[9][_o] * p.x2[10][_o] - p.s[9][_o] * p.x1[10][_o]) + + (p.s[10][_o] * p.x2[9][_o] - p.s[10][_o] * p.x1[9][_o] ) + + (p.s[11][_o] * p.x2[8][_o] - p.s[11][_o] * p.x1[8][_o] ) + + (p.s[12][_o] * p.x2[7][_o] - p.s[12][_o] * p.x1[7][_o] ) + + (p.s[13][_o] * p.x2[6][_o] - p.s[13][_o] * p.x1[6][_o] ) + + (p.s[14][_o] * p.x2[5][_o] - p.s[14][_o] * p.x1[5][_o] - 0xffffn * p.q0[5][_o] ) + + (p.s[15][_o] * p.x2[4][_o] - p.s[15][_o] * p.x1[4][_o] - 0xffffn * p.q0[4][_o] ) + + 0x1fffen - p.q0[7][_o] ); + + case 20: return ( + (p.s[5][_o] * p.x2[15][_o] - p.s[5][_o] * p.x1[15][_o] - 0xffffn * p.q0[15][_o]) + + (p.s[6][_o] * p.x2[14][_o] - p.s[6][_o] * p.x1[14][_o]) + + (p.s[7][_o] * p.x2[13][_o] - p.s[7][_o] * p.x1[13][_o]) + + (p.s[8][_o] * p.x2[12][_o] - p.s[8][_o] * p.x1[12][_o]) + + (p.s[9][_o] * p.x2[11][_o] - p.s[9][_o] * p.x1[11][_o]) + + (p.s[10][_o] * p.x2[10][_o] - p.s[10][_o] * p.x1[10][_o]) + + (p.s[11][_o] * p.x2[9][_o] - p.s[11][_o] * p.x1[9][_o] ) + + (p.s[12][_o] * p.x2[8][_o] - p.s[12][_o] * p.x1[8][_o] ) + + (p.s[13][_o] * p.x2[7][_o] - p.s[13][_o] * p.x1[7][_o] ) + + (p.s[14][_o] * p.x2[6][_o] - p.s[14][_o] * p.x1[6][_o] - 0xffffn * p.q0[6][_o] ) + + (p.s[15][_o] * p.x2[5][_o] - p.s[15][_o] * p.x1[5][_o] - 0xffffn * p.q0[5][_o] ) + + 0x1fffen - p.q0[8][_o] ); + + case 21: return ( + (p.s[6][_o] * p.x2[15][_o] - p.s[6][_o] * p.x1[15][_o]) + + (p.s[7][_o] * p.x2[14][_o] - p.s[7][_o] * p.x1[14][_o]) + + (p.s[8][_o] * p.x2[13][_o] - p.s[8][_o] * p.x1[13][_o]) + + (p.s[9][_o] * p.x2[12][_o] - p.s[9][_o] * p.x1[12][_o]) + + (p.s[10][_o] * p.x2[11][_o] - p.s[10][_o] * p.x1[11][_o]) + + (p.s[11][_o] * p.x2[10][_o] - p.s[11][_o] * p.x1[10][_o]) + + (p.s[12][_o] * p.x2[9][_o] - p.s[12][_o] * p.x1[9][_o] ) + + (p.s[13][_o] * p.x2[8][_o] - p.s[13][_o] * p.x1[8][_o] ) + + (p.s[14][_o] * p.x2[7][_o] - p.s[14][_o] * p.x1[7][_o] - 0xffffn * p.q0[7][_o] ) + + (p.s[15][_o] * p.x2[6][_o] - p.s[15][_o] * p.x1[6][_o] - 0xffffn * p.q0[6][_o] ) + + 0x1fffen - p.q0[9][_o] ); + + case 22: return ( + (p.s[7][_o] * p.x2[15][_o] - p.s[7][_o] * p.x1[15][_o]) + + (p.s[8][_o] * p.x2[14][_o] - p.s[8][_o] * p.x1[14][_o]) + + (p.s[9][_o] * p.x2[13][_o] - p.s[9][_o] * p.x1[13][_o]) + + (p.s[10][_o] * p.x2[12][_o] - p.s[10][_o] * p.x1[12][_o]) + + (p.s[11][_o] * p.x2[11][_o] - p.s[11][_o] * p.x1[11][_o]) + + (p.s[12][_o] * p.x2[10][_o] - p.s[12][_o] * p.x1[10][_o]) + + (p.s[13][_o] * p.x2[9][_o] - p.s[13][_o] * p.x1[9][_o] ) + + (p.s[14][_o] * p.x2[8][_o] - p.s[14][_o] * p.x1[8][_o] - 0xffffn * p.q0[8][_o] ) + + (p.s[15][_o] * p.x2[7][_o] - p.s[15][_o] * p.x1[7][_o] - 0xffffn * p.q0[7][_o] ) + - p.q0[10][_o]); + + case 23: return ( + (p.s[8][_o] * p.x2[15][_o] - p.s[8][_o] * p.x1[15][_o]) + + (p.s[9][_o] * p.x2[14][_o] - p.s[9][_o] * p.x1[14][_o]) + + (p.s[10][_o] * p.x2[13][_o] - p.s[10][_o] * p.x1[13][_o]) + + (p.s[11][_o] * p.x2[12][_o] - p.s[11][_o] * p.x1[12][_o]) + + (p.s[12][_o] * p.x2[11][_o] - p.s[12][_o] * p.x1[11][_o]) + + (p.s[13][_o] * p.x2[10][_o] - p.s[13][_o] * p.x1[10][_o]) + + (p.s[14][_o] * p.x2[9][_o] - p.s[14][_o] * p.x1[9][_o] - 0xffffn * p.q0[9][_o] ) + + (p.s[15][_o] * p.x2[8][_o] - p.s[15][_o] * p.x1[8][_o] - 0xffffn * p.q0[8][_o] ) + - p.q0[11][_o]); + + case 24: return ( + (p.s[9][_o] * p.x2[15][_o] - p.s[9][_o] * p.x1[15][_o]) + + (p.s[10][_o] * p.x2[14][_o] - p.s[10][_o] * p.x1[14][_o]) + + (p.s[11][_o] * p.x2[13][_o] - p.s[11][_o] * p.x1[13][_o]) + + (p.s[12][_o] * p.x2[12][_o] - p.s[12][_o] * p.x1[12][_o]) + + (p.s[13][_o] * p.x2[11][_o] - p.s[13][_o] * p.x1[11][_o]) + + (p.s[14][_o] * p.x2[10][_o] - p.s[14][_o] * p.x1[10][_o] - 0xffffn * p.q0[10][_o]) + + (p.s[15][_o] * p.x2[9][_o] - p.s[15][_o] * p.x1[9][_o] - 0xffffn * p.q0[9][_o] ) + - p.q0[12][_o]); + + case 25: return ( + (p.s[10][_o] * p.x2[15][_o] - p.s[10][_o] * p.x1[15][_o]) + + (p.s[11][_o] * p.x2[14][_o] - p.s[11][_o] * p.x1[14][_o]) + + (p.s[12][_o] * p.x2[13][_o] - p.s[12][_o] * p.x1[13][_o]) + + (p.s[13][_o] * p.x2[12][_o] - p.s[13][_o] * p.x1[12][_o]) + + (p.s[14][_o] * p.x2[11][_o] - p.s[14][_o] * p.x1[11][_o] - 0xffffn * p.q0[11][_o]) + + (p.s[15][_o] * p.x2[10][_o] - p.s[15][_o] * p.x1[10][_o] - 0xffffn * p.q0[10][_o]) + - p.q0[13][_o]); + + case 26: return ( + (p.s[11][_o] * p.x2[15][_o] - p.s[11][_o] * p.x1[15][_o]) + + (p.s[12][_o] * p.x2[14][_o] - p.s[12][_o] * p.x1[14][_o]) + + (p.s[13][_o] * p.x2[13][_o] - p.s[13][_o] * p.x1[13][_o]) + + (p.s[14][_o] * p.x2[12][_o] - p.s[14][_o] * p.x1[12][_o] - 0xffffn * p.q0[12][_o]) + + (p.s[15][_o] * p.x2[11][_o] - p.s[15][_o] * p.x1[11][_o] - 0xffffn * p.q0[11][_o]) + - p.q0[14][_o]); + + case 27: return ( + (p.s[12][_o] * p.x2[15][_o] - p.s[12][_o] * p.x1[15][_o]) + + (p.s[13][_o] * p.x2[14][_o] - p.s[13][_o] * p.x1[14][_o]) + + (p.s[14][_o] * p.x2[13][_o] - p.s[14][_o] * p.x1[13][_o] - 0xffffn * p.q0[13][_o]) + + (p.s[15][_o] * p.x2[12][_o] - p.s[15][_o] * p.x1[12][_o] - 0xffffn * p.q0[12][_o]) + - p.q0[15][_o]); + + case 28: return ( + (p.s[13][_o] * p.x2[15][_o] - p.s[13][_o] * p.x1[15][_o]) + + (p.s[14][_o] * p.x2[14][_o] - p.s[14][_o] * p.x1[14][_o] - 0xffffn * p.q0[14][_o]) + + (p.s[15][_o] * p.x2[13][_o] - p.s[15][_o] * p.x1[13][_o] - 0xffffn * p.q0[13][_o]) + + 0x2n ); + + case 29: return ( + (p.s[14][_o] * p.x2[15][_o] - p.s[14][_o] * p.x1[15][_o] - 0xffffn * p.q0[15][_o]) + + (p.s[15][_o] * p.x2[14][_o] - p.s[15][_o] * p.x1[14][_o] - 0xffffn * p.q0[14][_o])); + + case 30: return ( + (p.s[15][_o] * p.x2[15][_o] - p.s[15][_o] * p.x1[15][_o] - 0xffffn * p.q0[15][_o]) + + 0x1fffen); + + case 31: return ( 0x1fffen); + } + return 0n; +} diff --git a/src/sm/sm_arith/sm_arith_eq12.js b/src/sm/sm_arith/sm_arith_eq12.js new file mode 100644 index 00000000..d39d0d48 --- /dev/null +++ b/src/sm/sm_arith/sm_arith_eq12.js @@ -0,0 +1,358 @@ +/* +* code generated with arith_eq_gen.js +* equation: s*y1+s*y1-x1*x1-x1*x1-x1*x1-a+p*q0-p*offset +* +* a=0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc +* p=0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff +* offset=0x40000000000000000000000000000000000000000000000000000000000000000 +*/ + +module.exports.calculate = function (p, step, _o) +{ + switch(step) { + case 0: return ( + (p.s[0][_o] * p.y1[0][_o] + p.s[0][_o] * p.y1[0][_o] - p.x1[0][_o] * p.x1[0][_o] - p.x1[0][_o] * p.x1[0][_o] - p.x1[0][_o] * p.x1[0][_o] + 0xffffn * p.q0[0][_o] ) + - 0xfffcn ); + + case 1: return ( + (p.s[0][_o] * p.y1[1][_o] + p.s[0][_o] * p.y1[1][_o] - p.x1[0][_o] * p.x1[1][_o] - p.x1[0][_o] * p.x1[1][_o] - p.x1[0][_o] * p.x1[1][_o] + 0xffffn * p.q0[1][_o] ) + + (p.s[1][_o] * p.y1[0][_o] + p.s[1][_o] * p.y1[0][_o] - p.x1[1][_o] * p.x1[0][_o] - p.x1[1][_o] * p.x1[0][_o] - p.x1[1][_o] * p.x1[0][_o] + 0xffffn * p.q0[0][_o] ) + - 0xffffn ); + + case 2: return ( + (p.s[0][_o] * p.y1[2][_o] + p.s[0][_o] * p.y1[2][_o] - p.x1[0][_o] * p.x1[2][_o] - p.x1[0][_o] * p.x1[2][_o] - p.x1[0][_o] * p.x1[2][_o] + 0xffffn * p.q0[2][_o] ) + + (p.s[1][_o] * p.y1[1][_o] + p.s[1][_o] * p.y1[1][_o] - p.x1[1][_o] * p.x1[1][_o] - p.x1[1][_o] * p.x1[1][_o] - p.x1[1][_o] * p.x1[1][_o] + 0xffffn * p.q0[1][_o] ) + + (p.s[2][_o] * p.y1[0][_o] + p.s[2][_o] * p.y1[0][_o] - p.x1[2][_o] * p.x1[0][_o] - p.x1[2][_o] * p.x1[0][_o] - p.x1[2][_o] * p.x1[0][_o] + 0xffffn * p.q0[0][_o] ) + - 0xffffn ); + + case 3: return ( + (p.s[0][_o] * p.y1[3][_o] + p.s[0][_o] * p.y1[3][_o] - p.x1[0][_o] * p.x1[3][_o] - p.x1[0][_o] * p.x1[3][_o] - p.x1[0][_o] * p.x1[3][_o] + 0xffffn * p.q0[3][_o] ) + + (p.s[1][_o] * p.y1[2][_o] + p.s[1][_o] * p.y1[2][_o] - p.x1[1][_o] * p.x1[2][_o] - p.x1[1][_o] * p.x1[2][_o] - p.x1[1][_o] * p.x1[2][_o] + 0xffffn * p.q0[2][_o] ) + + (p.s[2][_o] * p.y1[1][_o] + p.s[2][_o] * p.y1[1][_o] - p.x1[2][_o] * p.x1[1][_o] - p.x1[2][_o] * p.x1[1][_o] - p.x1[2][_o] * p.x1[1][_o] + 0xffffn * p.q0[1][_o] ) + + (p.s[3][_o] * p.y1[0][_o] + p.s[3][_o] * p.y1[0][_o] - p.x1[3][_o] * p.x1[0][_o] - p.x1[3][_o] * p.x1[0][_o] - p.x1[3][_o] * p.x1[0][_o] + 0xffffn * p.q0[0][_o] ) + - 0xffffn ); + + case 4: return ( + (p.s[0][_o] * p.y1[4][_o] + p.s[0][_o] * p.y1[4][_o] - p.x1[0][_o] * p.x1[4][_o] - p.x1[0][_o] * p.x1[4][_o] - p.x1[0][_o] * p.x1[4][_o] + 0xffffn * p.q0[4][_o] ) + + (p.s[1][_o] * p.y1[3][_o] + p.s[1][_o] * p.y1[3][_o] - p.x1[1][_o] * p.x1[3][_o] - p.x1[1][_o] * p.x1[3][_o] - p.x1[1][_o] * p.x1[3][_o] + 0xffffn * p.q0[3][_o] ) + + (p.s[2][_o] * p.y1[2][_o] + p.s[2][_o] * p.y1[2][_o] - p.x1[2][_o] * p.x1[2][_o] - p.x1[2][_o] * p.x1[2][_o] - p.x1[2][_o] * p.x1[2][_o] + 0xffffn * p.q0[2][_o] ) + + (p.s[3][_o] * p.y1[1][_o] + p.s[3][_o] * p.y1[1][_o] - p.x1[3][_o] * p.x1[1][_o] - p.x1[3][_o] * p.x1[1][_o] - p.x1[3][_o] * p.x1[1][_o] + 0xffffn * p.q0[1][_o] ) + + (p.s[4][_o] * p.y1[0][_o] + p.s[4][_o] * p.y1[0][_o] - p.x1[4][_o] * p.x1[0][_o] - p.x1[4][_o] * p.x1[0][_o] - p.x1[4][_o] * p.x1[0][_o] + 0xffffn * p.q0[0][_o] ) + - 0xffffn ); + + case 5: return ( + (p.s[0][_o] * p.y1[5][_o] + p.s[0][_o] * p.y1[5][_o] - p.x1[0][_o] * p.x1[5][_o] - p.x1[0][_o] * p.x1[5][_o] - p.x1[0][_o] * p.x1[5][_o] + 0xffffn * p.q0[5][_o] ) + + (p.s[1][_o] * p.y1[4][_o] + p.s[1][_o] * p.y1[4][_o] - p.x1[1][_o] * p.x1[4][_o] - p.x1[1][_o] * p.x1[4][_o] - p.x1[1][_o] * p.x1[4][_o] + 0xffffn * p.q0[4][_o] ) + + (p.s[2][_o] * p.y1[3][_o] + p.s[2][_o] * p.y1[3][_o] - p.x1[2][_o] * p.x1[3][_o] - p.x1[2][_o] * p.x1[3][_o] - p.x1[2][_o] * p.x1[3][_o] + 0xffffn * p.q0[3][_o] ) + + (p.s[3][_o] * p.y1[2][_o] + p.s[3][_o] * p.y1[2][_o] - p.x1[3][_o] * p.x1[2][_o] - p.x1[3][_o] * p.x1[2][_o] - p.x1[3][_o] * p.x1[2][_o] + 0xffffn * p.q0[2][_o] ) + + (p.s[4][_o] * p.y1[1][_o] + p.s[4][_o] * p.y1[1][_o] - p.x1[4][_o] * p.x1[1][_o] - p.x1[4][_o] * p.x1[1][_o] - p.x1[4][_o] * p.x1[1][_o] + 0xffffn * p.q0[1][_o] ) + + (p.s[5][_o] * p.y1[0][_o] + p.s[5][_o] * p.y1[0][_o] - p.x1[5][_o] * p.x1[0][_o] - p.x1[5][_o] * p.x1[0][_o] - p.x1[5][_o] * p.x1[0][_o] + 0xffffn * p.q0[0][_o] ) + - 0xffffn ); + + case 6: return ( + (p.s[0][_o] * p.y1[6][_o] + p.s[0][_o] * p.y1[6][_o] - p.x1[0][_o] * p.x1[6][_o] - p.x1[0][_o] * p.x1[6][_o] - p.x1[0][_o] * p.x1[6][_o] + 0xffffn * p.q0[6][_o] ) + + (p.s[1][_o] * p.y1[5][_o] + p.s[1][_o] * p.y1[5][_o] - p.x1[1][_o] * p.x1[5][_o] - p.x1[1][_o] * p.x1[5][_o] - p.x1[1][_o] * p.x1[5][_o] + 0xffffn * p.q0[5][_o] ) + + (p.s[2][_o] * p.y1[4][_o] + p.s[2][_o] * p.y1[4][_o] - p.x1[2][_o] * p.x1[4][_o] - p.x1[2][_o] * p.x1[4][_o] - p.x1[2][_o] * p.x1[4][_o] + 0xffffn * p.q0[4][_o] ) + + (p.s[3][_o] * p.y1[3][_o] + p.s[3][_o] * p.y1[3][_o] - p.x1[3][_o] * p.x1[3][_o] - p.x1[3][_o] * p.x1[3][_o] - p.x1[3][_o] * p.x1[3][_o] + 0xffffn * p.q0[3][_o] ) + + (p.s[4][_o] * p.y1[2][_o] + p.s[4][_o] * p.y1[2][_o] - p.x1[4][_o] * p.x1[2][_o] - p.x1[4][_o] * p.x1[2][_o] - p.x1[4][_o] * p.x1[2][_o] + 0xffffn * p.q0[2][_o] ) + + (p.s[5][_o] * p.y1[1][_o] + p.s[5][_o] * p.y1[1][_o] - p.x1[5][_o] * p.x1[1][_o] - p.x1[5][_o] * p.x1[1][_o] - p.x1[5][_o] * p.x1[1][_o] + 0xffffn * p.q0[1][_o] ) + + (p.s[6][_o] * p.y1[0][_o] + p.s[6][_o] * p.y1[0][_o] - p.x1[6][_o] * p.x1[0][_o] - p.x1[6][_o] * p.x1[0][_o] - p.x1[6][_o] * p.x1[0][_o] )); + + case 7: return ( + (p.s[0][_o] * p.y1[7][_o] + p.s[0][_o] * p.y1[7][_o] - p.x1[0][_o] * p.x1[7][_o] - p.x1[0][_o] * p.x1[7][_o] - p.x1[0][_o] * p.x1[7][_o] + 0xffffn * p.q0[7][_o] ) + + (p.s[1][_o] * p.y1[6][_o] + p.s[1][_o] * p.y1[6][_o] - p.x1[1][_o] * p.x1[6][_o] - p.x1[1][_o] * p.x1[6][_o] - p.x1[1][_o] * p.x1[6][_o] + 0xffffn * p.q0[6][_o] ) + + (p.s[2][_o] * p.y1[5][_o] + p.s[2][_o] * p.y1[5][_o] - p.x1[2][_o] * p.x1[5][_o] - p.x1[2][_o] * p.x1[5][_o] - p.x1[2][_o] * p.x1[5][_o] + 0xffffn * p.q0[5][_o] ) + + (p.s[3][_o] * p.y1[4][_o] + p.s[3][_o] * p.y1[4][_o] - p.x1[3][_o] * p.x1[4][_o] - p.x1[3][_o] * p.x1[4][_o] - p.x1[3][_o] * p.x1[4][_o] + 0xffffn * p.q0[4][_o] ) + + (p.s[4][_o] * p.y1[3][_o] + p.s[4][_o] * p.y1[3][_o] - p.x1[4][_o] * p.x1[3][_o] - p.x1[4][_o] * p.x1[3][_o] - p.x1[4][_o] * p.x1[3][_o] + 0xffffn * p.q0[3][_o] ) + + (p.s[5][_o] * p.y1[2][_o] + p.s[5][_o] * p.y1[2][_o] - p.x1[5][_o] * p.x1[2][_o] - p.x1[5][_o] * p.x1[2][_o] - p.x1[5][_o] * p.x1[2][_o] + 0xffffn * p.q0[2][_o] ) + + (p.s[6][_o] * p.y1[1][_o] + p.s[6][_o] * p.y1[1][_o] - p.x1[6][_o] * p.x1[1][_o] - p.x1[6][_o] * p.x1[1][_o] - p.x1[6][_o] * p.x1[1][_o] ) + + (p.s[7][_o] * p.y1[0][_o] + p.s[7][_o] * p.y1[0][_o] - p.x1[7][_o] * p.x1[0][_o] - p.x1[7][_o] * p.x1[0][_o] - p.x1[7][_o] * p.x1[0][_o] )); + + case 8: return ( + (p.s[0][_o] * p.y1[8][_o] + p.s[0][_o] * p.y1[8][_o] - p.x1[0][_o] * p.x1[8][_o] - p.x1[0][_o] * p.x1[8][_o] - p.x1[0][_o] * p.x1[8][_o] + 0xffffn * p.q0[8][_o] ) + + (p.s[1][_o] * p.y1[7][_o] + p.s[1][_o] * p.y1[7][_o] - p.x1[1][_o] * p.x1[7][_o] - p.x1[1][_o] * p.x1[7][_o] - p.x1[1][_o] * p.x1[7][_o] + 0xffffn * p.q0[7][_o] ) + + (p.s[2][_o] * p.y1[6][_o] + p.s[2][_o] * p.y1[6][_o] - p.x1[2][_o] * p.x1[6][_o] - p.x1[2][_o] * p.x1[6][_o] - p.x1[2][_o] * p.x1[6][_o] + 0xffffn * p.q0[6][_o] ) + + (p.s[3][_o] * p.y1[5][_o] + p.s[3][_o] * p.y1[5][_o] - p.x1[3][_o] * p.x1[5][_o] - p.x1[3][_o] * p.x1[5][_o] - p.x1[3][_o] * p.x1[5][_o] + 0xffffn * p.q0[5][_o] ) + + (p.s[4][_o] * p.y1[4][_o] + p.s[4][_o] * p.y1[4][_o] - p.x1[4][_o] * p.x1[4][_o] - p.x1[4][_o] * p.x1[4][_o] - p.x1[4][_o] * p.x1[4][_o] + 0xffffn * p.q0[4][_o] ) + + (p.s[5][_o] * p.y1[3][_o] + p.s[5][_o] * p.y1[3][_o] - p.x1[5][_o] * p.x1[3][_o] - p.x1[5][_o] * p.x1[3][_o] - p.x1[5][_o] * p.x1[3][_o] + 0xffffn * p.q0[3][_o] ) + + (p.s[6][_o] * p.y1[2][_o] + p.s[6][_o] * p.y1[2][_o] - p.x1[6][_o] * p.x1[2][_o] - p.x1[6][_o] * p.x1[2][_o] - p.x1[6][_o] * p.x1[2][_o] ) + + (p.s[7][_o] * p.y1[1][_o] + p.s[7][_o] * p.y1[1][_o] - p.x1[7][_o] * p.x1[1][_o] - p.x1[7][_o] * p.x1[1][_o] - p.x1[7][_o] * p.x1[1][_o] ) + + (p.s[8][_o] * p.y1[0][_o] + p.s[8][_o] * p.y1[0][_o] - p.x1[8][_o] * p.x1[0][_o] - p.x1[8][_o] * p.x1[0][_o] - p.x1[8][_o] * p.x1[0][_o] )); + + case 9: return ( + (p.s[0][_o] * p.y1[9][_o] + p.s[0][_o] * p.y1[9][_o] - p.x1[0][_o] * p.x1[9][_o] - p.x1[0][_o] * p.x1[9][_o] - p.x1[0][_o] * p.x1[9][_o] + 0xffffn * p.q0[9][_o] ) + + (p.s[1][_o] * p.y1[8][_o] + p.s[1][_o] * p.y1[8][_o] - p.x1[1][_o] * p.x1[8][_o] - p.x1[1][_o] * p.x1[8][_o] - p.x1[1][_o] * p.x1[8][_o] + 0xffffn * p.q0[8][_o] ) + + (p.s[2][_o] * p.y1[7][_o] + p.s[2][_o] * p.y1[7][_o] - p.x1[2][_o] * p.x1[7][_o] - p.x1[2][_o] * p.x1[7][_o] - p.x1[2][_o] * p.x1[7][_o] + 0xffffn * p.q0[7][_o] ) + + (p.s[3][_o] * p.y1[6][_o] + p.s[3][_o] * p.y1[6][_o] - p.x1[3][_o] * p.x1[6][_o] - p.x1[3][_o] * p.x1[6][_o] - p.x1[3][_o] * p.x1[6][_o] + 0xffffn * p.q0[6][_o] ) + + (p.s[4][_o] * p.y1[5][_o] + p.s[4][_o] * p.y1[5][_o] - p.x1[4][_o] * p.x1[5][_o] - p.x1[4][_o] * p.x1[5][_o] - p.x1[4][_o] * p.x1[5][_o] + 0xffffn * p.q0[5][_o] ) + + (p.s[5][_o] * p.y1[4][_o] + p.s[5][_o] * p.y1[4][_o] - p.x1[5][_o] * p.x1[4][_o] - p.x1[5][_o] * p.x1[4][_o] - p.x1[5][_o] * p.x1[4][_o] + 0xffffn * p.q0[4][_o] ) + + (p.s[6][_o] * p.y1[3][_o] + p.s[6][_o] * p.y1[3][_o] - p.x1[6][_o] * p.x1[3][_o] - p.x1[6][_o] * p.x1[3][_o] - p.x1[6][_o] * p.x1[3][_o] ) + + (p.s[7][_o] * p.y1[2][_o] + p.s[7][_o] * p.y1[2][_o] - p.x1[7][_o] * p.x1[2][_o] - p.x1[7][_o] * p.x1[2][_o] - p.x1[7][_o] * p.x1[2][_o] ) + + (p.s[8][_o] * p.y1[1][_o] + p.s[8][_o] * p.y1[1][_o] - p.x1[8][_o] * p.x1[1][_o] - p.x1[8][_o] * p.x1[1][_o] - p.x1[8][_o] * p.x1[1][_o] ) + + (p.s[9][_o] * p.y1[0][_o] + p.s[9][_o] * p.y1[0][_o] - p.x1[9][_o] * p.x1[0][_o] - p.x1[9][_o] * p.x1[0][_o] - p.x1[9][_o] * p.x1[0][_o] )); + + case 10: return ( + (p.s[0][_o] * p.y1[10][_o] + p.s[0][_o] * p.y1[10][_o] - p.x1[0][_o] * p.x1[10][_o] - p.x1[0][_o] * p.x1[10][_o] - p.x1[0][_o] * p.x1[10][_o] + 0xffffn * p.q0[10][_o]) + + (p.s[1][_o] * p.y1[9][_o] + p.s[1][_o] * p.y1[9][_o] - p.x1[1][_o] * p.x1[9][_o] - p.x1[1][_o] * p.x1[9][_o] - p.x1[1][_o] * p.x1[9][_o] + 0xffffn * p.q0[9][_o] ) + + (p.s[2][_o] * p.y1[8][_o] + p.s[2][_o] * p.y1[8][_o] - p.x1[2][_o] * p.x1[8][_o] - p.x1[2][_o] * p.x1[8][_o] - p.x1[2][_o] * p.x1[8][_o] + 0xffffn * p.q0[8][_o] ) + + (p.s[3][_o] * p.y1[7][_o] + p.s[3][_o] * p.y1[7][_o] - p.x1[3][_o] * p.x1[7][_o] - p.x1[3][_o] * p.x1[7][_o] - p.x1[3][_o] * p.x1[7][_o] + 0xffffn * p.q0[7][_o] ) + + (p.s[4][_o] * p.y1[6][_o] + p.s[4][_o] * p.y1[6][_o] - p.x1[4][_o] * p.x1[6][_o] - p.x1[4][_o] * p.x1[6][_o] - p.x1[4][_o] * p.x1[6][_o] + 0xffffn * p.q0[6][_o] ) + + (p.s[5][_o] * p.y1[5][_o] + p.s[5][_o] * p.y1[5][_o] - p.x1[5][_o] * p.x1[5][_o] - p.x1[5][_o] * p.x1[5][_o] - p.x1[5][_o] * p.x1[5][_o] + 0xffffn * p.q0[5][_o] ) + + (p.s[6][_o] * p.y1[4][_o] + p.s[6][_o] * p.y1[4][_o] - p.x1[6][_o] * p.x1[4][_o] - p.x1[6][_o] * p.x1[4][_o] - p.x1[6][_o] * p.x1[4][_o] ) + + (p.s[7][_o] * p.y1[3][_o] + p.s[7][_o] * p.y1[3][_o] - p.x1[7][_o] * p.x1[3][_o] - p.x1[7][_o] * p.x1[3][_o] - p.x1[7][_o] * p.x1[3][_o] ) + + (p.s[8][_o] * p.y1[2][_o] + p.s[8][_o] * p.y1[2][_o] - p.x1[8][_o] * p.x1[2][_o] - p.x1[8][_o] * p.x1[2][_o] - p.x1[8][_o] * p.x1[2][_o] ) + + (p.s[9][_o] * p.y1[1][_o] + p.s[9][_o] * p.y1[1][_o] - p.x1[9][_o] * p.x1[1][_o] - p.x1[9][_o] * p.x1[1][_o] - p.x1[9][_o] * p.x1[1][_o] ) + + (p.s[10][_o] * p.y1[0][_o] + p.s[10][_o] * p.y1[0][_o] - p.x1[10][_o] * p.x1[0][_o] - p.x1[10][_o] * p.x1[0][_o] - p.x1[10][_o] * p.x1[0][_o] )); + + case 11: return ( + (p.s[0][_o] * p.y1[11][_o] + p.s[0][_o] * p.y1[11][_o] - p.x1[0][_o] * p.x1[11][_o] - p.x1[0][_o] * p.x1[11][_o] - p.x1[0][_o] * p.x1[11][_o] + 0xffffn * p.q0[11][_o]) + + (p.s[1][_o] * p.y1[10][_o] + p.s[1][_o] * p.y1[10][_o] - p.x1[1][_o] * p.x1[10][_o] - p.x1[1][_o] * p.x1[10][_o] - p.x1[1][_o] * p.x1[10][_o] + 0xffffn * p.q0[10][_o]) + + (p.s[2][_o] * p.y1[9][_o] + p.s[2][_o] * p.y1[9][_o] - p.x1[2][_o] * p.x1[9][_o] - p.x1[2][_o] * p.x1[9][_o] - p.x1[2][_o] * p.x1[9][_o] + 0xffffn * p.q0[9][_o] ) + + (p.s[3][_o] * p.y1[8][_o] + p.s[3][_o] * p.y1[8][_o] - p.x1[3][_o] * p.x1[8][_o] - p.x1[3][_o] * p.x1[8][_o] - p.x1[3][_o] * p.x1[8][_o] + 0xffffn * p.q0[8][_o] ) + + (p.s[4][_o] * p.y1[7][_o] + p.s[4][_o] * p.y1[7][_o] - p.x1[4][_o] * p.x1[7][_o] - p.x1[4][_o] * p.x1[7][_o] - p.x1[4][_o] * p.x1[7][_o] + 0xffffn * p.q0[7][_o] ) + + (p.s[5][_o] * p.y1[6][_o] + p.s[5][_o] * p.y1[6][_o] - p.x1[5][_o] * p.x1[6][_o] - p.x1[5][_o] * p.x1[6][_o] - p.x1[5][_o] * p.x1[6][_o] + 0xffffn * p.q0[6][_o] ) + + (p.s[6][_o] * p.y1[5][_o] + p.s[6][_o] * p.y1[5][_o] - p.x1[6][_o] * p.x1[5][_o] - p.x1[6][_o] * p.x1[5][_o] - p.x1[6][_o] * p.x1[5][_o] ) + + (p.s[7][_o] * p.y1[4][_o] + p.s[7][_o] * p.y1[4][_o] - p.x1[7][_o] * p.x1[4][_o] - p.x1[7][_o] * p.x1[4][_o] - p.x1[7][_o] * p.x1[4][_o] ) + + (p.s[8][_o] * p.y1[3][_o] + p.s[8][_o] * p.y1[3][_o] - p.x1[8][_o] * p.x1[3][_o] - p.x1[8][_o] * p.x1[3][_o] - p.x1[8][_o] * p.x1[3][_o] ) + + (p.s[9][_o] * p.y1[2][_o] + p.s[9][_o] * p.y1[2][_o] - p.x1[9][_o] * p.x1[2][_o] - p.x1[9][_o] * p.x1[2][_o] - p.x1[9][_o] * p.x1[2][_o] ) + + (p.s[10][_o] * p.y1[1][_o] + p.s[10][_o] * p.y1[1][_o] - p.x1[10][_o] * p.x1[1][_o] - p.x1[10][_o] * p.x1[1][_o] - p.x1[10][_o] * p.x1[1][_o] ) + + (p.s[11][_o] * p.y1[0][_o] + p.s[11][_o] * p.y1[0][_o] - p.x1[11][_o] * p.x1[0][_o] - p.x1[11][_o] * p.x1[0][_o] - p.x1[11][_o] * p.x1[0][_o] )); + + case 12: return ( + (p.s[0][_o] * p.y1[12][_o] + p.s[0][_o] * p.y1[12][_o] - p.x1[0][_o] * p.x1[12][_o] - p.x1[0][_o] * p.x1[12][_o] - p.x1[0][_o] * p.x1[12][_o] + 0xffffn * p.q0[12][_o]) + + (p.s[1][_o] * p.y1[11][_o] + p.s[1][_o] * p.y1[11][_o] - p.x1[1][_o] * p.x1[11][_o] - p.x1[1][_o] * p.x1[11][_o] - p.x1[1][_o] * p.x1[11][_o] + 0xffffn * p.q0[11][_o]) + + (p.s[2][_o] * p.y1[10][_o] + p.s[2][_o] * p.y1[10][_o] - p.x1[2][_o] * p.x1[10][_o] - p.x1[2][_o] * p.x1[10][_o] - p.x1[2][_o] * p.x1[10][_o] + 0xffffn * p.q0[10][_o]) + + (p.s[3][_o] * p.y1[9][_o] + p.s[3][_o] * p.y1[9][_o] - p.x1[3][_o] * p.x1[9][_o] - p.x1[3][_o] * p.x1[9][_o] - p.x1[3][_o] * p.x1[9][_o] + 0xffffn * p.q0[9][_o] ) + + (p.s[4][_o] * p.y1[8][_o] + p.s[4][_o] * p.y1[8][_o] - p.x1[4][_o] * p.x1[8][_o] - p.x1[4][_o] * p.x1[8][_o] - p.x1[4][_o] * p.x1[8][_o] + 0xffffn * p.q0[8][_o] ) + + (p.s[5][_o] * p.y1[7][_o] + p.s[5][_o] * p.y1[7][_o] - p.x1[5][_o] * p.x1[7][_o] - p.x1[5][_o] * p.x1[7][_o] - p.x1[5][_o] * p.x1[7][_o] + 0xffffn * p.q0[7][_o] ) + + (p.s[6][_o] * p.y1[6][_o] + p.s[6][_o] * p.y1[6][_o] - p.x1[6][_o] * p.x1[6][_o] - p.x1[6][_o] * p.x1[6][_o] - p.x1[6][_o] * p.x1[6][_o] ) + + (p.s[7][_o] * p.y1[5][_o] + p.s[7][_o] * p.y1[5][_o] - p.x1[7][_o] * p.x1[5][_o] - p.x1[7][_o] * p.x1[5][_o] - p.x1[7][_o] * p.x1[5][_o] ) + + (p.s[8][_o] * p.y1[4][_o] + p.s[8][_o] * p.y1[4][_o] - p.x1[8][_o] * p.x1[4][_o] - p.x1[8][_o] * p.x1[4][_o] - p.x1[8][_o] * p.x1[4][_o] ) + + (p.s[9][_o] * p.y1[3][_o] + p.s[9][_o] * p.y1[3][_o] - p.x1[9][_o] * p.x1[3][_o] - p.x1[9][_o] * p.x1[3][_o] - p.x1[9][_o] * p.x1[3][_o] ) + + (p.s[10][_o] * p.y1[2][_o] + p.s[10][_o] * p.y1[2][_o] - p.x1[10][_o] * p.x1[2][_o] - p.x1[10][_o] * p.x1[2][_o] - p.x1[10][_o] * p.x1[2][_o] ) + + (p.s[11][_o] * p.y1[1][_o] + p.s[11][_o] * p.y1[1][_o] - p.x1[11][_o] * p.x1[1][_o] - p.x1[11][_o] * p.x1[1][_o] - p.x1[11][_o] * p.x1[1][_o] ) + + (p.s[12][_o] * p.y1[0][_o] + p.s[12][_o] * p.y1[0][_o] - p.x1[12][_o] * p.x1[0][_o] - p.x1[12][_o] * p.x1[0][_o] - p.x1[12][_o] * p.x1[0][_o] ) + + p.q0[0][_o] - 0x1n ); + + case 13: return ( + (p.s[0][_o] * p.y1[13][_o] + p.s[0][_o] * p.y1[13][_o] - p.x1[0][_o] * p.x1[13][_o] - p.x1[0][_o] * p.x1[13][_o] - p.x1[0][_o] * p.x1[13][_o] + 0xffffn * p.q0[13][_o]) + + (p.s[1][_o] * p.y1[12][_o] + p.s[1][_o] * p.y1[12][_o] - p.x1[1][_o] * p.x1[12][_o] - p.x1[1][_o] * p.x1[12][_o] - p.x1[1][_o] * p.x1[12][_o] + 0xffffn * p.q0[12][_o]) + + (p.s[2][_o] * p.y1[11][_o] + p.s[2][_o] * p.y1[11][_o] - p.x1[2][_o] * p.x1[11][_o] - p.x1[2][_o] * p.x1[11][_o] - p.x1[2][_o] * p.x1[11][_o] + 0xffffn * p.q0[11][_o]) + + (p.s[3][_o] * p.y1[10][_o] + p.s[3][_o] * p.y1[10][_o] - p.x1[3][_o] * p.x1[10][_o] - p.x1[3][_o] * p.x1[10][_o] - p.x1[3][_o] * p.x1[10][_o] + 0xffffn * p.q0[10][_o]) + + (p.s[4][_o] * p.y1[9][_o] + p.s[4][_o] * p.y1[9][_o] - p.x1[4][_o] * p.x1[9][_o] - p.x1[4][_o] * p.x1[9][_o] - p.x1[4][_o] * p.x1[9][_o] + 0xffffn * p.q0[9][_o] ) + + (p.s[5][_o] * p.y1[8][_o] + p.s[5][_o] * p.y1[8][_o] - p.x1[5][_o] * p.x1[8][_o] - p.x1[5][_o] * p.x1[8][_o] - p.x1[5][_o] * p.x1[8][_o] + 0xffffn * p.q0[8][_o] ) + + (p.s[6][_o] * p.y1[7][_o] + p.s[6][_o] * p.y1[7][_o] - p.x1[6][_o] * p.x1[7][_o] - p.x1[6][_o] * p.x1[7][_o] - p.x1[6][_o] * p.x1[7][_o] ) + + (p.s[7][_o] * p.y1[6][_o] + p.s[7][_o] * p.y1[6][_o] - p.x1[7][_o] * p.x1[6][_o] - p.x1[7][_o] * p.x1[6][_o] - p.x1[7][_o] * p.x1[6][_o] ) + + (p.s[8][_o] * p.y1[5][_o] + p.s[8][_o] * p.y1[5][_o] - p.x1[8][_o] * p.x1[5][_o] - p.x1[8][_o] * p.x1[5][_o] - p.x1[8][_o] * p.x1[5][_o] ) + + (p.s[9][_o] * p.y1[4][_o] + p.s[9][_o] * p.y1[4][_o] - p.x1[9][_o] * p.x1[4][_o] - p.x1[9][_o] * p.x1[4][_o] - p.x1[9][_o] * p.x1[4][_o] ) + + (p.s[10][_o] * p.y1[3][_o] + p.s[10][_o] * p.y1[3][_o] - p.x1[10][_o] * p.x1[3][_o] - p.x1[10][_o] * p.x1[3][_o] - p.x1[10][_o] * p.x1[3][_o] ) + + (p.s[11][_o] * p.y1[2][_o] + p.s[11][_o] * p.y1[2][_o] - p.x1[11][_o] * p.x1[2][_o] - p.x1[11][_o] * p.x1[2][_o] - p.x1[11][_o] * p.x1[2][_o] ) + + (p.s[12][_o] * p.y1[1][_o] + p.s[12][_o] * p.y1[1][_o] - p.x1[12][_o] * p.x1[1][_o] - p.x1[12][_o] * p.x1[1][_o] - p.x1[12][_o] * p.x1[1][_o] ) + + (p.s[13][_o] * p.y1[0][_o] + p.s[13][_o] * p.y1[0][_o] - p.x1[13][_o] * p.x1[0][_o] - p.x1[13][_o] * p.x1[0][_o] - p.x1[13][_o] * p.x1[0][_o] ) + + p.q0[1][_o] ); + + case 14: return ( + (p.s[0][_o] * p.y1[14][_o] + p.s[0][_o] * p.y1[14][_o] - p.x1[0][_o] * p.x1[14][_o] - p.x1[0][_o] * p.x1[14][_o] - p.x1[0][_o] * p.x1[14][_o] + 0xffffn * p.q0[14][_o]) + + (p.s[1][_o] * p.y1[13][_o] + p.s[1][_o] * p.y1[13][_o] - p.x1[1][_o] * p.x1[13][_o] - p.x1[1][_o] * p.x1[13][_o] - p.x1[1][_o] * p.x1[13][_o] + 0xffffn * p.q0[13][_o]) + + (p.s[2][_o] * p.y1[12][_o] + p.s[2][_o] * p.y1[12][_o] - p.x1[2][_o] * p.x1[12][_o] - p.x1[2][_o] * p.x1[12][_o] - p.x1[2][_o] * p.x1[12][_o] + 0xffffn * p.q0[12][_o]) + + (p.s[3][_o] * p.y1[11][_o] + p.s[3][_o] * p.y1[11][_o] - p.x1[3][_o] * p.x1[11][_o] - p.x1[3][_o] * p.x1[11][_o] - p.x1[3][_o] * p.x1[11][_o] + 0xffffn * p.q0[11][_o]) + + (p.s[4][_o] * p.y1[10][_o] + p.s[4][_o] * p.y1[10][_o] - p.x1[4][_o] * p.x1[10][_o] - p.x1[4][_o] * p.x1[10][_o] - p.x1[4][_o] * p.x1[10][_o] + 0xffffn * p.q0[10][_o]) + + (p.s[5][_o] * p.y1[9][_o] + p.s[5][_o] * p.y1[9][_o] - p.x1[5][_o] * p.x1[9][_o] - p.x1[5][_o] * p.x1[9][_o] - p.x1[5][_o] * p.x1[9][_o] + 0xffffn * p.q0[9][_o] ) + + (p.s[6][_o] * p.y1[8][_o] + p.s[6][_o] * p.y1[8][_o] - p.x1[6][_o] * p.x1[8][_o] - p.x1[6][_o] * p.x1[8][_o] - p.x1[6][_o] * p.x1[8][_o] ) + + (p.s[7][_o] * p.y1[7][_o] + p.s[7][_o] * p.y1[7][_o] - p.x1[7][_o] * p.x1[7][_o] - p.x1[7][_o] * p.x1[7][_o] - p.x1[7][_o] * p.x1[7][_o] ) + + (p.s[8][_o] * p.y1[6][_o] + p.s[8][_o] * p.y1[6][_o] - p.x1[8][_o] * p.x1[6][_o] - p.x1[8][_o] * p.x1[6][_o] - p.x1[8][_o] * p.x1[6][_o] ) + + (p.s[9][_o] * p.y1[5][_o] + p.s[9][_o] * p.y1[5][_o] - p.x1[9][_o] * p.x1[5][_o] - p.x1[9][_o] * p.x1[5][_o] - p.x1[9][_o] * p.x1[5][_o] ) + + (p.s[10][_o] * p.y1[4][_o] + p.s[10][_o] * p.y1[4][_o] - p.x1[10][_o] * p.x1[4][_o] - p.x1[10][_o] * p.x1[4][_o] - p.x1[10][_o] * p.x1[4][_o] ) + + (p.s[11][_o] * p.y1[3][_o] + p.s[11][_o] * p.y1[3][_o] - p.x1[11][_o] * p.x1[3][_o] - p.x1[11][_o] * p.x1[3][_o] - p.x1[11][_o] * p.x1[3][_o] ) + + (p.s[12][_o] * p.y1[2][_o] + p.s[12][_o] * p.y1[2][_o] - p.x1[12][_o] * p.x1[2][_o] - p.x1[12][_o] * p.x1[2][_o] - p.x1[12][_o] * p.x1[2][_o] ) + + (p.s[13][_o] * p.y1[1][_o] + p.s[13][_o] * p.y1[1][_o] - p.x1[13][_o] * p.x1[1][_o] - p.x1[13][_o] * p.x1[1][_o] - p.x1[13][_o] * p.x1[1][_o] ) + + (p.s[14][_o] * p.y1[0][_o] + p.s[14][_o] * p.y1[0][_o] - p.x1[14][_o] * p.x1[0][_o] - p.x1[14][_o] * p.x1[0][_o] - p.x1[14][_o] * p.x1[0][_o] + 0xffffn * p.q0[0][_o] ) + + p.q0[2][_o] - 0xffffn ); + + case 15: return ( + (p.s[0][_o] * p.y1[15][_o] + p.s[0][_o] * p.y1[15][_o] - p.x1[0][_o] * p.x1[15][_o] - p.x1[0][_o] * p.x1[15][_o] - p.x1[0][_o] * p.x1[15][_o] + 0xffffn * p.q0[15][_o]) + + (p.s[1][_o] * p.y1[14][_o] + p.s[1][_o] * p.y1[14][_o] - p.x1[1][_o] * p.x1[14][_o] - p.x1[1][_o] * p.x1[14][_o] - p.x1[1][_o] * p.x1[14][_o] + 0xffffn * p.q0[14][_o]) + + (p.s[2][_o] * p.y1[13][_o] + p.s[2][_o] * p.y1[13][_o] - p.x1[2][_o] * p.x1[13][_o] - p.x1[2][_o] * p.x1[13][_o] - p.x1[2][_o] * p.x1[13][_o] + 0xffffn * p.q0[13][_o]) + + (p.s[3][_o] * p.y1[12][_o] + p.s[3][_o] * p.y1[12][_o] - p.x1[3][_o] * p.x1[12][_o] - p.x1[3][_o] * p.x1[12][_o] - p.x1[3][_o] * p.x1[12][_o] + 0xffffn * p.q0[12][_o]) + + (p.s[4][_o] * p.y1[11][_o] + p.s[4][_o] * p.y1[11][_o] - p.x1[4][_o] * p.x1[11][_o] - p.x1[4][_o] * p.x1[11][_o] - p.x1[4][_o] * p.x1[11][_o] + 0xffffn * p.q0[11][_o]) + + (p.s[5][_o] * p.y1[10][_o] + p.s[5][_o] * p.y1[10][_o] - p.x1[5][_o] * p.x1[10][_o] - p.x1[5][_o] * p.x1[10][_o] - p.x1[5][_o] * p.x1[10][_o] + 0xffffn * p.q0[10][_o]) + + (p.s[6][_o] * p.y1[9][_o] + p.s[6][_o] * p.y1[9][_o] - p.x1[6][_o] * p.x1[9][_o] - p.x1[6][_o] * p.x1[9][_o] - p.x1[6][_o] * p.x1[9][_o] ) + + (p.s[7][_o] * p.y1[8][_o] + p.s[7][_o] * p.y1[8][_o] - p.x1[7][_o] * p.x1[8][_o] - p.x1[7][_o] * p.x1[8][_o] - p.x1[7][_o] * p.x1[8][_o] ) + + (p.s[8][_o] * p.y1[7][_o] + p.s[8][_o] * p.y1[7][_o] - p.x1[8][_o] * p.x1[7][_o] - p.x1[8][_o] * p.x1[7][_o] - p.x1[8][_o] * p.x1[7][_o] ) + + (p.s[9][_o] * p.y1[6][_o] + p.s[9][_o] * p.y1[6][_o] - p.x1[9][_o] * p.x1[6][_o] - p.x1[9][_o] * p.x1[6][_o] - p.x1[9][_o] * p.x1[6][_o] ) + + (p.s[10][_o] * p.y1[5][_o] + p.s[10][_o] * p.y1[5][_o] - p.x1[10][_o] * p.x1[5][_o] - p.x1[10][_o] * p.x1[5][_o] - p.x1[10][_o] * p.x1[5][_o] ) + + (p.s[11][_o] * p.y1[4][_o] + p.s[11][_o] * p.y1[4][_o] - p.x1[11][_o] * p.x1[4][_o] - p.x1[11][_o] * p.x1[4][_o] - p.x1[11][_o] * p.x1[4][_o] ) + + (p.s[12][_o] * p.y1[3][_o] + p.s[12][_o] * p.y1[3][_o] - p.x1[12][_o] * p.x1[3][_o] - p.x1[12][_o] * p.x1[3][_o] - p.x1[12][_o] * p.x1[3][_o] ) + + (p.s[13][_o] * p.y1[2][_o] + p.s[13][_o] * p.y1[2][_o] - p.x1[13][_o] * p.x1[2][_o] - p.x1[13][_o] * p.x1[2][_o] - p.x1[13][_o] * p.x1[2][_o] ) + + (p.s[14][_o] * p.y1[1][_o] + p.s[14][_o] * p.y1[1][_o] - p.x1[14][_o] * p.x1[1][_o] - p.x1[14][_o] * p.x1[1][_o] - p.x1[14][_o] * p.x1[1][_o] + 0xffffn * p.q0[1][_o] ) + + (p.s[15][_o] * p.y1[0][_o] + p.s[15][_o] * p.y1[0][_o] - p.x1[15][_o] * p.x1[0][_o] - p.x1[15][_o] * p.x1[0][_o] - p.x1[15][_o] * p.x1[0][_o] + 0xffffn * p.q0[0][_o] ) + + p.q0[3][_o] - 0xffffn ); + + case 16: return ( + (p.s[1][_o] * p.y1[15][_o] + p.s[1][_o] * p.y1[15][_o] - p.x1[1][_o] * p.x1[15][_o] - p.x1[1][_o] * p.x1[15][_o] - p.x1[1][_o] * p.x1[15][_o] + 0xffffn * p.q0[15][_o]) + + (p.s[2][_o] * p.y1[14][_o] + p.s[2][_o] * p.y1[14][_o] - p.x1[2][_o] * p.x1[14][_o] - p.x1[2][_o] * p.x1[14][_o] - p.x1[2][_o] * p.x1[14][_o] + 0xffffn * p.q0[14][_o]) + + (p.s[3][_o] * p.y1[13][_o] + p.s[3][_o] * p.y1[13][_o] - p.x1[3][_o] * p.x1[13][_o] - p.x1[3][_o] * p.x1[13][_o] - p.x1[3][_o] * p.x1[13][_o] + 0xffffn * p.q0[13][_o]) + + (p.s[4][_o] * p.y1[12][_o] + p.s[4][_o] * p.y1[12][_o] - p.x1[4][_o] * p.x1[12][_o] - p.x1[4][_o] * p.x1[12][_o] - p.x1[4][_o] * p.x1[12][_o] + 0xffffn * p.q0[12][_o]) + + (p.s[5][_o] * p.y1[11][_o] + p.s[5][_o] * p.y1[11][_o] - p.x1[5][_o] * p.x1[11][_o] - p.x1[5][_o] * p.x1[11][_o] - p.x1[5][_o] * p.x1[11][_o] + 0xffffn * p.q0[11][_o]) + + (p.s[6][_o] * p.y1[10][_o] + p.s[6][_o] * p.y1[10][_o] - p.x1[6][_o] * p.x1[10][_o] - p.x1[6][_o] * p.x1[10][_o] - p.x1[6][_o] * p.x1[10][_o]) + + (p.s[7][_o] * p.y1[9][_o] + p.s[7][_o] * p.y1[9][_o] - p.x1[7][_o] * p.x1[9][_o] - p.x1[7][_o] * p.x1[9][_o] - p.x1[7][_o] * p.x1[9][_o] ) + + (p.s[8][_o] * p.y1[8][_o] + p.s[8][_o] * p.y1[8][_o] - p.x1[8][_o] * p.x1[8][_o] - p.x1[8][_o] * p.x1[8][_o] - p.x1[8][_o] * p.x1[8][_o] ) + + (p.s[9][_o] * p.y1[7][_o] + p.s[9][_o] * p.y1[7][_o] - p.x1[9][_o] * p.x1[7][_o] - p.x1[9][_o] * p.x1[7][_o] - p.x1[9][_o] * p.x1[7][_o] ) + + (p.s[10][_o] * p.y1[6][_o] + p.s[10][_o] * p.y1[6][_o] - p.x1[10][_o] * p.x1[6][_o] - p.x1[10][_o] * p.x1[6][_o] - p.x1[10][_o] * p.x1[6][_o] ) + + (p.s[11][_o] * p.y1[5][_o] + p.s[11][_o] * p.y1[5][_o] - p.x1[11][_o] * p.x1[5][_o] - p.x1[11][_o] * p.x1[5][_o] - p.x1[11][_o] * p.x1[5][_o] ) + + (p.s[12][_o] * p.y1[4][_o] + p.s[12][_o] * p.y1[4][_o] - p.x1[12][_o] * p.x1[4][_o] - p.x1[12][_o] * p.x1[4][_o] - p.x1[12][_o] * p.x1[4][_o] ) + + (p.s[13][_o] * p.y1[3][_o] + p.s[13][_o] * p.y1[3][_o] - p.x1[13][_o] * p.x1[3][_o] - p.x1[13][_o] * p.x1[3][_o] - p.x1[13][_o] * p.x1[3][_o] ) + + (p.s[14][_o] * p.y1[2][_o] + p.s[14][_o] * p.y1[2][_o] - p.x1[14][_o] * p.x1[2][_o] - p.x1[14][_o] * p.x1[2][_o] - p.x1[14][_o] * p.x1[2][_o] + 0xffffn * p.q0[2][_o] ) + + (p.s[15][_o] * p.y1[1][_o] + p.s[15][_o] * p.y1[1][_o] - p.x1[15][_o] * p.x1[1][_o] - p.x1[15][_o] * p.x1[1][_o] - p.x1[15][_o] * p.x1[1][_o] + 0xffffn * p.q0[1][_o] ) + - 0x3fffcn + p.q0[4][_o] ); + + case 17: return ( + (p.s[2][_o] * p.y1[15][_o] + p.s[2][_o] * p.y1[15][_o] - p.x1[2][_o] * p.x1[15][_o] - p.x1[2][_o] * p.x1[15][_o] - p.x1[2][_o] * p.x1[15][_o] + 0xffffn * p.q0[15][_o]) + + (p.s[3][_o] * p.y1[14][_o] + p.s[3][_o] * p.y1[14][_o] - p.x1[3][_o] * p.x1[14][_o] - p.x1[3][_o] * p.x1[14][_o] - p.x1[3][_o] * p.x1[14][_o] + 0xffffn * p.q0[14][_o]) + + (p.s[4][_o] * p.y1[13][_o] + p.s[4][_o] * p.y1[13][_o] - p.x1[4][_o] * p.x1[13][_o] - p.x1[4][_o] * p.x1[13][_o] - p.x1[4][_o] * p.x1[13][_o] + 0xffffn * p.q0[13][_o]) + + (p.s[5][_o] * p.y1[12][_o] + p.s[5][_o] * p.y1[12][_o] - p.x1[5][_o] * p.x1[12][_o] - p.x1[5][_o] * p.x1[12][_o] - p.x1[5][_o] * p.x1[12][_o] + 0xffffn * p.q0[12][_o]) + + (p.s[6][_o] * p.y1[11][_o] + p.s[6][_o] * p.y1[11][_o] - p.x1[6][_o] * p.x1[11][_o] - p.x1[6][_o] * p.x1[11][_o] - p.x1[6][_o] * p.x1[11][_o]) + + (p.s[7][_o] * p.y1[10][_o] + p.s[7][_o] * p.y1[10][_o] - p.x1[7][_o] * p.x1[10][_o] - p.x1[7][_o] * p.x1[10][_o] - p.x1[7][_o] * p.x1[10][_o]) + + (p.s[8][_o] * p.y1[9][_o] + p.s[8][_o] * p.y1[9][_o] - p.x1[8][_o] * p.x1[9][_o] - p.x1[8][_o] * p.x1[9][_o] - p.x1[8][_o] * p.x1[9][_o] ) + + (p.s[9][_o] * p.y1[8][_o] + p.s[9][_o] * p.y1[8][_o] - p.x1[9][_o] * p.x1[8][_o] - p.x1[9][_o] * p.x1[8][_o] - p.x1[9][_o] * p.x1[8][_o] ) + + (p.s[10][_o] * p.y1[7][_o] + p.s[10][_o] * p.y1[7][_o] - p.x1[10][_o] * p.x1[7][_o] - p.x1[10][_o] * p.x1[7][_o] - p.x1[10][_o] * p.x1[7][_o] ) + + (p.s[11][_o] * p.y1[6][_o] + p.s[11][_o] * p.y1[6][_o] - p.x1[11][_o] * p.x1[6][_o] - p.x1[11][_o] * p.x1[6][_o] - p.x1[11][_o] * p.x1[6][_o] ) + + (p.s[12][_o] * p.y1[5][_o] + p.s[12][_o] * p.y1[5][_o] - p.x1[12][_o] * p.x1[5][_o] - p.x1[12][_o] * p.x1[5][_o] - p.x1[12][_o] * p.x1[5][_o] ) + + (p.s[13][_o] * p.y1[4][_o] + p.s[13][_o] * p.y1[4][_o] - p.x1[13][_o] * p.x1[4][_o] - p.x1[13][_o] * p.x1[4][_o] - p.x1[13][_o] * p.x1[4][_o] ) + + (p.s[14][_o] * p.y1[3][_o] + p.s[14][_o] * p.y1[3][_o] - p.x1[14][_o] * p.x1[3][_o] - p.x1[14][_o] * p.x1[3][_o] - p.x1[14][_o] * p.x1[3][_o] + 0xffffn * p.q0[3][_o] ) + + (p.s[15][_o] * p.y1[2][_o] + p.s[15][_o] * p.y1[2][_o] - p.x1[15][_o] * p.x1[2][_o] - p.x1[15][_o] * p.x1[2][_o] - p.x1[15][_o] * p.x1[2][_o] + 0xffffn * p.q0[2][_o] ) + - 0x3fffcn + p.q0[5][_o] ); + + case 18: return ( + (p.s[3][_o] * p.y1[15][_o] + p.s[3][_o] * p.y1[15][_o] - p.x1[3][_o] * p.x1[15][_o] - p.x1[3][_o] * p.x1[15][_o] - p.x1[3][_o] * p.x1[15][_o] + 0xffffn * p.q0[15][_o]) + + (p.s[4][_o] * p.y1[14][_o] + p.s[4][_o] * p.y1[14][_o] - p.x1[4][_o] * p.x1[14][_o] - p.x1[4][_o] * p.x1[14][_o] - p.x1[4][_o] * p.x1[14][_o] + 0xffffn * p.q0[14][_o]) + + (p.s[5][_o] * p.y1[13][_o] + p.s[5][_o] * p.y1[13][_o] - p.x1[5][_o] * p.x1[13][_o] - p.x1[5][_o] * p.x1[13][_o] - p.x1[5][_o] * p.x1[13][_o] + 0xffffn * p.q0[13][_o]) + + (p.s[6][_o] * p.y1[12][_o] + p.s[6][_o] * p.y1[12][_o] - p.x1[6][_o] * p.x1[12][_o] - p.x1[6][_o] * p.x1[12][_o] - p.x1[6][_o] * p.x1[12][_o]) + + (p.s[7][_o] * p.y1[11][_o] + p.s[7][_o] * p.y1[11][_o] - p.x1[7][_o] * p.x1[11][_o] - p.x1[7][_o] * p.x1[11][_o] - p.x1[7][_o] * p.x1[11][_o]) + + (p.s[8][_o] * p.y1[10][_o] + p.s[8][_o] * p.y1[10][_o] - p.x1[8][_o] * p.x1[10][_o] - p.x1[8][_o] * p.x1[10][_o] - p.x1[8][_o] * p.x1[10][_o]) + + (p.s[9][_o] * p.y1[9][_o] + p.s[9][_o] * p.y1[9][_o] - p.x1[9][_o] * p.x1[9][_o] - p.x1[9][_o] * p.x1[9][_o] - p.x1[9][_o] * p.x1[9][_o] ) + + (p.s[10][_o] * p.y1[8][_o] + p.s[10][_o] * p.y1[8][_o] - p.x1[10][_o] * p.x1[8][_o] - p.x1[10][_o] * p.x1[8][_o] - p.x1[10][_o] * p.x1[8][_o] ) + + (p.s[11][_o] * p.y1[7][_o] + p.s[11][_o] * p.y1[7][_o] - p.x1[11][_o] * p.x1[7][_o] - p.x1[11][_o] * p.x1[7][_o] - p.x1[11][_o] * p.x1[7][_o] ) + + (p.s[12][_o] * p.y1[6][_o] + p.s[12][_o] * p.y1[6][_o] - p.x1[12][_o] * p.x1[6][_o] - p.x1[12][_o] * p.x1[6][_o] - p.x1[12][_o] * p.x1[6][_o] ) + + (p.s[13][_o] * p.y1[5][_o] + p.s[13][_o] * p.y1[5][_o] - p.x1[13][_o] * p.x1[5][_o] - p.x1[13][_o] * p.x1[5][_o] - p.x1[13][_o] * p.x1[5][_o] ) + + (p.s[14][_o] * p.y1[4][_o] + p.s[14][_o] * p.y1[4][_o] - p.x1[14][_o] * p.x1[4][_o] - p.x1[14][_o] * p.x1[4][_o] - p.x1[14][_o] * p.x1[4][_o] + 0xffffn * p.q0[4][_o] ) + + (p.s[15][_o] * p.y1[3][_o] + p.s[15][_o] * p.y1[3][_o] - p.x1[15][_o] * p.x1[3][_o] - p.x1[15][_o] * p.x1[3][_o] - p.x1[15][_o] * p.x1[3][_o] + 0xffffn * p.q0[3][_o] ) + - 0x3fffcn + p.q0[6][_o] ); + + case 19: return ( + (p.s[4][_o] * p.y1[15][_o] + p.s[4][_o] * p.y1[15][_o] - p.x1[4][_o] * p.x1[15][_o] - p.x1[4][_o] * p.x1[15][_o] - p.x1[4][_o] * p.x1[15][_o] + 0xffffn * p.q0[15][_o]) + + (p.s[5][_o] * p.y1[14][_o] + p.s[5][_o] * p.y1[14][_o] - p.x1[5][_o] * p.x1[14][_o] - p.x1[5][_o] * p.x1[14][_o] - p.x1[5][_o] * p.x1[14][_o] + 0xffffn * p.q0[14][_o]) + + (p.s[6][_o] * p.y1[13][_o] + p.s[6][_o] * p.y1[13][_o] - p.x1[6][_o] * p.x1[13][_o] - p.x1[6][_o] * p.x1[13][_o] - p.x1[6][_o] * p.x1[13][_o]) + + (p.s[7][_o] * p.y1[12][_o] + p.s[7][_o] * p.y1[12][_o] - p.x1[7][_o] * p.x1[12][_o] - p.x1[7][_o] * p.x1[12][_o] - p.x1[7][_o] * p.x1[12][_o]) + + (p.s[8][_o] * p.y1[11][_o] + p.s[8][_o] * p.y1[11][_o] - p.x1[8][_o] * p.x1[11][_o] - p.x1[8][_o] * p.x1[11][_o] - p.x1[8][_o] * p.x1[11][_o]) + + (p.s[9][_o] * p.y1[10][_o] + p.s[9][_o] * p.y1[10][_o] - p.x1[9][_o] * p.x1[10][_o] - p.x1[9][_o] * p.x1[10][_o] - p.x1[9][_o] * p.x1[10][_o]) + + (p.s[10][_o] * p.y1[9][_o] + p.s[10][_o] * p.y1[9][_o] - p.x1[10][_o] * p.x1[9][_o] - p.x1[10][_o] * p.x1[9][_o] - p.x1[10][_o] * p.x1[9][_o] ) + + (p.s[11][_o] * p.y1[8][_o] + p.s[11][_o] * p.y1[8][_o] - p.x1[11][_o] * p.x1[8][_o] - p.x1[11][_o] * p.x1[8][_o] - p.x1[11][_o] * p.x1[8][_o] ) + + (p.s[12][_o] * p.y1[7][_o] + p.s[12][_o] * p.y1[7][_o] - p.x1[12][_o] * p.x1[7][_o] - p.x1[12][_o] * p.x1[7][_o] - p.x1[12][_o] * p.x1[7][_o] ) + + (p.s[13][_o] * p.y1[6][_o] + p.s[13][_o] * p.y1[6][_o] - p.x1[13][_o] * p.x1[6][_o] - p.x1[13][_o] * p.x1[6][_o] - p.x1[13][_o] * p.x1[6][_o] ) + + (p.s[14][_o] * p.y1[5][_o] + p.s[14][_o] * p.y1[5][_o] - p.x1[14][_o] * p.x1[5][_o] - p.x1[14][_o] * p.x1[5][_o] - p.x1[14][_o] * p.x1[5][_o] + 0xffffn * p.q0[5][_o] ) + + (p.s[15][_o] * p.y1[4][_o] + p.s[15][_o] * p.y1[4][_o] - p.x1[15][_o] * p.x1[4][_o] - p.x1[15][_o] * p.x1[4][_o] - p.x1[15][_o] * p.x1[4][_o] + 0xffffn * p.q0[4][_o] ) + - 0x3fffcn + p.q0[7][_o] ); + + case 20: return ( + (p.s[5][_o] * p.y1[15][_o] + p.s[5][_o] * p.y1[15][_o] - p.x1[5][_o] * p.x1[15][_o] - p.x1[5][_o] * p.x1[15][_o] - p.x1[5][_o] * p.x1[15][_o] + 0xffffn * p.q0[15][_o]) + + (p.s[6][_o] * p.y1[14][_o] + p.s[6][_o] * p.y1[14][_o] - p.x1[6][_o] * p.x1[14][_o] - p.x1[6][_o] * p.x1[14][_o] - p.x1[6][_o] * p.x1[14][_o]) + + (p.s[7][_o] * p.y1[13][_o] + p.s[7][_o] * p.y1[13][_o] - p.x1[7][_o] * p.x1[13][_o] - p.x1[7][_o] * p.x1[13][_o] - p.x1[7][_o] * p.x1[13][_o]) + + (p.s[8][_o] * p.y1[12][_o] + p.s[8][_o] * p.y1[12][_o] - p.x1[8][_o] * p.x1[12][_o] - p.x1[8][_o] * p.x1[12][_o] - p.x1[8][_o] * p.x1[12][_o]) + + (p.s[9][_o] * p.y1[11][_o] + p.s[9][_o] * p.y1[11][_o] - p.x1[9][_o] * p.x1[11][_o] - p.x1[9][_o] * p.x1[11][_o] - p.x1[9][_o] * p.x1[11][_o]) + + (p.s[10][_o] * p.y1[10][_o] + p.s[10][_o] * p.y1[10][_o] - p.x1[10][_o] * p.x1[10][_o] - p.x1[10][_o] * p.x1[10][_o] - p.x1[10][_o] * p.x1[10][_o]) + + (p.s[11][_o] * p.y1[9][_o] + p.s[11][_o] * p.y1[9][_o] - p.x1[11][_o] * p.x1[9][_o] - p.x1[11][_o] * p.x1[9][_o] - p.x1[11][_o] * p.x1[9][_o] ) + + (p.s[12][_o] * p.y1[8][_o] + p.s[12][_o] * p.y1[8][_o] - p.x1[12][_o] * p.x1[8][_o] - p.x1[12][_o] * p.x1[8][_o] - p.x1[12][_o] * p.x1[8][_o] ) + + (p.s[13][_o] * p.y1[7][_o] + p.s[13][_o] * p.y1[7][_o] - p.x1[13][_o] * p.x1[7][_o] - p.x1[13][_o] * p.x1[7][_o] - p.x1[13][_o] * p.x1[7][_o] ) + + (p.s[14][_o] * p.y1[6][_o] + p.s[14][_o] * p.y1[6][_o] - p.x1[14][_o] * p.x1[6][_o] - p.x1[14][_o] * p.x1[6][_o] - p.x1[14][_o] * p.x1[6][_o] + 0xffffn * p.q0[6][_o] ) + + (p.s[15][_o] * p.y1[5][_o] + p.s[15][_o] * p.y1[5][_o] - p.x1[15][_o] * p.x1[5][_o] - p.x1[15][_o] * p.x1[5][_o] - p.x1[15][_o] * p.x1[5][_o] + 0xffffn * p.q0[5][_o] ) + - 0x3fffcn + p.q0[8][_o] ); + + case 21: return ( + (p.s[6][_o] * p.y1[15][_o] + p.s[6][_o] * p.y1[15][_o] - p.x1[6][_o] * p.x1[15][_o] - p.x1[6][_o] * p.x1[15][_o] - p.x1[6][_o] * p.x1[15][_o]) + + (p.s[7][_o] * p.y1[14][_o] + p.s[7][_o] * p.y1[14][_o] - p.x1[7][_o] * p.x1[14][_o] - p.x1[7][_o] * p.x1[14][_o] - p.x1[7][_o] * p.x1[14][_o]) + + (p.s[8][_o] * p.y1[13][_o] + p.s[8][_o] * p.y1[13][_o] - p.x1[8][_o] * p.x1[13][_o] - p.x1[8][_o] * p.x1[13][_o] - p.x1[8][_o] * p.x1[13][_o]) + + (p.s[9][_o] * p.y1[12][_o] + p.s[9][_o] * p.y1[12][_o] - p.x1[9][_o] * p.x1[12][_o] - p.x1[9][_o] * p.x1[12][_o] - p.x1[9][_o] * p.x1[12][_o]) + + (p.s[10][_o] * p.y1[11][_o] + p.s[10][_o] * p.y1[11][_o] - p.x1[10][_o] * p.x1[11][_o] - p.x1[10][_o] * p.x1[11][_o] - p.x1[10][_o] * p.x1[11][_o]) + + (p.s[11][_o] * p.y1[10][_o] + p.s[11][_o] * p.y1[10][_o] - p.x1[11][_o] * p.x1[10][_o] - p.x1[11][_o] * p.x1[10][_o] - p.x1[11][_o] * p.x1[10][_o]) + + (p.s[12][_o] * p.y1[9][_o] + p.s[12][_o] * p.y1[9][_o] - p.x1[12][_o] * p.x1[9][_o] - p.x1[12][_o] * p.x1[9][_o] - p.x1[12][_o] * p.x1[9][_o] ) + + (p.s[13][_o] * p.y1[8][_o] + p.s[13][_o] * p.y1[8][_o] - p.x1[13][_o] * p.x1[8][_o] - p.x1[13][_o] * p.x1[8][_o] - p.x1[13][_o] * p.x1[8][_o] ) + + (p.s[14][_o] * p.y1[7][_o] + p.s[14][_o] * p.y1[7][_o] - p.x1[14][_o] * p.x1[7][_o] - p.x1[14][_o] * p.x1[7][_o] - p.x1[14][_o] * p.x1[7][_o] + 0xffffn * p.q0[7][_o] ) + + (p.s[15][_o] * p.y1[6][_o] + p.s[15][_o] * p.y1[6][_o] - p.x1[15][_o] * p.x1[6][_o] - p.x1[15][_o] * p.x1[6][_o] - p.x1[15][_o] * p.x1[6][_o] + 0xffffn * p.q0[6][_o] ) + - 0x3fffcn + p.q0[9][_o] ); + + case 22: return ( + (p.s[7][_o] * p.y1[15][_o] + p.s[7][_o] * p.y1[15][_o] - p.x1[7][_o] * p.x1[15][_o] - p.x1[7][_o] * p.x1[15][_o] - p.x1[7][_o] * p.x1[15][_o]) + + (p.s[8][_o] * p.y1[14][_o] + p.s[8][_o] * p.y1[14][_o] - p.x1[8][_o] * p.x1[14][_o] - p.x1[8][_o] * p.x1[14][_o] - p.x1[8][_o] * p.x1[14][_o]) + + (p.s[9][_o] * p.y1[13][_o] + p.s[9][_o] * p.y1[13][_o] - p.x1[9][_o] * p.x1[13][_o] - p.x1[9][_o] * p.x1[13][_o] - p.x1[9][_o] * p.x1[13][_o]) + + (p.s[10][_o] * p.y1[12][_o] + p.s[10][_o] * p.y1[12][_o] - p.x1[10][_o] * p.x1[12][_o] - p.x1[10][_o] * p.x1[12][_o] - p.x1[10][_o] * p.x1[12][_o]) + + (p.s[11][_o] * p.y1[11][_o] + p.s[11][_o] * p.y1[11][_o] - p.x1[11][_o] * p.x1[11][_o] - p.x1[11][_o] * p.x1[11][_o] - p.x1[11][_o] * p.x1[11][_o]) + + (p.s[12][_o] * p.y1[10][_o] + p.s[12][_o] * p.y1[10][_o] - p.x1[12][_o] * p.x1[10][_o] - p.x1[12][_o] * p.x1[10][_o] - p.x1[12][_o] * p.x1[10][_o]) + + (p.s[13][_o] * p.y1[9][_o] + p.s[13][_o] * p.y1[9][_o] - p.x1[13][_o] * p.x1[9][_o] - p.x1[13][_o] * p.x1[9][_o] - p.x1[13][_o] * p.x1[9][_o] ) + + (p.s[14][_o] * p.y1[8][_o] + p.s[14][_o] * p.y1[8][_o] - p.x1[14][_o] * p.x1[8][_o] - p.x1[14][_o] * p.x1[8][_o] - p.x1[14][_o] * p.x1[8][_o] + 0xffffn * p.q0[8][_o] ) + + (p.s[15][_o] * p.y1[7][_o] + p.s[15][_o] * p.y1[7][_o] - p.x1[15][_o] * p.x1[7][_o] - p.x1[15][_o] * p.x1[7][_o] - p.x1[15][_o] * p.x1[7][_o] + 0xffffn * p.q0[7][_o] ) + + p.q0[10][_o]); + + case 23: return ( + (p.s[8][_o] * p.y1[15][_o] + p.s[8][_o] * p.y1[15][_o] - p.x1[8][_o] * p.x1[15][_o] - p.x1[8][_o] * p.x1[15][_o] - p.x1[8][_o] * p.x1[15][_o]) + + (p.s[9][_o] * p.y1[14][_o] + p.s[9][_o] * p.y1[14][_o] - p.x1[9][_o] * p.x1[14][_o] - p.x1[9][_o] * p.x1[14][_o] - p.x1[9][_o] * p.x1[14][_o]) + + (p.s[10][_o] * p.y1[13][_o] + p.s[10][_o] * p.y1[13][_o] - p.x1[10][_o] * p.x1[13][_o] - p.x1[10][_o] * p.x1[13][_o] - p.x1[10][_o] * p.x1[13][_o]) + + (p.s[11][_o] * p.y1[12][_o] + p.s[11][_o] * p.y1[12][_o] - p.x1[11][_o] * p.x1[12][_o] - p.x1[11][_o] * p.x1[12][_o] - p.x1[11][_o] * p.x1[12][_o]) + + (p.s[12][_o] * p.y1[11][_o] + p.s[12][_o] * p.y1[11][_o] - p.x1[12][_o] * p.x1[11][_o] - p.x1[12][_o] * p.x1[11][_o] - p.x1[12][_o] * p.x1[11][_o]) + + (p.s[13][_o] * p.y1[10][_o] + p.s[13][_o] * p.y1[10][_o] - p.x1[13][_o] * p.x1[10][_o] - p.x1[13][_o] * p.x1[10][_o] - p.x1[13][_o] * p.x1[10][_o]) + + (p.s[14][_o] * p.y1[9][_o] + p.s[14][_o] * p.y1[9][_o] - p.x1[14][_o] * p.x1[9][_o] - p.x1[14][_o] * p.x1[9][_o] - p.x1[14][_o] * p.x1[9][_o] + 0xffffn * p.q0[9][_o] ) + + (p.s[15][_o] * p.y1[8][_o] + p.s[15][_o] * p.y1[8][_o] - p.x1[15][_o] * p.x1[8][_o] - p.x1[15][_o] * p.x1[8][_o] - p.x1[15][_o] * p.x1[8][_o] + 0xffffn * p.q0[8][_o] ) + + p.q0[11][_o]); + + case 24: return ( + (p.s[9][_o] * p.y1[15][_o] + p.s[9][_o] * p.y1[15][_o] - p.x1[9][_o] * p.x1[15][_o] - p.x1[9][_o] * p.x1[15][_o] - p.x1[9][_o] * p.x1[15][_o]) + + (p.s[10][_o] * p.y1[14][_o] + p.s[10][_o] * p.y1[14][_o] - p.x1[10][_o] * p.x1[14][_o] - p.x1[10][_o] * p.x1[14][_o] - p.x1[10][_o] * p.x1[14][_o]) + + (p.s[11][_o] * p.y1[13][_o] + p.s[11][_o] * p.y1[13][_o] - p.x1[11][_o] * p.x1[13][_o] - p.x1[11][_o] * p.x1[13][_o] - p.x1[11][_o] * p.x1[13][_o]) + + (p.s[12][_o] * p.y1[12][_o] + p.s[12][_o] * p.y1[12][_o] - p.x1[12][_o] * p.x1[12][_o] - p.x1[12][_o] * p.x1[12][_o] - p.x1[12][_o] * p.x1[12][_o]) + + (p.s[13][_o] * p.y1[11][_o] + p.s[13][_o] * p.y1[11][_o] - p.x1[13][_o] * p.x1[11][_o] - p.x1[13][_o] * p.x1[11][_o] - p.x1[13][_o] * p.x1[11][_o]) + + (p.s[14][_o] * p.y1[10][_o] + p.s[14][_o] * p.y1[10][_o] - p.x1[14][_o] * p.x1[10][_o] - p.x1[14][_o] * p.x1[10][_o] - p.x1[14][_o] * p.x1[10][_o] + 0xffffn * p.q0[10][_o]) + + (p.s[15][_o] * p.y1[9][_o] + p.s[15][_o] * p.y1[9][_o] - p.x1[15][_o] * p.x1[9][_o] - p.x1[15][_o] * p.x1[9][_o] - p.x1[15][_o] * p.x1[9][_o] + 0xffffn * p.q0[9][_o] ) + + p.q0[12][_o]); + + case 25: return ( + (p.s[10][_o] * p.y1[15][_o] + p.s[10][_o] * p.y1[15][_o] - p.x1[10][_o] * p.x1[15][_o] - p.x1[10][_o] * p.x1[15][_o] - p.x1[10][_o] * p.x1[15][_o]) + + (p.s[11][_o] * p.y1[14][_o] + p.s[11][_o] * p.y1[14][_o] - p.x1[11][_o] * p.x1[14][_o] - p.x1[11][_o] * p.x1[14][_o] - p.x1[11][_o] * p.x1[14][_o]) + + (p.s[12][_o] * p.y1[13][_o] + p.s[12][_o] * p.y1[13][_o] - p.x1[12][_o] * p.x1[13][_o] - p.x1[12][_o] * p.x1[13][_o] - p.x1[12][_o] * p.x1[13][_o]) + + (p.s[13][_o] * p.y1[12][_o] + p.s[13][_o] * p.y1[12][_o] - p.x1[13][_o] * p.x1[12][_o] - p.x1[13][_o] * p.x1[12][_o] - p.x1[13][_o] * p.x1[12][_o]) + + (p.s[14][_o] * p.y1[11][_o] + p.s[14][_o] * p.y1[11][_o] - p.x1[14][_o] * p.x1[11][_o] - p.x1[14][_o] * p.x1[11][_o] - p.x1[14][_o] * p.x1[11][_o] + 0xffffn * p.q0[11][_o]) + + (p.s[15][_o] * p.y1[10][_o] + p.s[15][_o] * p.y1[10][_o] - p.x1[15][_o] * p.x1[10][_o] - p.x1[15][_o] * p.x1[10][_o] - p.x1[15][_o] * p.x1[10][_o] + 0xffffn * p.q0[10][_o]) + + p.q0[13][_o]); + + case 26: return ( + (p.s[11][_o] * p.y1[15][_o] + p.s[11][_o] * p.y1[15][_o] - p.x1[11][_o] * p.x1[15][_o] - p.x1[11][_o] * p.x1[15][_o] - p.x1[11][_o] * p.x1[15][_o]) + + (p.s[12][_o] * p.y1[14][_o] + p.s[12][_o] * p.y1[14][_o] - p.x1[12][_o] * p.x1[14][_o] - p.x1[12][_o] * p.x1[14][_o] - p.x1[12][_o] * p.x1[14][_o]) + + (p.s[13][_o] * p.y1[13][_o] + p.s[13][_o] * p.y1[13][_o] - p.x1[13][_o] * p.x1[13][_o] - p.x1[13][_o] * p.x1[13][_o] - p.x1[13][_o] * p.x1[13][_o]) + + (p.s[14][_o] * p.y1[12][_o] + p.s[14][_o] * p.y1[12][_o] - p.x1[14][_o] * p.x1[12][_o] - p.x1[14][_o] * p.x1[12][_o] - p.x1[14][_o] * p.x1[12][_o] + 0xffffn * p.q0[12][_o]) + + (p.s[15][_o] * p.y1[11][_o] + p.s[15][_o] * p.y1[11][_o] - p.x1[15][_o] * p.x1[11][_o] - p.x1[15][_o] * p.x1[11][_o] - p.x1[15][_o] * p.x1[11][_o] + 0xffffn * p.q0[11][_o]) + + p.q0[14][_o]); + + case 27: return ( + (p.s[12][_o] * p.y1[15][_o] + p.s[12][_o] * p.y1[15][_o] - p.x1[12][_o] * p.x1[15][_o] - p.x1[12][_o] * p.x1[15][_o] - p.x1[12][_o] * p.x1[15][_o]) + + (p.s[13][_o] * p.y1[14][_o] + p.s[13][_o] * p.y1[14][_o] - p.x1[13][_o] * p.x1[14][_o] - p.x1[13][_o] * p.x1[14][_o] - p.x1[13][_o] * p.x1[14][_o]) + + (p.s[14][_o] * p.y1[13][_o] + p.s[14][_o] * p.y1[13][_o] - p.x1[14][_o] * p.x1[13][_o] - p.x1[14][_o] * p.x1[13][_o] - p.x1[14][_o] * p.x1[13][_o] + 0xffffn * p.q0[13][_o]) + + (p.s[15][_o] * p.y1[12][_o] + p.s[15][_o] * p.y1[12][_o] - p.x1[15][_o] * p.x1[12][_o] - p.x1[15][_o] * p.x1[12][_o] - p.x1[15][_o] * p.x1[12][_o] + 0xffffn * p.q0[12][_o]) + + p.q0[15][_o]); + + case 28: return ( + (p.s[13][_o] * p.y1[15][_o] + p.s[13][_o] * p.y1[15][_o] - p.x1[13][_o] * p.x1[15][_o] - p.x1[13][_o] * p.x1[15][_o] - p.x1[13][_o] * p.x1[15][_o]) + + (p.s[14][_o] * p.y1[14][_o] + p.s[14][_o] * p.y1[14][_o] - p.x1[14][_o] * p.x1[14][_o] - p.x1[14][_o] * p.x1[14][_o] - p.x1[14][_o] * p.x1[14][_o] + 0xffffn * p.q0[14][_o]) + + (p.s[15][_o] * p.y1[13][_o] + p.s[15][_o] * p.y1[13][_o] - p.x1[15][_o] * p.x1[13][_o] - p.x1[15][_o] * p.x1[13][_o] - p.x1[15][_o] * p.x1[13][_o] + 0xffffn * p.q0[13][_o]) + - 0x4n ); + + case 29: return ( + (p.s[14][_o] * p.y1[15][_o] + p.s[14][_o] * p.y1[15][_o] - p.x1[14][_o] * p.x1[15][_o] - p.x1[14][_o] * p.x1[15][_o] - p.x1[14][_o] * p.x1[15][_o] + 0xffffn * p.q0[15][_o]) + + (p.s[15][_o] * p.y1[14][_o] + p.s[15][_o] * p.y1[14][_o] - p.x1[15][_o] * p.x1[14][_o] - p.x1[15][_o] * p.x1[14][_o] - p.x1[15][_o] * p.x1[14][_o] + 0xffffn * p.q0[14][_o])); + + case 30: return ( + (p.s[15][_o] * p.y1[15][_o] + p.s[15][_o] * p.y1[15][_o] - p.x1[15][_o] * p.x1[15][_o] - p.x1[15][_o] * p.x1[15][_o] - p.x1[15][_o] * p.x1[15][_o] + 0xffffn * p.q0[15][_o]) + - 0x3fffcn); + + case 31: return ( - 0x3fffcn); + } + return 0n; +} diff --git a/src/sm/sm_arith/sm_arith_eq13.js b/src/sm/sm_arith/sm_arith_eq13.js new file mode 100644 index 00000000..cce4b8f4 --- /dev/null +++ b/src/sm/sm_arith/sm_arith_eq13.js @@ -0,0 +1,362 @@ +/* +* code generated with arith_eq_gen.js +* equation: s*s-x1-x2-x3-p*q1+p*offset +* +* p=0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff +* offset=0x4 +*/ + +module.exports.calculate = function (p, step, _o) +{ + switch(step) { + case 0: return ( + (p.s[0][_o] * p.s[0][_o] - 0xffffn * p.q1[0][_o] ) + + 0x3fffcn - p.x1[0][_o] - p.x2[0][_o] - p.x3[0][_o] ); + + case 1: return ( + (p.s[0][_o] * p.s[1][_o] - 0xffffn * p.q1[1][_o] ) + + (p.s[1][_o] * p.s[0][_o] - 0xffffn * p.q1[0][_o] ) + + 0x3fffcn - p.x1[1][_o] - p.x2[1][_o] - p.x3[1][_o] ); + + case 2: return ( + (p.s[0][_o] * p.s[2][_o] - 0xffffn * p.q1[2][_o] ) + + (p.s[1][_o] * p.s[1][_o] - 0xffffn * p.q1[1][_o] ) + + (p.s[2][_o] * p.s[0][_o] - 0xffffn * p.q1[0][_o] ) + + 0x3fffcn - p.x1[2][_o] - p.x2[2][_o] - p.x3[2][_o] ); + + case 3: return ( + (p.s[0][_o] * p.s[3][_o] - 0xffffn * p.q1[3][_o] ) + + (p.s[1][_o] * p.s[2][_o] - 0xffffn * p.q1[2][_o] ) + + (p.s[2][_o] * p.s[1][_o] - 0xffffn * p.q1[1][_o] ) + + (p.s[3][_o] * p.s[0][_o] - 0xffffn * p.q1[0][_o] ) + + 0x3fffcn - p.x1[3][_o] - p.x2[3][_o] - p.x3[3][_o] ); + + case 4: return ( + (p.s[0][_o] * p.s[4][_o] - 0xffffn * p.q1[4][_o] ) + + (p.s[1][_o] * p.s[3][_o] - 0xffffn * p.q1[3][_o] ) + + (p.s[2][_o] * p.s[2][_o] - 0xffffn * p.q1[2][_o] ) + + (p.s[3][_o] * p.s[1][_o] - 0xffffn * p.q1[1][_o] ) + + (p.s[4][_o] * p.s[0][_o] - 0xffffn * p.q1[0][_o] ) + + 0x3fffcn - p.x1[4][_o] - p.x2[4][_o] - p.x3[4][_o] ); + + case 5: return ( + (p.s[0][_o] * p.s[5][_o] - 0xffffn * p.q1[5][_o] ) + + (p.s[1][_o] * p.s[4][_o] - 0xffffn * p.q1[4][_o] ) + + (p.s[2][_o] * p.s[3][_o] - 0xffffn * p.q1[3][_o] ) + + (p.s[3][_o] * p.s[2][_o] - 0xffffn * p.q1[2][_o] ) + + (p.s[4][_o] * p.s[1][_o] - 0xffffn * p.q1[1][_o] ) + + (p.s[5][_o] * p.s[0][_o] - 0xffffn * p.q1[0][_o] ) + + 0x3fffcn - p.x1[5][_o] - p.x2[5][_o] - p.x3[5][_o] ); + + case 6: return ( + (p.s[0][_o] * p.s[6][_o] - 0xffffn * p.q1[6][_o] ) + + (p.s[1][_o] * p.s[5][_o] - 0xffffn * p.q1[5][_o] ) + + (p.s[2][_o] * p.s[4][_o] - 0xffffn * p.q1[4][_o] ) + + (p.s[3][_o] * p.s[3][_o] - 0xffffn * p.q1[3][_o] ) + + (p.s[4][_o] * p.s[2][_o] - 0xffffn * p.q1[2][_o] ) + + (p.s[5][_o] * p.s[1][_o] - 0xffffn * p.q1[1][_o] ) + + (p.s[6][_o] * p.s[0][_o] ) + - p.x1[6][_o] - p.x2[6][_o] - p.x3[6][_o] ); + + case 7: return ( + (p.s[0][_o] * p.s[7][_o] - 0xffffn * p.q1[7][_o] ) + + (p.s[1][_o] * p.s[6][_o] - 0xffffn * p.q1[6][_o] ) + + (p.s[2][_o] * p.s[5][_o] - 0xffffn * p.q1[5][_o] ) + + (p.s[3][_o] * p.s[4][_o] - 0xffffn * p.q1[4][_o] ) + + (p.s[4][_o] * p.s[3][_o] - 0xffffn * p.q1[3][_o] ) + + (p.s[5][_o] * p.s[2][_o] - 0xffffn * p.q1[2][_o] ) + + (p.s[6][_o] * p.s[1][_o] ) + + (p.s[7][_o] * p.s[0][_o] ) + - p.x1[7][_o] - p.x2[7][_o] - p.x3[7][_o] ); + + case 8: return ( + (p.s[0][_o] * p.s[8][_o] - 0xffffn * p.q1[8][_o] ) + + (p.s[1][_o] * p.s[7][_o] - 0xffffn * p.q1[7][_o] ) + + (p.s[2][_o] * p.s[6][_o] - 0xffffn * p.q1[6][_o] ) + + (p.s[3][_o] * p.s[5][_o] - 0xffffn * p.q1[5][_o] ) + + (p.s[4][_o] * p.s[4][_o] - 0xffffn * p.q1[4][_o] ) + + (p.s[5][_o] * p.s[3][_o] - 0xffffn * p.q1[3][_o] ) + + (p.s[6][_o] * p.s[2][_o] ) + + (p.s[7][_o] * p.s[1][_o] ) + + (p.s[8][_o] * p.s[0][_o] ) + - p.x1[8][_o] - p.x2[8][_o] - p.x3[8][_o] ); + + case 9: return ( + (p.s[0][_o] * p.s[9][_o] - 0xffffn * p.q1[9][_o] ) + + (p.s[1][_o] * p.s[8][_o] - 0xffffn * p.q1[8][_o] ) + + (p.s[2][_o] * p.s[7][_o] - 0xffffn * p.q1[7][_o] ) + + (p.s[3][_o] * p.s[6][_o] - 0xffffn * p.q1[6][_o] ) + + (p.s[4][_o] * p.s[5][_o] - 0xffffn * p.q1[5][_o] ) + + (p.s[5][_o] * p.s[4][_o] - 0xffffn * p.q1[4][_o] ) + + (p.s[6][_o] * p.s[3][_o] ) + + (p.s[7][_o] * p.s[2][_o] ) + + (p.s[8][_o] * p.s[1][_o] ) + + (p.s[9][_o] * p.s[0][_o] ) + - p.x1[9][_o] - p.x2[9][_o] - p.x3[9][_o] ); + + case 10: return ( + (p.s[0][_o] * p.s[10][_o] - 0xffffn * p.q1[10][_o]) + + (p.s[1][_o] * p.s[9][_o] - 0xffffn * p.q1[9][_o] ) + + (p.s[2][_o] * p.s[8][_o] - 0xffffn * p.q1[8][_o] ) + + (p.s[3][_o] * p.s[7][_o] - 0xffffn * p.q1[7][_o] ) + + (p.s[4][_o] * p.s[6][_o] - 0xffffn * p.q1[6][_o] ) + + (p.s[5][_o] * p.s[5][_o] - 0xffffn * p.q1[5][_o] ) + + (p.s[6][_o] * p.s[4][_o] ) + + (p.s[7][_o] * p.s[3][_o] ) + + (p.s[8][_o] * p.s[2][_o] ) + + (p.s[9][_o] * p.s[1][_o] ) + + (p.s[10][_o] * p.s[0][_o] ) + - p.x1[10][_o] - p.x2[10][_o] - p.x3[10][_o]); + + case 11: return ( + (p.s[0][_o] * p.s[11][_o] - 0xffffn * p.q1[11][_o]) + + (p.s[1][_o] * p.s[10][_o] - 0xffffn * p.q1[10][_o]) + + (p.s[2][_o] * p.s[9][_o] - 0xffffn * p.q1[9][_o] ) + + (p.s[3][_o] * p.s[8][_o] - 0xffffn * p.q1[8][_o] ) + + (p.s[4][_o] * p.s[7][_o] - 0xffffn * p.q1[7][_o] ) + + (p.s[5][_o] * p.s[6][_o] - 0xffffn * p.q1[6][_o] ) + + (p.s[6][_o] * p.s[5][_o] ) + + (p.s[7][_o] * p.s[4][_o] ) + + (p.s[8][_o] * p.s[3][_o] ) + + (p.s[9][_o] * p.s[2][_o] ) + + (p.s[10][_o] * p.s[1][_o] ) + + (p.s[11][_o] * p.s[0][_o] ) + - p.x1[11][_o] - p.x2[11][_o] - p.x3[11][_o]); + + case 12: return ( + (p.s[0][_o] * p.s[12][_o] - 0xffffn * p.q1[12][_o]) + + (p.s[1][_o] * p.s[11][_o] - 0xffffn * p.q1[11][_o]) + + (p.s[2][_o] * p.s[10][_o] - 0xffffn * p.q1[10][_o]) + + (p.s[3][_o] * p.s[9][_o] - 0xffffn * p.q1[9][_o] ) + + (p.s[4][_o] * p.s[8][_o] - 0xffffn * p.q1[8][_o] ) + + (p.s[5][_o] * p.s[7][_o] - 0xffffn * p.q1[7][_o] ) + + (p.s[6][_o] * p.s[6][_o] ) + + (p.s[7][_o] * p.s[5][_o] ) + + (p.s[8][_o] * p.s[4][_o] ) + + (p.s[9][_o] * p.s[3][_o] ) + + (p.s[10][_o] * p.s[2][_o] ) + + (p.s[11][_o] * p.s[1][_o] ) + + (p.s[12][_o] * p.s[0][_o] ) + - p.q1[0][_o] + 0x4n - p.x1[12][_o] - p.x2[12][_o] - p.x3[12][_o]); + + case 13: return ( + (p.s[0][_o] * p.s[13][_o] - 0xffffn * p.q1[13][_o]) + + (p.s[1][_o] * p.s[12][_o] - 0xffffn * p.q1[12][_o]) + + (p.s[2][_o] * p.s[11][_o] - 0xffffn * p.q1[11][_o]) + + (p.s[3][_o] * p.s[10][_o] - 0xffffn * p.q1[10][_o]) + + (p.s[4][_o] * p.s[9][_o] - 0xffffn * p.q1[9][_o] ) + + (p.s[5][_o] * p.s[8][_o] - 0xffffn * p.q1[8][_o] ) + + (p.s[6][_o] * p.s[7][_o] ) + + (p.s[7][_o] * p.s[6][_o] ) + + (p.s[8][_o] * p.s[5][_o] ) + + (p.s[9][_o] * p.s[4][_o] ) + + (p.s[10][_o] * p.s[3][_o] ) + + (p.s[11][_o] * p.s[2][_o] ) + + (p.s[12][_o] * p.s[1][_o] ) + + (p.s[13][_o] * p.s[0][_o] ) + - p.q1[1][_o] - p.x1[13][_o] - p.x2[13][_o] - p.x3[13][_o]); + + case 14: return ( + (p.s[0][_o] * p.s[14][_o] - 0xffffn * p.q1[14][_o]) + + (p.s[1][_o] * p.s[13][_o] - 0xffffn * p.q1[13][_o]) + + (p.s[2][_o] * p.s[12][_o] - 0xffffn * p.q1[12][_o]) + + (p.s[3][_o] * p.s[11][_o] - 0xffffn * p.q1[11][_o]) + + (p.s[4][_o] * p.s[10][_o] - 0xffffn * p.q1[10][_o]) + + (p.s[5][_o] * p.s[9][_o] - 0xffffn * p.q1[9][_o] ) + + (p.s[6][_o] * p.s[8][_o] ) + + (p.s[7][_o] * p.s[7][_o] ) + + (p.s[8][_o] * p.s[6][_o] ) + + (p.s[9][_o] * p.s[5][_o] ) + + (p.s[10][_o] * p.s[4][_o] ) + + (p.s[11][_o] * p.s[3][_o] ) + + (p.s[12][_o] * p.s[2][_o] ) + + (p.s[13][_o] * p.s[1][_o] ) + + (p.s[14][_o] * p.s[0][_o] - 0xffffn * p.q1[0][_o] ) + - p.q1[2][_o] + 0x3fffcn - p.x1[14][_o] - p.x2[14][_o] - p.x3[14][_o]); + + case 15: return ( + (p.s[0][_o] * p.s[15][_o] - 0xffffn * p.q1[15][_o]) + + (p.s[1][_o] * p.s[14][_o] - 0xffffn * p.q1[14][_o]) + + (p.s[2][_o] * p.s[13][_o] - 0xffffn * p.q1[13][_o]) + + (p.s[3][_o] * p.s[12][_o] - 0xffffn * p.q1[12][_o]) + + (p.s[4][_o] * p.s[11][_o] - 0xffffn * p.q1[11][_o]) + + (p.s[5][_o] * p.s[10][_o] - 0xffffn * p.q1[10][_o]) + + (p.s[6][_o] * p.s[9][_o] ) + + (p.s[7][_o] * p.s[8][_o] ) + + (p.s[8][_o] * p.s[7][_o] ) + + (p.s[9][_o] * p.s[6][_o] ) + + (p.s[10][_o] * p.s[5][_o] ) + + (p.s[11][_o] * p.s[4][_o] ) + + (p.s[12][_o] * p.s[3][_o] ) + + (p.s[13][_o] * p.s[2][_o] ) + + (p.s[14][_o] * p.s[1][_o] - 0xffffn * p.q1[1][_o] ) + + (p.s[15][_o] * p.s[0][_o] - 0xffffn * p.q1[0][_o] ) + - p.q1[3][_o] + 0x3fffcn - p.x1[15][_o] - p.x2[15][_o] - p.x3[15][_o]); + + case 16: return ( + (p.s[1][_o] * p.s[15][_o] - 0xffffn * p.q1[15][_o]) + + (p.s[2][_o] * p.s[14][_o] - 0xffffn * p.q1[14][_o]) + + (p.s[3][_o] * p.s[13][_o] - 0xffffn * p.q1[13][_o]) + + (p.s[4][_o] * p.s[12][_o] - 0xffffn * p.q1[12][_o]) + + (p.s[5][_o] * p.s[11][_o] - 0xffffn * p.q1[11][_o]) + + (p.s[6][_o] * p.s[10][_o] ) + + (p.s[7][_o] * p.s[9][_o] ) + + (p.s[8][_o] * p.s[8][_o] ) + + (p.s[9][_o] * p.s[7][_o] ) + + (p.s[10][_o] * p.s[6][_o] ) + + (p.s[11][_o] * p.s[5][_o] ) + + (p.s[12][_o] * p.s[4][_o] ) + + (p.s[13][_o] * p.s[3][_o] ) + + (p.s[14][_o] * p.s[2][_o] - 0xffffn * p.q1[2][_o] ) + + (p.s[15][_o] * p.s[1][_o] - 0xffffn * p.q1[1][_o] ) + - p.q1[4][_o] ); + + case 17: return ( + (p.s[2][_o] * p.s[15][_o] - 0xffffn * p.q1[15][_o]) + + (p.s[3][_o] * p.s[14][_o] - 0xffffn * p.q1[14][_o]) + + (p.s[4][_o] * p.s[13][_o] - 0xffffn * p.q1[13][_o]) + + (p.s[5][_o] * p.s[12][_o] - 0xffffn * p.q1[12][_o]) + + (p.s[6][_o] * p.s[11][_o] ) + + (p.s[7][_o] * p.s[10][_o] ) + + (p.s[8][_o] * p.s[9][_o] ) + + (p.s[9][_o] * p.s[8][_o] ) + + (p.s[10][_o] * p.s[7][_o] ) + + (p.s[11][_o] * p.s[6][_o] ) + + (p.s[12][_o] * p.s[5][_o] ) + + (p.s[13][_o] * p.s[4][_o] ) + + (p.s[14][_o] * p.s[3][_o] - 0xffffn * p.q1[3][_o] ) + + (p.s[15][_o] * p.s[2][_o] - 0xffffn * p.q1[2][_o] ) + - p.q1[5][_o] ); + + case 18: return ( + (p.s[3][_o] * p.s[15][_o] - 0xffffn * p.q1[15][_o]) + + (p.s[4][_o] * p.s[14][_o] - 0xffffn * p.q1[14][_o]) + + (p.s[5][_o] * p.s[13][_o] - 0xffffn * p.q1[13][_o]) + + (p.s[6][_o] * p.s[12][_o] ) + + (p.s[7][_o] * p.s[11][_o] ) + + (p.s[8][_o] * p.s[10][_o] ) + + (p.s[9][_o] * p.s[9][_o] ) + + (p.s[10][_o] * p.s[8][_o] ) + + (p.s[11][_o] * p.s[7][_o] ) + + (p.s[12][_o] * p.s[6][_o] ) + + (p.s[13][_o] * p.s[5][_o] ) + + (p.s[14][_o] * p.s[4][_o] - 0xffffn * p.q1[4][_o] ) + + (p.s[15][_o] * p.s[3][_o] - 0xffffn * p.q1[3][_o] ) + - p.q1[6][_o] ); + + case 19: return ( + (p.s[4][_o] * p.s[15][_o] - 0xffffn * p.q1[15][_o]) + + (p.s[5][_o] * p.s[14][_o] - 0xffffn * p.q1[14][_o]) + + (p.s[6][_o] * p.s[13][_o] ) + + (p.s[7][_o] * p.s[12][_o] ) + + (p.s[8][_o] * p.s[11][_o] ) + + (p.s[9][_o] * p.s[10][_o] ) + + (p.s[10][_o] * p.s[9][_o] ) + + (p.s[11][_o] * p.s[8][_o] ) + + (p.s[12][_o] * p.s[7][_o] ) + + (p.s[13][_o] * p.s[6][_o] ) + + (p.s[14][_o] * p.s[5][_o] - 0xffffn * p.q1[5][_o] ) + + (p.s[15][_o] * p.s[4][_o] - 0xffffn * p.q1[4][_o] ) + - p.q1[7][_o] ); + + case 20: return ( + (p.s[5][_o] * p.s[15][_o] - 0xffffn * p.q1[15][_o]) + + (p.s[6][_o] * p.s[14][_o] ) + + (p.s[7][_o] * p.s[13][_o] ) + + (p.s[8][_o] * p.s[12][_o] ) + + (p.s[9][_o] * p.s[11][_o] ) + + (p.s[10][_o] * p.s[10][_o] ) + + (p.s[11][_o] * p.s[9][_o] ) + + (p.s[12][_o] * p.s[8][_o] ) + + (p.s[13][_o] * p.s[7][_o] ) + + (p.s[14][_o] * p.s[6][_o] - 0xffffn * p.q1[6][_o] ) + + (p.s[15][_o] * p.s[5][_o] - 0xffffn * p.q1[5][_o] ) + - p.q1[8][_o] ); + + case 21: return ( + (p.s[6][_o] * p.s[15][_o] ) + + (p.s[7][_o] * p.s[14][_o] ) + + (p.s[8][_o] * p.s[13][_o] ) + + (p.s[9][_o] * p.s[12][_o] ) + + (p.s[10][_o] * p.s[11][_o] ) + + (p.s[11][_o] * p.s[10][_o] ) + + (p.s[12][_o] * p.s[9][_o] ) + + (p.s[13][_o] * p.s[8][_o] ) + + (p.s[14][_o] * p.s[7][_o] - 0xffffn * p.q1[7][_o] ) + + (p.s[15][_o] * p.s[6][_o] - 0xffffn * p.q1[6][_o] ) + - p.q1[9][_o] ); + + case 22: return ( + (p.s[7][_o] * p.s[15][_o] ) + + (p.s[8][_o] * p.s[14][_o] ) + + (p.s[9][_o] * p.s[13][_o] ) + + (p.s[10][_o] * p.s[12][_o] ) + + (p.s[11][_o] * p.s[11][_o] ) + + (p.s[12][_o] * p.s[10][_o] ) + + (p.s[13][_o] * p.s[9][_o] ) + + (p.s[14][_o] * p.s[8][_o] - 0xffffn * p.q1[8][_o] ) + + (p.s[15][_o] * p.s[7][_o] - 0xffffn * p.q1[7][_o] ) + - p.q1[10][_o]); + + case 23: return ( + (p.s[8][_o] * p.s[15][_o] ) + + (p.s[9][_o] * p.s[14][_o] ) + + (p.s[10][_o] * p.s[13][_o] ) + + (p.s[11][_o] * p.s[12][_o] ) + + (p.s[12][_o] * p.s[11][_o] ) + + (p.s[13][_o] * p.s[10][_o] ) + + (p.s[14][_o] * p.s[9][_o] - 0xffffn * p.q1[9][_o] ) + + (p.s[15][_o] * p.s[8][_o] - 0xffffn * p.q1[8][_o] ) + - p.q1[11][_o]); + + case 24: return ( + (p.s[9][_o] * p.s[15][_o] ) + + (p.s[10][_o] * p.s[14][_o] ) + + (p.s[11][_o] * p.s[13][_o] ) + + (p.s[12][_o] * p.s[12][_o] ) + + (p.s[13][_o] * p.s[11][_o] ) + + (p.s[14][_o] * p.s[10][_o] - 0xffffn * p.q1[10][_o]) + + (p.s[15][_o] * p.s[9][_o] - 0xffffn * p.q1[9][_o] ) + - p.q1[12][_o]); + + case 25: return ( + (p.s[10][_o] * p.s[15][_o] ) + + (p.s[11][_o] * p.s[14][_o] ) + + (p.s[12][_o] * p.s[13][_o] ) + + (p.s[13][_o] * p.s[12][_o] ) + + (p.s[14][_o] * p.s[11][_o] - 0xffffn * p.q1[11][_o]) + + (p.s[15][_o] * p.s[10][_o] - 0xffffn * p.q1[10][_o]) + - p.q1[13][_o]); + + case 26: return ( + (p.s[11][_o] * p.s[15][_o] ) + + (p.s[12][_o] * p.s[14][_o] ) + + (p.s[13][_o] * p.s[13][_o] ) + + (p.s[14][_o] * p.s[12][_o] - 0xffffn * p.q1[12][_o]) + + (p.s[15][_o] * p.s[11][_o] - 0xffffn * p.q1[11][_o]) + - p.q1[14][_o]); + + case 27: return ( + (p.s[12][_o] * p.s[15][_o] ) + + (p.s[13][_o] * p.s[14][_o] ) + + (p.s[14][_o] * p.s[13][_o] - 0xffffn * p.q1[13][_o]) + + (p.s[15][_o] * p.s[12][_o] - 0xffffn * p.q1[12][_o]) + - p.q1[15][_o]); + + case 28: return ( + (p.s[13][_o] * p.s[15][_o] ) + + (p.s[14][_o] * p.s[14][_o] - 0xffffn * p.q1[14][_o]) + + (p.s[15][_o] * p.s[13][_o] - 0xffffn * p.q1[13][_o])); + + case 29: return ( + (p.s[14][_o] * p.s[15][_o] - 0xffffn * p.q1[15][_o]) + + (p.s[15][_o] * p.s[14][_o] - 0xffffn * p.q1[14][_o])); + + case 30: return ( + (p.s[15][_o] * p.s[15][_o] - 0xffffn * p.q1[15][_o])); + + case 31: return ( + 0x0n ); + } + return 0n; +} diff --git a/src/sm/sm_arith/sm_arith_eq14.js b/src/sm/sm_arith/sm_arith_eq14.js new file mode 100644 index 00000000..2d8414e9 --- /dev/null +++ b/src/sm/sm_arith/sm_arith_eq14.js @@ -0,0 +1,363 @@ +/* +* code generated with arith_eq_gen.js +* equation: s*x1-s*x3-y1-y3+p*q2-p*offset +* +* p=0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff +* offset=0x20000000000000000000000000000000000000000000000000000000000000000 +*/ + +module.exports.calculate = function (p, step, _o) +{ + switch(step) { + case 0: return ( + (p.s[0][_o] * p.x1[0][_o] - p.s[0][_o] * p.x3[0][_o] + 0xffffn * p.q2[0][_o] ) + - p.y1[0][_o] - p.y3[0][_o] ); + + case 1: return ( + (p.s[0][_o] * p.x1[1][_o] - p.s[0][_o] * p.x3[1][_o] + 0xffffn * p.q2[1][_o] ) + + (p.s[1][_o] * p.x1[0][_o] - p.s[1][_o] * p.x3[0][_o] + 0xffffn * p.q2[0][_o] ) + - p.y1[1][_o] - p.y3[1][_o] ); + + case 2: return ( + (p.s[0][_o] * p.x1[2][_o] - p.s[0][_o] * p.x3[2][_o] + 0xffffn * p.q2[2][_o] ) + + (p.s[1][_o] * p.x1[1][_o] - p.s[1][_o] * p.x3[1][_o] + 0xffffn * p.q2[1][_o] ) + + (p.s[2][_o] * p.x1[0][_o] - p.s[2][_o] * p.x3[0][_o] + 0xffffn * p.q2[0][_o] ) + - p.y1[2][_o] - p.y3[2][_o] ); + + case 3: return ( + (p.s[0][_o] * p.x1[3][_o] - p.s[0][_o] * p.x3[3][_o] + 0xffffn * p.q2[3][_o] ) + + (p.s[1][_o] * p.x1[2][_o] - p.s[1][_o] * p.x3[2][_o] + 0xffffn * p.q2[2][_o] ) + + (p.s[2][_o] * p.x1[1][_o] - p.s[2][_o] * p.x3[1][_o] + 0xffffn * p.q2[1][_o] ) + + (p.s[3][_o] * p.x1[0][_o] - p.s[3][_o] * p.x3[0][_o] + 0xffffn * p.q2[0][_o] ) + - p.y1[3][_o] - p.y3[3][_o] ); + + case 4: return ( + (p.s[0][_o] * p.x1[4][_o] - p.s[0][_o] * p.x3[4][_o] + 0xffffn * p.q2[4][_o] ) + + (p.s[1][_o] * p.x1[3][_o] - p.s[1][_o] * p.x3[3][_o] + 0xffffn * p.q2[3][_o] ) + + (p.s[2][_o] * p.x1[2][_o] - p.s[2][_o] * p.x3[2][_o] + 0xffffn * p.q2[2][_o] ) + + (p.s[3][_o] * p.x1[1][_o] - p.s[3][_o] * p.x3[1][_o] + 0xffffn * p.q2[1][_o] ) + + (p.s[4][_o] * p.x1[0][_o] - p.s[4][_o] * p.x3[0][_o] + 0xffffn * p.q2[0][_o] ) + - p.y1[4][_o] - p.y3[4][_o] ); + + case 5: return ( + (p.s[0][_o] * p.x1[5][_o] - p.s[0][_o] * p.x3[5][_o] + 0xffffn * p.q2[5][_o] ) + + (p.s[1][_o] * p.x1[4][_o] - p.s[1][_o] * p.x3[4][_o] + 0xffffn * p.q2[4][_o] ) + + (p.s[2][_o] * p.x1[3][_o] - p.s[2][_o] * p.x3[3][_o] + 0xffffn * p.q2[3][_o] ) + + (p.s[3][_o] * p.x1[2][_o] - p.s[3][_o] * p.x3[2][_o] + 0xffffn * p.q2[2][_o] ) + + (p.s[4][_o] * p.x1[1][_o] - p.s[4][_o] * p.x3[1][_o] + 0xffffn * p.q2[1][_o] ) + + (p.s[5][_o] * p.x1[0][_o] - p.s[5][_o] * p.x3[0][_o] + 0xffffn * p.q2[0][_o] ) + - p.y1[5][_o] - p.y3[5][_o] ); + + case 6: return ( + (p.s[0][_o] * p.x1[6][_o] - p.s[0][_o] * p.x3[6][_o] + 0xffffn * p.q2[6][_o] ) + + (p.s[1][_o] * p.x1[5][_o] - p.s[1][_o] * p.x3[5][_o] + 0xffffn * p.q2[5][_o] ) + + (p.s[2][_o] * p.x1[4][_o] - p.s[2][_o] * p.x3[4][_o] + 0xffffn * p.q2[4][_o] ) + + (p.s[3][_o] * p.x1[3][_o] - p.s[3][_o] * p.x3[3][_o] + 0xffffn * p.q2[3][_o] ) + + (p.s[4][_o] * p.x1[2][_o] - p.s[4][_o] * p.x3[2][_o] + 0xffffn * p.q2[2][_o] ) + + (p.s[5][_o] * p.x1[1][_o] - p.s[5][_o] * p.x3[1][_o] + 0xffffn * p.q2[1][_o] ) + + (p.s[6][_o] * p.x1[0][_o] - p.s[6][_o] * p.x3[0][_o] ) + - p.y1[6][_o] - p.y3[6][_o] ); + + case 7: return ( + (p.s[0][_o] * p.x1[7][_o] - p.s[0][_o] * p.x3[7][_o] + 0xffffn * p.q2[7][_o] ) + + (p.s[1][_o] * p.x1[6][_o] - p.s[1][_o] * p.x3[6][_o] + 0xffffn * p.q2[6][_o] ) + + (p.s[2][_o] * p.x1[5][_o] - p.s[2][_o] * p.x3[5][_o] + 0xffffn * p.q2[5][_o] ) + + (p.s[3][_o] * p.x1[4][_o] - p.s[3][_o] * p.x3[4][_o] + 0xffffn * p.q2[4][_o] ) + + (p.s[4][_o] * p.x1[3][_o] - p.s[4][_o] * p.x3[3][_o] + 0xffffn * p.q2[3][_o] ) + + (p.s[5][_o] * p.x1[2][_o] - p.s[5][_o] * p.x3[2][_o] + 0xffffn * p.q2[2][_o] ) + + (p.s[6][_o] * p.x1[1][_o] - p.s[6][_o] * p.x3[1][_o] ) + + (p.s[7][_o] * p.x1[0][_o] - p.s[7][_o] * p.x3[0][_o] ) + - p.y1[7][_o] - p.y3[7][_o] ); + + case 8: return ( + (p.s[0][_o] * p.x1[8][_o] - p.s[0][_o] * p.x3[8][_o] + 0xffffn * p.q2[8][_o] ) + + (p.s[1][_o] * p.x1[7][_o] - p.s[1][_o] * p.x3[7][_o] + 0xffffn * p.q2[7][_o] ) + + (p.s[2][_o] * p.x1[6][_o] - p.s[2][_o] * p.x3[6][_o] + 0xffffn * p.q2[6][_o] ) + + (p.s[3][_o] * p.x1[5][_o] - p.s[3][_o] * p.x3[5][_o] + 0xffffn * p.q2[5][_o] ) + + (p.s[4][_o] * p.x1[4][_o] - p.s[4][_o] * p.x3[4][_o] + 0xffffn * p.q2[4][_o] ) + + (p.s[5][_o] * p.x1[3][_o] - p.s[5][_o] * p.x3[3][_o] + 0xffffn * p.q2[3][_o] ) + + (p.s[6][_o] * p.x1[2][_o] - p.s[6][_o] * p.x3[2][_o] ) + + (p.s[7][_o] * p.x1[1][_o] - p.s[7][_o] * p.x3[1][_o] ) + + (p.s[8][_o] * p.x1[0][_o] - p.s[8][_o] * p.x3[0][_o] ) + - p.y1[8][_o] - p.y3[8][_o] ); + + case 9: return ( + (p.s[0][_o] * p.x1[9][_o] - p.s[0][_o] * p.x3[9][_o] + 0xffffn * p.q2[9][_o] ) + + (p.s[1][_o] * p.x1[8][_o] - p.s[1][_o] * p.x3[8][_o] + 0xffffn * p.q2[8][_o] ) + + (p.s[2][_o] * p.x1[7][_o] - p.s[2][_o] * p.x3[7][_o] + 0xffffn * p.q2[7][_o] ) + + (p.s[3][_o] * p.x1[6][_o] - p.s[3][_o] * p.x3[6][_o] + 0xffffn * p.q2[6][_o] ) + + (p.s[4][_o] * p.x1[5][_o] - p.s[4][_o] * p.x3[5][_o] + 0xffffn * p.q2[5][_o] ) + + (p.s[5][_o] * p.x1[4][_o] - p.s[5][_o] * p.x3[4][_o] + 0xffffn * p.q2[4][_o] ) + + (p.s[6][_o] * p.x1[3][_o] - p.s[6][_o] * p.x3[3][_o] ) + + (p.s[7][_o] * p.x1[2][_o] - p.s[7][_o] * p.x3[2][_o] ) + + (p.s[8][_o] * p.x1[1][_o] - p.s[8][_o] * p.x3[1][_o] ) + + (p.s[9][_o] * p.x1[0][_o] - p.s[9][_o] * p.x3[0][_o] ) + - p.y1[9][_o] - p.y3[9][_o] ); + + case 10: return ( + (p.s[0][_o] * p.x1[10][_o] - p.s[0][_o] * p.x3[10][_o] + 0xffffn * p.q2[10][_o]) + + (p.s[1][_o] * p.x1[9][_o] - p.s[1][_o] * p.x3[9][_o] + 0xffffn * p.q2[9][_o] ) + + (p.s[2][_o] * p.x1[8][_o] - p.s[2][_o] * p.x3[8][_o] + 0xffffn * p.q2[8][_o] ) + + (p.s[3][_o] * p.x1[7][_o] - p.s[3][_o] * p.x3[7][_o] + 0xffffn * p.q2[7][_o] ) + + (p.s[4][_o] * p.x1[6][_o] - p.s[4][_o] * p.x3[6][_o] + 0xffffn * p.q2[6][_o] ) + + (p.s[5][_o] * p.x1[5][_o] - p.s[5][_o] * p.x3[5][_o] + 0xffffn * p.q2[5][_o] ) + + (p.s[6][_o] * p.x1[4][_o] - p.s[6][_o] * p.x3[4][_o] ) + + (p.s[7][_o] * p.x1[3][_o] - p.s[7][_o] * p.x3[3][_o] ) + + (p.s[8][_o] * p.x1[2][_o] - p.s[8][_o] * p.x3[2][_o] ) + + (p.s[9][_o] * p.x1[1][_o] - p.s[9][_o] * p.x3[1][_o] ) + + (p.s[10][_o] * p.x1[0][_o] - p.s[10][_o] * p.x3[0][_o] ) + - p.y1[10][_o] - p.y3[10][_o]); + + case 11: return ( + (p.s[0][_o] * p.x1[11][_o] - p.s[0][_o] * p.x3[11][_o] + 0xffffn * p.q2[11][_o]) + + (p.s[1][_o] * p.x1[10][_o] - p.s[1][_o] * p.x3[10][_o] + 0xffffn * p.q2[10][_o]) + + (p.s[2][_o] * p.x1[9][_o] - p.s[2][_o] * p.x3[9][_o] + 0xffffn * p.q2[9][_o] ) + + (p.s[3][_o] * p.x1[8][_o] - p.s[3][_o] * p.x3[8][_o] + 0xffffn * p.q2[8][_o] ) + + (p.s[4][_o] * p.x1[7][_o] - p.s[4][_o] * p.x3[7][_o] + 0xffffn * p.q2[7][_o] ) + + (p.s[5][_o] * p.x1[6][_o] - p.s[5][_o] * p.x3[6][_o] + 0xffffn * p.q2[6][_o] ) + + (p.s[6][_o] * p.x1[5][_o] - p.s[6][_o] * p.x3[5][_o] ) + + (p.s[7][_o] * p.x1[4][_o] - p.s[7][_o] * p.x3[4][_o] ) + + (p.s[8][_o] * p.x1[3][_o] - p.s[8][_o] * p.x3[3][_o] ) + + (p.s[9][_o] * p.x1[2][_o] - p.s[9][_o] * p.x3[2][_o] ) + + (p.s[10][_o] * p.x1[1][_o] - p.s[10][_o] * p.x3[1][_o] ) + + (p.s[11][_o] * p.x1[0][_o] - p.s[11][_o] * p.x3[0][_o] ) + - p.y1[11][_o] - p.y3[11][_o]); + + case 12: return ( + (p.s[0][_o] * p.x1[12][_o] - p.s[0][_o] * p.x3[12][_o] + 0xffffn * p.q2[12][_o]) + + (p.s[1][_o] * p.x1[11][_o] - p.s[1][_o] * p.x3[11][_o] + 0xffffn * p.q2[11][_o]) + + (p.s[2][_o] * p.x1[10][_o] - p.s[2][_o] * p.x3[10][_o] + 0xffffn * p.q2[10][_o]) + + (p.s[3][_o] * p.x1[9][_o] - p.s[3][_o] * p.x3[9][_o] + 0xffffn * p.q2[9][_o] ) + + (p.s[4][_o] * p.x1[8][_o] - p.s[4][_o] * p.x3[8][_o] + 0xffffn * p.q2[8][_o] ) + + (p.s[5][_o] * p.x1[7][_o] - p.s[5][_o] * p.x3[7][_o] + 0xffffn * p.q2[7][_o] ) + + (p.s[6][_o] * p.x1[6][_o] - p.s[6][_o] * p.x3[6][_o] ) + + (p.s[7][_o] * p.x1[5][_o] - p.s[7][_o] * p.x3[5][_o] ) + + (p.s[8][_o] * p.x1[4][_o] - p.s[8][_o] * p.x3[4][_o] ) + + (p.s[9][_o] * p.x1[3][_o] - p.s[9][_o] * p.x3[3][_o] ) + + (p.s[10][_o] * p.x1[2][_o] - p.s[10][_o] * p.x3[2][_o] ) + + (p.s[11][_o] * p.x1[1][_o] - p.s[11][_o] * p.x3[1][_o] ) + + (p.s[12][_o] * p.x1[0][_o] - p.s[12][_o] * p.x3[0][_o] ) + + p.q2[0][_o] - p.y1[12][_o] - p.y3[12][_o]); + + case 13: return ( + (p.s[0][_o] * p.x1[13][_o] - p.s[0][_o] * p.x3[13][_o] + 0xffffn * p.q2[13][_o]) + + (p.s[1][_o] * p.x1[12][_o] - p.s[1][_o] * p.x3[12][_o] + 0xffffn * p.q2[12][_o]) + + (p.s[2][_o] * p.x1[11][_o] - p.s[2][_o] * p.x3[11][_o] + 0xffffn * p.q2[11][_o]) + + (p.s[3][_o] * p.x1[10][_o] - p.s[3][_o] * p.x3[10][_o] + 0xffffn * p.q2[10][_o]) + + (p.s[4][_o] * p.x1[9][_o] - p.s[4][_o] * p.x3[9][_o] + 0xffffn * p.q2[9][_o] ) + + (p.s[5][_o] * p.x1[8][_o] - p.s[5][_o] * p.x3[8][_o] + 0xffffn * p.q2[8][_o] ) + + (p.s[6][_o] * p.x1[7][_o] - p.s[6][_o] * p.x3[7][_o] ) + + (p.s[7][_o] * p.x1[6][_o] - p.s[7][_o] * p.x3[6][_o] ) + + (p.s[8][_o] * p.x1[5][_o] - p.s[8][_o] * p.x3[5][_o] ) + + (p.s[9][_o] * p.x1[4][_o] - p.s[9][_o] * p.x3[4][_o] ) + + (p.s[10][_o] * p.x1[3][_o] - p.s[10][_o] * p.x3[3][_o] ) + + (p.s[11][_o] * p.x1[2][_o] - p.s[11][_o] * p.x3[2][_o] ) + + (p.s[12][_o] * p.x1[1][_o] - p.s[12][_o] * p.x3[1][_o] ) + + (p.s[13][_o] * p.x1[0][_o] - p.s[13][_o] * p.x3[0][_o] ) + + p.q2[1][_o] - p.y1[13][_o] - p.y3[13][_o]); + + case 14: return ( + (p.s[0][_o] * p.x1[14][_o] - p.s[0][_o] * p.x3[14][_o] + 0xffffn * p.q2[14][_o]) + + (p.s[1][_o] * p.x1[13][_o] - p.s[1][_o] * p.x3[13][_o] + 0xffffn * p.q2[13][_o]) + + (p.s[2][_o] * p.x1[12][_o] - p.s[2][_o] * p.x3[12][_o] + 0xffffn * p.q2[12][_o]) + + (p.s[3][_o] * p.x1[11][_o] - p.s[3][_o] * p.x3[11][_o] + 0xffffn * p.q2[11][_o]) + + (p.s[4][_o] * p.x1[10][_o] - p.s[4][_o] * p.x3[10][_o] + 0xffffn * p.q2[10][_o]) + + (p.s[5][_o] * p.x1[9][_o] - p.s[5][_o] * p.x3[9][_o] + 0xffffn * p.q2[9][_o] ) + + (p.s[6][_o] * p.x1[8][_o] - p.s[6][_o] * p.x3[8][_o] ) + + (p.s[7][_o] * p.x1[7][_o] - p.s[7][_o] * p.x3[7][_o] ) + + (p.s[8][_o] * p.x1[6][_o] - p.s[8][_o] * p.x3[6][_o] ) + + (p.s[9][_o] * p.x1[5][_o] - p.s[9][_o] * p.x3[5][_o] ) + + (p.s[10][_o] * p.x1[4][_o] - p.s[10][_o] * p.x3[4][_o] ) + + (p.s[11][_o] * p.x1[3][_o] - p.s[11][_o] * p.x3[3][_o] ) + + (p.s[12][_o] * p.x1[2][_o] - p.s[12][_o] * p.x3[2][_o] ) + + (p.s[13][_o] * p.x1[1][_o] - p.s[13][_o] * p.x3[1][_o] ) + + (p.s[14][_o] * p.x1[0][_o] - p.s[14][_o] * p.x3[0][_o] + 0xffffn * p.q2[0][_o] ) + + p.q2[2][_o] - p.y1[14][_o] - p.y3[14][_o]); + + case 15: return ( + (p.s[0][_o] * p.x1[15][_o] - p.s[0][_o] * p.x3[15][_o] + 0xffffn * p.q2[15][_o]) + + (p.s[1][_o] * p.x1[14][_o] - p.s[1][_o] * p.x3[14][_o] + 0xffffn * p.q2[14][_o]) + + (p.s[2][_o] * p.x1[13][_o] - p.s[2][_o] * p.x3[13][_o] + 0xffffn * p.q2[13][_o]) + + (p.s[3][_o] * p.x1[12][_o] - p.s[3][_o] * p.x3[12][_o] + 0xffffn * p.q2[12][_o]) + + (p.s[4][_o] * p.x1[11][_o] - p.s[4][_o] * p.x3[11][_o] + 0xffffn * p.q2[11][_o]) + + (p.s[5][_o] * p.x1[10][_o] - p.s[5][_o] * p.x3[10][_o] + 0xffffn * p.q2[10][_o]) + + (p.s[6][_o] * p.x1[9][_o] - p.s[6][_o] * p.x3[9][_o] ) + + (p.s[7][_o] * p.x1[8][_o] - p.s[7][_o] * p.x3[8][_o] ) + + (p.s[8][_o] * p.x1[7][_o] - p.s[8][_o] * p.x3[7][_o] ) + + (p.s[9][_o] * p.x1[6][_o] - p.s[9][_o] * p.x3[6][_o] ) + + (p.s[10][_o] * p.x1[5][_o] - p.s[10][_o] * p.x3[5][_o] ) + + (p.s[11][_o] * p.x1[4][_o] - p.s[11][_o] * p.x3[4][_o] ) + + (p.s[12][_o] * p.x1[3][_o] - p.s[12][_o] * p.x3[3][_o] ) + + (p.s[13][_o] * p.x1[2][_o] - p.s[13][_o] * p.x3[2][_o] ) + + (p.s[14][_o] * p.x1[1][_o] - p.s[14][_o] * p.x3[1][_o] + 0xffffn * p.q2[1][_o] ) + + (p.s[15][_o] * p.x1[0][_o] - p.s[15][_o] * p.x3[0][_o] + 0xffffn * p.q2[0][_o] ) + + p.q2[3][_o] - p.y1[15][_o] - p.y3[15][_o]); + + case 16: return ( + (p.s[1][_o] * p.x1[15][_o] - p.s[1][_o] * p.x3[15][_o] + 0xffffn * p.q2[15][_o]) + + (p.s[2][_o] * p.x1[14][_o] - p.s[2][_o] * p.x3[14][_o] + 0xffffn * p.q2[14][_o]) + + (p.s[3][_o] * p.x1[13][_o] - p.s[3][_o] * p.x3[13][_o] + 0xffffn * p.q2[13][_o]) + + (p.s[4][_o] * p.x1[12][_o] - p.s[4][_o] * p.x3[12][_o] + 0xffffn * p.q2[12][_o]) + + (p.s[5][_o] * p.x1[11][_o] - p.s[5][_o] * p.x3[11][_o] + 0xffffn * p.q2[11][_o]) + + (p.s[6][_o] * p.x1[10][_o] - p.s[6][_o] * p.x3[10][_o]) + + (p.s[7][_o] * p.x1[9][_o] - p.s[7][_o] * p.x3[9][_o] ) + + (p.s[8][_o] * p.x1[8][_o] - p.s[8][_o] * p.x3[8][_o] ) + + (p.s[9][_o] * p.x1[7][_o] - p.s[9][_o] * p.x3[7][_o] ) + + (p.s[10][_o] * p.x1[6][_o] - p.s[10][_o] * p.x3[6][_o] ) + + (p.s[11][_o] * p.x1[5][_o] - p.s[11][_o] * p.x3[5][_o] ) + + (p.s[12][_o] * p.x1[4][_o] - p.s[12][_o] * p.x3[4][_o] ) + + (p.s[13][_o] * p.x1[3][_o] - p.s[13][_o] * p.x3[3][_o] ) + + (p.s[14][_o] * p.x1[2][_o] - p.s[14][_o] * p.x3[2][_o] + 0xffffn * p.q2[2][_o] ) + + (p.s[15][_o] * p.x1[1][_o] - p.s[15][_o] * p.x3[1][_o] + 0xffffn * p.q2[1][_o] ) + - 0x1fffen + p.q2[4][_o] ); + + case 17: return ( + (p.s[2][_o] * p.x1[15][_o] - p.s[2][_o] * p.x3[15][_o] + 0xffffn * p.q2[15][_o]) + + (p.s[3][_o] * p.x1[14][_o] - p.s[3][_o] * p.x3[14][_o] + 0xffffn * p.q2[14][_o]) + + (p.s[4][_o] * p.x1[13][_o] - p.s[4][_o] * p.x3[13][_o] + 0xffffn * p.q2[13][_o]) + + (p.s[5][_o] * p.x1[12][_o] - p.s[5][_o] * p.x3[12][_o] + 0xffffn * p.q2[12][_o]) + + (p.s[6][_o] * p.x1[11][_o] - p.s[6][_o] * p.x3[11][_o]) + + (p.s[7][_o] * p.x1[10][_o] - p.s[7][_o] * p.x3[10][_o]) + + (p.s[8][_o] * p.x1[9][_o] - p.s[8][_o] * p.x3[9][_o] ) + + (p.s[9][_o] * p.x1[8][_o] - p.s[9][_o] * p.x3[8][_o] ) + + (p.s[10][_o] * p.x1[7][_o] - p.s[10][_o] * p.x3[7][_o] ) + + (p.s[11][_o] * p.x1[6][_o] - p.s[11][_o] * p.x3[6][_o] ) + + (p.s[12][_o] * p.x1[5][_o] - p.s[12][_o] * p.x3[5][_o] ) + + (p.s[13][_o] * p.x1[4][_o] - p.s[13][_o] * p.x3[4][_o] ) + + (p.s[14][_o] * p.x1[3][_o] - p.s[14][_o] * p.x3[3][_o] + 0xffffn * p.q2[3][_o] ) + + (p.s[15][_o] * p.x1[2][_o] - p.s[15][_o] * p.x3[2][_o] + 0xffffn * p.q2[2][_o] ) + - 0x1fffen + p.q2[5][_o] ); + + case 18: return ( + (p.s[3][_o] * p.x1[15][_o] - p.s[3][_o] * p.x3[15][_o] + 0xffffn * p.q2[15][_o]) + + (p.s[4][_o] * p.x1[14][_o] - p.s[4][_o] * p.x3[14][_o] + 0xffffn * p.q2[14][_o]) + + (p.s[5][_o] * p.x1[13][_o] - p.s[5][_o] * p.x3[13][_o] + 0xffffn * p.q2[13][_o]) + + (p.s[6][_o] * p.x1[12][_o] - p.s[6][_o] * p.x3[12][_o]) + + (p.s[7][_o] * p.x1[11][_o] - p.s[7][_o] * p.x3[11][_o]) + + (p.s[8][_o] * p.x1[10][_o] - p.s[8][_o] * p.x3[10][_o]) + + (p.s[9][_o] * p.x1[9][_o] - p.s[9][_o] * p.x3[9][_o] ) + + (p.s[10][_o] * p.x1[8][_o] - p.s[10][_o] * p.x3[8][_o] ) + + (p.s[11][_o] * p.x1[7][_o] - p.s[11][_o] * p.x3[7][_o] ) + + (p.s[12][_o] * p.x1[6][_o] - p.s[12][_o] * p.x3[6][_o] ) + + (p.s[13][_o] * p.x1[5][_o] - p.s[13][_o] * p.x3[5][_o] ) + + (p.s[14][_o] * p.x1[4][_o] - p.s[14][_o] * p.x3[4][_o] + 0xffffn * p.q2[4][_o] ) + + (p.s[15][_o] * p.x1[3][_o] - p.s[15][_o] * p.x3[3][_o] + 0xffffn * p.q2[3][_o] ) + - 0x1fffen + p.q2[6][_o] ); + + case 19: return ( + (p.s[4][_o] * p.x1[15][_o] - p.s[4][_o] * p.x3[15][_o] + 0xffffn * p.q2[15][_o]) + + (p.s[5][_o] * p.x1[14][_o] - p.s[5][_o] * p.x3[14][_o] + 0xffffn * p.q2[14][_o]) + + (p.s[6][_o] * p.x1[13][_o] - p.s[6][_o] * p.x3[13][_o]) + + (p.s[7][_o] * p.x1[12][_o] - p.s[7][_o] * p.x3[12][_o]) + + (p.s[8][_o] * p.x1[11][_o] - p.s[8][_o] * p.x3[11][_o]) + + (p.s[9][_o] * p.x1[10][_o] - p.s[9][_o] * p.x3[10][_o]) + + (p.s[10][_o] * p.x1[9][_o] - p.s[10][_o] * p.x3[9][_o] ) + + (p.s[11][_o] * p.x1[8][_o] - p.s[11][_o] * p.x3[8][_o] ) + + (p.s[12][_o] * p.x1[7][_o] - p.s[12][_o] * p.x3[7][_o] ) + + (p.s[13][_o] * p.x1[6][_o] - p.s[13][_o] * p.x3[6][_o] ) + + (p.s[14][_o] * p.x1[5][_o] - p.s[14][_o] * p.x3[5][_o] + 0xffffn * p.q2[5][_o] ) + + (p.s[15][_o] * p.x1[4][_o] - p.s[15][_o] * p.x3[4][_o] + 0xffffn * p.q2[4][_o] ) + - 0x1fffen + p.q2[7][_o] ); + + case 20: return ( + (p.s[5][_o] * p.x1[15][_o] - p.s[5][_o] * p.x3[15][_o] + 0xffffn * p.q2[15][_o]) + + (p.s[6][_o] * p.x1[14][_o] - p.s[6][_o] * p.x3[14][_o]) + + (p.s[7][_o] * p.x1[13][_o] - p.s[7][_o] * p.x3[13][_o]) + + (p.s[8][_o] * p.x1[12][_o] - p.s[8][_o] * p.x3[12][_o]) + + (p.s[9][_o] * p.x1[11][_o] - p.s[9][_o] * p.x3[11][_o]) + + (p.s[10][_o] * p.x1[10][_o] - p.s[10][_o] * p.x3[10][_o]) + + (p.s[11][_o] * p.x1[9][_o] - p.s[11][_o] * p.x3[9][_o] ) + + (p.s[12][_o] * p.x1[8][_o] - p.s[12][_o] * p.x3[8][_o] ) + + (p.s[13][_o] * p.x1[7][_o] - p.s[13][_o] * p.x3[7][_o] ) + + (p.s[14][_o] * p.x1[6][_o] - p.s[14][_o] * p.x3[6][_o] + 0xffffn * p.q2[6][_o] ) + + (p.s[15][_o] * p.x1[5][_o] - p.s[15][_o] * p.x3[5][_o] + 0xffffn * p.q2[5][_o] ) + - 0x1fffen + p.q2[8][_o] ); + + case 21: return ( + (p.s[6][_o] * p.x1[15][_o] - p.s[6][_o] * p.x3[15][_o]) + + (p.s[7][_o] * p.x1[14][_o] - p.s[7][_o] * p.x3[14][_o]) + + (p.s[8][_o] * p.x1[13][_o] - p.s[8][_o] * p.x3[13][_o]) + + (p.s[9][_o] * p.x1[12][_o] - p.s[9][_o] * p.x3[12][_o]) + + (p.s[10][_o] * p.x1[11][_o] - p.s[10][_o] * p.x3[11][_o]) + + (p.s[11][_o] * p.x1[10][_o] - p.s[11][_o] * p.x3[10][_o]) + + (p.s[12][_o] * p.x1[9][_o] - p.s[12][_o] * p.x3[9][_o] ) + + (p.s[13][_o] * p.x1[8][_o] - p.s[13][_o] * p.x3[8][_o] ) + + (p.s[14][_o] * p.x1[7][_o] - p.s[14][_o] * p.x3[7][_o] + 0xffffn * p.q2[7][_o] ) + + (p.s[15][_o] * p.x1[6][_o] - p.s[15][_o] * p.x3[6][_o] + 0xffffn * p.q2[6][_o] ) + - 0x1fffen + p.q2[9][_o] ); + + case 22: return ( + (p.s[7][_o] * p.x1[15][_o] - p.s[7][_o] * p.x3[15][_o]) + + (p.s[8][_o] * p.x1[14][_o] - p.s[8][_o] * p.x3[14][_o]) + + (p.s[9][_o] * p.x1[13][_o] - p.s[9][_o] * p.x3[13][_o]) + + (p.s[10][_o] * p.x1[12][_o] - p.s[10][_o] * p.x3[12][_o]) + + (p.s[11][_o] * p.x1[11][_o] - p.s[11][_o] * p.x3[11][_o]) + + (p.s[12][_o] * p.x1[10][_o] - p.s[12][_o] * p.x3[10][_o]) + + (p.s[13][_o] * p.x1[9][_o] - p.s[13][_o] * p.x3[9][_o] ) + + (p.s[14][_o] * p.x1[8][_o] - p.s[14][_o] * p.x3[8][_o] + 0xffffn * p.q2[8][_o] ) + + (p.s[15][_o] * p.x1[7][_o] - p.s[15][_o] * p.x3[7][_o] + 0xffffn * p.q2[7][_o] ) + + p.q2[10][_o]); + + case 23: return ( + (p.s[8][_o] * p.x1[15][_o] - p.s[8][_o] * p.x3[15][_o]) + + (p.s[9][_o] * p.x1[14][_o] - p.s[9][_o] * p.x3[14][_o]) + + (p.s[10][_o] * p.x1[13][_o] - p.s[10][_o] * p.x3[13][_o]) + + (p.s[11][_o] * p.x1[12][_o] - p.s[11][_o] * p.x3[12][_o]) + + (p.s[12][_o] * p.x1[11][_o] - p.s[12][_o] * p.x3[11][_o]) + + (p.s[13][_o] * p.x1[10][_o] - p.s[13][_o] * p.x3[10][_o]) + + (p.s[14][_o] * p.x1[9][_o] - p.s[14][_o] * p.x3[9][_o] + 0xffffn * p.q2[9][_o] ) + + (p.s[15][_o] * p.x1[8][_o] - p.s[15][_o] * p.x3[8][_o] + 0xffffn * p.q2[8][_o] ) + + p.q2[11][_o]); + + case 24: return ( + (p.s[9][_o] * p.x1[15][_o] - p.s[9][_o] * p.x3[15][_o]) + + (p.s[10][_o] * p.x1[14][_o] - p.s[10][_o] * p.x3[14][_o]) + + (p.s[11][_o] * p.x1[13][_o] - p.s[11][_o] * p.x3[13][_o]) + + (p.s[12][_o] * p.x1[12][_o] - p.s[12][_o] * p.x3[12][_o]) + + (p.s[13][_o] * p.x1[11][_o] - p.s[13][_o] * p.x3[11][_o]) + + (p.s[14][_o] * p.x1[10][_o] - p.s[14][_o] * p.x3[10][_o] + 0xffffn * p.q2[10][_o]) + + (p.s[15][_o] * p.x1[9][_o] - p.s[15][_o] * p.x3[9][_o] + 0xffffn * p.q2[9][_o] ) + + p.q2[12][_o]); + + case 25: return ( + (p.s[10][_o] * p.x1[15][_o] - p.s[10][_o] * p.x3[15][_o]) + + (p.s[11][_o] * p.x1[14][_o] - p.s[11][_o] * p.x3[14][_o]) + + (p.s[12][_o] * p.x1[13][_o] - p.s[12][_o] * p.x3[13][_o]) + + (p.s[13][_o] * p.x1[12][_o] - p.s[13][_o] * p.x3[12][_o]) + + (p.s[14][_o] * p.x1[11][_o] - p.s[14][_o] * p.x3[11][_o] + 0xffffn * p.q2[11][_o]) + + (p.s[15][_o] * p.x1[10][_o] - p.s[15][_o] * p.x3[10][_o] + 0xffffn * p.q2[10][_o]) + + p.q2[13][_o]); + + case 26: return ( + (p.s[11][_o] * p.x1[15][_o] - p.s[11][_o] * p.x3[15][_o]) + + (p.s[12][_o] * p.x1[14][_o] - p.s[12][_o] * p.x3[14][_o]) + + (p.s[13][_o] * p.x1[13][_o] - p.s[13][_o] * p.x3[13][_o]) + + (p.s[14][_o] * p.x1[12][_o] - p.s[14][_o] * p.x3[12][_o] + 0xffffn * p.q2[12][_o]) + + (p.s[15][_o] * p.x1[11][_o] - p.s[15][_o] * p.x3[11][_o] + 0xffffn * p.q2[11][_o]) + + p.q2[14][_o]); + + case 27: return ( + (p.s[12][_o] * p.x1[15][_o] - p.s[12][_o] * p.x3[15][_o]) + + (p.s[13][_o] * p.x1[14][_o] - p.s[13][_o] * p.x3[14][_o]) + + (p.s[14][_o] * p.x1[13][_o] - p.s[14][_o] * p.x3[13][_o] + 0xffffn * p.q2[13][_o]) + + (p.s[15][_o] * p.x1[12][_o] - p.s[15][_o] * p.x3[12][_o] + 0xffffn * p.q2[12][_o]) + + p.q2[15][_o]); + + case 28: return ( + (p.s[13][_o] * p.x1[15][_o] - p.s[13][_o] * p.x3[15][_o]) + + (p.s[14][_o] * p.x1[14][_o] - p.s[14][_o] * p.x3[14][_o] + 0xffffn * p.q2[14][_o]) + + (p.s[15][_o] * p.x1[13][_o] - p.s[15][_o] * p.x3[13][_o] + 0xffffn * p.q2[13][_o]) + - 0x2n ); + + case 29: return ( + (p.s[14][_o] * p.x1[15][_o] - p.s[14][_o] * p.x3[15][_o] + 0xffffn * p.q2[15][_o]) + + (p.s[15][_o] * p.x1[14][_o] - p.s[15][_o] * p.x3[14][_o] + 0xffffn * p.q2[14][_o])); + + case 30: return ( + (p.s[15][_o] * p.x1[15][_o] - p.s[15][_o] * p.x3[15][_o] + 0xffffn * p.q2[15][_o]) + - 0x1fffen); + + case 31: return ( - 0x1fffen); + } + return 0n; +} diff --git a/src/sm/sm_main/helpers/helpers.js b/src/sm/sm_main/helpers/helpers.js index b62e12b0..46afd800 100644 --- a/src/sm/sm_main/helpers/helpers.js +++ b/src/sm/sm_main/helpers/helpers.js @@ -11,6 +11,67 @@ module.exports = class myHelper { ///////////// MODEXP + /** + * Compares two unsigned integers represented as arrays of BigInts. + * @param a - Unsigned integer represented as an array of BigInts. + * @param b - Unsigned integer represented as an array of BigInts. + * @returns i+1 if a > b, -i-1 if a < b, 0 if a == b, where i is the position of the first different chunk. + */ + eval_signedComparison(ctx, tag) { + const addr1 = Number(this.evalCommand(ctx, tag.params[0])); + const addr2 = Number(this.evalCommand(ctx, tag.params[1])); + const len = tag.params[2] ? Number(this.evalCommand(ctx, tag.params[2])) : 1; + + for (let i = len - 1; i >= 0; i--) { + const input1i = fea2scalar(ctx.Fr, ctx.mem[addr1 + i]); + const input2i = fea2scalar(ctx.Fr, ctx.mem[addr2 + i]); + + if (input1i !== input2i) { + return [ctx.Fr.e(input1i < input2i ? -i-1 : i+1), ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero]; + } + } + return 0; + } + + /** + * Compares two unsigned integers represented as arrays of BigInts. + * @param a - Unsigned integer represented as an array of BigInts. + * @param b - Unsigned integer represented as an array of BigInts. + * @returns i+1 if a > b, -i-1 if a < b, 0 if a == b, where i is the position of the first different chunk. + */ + eval_signedComparisonWithConst(ctx, tag) { + const addr = Number(this.evalCommand(ctx, tag.params[0])); + const input = fea2scalar(ctx.Fr, ctx.mem[addr]); + const constant = BigInt(this.evalCommand(ctx, tag.params[1])); + if (input !== constant) { + return [ctx.Fr.e(input < constant ? -1 : 1), ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero, ctx.Fr.zero]; + } else { + return 0; + } + } + + /** + * Gets the first different chunk between two unsigned integers represented as arrays of BigInts. + * @param a - Unsigned integer represented as an array of BigInts. + * @param b - Unsigned integer represented as an array of BigInts. + * @returns i, where i is the position of the first different chunk. + */ + eval_getFirstDiffChunkRem(ctx, tag) { + const addr = Number(this.evalCommand(ctx, tag.params[0])); + const len = Number(this.evalCommand(ctx, tag.params[1])); + const rem = ctx.remainder; + + for (let i = len - 1; i >= 0; i--) { + const inputi = fea2scalar(ctx.Fr, ctx.mem[addr + i]); + + if (inputi[i] !== rem[i]) { + return i; + } + } + + throw new Error("The input and the remainder are equal"); + } + /** * Compares two unsigned integers represented as arrays of BigInts. * @param a - Unsigned integer represented as an array of BigInts. diff --git a/src/sm/sm_main/sm_main_exec.js b/src/sm/sm_main/sm_main_exec.js index b8d57c3e..a10002cd 100644 --- a/src/sm/sm_main/sm_main_exec.js +++ b/src/sm/sm_main/sm_main_exec.js @@ -98,6 +98,11 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata const Fr = poseidon.F; const Fec = new F1Field(0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2fn); const Fnec = new F1Field(0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141n); + const aSecp256r1 = 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffcn; + const pSecp256r1 = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffffn; + const nSecp256r1 = 0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551n; + const FpSecp256r1 = new F1Field(pSecp256r1); + const FnSecp256r1 = new F1Field(nSecp256r1); let pBN254 = 21888242871839275222246405745257275088696311157297823662689037894645226208583n; const FpBN254 = new F1Field(pBN254); @@ -133,6 +138,9 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata Fec: Fec, Fnec: Fnec, FpBN254, + aSecp256r1, + FpSecp256r1, + FnSecp256r1, sto: input.keys, rom: rom, outLogs: {}, @@ -214,7 +222,7 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata // console.log(` found helper ${method.substring(5)} => ${method}`); } } - + ctx.helpers = helpers; try { @@ -1052,6 +1060,7 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata pols.assert[i] = 0n; } + pols.assumeFree[i] = l.assumeFree ? 1n : 0n; if (l.mOp) { pols.mOp[i] = 1n; @@ -1066,42 +1075,44 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata fe0:op0, fe1:op1, fe2:op2, fe3:op3, fe4:op4, fe5:op5, fe6:op6, fe7:op7 }); } else { + const value = l.assumeFree ? [pols.FREE0[i], pols.FREE1[i], pols.FREE2[i], pols.FREE3[i], pols.FREE4[i], pols.FREE5[i], pols.FREE6[i], pols.FREE7[i]]: + [op0, op1, op2, op3, op4, op5, op6, op7]; pols.mWR[i] = 0n; required.Mem.push({ bIsWrite: false, address: addr, pc: step, - fe0:op0, fe1:op1, fe2:op2, fe3:op3, fe4:op4, fe5:op5, fe6:op6, fe7:op7 + fe0:value[0], fe1:value[1], fe2:value[2], fe3:value[3], fe4:value[4], fe5:value[5], fe6:value[6], fe7:value[7] }); if (ctx.mem[addr]) { - if ((!Fr.eq(ctx.mem[addr][0], op0)) || - (!Fr.eq(ctx.mem[addr][1], op1)) || - (!Fr.eq(ctx.mem[addr][2], op2)) || - (!Fr.eq(ctx.mem[addr][3], op3)) || - (!Fr.eq(ctx.mem[addr][4], op4)) || - (!Fr.eq(ctx.mem[addr][5], op5)) || - (!Fr.eq(ctx.mem[addr][6], op6)) || - (!Fr.eq(ctx.mem[addr][7], op7))) + if ((!Fr.eq(ctx.mem[addr][0], value[0])) || + (!Fr.eq(ctx.mem[addr][1], value[1])) || + (!Fr.eq(ctx.mem[addr][2], value[2])) || + (!Fr.eq(ctx.mem[addr][3], value[3])) || + (!Fr.eq(ctx.mem[addr][4], value[4])) || + (!Fr.eq(ctx.mem[addr][5], value[5])) || + (!Fr.eq(ctx.mem[addr][6], value[6])) || + (!Fr.eq(ctx.mem[addr][7], value[7]))) { const memdata = ctx.mem[addr].slice().reverse().join(','); const hmemdata = ctx.mem[addr].slice().reverse().map((x)=>x.toString(16).padStart(8,'0')).join(''); - const opdata = [op7,op6,op5,op4,op3,op2,op1,op0].join(','); - const hopdata = [op7,op6,op5,op4,op3,op2,op1,op0].map((x)=>x.toString(16).padStart(8,'0')).join(''); - throw new Error(`Memory Read does not match MEM[${addr}]=[${memdata}] OP=[${opdata}] ${sourceRef}\n${hmemdata}\n${hopdata}`); + const opdata = value.slice().reverse().join(','); + const hopdata = value.slice().reverse().map((x)=>x.toString(16).padStart(8,'0')).join(''); + throw new Error(`Memory Read does not match MEM[${addr}]=[${memdata}] ${l.assumeFree ? "FREE" : "OP"}=[${opdata}] ${sourceRef}\n${hmemdata}\n${hopdata}`); } } else { - if ((!Fr.isZero(op0)) || - (!Fr.isZero(op1)) || - (!Fr.isZero(op2)) || - (!Fr.isZero(op3)) || - (!Fr.isZero(op4)) || - (!Fr.isZero(op5)) || - (!Fr.isZero(op6)) || - (!Fr.isZero(op7))) + if ((!Fr.isZero(value[0])) || + (!Fr.isZero(value[1])) || + (!Fr.isZero(value[2])) || + (!Fr.isZero(value[3])) || + (!Fr.isZero(value[4])) || + (!Fr.isZero(value[5])) || + (!Fr.isZero(value[6])) || + (!Fr.isZero(value[7]))) { const memdata = ctx.mem[addr].slice().reverse().join(','); - const opdata = [op7,op6,op5,op4,op3,op2,op1,op0].join(','); - throw new Error(`Memory Read does not match with non-initialized MEM[${addr}]=[${memdata}] OP=[${opdata}] ${sourceRef}`); + const opdata = value.slice().reverse().join(','); + throw new Error(`Memory Read does not match with non-initialized MEM[${addr}]=[${memdata}] ${l.assumeFree ? "FREE" : "OP"}=[${opdata}] ${sourceRef}`); } } @@ -1560,8 +1571,12 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata required.Binary.push({a: op, b: 0xFFFFFFFF00000001FFFFFFFF00000001FFFFFFFF00000001FFFFFFFF00000001n, c: 1n, opcode: 8, type: 2}); } - if (l.arithEq0 || l.arithEq1 || l.arithEq2 || l.arithEq3 || l.arithEq4 || l.arithEq5) { - if (l.arithEq0 && !l.arithEq1 && !l.arithEq2 && !l.arithEq3 && !l.arithEq4 && !l.arithEq5) { + if (l.arith) { + pols.arith[i] = 1n; + pols.arithSame12[i] = (l.arithEq == 3 || l.arithEq == 8) ? 1n : 0n; + pols.arithUseE[i] = (l.arithEq != 1) ? 1n : 0n; + pols.arithEq[i] = BigInt(l.arithEq); + if (l.arithEq == 1) { const A = safeFea2scalar(Fr, ctx.A); const B = safeFea2scalar(Fr, ctx.B); const C = safeFea2scalar(Fr, ctx.C); @@ -1579,14 +1594,11 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata + ' (0x' + right.toString(16)+')'); throw new Error(`Arithmetic(Eq0) does not match ${sourceRef}`); } - pols.arithEq0[i] = 1n; - pols.arithEq1[i] = pols.arithEq2[i] = pols.arithEq3[i] = pols.arithEq4[i] = pols.arithEq5[i] = 0n; required.Arith.push({ x1: ctx.A, y1: ctx.B, x2: ctx.C, y2: ctx.D, - x3: Fr8zero, y3: [op0, op1, op2, op3, op4, op5, op6, op7], - selEq0: 1, selEq1: 0, selEq2: 0, selEq3: 0, selEq4: 0, selEq5: 0, selEq6: 0}); + x3: Fr8zero, y3: [op0, op1, op2, op3, op4, op5, op6, op7], arithEq: Number(l.arithEq)}); } - else if (!l.arithEq0 && !l.arithEq1 && !l.arithEq2 && l.arithEq3 && !l.arithEq4 && !l.arithEq5) { + else if (l.arithEq == 4) { const x1 = safeFea2scalar(Fr, ctx.A); const y1 = safeFea2scalar(Fr, ctx.B); const x2 = safeFea2scalar(Fr, ctx.C); @@ -1614,14 +1626,11 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata throw new Error(`Arithmetic FP2 multiplication point does not match: ${sourceRef}`); } - pols.arithEq0[i] = pols.arithEq1[i] = pols.arithEq2[i] = pols.arithEq4[i] = pols.arithEq5[i] = 0n; - pols.arithEq3[i] = 1n; required.Arith.push({x1:ctx.A, y1:ctx.B, x2:ctx.C, y2:ctx.D, - x3:ctx.E, y3:[op0, op1, op2, op3, op4, op5, op6, op7], - selEq0: 0, selEq1: 0, selEq2: 0, selEq3: 0, selEq4: 1, selEq5: 0, selEq6: 0}); + x3:ctx.E, y3:[op0, op1, op2, op3, op4, op5, op6, op7], arithEq: 4}); } - else if (!l.arithEq0 && !l.arithEq1 && !l.arithEq2 && !l.arithEq3 && l.arithEq4 && !l.arithEq5) { + else if (l.arithEq == 5) { const x1 = safeFea2scalar(Fr, ctx.A); const y1 = safeFea2scalar(Fr, ctx.B); const x2 = safeFea2scalar(Fr, ctx.C); @@ -1648,14 +1657,11 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata throw new Error(`Arithmetic FP2 addition does not match: ${sourceRef}`); } - pols.arithEq0[i] = pols.arithEq1[i] = pols.arithEq2[i] = pols.arithEq3[i] = pols.arithEq5[i] = 0n; - pols.arithEq4[i] = 1n; required.Arith.push({x1:ctx.A, y1:ctx.B, x2:ctx.C, y2:ctx.D, - x3:ctx.E, y3:[op0, op1, op2, op3, op4, op5, op6, op7], - selEq0: 0, selEq1: 0, selEq2: 0, selEq3: 0, selEq4: 0, selEq5: 1, selEq6: 0}); + x3:ctx.E, y3:[op0, op1, op2, op3, op4, op5, op6, op7], arithEq: 5}); } - else if (!l.arithEq0 && !l.arithEq1 && !l.arithEq2 && !l.arithEq3 && !l.arithEq4 && l.arithEq5) { + else if (l.arithEq == 6) { const x1 = safeFea2scalar(Fr, ctx.A); const y1 = safeFea2scalar(Fr, ctx.B); const x2 = safeFea2scalar(Fr, ctx.C); @@ -1682,14 +1688,11 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata throw new Error(`Arithmetic FP2 subtraction does not match: ${sourceRef}`); } - pols.arithEq0[i] = pols.arithEq1[i] = pols.arithEq2[i] = pols.arithEq3[i] = pols.arithEq4[i] = 0n; - pols.arithEq5[i] = 1n; required.Arith.push({x1:ctx.A, y1:ctx.B, x2:ctx.C, y2:ctx.D, - x3:ctx.E, y3:[op0, op1, op2, op3, op4, op5, op6, op7], - selEq0: 0, selEq1: 0, selEq2: 0, selEq3: 0, selEq4: 0, selEq5: 0, selEq6: 1}); + x3:ctx.E, y3:[op0, op1, op2, op3, op4, op5, op6, op7], arithEq: 6}); } - else { + else if (l.arithEq == 2 || l.arithEq == 3 || l.arithEq == 7 || l.arithEq == 8) { const x1 = safeFea2scalar(Fr, ctx.A); const y1 = safeFea2scalar(Fr, ctx.B); const x2 = safeFea2scalar(Fr, ctx.C); @@ -1697,34 +1700,39 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata const x3 = safeFea2scalar(Fr, ctx.E); const y3 = safeFea2scalar(Fr, [op0, op1, op2, op3, op4, op5, op6, op7]); let dbl = false; - if ((!l.arithEq0) && l.arithEq1 && (!l.arithEq2) && (!l.arithEq3) && (!l.arithEq4) && (!l.arithEq5)) { + if (l.arithEq == 2 || l.arithEq == 7) { dbl = false; - } else if ((!l.arithEq0) && (!l.arithEq1) && l.arithEq2 && (!l.arithEq3) && (!l.arithEq4) && (!l.arithEq5)) { + } else if (l.arithEq == 3 || l.arithEq == 8) { dbl = true; } else { - throw new Error(`Invalid arithmetic op (aritEq0:${l.arithEq0}, aritEq1:${l.arithEq1}, aritEq2:${l.arithEq2}, aritEq3:${l.arithEq3}, aritEq4:${l.arithEq4}, aritEq5:${l.arithEq5}) ${sourceRef}`); + throw new Error(`Invalid arithmetic op (aritEq:${l.arithEq}) ${sourceRef}`); } + let arithFp = (l.arithEq == 7 || l.arithEq == 8) ? FpSecp256r1 : Fec; let s; if (dbl) { // Division by zero must be managed by ROM before call ARITH - const divisor = Fec.add(Fec.e(y1), Fec.e(y1)); - if (Fec.isZero(divisor)) { - throw new Error(`Invalid arithmetic op, DivisionByZero (aritEq0:${l.arithEq0}, aritEq1:${l.arithEq1}, aritEq2:${l.arithEq2}, aritEq3:${l.arithEq3}, aritEq4:${l.arithEq4}, aritEq5:${l.arithEq5}) ${sourceRef}`); + const divisor = arithFp.add(arithFp.e(y1), arithFp.e(y1)); + if (arithFp.isZero(divisor)) { + throw new Error(`Invalid arithmetic op, DivisionByZero (aritEq:${l.arithEq}) ${sourceRef}`); + } + if (l.arithEq == 8) { + s = arithFp.div(arithFp.add(arithFp.mul(3n, arithFp.mul(arithFp.e(x1), arithFp.e(x1))),ctx.aSecp256r1), divisor); + } else { + s = arithFp.div(arithFp.mul(3n, arithFp.mul(arithFp.e(x1), arithFp.e(x1))), divisor); } - s = Fec.div(Fec.mul(3n, Fec.mul(Fec.e(x1), Fec.e(x1))), divisor); } else { // Division by zero must be managed by ROM before call ARITH - const deltaX = Fec.sub(Fec.e(x2), Fec.e(x1)) - if (Fec.isZero(deltaX)) { - throw new Error(`Invalid arithmetic op, DivisionByZero (aritEq0:${l.arithEq0}, aritEq1:${l.arithEq1}, aritEq2:${l.arithEq2}, aritEq3:${l.arithEq3}, aritEq4:${l.arithEq4}, aritEq5:${l.arithEq5}) ${sourceRef}`); + const deltaX = arithFp.sub(arithFp.e(x2), arithFp.e(x1)) + if (arithFp.isZero(deltaX)) { + throw new Error(`Invalid arithmetic op, DivisionByZero (aritEq:${l.arithEq}) ${sourceRef}`); } - s = Fec.div(Fec.sub(Fec.e(y2), Fec.e(y1)), deltaX); + s = arithFp.div(arithFp.sub(arithFp.e(y2), arithFp.e(y1)), deltaX); } - const _x3 = Fec.sub(Fec.mul(s, s), Fec.add(Fec.e(x1), dbl ? Fec.e(x1) : Fec.e(x2))); - const _y3 = Fec.sub(Fec.mul(s, Fec.sub(Fec.e(x1),x3)), Fec.e(y1)); + const _x3 = arithFp.sub(arithFp.mul(s, s), arithFp.add(arithFp.e(x1), dbl ? arithFp.e(x1) : arithFp.e(x2))); + const _y3 = arithFp.sub(arithFp.mul(s, arithFp.sub(arithFp.e(x1),x3)), arithFp.e(y1)); const x3eq = Scalar.eq(x3, _x3); const y3eq = Scalar.eq(y3, _y3); @@ -1740,24 +1748,15 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata throw new Error('Arithmetic curve '+(dbl?'dbl':'add')+` point does not match: ${sourceRef}`); } - pols.arithEq0[i] = 0n; - pols.arithEq1[i] = dbl ? 0n : 1n; - pols.arithEq2[i] = dbl ? 1n : 0n; - pols.arithEq3[i] = 0n; - pols.arithEq4[i] = 0n; - pols.arithEq5[i] = 0n; required.Arith.push({x1: ctx.A, y1: ctx.B, x2: dbl ? ctx.A:ctx.C, y2: dbl? ctx.B:ctx.D, - x3: ctx.E, y3: [op0, op1, op2, op3, op4, op5, op6, op7], - selEq0: 0, selEq1: dbl ? 0 : 1, selEq2: dbl ? 1 : 0, selEq3: 1, selEq4: 0, selEq5: 0, selEq6: 0}); + x3: ctx.E, y3: [op0, op1, op2, op3, op4, op5, op6, op7], arithEq: l.arithEq}); } } else { - pols.arithEq0[i] = 0n; - pols.arithEq1[i] = 0n; - pols.arithEq2[i] = 0n; - pols.arithEq3[i] = 0n; - pols.arithEq4[i] = 0n; - pols.arithEq5[i] = 0n; + pols.arith[i] = 0n; + pols.arithSame12[i] = 0n; + pols.arithUseE[i] = 0n; + pols.arithEq[i] = 0n; } if (l.bin) { @@ -1948,6 +1947,17 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata const nexti = (i+1) % N; + [ pols.op0[i], + pols.op1[i], + pols.op2[i], + pols.op3[i], + pols.op4[i], + pols.op5[i], + pols.op6[i], + pols.op7[i] + ] = [op0, op1, op2, op3, op4, op5, op6, op7]; + + if (l.setA == 1) { pols.setA[i]=1n; [pols.A0[nexti], @@ -2216,7 +2226,7 @@ module.exports = async function execute(pols, input, rom, config = {}, metadata pols.RR[nexti] = l.call ? (ctx.zkPC + 1n) : pols.RR[i]; } - if (!skipCounters && (l.arithEq0 || l.arithEq1 || l.arithEq2 || l.arithEq3 || l.arithEq4 || l.arithEq5)) { + if (!skipCounters && l.arith) { pols.cntArith[nexti] = pols.cntArith[i] + 1n; } else { pols.cntArith[nexti] = pols.cntArith[i]; @@ -3176,6 +3186,8 @@ function eval_functionCall(ctx, tag) { return eval_inverseFpEc(ctx, tag); } else if (tag.funcName == "inverseFnEc") { return eval_inverseFnEc(ctx, tag); + } else if (tag.funcName == "inverseFnEc_secp256r1") { + return eval_inverseFnEc_secp256r1(ctx, tag); } else if (tag.funcName == "sqrtFpEcParity") { return eval_sqrtFpEcParity(ctx, tag); } else if (tag.funcName == "dumpRegs") { @@ -3194,6 +3206,14 @@ function eval_functionCall(ctx, tag) { return eval_yDblPointEc(ctx, tag); } else if (tag.funcName == "beforeLast") { return eval_beforeLast(ctx, tag) + } else if (tag.funcName == "xAddPointEc_secp256r1") { + return eval_xAddPointEc_secp256r1(ctx, tag); + } else if (tag.funcName == "yAddPointEc_secp256r1") { + return eval_yAddPointEc_secp256r1(ctx, tag); + } else if (tag.funcName == "xDblPointEc_secp256r1") { + return eval_xDblPointEc_secp256r1(ctx, tag); + } else if (tag.funcName == "yDblPointEc_secp256r1") { + return eval_yDblPointEc_secp256r1(ctx, tag); } else if (tag.funcName.includes("bitwise")) { return eval_bitwise(ctx, tag); } else if (tag.funcName.includes("comp") && tag.funcName.split('_')[0] === "comp") { @@ -3548,6 +3568,14 @@ function eval_inverseFnEc(ctx, tag) { return ctx.Fnec.inv(a); } +function eval_inverseFnEc_secp256r1(ctx, tag) { + const a = ctx.FnSecp256r1.e(evalCommand(ctx, tag.params[0])); + if (ctx.FnSecp256r1.isZero(a)) { + throw new Error(`inverseFpEc: Division by zero ${ctx.sourceRef}`); + } + return ctx.FnSecp256r1.inv(a); +} + function eval_sqrtFpEcParity(ctx, tag) { const a = evalCommand(ctx, tag.params[0]); const parity = evalCommand(ctx, tag.params[1]); @@ -3562,47 +3590,63 @@ function eval_sqrtFpEcParity(ctx, tag) { } function eval_xAddPointEc(ctx, tag) { - return eval_AddPointEc(ctx, tag, false)[0]; + return eval_AddPointEc(ctx, ctx.Fec, tag, false)[0]; } function eval_yAddPointEc(ctx, tag) { - return eval_AddPointEc(ctx, tag, false)[1]; + return eval_AddPointEc(ctx, ctx.Fec, tag, false)[1]; } function eval_xDblPointEc(ctx, tag) { - return eval_AddPointEc(ctx, tag, true)[0]; + return eval_AddPointEc(ctx, ctx.Fec, tag, true)[0]; } function eval_yDblPointEc(ctx, tag) { - return eval_AddPointEc(ctx, tag, true)[1]; + return eval_AddPointEc(ctx, ctx.Fec, tag, true)[1]; +} + +function eval_xAddPointEc_secp256r1(ctx, tag) { + return eval_AddPointEc(ctx, ctx.FpSecp256r1, tag, false)[0]; +} + +function eval_yAddPointEc_secp256r1(ctx, tag) { + return eval_AddPointEc(ctx, ctx.FpSecp256r1, tag, false)[1]; +} + +function eval_xDblPointEc_secp256r1(ctx, tag) { + return eval_AddPointEc(ctx, ctx.FpSecp256r1, tag, true, ctx.aSecp256r1)[0]; +} + +function eval_yDblPointEc_secp256r1(ctx, tag) { + return eval_AddPointEc(ctx, ctx.FpSecp256r1, tag, true, ctx.aSecp256r1)[1]; } -function eval_AddPointEc(ctx, tag, dbl) +function eval_AddPointEc(ctx, Fp, tag, dbl, a = 0n) { - const x1 = ctx.Fec.e(evalCommand(ctx, tag.params[0])); - const y1 = ctx.Fec.e(evalCommand(ctx, tag.params[1])); - const x2 = ctx.Fec.e(evalCommand(ctx, tag.params[dbl ? 0 : 2])); - const y2 = ctx.Fec.e(evalCommand(ctx, tag.params[dbl ? 1 : 3])); + const x1 = Fp.e(evalCommand(ctx, tag.params[0])); + const y1 = Fp.e(evalCommand(ctx, tag.params[1])); + const x2 = Fp.e(evalCommand(ctx, tag.params[dbl ? 0 : 2])); + const y2 = Fp.e(evalCommand(ctx, tag.params[dbl ? 1 : 3])); let s; if (dbl) { // Division by zero must be managed by ROM before call ARITH - const divisor = ctx.Fec.add(y1, y1) - if (ctx.Fec.isZero(divisor)) { + const divisor = Fp.add(y1, y1) + if (Fp.isZero(divisor)) { throw new Error(`Invalid AddPointEc (divisionByZero) ${ctx.sourceRef}`); } - s = ctx.Fec.div(ctx.Fec.mul(3n, ctx.Fec.mul(x1, x1)), divisor); + s = Fp.div(Fp.add(Fp.mul(3n, Fp.mul(x1, x1)), a), divisor); } else { - const deltaX = ctx.Fec.sub(x2, x1) - if (ctx.Fec.isZero(deltaX)) { + const deltaX = Fp.sub(x2, x1) + if (Fp.isZero(deltaX)) { throw new Error(`Invalid AddPointEc (divisionByZero) ${ctx.sourceRef}`); } - s = ctx.Fec.div(ctx.Fec.sub(y2, y1), deltaX ); + s = Fp.div(Fp.sub(y2, y1), deltaX ); } - const x3 = ctx.Fec.sub(ctx.Fec.mul(s, s), ctx.Fec.add(x1, x2)); - const y3 = ctx.Fec.sub(ctx.Fec.mul(s, ctx.Fec.sub(x1,x3)), y1); + const x3 = Fp.sub(Fp.mul(s, s), Fp.add(x1, x2)); + const y3 = Fp.sub(Fp.mul(s, Fp.sub(x1,x3)), y1); return [x3, y3]; } diff --git a/src/sm/sm_rom.js b/src/sm/sm_rom.js index 3b6f507f..97c68cab 100644 --- a/src/sm/sm_rom.js +++ b/src/sm/sm_rom.js @@ -10,12 +10,6 @@ module.exports.buildConstants = async function buildConstants(pols, rom) { const N = pols.offset.length; - const twoTo31 = Scalar.e(0x80000000); - const maxInt = 2147483647; - const minInt = -2147483648; - const maxUInt = 0xFFFFFFFF; - const minUInt = 0; - if (rom.program.length>N) throw new Error("Rom is too big for this N"); for (let i=0; i E + ${yAddPointEc_secp256r1(A,B,C,D)} :ARITH_SECP256R1_ECADD_DIFFERENT + + :RETURN + +init_secp256r1_ecadd_different: + +INCLUDE "secp256r1_ecadd_different_ops.zkasm" diff --git a/test/diagnostic/operations/arith/secp256r1_ecadd_different_ops.zkasm b/test/diagnostic/operations/arith/secp256r1_ecadd_different_ops.zkasm new file mode 100644 index 00000000..cd5b7e9e --- /dev/null +++ b/test/diagnostic/operations/arith/secp256r1_ecadd_different_ops.zkasm @@ -0,0 +1,2570 @@ + 0x544311262e9e2949e7601fc620d04082c46fa29d94a9b414f5dde31c7aac09f8n => A + 0xcc19d44560f5cbe1b96a22b4ea202ab68ff9083763a4a1a1cbac1ca9b6ed11d4n => B + 0xf92c7bc653fc5e5e16b2d1b5a4f8c85078dbd737e46eefd1186d5d453cb71c04n => C + 0xe78feb012c46fc1a79af6ad830ccb124de7de7b9313122420fa30bdc83f4057fn => D + 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffcn => E + 0x19719bebf6aea13f25c96dfd7c71f5225d4c8fc09eb5a0ab9f39e9178e55c121n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc80ff59db5ecd988dbaba55f9197a5844c00e515ecc62dac46bad5c5280868a6n => A + 0x0bbe8299fca62abd0932ab0c53cd66b6609cc6720106d210f7750fcc6c445988n => B + 0x9597af33e3e9acbbf303ccb4b36aeb455979fe6ca35d9f27e86fae5aacda1a08n => C + 0x1ef8ce2d14fb74686b648427dd6ba4e44bf805c5590a65bdc6ff00e55dd83d2an => D + 0x8d0177ebab9c6e9e10db6dd095dbac0d6375e8a97b70f611875d877f0069d2c7n => E + 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffen : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x728cad943915a8c2efee531dd868edeb750b818c442a4498fea8e578b6eb9d29n => A + 0x94548cd42b424a4a88173ef56add5b298ada92c024fd21436c19c020b6f782d2n => B + 0x7f45378a3e45b342403c9f645cfa8bcd94881f1bdbf3388d36c5c40fae0336c1n => C + 0x3b486438f3e1b4ffd9cb58225995377ffdd3d58abc6eeddc3e5ea2d5ea10082cn => D + 0x6916fac45e568b6b9e2e2ecd611b282e5fcc40a3067d601057f879ce5a8a73ccn => E + 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffen : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf1d898302bece96207dd09e66b6f757c075c9dac71481d8f7be86078a7a7680bn => A + 0x0f85c74d9c66eb832a56c30075639872c7d595896487c52ec54a8e3d77c52ff4n => B + 0x4d65715346abae062a2577e6499b399daf79c4d6a53ef42f2e8df978d48a11d5n => C + 0x0440185eb737b00ed02a5127d0f637eeecb3e8c94576966c77d4326e10007bf7n => D + 0x09e78d4ef60d05f750f6636209092bc43cbdd6b47e11a9de20a9feb2a50bb96cn => E + 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffen : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf1d898302bece96207dd09e66b6f757c075c9dac71481d8f7be86078a7a7680bn => A + 0x0f85c74d9c66eb832a56c30075639872c7d595896487c52ec54a8e3d77c52ff4n => B + 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296n => C + 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5n => D + 0x631008960febc7f0ace90a3f8506b769a1996b53d3a72edeeb4e40a99ef7a97bn => E + 0xee84d2bc5569e66b0a195966b2f24f6d5af8f4759fb980d0f6020ca7159569d0n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa277ede1dca8ba1771285fe2ffe93dc8b5a6d82d99ab89e409c93fe2ac92e2e0n => A + 0x5dc0fe0c2e8dc17f538b796426f0fdd4bcad47c44a5d47aa182faf02e70d7f5bn => B + 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296n => C + 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5n => D + 0x07d1d880d6472b83e710925066d89a1828621fb5650bfe45677b2edb98133b11n => E + 0x800604e5922d48ad818f805560d9dae014c6067ade0d1b9b6bf2de09499c6090n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x880980298c13fa348c291dead5168563cf85063f234dfe2a7c8bbe274a008ab5n => A + 0xb5022b60d8ea81fe63a7ecb7338e734caf73524876ea58d20a60758820e5d9e6n => B + 0xbce5a0ecd249ba4fdd4aefd7775addf51171096ddd5a3dfb52e6773de01ec076n => C + 0x3cb12c7f5f4181583cb113d7bc7663151b81b1619c8b50071587c7d46ee6ba59n => D + 0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296n => E + 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9b09703235204c5107fbfde0699bb9d99335a5d71fbcbf0d8ad05dfa7e95f809n => A + 0x739c8f31333aeed1fbcbd4312dd4a735ee7409071995b2b1457b21f343454d64n => B + 0x082a92d9d42bc31a62d2751ce140d91349e54c2446b7ef8b34cbe8c19de62359n => C + 0xf7af858c099172bb585db2445a4925a7cf15b3c9d12e252498a3d6928345c111n => D + 0xbe2e87bcbd397d70f1721f9c66f9099c3f40fdf38c2a1c1e7f53ead8d9faea77n => E + 0xb8f8af095dfc9e14ee1252060c93f79120202d9ea5c5fdb53b64ff355ee0db41n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xfc6c194044b07efdd0abd9a9ae12f5506afa47381211f5b09ee0a371666afd6dn => A + 0x826d12e63bc33ab066a1991d0c2e08c5512a6312a9461815c49b3983f88ce45en => B + 0x367b481788c6934a9bc3c5c187dd6be37b2b9fa83e332416ab69e8c0be5aae68n => C + 0x2a25a8cbe6592dc2caefc064b66318c70ded5d7d1c754d7d66f6e96fe7ddf1bcn => D + 0x58158a6b799a2879d992deabfe73a940e657d5363ae8d4d63b3139065c927b23n => E + 0xb9dc3c4047e8f5d5f5bfb2b58bea76b1fcd86709b9a00b9996ce2a7baeb137cfn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf374f93d33e90700da7b6e4ce21d222d3522ef70c031d03156146275d5264befn => A + 0x0c753a0e4d05ead857678cefd1c90fbdbbf3ff45ebb8d10f9120e7656f52b7adn => B + 0x9a46da9be3479cbf8e01b4e21f57fc09ac498c103ddfbe93ebf0e74194336bb1n => C + 0x42c0dddd5decb9ecaf88c66be33530c48a2a995d1822173b7a9d1e5e62eb6073n => D + 0xf90fc4f3f9e7117db8b1a37865c0d3680957b07777c163eec142f758d1eaffdbn => E + 0x143d0e9aee5914ecea913dcee2ed2ae6512642ff73e04c40811d5b0e7dbfa19cn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x4d63567e4a3e07501fc8ec9f2371cd7b2e5639c024ee58b2805528849cab02bfn => A + 0x5968318736518610940f1906b60b3d03caf2c5d5209b7f76077534653fc59c70n => B + 0x89bcc00534579b0c06c34261943eddc15042582ba61c5918b4ebabcf03cf274fn => C + 0xbaba670e0f12d8b1207fb31768bb74b16fbc819d1fe0249ffbf0c072c3269aacn => D + 0xafd8ec01a71e515e04949832122325c08c56498d840e5f2ccd70203d055a9be2n => E + 0xe67788f379b841f0a1c33eae3193971d5290a6a3ef71817cdc760452cae56ad9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x6d252ff4f92477294c9351f0d341e6c0e17f83c6eb0a21e44c46915a0164d1aan => A + 0xc41d129be1aef30da379566239af7a64e7735ef370f7d871a989def9c56043c1n => B + 0x58b80200fa2d0a03537e063e5170cb66b0bc4c44f9ddf623378bdc3227dbc0fcn => C + 0x9aedd428d8911f49a6a73b537d08e0fc8172da7446dae4a5036f47e918094d9cn => D + 0x0af6350d7cc1948600e5be49d63c036a6cc3766c2239df072f3dd2bd6956ae72n => E + 0xe143779b1b4d5739aea696adb2cc8c6e8c5f6be3356b4e69f87b30a5eb5c1fcan : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x717e74d5418df32aad432534e1d90f1731d63bd10e49eee3220d82ef4526863dn => A + 0xd58217dea6c4bff5820692183979826922efbbe5f9e888eda9df855ee706c14dn => B + 0xd9f84a5436b1e76b2bb4e12fefdb43471831215b79d4d8eb50ee53df5aa4c9a6n => C + 0x23a13ff76bf841736252f2f6d03898d02543f4a81e543a102d3e94106aba08fdn => D + 0xd0daf4d54737c18e2054e9b6d50a21cb0d8e9db7dfa8cc7686c408342c769391n => E + 0xbfd95937454101c49e16c26f8c8d03beab0c0b666b92d75d2691e7b695f717dbn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x7e0b2add1d3da41e951a8519720c2a21b09a0e75f25cdffaf3a3aa942be8b0ffn => A + 0x3b29ee302663d609672b53ff5d4e77e05a61100a6d175549d7a5f1abcf2530e8n => B + 0xaa0203abb0da02083e86a5f32cb649796ceb3503801c31c701aa72f69fe5426en => C + 0x91c9de09e8d157823a0cc41d1d593cafb3821bb87e8b1dca203d434afef92836n => D + 0x16c66105185e08a7b2f3aa4cf9d5d53b69580aa0d502e8f6f2e138ca6b15e690n => E + 0x4b9a3cb50095720d3617a8400a973a1c66626e428ab4c9d1e5119f1c8e6e7e44n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd4f7fc2d544cb457470ca2c5279621a328bb085226d4c1f13b219add2a34bddbn => A + 0xfe4114fb00ba4b3b931db10bbf85ad93010180cd0b99f97ca9cabc70769fc678n => B + 0x934a4bcc79f24b3bb24daa5b65005ded8abfe26ad2a5e024051aa2d975d2ba71n => C + 0x4612044f980b50801936c8bdfec340151e1c79b9490c77a40696293536db27aan => D + 0x0180f449b05cdfd43331e1142c74c1a1489f7e28ba051343bb649775925a2a49n => E + 0xc3482813524133bd0713802b10df54fcf711604bf1781b58534b389a90f0be52n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf5acd4295a42de927b64cce32ab07f39a55b51e9b356fb41afb6135afade15d6n => A + 0x56f4121195043c328b2e62b44e8b5310a8533774378a969ddf72155becb5bed1n => B + 0xe8c7d027ba974a9f085e0fbede8f955f5fb56478a456b032ab7111b73840e515n => C + 0xde4b1b6f04dc0b2bc2a29706e8932e1fd0a6c4ef4d4e5aa0513aa9d016f0bf93n => D + 0x48fda38c649aa612581bf12022d59f7063b82c9bea7d3c2ee372b92eee30d408n => E + 0x60974c981ec99ff78282fee254add068946bc9e9065eff991341255b182364d8n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa8b1329a729617bfa7dc5f0bcd5ddaca3f7bb90e2eef81da5f5c5b513557d05an => A + 0x69e5a8943d638ad759c19fd947c95c241e233300d7a78eba097fe22953621a8en => B + 0xde56890ba7acf5813c0e21192799784cbdbdbcc7386252e35b39f3f9dc73f297n => C + 0xba842606ebc65c0d5cfda01317fe04f61bd65d0b2e61aa9b6fe61a31f55d0448n => D + 0xc4827be550dbc4f31cbb885d9b6d537248d9c01fb18f255f35952f8355d762a0n => E + 0x023bbf9b761ecc3acbe4f58a454f74083c858736f95a23d1175ff2e17a5895e0n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8a8f3a51c5c3cb6f24d38b7d2e154cf448db359ed9dc1ad09115264624da3539n => A + 0x749e8e4e713ed2cb79935ddfe0d479fd70b57ef2b4f0b7f544e0aaba80fe021cn => B + 0x90cf6477ce03d46cd73fc89adeb4c005ebe7eb129cefd0f3867fc9c185143b50n => C + 0x6722753ca739e044470cd96ed95517488de8c5c122ab468d1c4e2beaa6d5fb59n => D + 0x78aa88027be64426fa910002ad0bad5949346d781b04ab9ad3d86d2d5f291f58n => E + 0x856b5861ae3ac7e652281f942565e1c35c2cbd8636c9965e97f6413214b423b2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc3854902515ce1aeb4130f4eb5abdd32a146d7461e9af322e5fb354c849d3700n => A + 0xd09c53b0a5c6de33d0dbf78f6c41ed9b98fcd8bbd556d26b78d7e75648e3f485n => B + 0x5dacb83388cbcadf1d46f9781ae810e7fe68e5f5af9d81b31df2f3728f40ed02n => C + 0x708713a63e5846f330a7a1247ec3d891faba6df496888f5c913d4aefbe99b7acn => D + 0x8bea10ccc81a1d10ff4beb01c41e873e17326e9ad9b9b657459431c56448ceb5n => E + 0x7b4f5d474525ed89cfa0c53f2d2f1d5e5b5140b48ace02f7796f756cbfc4b807n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x0022682cd1857495a2d8ae5fafa1f8160d1679fb1375c30a2b23370f8e852815n => A + 0x1770d71f219164c6a30813941ccf7cb8955998527bc2b40ebe7ba8dc60e0295bn => B + 0x7f8c5d00e286cb08db94bab9ed15150456bdd021cc558e2612c0959634ef4933n => C + 0xa336c59b9ceac8a162d83f56180bc675c2aea8e24182391a5fcaa8a889fd6d14n => D + 0x8cba65131111d5d0fb537b0ee65e3b822e52bb5f48dda253d1fa338d7248757en => E + 0x5e4b42975bca166dbe9824cc592344ac1fe57f310a3bc31a46a1b7f3ad39bff2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x46fd62327fcad87b30652190857f1553c43d1575897290d230db4ac0a6dfab61n => A + 0x5672a56495fb417b80ebc7bacae4119af7ae1871851f3e60a7830ae172e20cf0n => B + 0xf8eb19d475aae589d7a70ca84adf182af44ebda238b2949db95349c5b513a81en => C + 0xe7aaad2af3244ac69354c7e057d58e819233ba04674748c812af52e67553b86fn => D + 0xd12947f526a93f9e8ad69c7b3e53454b9d9c18bf952b09d9baf9f2e0411a9badn => E + 0xf08353fd4a3c36e73d738a7d872652fa7726bf6caf10405f53b6ef72385bc4e4n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x91e97aa7c9437d8d6d5acf4580303f7bcdb457708f7df0aa5c0eb42bbc011b50n => A + 0x6a71ed27da41cf7da10ab7fa42c87133f888d0704194889bdc747aac04cd41een => B + 0xdfa71093eb5bc8617dad05565398a80afa408f3adcb15acab22410667804e088n => C + 0x196b9224060cc1f83bf0a5187a97575771b4520deb12ac9527d07c81312d90b2n => D + 0xde2789166b6ee2f715ce0bb391988a608626f955dd8115bd35e0e01ecf17e508n => E + 0x2ebe8cd65b05cc9d13eb7af45030c7e386ecb2f618927d4b337fb08395c4a621n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xdd97ab88aff2be4e453baea3246ba4423551f2b08273dcae2f622e89e5b38b28n => A + 0x9560a22d9480dfa7c8346c32548e4b24ad62b0200a501e2b148d10c41b62db1an => B + 0x9dcc8dca4bc34c086b7d192a2bbeda95802562527ed7c2cb420436ebaf548f25n => C + 0xb1324203fab2001ae3677b7ac142ed5b6377b6578e2ec82e392f923107beda00n => D + 0xdeee79dd24fd39d71a29632cc4ff291293275c381f53cfb873183dc3f94f750bn => E + 0xacbf29294fcfcfb2227ccdefde4575fb63dc1742a068646815ea5481301af26dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb132ee670568cc09692f20404db3c42b99cc22653e314ca43192628f32e073f4n => A + 0xddbd427d3dd0237813e58a630eab1adbf9ea7cd757509a21ba61ff3cb5f3ebd0n => B + 0xd60af87195561ea696d4f057e4e6e0a07b1b717e2c4d089328e805d4fedfbd14n => C + 0x80a3332132d77f920c5190c77aead23d7dc5c6a25e53dc913f4cc89d88ba331cn => D + 0x80be40cf93a7500f12fed7c740e776e19c86cd591e925e8a6c7ddc109264dbafn => E + 0xa95cb70b8ca8e2671b15bff13265a7cb226d6d004da54d5804f49ec495555e1dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xaf3614a9186ea4734825822589b6693e7be623e9afc5819039a8c3dcd4343ba7n => A + 0x2dab2c8d12fbacf6bc923945c8559ced32e345da8df8128033a92c0f60695924n => B + 0x56e4f871f6a365a99e0320b6dd30160fc7c83c3985d5801cce976a4718b561a6n => C + 0x8857af768ae3567cf0551777b51d073b2d094c169b72716d07610cf43b2238b7n => D + 0x03036e9e9e7f08524d8c03a551142ea94bbcd49a7443be06a3605ad56458ee39n => E + 0x27f2f640e67360523e47f0c923a7f644eb7b48dd25882dc306f48de47fe8f843n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x5cf95d4bd8aee798dfb5aa524530103d6a275fdf1d0d08eddfb06f86e2924790n => A + 0xb89141c7cbfcf5bff38517f95ebfaf6089116cc5caa81bcdefa2bf73dcd8c409n => B + 0xf0dce5c1c4ac24d2139d078c3cfa300c6fddfc1de85030cc0cea4230b57daa3bn => C + 0x18c2932943f046544567ffb1464594f65af22c28b286723c01cad4902b932a01n => D + 0xd4eab7769b72d091f96b3be9b13585c3b72df811be3b54915131406f6f13f018n => E + 0xdb084233407ab984dee539c8a20b6cf1620e85bfe8bd03c6dbacd3bbd5557b25n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xfa4344f3fba1a8140f1add179f2f778715341421b5b8873e36ff5f785ba46154n => A + 0xeb54620dbafe25faf10d8e02e75ebdd826c396f620bba3a3cb3595bfed6ac447n => B + 0x1abc246f6ed86f907598ca58ed9d2b8d96081739f49125cc1ad0c20029ea8770n => C + 0x2f50d7368ba2b494d275e0aba62527d4f4a6ce83a876c62f32022a5bcd0c8f86n => D + 0xe54bd9e1fb7a1332c633b6b54f4288b012deb4a0a6899835df884be901e5a712n => E + 0x534e3e26a1ca3d214cadbb8e5116cbe9fc5514837ff121593dde2ebc8be34189n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x3c2aa11d707638320287d3c7352cca8710479c9c1feb551c8435a9033a93568cn => A + 0xf6fc025392eeb86875c1b776b3db34de3673a82406f24e1ae226591614d647cen => B + 0xbf8fbdff902d64c2453f80ad763c571f0be87797d9230979ad2d2f156d41b507n => C + 0xbffb8021fc8d36f1fd22c5f63d9324e4217ad56b547c6edadc7613bef76df00dn => D + 0x804d49a5a8acb8da66eb534a9f381605670e5e5327397bc82b493861b3927fb1n => E + 0xa75bf8421eca82b15a0d4325ccfe52d7e9c16b234676091e15687a88909ae9b6n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb67728bbe30d3a3b0f5c218580808153b4a537ed16f84cb992a0dcf6d84ceea3n => A + 0x9e5a70971a7cdc3135c260895a67f2446de215fc47d4076a1686d958d957993an => B + 0xb86594be59c116a1d2b3510fbc574b4a90b50c09c165a033a31833dc46b5c541n => C + 0x4cc80b51c7ef596b914989363a246c620f0bb4324c55abf98d4b3af3337c8fa0n => D + 0xb31a8202794960571986764383374b34e48b269656ebe0627a8bd22aa1f101b3n => E + 0xe53f0854e6393fb798bf3063087fceb75ca4f88778978d04b72a926a077fa8d8n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x7844ed628e35008d3d92b0ac8d1272a94749a78a039eaf1daaa154d9d0c5f80cn => A + 0x8fb4e1bbcf70bdf675b10276256b2172ec85a2c5708036f672ac03be9258e3b9n => B + 0x6e18e219af8888afb6d22e8e5a3eb843f57b8f7b5343517acfabef502a1a9501n => C + 0xf1699c02884f11b6e90da496c5609b4229743612abf995ee9ae5812d8e940017n => D + 0xeab53895f2fee8a70fa6460bc400f83bf3be46b61cde710d43088138407acb52n => E + 0x9481da8de24fa59a8012feb9f7c48ad2a4fd50b64a5e10f094d3322c36126e0an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb4170a43b9376dd87618a91912c85a359487762cc0d9bb8da828b00b553be332n => A + 0x4999840a06aa26768b5c21d7bb08487832e3a6b3860d783c3d3bf57b6a8da926n => B + 0x6fc0ed39d7e01e3e3b3e00701e6a0fd1998b4b48ef3b14cbc37f9cbdc8e37b4dn => C + 0xe1e80503792f6bd76943f8be1231cec786e72acac9906b4d3178d6546c1c36a3n => D + 0x097a230a9034c595ebbcfbab08fec2cf88f53754778cb209fd1f715a4c77ff2en => E + 0xdc18c21f6173693400860e460a01209f04201cc1c6af0618c5cbcb15432b0a92n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xbd8bf1203f7b8181e2cfdd27cba85301fea9f5298a81b74185d5cd49b5d2bbb8n => A + 0x8cf67cabf14533dc2b5acaf6652ea1ba8719287ebe43b60c45db2cf5ee89db1an => B + 0xae30dfc57983981249af11c2a4843ac508af4dd76bed5a81ac75afbee94648dfn => C + 0xc643a61a07f4c7d5fc7bea593d762ac26bbcce4dc4773931c8b585d0d46abbefn => D + 0xfda953199b0a67e58b3ffc7d55a62d3ec76ba253cedc3fc178fc32ec304cc87dn => E + 0x802db505d3a737ccb87d2b520773985021894099618ed3a1143ddc9c4f7893can : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x586e047ef6e993a2bf774cd131a5810614c8ed02717b7f46e9504f41d99e8e96n => A + 0x3719564c568391c43ff80bbf20dd529f6b3c3f2a929c80712feec291c22098den => B + 0xc36d819ad112b0d12eb85733a9a1a55dde33db284de846fac62f08f1190a88b7n => C + 0x601b2eec0e265b34adb188d389f690277391dd72a77318ab3b4370fd2177c01dn => D + 0x2310d1c222879bf58d8680bda4da3e4b68b815858dc445f3e79ca1c31ec26864n => E + 0x66ffa8ebcf2aa922d212bb765d4bde43e6253f7b42cd5213190e3d0236aa41e7n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xeb6c360006797f2cb36ac37b545093ef869f7527c866020477682311dde07698n => A + 0xeafd710db6a1973b434ad79d5be0ad71a551fe7b255bc2fd6220680eacefcd0fn => B + 0x5608b9c463d0ad4bdf384a6ae1ec422bf1e9cad07ff9bcbea97414937b85ef0cn => C + 0x7933c52f32faa70505d5bbd6f20e80bd0411f09a2c67c9d078fc58b692bcabe2n => D + 0x2c0836f3da13b92ababf3b778377e194faf96b6907eb2135af8b7e3170226acdn => E + 0x34ee8ec57a950400598f7b39fa395d0a28dcac6cf1bca104fc11d9dc3e331906n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x1c0ef408663e71a660d9ca4a447ea61f3075d836853929f47a476ebf1b7fe5a8n => A + 0x529c16310030463ea2cd71e9e806f5b01d44f8133aba9eb32d78bc625a33c2b7n => B + 0xb64f6b8e0544808365eedfc09287d4ce8832001b772a527b490dd7f2ee84e1ean => C + 0xffe15af53084d0c0e30e2f93f1cee4de6e4a94d69f2551ae4823f8d265a8b28cn => D + 0xe65b23e17ed4e5df0f7f24d4f1486e71b8c7632801d39b96303c683aa294696fn => E + 0x2f96f827d80e58bcefe2982784110c47fc5c41c9fe2d9dfb422aa13f45cf8ce0n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x24cfd2987b24b428e7fc51c3124e935644bb2fae6e19cf349a608be0275ca573n => A + 0x3b759b914c0b568bbf05ce9bb67bb5a53b1241ac8f3d24d278ed26407fd43898n => B + 0xdee729b1ddbcf9d2e11e545fb59e19e2f32c2328e5e85e0bcb939fd9657d1676n => C + 0xc03251d0139930a4c183457adbf803c45102cae129a9894165bc9784ba6096dfn => D + 0x4fb24ca596b06ded1a49fdb501af8c1f83b5521f4d08b64ede80f80161ab7162n => E + 0xbd1614a20d9a32380984868d8de19fd5948261b2b101b5bca3ba8a63ed284ac1n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf48301dd4e67bffc5c82d0d633862a7367fb126e76165f69a213054e0e397894n => A + 0x18f4e91072668ce94e1afdbd9426cecbbec7517eb06bdb6ef0590a794fb2b6a3n => B + 0xd5c87de95afe1c5af5202fe348d51bac4a738113932c9d3bfd720c7be84ec164n => C + 0xd664b038e8c8566a268eb9a20abeeda6ffbef339add7f77d7c6032de685ee08bn => D + 0x4082bd7a2b65a3793be84ff6880f5cecaad1ac9615ccbc916d41ae3819bb5bc5n => E + 0x8604470c07bcec1fd2a2d82f713e31b4e91385d2f3b8d2a853412633ce97fdebn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa5dcba8ff1148846cbd2c6766fbdf34a8dc257e8c8edd18b1cd5f9c3d8912dben => A + 0x8410742db0916b86590ebfddf42d2d1284ea5280d63d6826f2382646ae21b3d9n => B + 0x425644446df5a58fa4fea1255559c85324095edb3e7aac4be8c0c4424a800a0cn => C + 0x4563af7732100306f178fc200f93e53f5515d88f198b54165cef7eeaa3a4ea9dn => D + 0x34f4658dff8c1e3c0454f4034a7f13fdf30b21fff39067fac2376fc1cf168150n => E + 0xca07416a6f8a4bd43ac457b6535369b810c7552620f53cdd745930bcb2940cddn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xeb3b56e5bf88f02db9d4b42e151966c5ee42378baccc4562222d9866121fe102n => A + 0x258182d0bcb04dae81619d3b411a1a828e64fd8b23117107c31f2a2634252fc6n => B + 0xb0b9f409f86de5c8de5949664c1ecbc85533126fe497d14750e779506ed5d69an => C + 0xd17e1635798e8f0c755800ea9870ef23a1daa87c5ee6e3d643f08978ab25dc17n => D + 0xd0b759a8a7b29a43df1a94309d3445ea30475167c9bf9900b2b4fe7a83efa881n => E + 0x124c866871e4e09ff1257f337a762c065a098d123125423a996e7b562063c7ddn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x4e546c5857e3ec3088b62e1ad29ca3c64fd3dde5f21e9d2095818c73fae2b94an => A + 0xf68ed7ed405297328366ba970132bd8ee4346b63bd0a31e9faaaf085c1f03b12n => B + 0x105ae5bd4272b7e9691b7da350e0fd695b2512891899acf50eca02f1553a8d27n => C + 0x164a75626a3e64baeff10834e28a5bc546579b9ef99a68c496b47edde8b8da0an => D + 0xba9f24da6fda8a4e1f5085a7f76ec2b28b20eb7c2041386afa6b72567375338an => E + 0xe40f1f0e268cc6406233dab8f7475b16603968f4fc3391b5a905c3310e0ba8b4n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x88377bac5388831c41ad52d8d2798c42ca3bd09a38d1b234692f0212c633def6n => A + 0x42a2514ecc3c958ec1f719aedf9418f7276b11ca288b2c0638d7c2bc211e2f92n => B + 0x3fc86e3f0a6ba561678e18a5d800c55fe17cbfa8d72287ac75829b654311b44fn => C + 0xcf90d53323350f2b260cccf3797819077b4ba4b1b47fa7bf47c3375b4c4beaf5n => D + 0xf4af0f535574f5056e82bfd51d2c0b2e2be80b22433dd0ad1cc185304ba5608bn => E + 0xcf1dc0286c599a8b88f54130881a7fcd44e4df2d8dda8b2d0cd99520100a2563n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x19d72ac3d0a74515016f65fc703b2433b5ac54621a7726c22a6b404a5939919an => A + 0xddfd2abeed07bbffaac6e8b18f13d1f7897c288f91b0e74d12a8806a456b0102n => B + 0x87cecb4935888f12d21b030b24d523f35d612ada3b14324b4b42a311858c1c3cn => C + 0xa42ecbc76512eb71a2a6f55c4e9eb135de3bfc33a2f443fbf193fe35a478d62fn => D + 0x7c90c6f6c75ab9e896c149612e2e2f0cb174dbaedd05c017d2e385d474090038n => E + 0xbd4793fef5fb4900250a5176f15ba78f739dbe5f83bb4a0209e698b4ec645ff3n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf20043887daac93e741433e654ce36e279e47fa28334df30a91f6d617a1505c9n => A + 0x380d0b488e1d02450dbafdce80eb89daa7a20716ac905b664b2c4f9f13e36888n => B + 0x02fce30ce0948612279be6da80eb4bc8b606f8233a265025cd204ecac25c573an => C + 0xcdb98ceeaaef74541deffce44cf0d4d4a39464ff561d5b6b3b15fe8fc6ab4bf3n => D + 0xcc118b1f3e8e1abc04e2d96bdd9eacbd2a1ff464efc73fb23c20d9f0c8ced817n => E + 0xdf05feb7adf760a94b3b08a8c9c9b48954c0dbc01085445f5a75477fbf1dfb0cn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x91da8db4ea947a87bbff1b4f92bed9931819485902b7e8011db5bc013958da29n => A + 0xa9123275a27f839df2cc7b5733598ca558073fadf18580b3aba88f0dbd6484dan => B + 0xb6b58af396261c22416ed7f27ed7b715688aa8093131134f3deaa414dfd94594n => C + 0x322afad5613694f9af12564b9e14f01b5853d5bcc0076909e8b9a004295344c4n => D + 0x1e014168f9e4261b6b64e4987ee591907744e48c6b382e4c6209a93646802026n => E + 0x6d419ae03fa8dfd9cf781249ee00200b7c169e6f62d2784c959842b87d10eedfn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x6a09c448ceeb818354c687ba445997b21e94434c1bdcd3a0713f268f4fb99218n => A + 0x9744bd2b2fe6910cb3cb4de4aa984fdf965fa23cb9d74198b7022f3fc7ecb8c5n => B + 0x263ba5723a7b8dac3c754f3f1ff87717dfae480626d1c40eda1f5920433c2165n => C + 0x69410573bbb2e90c6bc5c6153bf9dd9190378a1f9333ae50dbb7309662727b97n => D + 0xb00e5a1443bc30074ab3f6e2a5012245e8fb0c630a3f37036e6b4a4487b95286n => E + 0xa774089c236e573b36443970436eb1425d2d3f431dd87f10fce0103592fa8e50n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb6f9099d8647e9df1eb71d5a6d127f3fea0aa3a35fab68d58b8ac7a5ba2b4744n => A + 0x7e12bd5c1b3a34f11c5a12893bc5909aef8dd436e0683edb1dc4142747fc5e23n => B + 0x61f36ce7ac0ba092273f272d12f685e411d27f76dbcb6f9b17cbb33444cae856n => C + 0x4545c5a818d6a54fc2845f9da58fcbc61d9302a70ec209dfc466830afce98773n => D + 0xe0391883c79eaf16c77e2f0ad7bcf2b16ce780d8636e9ca88c03185955b0f017n => E + 0x6fe6471ca49252732a0266651193133b42bb8c1644b4a4918586800012ae02c5n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe7e11fd2b2a0d17419da036a0de20269069c2096a6e80764c17102576fda783an => A + 0xec102559241b931ea193df6ae2a4233dcfc6e8a146651b2880702ac3862b123dn => B + 0x0a6e88a4dfc208b89dcca80044c330ef7d35e3b72078782bfdd1117f6c022367n => C + 0xda7ef56cc27e6518e184f3c7fd3b889cb41a4b6ae9c70470b2ae9b073e0fa409n => D + 0x727a240919384612194049c1c79dba3e01ba1e49749154506db11d4c5a4d22e9n => E + 0xdcafc28ef497c666a0624e7808c34f0a71df70e894116fe177247e55ed466b24n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x0ffe40d19da67afd91510ca775271da6026921a5d9a64a94e1010cd87a961907n => A + 0x47fe2c6b1d00560a684280e1c2504f7ba0891de4b8738dda39d67a560846ca29n => B + 0x18a611a794a6bd3d939b49f8be4af49807f5dae3b837d9734f37a6eccbbcec2an => C + 0xb52509d30a84f156a5f2bcde12290c7efe110fadd976d40a311388d4a4180d67n => D + 0x30c9f65933feef1c104664a8e7097fc69a9ff9d665f1cb7c8a7fc31745d43c22n => E + 0xde8060a6d59245ab9123ec4cce09aa877e44b20ca9594b76420f0a30a2b00e88n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x390d0a1cb7cd94ec8cc867669e439b08ce643a01b84459284342369cb7449267n => A + 0xb44023ef61b84619e8544f2c8d2c1720cba1d0f6bf7da1664ee5b78f430f1bc6n => B + 0xefb39cf558e67dc6e04b6cbc5cfda3b5e4393ab3919d152e53373e3ff1bed2f8n => C + 0x08644d7a0ff4dad7ac2eaf0e5bdaa74e32fe6dd281ee926b1948635870e7b932n => D + 0x5d57781d34a92f1266c28354bd1d1de5d3e7f837c1a9c0a4b3807c0e68f6b41cn => E + 0xc3a47841545d384020bb9fed9ace0b3559f069e4602184adf2764002aa3625ebn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x4cb58bb084f2642c4097c809f021b60cbf3d40cfb13b73b88762e834c04db8d1n => A + 0xab4123d01250d9b652f27596940aae69157165909dda7ddc03b00c85b8dbb63cn => B + 0x3532d444769f781b4489ba1750e131203558d3b9d51b95321139c493ebae3fa1n => C + 0x763d14102fbf4f4e6726501df32c183fa27d0cdc1f513e7028a90d70a03c3e69n => D + 0x0efb230a618bc4020d67e6667ff91a9afe277af42ee1734c7049233dbde659e2n => E + 0xd122aaeb83f6676323fed34c5fdfedddef60bb7d1b982116ef280b9bd5f07a6dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x998becebd49b547b5fa728c23d7fc8b314442ceab02cbb9def6690c24ab32e1bn => A + 0x63ea27f6dd9d38e74933b5a6d3c2a003bb1d2cb9c3d4b6c2d34ab659d40588c5n => B + 0x377cf1a23fbecc61d0e0eee618e7e53e8903620b394e7f361f8afdfd8bedc84an => C + 0xe09a62204d63dbf147f1d27e58cad3d3f2f3d8e13ccac12337e0e0654b761eb1n => D + 0xa209adf8018f206323d6740306f7b9a190dec5492b759eaa3186f6831c05b2c5n => E + 0x199b6077b7003398ba4ed4fc96badd210dfa7a394906f4310189a0cfa6fc8965n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd374a0fb4ea4da92cbdc9ad7285b031ff02f2d65ceef24f635098287634313ddn => A + 0x45322ea11ee1e1dac3da09a416ca47556badcbaf946a21f9ac9b764f710032edn => B + 0xec472915ce46d862c9176a3056f6829ae2df86f4ca6470f5c6bb451a8b2a0061n => C + 0xacb84eb33e071288110c71997727e9103c2ad9c9ad6b4042c727f79a4b674df9n => D + 0xab615e413a76d1ce92c491d5537724f78cb01cf11d2a28844a6a9d26e5ad5e81n => E + 0x624631ad5898b4e0b71fc6a222bf3c66457f2b44186fb46813fbeeca9eab9790n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x2c03db6c141a7060c6cb89b735e3a48a724614a95ebe1f42edaeaaaf4bd3f1fan => A + 0x3c94f1190a3917e9bdb81b05e708ace8978fb7352c43633845765e84916ba715n => B + 0xe75b12a96c61dfe407bb145800d6d08fb84703d541a2ef1267dea458bf63d107n => C + 0x241c9b136d6eb49e6c59c73e75dc7734ce7372181bbd53bb414ec950c4369773n => D + 0xe5207cbd8f36ceff94bb03a4a9b9f397bb1fdd99b3fbadc5f8f4863c58b500ddn => E + 0xbaad4e168af43b94bdd7500bc8722e4a9a3d732a1ba679d49723e140a1f6f85bn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x30c1c9fdd8454948bc646401f841bc8d51128cf74ea95d58a3a44606436da538n => A + 0xd1178e23d7f9ae17c16f895c66ba9f2efe5f7f33cf76142be5c17026f4f9df60n => B + 0x6bcda137f06fe20ccaccf3a36b2a9512dafb00311ba1fae8ab772754769803edn => C + 0x9c8adb78aa20986818d243d9ea5e0778a0ec66bd4b664daef48e46343d2708b3n => D + 0xc4ae205ecde618b47dbe8be516a92c96627bf4f73a0b1739b57dc6614e54bac7n => E + 0x3b921fbe32b09ad5e2ce94a421e2c9732f44afd22351176cca3cfdb62b64a45an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x24c4bb5094bb486d20a33c5944f935739d4962477f3b22b163a084b9c629a5d6n => A + 0x2b9742aa28f43c070e58e0877ec96a1e7b012da814f36b7c6e94c835e593ddc7n => B + 0xf69d41152b44a05cef6771d7c1c2d54914a2dfcf1f9a272c0d12f68070fd1754n => C + 0xc95d58ba17681225b0e25fce3421eb5724713d977ad63974332e841439717eadn => D + 0x038497d730663402fb407bde2f79da8000912e535d9849269a8e23e9b3a26a4cn => E + 0x7721d8dc50b5d01ec717f0a067ccc996d1196733075587ee4ea70df490ed2dd3n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf6cca43a4f2d09ba068acb559c968f87a0fbfbcd15557032b66d3fc39e3277a3n => A + 0x7d9b79bb5c3f77e0eb3101ac0748cde51da8565173e4f252149e12dee62522a4n => B + 0x827d754aba29db06d75059786e7d119cf17a387be36de79e5e26538f8cbdcc77n => C + 0xa70833a4550aa4e5b8fc15b4f3791f2c8ca9ddf0208b21dc3c2c1de6b2e20230n => D + 0x7fd6a3e59f6a39e4b4e7e72b1e579b53d10e37568de0f9f1f4f736972e47afd3n => E + 0xf5f1f98dfd9df45297881f282405963006e04c09c5e0636e137d4cb062a5baa8n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x2d8e9abfdecb01f398f0b8fdac165b3634eccbf766400383acb70fea6a7a4978n => A + 0x2e97da0698b3e85f5f080bbf617d8a404c5d8ebe2ee168c33cb309b490e4140cn => B + 0x610f5a051c45b65aaea5d55f001e33b1922dfd9c17d56aecec0da8324b881bf8n => C + 0xf50ac255aab884728893994054080fc248ff365f5a36287f3fb46413573c3db1n => D + 0x99b04a511587e44a23b1e3255caebb2ca5ea34613af2e69d38a40c3b85579555n => E + 0x99bef1822c7594df6d00e919e5ee9ec9d41879dbbaef998de0996a966cc6b064n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc87c4f62e9222502baccb7713ac0134cf48accf4a2e1c359bb8175b999fca5dbn => A + 0xfe71a54ac592976206a3128e141013db5e4d80d6c2007719283c13d7029c33ean => B + 0x3b8ee7b0e9bd69709fe04b6e12879aa77ee3e8b2b7e62bffa939f795f261e4d9n => C + 0xf8bd709802ae625ae8043be42ea757292c1bcdcdc22d71ae8f90042646931fe6n => D + 0x6e59f5376f7b9b5b1c3c0201185f05a269030fe676f67d805941f74c823c464bn => E + 0x2c3c0c5f3a10daf4bd8f79b098bebbf7128e9caf0dd4b7b181e4db3f9ec11419n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe450e937be2f25df9358ff49e8158d6c78d0f6ce0e9eee274f87dc3dd25ff442n => A + 0x5d0ba265d679d7a67175c47517b930e40935649f2a2b091937acdeb9f8881731n => B + 0xb769166664cd7be5deb5ad9722d2bf41ad979c0d62e26b511796a7dfc0230128n => C + 0x9a110b1e916743e38b302bd527807cc7cd01faa20af31a3b293534a1996ef936n => D + 0xd3315f1213f1ed0fc1b61b12ea2854ce2ffe4c35180d8e7208a2acb6af44c7c1n => E + 0x225e567be60540615430beb280ecbd21dba2e606171352b064ffdd65b3d2de02n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x56343ae6b87a5f7f85c77812de726f1820b45609255b9d17d5e00a8072415ecan => A + 0xe0cafa67378938bca4435c871898b213a672534bb0fab5f47d97a6efde1915a4n => B + 0x2547b28486c462e7176c0f3f200f9bf6cfe97c7b1cafe870c445e797b1b933c4n => C + 0xc2c6164173b2cc028016facc333be0fac49e5ae9c73b6ab9e4f26e0945e4acecn => D + 0x08b3a57f246fdfa9cac324dac3246e672b1c45bece3434a74b8572cffff90297n => E + 0xd65465cab454b38e8d9251345b983de32797d0ee2b20914dee0927cfaf827849n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x95e73f469dfc8a3a010e4fe7f44dce95cf25bba5a0c69e3ee6d591d6fc4cf0dbn => A + 0x1850cec020e0fcb36526af7cb0ea4652447f7538c3795ea5b97e16515f2e6d6dn => B + 0x4c61f045b4282f01d2bd9ee331264a6bafa74945190ba23baafdeafe2ecf2caan => C + 0x0b7855ac4ad8327c44a61c1ff70ccc34b021f43dfc2ce683088899c9c8955fc3n => D + 0x420f6fc29f17c6a55a7673b523adf7e9ed59ab926fb5cf17d15ddb6b92f622f1n => E + 0x98f50701af2c910c2351c8be17dc53a5468ecb6f92a57e949ceac8bad919089en : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x3d5671ae97b7c83bbe93c181eea368075fbe4da760ea511f11b4e0e8265b1b7dn => A + 0x15973ab9d02e121e0cdb14a50fe0609b3771322bef795c9b12694a154fac290bn => B + 0x3d072e15cddb7395ea26a1c6420fca99e51c43b8835fd19e45eb0bb7fd4e5fc8n => C + 0x3c8084d77cc5eaf7b379df0977afa069757da141bb6cb8a4b47d9eb120f13157n => D + 0xb1c19fee02116eb91600442ed3fc4059e37b8edbc4b895fa89abede2b49d4cc2n => E + 0x1a30bc8b7e5656d233de856d3f3215d0331ca1a88332dd44bf1c22af62c056a9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x590811dbdf5b21db6114d1c5247264bdd95b2cafe23394832d5130137363238an => A + 0x3e2c2d68f6ed6299d901815f10b415701f3c9631b9fa282f09e07e5f118589d5n => B + 0xe70062448bb65e74bbabb22bd6060cca59e3a12489da6828d20e4b911ebdaa29n => C + 0x3ca436f967ded22300935f29548f664796de5b823a385ad2fb7f611bc43f71c0n => D + 0x674472233cd93cb87da01f022d459c2d0267943cc811ec1769630ba6ca17e485n => E + 0xdf6b2839e85a06011731da12ec595e2b3f9d5ad6a10f813afade657faecc94c9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf4dd0ec747a363a93ef8d60df59e62f1227dd3a06075606fbace809302885334n => A + 0xdb29f0968176de5fdb5f2bd214b5c1ececa9938144cb45fa5e586b39c5af78a0n => B + 0x10ff1126f64a1231a86221440c1df41f1097cc964e433c1f63de5cdf2c183901n => C + 0x1acbeee8400f91a4c059746387fb1f79e60c2da352b8012a8c5330f8fe408bc2n => D + 0x788a54741295054597d96ed715e4cf0c718e275bb563866f4d07506eb59c9a4en => E + 0xad0fa186098c17af27dfbc29b1dd21c156a69595778267848f8997919fc09031n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8a12fc2154a2003c5e0464cd378398a9d45364b5435ffd8e657e0a494524d936n => A + 0xf59ec149d6373497bc6d14e3b61865ecf071c5920c699f7d75819e4aa015bc06n => B + 0xd58ce9ce2ccd3a1a6f2f78cdc3bcf132eff65522b2c3513e187c220ec13dda2bn => C + 0x806437e0e44e7a7d1b48879237747b61ba4a289f53fb8bddb3a43be8d27a5b33n => D + 0x292a27d7b2a68d7e8b37aad2596414b2ee7adba67c76327204b4b755a31ab22dn => E + 0x0e43e14c85a96300eb89075389387ac4b29ef02b5c478496a481381fad75cd86n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x990a00895094761d4b313ce6d5f2f96b983e63ed495b590011071aab0f6b5bb8n => A + 0x3de50c13d3bcdc11ffc03f15e2026bcd93fde8a8a94de486af3862a2c3c17b28n => B + 0xca3cc98a765e8244b2258feb26a92658e4cdef42bce4e06aeb8efb115066bb58n => C + 0xd299b4f7fde10ee8cd305b7e6f8ca9f71c8d9fc50e4a28b36e684e4554623bc7n => D + 0x2e691f0311059394bec99e10ab856b29962f062d28c3c9287d14cdd6d8522e8dn => E + 0xb6b0f526fcc8859c05c1af309ec7697f819db68cf2ad791848a204b416987214n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x61ae3be039c743aa7d36ecec8612b9ad2fb308199ec37e1dbe30e29973775335n => A + 0x3fc4b1b666c6d9fd0d64ef7ea7b569180908528988a9529b32ff05fccad050f0n => B + 0x292dfc7c37af956407b700a293a34be18a61297ea26fb4dcb863579e703598b6n => C + 0xf725bb4189e3b53f43581aca97fc8a6a1aefa7964ae04f179183dd234aa6eb4dn => D + 0x67b13ce89a85708785c2de34242b4025747abbe0eceb3b49a2b97b3b0a8b0908n => E + 0x673a9659154e76dddcdaa1bb39b5cbc254bfeeee866ed0a6f931ce03b689fb7an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe2ca4de85dc6162ce1f8dccb83b264ad05dc7a1540f996c4d1eeb2bcfe27df2fn => A + 0xafe5c6c5475ad343ecfb30f38b13e950a799f78b6124783a536b8dd7249b1051n => B + 0xc4d2a0aecc9ccd8b74684899a77f30aa08ba2c23a3bc784755d38cc21eb51029n => C + 0x2079f734560a5a456573f62870db264bd0d55f0ee5a94bf7c6b9612257b9641en => D + 0xdf9c4f6908c18926ef781a30d6f6c5b46ec3af9fad4cc9328a68d088f058f37fn => E + 0x6d84bb66ba0c0a6e8e5988ba13d69b47f899b388d35782f3ac2c932dc255373bn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9483850d71bd7ac029792eea56699b87d6e8542ffcef3b81ce8667a88fd9d123n => A + 0xbf5c778a7469478586582c38b65d8136fab17761575439250bcefab220a84870n => B + 0x0286aa4e74fe6a1c7fde3f10de725ce9ec8644443eb11f83af6b47fc7fd7e5c2n => C + 0xbdb3116ad81b71eda538a77eed9cfe5d9c1fface2825ad9518d9262407069c9fn => D + 0x9a3805c583c9c8a6313af5aa7510e1c00328f8615b789aeb29fa69f4293ffb81n => E + 0x2d5582d660cced568dbcfe940e0a508f4b497c1913cdfe7c9747d0762f07401bn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x6476e9655c372aedd8bf8b436c3af31c27754426a7a354b49487df257678ad21n => A + 0x8eda74a9055b35cfbf1a469b9fe3bc575d42e1256e082bd9e7596496d553b6c0n => B + 0xa4d7eb0d2c854f1a86b213dc901f0269808b6dbfa458732e4eb89caee28c4716n => C + 0xc921def879a4d47855b651e29fa2c55bde8def546151c1e511930399532cb8e5n => D + 0x0c7a75dd88ace29bb14a7ff942f84af215715d4307d01284f6b1e6466b58b886n => E + 0xb02598496950b9046636f1142856871adbac05cb32cbcc395f419ab7af19f125n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x24a6db07add7c19cbd42f16045193af21e623295f4468b1edbc996e67243d432n => A + 0x482e28f99caaa6a292de368c265fa5cf2313de90cd138e7e50908b03ed4b1c7an => B + 0x5509c2eba66d577083793766259af978296b3c080ef43b4b6886651f42ab97b1n => C + 0x631e8953292e9f0eeffd96e5652ec7fedd6f0eca7e54ba6d9036dc0d48ff4095n => D + 0x139e1ff507cea1120af102b1448d494082fb3457f4741a4b83e54f37ba7f0b2fn => E + 0xc22699fac1f552dddd8c387d3335730e60cd5440c7da5e353774519c1ae3e548n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x52f7b50c1cdf2987c4192507160e40ff54b5fdd48c17b2172d5532db15cef17fn => A + 0x650b115d176ca27e3827afec2b15c3040c2671e745886851947463f9bff61018n => B + 0xc226ac41c59d46329c534c0a08977651c5d0c4469f45877ade109db64dacdf6bn => C + 0xb93608ff6abd60979bb759bea92c541ecd229e441c05619c8decad31d90a8050n => D + 0x00935cdc3770aa30839759d5209cf1541ca3b2da2da931d41d53f8dd195c3a3dn => E + 0x10e390f20a6d95bfee372cfa20bc9f24d2b2c39376c8d5d92ef9b47ec026ba05n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xbb92ba5ded9311d04764ad71ab50e6c6955580f156437cf91c07bce05cf46876n => A + 0x6beefb960ef0da3d517d3c8e07d41b3f8c049be2cc16c11e8a083f5cb1a8af03n => B + 0xedab33ae39e52f128e5bbcc698a6d49d7b27230c3ed64d80e07d6fe0f43eac40n => C + 0x3a1dd3986518a62857301cdd933665eea1966491bb34a158332ac8b5d1b0a1can => D + 0xc4e6fbf368986d63a5a3422c801531e2dccf7a91c05ab4601609a4e89836d93fn => E + 0x2fb4ceaf2c312797e6bf4f02623548ed4797c24df609303547313a3ddabc6791n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa9eb6c79643954ebf2414cbf030af2f21aa064b3f5deb7c4d058b26960b3c706n => A + 0xf9e78ee58a55ca54dde66eb397f43e2f283bc05efda26656e36f92b428f7626dn => B + 0x7081ca1b9beb866dff8bb188253f3252049cb46838521311ba21c9541dbbe099n => C + 0xed0d737ddaccf300f148b61320f066cee8d3d58135bd88c8ae8b8d1a9cb14784n => D + 0x9e690845438bdc986016b2695e91de16d98807017b13820d4e525eb4eda1ef7bn => E + 0xe933288dfbfac4678c041f76b8f5a0dbcf1b146ccfc85b6bbc2944d58ae16549n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa84fa58d61d4be587749aaa49aae1d7f95404d3fac7aa108f451610c1fdabc0fn => A + 0x94a0aa04d87432932588654c34a8034e962691de567ed0af725cd4366f46b540n => B + 0x2dcfce2ec822ad3f5e22cc66f1b9c5d020d9b11393c0d43522825b9a2e6868a3n => C + 0x6a79df7b28eb2ea81ad65935b6f90406bf28a264bd7d457b580886d151b40261n => D + 0x694c1cc4cae37dfca7e6c15445ab52544186de426bef0301e68c9259ac3b3943n => E + 0xa4b8312a8de1392dff7af7b69aa690efbfbf6a8489494aed8c8820edb35269e2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xbad79ca9015e4ffadfa6af4fe75d1e6328c86c84b7fdef6d0224cb29cd645222n => A + 0xa0ddbd8628d302d91c76123eb51028bba10f3d1d1067169b90549d42b0fbff08n => B + 0xf4d081a453e376d6f86a88db69aa6de88286a601aa05b4b1764863d81f15a0e5n => C + 0xe9862de9f1340e95a0696a3fcd0e949d27d0fe5a7d54c56a35e9d57e237eac7fn => D + 0xd6489406980615e9562e0b7d9dd714f0471883823a951c7de6926b729bd98c5cn => E + 0xcbef65af8cc6f13b4eda53249d6299d9edeb14acb114ba6fe564e276af8cd158n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x4a1bd058eeec34a654154c3aa7f0bb565c825415b907f3c806c63979a3b1b6cdn => A + 0x39fa0ababf0ee00310cc058bd2545490e68e9f70e4ecb50dafeafcbba2ad8783n => B + 0x2b83918fd5c3ce105d67beb03fb981ad65369785890f37c61b3e509e4f960911n => C + 0x59e64d0ca59822edbec1a6f0cf880b79c1b04a63770d6e1235a3a6584818ccf0n => D + 0x1cc3f463df48c69a95b8e8174c1a054ad8a44cd64146bfe4e80caf377aa40cd2n => E + 0x77bfd0840930fbeee8bc448baa22658030bc094420635980e7bc06dd7f8c930cn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x7c3f0b1d0c8c6e32576fa019b88bd7d91f4889d6792a16b37d5c80582800e4afn => A + 0x311844e4d9e0c4cae5b32cc16851d848d1db335b981997f94a9b0dec7740a210n => B + 0x52ccfb96c4bca4ad8c477a07211815f1b4db72aadd34301416f676a35105c69fn => C + 0x5f37972ead95435a71f4ca2efd377ca374deec727a307e66e24ba8edb7d68bd2n => D + 0x1002f24e793cced7685662c9631881aa14898e650d7f10998b3b60558b26d657n => E + 0x8d3f907b1728e3e6e6d1faa7cc389aa1263f58f35dec6375844a6cb7694e4b6dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf1e2e987c8afef810bbb1f815cb3e81805130876e0a8a874746ca5a00508b091n => A + 0x50d37923134069164600719c4dedc4f6963852dbb2a801e996707da7a01b3a15n => B + 0x5a8773fbbec3e4a163c90f3dbec2e0e427ffe75d14280e40bbbab05469891c5cn => C + 0xb299b8f65c04ff23a3a0ce0ff7eb525bad3abb5333ce84432048530450d90d61n => D + 0xdc42a55ae71033591c9597c7f25e9e91945a07f74d5d50029e01dd4096060817n => E + 0x9c86d82c9463fcb8768108476bf89c0d14ba58e6d7bdaba54e7dcb1dfa4de9d2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x226f2f486b30b94df85814e24d0f23107ca7ecbf5f09dce8963b51c088340321n => A + 0x35d79a3e40c25c7d0f52ba4775de09e675d4713f854777c631dbd750f79406a1n => B + 0x234843db930707f37968475e267e6c65de729f8c53a6b85193891af0cfbc439en => C + 0x382d5925233b45ff581af01731ecf12d103b93d4473eb3a031ed4a23e2c6130bn => D + 0x2af76a360cd100cdbce058d3f48eb1275fb0339fc40ba928afd697c2459ad981n => E + 0x0ef1f654f2ea1cc248b3f07e802b1fef58e007e0b1b4a4993e31595b70556338n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb1e86c871f1b7b2d0713a2789d95ad921a30a4198d928285243e9c38a719d3f4n => A + 0x9eb0d57d664d99de45f4e580260f4f5714e2a98a56e194cf46c8f73797acf6d2n => B + 0x3dd54029e37fa2853b1546658da3ccd6c6f7935c2a044e3619eea16a15332248n => C + 0x2e95dceeeb6cc201c1e69df5183b61e1ed2927bd90702656b6c326a89cc62362n => D + 0x955f7040cb7d48c853ef573794a8e9e4671765301fc0e1aff14144f1520ab4bbn => E + 0x01179101dbecebd50042b2ec1a031a5274388a6c7be61c98418c1d46cb4578e9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xab7c4a4ecbfd291449fcba8b0898fc099e6302a321804bccbfeecd265acf98fbn => A + 0xec7c18274af671b89ce702937da3296da020638bb84a90600c02a57a21776ae6n => B + 0xa2ee7cec5fbb07d3d7db25a8f81f67bb5ea097c2c3f518b2d09cae08f61422cen => C + 0xb69605a922be70ca86d7cb26fb6fb6313f02cae447975f54346e247c912f6319n => D + 0xe7d29cf29ff6f8e4b80e65a275e21df077565a87ab9e248a5f271577e45dd257n => E + 0x362449302bfa1e8974483e74c2cd3b54d2a7795470fb7a821796c93f7cff274dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x1637eec9e308107c8175ef288ba256ff3577c019e2387301762eabdcb7c73175n => A + 0xb5e74872dd2e9dbff4e586572b110e0564f39ea0f093fddc0924ac4a1a5d85b2n => B + 0x5b1f082c2891dc742975ba68763c4f8d686da12903f8e9faa2f254678c9f44e8n => C + 0x52160485e2c758c8e1623e69118dc29ed67bba293c35f9cee051bc7bddfd95f1n => D + 0x25c10f67730ab01c6c05f2b0073b4c251a75880810c5fc4ac69755cc687f79b9n => E + 0x1592ff78d8f05c56d12c08ceb637895e5b24999436d1b177684fa80854c668d1n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x43c5c8190f7e3571e0fe83ee8cfd39ff10eb0b18ab83c27b2c9aa1c43dfec9f4n => A + 0x2faeaaf9927099195ad3ed376bd167b1cc03e082f1c813200816638e0897b73an => B + 0x9ab9dba883062c0426c344a76c34f0a2995a97f094f2318c14c54d1c3da1c99fn => C + 0x43140ea26982fd4bd9eda2d287f4505b3431ab0067f2f7d0c0979cd1a89a304bn => D + 0x75b1199bc65248343fd09712423e471cfee18f9292cddfce1747c138cb4714f4n => E + 0x946e001edded6a72ff919f75b10866bb815ee843bb7aef89c9c87aa4fa9f2009n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xfe9c0fcc05d4ad6d3e7fe8c7cdc99c68cfd9368c389ee45714408f442cb3b150n => A + 0x45ed30d96b7aeb7e10dd8c852b1ec84757e2b37eacd68af969cb616fd67d0086n => B + 0x6963eace69f962ab30809e4ba0b1a7cd1a8614821343b57763b126142f2a68a4n => C + 0x8e6a8f0e16936ff88e06cc9ce4974c6f92efefa8f6094f51b717372fb7820982n => D + 0x790a4598f439d9489d7a4308fe2ef9571fe13b62cf1742bd6b483f3e3a6b93c8n => E + 0x6958519eb13d1b9478cf7b2d31f8c53c8e54d09d817cd90a53a2f38834156ba5n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x167a18d5886be36e4a3152b7e6a8955a5a711002bda5bc795f59967146e081e9n => A + 0xafadbb467607efcb1b1816a7e3464a0f7aa073fbf0d7392d6b04fcbdcfc7fc23n => B + 0xab1278acb659adf5ce39f75926b752e896fdd7daff7f793cfec0a5cdd7d02695n => C + 0x99851dd3b882ecf650078980f64309b696c556ecbc43ad1f2c06f035da5c561bn => D + 0x1ec43baddc7e7846832a6503701acabb874afa1142ff72e7733afb705838ce98n => E + 0xe3fc7eb6fdfbf2c1e25dadd1e36b6381686e536277121dee26341a2d934820e0n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x1968a281b0220088a54671107fdfb7ee30d572cdad175ddf4d8daef66009af55n => A + 0x422a9b33cdc294b1d9f7f0de6d666384c7229fa8f8850fa12e8efce392c1852en => B + 0x94cc112e781dd29fe422c4aeae84af7d8d66ae4e12a58742e118d7dcc484b9b0n => C + 0x6efe7d801207919e4df8e6c4a16f1af02c22b189c7a5fec4dfe42a2496c36421n => D + 0xbd79972a31958c4502759d7728485701652d828611c845bd399402cf268d8303n => E + 0x871554cb74695322ee748be06edf0ca8f7f9e8f954a967779a988245fd3685cdn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x4bc76ae6ba5f87b92e1caa8beb32a0b6040a79ac15e141bbb14d063e10df2072n => A + 0x590dd75834fccdfc5fbd3af148f3aaded33d9aa4e855497ac8a101c93957010cn => B + 0x69c5c7a827fd1f91d0c7a33278194a51501c7f600bfd73634987ea8271807a07n => C + 0x1fddedaf311f8315fc83efb842b23ad39fdfe2709116626f7bb8f48f66344b0cn => D + 0x57cbc98515b2151db37d7f8b29f1c3bf16787c8de3d765761b41e5cec0b0d1cen => E + 0x1488a36312f605eb77f0512bbd536dabc877df2628fc416e93c1abe19d2944d2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x998b1a67e0917ef8c161c3f1bd3f41f3338ec31e10651e1a24fa7cb8b3b0f945n => A + 0x988edc243b31a7277a3a951dcf6b13b3c2da9570a983f6426b0d57699aafdb65n => B + 0x93af9767e43d28c10746efba7d2de2dae9ffafe043466e01a9995ef18685e1e7n => C + 0xce21dd3a2e62cecc53dfe650e2108b6f8a8673b676a1a0e2b216535199863d37n => D + 0xd58f2379a1aba7bfd3f593a517d2876feff5f8e52f1d744f33e7f9d123ef8fbbn => E + 0x6eb6ad4fbd812f68730483f6f6f1f9160ee4b3146ab92e48ef15500f3c47bd3cn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa77d4c3572add8f2a6f3853d74d93d14ed245fbf98164f19b7536808b25935c7n => A + 0x1921bf0f043fa277e90062dd29c7076608658632f791fc47e7022fdf1649f638n => B + 0xdc6b1c960ccecc381a17de80c4aaa7323b03998b363a70e3e8e800ad0a9e1af3n => C + 0x72a4d06bf6f0b14ac918b9396390a2c7ad187dda9380a0bcd1afb3df07930d18n => D + 0x189f69ad346c59dda206632c2ea29eeff41c320096108a4a35676a1623e87c53n => E + 0x4c9ea84b07a5860a7e36c6a02dcaf424f47004d35e857d3368b104452fbe2d47n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x2508b655efada04069774d6e23e5bef04c87c5257fab643083b1094170dc2be8n => A + 0x28977e6994da9925c20a9eb47785f338577b38d1e777019fadab19ba3a5796d1n => B + 0x285705227691967942fcf2492328eac85b0be81f7c54698ce542e1d6241151cfn => C + 0x61acccf7bcdd16307821ff9c718401f29ad72cc49c9cda3ff9a1c6400cc097den => D + 0xb3f642271b8139efae2f27102e30feb822aff7589533662c60e6fa6f02bd621cn => E + 0xf3b4631445215f63cbde900ae6aef8668cb1ce37f9775fb1301ad8f98ef2e3cdn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe1ef478db06b507b8d44e27ba114430002e3009f43a71a42b4206b3adeef8c9bn => A + 0xf63b0b353103de94efade5e81501833d65d63226673337de6bf493efc1e8923cn => B + 0x989ef8d31cd3613d78dc6013464ef32c9b534e5f70a22b0063e155ff6a08d891n => C + 0x05ce2f3c8c63a748a5192a630456979f98c2e69fd1ec79d400ae8655540422ean => D + 0x448a9ddae139b744b37a73edd3f5fbde11b26887284654962b1d81963046fb93n => E + 0xd274da320ba08e616d7b92d8db87bc0f95302234906b2b98709865ca53acb4f3n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x02e12ca06895a191453139bee24bdde6a64a454d26c9a6f32dd36c099d5acbb4n => A + 0xc899288ba86f0120d91dfa04f0a42b1b8d113b413cb0d3d72851970b034e79a0n => B + 0x75ac063bee30fa72bfce72ab67d43b1808b8ae52c34d8b2f286a03128fd0e9bbn => C + 0x4f1dca0d8b83bb186086aefaf2c97169ff42d496206594f271722d44cd9e7f3fn => D + 0x66bb05d54ef80dceb545c4cdc0dd1f905c12ac23be519e80ec8b5bba3199db44n => E + 0xd90ce2d95c1b0496d569033e4e1425203f990f48a4745b2d74a0b18a079dbbd3n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd92b28ba73efef88fdf1a734c5ee2eee135a2b7d2f634c538b570389bdbffbfen => A + 0x0ac092761d4bb1a27fdcbf45ae7a19fb28b2057a9bd7ea974cd2ddd85c7767b4n => B + 0xb8e22f634b63acf653e6c2310e72638af7c6056dbe604d6424b9ac5ad8c8b448n => C + 0x93b92f474d3ae2d641563f9090c6f6c8383c3e52dc65cfd834e58b89c2246c5cn => D + 0x18106b2921dd15867ceee6b570610b56d501079bd45c888a8e400ca8708d82ban => E + 0x6d03517529eff458cc9eebdefa4073fb32edf31ae8d6efd85389c55a7a02f9b9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8a57ae31242a6d43d6fc3cc23276572a92009ef91b76bed49334865030b79af2n => A + 0x26b629eaa213bf1e73a327b7fa50b27928190fca6dcd9198075c8eb6be1609aan => B + 0xe408348a045a9f1a8326333217e05abcd205d20f5e489e681a2d122d47f8c64cn => C + 0xdd2b263d5dd1c558409c4dc835dd6ffc97ad99c1185ef177e3c2a54533854f78n => D + 0x2b1e82025a75d3bed379c582ef561f57635232b405b56978977132b6ac1d41f8n => E + 0x58c7a4be5243809b0feaa3c60228c083fef11c35426245186f5822be7eb67d9en : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xad55e839cb2169ac06cfd009a1cbf75358e09290f44b6e03a0403b1c439f2c60n => A + 0x06d454fada09c0ee05a50909f04e573629f8569eb6bdeeb2e0dd24fa8ad2f301n => B + 0x0a7a3bf0f5b55f1ef0f0e2560a88a7bb6472d92257703c206201a9c87fc48b6dn => C + 0x677c1df0f65bbcf142457deabc36a0ac8ed4cb6b8278100fcf034e7a0bb7125bn => D + 0x03263872bbdb8966084b1aeb20ea7dee3a08d3ab4450537a8007c064117a8422n => E + 0xa42c75a173da8d27425fd32cd9284929d04faa5fb5569d047beba9d354cc3148n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x3514d81ad94f3f6bc155b591517f89728d141e5e5bf3631be6ae4fbd29c82476n => A + 0xb4496fde534f9f2bd2684ad3018f46291da7f0b654eeb4b08fd2fec4ae11d872n => B + 0x1091388c50f417cfc92f3d4675e215016f93fc8a1fdd9339a3d5b56babefa332n => C + 0xe295ae7d0028b89636d2bcca5117a7c3559a4c79df2f2593fbb34f66ad98fd11n => D + 0x54619f83fb70382b457031c8a406ef2efced8e47fd9a5e686b49cf883e84b0e0n => E + 0x76a835d7258d604cf4a847158b46aa5392154f45420431b230544e5bd1c13fc9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x356feca5afe6a57966a913fdd45d3f72fc2afb22925c64f652b04dd8180d9985n => A + 0xb30b109c41eff8eb5074048cda6d92c967a5edda94d52c1fe8e5cfd35b44bedfn => B + 0x35cf6153a6e8a347373fbcb208efb84b0171a59c395ecdeabca31e5b73249659n => C + 0x489773725ae1cfb208519ca0c3a766e45e698988ab8d585fd238c198f03d4736n => D + 0x201bb711fe793ef614f4be83ab8586a4042430177cc43031a8789aff7797c37en => E + 0xeed998bb06482dd92689bce0e51607510907db7701f444ab9273e6f1bdc7e4a5n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc1a8f82a96d2f8bf68cc091911eb3ed24becc73ced34ef21c61ad7e3f1d7218cn => A + 0x5d2bdfb60a2e852d3cc1dbdd6bf3edea209a0e26c37379319c10dfd08ba4ba28n => B + 0x4858aef465b4123e11ee13975f394481dcca0e63ba9d75887ee9de2fea261194n => C + 0x54c4aed280fbb0b0c3dec83d3aa99ca58ccc5bf4356ed59c1606e769cbd9a947n => D + 0xea396502d39125944801320e8e07bed01eff7d269d1d31b7098fd4edc6964b32n => E + 0xbfed74d31216248f1008c46ee01dd18a583fa5d93537a8d8b5bd1617051d5a16n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x7714216e23d792f3d7d8d8661bd916133a1f808aefe05ee249fcd1971ff584a8n => A + 0x9a24e1ebb9490c817fb5c5f3bd722bc8f6ef89836f1067acffbaf019d42dad7fn => B + 0xfae5ab0330c3d3caadda71f69b5bced5ab1ccfb96cbe3066200b80d754f4b700n => C + 0x25bd9d26dc1b752caa003a8d0af203ccf5180bfded9dd1795b7f541de70b38bfn => D + 0x71783431b34f302509e1c8f6c12c61f4ed6bf8158231dd3f1342f39a44ee2cc2n => E + 0x56ec4864287ed39e024814c04c605944c8df72e413032d09b0dfd1b8b473bf4dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc5c4c11e31ee4870b4ade52b68e97aa5a7c2ee4d8afc5c7e6560ec6576085c5dn => A + 0x57b28d5e1a7d308eeafdded3787d55c84f69e3e4a83a6b699f4f1d4f6197be3dn => B + 0x6d1ac81c7414ba883be35402d35f5dc1fe13c40c6bc6fa5c7a99704acc0c1a2cn => C + 0xb9522e677bfb26c949882121a59904da96c5bf2fac5252cf90dbf59bbfad1f6fn => D + 0xbd5d2790bf3da89b40088b3c7f43c79022ea41a0fc92b9cd3664aadd647919c1n => E + 0x61af519db69cdf5fb4daa688efc74751704cbd76d4bceec9ec7166fc4a2f9e28n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x030e3bc22011c42b73dfa562911dbb82f3d7d0dc573b6f57792e9482d0796d32n => A + 0x7cf80ec9e70fa5cd1cdd1989d60022642d732f82c5a8d07d52395fe100080f12n => B + 0x6db60d3c50d09e870de027940d4546bbdd7eef25f6e4c56c9d6f1dcf5b74c7f1n => C + 0xbf1ff079a7be913f68ffc841dbaf4ee65a83fbc2815ec893257bf5b6e8983204n => D + 0x86a83f810845239ec9f238d6f4f03e9d3dd6ca82421797499af1606a58edcf37n => E + 0x781be2d6f82d9f4628882a9b75a275fd0df51fc0f294b997139d5039cb039126n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xcf81493a578034c2a8da9ad2052f8f6f591017cff974976fc81faa0f45782eeen => A + 0x0efe88703066b88ce1ac5528d5c2472c1ecf8afbb0b97039be8dbadfedc09ce3n => B + 0x47e61599da588b6806a4131967258404a21e381c70e76bfb593cf5bc37cd20den => C + 0x29561b06d80c00349aae281a8a8d9eaacb724134f30609e97081620f5ad82e7an => D + 0x9c1017de281963c5471e9eb15e0ebb797189b2539b4404409eace1a839737024n => E + 0x5b33ca2470874d2b0474711e8ea0f66b0d5c654703b4ccbc7be9824668ae3012n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x3eb5478f6ce697cc8a20706575e5038f5afb985be446729e11bc322abe94ea15n => A + 0x9eb39f4913714f37334bcb938ef3e0c10a6ccf3e4e0aca6fc1c3e118f5b0f970n => B + 0xc4c6dc4ab3af51c40e8f024358da31cd6554eac4763e3e539cb42252fc48e544n => C + 0x80315de0efefe91fb4e9f82befe1e4ca69dde829715e242fcb01f8dad49a0c3an => D + 0x656eec6450b7d39b80085ca625f7df6bae40dddb5db845a8fb84e11f601abbbfn => E + 0xee5d4107628bba7a44949a06deb6c2c5074c56210b650f0a837954d0f56bbb33n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x036659955f4192bd022af120317242818b6f5ee1f3e87f4f85a260e5116360d4n => A + 0x4e0691066533b27c925b5202c0af6ba9de6ac3b8d114b90c7824db3f4f6c3d1fn => B + 0x432bf160236298942debcce3e46192a7fbeb5a57463f1773703c3e7212214759n => C + 0xb3809d75e723b9fdf131bbb4bf82cce1de79ee719ed889f89da1e28cdbfc3f0dn => D + 0x4a544e7b2c2acc398a5c43a6d414efb10469b1cf52ca866b6bb8afaca5f12387n => E + 0x09c25b2f98f638139fa2eb914fd7f389e390275bca030920cf8f42fc5c80e1cdn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x897a48e8ef42ade8c2af85be29c73506f103789ae03fa7aece4bdc6941829250n => A + 0xd889d3fc8acee6cf12c463fc6801458949829d341e81c75b7668b06e73b01484n => B + 0x8687cd7c723c658e924dac87ff3ec7e69562eae23442c9320063f426d534ccefn => C + 0x23dcef9f9b145209e047f14d4cdfb2025a813078f23bad38d2b8b47d81d131e8n => D + 0x135752e7b8f4374f7ca65cfe015b46dccb6449d1e9611eb5bde05af6a6405fadn => E + 0xe135351ec92977749db377d830cebafec9f4dc3d430d8f8aa503dc561935a2b8n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa8b58ef1678acfb89c894b1d48947810423745a63d4b1a7f859746a55e953756n => A + 0x3552bdb862f64fd5e8c2673f4c86f6ac0871a5d365ea15efed12e2f0e0041941n => B + 0x6efbabf86e9d725f4adcee11883538c2fcb331bb38131e768d2b46c775f96dccn => C + 0x62ae02a2d9fab3bff8e65bccaafd52cb2fe6059bf92f88cde6bd1f3a88779fcbn => D + 0x49fa05443d172dee68c37cffb7c914e6b277420b8649948744d0b016c99549d5n => E + 0xa158645e8731459ecd49c51b1457a6103f732a01d04996a79dd1733a238a60dan : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc4825b5ab067884704548ff4c0908faca175907ead1a660420bc41abe34908cen => A + 0x3c44cb43fc18892571b0e5ca206e623d3a412274d376fe0ccd62c4514fcda2e1n => B + 0x5a8e89878b4d751fd7ff43de74068d5c84c39bb308b6e9ea9cb6bf35b259eeb0n => C + 0x745b2e51aec6864425b2818ea094eef3bd3e30b3caf695c224a2dc77969576f2n => D + 0x3a5d572f377509d5716942d9be72cfa56f060e000af5a2f9beaa3987f56d7584n => E + 0x4409bf5e12f5e6999d8e0356e1dc7aef87d6a5d4df28ed7cbac23922eb57635fn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd7112cd655028fce845620e427712ffc00e4288e7fbc08131cfc108abe6b3680n => A + 0xdfa308f42640dd8ecdbc22cdfa28cc1739f35a043e5a98bd714ba66314eb1a41n => B + 0x816839fa6a4a40aee944523f8334ccc585c41912bfd3fca88720c3467d4ca980n => C + 0xe5daa4d5d3383ae059d64de8b293c4e37bc229365cfc1b099f40fb9879c62f66n => D + 0x1bef9dbf449ea07ea1ba7513a9976a42576164dab3fda2689760b5752e764d89n => E + 0x722bf65b28cbd2b4628b22d51e3d754e530e13dc4e5f8d029da39713b9749a93n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x457f1373ec139136fe046d6e1bb6696c181f28199248eb6e7b511f0fb763c8d3n => A + 0x6a961817a20f481f5e7c1d26fd2e80c98a19122ce2d77fc8abd1657faa944608n => B + 0x197174f34c9fc4e7e9f84dc1e982b6f430010999acc8fa88c0df84dcf41fd735n => C + 0x3cb665924e6ba7c8e63bf3eb50e4e7d4eb882902878a10ca738d66572d0d0c32n => D + 0x2800ede3e0c037133cea1db4e4f21776cbfbb3eb7bcd1c8644485db0e31197b0n => E + 0x6a46de60f251d4aeadb4ddd16e3ddd77f341945b9f8f1a27ba34ea49c7153952n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x6c516f7dfaa82ca52901f1b0079ced7383c7bc058e66c22aa91242ac17db6b8dn => A + 0x09cba5f51112fc86b754c16dc3f5b1b64083c9e4c41c35d320a5733d3f80357en => B + 0x2c98ca5e1c0f3617effd9e31c6941f14123466acc767252f3e1e695313c9ac9dn => C + 0x639dca0e3a21499cbe77264b46f889f4b516d90d67b534341c8dbb149439d5c3n => D + 0xaf219c62c1714e9b6673f72265b5a7ae88bcef6a36ac2399c215b03269290f90n => E + 0xd377a5038629d2ddbb463f94f2bbbdfa615caefff40c5ca4e617745aa40e1d42n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x39f9cb8bc24fab1271070f036cfc2f1a26655d70d912ebda59d4d7d2df30d700n => A + 0x5beae11ade70929f3c5aef8b97c399732b66598cdab15c007c99ec4df57ae901n => B + 0x4b73e615ef8857cbb6bac48fe95e0dee3b7f42c9cf79925444322c3cf730f63en => C + 0xc5904addf640a3be8589813206ca2cf66f4f649a5ced7a8418763799a00e72a7n => D + 0xffb45b290883448708579448cf239d3d67e6072b79a97164ae1d44e5ea6a0be1n => E + 0x9cd9555467dfce15330d507aa9bb6db94b49cc0026c1f31151d3db333f5a8945n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb0b8303a58a7dff3483d618f8bc3e0d6b38a0df0d1e7f6112c327006b25eb77dn => A + 0x0e464e40f88f80503c54a23ef9ffee414989614c78ae3545bbe30842669f38d7n => B + 0x3c7e8eb6e85f130eb4fd1270104697bf2eb6c1c2c763a6626e24c0cb32d70a2an => C + 0x7d0c1ca6c5fb075500ac098304511879b160c74e315fbd8a00b200cfe3bc799fn => D + 0x2abab6d834d0f32a4a4472308d5f8b79a95e812e2abdc4184bf8f5e276876f25n => E + 0xa7a38cf73cc57108342282487fce0c8746310282a246d2d72061bc0804b82ec6n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd5325666c12d37783c6010203428997be4138ffa1f3b992f564280ab3d89c9a3n => A + 0xb17affa007a78d00a1bfc1484a7aad0c8167d6271358747e11df61304c3d3b29n => B + 0x7089f4a8ee471e2cde4e1ad1b99df9c01f08584cceb19e6f5095397f1a2c6861n => C + 0xd07fe723b53363c028ed5a8edf1b110221cac44a0bf62b041eed3c7831afd2abn => D + 0xd108ef26df5e68906b6613e5598eb8ddb53f77294b295a0a7cb52c33848044fan => E + 0x98eade5c616d9e289dc04eec2028783211f71439fc36a62e709c68c80d3d912dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x22b3e06acc8aeac2712dd33c93b057394e48674be9b9d27284b9e9366bdbbeban => A + 0x9c32a32ce561f1a18093a664a44bb48205fe5e37a1be3815c27dd6ad14bd7537n => B + 0x0d477723c2009c813c1ae3bfe873804e133d66314198b58227a44f49a3f50b78n => C + 0xa25d00b3df301c13f3c3477fb7e8b8fbfdfb45c7f3c73e8af2b128dc52f41d33n => D + 0xb229d7cddab942c923f137aae1e8c3a6aee9e701ea9db4a51a3c8793409ca455n => E + 0x7c4887c00c45181f81d81e733e6da4df1f995908673557695e6e9f112a0f2686n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa096c33abe0d43b57131c369a354c475fb4956a279eca75871204f6364769210n => A + 0x2d1b8412f5bc1e38cc856c85b769eb8718a16ab87f4ffd86e62ead5b78d1fe1bn => B + 0x4d4d7f38da37444cfde4f27fec8ade4d6781aa7c5d6d4a2578137901a8ffb37cn => C + 0x75c1332a70b8191272b0b85bee6bc868b4a8ea7b6691eacc08447f2da027decbn => D + 0xb02d202ff3af33b44f50cbf0206f0f4ab21eb778687c8890adb6507cf05fc9a2n => E + 0x251047165f6c86090ec06dbd6ff5bb32277eeb564eeeb605fecb26bfa50f40c6n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xade8dad5983f658306bb674757e86b6bc90357844a451d1191959afbf43520een => A + 0xaa7ae42d329fb9d7abc469e7bc9f194e6f4e4d7103d154c9fc29c981739675a1n => B + 0x12a15c5f7d733eb56d659b287799a48b7ae887d192998b075ee641f028b984a3n => C + 0xe7aa435966b704d1ea9eb273325eaa2a117a3e352d8ec297e83081c12788ea84n => D + 0xac1f0b8acf1d3bc85a7afbbff80493e91f70d19fb8e05302ec0dcbc061e206ben => E + 0xe92932aa5e120cdd4b6d5f066f4382ca32ee6df3f2ebb9bdabef0690cb6465bfn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8ca93a833f8b1ded44c92472a8545d215b6f66e034b99ff9f8b4e0847ec34781n => A + 0x4fe5235846b8722f943283171327626238ea524c86733c4a1f2b78f16447a7fan => B + 0xdff2499ef242954ea0732c69009a60bc387ed78f209c2c84e03b5cd20414144cn => C + 0xdb5fb6e8634fce662929f194958fcd0a7ac9f4ee326f3072b420976e18f65b52n => D + 0x227fc29055ffc71f9e433f33f706226f94e5f25aea85416df27f3b35e0acff50n => E + 0x76afa00f89d1c00383143d3d94a5381cc21fb9aff1cf1794df8f68d0406b7045n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x015c7240c0e5cbf281e6ad4e7abd8b0f16e576110207659f3bb19381156cc830n => A + 0x1c10bab163d7a30dff31234efdc5ecf2b1b06ca3635024b8b40325c7505818bcn => B + 0x2e4bc6f0f0040e9de9a8f145e477ef3c143a3186c82ad36c53eba05cb358aa39n => C + 0x5024fdb39dba1cd68d5808369aaf05d577db3444c24e55dfbf2880049a5e2feen => D + 0x38c9c4def082779c94aed23d962bb30e99b4cba1124a452d96f8477bd3e174d2n => E + 0xa3f3bbebdda23ad79986508ac7f38a4839b66e7e2322994f8906c6e91f50603an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x1907f4ac54fbe154ca085227c9e959a96025666f45cbfadebb724abfebe886f9n => A + 0x1508fc0ebc869cf81744b7bd795adc6e6df33857f97060128e30f89dba85f93en => B + 0xf1e95d3e78478865bf6e569bc18f061e0ce129dfa8c87fca3468ab89a5229114n => C + 0xf258ccca217dea2c3d2e0e014f497e7db7fda5ef6f4fd1039d918c9acc96e2d1n => D + 0x7243d42bbd58a8b8aa5658ce917fdd94a84fab08fe72b644e736e9577d70b7d8n => E + 0x73da0e55d26ef586554c567ab4ecdadc3949f34bd02c25bfbcb933e26e1f7a44n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf7738b1a9eab496b9e3d687cc876c0470d9af2268ef6cb0f4c7c4ea94b632a12n => A + 0x8af2267b90a4489f20cb4f96c7475e640c96392ed1e1d670fa6944adb2385556n => B + 0x873c4161c906f97f59504762c12a3cfbb79ba0cc7e7c6b957424932217ed9af1n => C + 0xc8770d732289eeee31a58c53d3cfbb0cab5b289f5767b20a552ba5b27e9c9884n => D + 0xa11a2f1a35d19b70da27f54aab400d4e827479571112eb5cfde26c7d6919d172n => E + 0xe17de4c3a6b5e096d317fb64e3d91b7ab9f9cd89f3997a17737bff5d2654a0f4n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8c8052169ed0921be797ddbf515c127ba6e69d2672730f0bea40548986ff5384n => A + 0x065795f5a1c6c4bce543d1b28f7662b2439c6ecf562316c82f4a8fa24404a1a7n => B + 0xb26cd6508b04163c2a163e0f30a3e7f798108b028bcade8f85ffd0dcfe76e4c1n => C + 0x8cf8fbc921ec4dd2bce5fdb4645da7308d57c318feaf377dd9857bc61ebcf120n => D + 0x2a34c785aefb7b4717fea9a3e3e5577d4d087af5e522233883065214984f1216n => E + 0xfdf70fdf976f6a8de684c934395e9c87525aa7809a5b7b543320d5fef4ab6883n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x90717c71d2d2a7d89df7beca2175c3b05cd4d55809e4a7f08bb63dd156044299n => A + 0x6abe6ae759afc26abe62430c356bdf097a112bc8d3df5dfcd0b647e7405618c8n => B + 0xa645efd09aa879be5fe1a55374a8b3cd76117b092709c554c1852eee625f84ecn => C + 0xddbb78ec9ec8e0331f80f004fae3c3e05df1cb44a08a3364d0f6fd2a2487625bn => D + 0xa0a7be7984e0b28ff4867f472a05d221cd892a502edf19ef9eab4a867811d27fn => E + 0x4a1651b25d2e5e198c72a3b3c1158f7630537c1885a02f66c3a2e7fec2794857n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8569623ed4c5fca42252aae04c4e521849ab0066a7a36ddcd226860705646b74n => A + 0xa6e819c225a6f91a2dfd0462b756dc5e1c142c04e9bcd0acecd71cca37f741c9n => B + 0x36b44b86e113d9a566793ca993ac80201266ac262c1d890b4c6da3fed3e736d8n => C + 0x739bc5651991c71b2841907cdf91fba50dfc22abbcc4a9043270d3a4f95336cen => D + 0x3b06456cb786746984a257c4b37902ef93c907d2c381206b27123f272fec3f17n => E + 0x1daa0df5bcd3a82beaedbd942213ce1336f7a0ecf8e76cda7b1b6350acf57fb8n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x38554fb2aae6976716eba348da6898ee6ad94eaec5dbe07b28209db15eab9acbn => A + 0x490a8e132d51387e1a05d6b60817ebd9888deb53f0567a8375e6b25c51ce49d1n => B + 0xea8c59c6baa293016a2b1a0808c1b61a6660769b3f78e4c4b87618e1d51504a0n => C + 0x5fde1670511f11e4a890bdec40e5b6fefa19c650dbb772421bff9eb51043c7afn => D + 0xfa93961f58ddb053543412753f667d494934da86fe035ab5b1c5e4ec4393df36n => E + 0x5d8ec91bb456c639db5d1a805d5a6428af34861f56669baf46ae4f22ae2f35ban : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x58251770ee357a02ea36203e6fb21d5ead29fe7bf4be54515f7e5dd77d870dbdn => A + 0xf803ae6b2956675f6e92daaebb1407d2e5421eb1875eeb62eb1e21c2b23f5d17n => B + 0xc739830854670f66dc48deb1311c247322dc9fb7167d204a56207afa68c26481n => C + 0x991c6fec26af410565305fb419a9b6bd52783eea4dc5685a8d7fb9ad09994484n => D + 0x2cd00db73e999252b727e379d4250a4c9314dbc1af86a0c9f9f4c731c3ffbc3fn => E + 0xef5d7e21b81bb50b7b7630d53e8a8e65a2d000cb659d77930fe431b19fbf4800n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x03b5eb16583ade72b86bdd9adbcbdd646d02a26b830e1685b88e6c8f9861a37dn => A + 0x41bb741d38cb127dc9808b1d760f7f013e56b20d93bb6d17644427d198e718f6n => B + 0x5e1fca85f66ee4bce48c76ad6dea424545c8515477dff68a3bb8ea497b59a8b6n => C + 0x7201823929873c4c7e2c849bd357c7bcd60e14bff1a9be7b3d1074531bf5d829n => D + 0xbbf4527262a4ff00dc38a7926667a8f607288c7ef05769edcb9f8180e57fa12bn => E + 0x7069f62fbb3adbbd547f07fb73ba4748497f55c84a857fcd282b77ef81241176n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x0d91b97928ec4f8c662cb5eef638e553dd53f7e93d1652ab42629cc7dc1a052cn => A + 0x8767379d9d3a999820d5b2d6eb90c577a492fa198fdf400b1c6ec23e384bcd17n => B + 0x33d6a8cd91f8bf00597a63b88399abc243150bd4f1283f1f5c308a813e46eaban => C + 0x02c9a2854f432d3d944e66c128dff44cf55428d63866703189a8c80b405f13f5n => D + 0xcfddc4697122ede4ca7efb8f7ac1d7053ff7812a86436e139d03afa95e2c2406n => E + 0xb5b017b6d6ae966f0676a0b2d49458b3c185f2fd330f1220db56dafb7972aa58n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x7968aeaa15c6339af0e1d2219dc6c8904936333c32d74a2849763033cf7b6e9cn => A + 0xc64e7a09885ebc1cb83b38f0eb97379da918d3041ebd730ec6286c62f4bcefb7n => B + 0xb8c925d194aeb740a004ca28a308c5b118e25fb1b65fe374d9f71cfc81eb3d4fn => C + 0x2649100bd61377f6c696a0c5198ce2bb11c5fce7786d85db5387536cff2181b5n => D + 0x38397268290038112d28bf31eb4ea3bcebed7eace1ca6b207f1b36e1743e46b9n => E + 0x1782c5e67f6021bedbe0d9ade6d73c7324dbfb1eca220f4d1f01d1280e063750n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x3455747190eafcb6d8109e28f275380f9ef5517cc3659e1b97d83d763c4a93d4n => A + 0x76076970989d319b01329cd058cf3f2335c0cff02f46474e93b26c628d6ba241n => B + 0x2a6ba0797f8c1e30d7cc45e00f07799cd0452c1c746d9d2efb4d91d990f6d67bn => C + 0xe9949174e665d026db188d8eac8e21176677fbd855333329d8e0bbf5129ea35an => D + 0xfd478f81b09ef52f33c685134deae2d2e84d5d848b1d55402cef8c80cb1c3a0bn => E + 0xb3fd74982c307961279d8910d8d2829735bd9a091dcbac69c3c8fb06222b1e33n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe3aebff90cff066310181d68979bbe33a30633619566d55ea33ecb35f7646f41n => A + 0x11881e6f94f96343bc8413f801af7dedfba63649b18121517b0862cff15e3490n => B + 0xb8bcc8d22b50c728391724e3c139ddb82fc302ed71bdcf37c79eb250f72af628n => C + 0xf8dea62e7c188aad6b0fae6657fa643ea1f6864d72078557f1f75845a4b7cb40n => D + 0x3c5cf3bf3519ad34cfbbe541e8932efaf25c1f63d92b8838b6d99439c14b82c1n => E + 0x674bdc88ef449a42749e56a352fe6f50225bb1bc35df9a5faf8128cf01762525n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xafc2f2eb6ef19279f2f5c835f99a92f13259a1a0fe0c255f65765fe11186c93en => A + 0x99e5af54a2661842a640e06d08128ef13b96875ff1105b5cdfb0323c7d441b4an => B + 0x7f91046670bd768b926aeabed291b61aa3c3ae912cc75787903e7f762619481cn => C + 0x1e44f4c545ccc239f2f37ce6d0f80b3d4ce36a5305fd09bfcbe099251e19a574n => D + 0x701668c339b4a48d1f58ce2c58d89b2123f557f5bfbaf8b7b4a1794949022d36n => E + 0xa3d4d70521133819603b036a74af6d238940f1370a6a0c0c40c2a804dadb0eb8n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xfa4ce9bb4812abac404b77ecee5cf454f0a5ad326bbcb37f32ef305acf8673b5n => A + 0x2ce644d17c25a201943aa771fe942ea715d6fe00bab4f6882c6aa936a2876c80n => B + 0x45dd9f98978ffb1178ef099e1ac1014617a38c6904130b525d5a3d46a6f4b00dn => C + 0xcf7a7ac8219351dccf7a23f4ad2a45aba3857558c74258e272306350d6dd65cen => D + 0x5bc61032ff54262a65a02523cacea24de5212c8c81daa7d8062b5eef70b99876n => E + 0x47a14fbafa5942d4fa329fd24d017e6ca9fd92c8fb78035d39020bee391b2d29n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x16c7d62fea81dbcae68c6961dff7c16b72e2ad3582b2dd227bba7b2bf717963an => A + 0x1d60791b799f74b7f0935446f6f8b3209fbabd07e0c9857f3feda7af3e829cf2n => B + 0xad78bc96c7917a2b5749ce70b515f1644b5678f8186e625385cf37971b505be9n => C + 0xd37a660c587d6441b8d2457137ef3de013aa0a4dee8c462b61d55f138e0d9268n => D + 0x5bb643c230e665d4de8dfdf687c004153d3ef9b6228fbb511b22184c9d12c66en => E + 0x989be30530d7515781839a234babd101cd3b7c375edbffd4f79973a1850d8bf0n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9869b517d915b83447df4c2f7c49a31e6939b45812e8c148212d6fea45b9b0fen => A + 0xdafd7866e7ae202c023523f7ec55ee88c7380106e3b22d805c235d622b66aa90n => B + 0x2f3e2e632aea266ee4a1bafd72d009f32dffb5e18c364f36336acf59dfb2b8edn => C + 0x48f08f539668fe23c627955a53a33299504d496e5fff0bfcc6a01e736097c78an => D + 0x6b4f1964b888c7d827bc0b14a26b8a2b94e459f54bd8f516dd74970aec290425n => E + 0x29658d020d07a792a0bdee977c7a7ecfa73863780d27ab5b51824677673e084fn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf64b9a920efdec443271d5ff7fb1034d46ec1b165e840fdd4291f0306784582dn => A + 0xaa071faf13495c41379427fc0dd24ee28f156798bf58857e2ec16a9856b99c26n => B + 0x1178347eaf88221a34ef329fb839b6ab807ac811639552b8a07f469a6e9be958n => C + 0x4fe14d7678fd5e48bcccb8fa3406cb596742cdeeac6c3122a058dc9c2e91bb73n => D + 0x3f07bece8dccbf2568449ab0f447c9f9634d4484e13c8c0094bd6baff3d66bfen => E + 0x9fc63eb76411f8e5625381841ed4b4776bfaf7b8b2a37b04882d0f316e5facd8n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb9fcb28ee45a046d95d1f66af679eb67d8148ec6e15ff55c685133f100eb57a8n => A + 0x179fae795109efc59a711db74eff6619b8f696025d9f45657fdbd8be95047a28n => B + 0x300d5d80596f1945ca5a8706c0aa848fd8a674395cda992241f581d97696670an => C + 0x1406cbf1330f3d87062376b5c77e516194c6152f2ab02deef5f304a49e071a3an => D + 0xc0ca91d049cae487739f9efb8d4d1f343a6ff2ac1bd67c1d4de17a27f2c4a970n => E + 0x9f03f0a6eae5e40f5e666fd27109e030837e41911b59de42c2063cb9b7f813acn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x598ac3921aac0f7b14eef88097b6950e155654c0152ee8f254fb11199fcf3d82n => A + 0x3ebdca0e8425fb880dea3c09c34a134dc6826191f24335e66550ee9ef08bca9bn => B + 0x03adc3cafb71d31904e1a9256b5c82724abcf72d2d3ff7d98338ed3238134979n => C + 0xbc6a6237a1a3c651b2e3746519a58109928a253723b21032bf8987655e73c661n => D + 0xc0b78485a06d5ed414eb75ad16cdd4cff0611130c0425d763498d66a2779903cn => E + 0x8e66ecbf4f56f6475fbb22d78e55d0dd1df3f826514d9162bf92c16cbc0e764cn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xfe11aa258ab2d717694580fea68435e0fd402c396ba3cd49f60ed5a2934189bfn => A + 0xa19fea895aca01577f0b5eba7100b36a82ced9664f3673a1330ea6e5ccfc1550n => B + 0xec516b2bc42afa32ff0cf4523e8c4bc55d52c8f8dda0960c9b99f31992fc3bben => C + 0xb75663ca9c34c2b202751db0ec87641962c8f44da4baa431ec5e2d6633924228n => D + 0x7eb95560ea9265ac3a131c86af03ddc2f289b12ddf276419e61fd68a03acadf0n => E + 0x52e16d6e1a967ac695c0e9c33f5310545a971f0d959755a5670ed5cd0ac5d78bn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8121cef34530e165bb50772b42ec6af1254675c919dcecb63b9d596a5ebdd2b0n => A + 0x82d6ad4437a2bceff7e3101680bef8853de1a6d3b23075875a90a087aff9991an => B + 0x12a66d237c144937728c1d420c6e377e5e11672a284842e2b169944c0fbaedc9n => C + 0x4959524b2b3e7a8cf3d6c08cb3ec3b005cdc2c51410cabbc8d3b8404b59e8060n => D + 0xac50c5468b247e11b3be68ea32eac63deeced6dc608c6528463124e2efe1ae59n => E + 0x9f81ae60b58dd51d0eb8dd54078d30375045fd929b0005156d815b881a3eeff2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xdbe808e60623a9caa882e36cad3d7518eb370833e3dd7773a957015a3b248b89n => A + 0x46cbad77e3e1da19064e7a62dcf90b5b3d99f2d7b8147f3ed7546b80612f2b63n => B + 0x4a6f7acddd62650cfac80cb6615ee8259187403f1b6d5b356f59bb3c81f28187n => C + 0xab056ec6a7a91090be5cc29d87cc558e2e9f988b381a8b54271bcafbb674847fn => D + 0x556e57b8ac64c680b2ab357863e7dc78726ca21be97e3715f3292a7dca435a2en => E + 0xcd65ff9aeb570d3ad9978d8f8f29ea28b1ef0e7e84fec327060b1bcfbb4127d0n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xbcaeb4f4864bf03e81154ac8bbe41655c42e98a5edf259a620479406a943b4f5n => A + 0xd52175d416c44b9a60279854d81f7ba2f89117ddc0728059700c011ea0615e84n => B + 0x56fd22d0362585dddeb93332e7f4af1c224e5429f8a2962921e0f97b631b2d87n => C + 0xaf5287b44783d90a72c504ef8ccc326a967b8739e90392c42e7c234f1d6b5a47n => D + 0xf53e436334eb0df38829e357ce843582e857524c667e1042cdc66b6b36777eean => E + 0xec95204845c9c6c6fb6bc4b5c14b063363abf4bada4b0dff8180629653ca2256n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9f3ca68ce19beb5d5f997ce346063d8e5babec8d439d41a026c811f4446f299bn => A + 0x49239b10b43c868c9553d3c56c0d0db2fe366438d11f2723db88df52318adb86n => B + 0x60af6b060b9e4786a13f8d99439216de01eea6798d4c1458a33aa87a2d827d31n => C + 0x7a795c96e0f96fa5a19ab7b8c32bb6f49e9eda4fa193948166b186dcb359b33bn => D + 0xffb0abf923aa542f1543593d839c662518bd4e08f4f834b4805103e094aa709en => E + 0xea22d2e531cc425d85f313f0bbcc5231116e45a2abaf937436443948e7d604den : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xdb3debb29528c036e113dfe7aed9bd2683ea3c241208fbf41c902f12aeba651an => A + 0x70bb5c52155aa0a2f820ee2827972f55b7e4432804a406287fb4117f7ca3f829n => B + 0x04529a1c8607f8609c4a1088493fb86ee10ffce930ed815b4a2d693298866b29n => C + 0xa08808e9df579142e41fd7ca7bd25314e6e5e65ea6de578f33c1bdea3b1ed677n => D + 0x5d10c9479e55d55230087abef2d1fe7e1258f74e0460506ce834827c968da207n => E + 0xca4897c24c6ee47e2c7c5c9e9b730c81de90f0791490784ef3c36b476bd8d7f7n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa7112225ef86f7cf4a623cfc898153cff85023b9d0e8e7b1eead05b850dc87d9n => A + 0x74bac9ce5f0b194e3098f5c2349cf63b7c500e59aa7ad12285536b9eb5c4d5f1n => B + 0x65a4226cd055874b679f11f7d5202afbaa3cfa990204c5f6910656467a476001n => C + 0xb113b0ec15675439e5641e0c937eb82eab5912a23dc69e9a6a776e607f76bb66n => D + 0x6e5b4e80c61ae69c0620ca06d53e888549cc01d5de36180af0cbcfeb681f70e3n => E + 0x575c64cb32bc92ed5802033869117eac6b15c318d25835c4c6331896d3864a61n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xbe4fa14ffd43e2002f4794b8ccada89746c4e0a694ef4ab9e62fccfa63063046n => A + 0x1a15c990c2b8a7c77865aacd329f40bdd1b4e6da20718ae20eb35f19bed93595n => B + 0x29c40a9d98224e2948e01583a72b87ac7bec27821f87381addae8719d16ce7d5n => C + 0x2e8e36e4e014ee2f8c593aee2c6bb86482559d2f3306e3935755b5d3b624fb1an => D + 0x20bca39676cf65132ef32a61cf4e02c5ac6a95cb0ccc70253038e160efbc8a90n => E + 0x838a6c0a0a5fed9db18a42c376981d249726b31a42949e6afeb66e1304736e59n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x2c26b3a4afb9af388448718188b81ad1d5295c3229fa6216734a809d7e5572a2n => A + 0x9441ac581a82cdb7fde669b6ac85a7e48d094fcb3ab2aea3a2557d27e07d7dc3n => B + 0x87b3c9fed33299a655973fc13d92a6857f1f7453edc27000933ec23f8bd69dd2n => C + 0xd3c63c7a9e4c925aa9e374dea80b2d3be1c73a8ec64110b71d19010b348d09a4n => D + 0x07a0a7c35befa364aea4d080c9bc7915c9057ba6f0fbfb55bd8937ccd862ba1cn => E + 0x83419a50ea6e131c4853d51de5e176f093fe1dd724a18655c81e54a30bca8629n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x27163948cdd65229859d18a5960db853fa56620b1b4682965c20a7b2958bd8a2n => A + 0x10acb5f3f9192b051f4781cf0ac8f382ec117fa36a988872bcd9655cd6578231n => B + 0x7aa070eb9ddd7ef310ea2471c4e7b8b20b8415980c7aec75de202ab7f037ce3dn => C + 0xd35e8a72c181e2d1bba7b820b79b6b4e60b324e1f9360d026571f25a2d4bdb41n => D + 0x2c265c92f33bc70e4b5f2e4d39ffc10b190a2c08566a3c8d7089956ce1dde3a6n => E + 0x45f302612a4bc1281ea1ac48d8025fe8fcc1bb14c8c1b13e4f56aa443c8cec27n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x4188ee98672002457d07e792a517ec366e9477f1ffd9ef05a29dc699330a3c80n => A + 0x2730ab0d95a2eec67a5675131f1aa05bacb73793eef08fbfdd090c5645034e87n => B + 0xcce241aa5473571220266a5ba86c21f580c291b47a999eb35027532ac6d8196an => C + 0xd0d480bffd35769162077c201341dcf690fdd7981f7a440e78487731906a1dfen => D + 0x2ddadecf967edfed9c35130b568f6f825208fea3499550eb6ffa3a6e9a726915n => E + 0x95114115f6b79f79aa39a4e6b283a3f38341c44e9b496854679530cd159be53en : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xbbb4a6a7f0efba9f83cd480b858cf1d48f5a4949ef0d3a14d4cf7efe8e63fbban => A + 0x2021926a78ca4ec553a8575f633c46ad9cb1e912508c39d015520b33868d32a6n => B + 0x6b6f9c7e6aad3dfd3da5fa92d675a1c6268d3b5a500efc25b25646cfc3ab9c7an => C + 0xf556fa270ff7607ea4722063bc37f7db9a56841e115a470ae315de4a1dd90c2an => D + 0x7747ecfcce1cbcd858145eee96caa7c7ac892e29b0cd8642306a762694d08194n => E + 0x6f4e01b2f2d1b142c4d0b479d8a476c217b0625e178baec8e2d25e1a864cf717n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xebb9cff29315f5aa90a28f77f8320af338b6c8f761011362e69d919ce7f30b2fn => A + 0x100ec0f417f23b72ed934cad21e9cad32dc3e2ae277425bd5b470bfff2831cafn => B + 0x0d56d795623075fa83c4b0728e14f7696d2dab3f6d279b31e08709315dd5527an => C + 0xa85b332bc24b288783511379c16d736e968b43cd4156de92bbb9969868c46086n => D + 0x74ce822cbab266aa03b1ac0ba5eb1bb12581209e903f381d399c0654395c2becn => E + 0xb3da0836ae36e2e8364ab72bf5e1e4a6df4d2cf0ca1f150c62ea259a5fb646ddn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x30b072124115fdd42f6879cc84644fe069584816d2ddc7a50fa85ddbd5585eb3n => A + 0x7e4dc72c7330cc0bfa11a199a18aa803c75d653312ee11056c6f23408e74e7can => B + 0x5fe895b6236e75f840315095b2be6cb8996406ad033b3baa803b8a6c2a151251n => C + 0xa797ed034ba5be49a6a8db15c79715a51d3f301de17a8252aa3ab9abae264946n => D + 0x94eae8d46b402c8d65a84a8b7fd0677b1d4ccc8ee0ce74e4aa2de070b5f8a055n => E + 0x230a540bae3b27763ad8c6119d53f4e16833943905347c73f1531cc17d101db1n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xfa86270f43cf6bf8884afe0c9fbc9dd40efca7fbe26a44fe1c0b370a031dc417n => A + 0xe566dafd6ec4cebc41355431c9b3ecbba6c982120d07cdd2dd1118659b78e056n => B + 0xafdc9495f0458a097abe5250769097b27134d0d129c9f8f79116188edee7b903n => C + 0x5036e395b466324220e8c9098c0326a1ab52da640cbdf2de32ad5d85dd03112an => D + 0x0663cc3f0106948c17ba7e774be060b5ed71b31cea23c85490274963504b4c51n => E + 0x04abae2188a0e51d10e60788f4757b9f4747e6dd8dc7fb723342ec67794e9908n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe7ee4a6a4b39e916669a91e27d08862bcdaba191a695d239e631073fbd797919n => A + 0xbaf3502fdfe7f11590e301175da4b41ec390f2cf32312192a57ded9301f230ddn => B + 0x726140e8d6b66e86f5bba8f77444a8da50a2c687e84860d8c0ed0f09118a1f17n => C + 0x793ca3d8f672a74679d2b229d14b7e7338b10d71e0b8bc32eb77fae3fedc4980n => D + 0x5b56dfbcac876ece07facea09c1b6c0077e2819517bbee91f99036749669b69en => E + 0xba4644c6faaeca2e589b6739b30742dad46915e1af13e8d04088db0bc47f2627n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xbe17b386553e1b0e7e754d7380a69b758d014514b3ccf7fa661fc8c610789140n => A + 0x2ca65d9720238ae99352457d694a9b5850bbe5adf8858dcab9e920c4fef24b2en => B + 0x714db9aab12fba1b376cc5f2189967d23effb82b9ac6b790777ce98013fea1d1n => C + 0x51ec23abb21e46c06bb83f8a304f4b674037c5ca79a0ae3e75397730753087b3n => D + 0x87731281481d5a616ec681c3b784c844414b1f48a3b615801d72edbfb27edaacn => E + 0x720d5f4fe17875edf49f32c99fef4c3b8b7c469f62e2608b9e08d1678739c285n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9a5a5313b6754d5cec62640ae75c2acb1b148820c27ed97e44054628a6be5a6cn => A + 0x8b15b11438de7df76d0a1fd01ee6001ba358d0f2ea0cf288ac62e96bf09c0b00n => B + 0x126868402ab23235e0990503b55df20cd50cf45d94a8868795674005b84e7a3an => C + 0x6d87f629fe1dc3cf6e47fc8ec8753a8c8b4e608b9e62a13fbc73786bdc634f32n => D + 0x6530adb344e824ae72e18f507d10ab5970db130065b86a1f00844666751ee05fn => E + 0x9bb5263884d4724aa939bcc10ea48441e33ba0c093fa6303a0ae98cced1035fdn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x705561b9c66034f390695fd09134be6bb9e05c1a77061ed22441a575d18930b5n => A + 0x00a6585734f58e6c65bff24900add3d02f0a6f51dafdae242cb74a1789c51338n => B + 0xc120248f673117151e7e532f2970706ae6f5174aa6952b7c98c1a7438e0a87a4n => C + 0xe4b3b8e918338f6c6641879e7c6a18cc34a558c02bba1c507e9e3c10a80d0bb2n => D + 0xf48e23616d0938447408f8b764f91bb552caf5987df6419ab173673d0f2a6273n => E + 0x603fa7cdff22688b5d64f7e53b35037f80a38eaa567ec88d55f0d93f26d7a4cfn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xbd07ca37ffb84bf7ab3d85c9f791be37a92356083708020890546a1408c52c77n => A + 0x0527960c1cb9814af5cbd752b9c0bda57a8b81a02cd0eebbc1a7ad95a510ee45n => B + 0xebf96099e0099c3c5002bc7c576110454ba2acbaaa7267d53d9a1765bdce856cn => C + 0xe597d8fd6fe025e989d17b887f5d649e378b2a3bdf91b4b49a0550d765b10b3cn => D + 0xc3f066a3329c16c874db26e1341d0263f8ab620775adbc0e3d4a2ef5ea02d5a0n => E + 0x658c823864a3d225b3f70833e54bebff107ec129a3c4f537065e3fae9fe31686n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe932cc99d7c46e844a8e94893fb5f9dc80658fae667044acb65a9bac4b911771n => A + 0x35329f9b3276221f270dcdcb3137591b20c8caa71a28268590cc3c46301fc34dn => B + 0x7c018ad1f258b139dc34a4f4da2467fd6df0962da6bf4c0af986f444e07e7a02n => C + 0xc2ffe5b6ffe6773a03275fda8083562bf99bd94b0d57dac3f172f34bba0307ebn => D + 0xa0cd95ed66bb894dea624375ce0e36b5c2ab17e61f92f9eeec4bf70815ccd032n => E + 0xe9fabe23f825ff1d92f2415a19355b5061c345bd5b74f8e7a06ad08df3118bb1n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xfb28b58e4405e3982f21c8bd61c8a86676fc4b3ec3406d83c3df8b89188f419an => A + 0x8d37245be6ca02ed9676cf0144bc0e28a94a82d12240c0a5198c1c7d76773462n => B + 0xcc4796653473747a4ea16ce83162dc7f499f0f041e181074d54769c45dff2245n => C + 0xcd58ea194efba9b3ffb5076ae8f61993495735f52fd32a0f91820c91de433794n => D + 0x6379da1053c413e8f2d0b38038d9c1bcd7f9066c8325c1b7aa13a7bd3f0832ddn => E + 0x4b2211a3599788c0972bd97819cd1d0c00f02e95cbef803a0acf9373c4bad5f9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x00adb7cee3b8eef9dc03caf17918fa70c8a63fe0bd6bf389f0139895e7ee0dc8n => A + 0x09b1dc08d050f078ab5ca050e6ee8e738e054902da4058cb74a53cd7f6961384n => B + 0x20a801821b90b073598197086c3ace9cc22d0bd7914202107589d5da55422378n => C + 0x92c2e1c9b27adfd17ee9374cbd8b1517168ac42d405a6beb832e411b00b2cc27n => D + 0xab23229215963437db988ba64b1f2bce73a916093046b0f9e8584caf6ab68fb8n => E + 0xa46e35e04b23bd5d3af72966c12bf247ef82d638571c356a8e374f7a2aa5c7e1n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x0511936ab792682a5cdc21434d5748b36e280810eb7b2bd8bb6df91105e41aa0n => A + 0xfe22a519014ec4dac6f5a9e0b3a253432bba7d3f09b2e8d7f92740fbb73bd599n => B + 0x8e26f7aeabdd506ceda982a712f3a6eb3830fbcc0a6329d48909e6979999a08an => C + 0x8eb611fb87c52a53e5e3e94e2972471bdd39c91cdb3a83c13afdaeb26a1b7189n => D + 0xffee3ee7bc834fa4a157d52d59b266b8806b558cdcdf5875311cf1b4a3b10ff9n => E + 0x2aa30134ef46b0fc68886b02648963c329604421100606ec82e704d96134fd9dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8f1d1d8f59ad92abb5aef578c764cdecd7f5fb164b479f75e28a655ec8dca4bdn => A + 0xcb2efb7958d939bb8930355973284a0f83b6b9da802bfc086bc09b8cc29b01dbn => B + 0x8d291901a61eb37fcba826a6686c06e3593a76c85814bf2ba121d78709922d91n => C + 0x0d3f0554452efb5597cc80aace31f5c0a810965cf588bf8b6b698462cf4115ban => D + 0x2fc95e4039354935acf6789a50bbb816daae839ca29f85c6dcb0e90ba620dd03n => E + 0x455dccc8c23b9853c72280268086eebe2f65caa3106c61a3ce577e39daed7326n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd784259cb8c9510dc7e41d19d05e03696a44b9d8c8c38ab06503eddf9b7284c2n => A + 0xd1d7b3cd8abb2f8c4648c92117223af83fd651df4c5489603659d1aadef09359n => B + 0xf58f4f124ada1b66f18284118c47c0df194302a8e8931114bf410ba58738659bn => C + 0xdcc951c464747b8967042c1ec8276ff6a52fe21a77bca281650a68e9aa6cba78n => D + 0x67e9ff20326e572251a30e223b46069eb887093396ea40dd7e96910b4f6f866an => E + 0x8ddbfd58b7ff003693e3dd2b2096d203b5d2437bf2060effe795163a74af2d55n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x963e0aaa33f049cae09b2bbcebdfeea2e4240cb5b3578da7258311cdb14d3c5an => A + 0x0219ce9b9a54779f4e2865d57331c19f93ec1e00c02f7fec511260dc474b99d3n => B + 0xc8c6628025410947e2793ebf426b93d01dfcf76c4b6a78a01f91293f5d896a50n => C + 0xc92c20ca79826178764e21f6838d431983c8e860be975d3a80f40d5a50832481n => D + 0x3fbda99a264b0067396464852e87c56af6805d28da485be1b9a47d5504a8cab8n => E + 0x220bf9802494e2e291183b3f60f46ec8a26accf4bde89d083cdc4810a2f6d868n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x94eec3bcbead11a6df645832d755d41697625b31710f33a7fc66b606f2c651aen => A + 0x27b0db983e2e707424d56c8a7d678fe5c032962cd6abe81c4cdbc1ff2aaa1d22n => B + 0x10f27ced291b572706c6fdbcc2c43b2c4c2c926c0cfec1294934b2ed8aad46den => C + 0x375751a74288e71aae99a001bb86b8f614cab1e4fd1b2b14aa158c4da320cdd1n => D + 0x0f3f0e765e80a7c8d835e0b79fea54817b5e48b2bfde77bb4c69246399fe788bn => E + 0xbd9d22f7dc2b30e9e4c6b264ecee6ca691154e16ba70cad8df868cc557df364dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x5da07aa9cc697852563f3d1204189fd11f5de95052f1b8af35beb0c3797893bfn => A + 0x9c003ac77bdc8541366c420f0fcf8a7d77a3c458e2c46b6e7a7fbb2e0f59fcf1n => B + 0x58f6ba867e2cdbafc0dff4668eab043f31e10ba1f94e7bb7ef123a46673079e4n => C + 0x6a75f2ee818a9c548353385e4499ca0ecfed3a0182dc698b246bfb3b86e7160en => D + 0x06b43df45a448f99b2d50a32b081ec219f7d4b502e439cfe7be479bef085cf89n => E + 0x18dd8cfadaccf793ea4db91907180d0134c28c4d55208ddc05b86dd9ac3792b3n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x805eb0d809e2d4859f4d6392f40675d91e6fcdbf57466ec9fc7d0521729bcfe0n => A + 0x9204bded2fd6414a4e6f5a8a2cf17fd0b4c83dd9d759d30fea1a8517d0dc0695n => B + 0x1bc61dcc3cae62bfef654f5849df6eba1990f2b7a222bca0fcf8dc6fe779123dn => C + 0x112144923c7c28843f3e5bb43ed40567b63f23457d2663364e90eba9edeb2ad7n => D + 0x9e20cdcf747874b3e07a28f5f3b6a812263cf644788142a2388e5e3dddbe7432n => E + 0xf71e0adb6e6ef6ee8fea6d481e0e0803cd0d3fc3c908f42665df9f37beb18abdn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x742cbb66978115e837d49ecae7bc52ba0bb9642c47a9e8b7b75446b5d6c99487n => A + 0x14c0f825aaf6cdbe0fe56782e7279f66d647fed005646de3fad9eab25685a94en => B + 0xe5d82f8cbfe92002de06c571f92c12c2d5377445e091c9f7812173e01bc3c5bcn => C + 0x2686e2fba3d8fac34a57da5d955fc99a2f92378942934ce451978af882c34036n => D + 0x13b9d021a5c14d5da2eb194a04dd249955d2ced03f6ea82a36db71036a08ba52n => E + 0xcfb74449f3b43ed32e04ac08781d7fe8cfcf1f847742e2021c9a30fabba26c44n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9875fb470424d1e0ad0351bb0544574f0cfe9da2be36e9db28cba8665e029c56n => A + 0x4808d89e1a220cc9a7f74c4dca2c0b491f1f0051d7106a1ac097635f65ef01e0n => B + 0x00b6caa8980a0a182240c76832275f83467bfcbfbd66a9492874fcbc0754bd27n => C + 0x0a9425dea420465a2547f22a90fc9b7b9e2a750c125c83e06a543b74f437db6fn => D + 0x82c053997e835e88163b109e5e9948e96a142078d80ecf0487224f222c430748n => E + 0xea0f588b27144ecf202168caccd18a1a63a3c776476d6ad25ea4e728053cb5b0n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9a35d99d6c8f1f029a2e71767dcea24c03c809381be215aec2d590bf1350cc1fn => A + 0x740cb06968b64dd1ca722b731172b197c1228aacde41cb677f35fa33ce3c4a25n => B + 0x045b0a2c7275d64fb583d9205b7114fc2e51f621f61f301537dbe1f808ffda12n => C + 0x2804f55d2df90927b2184aee0053faae2c1196e5b8e64baa313ea382b04c94ddn => D + 0xbd04b6416011432be6377f40fcf9cce07f6271f477bbad41b6000477e935a856n => E + 0x802f30a11f1637b7cfb7bc708ae608634da1599fc0f44a2248bfd2405e6b1f74n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa7c09f7d87a5a0891ad39bc5470ace48223190b6fec967f19ce4531d7b53e0ben => A + 0x834b5567b59c8083d133f7219bca927c9d5f71813ad8169ba92dc3f5a875501en => B + 0x395ba13c281a64630dcf0cda95e014dcebd41a99bed8cb8a5c8fd77655f8123fn => C + 0x3c0c597456aa74e66ca5d2cbae70288beeaa760e5079cc9dfc0db131aa525d97n => D + 0x234c746a2302d55b726fe5e7b2d24ebfe598c6e6fa0b380b6beb6829ed88c12cn => E + 0x979edc54b1111d3c2b2f4e427407fbd1db436f08c88e4da6cbeaec66b4d98de7n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x7a51314d8bf2d8119e88a2e127a509a67fe7e32bb6d4824a3da1702c478e731fn => A + 0xe8e1844a82ca853f0402d9b177dcb2f816cc0bd7716f5cf8857106111f35edccn => B + 0xfbe22db391e61ce9bc72fa7a8051bd91f8e4ddade9f9e7cb6dff15c359fa524dn => C + 0x63f12f34c5ba33c40acd7511906bae87b50fa11072284c71d91c5bf730925bf3n => D + 0x64958da7f6573402e5f72898178fb26c069292f8f4f9bd6808a450f5b0dcbe3dn => E + 0xc53164752d8e9ad7b7eb4cdee059150e191cc2d525370e638504d95fafde8d01n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x6bb15edf689122b7be705c4d5ccbe38b755194d0334316a4c48472f0ab51d2ecn => A + 0xcddd655630e97312376013b73676c513972c0bf1f100fdda236a070509d22352n => B + 0xfb5c162bd7310f78bf10ba757cc820a015aecb492a8c322ed4ad868eecc384cen => C + 0xab28052926c25228ecb73a52ea52e302440b4cf460e83ac86238a9e982ef0082n => D + 0xe9bbb516772263e18f0a052f53ab6df83c033f74ddb3270e0000ddad6b284b8en => E + 0xf549df722a8f3145bd5400f0a50abc4f6a3232a50706343b6d4ae4ba9c87e597n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf01e6fcd72e8ddafcf2399fb31132b8a241ef65140b450a90b198ed76abb0addn => A + 0x7ca1c410cd1fe193d9e61dc8cdea696cef1234d4fe1c41c95201816270f5458bn => B + 0x94e00503b34a9c9e133092967ea6065755b9a6dab6575518f133d6713a2d6f8dn => C + 0x9758e7e5119b5b6311c85e6ed6e1a6d898a92d818e9b4c528e63ba7ec2a6e1cbn => D + 0x391e54ebc8000c577173441663015cbb72398826c58e7062ba6d0c8995e5a2fan => E + 0x8ebb988c3dc53b739c322f66fffd20e69b4e8aab835bd6017ba2a15e9b906e52n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd906c454956f41047ab9e0581ad87f9254769192a0651e6289d2f3d7e94d8d2fn => A + 0xf9853490e81ea86a78843b6849afae42727e99bac28e31b6f70c114db793b559n => B + 0x37134ce8cf33e4a2f448c89d1da3cf2c647539ed8a738b8bbf4ee6cc87aec68en => C + 0x568bb54644557fa813b4cff97749e40f8f885bd6790cc31ca5894ceb21091e7an => D + 0xf75f2ee3bd68d926c75af01e035955f3d5b89865b5a1a5c46f87cb778d37583cn => E + 0x2b59ea2bac9f1e1d900bea3a41c3fcb783d8514aba4d44511a68199ee2ea02e7n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9a8b76fc0e3c8b6b11cd2fa8051eb33be6e8957d71a7d952e2ac5c559870d02en => A + 0xceeabd4503be10668703bc6ce77821e81645394915cc690bfe6ea11baf3259f9n => B + 0x6774d3f5f4c03ecc8589b8af505c0f20747a81a70aab3e5e15e58b53985442e7n => C + 0xed7c3a39aa3ad069d259acaf801c224cc42f3f2d7f15d993fd7c9eee4b87c6b4n => D + 0x330c8415acf5b5e9100e956280acd786070728bf7449a3908dd44b9116080ef7n => E + 0xabc04ad0ec51becfe587944ba145e9cebdbd43e8849436f68aa5709a350e8caen : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x574cc2ae25112f6649a98f96e7b7832fe25e1a39525cb175e9ff64f1ff9768dfn => A + 0xbb301d9c3e3bed96b08e35b66e9cb6d4fedc9d68387fabf166af13603b4252d2n => B + 0x9482c11a55848d1eba224e6cf0021ea3453f34c3bca7102d7662b913f23ddaf4n => C + 0xc1f00d8847fe3ccbf2663df2eae55a71b4917d40d1e48fc41bd9dceabd276473n => D + 0x941d5bcd92e9869cbdf6bd7050728f40deb9da48d55ed07e9e28e4b69c61065dn => E + 0x9f4ff4f9d0e670429cd3ab749e99a339c6fd9376eadde6d97d6283c03d951100n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa38b6d877c2402f1d977fcd30734e26b68383c8596d24d1be34d4f47f1b121e8n => A + 0xf06c0b9f62b4554de58c462233557ac6007577c98f93ee142ab2d25becfd2db5n => B + 0xa79fe1222df2a788ef2b6474879a1a250e1cc40512f63f8bd199144b77869330n => C + 0xc4dcfda528b1d275ec20f0893a0f38358f9f4351352e1e1728cf5851da9301f9n => D + 0x6b3f1448bd58d159f1fff9cfcfc7af81df742c98b3fcaa96aed77b3815045791n => E + 0x64530389b479d8135a98c96a32c1cb5718f3fa680662d9fbac51075e51f52391n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x346a267d26c05fb9f68e08b9c93b2e6cb1c91bbf4e08ccd302436bdce9620820n => A + 0xcd10b75e585560e0f4dc58f86741ef201402290fcfeb4a8f5fc13e56a01ff58fn => B + 0x561af115e4a0151df053944bcbf904dc71b876d709964c177ce0c15d59ba3584n => C + 0x00af75ba6819aa8255d24b60f4f310279e44aa2eb01349616eb13b3cd97490a0n => D + 0xe3855d378cfdcc0114e55a4db88ab15ea42f41c12bfe96e7350638e5e54b93afn => E + 0xda1a4389df03e431e7f1958feb47e83db7bf2251fbc42ef6b77fa4aa733dbdecn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x6d912e6ce9b8074c3aa08514b62712f4ec20e21fa0c26f24536c0cb0ffd8f36en => A + 0x1452df3182e5a33a461328b5e5fe98d41eb70ad6ddf76dbca7eebbde640f5e9an => B + 0x1f0fdeac3b691e40c7057c9d261af313b2b3dd66b03744db1c5341d4df1f0e29n => C + 0x8dc69ba492c3f726ba4e73744f806afcfba636374935d0bbce210140741fd759n => D + 0xbf5225048c11072cd2975362677cb73f2ebe3eb2fb2adbb2609a3bd5a501cc93n => E + 0x83c1b0977f2b5d788db27dec8931f054293e96fc560740c57fa8472ba75079acn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb489ef9f7a97774db8c9a8f98c65ff89ccaef9bdc138d9a914037531f7195f81n => A + 0x9651020c20e7f5c9574235d2696227c1966b0f5f751a913c33d22b1b2a7c3656n => B + 0x5ddf6a8a260d43a6cc8a7b9f7cf5c4dff6b1137f50b7ae094d5ae5f40cfb4c85n => C + 0x285c7e80678b60fdd4bd4b64461d7687be4d433d05b5481166507a040934e64cn => D + 0x55efcacae29a739e618063c0afc31aa6e0936183bdbae0637e0c0dec64b50c21n => E + 0x3b458e86e164004bbca5567438a678e4d7160c547fd53e9c44f50c8f8681c30an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x921c627778fcf1b2f6d4bb5fa0e7f455d5fcc6b65e36779854c482ff1229a2c2n => A + 0x93f34a05c2801b6411de974bb16bef37fcb15b737ceb471a924c14d1c736f923n => B + 0xdbe876e6b52f8db206388c88517687e8ff24d382a6ee9e1403a2f006110cc61an => C + 0x58b915913c1ac9158be4bb63cd6a7cd028dccffeb6aa02d0edcc07a5c2e25415n => D + 0x4eb9eb84d701c6b3d2b81fa5fd6d072d6690560440ba8269fd6476777399bbbcn => E + 0x837f50e7863c30616f4fb319367647062ddf225f65d95bf9236760b36507f6a7n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xab2a58c7694ce478488d098927680efb67ce44a304489b7887e749a3c47d395an => A + 0xb0613d58fd791a7f95209ac2f8fb848394dd3058a4db045ea7dda370e9ecba25n => B + 0x273c62204c8937b45375879464b57087010ff3f580e734d88d773c877289bea5n => C + 0x7c7fd6a7be2bbb891607706f7906cd06344a9612916c1a9d5cdf580e634ea0a2n => D + 0x626efff8ebd63f01391e1588e6ff01cb6c7d19ab3590af2297f4c62807f42a91n => E + 0x4b93dc35a51e5984a7424612a7e2cfa93183fe9860fe48064d597139dcda4aaan : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf70154ad2fa71d311781e7e245dd8fb56866f92baac06d30b92a6840609967a0n => A + 0x91fb5fe972b02571fe955e3ff2a238e56d63e651d6f27701e771be449cf88b5dn => B + 0x419cfd17e079be1594aabcaf7af5812be1984b904d73d8dd579a0804f5d57735n => C + 0x3e21f98c9cd18800f0784fd53e22cb38ebb117cf7b65dfc7a4c743edc714b642n => D + 0x5bbe057a5aeba2446e9b5eb0ba27d0f5c5de8ceb0b74001c9a652b4354483ab9n => E + 0xe94ae87f78719a3bb0535763ab25abed59ee3935fdaf90fe4d820152ff201eaan : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe29205ea41d3a7f3e47bd439b77627e87de61286e21de19def8d7f4dd9d12d57n => A + 0xa7a221da3e3e781b2e94384188dbd7f9fb138b82533cc9f97d255c60d3f36fc7n => B + 0xb4c41a950071d8fc733aa33df3bab940da489f7d60a553b8a8afa78169a7f84fn => C + 0xac51c5326c4d2dca23f3c57c57ce5f1ade5585c5cec7db76b664a3d822f10cfbn => D + 0x243377bc1197b18931dfe3dcf9011c4959cf2204537b440bd12ad69d3ae4de64n => E + 0x5b906b26db49ddc72f1def86b3065c4c1a5e5bab7b210fd0b83e9a69193fc3c9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf5fdac6ee434961b4c7d2f42f18b47f0f3ebec5797939222afd87978d9557ee1n => A + 0xaf363de330f417eb5f611b6a7b14206576c38b88a8b1ca4bb301d8582190ee5fn => B + 0x59e1755f6baa7277e0cf9d0b6003770a19076e13fa964d8ac3a43c92fa9a91e2n => C + 0x066d655269cd386d63568d016861105153d5221b886f9cc2a150bb86dd958915n => D + 0x27a5bcf06ddaa29e5d1df8ef7cf2fb44d0b3ce692a2a7de8332c8c72648ea362n => E + 0x076625ce75d39cdb7d3b8a1bd56c5141cc24e5c1fc5c9c9ab846088c52da3104n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x6276dd73c417d1bd74163d8d4c8650f478f7a7bc916545542d35f6532762c3c6n => A + 0x0b3e1a4741230b53930d46c8fdfc30b1a9e0187a5798cffe642cf052a2d08cf6n => B + 0x8dc2afa580b1a8da44f8ef9c6cca97c31ea0be82bd5834c756c66c12063fa8d7n => C + 0x11d531526186d4f4894b5bdefc66ea50d39b5340d17b3ac6f6775062aacd958an => D + 0x9b2489e6b6cde1d704bc0bdbc0e4f0f93cfe18e761a4dd99399c8c77ae6bc097n => E + 0xd0e1e88e88530237ffcda8b98c6fe8996c7262f59e6a9f24e641f242a7e9ef42n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xcb6ff92d6c8847eef3cfdf102fb06df2e62d9e53b8e37c10fc6c264f9f9c0cf5n => A + 0xb707cb768816a28e535534216847d63098b8ab68acab0f6505d6e656136160a3n => B + 0x370666e16986a1621f816b5c261e7f2017944826c2b2f791f865f6dc043dbb5cn => C + 0x57fcb37737af4911deb229d537a380fd835259a0512df992b54fe796ecdb32d2n => D + 0x7f7334ddbee5012680a35cf2006331828e5a9ccbf6382b12f205ee2b4f2c0e12n => E + 0xb8c5270a623695344f55cbb1cd4f92aa3a3f75d7e56b2abbe14a07ed606a0505n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa503eda6fb2b99a93fb1c8d8a5cd71a59cfed20b0465ccd6e491dc9e7e2933b1n => A + 0x3bd9962bcc9f6aca9d7ce29c02ca92458882ea3bc979ccc1ff46578238ad4659n => B + 0x4422abe9d410d950ade9dcefa542e03c7647383e133676e6e53d54948ae669b8n => C + 0x3469e67b92e9caf9490621a375cc73151072df086de8216d363d53b6ac1613b2n => D + 0x7d144188db6a2fe68771f35bf21a2442f33b01b9b182b63e17b62de5e47627a7n => E + 0x4345c85b3e824c0d5d9f0b74c76d562d832307c3e0696eb58e458b022d290f38n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa5683d4e730fc10c14e3f8177eec4be4d7724f22af79cbf359dcc0f1120c829bn => A + 0x7b52306e00b2659e164bce50501b36103702f30e310d89e6da897fb757f4f8f8n => B + 0x16012f05f1ec06d09d0c37028106d5bb73aee2b573d867dd5242cffc67d0ad91n => C + 0xe75fac99e5707110a745d4f5ad6a4569d8409c34ea323e7362559599c8487e6en => D + 0x6196922bd6a5a13dd3ee92a1e10db40f36683b3dc274bc9fbce10f8109d4ca97n => E + 0xa17761fcc501d3c37094fef85fc0e9abcb60f84798b2da8e581b8afc6a2e766fn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xba74d9ba536b9d74df5ac100615d979562c078d9694cf09ad84a2ae32e438eccn => A + 0xd495924d0e02c10f459a9d5964c59c7650e260b97508ac0e84cff596fead6825n => B + 0xf8864756de86810c0768c66d3628d2d9431c5520600455b53c98daea55940148n => C + 0x37b599ce68bbe16658bfc2af4781cfb99d12e7e325f57c4d13bf40e1a3b7af24n => D + 0xbefa6680d70b56ec08126f445135e1f4ef5ca54fccb3e938e04f3d1d692fa343n => E + 0x3d5a341fabc3871f7a27a5b2c937d0cbb555ebd16f22be6c6b957818dc6b6886n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x7467ba0441775822f222f3016cadeeb9376f8a041036f6dd5a549aa107f6a393n => A + 0x483e6f7506a6140a5d55325a66c3cde68bef6a9da362f2084894896133901376n => B + 0xad377180014bf22df71c3b96f93c0b04a0c1e94387be6c2a83fd0742a905b2cen => C + 0xa353d34458545599ae155af6ac160db90704c2f921dbb06cde6fb602d5581596n => D + 0x72c803cee67d77704663c537e29e8a0ffc5df46b60203269bf4a3928ae9dc25bn => E + 0x34c84482aec383d572852583ed430e8daa0930c19898bb811e22f567f6798c96n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa315267f9d01b3258a39e1fbae20216bd11735013036a4053b42324a6c430678n => A + 0x162fdaad37013e34c85efdb992070f8ac7f4bb05c2d55df5ea42bb675da7b668n => B + 0x52578b5a49814b3afc9028e43d895dbe49aa9b6947868da4304eb085a4756e6dn => C + 0x76fd6deb2f0437cfdd30a13945c965f952a01a282c48a2f3e65cb5f087de8a96n => D + 0x7a31095ec5c63eb3a427cfd62201c8d1f240fd1b3fa1a43baf483529adaa9a19n => E + 0x3adffad31e320d6ec9e34f5376f1134e699f25a6cfee9b88e2b2d6037b6b204cn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x6ec1a966a1d833f574ad767e1ec38dd710b2ef6c5c54d63fdfce8ebed97f546en => A + 0xe4fb087d5ea36396e403ebb4fefdf20fd72776bbc7787425a9db8ed6e68f9b3cn => B + 0x26421ad29c839a2752349d4a23be224a19b6bcd24a20b6f504875c9f1020fcden => C + 0x20f283523d0a288638e7d0fa908d0f2ac7b2945e1b33233a6e4f2a43026b652dn => D + 0x7928e4114cd7620d61cdd3753e87258385af3f3afbcc4d57ee969c82af5af505n => E + 0xd6fa777fde26925aa3bd6d1fece2c631abe14b1bac2185bc2efcec8d44061199n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x43a52607f1a8277bdf84c3b7a09f12a3895e46fbc3311c4fdf2ed7dc562da381n => A + 0x0c4ec752b7a78146cb337a6632cbe2a9f003f6d5377928037b656d2245acbf1an => B + 0x3434bc8b2066c29eac6c5ef7f0c5efffdb8e62f2fb5d2a29485790f88ebbf522n => C + 0xaca392110097f7dd0baa0f1c9149b2cf2f5433d9d5bd92ff905f9483c44a8fcdn => D + 0x492b6a61d4823430d5aff675b9eb1fb1da5dceff6bed6c6f1174033ee7b6741fn => E + 0x1180da28d1a23246ecf7607ec3686ed95fbc95f9a10f1227b4d7e9f072320850n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xee268c9d8b43a979e5d88546c1be09eedcc8029870e0a32f227a14b66c58c84en => A + 0x4e867e52d8ed59965bc39f236f036cc54c8bfcfcabe28acaa47f95a44d882f8bn => B + 0x88ae48d2e19c13739212245322da74e318a280334a77c5fe2eb9915af13225b2n => C + 0x841c1c47c19e9b01940bdf998b796c9afd554027055d500e8f1815fdffcf7b32n => D + 0xb2db4effdf5d3e919e92f7540f4d8948a99b113abccdcd3b3056f6c718fc2f21n => E + 0x6aeb3b8691b76983f5833de5f9734b1fc039464216f56f006999593dab9568d9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xeb99f9bc70ab105d9036ff7acd9dd147972fe50b79ad119cdea23d0fc80a5ee2n => A + 0xb7fe36c4eea5f744ea9ea1610cd963f51bdd393577b5e9168acd57ffc16b3b80n => B + 0xc2c90f41ae6e0f4116d9fdc53f0dfc711f54514e221f15d87b6470d558980ab5n => C + 0x23b86f13c9c1bd32176fe77082557ea71974e2c4e68834674ab9c5b1200afe34n => D + 0xa0133fbd7a35816363b7cab7633d549ea6b741ceb6af6d303a61f7deea61a51dn => E + 0x89514bd04b3c5c2437055aa279e8991d44df7fcebc4479b4e5d756d40d52334cn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x0616f49ab378fc4ebec4cec85e92e48f7391a58a3a7aa4954d971b20c9d357c2n => A + 0xede821be629fa8900cc4e56007fa29afca5e9c4cdb8ea42e5eeb870e8a5e2540n => B + 0x17f729408ac770a36674fb5fb2284f3f328f5135ba00fa85fc298e39187fbc31n => C + 0x6750f2d3ac11d48b81020a42e7e087960314ff10644eeea9247359e10125cfb4n => D + 0x7038996cd0ea19ef377b1996b55a77fb6de2afa87388b1caff0edefe36dee161n => E + 0xcdb4a56678f15f9196cd37a6b60f25101c0e957c00c672dbe9395c8a386a3026n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x37a61733e021bfb31652df11ea45d31847f16bb4ca9ada10f6d20adcea7730afn => A + 0x9865ca2b1d3552ca72f958864c1a42bbfca85ca9bb4b6dc2b4721f36b2765dc2n => B + 0x589c0662d7c847bf8f781ac88f625b8663cf8ca130f27ffaa0d832befe9bf494n => C + 0x5d9cb810ee10e8afdd0b4c74b360d8300ce9df134839bac2cbc0078cbd826d26n => D + 0x3e3c98fc232b64a174d3178a0c4c2180c4737fc3fd9529773bf0cae04e8a6373n => E + 0x65384d4aa8b2397779440ff68af39dec44b1819dfbc0205e30de81e49dcd0625n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xccf226892ad785a9e36004959c956325bfbd58572661bb03bb59d3b286db1a9fn => A + 0xcd5a8601ee3f77bf5835d1b507bbcc8bfb39322ac49ed32ea75b73f1703ded53n => B + 0xdaa3d7560c46ee4b2edf6f4b16f93fc844e01351c0de566f846831f7a38ba119n => C + 0x217d052119be5c55d4bb895bcd3d17f43fd7aacc4b390dbb58a8ad8729c79b1bn => D + 0xae9aefdaea9d48b1c9347091019843f365f0e7a8658f4019c06c4b4828dad77an => E + 0xa945a5bd4a7bf6247084cb602ab7f921cb83d5de5e0453e1cdf431526049a3den : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa3c19dcb8f71f66478da83af5fc68164e775fccf0a1970f5b17f83b476807282n => A + 0xc0a8beffe033e0177ef6cbfff60b3a4bf7b8edddd828b68557a6896a3258b223n => B + 0xf8f3a0a3d8fd20c4626f3abdcba32c926393c789c63bde21d68248a45207a721n => C + 0xce7302f1f49a570b78c2f468779079aa37e56cdfdbf29d9e3249ae604be29457n => D + 0x0ed8f321cc2ea32def93e5e54e64bf7119c97d0b0b87ebd34c0bc726ca7b9a08n => E + 0x913bb1272a33d6c845b77f267bc16d54d83e1821b4da636ed5142595116eb6b1n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xefb34cd3a3f520b78b835008b4900d9d5f0658d4a89d54aa29fa2576d0bf1285n => A + 0x6f7ca2d030f22c47b1c16ad7984322cc1720cb2aea4be2df15f4ff920e924de0n => B + 0x93d39ea990f66ae64f468cda7d8d8534928e81eaca93be828d14aa559c0c53a2n => C + 0xcd690f33f9abf576f7f438386bd07dec825a3f9537f7a9cbe6cfcb6bc10affc9n => D + 0xe829eadae37bb95089d5f52b0b7be69b9f21c38e51e3dec8c725536d16e7ea03n => E + 0x6df70d451f8ac974465ad97d7ab80c580556b95a6bcbecb0b06ecc4d1c6ba2a2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe6256326cdfec2b4f49058a6f27aae1e12b897bb0de03f566b9f3ed228f45da5n => A + 0x49336341e163494ac0187eb845b180505cc027d4f37854659e98809cc33e7d84n => B + 0xa6b50a444c411396d365ccc74f38ca7954d7cc909edc6bf1e9e674dddba16213n => C + 0xe9f9fae8f10c788979ca2579f04225b4cf068141cd0780dbdd7785289c34ec05n => D + 0x247f381a55833b413698e8b40a0ad2ae51e0a12ff376fc58be81afec31cbd3a2n => E + 0xcd3b03ec701bac86fccad40e315e59eebb33b18cd0b770cb2ba07c11b983a4b3n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc28a0d337cc81e22560f005e90580c18b8c3e555a40f80822c5a0d0a5cf8beabn => A + 0xcb19bb3833e26ef7f91c175b98411a2365209f1d1a4d789b49c52840a669991dn => B + 0x3bfdace9eb3abd8c35c41880333c2d20554eab5dd1c1788a525c5c1f10a61ec4n => C + 0xe83f665186196296dc6fb470a28b3247919da10b65a29e119a1683c9936fbbean => D + 0xff5372305c2ad4a0b3254f4ee6c4621b4bbe365605bb1f5c981cd689b84ef36dn => E + 0xe1766212e94ac2d5c68a9781f95310b39ab5d827310b447ac6a872eb015c64b9n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xdc8b7987b3bc86394b58d570654ad146082bd3e2eff6b954c4dc59e3d95f1505n => A + 0x6323c062c82b194b16428a738a50ce8d97b5aba8065e681b588a3bf6ca7b057an => B + 0xc6045e59bf4810e3dae1da8a5be3c494efb8280cfef06393d3691863589e70bcn => C + 0x50527f66854209ffefac3aa4f51694b0e4d11d00511249f43fbb3146adc9f1b1n => D + 0x235e599b0b4d18906ae4e3b56d749180b905460afa1777697299046222db1e2cn => E + 0x42cb0291f9a0925e0b8c3960ce36da35a06ab001cfd0e5784a357100c2227f19n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xdc28f4a04974d2e9f07dc348a678cdbc2bbbe6d66beb4889494c063b41d23b97n => A + 0x5ce96c6be7847d6abbba4972d71f3711bfdd3a31a5bca3992b8a523232c2fb67n => B + 0x70be33eb6740f1eb5ffd17c493e4b22932fb4dcf55d571b992817d3e1be9a017n => C + 0x07e98731b2c7cc88ed10ad966c19754c532055057da628101c44eee69b7f5e8fn => D + 0x526998fce8179ea49d3f0f530bbbfca9d507c4caef3a5333bbaf8de3a247aea2n => E + 0xf20f50d54211456e8836180ae780f1aefbb839e6b1b232c747635f0f8f40c88an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x1c80a81804caca8ed9d79d473b5bd0e33b48957af0465b93c40c540b1ed3b759n => A + 0x9bcd44b51ca05e05888a9cd1de5c723408d9ec3ab74113a362696f0f906a142bn => B + 0xb4e0289098145d78c8a5011c1896e9ed79601e0b12edc5fb34ffa285b849c7acn => C + 0x438ce1faa92b93d9e352231cfe18990ee2f7d84688e70d10e7937cb82bc24d4an => D + 0x30bfcbc8b46e2b3a49fff1ae97bd1752e7f6ff72c9ffa033c7de8201c3696e6bn => E + 0x1b74ece3b9f6dc0347e13b9a2e775ac9a7f6c614c541692e45091dad80189a57n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x16437e7a1826d62da03254d29731a35f7f59a4d1be82975f0cbbafa240590491n => A + 0x543339bec6ddba086265c830012785ef8ec6dbbfebf7319e180c20bd484cf519n => B + 0xe983bbcdb2b88961bdcc1336c9f30f10bac796e522132933913dbe4f40161dedn => C + 0x7b40d4bb046f7b602f538db0a6c1a550c19d44a0c7a428cae3336cae561ad459n => D + 0x8c5252caf5a5d74416603b6e535d0f0b2d8a8188f6fbd5add78d41aa51f017b1n => E + 0x957a20bd43fd606fff4e552d2b69b2e46b27b8ada92fa1ceb6407e16729651f1n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x4f4eefba0c03623f9a8ac701eaf6e8d8e389467ac106807c2e748849f30eb047n => A + 0x89a5b2316f24d310670dadfeec9620dbb81a04ecf18e042ea9a077f1b3897cd4n => B + 0x574c3868bb0eb76f3be255cec25f71173f9e3c86b43656f37a51aeb252fc61f7n => C + 0xd96efde3e4ea0fd4971ba6079a027e1cc9230ee15ae5f1e9df834283ab71fb01n => D + 0x7b01ee1a5c126b5ee56ae9f545eadae31dc5f17d27ada8f44d03fcbf599f9a64n => E + 0x678b87764fc28e7987137380871ef703e8e33c050e68536b103f4a9a7bcb0d76n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc18af02276d33926bb6e65bbb8f851c2bb304fdd4139c157aa4211559ce96a3dn => A + 0xc5662c278961a32ea4765df8300dd8e038ef5420c432ccb311e9d87bc34672f3n => B + 0xdc3339b3df6e9d6b1ee75ca007878a52ff7d84b7ef47313dd772a0b63754650en => C + 0xa37418d87b19fa02427fe916e86d694e289937141b8515b65bff5554695f04bbn => D + 0x2a68b86ff1cad77c76a739b1720015fe21dc794e884b1eb0cb540fe21f5013abn => E + 0x3de9929115b1c6e0d490acd84e1866a59b6cb6494ec8d86e036237930b47bff3n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x57d0b8f1b5e793feacc68dee7b2a984dbc69d33cc8f1785455b6a0ec1d550374n => A + 0x6eaf428154f4cd4b09803cddd496993a95e163242904f798fe2e8935bd732aaan => B + 0x2ff6bbcd3dd14edb8b6f226ec217b117a2a142a0a1ae5427a39c893b07f468cfn => C + 0x98f3205f6f54642d34e4c50e116fd16457e9d9aacc0d74b85e7f00d3b2d1294bn => D + 0x3f7ce4eab4841227e494fa3c2dc4d7f9bbddcce4b956b4abc394f25016a33ea0n => E + 0xd2ae98c6c62d0adb8bea57336357ecb1d7c15abed63aeb599d41f98e63589d68n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xa778fe2ee1159418a6381d6a2f3c0dac30c574f4183a4e1e370ee433d1cdfbden => A + 0x87774e9b14de6d30462ad3d0389910d5f9168774beab05eeedecf17f224ce86en => B + 0x4c686d6206af91389834f6b2cfaaa06cfd250772f30ae5e7bf1fe35ff816e55bn => C + 0x53388cf5bbb9581f613a5868e66985e81a77c2f3db3ff76a3f0a506e896db90cn => D + 0x6d87ca93b6012e4db7b70a1b33aecab8dd1bf2dbffb482fb8e167fbf2ba0a285n => E + 0x59578386bb06c0a3ebe33adc394856d25bc725ca55253fb9c67fb2378b5e3a59n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x3066438b1f003f323c9bc2709a01f12e3efff529b3ddcb06edf9dee244d69e6en => A + 0xf809336041d2539105a68a9e0dd70f1a77b7fff6495dea9958a0929e7f5b9d10n => B + 0xecdf5a39eb35603bbc0831c76e58fd33225f68744fe93f448c40840067e4bed1n => C + 0xc32d0712aaa9e5dfe8eb8e01ec6abde1a8ec5d2f9ec78ddab43be01e2d234162n => D + 0x22f0d84018dd07697ecd72cae82c124bb095d8baf753670add597aa2263090b4n => E + 0x3e7f300c2c8997fb92ee9950517047bb25a56ec55edab8d041ff3c4fae26331en : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xeebab5b0b632ece0d0dece36a43ece5cac95e9a2dd4a63a1d41fd9798f3a8bdcn => A + 0xead5b3776194b91cd451c18bc69aa3b92c55bf6d2f9dff439ab59aa36473ed0an => B + 0xc7f673dadcffc5f8f50e9e3e0c09842b7c8210e10cbab093f4b377fc4ab11940n => C + 0x31a5e21bbb0874c63ab986baea93788249991a39550e9fede09ba65db41161c0n => D + 0x5f19905897521e15681ced7c15aa7cf94d2e6345e322d9bc45bb5ace9e18976fn => E + 0xf32c3a78cb0bfa36f8758a20703721c56c151af3ae08598ef5dfb77124affc10n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x999a76415b016f0736d21189623d68f632a8baf3070ef8a3f1c9fe1ca0b07a57n => A + 0x55aa4bdebc26e017307f1bc88dc1b678b22ba261823a4bfc7ef712f6a03163den => B + 0x55332168e8e885331584c1dc91975429211fb454e6c5400e12b9dfa63f2e2d37n => C + 0x40dd82257a0f5921971bb102b12fdc998972d6e4b0b7d678d1a6ffe0d41c6a37n => D + 0x0ea4568a0da61ac874e294348f038fb195045d6c346a40907408171cddfd5f89n => E + 0xb4f2090e22a678c3ca9b4c51f36cbc1690d97994397b28c8aed43cc367c0649bn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x64f949083f7a634deee630f0910549c78469047147a27a35a15a498324e5d7b5n => A + 0x81089578109f4779f25b6f81fabf34ba68fde8ad40f54e46b159cb056de5f575n => B + 0x902646f4f35db74f9333076cab09f0e851a9ac09003d15e65d03fe38560ace19n => C + 0x6d5998c8f53b815b55fb1bfe7fa24cb0b6a3148a5b32c9d92d7c8c3c19fb8e37n => D + 0x5f4fe8361d984d53e094a6304a5aa2eb67d1c4c21b456eb7c866cdba10e24142n => E + 0x21d12f0bb089a236f6d70a86e5e00e0b8f127be50eb168550d99b2a8453cd5e6n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x3a24416b465dd724eb21b0fff751c47732fb17d88098ed39b1c3100c8f47c63fn => A + 0x4763ce5666d4ffa6b753a7e43e78ccc886b9ba03faf6dc18fc529a64ddb66962n => B + 0xc479c1f3f8174a87c685c0794856e1d12116e8be7ffdc90dc9a67f83c8fe08b5n => C + 0x39d338f638c33c03563cce129e3f14376901d82e4bd2d3bb32557e7c31961724n => D + 0xee10df30e3797ee554b1bce2e1edd7771f88b98233dc5da3b4b7c6539e3c9224n => E + 0x2396c995b29fc8ab62d3ec6b33b5fd5d7368aab0a327e2ec1b935c877b78c09cn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x98cb3c089d60923a26b0f50e9fd5fe880a81990f9acc2407b50aff9cc52cc184n => A + 0x46d6b82b17c983566487481e3a6cf55d6ac0dfa5df6f352337a184d6c745f26an => B + 0xf262de2bbda50381f247f4877f88a0fac57764dec18ef7ac4707e7b99bed4534n => C + 0x9fd10341ac68a388c91b8da3dbcd06dfe33da06c07df2072eb32876d922aff58n => D + 0x572b8ebb243816c7b528be21b20508c992dcb32f5e63d6b383c7c975cd289455n => E + 0xecfc0a47c116abeddab66b0ae0072b991a58720421069a753a6a71d303a52528n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xef6dfbe57742c918c018c25cdee3e0e312c435dc46930259a47b84463ce5ea93n => A + 0x771f8d94c1af25bb8b83ec0b42fc6046ec882171d8b4af62521e35c43f616616n => B + 0x111c140e3bdabb3dc5f695e721649ce5dfc0568bd6c084087835f444fe65ca70n => C + 0x5a0aae0114c3754fc940b9a094523b6a8deea329207f5887204d9ff758243bd8n => D + 0xa6fca48e2b5ba1f2bf5b5fe0c891ac7de8cfb92ea64522b180e0aaf0b4c92fdbn => E + 0xba291481989eada576381963a8bebc960dde1ce902b3cae4492805ae0c506236n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9c711c973854fc283cba9a430059c07250280b480044879f18450ac08c68a29cn => A + 0x81a457a6000acf79d61e30d490de82cae8ccecd64d2a7bd4f4e21fa53ca6ea38n => B + 0x14dde229280fc9a49dae4de4c2df432d659767b04f859e4a166552f1cce1f2b0n => C + 0xcfd89dc1c438c502214aa272f35303a835b6ff8ed66b7808b9e3e772a6bfdf9cn => D + 0xfd0d8710c0ab571c97d6d4b041e5bf39a718a3a2c7e365a02c50eaf40d2cb811n => E + 0x1ab81254a6e63da8bd9abc4d67c46fc5fa0df32d420eda736cd47db6080eafa7n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xdd1feeb08a9e51b39970c07eb3a4b189156ccd922dd911361a85d3756f95b7d8n => A + 0x2dff7cc30d7a4fdda0cceb0371cd83e9c1daaaed6c537ba8e7001e4e8973e5acn => B + 0xc9d5314cd63526b1db5194906c04ce13479db62cccaba06ef155960dcaf46113n => C + 0x5189076167ed579c4ced32c2191a70b6c4b5c9c23b9c773b5cd24c94baabba7an => D + 0xaeb3c1d5a6fa2fb7aca7ec54d6cd1ff9b83179383a985da4eb31bc2e86d7b35en => E + 0x178623792ab72a76e95e9cc86b07588f409ee2cdd38f9e6506c5ba1b7c1d0ecdn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x0fa56cd5640be2ffb1c1780e6e32fd7d10cddf814fce972a6eb6bd549064885fn => A + 0x312956fc8a255ec6e4eec21724a107342cd3ce7ae4f4f6f429d8d1eee5fdde8en => B + 0x7b88204016b33a09de8da28de44dce042e4000744a935216f814c4060f990729n => C + 0x81865ad10e57b3ad0354c52fd381c5df35c275891a8c33928de5552f8d65ec10n => D + 0x8f6d18e6745100fbb8ccefbebf287034482df9bca070ee46876d2dc1eb52c08en => E + 0x4c05e81d86a43d556751f7883f3bf9e6e2bfb468a563a1e7489f6eb65062af4an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb7a110e5fa1c6855cd2ea55cb3797c0cf1195bc9bd65bf164c1390923b4d6ab5n => A + 0x9077c2aeb9ab015c9ed5f3ddf087aafcec69399baf26f81bfc26a37e3d8ee05an => B + 0xc636b0c96afe052ad962abaa41c3b25fec0219e76134893d4324eea471f8c9a4n => C + 0x62a41b4cef05ba89e7ea1e71174c9cb0fa438f6adab6393af168c3abf35ac805n => D + 0xdc274ca4e1f878c64ecba6eddc5beb4624d2a3d129267ed4806d6ed85d617935n => E + 0xf080c57dcfd36bf2a22aeea0fc753a07c73fe02f62431f1c78a2bfe117976082n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x888a38fbf3972f8610ae71246ad97176870cf578ecc0ee1cd464557a0c89bad4n => A + 0xd80780a4543fc4a9fd3c09092b791df5b5aac12ab242d360a162ac08fda45551n => B + 0x3f931b3106db5c6ceca94709fd3b8ac3c128250caf38aa22ac6d604743316b4an => C + 0x7282d0b74aaddd4faad7e1faeea4131033f30ef39eb5427cdcff8e98bb94d3b4n => D + 0xda7b8fe58f64a7bfea3965076cf681c67e0ccc480851219a9df45cc2cac1883bn => E + 0xa8c8a20ea5a45c83039c321ecd803fea2f9cbddb28677f4bd18963093d3dc9a2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xdaa0ff7fede56285728364f045f5ad8d53eaddb5db54b7b1d113c73f9045c791n => A + 0x4488200587d477ffb92e40a6e313b94b3a28cce6edb177c19ec0f35e85469c20n => B + 0x31532e1ee7a021a4142f5d7bcf94a83cd05412728127dbd8f1d68bd9cd82e25fn => C + 0x01bc17eb335cf92332b6dad171d23e99938c96946b9da8220cc3ce5bda2e77f5n => D + 0xe5176ec87708e587a57015a7a5fb459065bbf9241d882a50505292ede6ff5932n => E + 0xfe6371b7695e8e700a3b94217e414c63bd6bd7d0f3b8090c6dab0c763ddee829n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xcda55ffe9d57eee8288de2a671b4721d6bafa830b10785f425c172742e2b6ad0n => A + 0x87ef3c102bf4dbb3b4871c739612c574cffa73cae0c4d55c8d138f139dfbe526n => B + 0xaed6df287da2fb7c5c723d5ed2d76e7cc8e64645cad6f5da3268b0a18ff4db46n => C + 0x0dfe82cf90132ddff7b074c2a18b103b9645a139bb0bc24910365436688af95cn => D + 0x481a30eb14a080105cd39904b3b48e8c025995b23b438ee2b56132f26081480bn => E + 0x4f3dcac807a813b14718d32d6b90683574a57a7f86d873d8a469df99bc403343n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb829e717b085b64c41b901fbfa536fbbe8db83ce333da2a5f60e06b5c6161150n => A + 0x0304c99b864089724dcfed6a54e4323724a15d04e8c263ee7726607ed794082an => B + 0x033e8cc4326720023c93723434bcbe266027cd59fc598dd6a19e3bcaa79a5fa4n => C + 0x61cab870a2ddc1cb54ca8486c6ff9d9ce24fbac4a175b22f71b54dbed96553c3n => D + 0xcde37230068575b05d17587913318df7d06938416b2bbb1ad2d3d943f0906c62n => E + 0x6476387b80eae4dd8239bd33c56a2c87cdd1327137be360aa5bfe716feae44cbn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x65f312e675197f2b069de77240ce7c191bb0deb422edc40a011936eba8d947e3n => A + 0x4fb523c0b263b2402f614f641f46596a74b9433d388da49d66fbe8967078666fn => B + 0x180d2b5398d73234f088f17723bd7e14a528ef26fa9531c764858ef5f78cc69an => C + 0xb5b9534c2591bc30b3f3e5b2acdbf0c055480de251e32f344f1e7cad161525e1n => D + 0x14ea206d2f9abc4f93e4c36c5002058b4e985162a9a4a62dd20ce9914ec9d39en => E + 0xeed769e038187560a3446bed986c476b0e31c998ac8012fc55f4b3246d707fcbn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xec1dd8939038fcfb7073674e8e7bfda536496626e895b4311f16509445608c91n => A + 0xa3c6dba872b3be04be5d43338e0b78dff357914993456458a6f141589cec3bb4n => B + 0xaf5dab0700d52e6822b698ce413f403c1e8e93bb54db05eb6372b6d36b53e4bfn => C + 0x8416bcd95fdd2abdb502f136edefa9b39d71638dcf01ee6d9be3a5feedb14959n => D + 0x45a38d6e2de255fa912de0c19c3272c2c9953f989108b76b2fdfa33c827d2b46n => E + 0x509b61dcc2fcbc83f176bc234b422baf5f88cf5bb5d83b5828659a65a044a3c6n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x012e81f8a92d69ad981b68d7ee4f664857a13c7d887c1e15f9a8e945a7e5516en => A + 0xdbeadc66b9ff472405562a994f97dd80917f24b1bef24c10b3fccaee06f47513n => B + 0x1fe8062b89175a1b103aa4266684f0b52c98c9ea94d20a8ed3448fc4c7c8eec6n => C + 0x0a54baff3e8f41ef7256805d1978f13ec2052e9c897d22ad64125880f98246e4n => D + 0x8a5067711341613224600f65ccf85085628fecd66e58abb359a1c57b99aa6845n => E + 0x72c2408f9d0b7469a32e8ca962944b13f40ddba546746fe2c8b45e7339dd709an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xbf0fe6ae903d5fcbbb06d8ba8d39a4fddd55a42d926202ad8e6d99f490ddd34en => A + 0xfd13af19424ebfa21bfacd2d347ce6199e8d409bf80e871a76412fd57dee2ce6n => B + 0xe429805de2e98473cbd7f7b2f2e6430091c672043395738bbf0f5439637429c0n => C + 0x2138a19f54343474d440f335d1056e1c59e48aa684201ef8c0c10cc438ae1cb7n => D + 0xc4aec161fa5221c4c390cc98e8be1f528663fbf36fa23d2d8d2c389d7b3ad5c2n => E + 0x0513e468f309dce12863056fd4a5bb47d611785e2a5ee43ab6bb8790cc108b3dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc6aece9de12270568c5a9e2cad96804d7c0d8d83fc4e8cf1d9c8c239a6783ddan => A + 0xde58dd3dd01116e9eddeca39e049f2904c0fd10c8dc03ad8e22ec7673a24af1bn => B + 0xe16e4789576b9f160ddbdb849fc9f58dd88ea4b698ced319048caf0e0d26d5c7n => C + 0xcdadd2425a68e72d087a3031eb82ca3ae2cb5d781953700b6ce07cee4f19ec54n => D + 0xaede511066d4b6eafeeccb1dc5b6682f6b9299daeb469f2ec7a556dd2b780a6en => E + 0xee6fe76255209f159a51b5fed8852f5c6b4116c6f4f52d70e8d07792f2dfd6d2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd364ea37e268e50483f6062f707440f06336ce447cc9ef21d116fe448c8a36a5n => A + 0xf81a902fc47d34862a866d10b9796d1134435ca84f234c9563c697c91d08171dn => B + 0x7aefd64d6f0699f8cca5f9e7aabaa397498f0680c19b3816ae7f968a53291cdbn => C + 0xd2ffb826fc9728805c7d54053bc7c9e60c3a74143c5215a4b7c716de5a838d63n => D + 0x6d8e4758e7cd457cc7aed14c292f653fbc536076d128c43dafafe58a8a733c39n => E + 0xce219a831e70428dd349da4e2adf04a7020179e851a716d455e6c671c563701en : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xcadd5fbaa46120e4c5248fd701d80913ab1105d300d7e366b860ddfbd83b3886n => A + 0xa161d5fb75132231d3e2de7668a90a1b89b5a8e4ae2f1857f3ef1d744314955bn => B + 0x532cbab927916f5cbf8a1fbcba8b7edddf84fa9039abbc97a5b9b50e6e1b306en => C + 0x4f4e2d686814f7bc7cfcafb4097e825ee4e58b8804a3eeb754fc7f657ce4eddan => D + 0x14da1cb080d97179636255e8746fc902dbf7498ddc6d9a9932aa936582d705d3n => E + 0x6a8e4db55e5811439dc45c80de410f2fc041f349ddbcf0f9ae4d94bdbd0963a1n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x1fad973796956a3bc645c4961f4bb97671b5a398841d4a47e2cd66242010ca10n => A + 0xefef971e59877c2cb89f6bbb7c45b0ae571154e20424d8f9fd465572de3713d0n => B + 0xc15e886dcac7acf7772009879e9f98c78bd34b10d88fbf504ac16443b36a5b67n => C + 0xaa4ffa75f2667a3dc6231d0d03c559e4eba35669ca2cd8581df11ba8735cab24n => D + 0x36902a71de1a94bb91ea2300d429310a07133a28d7f6ad7f2bdc606cc3f4611an => E + 0x3c88e12b99b8cbaa7eeb53390d56f7a34966fa81816de1d862be5e62c7ee571fn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x963e93c0868afde2e18aa259d7fb5220665b574c1fb280a5d4c5077666838925n => A + 0xeb01ad2918df1abf8b18e3ea4fe74c6ec39e8eafb0303e65b9b63feb6d4ada24n => B + 0x24045a6fb7c8ce51c54d81f09ea92e6d6bac67bb25e344705b05c6233945fa24n => C + 0x635b971679234d387a3c15b54312ce956c20cd97418a744eab3ce764248c52c4n => D + 0xc2216b6333f3d100c8c5757155ba1b89908f27d47a03c7b4b0398cb591c0571fn => E + 0xde15e59e773cc09406f28beeb9b041e4f41b3364e106edc9e384a527b9ef5c6en : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd346f0d4ca88637ce60bfcb5999bf26ddd9a4174a52dec13558d6bd7cb978e14n => A + 0x508da77a55e12c9d36fb5e268adbcd908d3ec5b652e354f07c470fc79e0f5941n => B + 0x22094411cd34a8629831c123dbd9d79bbff26adc72e2f7fcea296156f4487269n => C + 0xef046ad3ad84d4f88c63967066759a0af6fa9592c7e91a00fc005c3216933c8en => D + 0xe28ffbe7b2de4360dd629a4a651a2e483768fee00b5240110271cb00ff4248f0n => E + 0x69707605309eab21c942941c78b002deec577a33924f57a4ea0ac134e404b224n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x16a521b5160abee559c42786e32434425ea6b590c4dea1816b9684665fecaf4cn => A + 0x88dffd058ef1b1e3379b0c61fd67c2c5f25b762a3f670ab7f2d2c94b56923ff3n => B + 0x1c46867bd389bb9a8a124ed8950cd1e891d35849e237a6be7fdf13c58b7fa485n => C + 0x0354cb0e9e5213f9a80d605f668bb8105c6685e6cdae10f22aedd16c8a0fb07en => D + 0xd351e8d02803e2137895f892faa0a276295cebed67b4d9934c45f042849433fan => E + 0x79e9cc1d7b200375284beb52c945dc2181dfb4e6070a8d74cf7f2eaac230ee0fn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x82cfb4f5027f60164fa03aa0b393c226608842b672eed9bc5d93a8cbf35d76e2n => A + 0x10271e1135c8c0bf828b63edc7b4fe2a35d86c6938389a2b6fc69439bee48f11n => B + 0x373d05e6b84654fb4939d919ce2e395c489b32f3a3882f2d66dc10b716e5db2an => C + 0xe215ce4e1ac1455f14616d6ecfad58d3867e520f732bb137291211e4303ab130n => D + 0xed71fe4f827d663371c7abd5aa66e45dddfbc73d47c70d95da23212e44e633acn => E + 0xad5c4832944d05252ba0032fe8b958b9f6a98d927612783bcd7c716cd6bfc388n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8fb3ef8867a711675fea3a6471d86576e932c5ee3ef9399fa710a5838284ff8dn => A + 0x7e954acb367c36f64a82315d650263559f7812a211e84c6d323f8622bd85e18dn => B + 0xf68e4b06f3d5afdfebf590485b6f70cc79231ce542aa3dfd6d6de5419006d573n => C + 0x399cc9b0cefff1ea68f2b61f03278e665937dc96dcb3dbf4db256448835821e7n => D + 0x3a8e2764528724fb10fd03fdb65b3084ff9f8c2e9f14ff0ec0acbeadf1652809n => E + 0xc097966a917e829fcea4ed87110b6b6881caf82e041ec181e4c8085e312c800dn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc0c10e927b4a8c66bda0b454e50973a28e6b3cb0786d057bf0ec7998a33e313cn => A + 0xd1b143404c44801b0b72966580b32cebced707765dda991c17095cb22adac36an => B + 0x02322c4b027ed7a1bee6afbf1c28f8d404b5fef48a9e139a0bc0a758ecebeb7an => C + 0xcd9934a0982f38f7963eaf5082198e8dd02b566dcb57bcfc7ea3166f467f2f28n => D + 0xecd0dc1c2f0a11aa2d43e1b5255eae74d6d5009a47481c4bd68ab208f2fa1b64n => E + 0x6de11138d85a2184f57bbef1a5564b4bbea5a9e0d4eb6176858fb2cfa984da04n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xf59b244244e56832d3dfb06519eab72a3fc8013c07da107755fdd2a915484cdcn => A + 0x08f6d3e79a5ba623dbe841a5607f19ca418e913e90f57ee4899041ac12a544fan => B + 0x85a5fc8eef2e08f1740f40d60c805d5a7c5a6354c1c37438424935350fc9e8cbn => C + 0x344dabcd8a9444a120df4581330e064b3b675d21dcac50573d79f6da14130fedn => D + 0xe26df2cf426591e95ade95dcfa80eaea969c1e6f15a5bace2bed761dd15e6934n => E + 0xf067dd9ab895da4a20956a58a3a08369fba15e162d19ba82ec40ebc968140485n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xe57ebeb241980a24f854a9537ecf7f10cc755270d4a6278ffbfe14f1828aeec4n => A + 0x0fc55a11b50b61f8a7572f5a5de2d7d5e12d21b54d2750b305ea89d565dcf40bn => B + 0x7b8062f68894e6debbea17d24b5cac1f0dbf45a9c150969a5aefaea844856793n => C + 0x15d77c473fe8637359efa4026fc8273234ef5455f287577162ecfec59a238313n => D + 0xb283ef6c34892435d46d934100adb59508227cd917c657b784088bcadfd6ec34n => E + 0xa708f3a4a47aef0948431e3e184f0d0160cd587f17855e1639803579f8b8bcc0n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb49df96c9932678be9e1e87a099639b8ed60fbeed82ab06058ef10cbc5f8722cn => A + 0xf33275809c8b8a49603bbea546546fcfb8b16e38b7efc8f61f7f57d23cb700d3n => B + 0xb348cb2d402ed3b014ff760787764ed203676836996d320cc8928418d72190d4n => C + 0xf92e203a12d06eb17d862be8cfd06d25967b2f3fe76e28b797e98f030e9eeedcn => D + 0x3987ab1d26a8f39ef07bd8028c3bcf042a38d7ff28b980700214054b6d8b82efn => E + 0xfd0ab62a43385a7d7f9abe91e12d8bd099289e3231645885665cc4bcd601ef42n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9d4b05ab227924ac5d889d181ad77a379c162efa8f6009363c4b86fb6dc672afn => A + 0x3881ab3cf49f41307f842f65c84743cc40e3e04dbc4d8ec967e119efd9fd3560n => B + 0xa70301b2ca5c9db02d3a3eae39fef485d5437493bc94056db1484d78db595079n => C + 0x1f72deef2390892bb8585b92bf41092873b50911c4499f994257e1b30df368ccn => D + 0x42a401fee88f9a75248057a1c941841b09c8501a108ab741d344ea3174b3f23bn => E + 0x0c0554aaf71908fd937644c05e8ac00048a0eb454fe5987de548976ba75315d6n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xba1c1a4d31dc16e80cfdc038d426c1b3be6c73328f57cd58f0e62fefdc8c7229n => A + 0x0aed3ea3a710a8a9cbe5c24d485a3a9bde36be1e82fcd2c7c45d4cadd88e4dean => B + 0xbf305730f199cc34525b5af5320e09886db4fea54335e7c0edce0810a5056f38n => C + 0x91ef5e1fc81a5ac252c8513d56b87e979dd89f04f541593e5aaafafb690e0fd3n => D + 0x60827d16addab656f5e81bc513c1e8d587f8ac84699f230201f09ac7ba787396n => E + 0x45428925d007696ced81e1eff96228dde05ae1876ae5a557ea0ebbcdd44c20fcn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x8f612f51952fe16faf5a47b5e1a951251545171fc41e87558a382078aa2a6cb7n => A + 0x2c95d52e7255048fabd0e7a7450a4190cdb11624393bbb6d1a10d4196beda3e3n => B + 0xd2321488c0e099aaa4ed94613268716fe2b8da0725b9f6c6ff6f64c93d91ce85n => C + 0x1c66497f6b0e2a016c5546475b7cbb9853a012756f3a5e1a4ee0dc7d54d2f68en => D + 0x655072d7de16b443741bf57c192f0a360805e2bc178112d058724cdc95d96374n => E + 0x78343b2c099939266f9cce759f6d5f215ed50f008c9106dae95b3fe88bdd98fbn : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9547db010dd7a56f0cde51fc0001d3c488435bac18e6745f6aa997051ed77a1en => A + 0xc98473a144c685d236e94a0575abd7191a05a88baed6b6e2bd14601562d0639bn => B + 0xb06a54381df27944615d558cce75ce211f093341e7138249a742157052aa6215n => C + 0xb3171b6d2e4c4320a34bc5dc76140c887f00bfe0e94ec687e6bdd98c8ff0684en => D + 0xcf9dffcb3454ded936536ecc14eec385798b7fef251b285f2ba684a669309939n => E + 0xa33354d0cb639296bbca0860d67b0628d4691f01e97aaf19f2871506e62844b2n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x5935cfb3d9e4a541efefe69820055d63e590fff3ac2b473817d2ec905434a4b5n => A + 0xb00290fc8fa51329cef2e7243b6d64b8a315deed1a4895bf3d939e382c296c18n => B + 0x3c3a6ad63b80646ea935333051bfd90997679ca54fb75dcab5251b26667257b6n => C + 0x13282deda6a3f9a8537f4d6a6181380e2e4fc6f1d9d73639b38cb4241dc430een => D + 0x100f526dcaeca355bdcaed415cd2657230d81a460065387b4f7c8c2740514f80n => E + 0x6653117662ae397b5f632e3d8f35817fa1fe53e7cc5ae2be67439be112a4e6den : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xef5271c87d9de118c7ce1def744ca804abb4968e7e8f72eb0e2a32b887d5a23an => A + 0x07db6a4e34dfacf7c683dde736c3d7c800e5b0fa2b8dc4da977d60c4647e0693n => B + 0x2a098b4b3a25983c16a0fe7f120c829c2af2c172aad49473f718624a0c5ac5e9n => C + 0x39302c2e523e5699698fc4d4993f25dd7ffa284d107bdda2708f44995963a695n => D + 0xfc4bf4a9ffd8b424ae308e8bbb1eacbfbd45fdc026191d238b1d9c8a445e0cbbn => E + 0xbe10cd4fb44571721482acad0fb3f43f966f916881b021100cc9b969a4ba3ef8n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x31a2af7e3546bc6a712778db2030deabe35abcf63507be26b880bd5b3bd9d5dbn => A + 0x3f71f4bf6e78f7c1858bbcedec3bba4b62baca01da8a07c4d386b8f5b1a5ca15n => B + 0xf7c81c3965cb0f05c35948ad5beb5333be35504b7b725278a611edc21577ffa7n => C + 0x64df09de64d4c1b74f77e882815c39bb127fcf9de8ccae36d4299f0b63563adcn => D + 0x5bda20ac712c393da9db9309495c67cefcba51cc9ce0beb092ad31a73dd2ca99n => E + 0x423f26f350eba5a73289ad0784b4faa5de81a4603b57ef411a4094364fe07bd5n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc3c3d53c682e000d7bf7f3c4d1bcca13bd362f7f3d80a461fc65360ae8a34ae0n => A + 0x0266a49ddf524a27969f44cf89358e927b41f1a0e39c6de6e5e0b9ac6f93f099n => B + 0xbb3a5e1055a64bff879b86a33d530c148371b771575ff6e6df117507315a713an => C + 0xcf1af61f1b195f0d497c3fce473e0fcf85c87e50c19abfbb03c38e160cc26656n => D + 0x04b318ca635a93a51c591d385811a9315a174f3f54c0aaa4a4f79c7b5fb07e7an => E + 0x1748f9f9cfd1e049d49d779fb6fec92eaed73e05ae44b97f24f209ebdd5efd1an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x6ff4d4ba4901f911e489f3730e9d9272b228bea04796aeaae932a74215c09232n => A + 0xc31872ca438252ede883a60553969d2beabc733eef72b79f531525421c5e4067n => B + 0xb3f9a3641c4260087bd0f4438d36e6d15883d859cc67465751f29ab687e83c41n => C + 0x30f2face7f7d76e36a4e2f3cf09b8d5d44afaaff7122f9ef68f3d13d5a1e0583n => D + 0x9fa79a63b6daf0f9b54a568a55c384071f3389e4bd0e312b0347dd0a39080167n => E + 0xe186610d246848894ea18acc14bbaf84911e3d2fbdc8039d12c23aa155f1cb3an : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xee7d88f81dd5a3f4d4678092b7366bc9f6925613caa70aa82b21e2c43ee186bbn => A + 0x99d4cbd43a003fbfaa25d2cd550963af597e9b935382496f6340134d50d67a81n => B + 0x4eb944c3113070c22372241e78ad96be662d7f9a53496b5340d78ffbce2bace1n => C + 0x3c6774985b993b2163c6ab56c5a0d75118aa679218facf11fe59115ddb7682c6n => D + 0xddb5e61f8621072881f834822a3508cb187b2d4bb67330290fc7fd3e4cb6b7ben => E + 0x5a0cacb5d1b92ac88e71b48809e84b96ff9cdd7de698b1446cdce57b53ff3c25n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xd4dea9ef87c1615a56454cd366163544dfcaa382b90f7f7e19f8528666072b3an => A + 0xd4ec856527d2f0e9c34b26f457001c292950419d4784d2f70934cd57dc9891d4n => B + 0x4f152a7a6218110d01cd9e4db9d0a603d47748dcedb55b1091f2343df515628dn => C + 0x1e28f8505374351c7ec764de60756c4a5d0ee90849198b5aa20e52d33a524b90n => D + 0xacf080803b4ae66ffd96ec703c7ba414f37be0b334a913437ef06e24c3d8f1efn => E + 0x139fbd89249763f9459480912f5a130744261a4e2b0c9ad9d5a233f5e0452505n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xb2811f162ee320d5d6797ca57b32bf8c59b2466fa54ae49f5c3a185bf4a3be9dn => A + 0x9a70649dd8190e7dfc852cd597afb9b9ee9a241cb67fa5b4105f5fa49b819eabn => B + 0x8e7c627ba906631dc87acf8c5589707efb0f977b16f0c26289c0571cbf895eacn => C + 0x38b881a300ae9658bb5b13ea6ac1b8d8b25d7456a3ed1126fb60fcaf2d55815cn => D + 0xed0c94d1622f965a5e93358870b08f9a9d1d60752906458cdfad248e6a0a479en => E + 0x7ba2f80bdf1c806d35347d435e219e1a3cb89ce3431e6bbe8766b047244e8df7n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + diff --git a/test/diagnostic/operations/arith/secp256r1_ecadd_same.zkasm b/test/diagnostic/operations/arith/secp256r1_ecadd_same.zkasm new file mode 100644 index 00000000..e8c6cbd7 --- /dev/null +++ b/test/diagnostic/operations/arith/secp256r1_ecadd_same.zkasm @@ -0,0 +1,11 @@ + :JMP(init_secp256r1_ecadd_same) + +REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK: + + ${xDblPointEc_secp256r1(A,B)} => E + ${yDblPointEc_secp256r1(A,B)} :ARITH_SECP256R1_ECADD_SAME + :RETURN + +init_secp256r1_ecadd_same: + +INCLUDE "secp256r1_ecadd_same_ops.zkasm" diff --git a/test/diagnostic/operations/arith/secp256r1_ecadd_same_ops.zkasm b/test/diagnostic/operations/arith/secp256r1_ecadd_same_ops.zkasm new file mode 100644 index 00000000..8ffdf217 --- /dev/null +++ b/test/diagnostic/operations/arith/secp256r1_ecadd_same_ops.zkasm @@ -0,0 +1,2500 @@ + 0x9b09703235204c5107fbfde0699bb9d99335a5d71fbcbf0d8ad05dfa7e95f809n => A + 0x739c8f31333aeed1fbcbd4312dd4a735ee7409071995b2b1457b21f343454d64n => B + 0x9b09703235204c5107fbfde0699bb9d99335a5d71fbcbf0d8ad05dfa7e95f809n => C + 0x739c8f31333aeed1fbcbd4312dd4a735ee7409071995b2b1457b21f343454d64n => D + 0xd340cf8faf00eb6dc57efe3434673941a3016a6cf070d0b8562fbd75a1931411n => E + 0xe41118cc49d7457b08dc63c505cb329d3623aa8d443050cd74606f348755df5cn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xfc6c194044b07efdd0abd9a9ae12f5506afa47381211f5b09ee0a371666afd6dn => A + 0x826d12e63bc33ab066a1991d0c2e08c5512a6312a9461815c49b3983f88ce45en => B + 0xfc6c194044b07efdd0abd9a9ae12f5506afa47381211f5b09ee0a371666afd6dn => C + 0x826d12e63bc33ab066a1991d0c2e08c5512a6312a9461815c49b3983f88ce45en => D + 0x3ace81f19275390017eb1d767cf0e284e26563a7073c661a8033309370ce8bf8n => E + 0x5a01eb286257703d7babc3b8f3b6e206b99735fb03eabcdb19c328da124775dbn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf374f93d33e90700da7b6e4ce21d222d3522ef70c031d03156146275d5264befn => A + 0x0c753a0e4d05ead857678cefd1c90fbdbbf3ff45ebb8d10f9120e7656f52b7adn => B + 0xf374f93d33e90700da7b6e4ce21d222d3522ef70c031d03156146275d5264befn => C + 0x0c753a0e4d05ead857678cefd1c90fbdbbf3ff45ebb8d10f9120e7656f52b7adn => D + 0x7f80e2e3b4eb2c082b06e283e74ea8b895b4f6f7db9a64c55ac274b0b344ddfcn => E + 0xa08aec378d16c8ea6c611780af280e66cb9332f4fb39b6888efedc1e3783cd52n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x4d63567e4a3e07501fc8ec9f2371cd7b2e5639c024ee58b2805528849cab02bfn => A + 0x5968318736518610940f1906b60b3d03caf2c5d5209b7f76077534653fc59c70n => B + 0x4d63567e4a3e07501fc8ec9f2371cd7b2e5639c024ee58b2805528849cab02bfn => C + 0x5968318736518610940f1906b60b3d03caf2c5d5209b7f76077534653fc59c70n => D + 0x6a135f30aea212838b7bcd0ea83eddf597774feb9bdef1099a6efa5129d9024fn => E + 0x027b9c534ff212cb0444b04188b2caa5b84e66c6c437257341dc6b06b49dde64n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x6d252ff4f92477294c9351f0d341e6c0e17f83c6eb0a21e44c46915a0164d1aan => A + 0xc41d129be1aef30da379566239af7a64e7735ef370f7d871a989def9c56043c1n => B + 0x6d252ff4f92477294c9351f0d341e6c0e17f83c6eb0a21e44c46915a0164d1aan => C + 0xc41d129be1aef30da379566239af7a64e7735ef370f7d871a989def9c56043c1n => D + 0xb8be7ceb51d2ec74c03dfb61dac77629313902a261b40ca3e83ae45e922ac5d9n => E + 0x9d0b1093998e1e62dda14d21e9c440f8b6bd13d006554101c52a6363fe07d0ebn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x717e74d5418df32aad432534e1d90f1731d63bd10e49eee3220d82ef4526863dn => A + 0xd58217dea6c4bff5820692183979826922efbbe5f9e888eda9df855ee706c14dn => B + 0x717e74d5418df32aad432534e1d90f1731d63bd10e49eee3220d82ef4526863dn => C + 0xd58217dea6c4bff5820692183979826922efbbe5f9e888eda9df855ee706c14dn => D + 0x43b55c1001714286ab89deee751beb011790a66943423e252a5d09d7450ce5bbn => E + 0xc6b80a8984cfaedb7d6d3f7860e490a2312c26d6cde5cd3af332f18c9764b5e4n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x7e0b2add1d3da41e951a8519720c2a21b09a0e75f25cdffaf3a3aa942be8b0ffn => A + 0x3b29ee302663d609672b53ff5d4e77e05a61100a6d175549d7a5f1abcf2530e8n => B + 0x7e0b2add1d3da41e951a8519720c2a21b09a0e75f25cdffaf3a3aa942be8b0ffn => C + 0x3b29ee302663d609672b53ff5d4e77e05a61100a6d175549d7a5f1abcf2530e8n => D + 0x93a401e4a9372374b166ab5c703444c4b23d39ec5f89b109a01bea62c6e3c7a2n => E + 0x7f134c0d4edffdfdf7b48e46fa04f05778c1e3d4d3b80de4fd00a0e46b40884dn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd4f7fc2d544cb457470ca2c5279621a328bb085226d4c1f13b219add2a34bddbn => A + 0xfe4114fb00ba4b3b931db10bbf85ad93010180cd0b99f97ca9cabc70769fc678n => B + 0xd4f7fc2d544cb457470ca2c5279621a328bb085226d4c1f13b219add2a34bddbn => C + 0xfe4114fb00ba4b3b931db10bbf85ad93010180cd0b99f97ca9cabc70769fc678n => D + 0xebb1bbf6af85f46d0dc4512b33d275e5cb65b02115bebf5123879a7626e2f15en => E + 0x9a591a08f48f41ff28673a42bf018197cd8e6eaf147a2ebe33343ab3ae17ec38n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf5acd4295a42de927b64cce32ab07f39a55b51e9b356fb41afb6135afade15d6n => A + 0x56f4121195043c328b2e62b44e8b5310a8533774378a969ddf72155becb5bed1n => B + 0xf5acd4295a42de927b64cce32ab07f39a55b51e9b356fb41afb6135afade15d6n => C + 0x56f4121195043c328b2e62b44e8b5310a8533774378a969ddf72155becb5bed1n => D + 0x56ef5b94799417954e5c143ea7909ef9eeb6afdada68f3dc8983f571dfcffa74n => E + 0x4007a4a016ab69aee7d22c5f88b2a12a211465f2077a0dd61946bec34b32b23en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa8b1329a729617bfa7dc5f0bcd5ddaca3f7bb90e2eef81da5f5c5b513557d05an => A + 0x69e5a8943d638ad759c19fd947c95c241e233300d7a78eba097fe22953621a8en => B + 0xa8b1329a729617bfa7dc5f0bcd5ddaca3f7bb90e2eef81da5f5c5b513557d05an => C + 0x69e5a8943d638ad759c19fd947c95c241e233300d7a78eba097fe22953621a8en => D + 0xa4d233eea959116de8c693bb87e256da2cfdf20718b01e518b5b6ba1c749a15bn => E + 0xee9e5f3304e24a630aa89be29ffd1075d4e0545fa5392078aa6fd26f608f35b7n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8a8f3a51c5c3cb6f24d38b7d2e154cf448db359ed9dc1ad09115264624da3539n => A + 0x749e8e4e713ed2cb79935ddfe0d479fd70b57ef2b4f0b7f544e0aaba80fe021cn => B + 0x8a8f3a51c5c3cb6f24d38b7d2e154cf448db359ed9dc1ad09115264624da3539n => C + 0x749e8e4e713ed2cb79935ddfe0d479fd70b57ef2b4f0b7f544e0aaba80fe021cn => D + 0x67621fc0ce4905b7701fcd3fe0ae3449b5c833480c60a1b96c744c771fea77ben => E + 0x3f066135c239058d4e0616e027887e0e4dbe85288ffbf3279fef33304f7b2353n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc3854902515ce1aeb4130f4eb5abdd32a146d7461e9af322e5fb354c849d3700n => A + 0xd09c53b0a5c6de33d0dbf78f6c41ed9b98fcd8bbd556d26b78d7e75648e3f485n => B + 0xc3854902515ce1aeb4130f4eb5abdd32a146d7461e9af322e5fb354c849d3700n => C + 0xd09c53b0a5c6de33d0dbf78f6c41ed9b98fcd8bbd556d26b78d7e75648e3f485n => D + 0x638f2dc659210f39a3d49b850a672dd2b16b63363c49aefc71832752ff87a9a6n => E + 0xea8f9b46e22cec8703fc94446d3cab6b603b7a82196840a0fc4da0645435290bn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x0022682cd1857495a2d8ae5fafa1f8160d1679fb1375c30a2b23370f8e852815n => A + 0x1770d71f219164c6a30813941ccf7cb8955998527bc2b40ebe7ba8dc60e0295bn => B + 0x0022682cd1857495a2d8ae5fafa1f8160d1679fb1375c30a2b23370f8e852815n => C + 0x1770d71f219164c6a30813941ccf7cb8955998527bc2b40ebe7ba8dc60e0295bn => D + 0x017b984603934dfc557347b22ba736d479b81b81ca45907a7f66573957e06127n => E + 0xe457a25b4120fedb81cdffb4b7d66d457f0204dea023ef63b2797f24be9d0046n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x46fd62327fcad87b30652190857f1553c43d1575897290d230db4ac0a6dfab61n => A + 0x5672a56495fb417b80ebc7bacae4119af7ae1871851f3e60a7830ae172e20cf0n => B + 0x46fd62327fcad87b30652190857f1553c43d1575897290d230db4ac0a6dfab61n => C + 0x5672a56495fb417b80ebc7bacae4119af7ae1871851f3e60a7830ae172e20cf0n => D + 0xc0d4b4a8b1d52c63a68564d34bc71a63fd20db60561e286cbc7a66ebabece08en => E + 0x78a02ebf68c8c376999995d5066bfd997124d6c094c4af7a39ec2ab67e8339b4n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x91e97aa7c9437d8d6d5acf4580303f7bcdb457708f7df0aa5c0eb42bbc011b50n => A + 0x6a71ed27da41cf7da10ab7fa42c87133f888d0704194889bdc747aac04cd41een => B + 0x91e97aa7c9437d8d6d5acf4580303f7bcdb457708f7df0aa5c0eb42bbc011b50n => C + 0x6a71ed27da41cf7da10ab7fa42c87133f888d0704194889bdc747aac04cd41een => D + 0x1a7a16a3f424372de169d055d9b860291dcb6b722b452c0b47db3b0fbfc898a5n => E + 0x6ec9617086d148363e0648b5a15165ed31fa7bcef935ffd5216417eb25a8dd2en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xdd97ab88aff2be4e453baea3246ba4423551f2b08273dcae2f622e89e5b38b28n => A + 0x9560a22d9480dfa7c8346c32548e4b24ad62b0200a501e2b148d10c41b62db1an => B + 0xdd97ab88aff2be4e453baea3246ba4423551f2b08273dcae2f622e89e5b38b28n => C + 0x9560a22d9480dfa7c8346c32548e4b24ad62b0200a501e2b148d10c41b62db1an => D + 0xbae0a054a02dd6ed7f44a238086c0aaeed412a7dcb56a95bc016e5ea6e7b487fn => E + 0xbb270264fbefee97f5e37d3a0fc84eb3fb59651f5b6052c74abfa447ca4544cbn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb132ee670568cc09692f20404db3c42b99cc22653e314ca43192628f32e073f4n => A + 0xddbd427d3dd0237813e58a630eab1adbf9ea7cd757509a21ba61ff3cb5f3ebd0n => B + 0xb132ee670568cc09692f20404db3c42b99cc22653e314ca43192628f32e073f4n => C + 0xddbd427d3dd0237813e58a630eab1adbf9ea7cd757509a21ba61ff3cb5f3ebd0n => D + 0x4302306c289d32cc35deaf375d2d5d3f6f1ae2072a0f5009cc5bb0d9f489fc7fn => E + 0x32dc90f708af6c3151b7e43ccad6a22fa7fe6f5199882e8a5beaf65ce923a676n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xaf3614a9186ea4734825822589b6693e7be623e9afc5819039a8c3dcd4343ba7n => A + 0x2dab2c8d12fbacf6bc923945c8559ced32e345da8df8128033a92c0f60695924n => B + 0xaf3614a9186ea4734825822589b6693e7be623e9afc5819039a8c3dcd4343ba7n => C + 0x2dab2c8d12fbacf6bc923945c8559ced32e345da8df8128033a92c0f60695924n => D + 0x3c52fda35e12b9bea9c50c56c6bbb2f8b6e167f684403a3b95caa28439d41198n => E + 0x584427f14b0a51b190239b4505ac2d395853d269990bc2cad948146ed983a2f1n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x5cf95d4bd8aee798dfb5aa524530103d6a275fdf1d0d08eddfb06f86e2924790n => A + 0xb89141c7cbfcf5bff38517f95ebfaf6089116cc5caa81bcdefa2bf73dcd8c409n => B + 0x5cf95d4bd8aee798dfb5aa524530103d6a275fdf1d0d08eddfb06f86e2924790n => C + 0xb89141c7cbfcf5bff38517f95ebfaf6089116cc5caa81bcdefa2bf73dcd8c409n => D + 0xf036fe3790298005b1c81e944bfd12a949633471961642a0d4905c5d4e9796c0n => E + 0x2fd6f4aeaf31a8d0dd6d54b14c67952d3817dc21f0029c461111cb1ebc7f06f2n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xfa4344f3fba1a8140f1add179f2f778715341421b5b8873e36ff5f785ba46154n => A + 0xeb54620dbafe25faf10d8e02e75ebdd826c396f620bba3a3cb3595bfed6ac447n => B + 0xfa4344f3fba1a8140f1add179f2f778715341421b5b8873e36ff5f785ba46154n => C + 0xeb54620dbafe25faf10d8e02e75ebdd826c396f620bba3a3cb3595bfed6ac447n => D + 0x77900956123ea58ea69157c119c1a7e847c1bb468d2757858fa6288efd3a8cden => E + 0xfbba56d309afa3f7631abb6a7c24218197d07dd0f6195a7d54a77002dd3063b5n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x3c2aa11d707638320287d3c7352cca8710479c9c1feb551c8435a9033a93568cn => A + 0xf6fc025392eeb86875c1b776b3db34de3673a82406f24e1ae226591614d647cen => B + 0x3c2aa11d707638320287d3c7352cca8710479c9c1feb551c8435a9033a93568cn => C + 0xf6fc025392eeb86875c1b776b3db34de3673a82406f24e1ae226591614d647cen => D + 0x92138f1810b46e1eea94ca4d5d36849d07ff3a911be3ea15dbd64c398a235fedn => E + 0xd9e835ee782ed9cfeadcc4619df4d2b5ee1603bdcada86082ba880bb64ceab1bn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb67728bbe30d3a3b0f5c218580808153b4a537ed16f84cb992a0dcf6d84ceea3n => A + 0x9e5a70971a7cdc3135c260895a67f2446de215fc47d4076a1686d958d957993an => B + 0xb67728bbe30d3a3b0f5c218580808153b4a537ed16f84cb992a0dcf6d84ceea3n => C + 0x9e5a70971a7cdc3135c260895a67f2446de215fc47d4076a1686d958d957993an => D + 0xc89516d5ed7746c1d8042a5b73882c9bea88539d14bb28fe5923fda36a8ef7c7n => E + 0xb48c2e69339d7b36979933a8d08979d76c592ab2dfa4c495182930808c5cfbb6n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x7844ed628e35008d3d92b0ac8d1272a94749a78a039eaf1daaa154d9d0c5f80cn => A + 0x8fb4e1bbcf70bdf675b10276256b2172ec85a2c5708036f672ac03be9258e3b9n => B + 0x7844ed628e35008d3d92b0ac8d1272a94749a78a039eaf1daaa154d9d0c5f80cn => C + 0x8fb4e1bbcf70bdf675b10276256b2172ec85a2c5708036f672ac03be9258e3b9n => D + 0x7a32f79307f0387cfea073d348ec4fb5a676675a2259b5a1a240a50dde78f6e4n => E + 0xcdf0a4de30537161510c2b2c48c3138ae43d45e6957c8240ff2eeb3478e64aa5n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb4170a43b9376dd87618a91912c85a359487762cc0d9bb8da828b00b553be332n => A + 0x4999840a06aa26768b5c21d7bb08487832e3a6b3860d783c3d3bf57b6a8da926n => B + 0xb4170a43b9376dd87618a91912c85a359487762cc0d9bb8da828b00b553be332n => C + 0x4999840a06aa26768b5c21d7bb08487832e3a6b3860d783c3d3bf57b6a8da926n => D + 0xb4cc26e7c096a9bd46ea16019890c5d53dff09ad3aedb1aaab7ce91c5fcb30e0n => E + 0x1539684a4536ad6029ad3cda003c88a8c9ce355b9bd69ffe7da824277c86f24en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xbd8bf1203f7b8181e2cfdd27cba85301fea9f5298a81b74185d5cd49b5d2bbb8n => A + 0x8cf67cabf14533dc2b5acaf6652ea1ba8719287ebe43b60c45db2cf5ee89db1an => B + 0xbd8bf1203f7b8181e2cfdd27cba85301fea9f5298a81b74185d5cd49b5d2bbb8n => C + 0x8cf67cabf14533dc2b5acaf6652ea1ba8719287ebe43b60c45db2cf5ee89db1an => D + 0x0467d8f3a2de84326dffaaa03758cd6a2fc5553fd2ed2e9a9fd7f87b829fb9f3n => E + 0xf7e0bc4929e0dfffbfdd8a2569c397e620ae9b0557080f07189d562dffafbb83n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x586e047ef6e993a2bf774cd131a5810614c8ed02717b7f46e9504f41d99e8e96n => A + 0x3719564c568391c43ff80bbf20dd529f6b3c3f2a929c80712feec291c22098den => B + 0x586e047ef6e993a2bf774cd131a5810614c8ed02717b7f46e9504f41d99e8e96n => C + 0x3719564c568391c43ff80bbf20dd529f6b3c3f2a929c80712feec291c22098den => D + 0x887e212e3ef9916a3e61850927268b956c6e69105d533434c76c58d5bf738951n => E + 0x136040e20e037ca5ed737451006a1cedbbb6dc343dabf3a76e86f9bdccbc62a6n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xeb6c360006797f2cb36ac37b545093ef869f7527c866020477682311dde07698n => A + 0xeafd710db6a1973b434ad79d5be0ad71a551fe7b255bc2fd6220680eacefcd0fn => B + 0xeb6c360006797f2cb36ac37b545093ef869f7527c866020477682311dde07698n => C + 0xeafd710db6a1973b434ad79d5be0ad71a551fe7b255bc2fd6220680eacefcd0fn => D + 0x7c70040b452751006fd0459eba00eb129b60bbc85f66e14eedbe6fc14bd510dbn => E + 0x3c9cdff47434cfbebeb7fe99237e39c8d11f21f520e091db521ecf8fcaaccbe5n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x1c0ef408663e71a660d9ca4a447ea61f3075d836853929f47a476ebf1b7fe5a8n => A + 0x529c16310030463ea2cd71e9e806f5b01d44f8133aba9eb32d78bc625a33c2b7n => B + 0x1c0ef408663e71a660d9ca4a447ea61f3075d836853929f47a476ebf1b7fe5a8n => C + 0x529c16310030463ea2cd71e9e806f5b01d44f8133aba9eb32d78bc625a33c2b7n => D + 0x1f1e3b96d9d68f74e04f96f6e117eab84e68e3c87f582f7c898c26882f80531bn => E + 0xdf341d9aff7d8c4c29aa86069b34b8a1470daf976c903d0255f45590f176f362n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x24cfd2987b24b428e7fc51c3124e935644bb2fae6e19cf349a608be0275ca573n => A + 0x3b759b914c0b568bbf05ce9bb67bb5a53b1241ac8f3d24d278ed26407fd43898n => B + 0x24cfd2987b24b428e7fc51c3124e935644bb2fae6e19cf349a608be0275ca573n => C + 0x3b759b914c0b568bbf05ce9bb67bb5a53b1241ac8f3d24d278ed26407fd43898n => D + 0x954df496b3616b4a69eb7f9f0fd1fe6ed692e9b6ad1ff7c29976a3d40bdf5a86n => E + 0xbdfcb4c7947bcba1d4a8acd77b338e17187201bd2953b237e20d61dd7c7f0680n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf48301dd4e67bffc5c82d0d633862a7367fb126e76165f69a213054e0e397894n => A + 0x18f4e91072668ce94e1afdbd9426cecbbec7517eb06bdb6ef0590a794fb2b6a3n => B + 0xf48301dd4e67bffc5c82d0d633862a7367fb126e76165f69a213054e0e397894n => C + 0x18f4e91072668ce94e1afdbd9426cecbbec7517eb06bdb6ef0590a794fb2b6a3n => D + 0x0da50cb3f6eee1abfe9a2a360ac6f962eeb04961729cc3c3e726def13efe8dc3n => E + 0x001ac49721d3faf169bbae40b2de2d2ca778eb35013b0d8cf7fbfaea3f7552dan : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa5dcba8ff1148846cbd2c6766fbdf34a8dc257e8c8edd18b1cd5f9c3d8912dben => A + 0x8410742db0916b86590ebfddf42d2d1284ea5280d63d6826f2382646ae21b3d9n => B + 0xa5dcba8ff1148846cbd2c6766fbdf34a8dc257e8c8edd18b1cd5f9c3d8912dben => C + 0x8410742db0916b86590ebfddf42d2d1284ea5280d63d6826f2382646ae21b3d9n => D + 0x0b77780ef903bd6f64b764177f0419feb30f2107140e773e0ba53d88e037b287n => E + 0x13ebcf6802e6dc651036cd5c50d35fa9ac398cb95e24315d6428352ea34c5779n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xeb3b56e5bf88f02db9d4b42e151966c5ee42378baccc4562222d9866121fe102n => A + 0x258182d0bcb04dae81619d3b411a1a828e64fd8b23117107c31f2a2634252fc6n => B + 0xeb3b56e5bf88f02db9d4b42e151966c5ee42378baccc4562222d9866121fe102n => C + 0x258182d0bcb04dae81619d3b411a1a828e64fd8b23117107c31f2a2634252fc6n => D + 0xc585a91060fa7b93fc125b8533d6d0e1c563a2723bfdcd22fec54367fe12449dn => E + 0x2c4d2146d7f0f38a2f5d41e3b37a152d91dd3666b4cc1db6d4bfc878078d6a3bn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x4e546c5857e3ec3088b62e1ad29ca3c64fd3dde5f21e9d2095818c73fae2b94an => A + 0xf68ed7ed405297328366ba970132bd8ee4346b63bd0a31e9faaaf085c1f03b12n => B + 0x4e546c5857e3ec3088b62e1ad29ca3c64fd3dde5f21e9d2095818c73fae2b94an => C + 0xf68ed7ed405297328366ba970132bd8ee4346b63bd0a31e9faaaf085c1f03b12n => D + 0x15b36aea66400332024fe407b00b60916b8af6ec6c9405d88f516caf238116aan => E + 0x517f2c5e51ef59eb85ad395c1b4585af614a69f82e3bbcd9761bcb48c852ca80n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x88377bac5388831c41ad52d8d2798c42ca3bd09a38d1b234692f0212c633def6n => A + 0x42a2514ecc3c958ec1f719aedf9418f7276b11ca288b2c0638d7c2bc211e2f92n => B + 0x88377bac5388831c41ad52d8d2798c42ca3bd09a38d1b234692f0212c633def6n => C + 0x42a2514ecc3c958ec1f719aedf9418f7276b11ca288b2c0638d7c2bc211e2f92n => D + 0xf33e906773f15a5acaabea92e3abb55bd05fc5566a43a3c8e542d7c875dbed3fn => E + 0x95bdf5d6cb2b5cd3d29c084ae025d14b72a88858de38ef5abaf4189eb5c2116cn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x19d72ac3d0a74515016f65fc703b2433b5ac54621a7726c22a6b404a5939919an => A + 0xddfd2abeed07bbffaac6e8b18f13d1f7897c288f91b0e74d12a8806a456b0102n => B + 0x19d72ac3d0a74515016f65fc703b2433b5ac54621a7726c22a6b404a5939919an => C + 0xddfd2abeed07bbffaac6e8b18f13d1f7897c288f91b0e74d12a8806a456b0102n => D + 0x6f6227b38c7daee5dd297fa4df5dd6cfa694c60f3555923ea0d79251b5e35bcdn => E + 0xe438f894f797edde1e463b8234ba1e72d095c808a61323acf520ba2d8ff9c4acn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf20043887daac93e741433e654ce36e279e47fa28334df30a91f6d617a1505c9n => A + 0x380d0b488e1d02450dbafdce80eb89daa7a20716ac905b664b2c4f9f13e36888n => B + 0xf20043887daac93e741433e654ce36e279e47fa28334df30a91f6d617a1505c9n => C + 0x380d0b488e1d02450dbafdce80eb89daa7a20716ac905b664b2c4f9f13e36888n => D + 0x38975936bc4a7b18019d4d396174683981a757b4cf9bff7628cffece974895c2n => E + 0x8a4b23bd8a8025b6e8cdca9dbbe07eb0f9de91271ceb9471d899730c95ce2796n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x91da8db4ea947a87bbff1b4f92bed9931819485902b7e8011db5bc013958da29n => A + 0xa9123275a27f839df2cc7b5733598ca558073fadf18580b3aba88f0dbd6484dan => B + 0x91da8db4ea947a87bbff1b4f92bed9931819485902b7e8011db5bc013958da29n => C + 0xa9123275a27f839df2cc7b5733598ca558073fadf18580b3aba88f0dbd6484dan => D + 0x97b44694bd9921ed8e9cbdaf612137b3435ac82455d5d54b4690f6c82b05b115n => E + 0x9880a3c9d0560a4be691d7b06c08f3406bed299ad79440a767672167c9ca3c85n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x6a09c448ceeb818354c687ba445997b21e94434c1bdcd3a0713f268f4fb99218n => A + 0x9744bd2b2fe6910cb3cb4de4aa984fdf965fa23cb9d74198b7022f3fc7ecb8c5n => B + 0x6a09c448ceeb818354c687ba445997b21e94434c1bdcd3a0713f268f4fb99218n => C + 0x9744bd2b2fe6910cb3cb4de4aa984fdf965fa23cb9d74198b7022f3fc7ecb8c5n => D + 0x633a6b6e4cbaf579d80f8300df7e8c752e2557754719c30346c430d0b9dc2f10n => E + 0xbc699d475d1caafc329258c2b8d3797152fe716e01f9b7ff1d195ffdfddd7e4fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb6f9099d8647e9df1eb71d5a6d127f3fea0aa3a35fab68d58b8ac7a5ba2b4744n => A + 0x7e12bd5c1b3a34f11c5a12893bc5909aef8dd436e0683edb1dc4142747fc5e23n => B + 0xb6f9099d8647e9df1eb71d5a6d127f3fea0aa3a35fab68d58b8ac7a5ba2b4744n => C + 0x7e12bd5c1b3a34f11c5a12893bc5909aef8dd436e0683edb1dc4142747fc5e23n => D + 0x8ac1ac2a9541e3be66a16429338d808ef8eae523140bc1cee7667fbd6e4841c4n => E + 0x2f4885d2d6b69f36a39f53a50816c71f83b2256b0ec6fa1a85eb3ae6b689eb9cn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe7e11fd2b2a0d17419da036a0de20269069c2096a6e80764c17102576fda783an => A + 0xec102559241b931ea193df6ae2a4233dcfc6e8a146651b2880702ac3862b123dn => B + 0xe7e11fd2b2a0d17419da036a0de20269069c2096a6e80764c17102576fda783an => C + 0xec102559241b931ea193df6ae2a4233dcfc6e8a146651b2880702ac3862b123dn => D + 0x8cf7beb749b8d15cfe2f989c21932108330abe3cd741fd8c97f8ade2beb61af5n => E + 0x8658d5ef5a40995be22d6137d80062ac9af0c39c63c719ba97021915cc0542b0n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x0ffe40d19da67afd91510ca775271da6026921a5d9a64a94e1010cd87a961907n => A + 0x47fe2c6b1d00560a684280e1c2504f7ba0891de4b8738dda39d67a560846ca29n => B + 0x0ffe40d19da67afd91510ca775271da6026921a5d9a64a94e1010cd87a961907n => C + 0x47fe2c6b1d00560a684280e1c2504f7ba0891de4b8738dda39d67a560846ca29n => D + 0x4356b292e9604ff2cd3b1d5cd7f34af3f224143300fd60f192005b7f90c4c188n => E + 0x6b984ab3bf24a615bf4b0a18497597c0ae784d4c81497882aa265faf33a6eaf4n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x390d0a1cb7cd94ec8cc867669e439b08ce643a01b84459284342369cb7449267n => A + 0xb44023ef61b84619e8544f2c8d2c1720cba1d0f6bf7da1664ee5b78f430f1bc6n => B + 0x390d0a1cb7cd94ec8cc867669e439b08ce643a01b84459284342369cb7449267n => C + 0xb44023ef61b84619e8544f2c8d2c1720cba1d0f6bf7da1664ee5b78f430f1bc6n => D + 0x92b4236f89c28398df87caa1a6072e6cd9e3da73c12a173020526dc81eb6d32cn => E + 0x5ebc3e560591ee04297664af317aa32aeb92173545fe1502586e8500fba2982en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x4cb58bb084f2642c4097c809f021b60cbf3d40cfb13b73b88762e834c04db8d1n => A + 0xab4123d01250d9b652f27596940aae69157165909dda7ddc03b00c85b8dbb63cn => B + 0x4cb58bb084f2642c4097c809f021b60cbf3d40cfb13b73b88762e834c04db8d1n => C + 0xab4123d01250d9b652f27596940aae69157165909dda7ddc03b00c85b8dbb63cn => D + 0x3139893763fd2996ee229f634895b2aa112fe5415a2b21a0113f212320489cfdn => E + 0x7b653ed96959a2846ae0080b4625202e87f15f4b4a21f2bbb11c82918816bbfan : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x998becebd49b547b5fa728c23d7fc8b314442ceab02cbb9def6690c24ab32e1bn => A + 0x63ea27f6dd9d38e74933b5a6d3c2a003bb1d2cb9c3d4b6c2d34ab659d40588c5n => B + 0x998becebd49b547b5fa728c23d7fc8b314442ceab02cbb9def6690c24ab32e1bn => C + 0x63ea27f6dd9d38e74933b5a6d3c2a003bb1d2cb9c3d4b6c2d34ab659d40588c5n => D + 0x092c4e067a45104c2616cdd99c838d8256c3275db620a5650c36191d150cb1b0n => E + 0x970e6255421aaec70607d8d834e5d255dd98afa7fb88bf2df27630a41aeffad8n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd374a0fb4ea4da92cbdc9ad7285b031ff02f2d65ceef24f635098287634313ddn => A + 0x45322ea11ee1e1dac3da09a416ca47556badcbaf946a21f9ac9b764f710032edn => B + 0xd374a0fb4ea4da92cbdc9ad7285b031ff02f2d65ceef24f635098287634313ddn => C + 0x45322ea11ee1e1dac3da09a416ca47556badcbaf946a21f9ac9b764f710032edn => D + 0xf749ab70930b3a5e8a2c29f4ee809ff665e118f3466e80d0fbba6bf8cc3bfc6cn => E + 0xa82e0c036189c1dcc0d555b17ab9a8e21bc908665ff1dfc3dcea857b9666018bn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x2c03db6c141a7060c6cb89b735e3a48a724614a95ebe1f42edaeaaaf4bd3f1fan => A + 0x3c94f1190a3917e9bdb81b05e708ace8978fb7352c43633845765e84916ba715n => B + 0x2c03db6c141a7060c6cb89b735e3a48a724614a95ebe1f42edaeaaaf4bd3f1fan => C + 0x3c94f1190a3917e9bdb81b05e708ace8978fb7352c43633845765e84916ba715n => D + 0x1a653cae8afb007e926c73e2b3000dd1811b04f387335a90103d85a1ead79447n => E + 0xb99722f9d3d26aff1d47c72b0026a2c30ffa85e1908189b43fa0542ecdb8bbc2n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x30c1c9fdd8454948bc646401f841bc8d51128cf74ea95d58a3a44606436da538n => A + 0xd1178e23d7f9ae17c16f895c66ba9f2efe5f7f33cf76142be5c17026f4f9df60n => B + 0x30c1c9fdd8454948bc646401f841bc8d51128cf74ea95d58a3a44606436da538n => C + 0xd1178e23d7f9ae17c16f895c66ba9f2efe5f7f33cf76142be5c17026f4f9df60n => D + 0x370df91ab97536c9505ea998fcb32da917deec37cf1b5688a63940f8500256can => E + 0x7ad52923e454b4fbe28b40523bb824412f71f6e4853359f208c77554b5c19398n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x24c4bb5094bb486d20a33c5944f935739d4962477f3b22b163a084b9c629a5d6n => A + 0x2b9742aa28f43c070e58e0877ec96a1e7b012da814f36b7c6e94c835e593ddc7n => B + 0x24c4bb5094bb486d20a33c5944f935739d4962477f3b22b163a084b9c629a5d6n => C + 0x2b9742aa28f43c070e58e0877ec96a1e7b012da814f36b7c6e94c835e593ddc7n => D + 0x692a93a8bda0c17e1bb54caf3032d61489a243219c3594c82c9836737b583e59n => E + 0xa8ab3cd8b521207181e8160bb090ba68813b840f7e8e2c1aaa786ae9c1c0a2c2n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf6cca43a4f2d09ba068acb559c968f87a0fbfbcd15557032b66d3fc39e3277a3n => A + 0x7d9b79bb5c3f77e0eb3101ac0748cde51da8565173e4f252149e12dee62522a4n => B + 0xf6cca43a4f2d09ba068acb559c968f87a0fbfbcd15557032b66d3fc39e3277a3n => C + 0x7d9b79bb5c3f77e0eb3101ac0748cde51da8565173e4f252149e12dee62522a4n => D + 0xd9921a625af978e54ec40277236795f74965a768f7451aee80c9699c37813ebfn => E + 0xef877a09d23b8c44efdf3927f45e31721910717415ee39426b9bae25dfdf036en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x2d8e9abfdecb01f398f0b8fdac165b3634eccbf766400383acb70fea6a7a4978n => A + 0x2e97da0698b3e85f5f080bbf617d8a404c5d8ebe2ee168c33cb309b490e4140cn => B + 0x2d8e9abfdecb01f398f0b8fdac165b3634eccbf766400383acb70fea6a7a4978n => C + 0x2e97da0698b3e85f5f080bbf617d8a404c5d8ebe2ee168c33cb309b490e4140cn => D + 0xe721603e68266b90c613d2fc47be34703cc2f84add275c92957b13115dbf452en => E + 0xf04ade686dab7d7cfafa28384f0aedcd0e28dcf26e0c7dd2171057f3c38cfa1bn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc87c4f62e9222502baccb7713ac0134cf48accf4a2e1c359bb8175b999fca5dbn => A + 0xfe71a54ac592976206a3128e141013db5e4d80d6c2007719283c13d7029c33ean => B + 0xc87c4f62e9222502baccb7713ac0134cf48accf4a2e1c359bb8175b999fca5dbn => C + 0xfe71a54ac592976206a3128e141013db5e4d80d6c2007719283c13d7029c33ean => D + 0x2956d21c4446225da3f66ca56278de2b6203dd6df3cdf15fbb896a7157866497n => E + 0x1d50d58c3d2bda4e7280871f4c20e0fcb812e85124041a5c6cca41234b5d7394n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe450e937be2f25df9358ff49e8158d6c78d0f6ce0e9eee274f87dc3dd25ff442n => A + 0x5d0ba265d679d7a67175c47517b930e40935649f2a2b091937acdeb9f8881731n => B + 0xe450e937be2f25df9358ff49e8158d6c78d0f6ce0e9eee274f87dc3dd25ff442n => C + 0x5d0ba265d679d7a67175c47517b930e40935649f2a2b091937acdeb9f8881731n => D + 0xc1a9031b4619350c06f39f9600b99465d15ff2de8797fd99ff6ac217a28b47c6n => E + 0x9f04527315d7b71e0deb7dc6b48b930667870ce4c6c2b86bd3816273e800b744n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x56343ae6b87a5f7f85c77812de726f1820b45609255b9d17d5e00a8072415ecan => A + 0xe0cafa67378938bca4435c871898b213a672534bb0fab5f47d97a6efde1915a4n => B + 0x56343ae6b87a5f7f85c77812de726f1820b45609255b9d17d5e00a8072415ecan => C + 0xe0cafa67378938bca4435c871898b213a672534bb0fab5f47d97a6efde1915a4n => D + 0xec7263476948f51d920c469e64c80e9186aa7301939744ba7425d75be7c4c3a9n => E + 0x23e6ff4c40b768e9ef1413d0baee187001169cc92a70856f91b8acf7a73e13a1n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x95e73f469dfc8a3a010e4fe7f44dce95cf25bba5a0c69e3ee6d591d6fc4cf0dbn => A + 0x1850cec020e0fcb36526af7cb0ea4652447f7538c3795ea5b97e16515f2e6d6dn => B + 0x95e73f469dfc8a3a010e4fe7f44dce95cf25bba5a0c69e3ee6d591d6fc4cf0dbn => C + 0x1850cec020e0fcb36526af7cb0ea4652447f7538c3795ea5b97e16515f2e6d6dn => D + 0x6e1e48d4bd6d6693b1c4344d72652b37a097c2dad20b220ec37470f3ce9c5c70n => E + 0xa872ab57be43535ebd9496ffb5c8f9cfbc9418efdd5b238e0e0900cd22ff8cd4n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x3d5671ae97b7c83bbe93c181eea368075fbe4da760ea511f11b4e0e8265b1b7dn => A + 0x15973ab9d02e121e0cdb14a50fe0609b3771322bef795c9b12694a154fac290bn => B + 0x3d5671ae97b7c83bbe93c181eea368075fbe4da760ea511f11b4e0e8265b1b7dn => C + 0x15973ab9d02e121e0cdb14a50fe0609b3771322bef795c9b12694a154fac290bn => D + 0x7f708fcce1f5c86c0bb5083dc23093b6fd756b95c19e72d0c00d028e98725ae5n => E + 0xda05e22b3d75e820f6c488a8e2f3d17387930b7b6f908cb3717bb7a4a2687871n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x590811dbdf5b21db6114d1c5247264bdd95b2cafe23394832d5130137363238an => A + 0x3e2c2d68f6ed6299d901815f10b415701f3c9631b9fa282f09e07e5f118589d5n => B + 0x590811dbdf5b21db6114d1c5247264bdd95b2cafe23394832d5130137363238an => C + 0x3e2c2d68f6ed6299d901815f10b415701f3c9631b9fa282f09e07e5f118589d5n => D + 0xb66a72ccc98463b8baecc48d6b60a97e1fd014f7e96dcfdb51f1ff69fa94ab8bn => E + 0x0be00e5cb05c60218b453370dc48e24acd3d846ea73ba4218d4dc894af335b94n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf4dd0ec747a363a93ef8d60df59e62f1227dd3a06075606fbace809302885334n => A + 0xdb29f0968176de5fdb5f2bd214b5c1ececa9938144cb45fa5e586b39c5af78a0n => B + 0xf4dd0ec747a363a93ef8d60df59e62f1227dd3a06075606fbace809302885334n => C + 0xdb29f0968176de5fdb5f2bd214b5c1ececa9938144cb45fa5e586b39c5af78a0n => D + 0x18daa0d8c3c594f4e450c4d22cd52c3c830030ad67c5bab61c3e0c98257f72f8n => E + 0xa2acef76788b1f5ad98b4fb3f00dd76548a3d336a39ef9d9d2245e71fdf53d06n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8a12fc2154a2003c5e0464cd378398a9d45364b5435ffd8e657e0a494524d936n => A + 0xf59ec149d6373497bc6d14e3b61865ecf071c5920c699f7d75819e4aa015bc06n => B + 0x8a12fc2154a2003c5e0464cd378398a9d45364b5435ffd8e657e0a494524d936n => C + 0xf59ec149d6373497bc6d14e3b61865ecf071c5920c699f7d75819e4aa015bc06n => D + 0xf4a920bbdd70e6f18826ac13a01de665318e01f5668e73c89cbf402a61e5a009n => E + 0x94da11a3a3eac38ae4c0cfc2454b850e1f4445c93f954b95e31a5089d13269dbn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x990a00895094761d4b313ce6d5f2f96b983e63ed495b590011071aab0f6b5bb8n => A + 0x3de50c13d3bcdc11ffc03f15e2026bcd93fde8a8a94de486af3862a2c3c17b28n => B + 0x990a00895094761d4b313ce6d5f2f96b983e63ed495b590011071aab0f6b5bb8n => C + 0x3de50c13d3bcdc11ffc03f15e2026bcd93fde8a8a94de486af3862a2c3c17b28n => D + 0x460582ddc93dc10d5e0d089c8e5c5bdcdc75417abe7dc04e7f0a847015f72eacn => E + 0x14a134be2161f466135abea96d3ec48913a17d76421ccea70a08e1743734bcefn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x61ae3be039c743aa7d36ecec8612b9ad2fb308199ec37e1dbe30e29973775335n => A + 0x3fc4b1b666c6d9fd0d64ef7ea7b569180908528988a9529b32ff05fccad050f0n => B + 0x61ae3be039c743aa7d36ecec8612b9ad2fb308199ec37e1dbe30e29973775335n => C + 0x3fc4b1b666c6d9fd0d64ef7ea7b569180908528988a9529b32ff05fccad050f0n => D + 0x3e8e3bbb6aa9f3bfbc831d6a512d13fdca258ecdd5db693c8034d94ced61e7b4n => E + 0xa4b59345c0e35eb8228162248856f25013a2d6818eba19b5d72cfecf72073f55n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe2ca4de85dc6162ce1f8dccb83b264ad05dc7a1540f996c4d1eeb2bcfe27df2fn => A + 0xafe5c6c5475ad343ecfb30f38b13e950a799f78b6124783a536b8dd7249b1051n => B + 0xe2ca4de85dc6162ce1f8dccb83b264ad05dc7a1540f996c4d1eeb2bcfe27df2fn => C + 0xafe5c6c5475ad343ecfb30f38b13e950a799f78b6124783a536b8dd7249b1051n => D + 0x05621b0292cf1b2ce784fb1b1a9ad56039fbe1d04c01406104ad4558c6cb3a09n => E + 0x23d3dc08cd3fb77731e9031245c881d7435aceed96adf39244cc18098c51a322n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9483850d71bd7ac029792eea56699b87d6e8542ffcef3b81ce8667a88fd9d123n => A + 0xbf5c778a7469478586582c38b65d8136fab17761575439250bcefab220a84870n => B + 0x9483850d71bd7ac029792eea56699b87d6e8542ffcef3b81ce8667a88fd9d123n => C + 0xbf5c778a7469478586582c38b65d8136fab17761575439250bcefab220a84870n => D + 0x6ad06b26fb75879d67704289e1b46ca5a9c1b036555e3197e7b766728cf7f793n => E + 0x44e97133a7fb0460aee5c7eb81f40c7d757fa7e7103b1e530301631e35175cb7n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x6476e9655c372aedd8bf8b436c3af31c27754426a7a354b49487df257678ad21n => A + 0x8eda74a9055b35cfbf1a469b9fe3bc575d42e1256e082bd9e7596496d553b6c0n => B + 0x6476e9655c372aedd8bf8b436c3af31c27754426a7a354b49487df257678ad21n => C + 0x8eda74a9055b35cfbf1a469b9fe3bc575d42e1256e082bd9e7596496d553b6c0n => D + 0x2782ba8f3745fb0753c1ed3cc7fefa0b4d462b8aa1efb0b62a38c37c104ea4e6n => E + 0x1b782921901a9b83e23837b4f6360e36336e81f53aaa721c39e0b979345896b0n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x24a6db07add7c19cbd42f16045193af21e623295f4468b1edbc996e67243d432n => A + 0x482e28f99caaa6a292de368c265fa5cf2313de90cd138e7e50908b03ed4b1c7an => B + 0x24a6db07add7c19cbd42f16045193af21e623295f4468b1edbc996e67243d432n => C + 0x482e28f99caaa6a292de368c265fa5cf2313de90cd138e7e50908b03ed4b1c7an => D + 0x1f867c9ca879c1a13fa02c295f7bc478aa3496c95c96aa741b7ee855f8d9c559n => E + 0x57d290adcc409f43db408e1e1c2a42d3c3897c59551fc0a89e66d5cee8db1910n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x52f7b50c1cdf2987c4192507160e40ff54b5fdd48c17b2172d5532db15cef17fn => A + 0x650b115d176ca27e3827afec2b15c3040c2671e745886851947463f9bff61018n => B + 0x52f7b50c1cdf2987c4192507160e40ff54b5fdd48c17b2172d5532db15cef17fn => C + 0x650b115d176ca27e3827afec2b15c3040c2671e745886851947463f9bff61018n => D + 0x36f3af5ab9177dfabfacc5bdd6b13c1c7f27168201b55d6be8d9a37d5592d359n => E + 0xba74be9dfa095238e394da5db8effdc1747aef6792eac79067ae192f1dfaeac9n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xbb92ba5ded9311d04764ad71ab50e6c6955580f156437cf91c07bce05cf46876n => A + 0x6beefb960ef0da3d517d3c8e07d41b3f8c049be2cc16c11e8a083f5cb1a8af03n => B + 0xbb92ba5ded9311d04764ad71ab50e6c6955580f156437cf91c07bce05cf46876n => C + 0x6beefb960ef0da3d517d3c8e07d41b3f8c049be2cc16c11e8a083f5cb1a8af03n => D + 0x87f559041ce22f797ca00e4ab01f822bb96ac803a55bcc6ab74624f9121c760en => E + 0x9bf35d633f53fdaaf68f248ee275dd298e9ab46cefa3b11c20789d5ad3e07f7en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa9eb6c79643954ebf2414cbf030af2f21aa064b3f5deb7c4d058b26960b3c706n => A + 0xf9e78ee58a55ca54dde66eb397f43e2f283bc05efda26656e36f92b428f7626dn => B + 0xa9eb6c79643954ebf2414cbf030af2f21aa064b3f5deb7c4d058b26960b3c706n => C + 0xf9e78ee58a55ca54dde66eb397f43e2f283bc05efda26656e36f92b428f7626dn => D + 0xc789e5099ab6eb93046faf8089cd5151573a1cf708a632a939e3ec93b5aa3cc0n => E + 0x705c0a385ae875f8f349ae3749e31e40696b11fae5014f067e7d6aa6a5333664n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa84fa58d61d4be587749aaa49aae1d7f95404d3fac7aa108f451610c1fdabc0fn => A + 0x94a0aa04d87432932588654c34a8034e962691de567ed0af725cd4366f46b540n => B + 0xa84fa58d61d4be587749aaa49aae1d7f95404d3fac7aa108f451610c1fdabc0fn => C + 0x94a0aa04d87432932588654c34a8034e962691de567ed0af725cd4366f46b540n => D + 0xe35138f86327f269261b5425894e0cd1affd36ae14d9fe0567080bf7e64b1bbcn => E + 0x079fae1c6c9e1f9e178ae756d778c7273213afbb377f56d41a56a71c2c05d52fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xbad79ca9015e4ffadfa6af4fe75d1e6328c86c84b7fdef6d0224cb29cd645222n => A + 0xa0ddbd8628d302d91c76123eb51028bba10f3d1d1067169b90549d42b0fbff08n => B + 0xbad79ca9015e4ffadfa6af4fe75d1e6328c86c84b7fdef6d0224cb29cd645222n => C + 0xa0ddbd8628d302d91c76123eb51028bba10f3d1d1067169b90549d42b0fbff08n => D + 0xb98c5dfa94bdd8d05fb008c0ccdbd89802b9c9226e0ab6de8c58c99f3715e4ebn => E + 0xd3e6534421c81fcc02ed72ea3371220b31c9af87f986d6e1893392e4097c2bben : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x4a1bd058eeec34a654154c3aa7f0bb565c825415b907f3c806c63979a3b1b6cdn => A + 0x39fa0ababf0ee00310cc058bd2545490e68e9f70e4ecb50dafeafcbba2ad8783n => B + 0x4a1bd058eeec34a654154c3aa7f0bb565c825415b907f3c806c63979a3b1b6cdn => C + 0x39fa0ababf0ee00310cc058bd2545490e68e9f70e4ecb50dafeafcbba2ad8783n => D + 0xfe3cf26f705a6abaa409b15a9ea02c3373b6e378c0fc469cdfbe9f2d307dcfa7n => E + 0xfe893e1a22e9da8503e93d4af3bf5d51ce7f7f02dadbd874fda8d9c9941d7493n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x7c3f0b1d0c8c6e32576fa019b88bd7d91f4889d6792a16b37d5c80582800e4afn => A + 0x311844e4d9e0c4cae5b32cc16851d848d1db335b981997f94a9b0dec7740a210n => B + 0x7c3f0b1d0c8c6e32576fa019b88bd7d91f4889d6792a16b37d5c80582800e4afn => C + 0x311844e4d9e0c4cae5b32cc16851d848d1db335b981997f94a9b0dec7740a210n => D + 0x0cebb501897b30d5c87db2340bb076028ffbea9039b92976debd616cef33ffaan => E + 0xf959132a004a35e56fe54b42e98ce4eaa75eeaf780a4a5c0ad16465b71961115n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf1e2e987c8afef810bbb1f815cb3e81805130876e0a8a874746ca5a00508b091n => A + 0x50d37923134069164600719c4dedc4f6963852dbb2a801e996707da7a01b3a15n => B + 0xf1e2e987c8afef810bbb1f815cb3e81805130876e0a8a874746ca5a00508b091n => C + 0x50d37923134069164600719c4dedc4f6963852dbb2a801e996707da7a01b3a15n => D + 0xde0f2c40dbe432cc8870ab675ab943d2f0585ccd7be0aa8a20ba634311ba2a4dn => E + 0x8d7f132258f54bf957ce0cfa2af953577470f3463095d04ddc40d54e9a7d34bcn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x226f2f486b30b94df85814e24d0f23107ca7ecbf5f09dce8963b51c088340321n => A + 0x35d79a3e40c25c7d0f52ba4775de09e675d4713f854777c631dbd750f79406a1n => B + 0x226f2f486b30b94df85814e24d0f23107ca7ecbf5f09dce8963b51c088340321n => C + 0x35d79a3e40c25c7d0f52ba4775de09e675d4713f854777c631dbd750f79406a1n => D + 0x6c8760345a3868633dc8f33b478f0570229630e0f9abe92c557a137436c899fcn => E + 0xc92f6879286fa16b3d1ac42bd79e12cd286f1ea9e664a3620dc4c2256ffa952an : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb1e86c871f1b7b2d0713a2789d95ad921a30a4198d928285243e9c38a719d3f4n => A + 0x9eb0d57d664d99de45f4e580260f4f5714e2a98a56e194cf46c8f73797acf6d2n => B + 0xb1e86c871f1b7b2d0713a2789d95ad921a30a4198d928285243e9c38a719d3f4n => C + 0x9eb0d57d664d99de45f4e580260f4f5714e2a98a56e194cf46c8f73797acf6d2n => D + 0x1d04d630fa685416cd2701b02daadc62283c6a743cdc920a18b0f07a8c0d5277n => E + 0xad47460129f4a33a8a5a3611051e56e25ae770fdbee7af7653cbdc23f38fa549n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xab7c4a4ecbfd291449fcba8b0898fc099e6302a321804bccbfeecd265acf98fbn => A + 0xec7c18274af671b89ce702937da3296da020638bb84a90600c02a57a21776ae6n => B + 0xab7c4a4ecbfd291449fcba8b0898fc099e6302a321804bccbfeecd265acf98fbn => C + 0xec7c18274af671b89ce702937da3296da020638bb84a90600c02a57a21776ae6n => D + 0x888115794027cb42f7bfd6628c3dee1764ead8fcf865e3c786ebae386d73d131n => E + 0x2498b77b087e880fe645df12ba7ee04ea43ba49cd99ae9576f318ea64909e032n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x1637eec9e308107c8175ef288ba256ff3577c019e2387301762eabdcb7c73175n => A + 0xb5e74872dd2e9dbff4e586572b110e0564f39ea0f093fddc0924ac4a1a5d85b2n => B + 0x1637eec9e308107c8175ef288ba256ff3577c019e2387301762eabdcb7c73175n => C + 0xb5e74872dd2e9dbff4e586572b110e0564f39ea0f093fddc0924ac4a1a5d85b2n => D + 0xba7c3d7b6072c0069cefb65df8b57c0929ea6b412917bcd19fa6ba4cf754558fn => E + 0x7cce0e4d787518eb0316ef0ce2c633ebd623cfb4869cb451fe20d8eecd6de55dn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x43c5c8190f7e3571e0fe83ee8cfd39ff10eb0b18ab83c27b2c9aa1c43dfec9f4n => A + 0x2faeaaf9927099195ad3ed376bd167b1cc03e082f1c813200816638e0897b73an => B + 0x43c5c8190f7e3571e0fe83ee8cfd39ff10eb0b18ab83c27b2c9aa1c43dfec9f4n => C + 0x2faeaaf9927099195ad3ed376bd167b1cc03e082f1c813200816638e0897b73an => D + 0x5a6d1750f380d696016845099705793105c282f087b340886bdfb112e9336bbfn => E + 0xd0e422d5ecdccead5dee95b0f44240bb52b7f4e1c64f66659807b06e979651e5n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xfe9c0fcc05d4ad6d3e7fe8c7cdc99c68cfd9368c389ee45714408f442cb3b150n => A + 0x45ed30d96b7aeb7e10dd8c852b1ec84757e2b37eacd68af969cb616fd67d0086n => B + 0xfe9c0fcc05d4ad6d3e7fe8c7cdc99c68cfd9368c389ee45714408f442cb3b150n => C + 0x45ed30d96b7aeb7e10dd8c852b1ec84757e2b37eacd68af969cb616fd67d0086n => D + 0x350992b7bf67d0f08365d3165bb4b6488739a81de7b65033d4ff1d6a8046a76en => E + 0x56e53b9e54ad5b9148e7585302efdf09ea987eca1ea2e4334497f183da2e68dcn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x167a18d5886be36e4a3152b7e6a8955a5a711002bda5bc795f59967146e081e9n => A + 0xafadbb467607efcb1b1816a7e3464a0f7aa073fbf0d7392d6b04fcbdcfc7fc23n => B + 0x167a18d5886be36e4a3152b7e6a8955a5a711002bda5bc795f59967146e081e9n => C + 0xafadbb467607efcb1b1816a7e3464a0f7aa073fbf0d7392d6b04fcbdcfc7fc23n => D + 0x9aa3a3aedd8c358d9a1f3bcc1924c805fb389df6151ef7f8e4999e0079e68e33n => E + 0xa2635a421f0ba251be3f82431d81b4fc359a68e6f8761c7c19861d3814070faan : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x1968a281b0220088a54671107fdfb7ee30d572cdad175ddf4d8daef66009af55n => A + 0x422a9b33cdc294b1d9f7f0de6d666384c7229fa8f8850fa12e8efce392c1852en => B + 0x1968a281b0220088a54671107fdfb7ee30d572cdad175ddf4d8daef66009af55n => C + 0x422a9b33cdc294b1d9f7f0de6d666384c7229fa8f8850fa12e8efce392c1852en => D + 0xb06b2678550ab70cd435551bf098a9855c9d96b65900a2883e5811676b5eaa07n => E + 0x22e02247898ac397a68c84c58c1636fc54bd7edf901b65b4c92c62c79cd1bbc8n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x4bc76ae6ba5f87b92e1caa8beb32a0b6040a79ac15e141bbb14d063e10df2072n => A + 0x590dd75834fccdfc5fbd3af148f3aaded33d9aa4e855497ac8a101c93957010cn => B + 0x4bc76ae6ba5f87b92e1caa8beb32a0b6040a79ac15e141bbb14d063e10df2072n => C + 0x590dd75834fccdfc5fbd3af148f3aaded33d9aa4e855497ac8a101c93957010cn => D + 0x20fbb18bc311ed80f66eb45ca0f918ea77d4b1f9b99c56efc0e76ada7c8501a6n => E + 0x731e40c2061a7cb56cd902d6aef92b40661273f18a64c00ad524725a0231d79cn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x998b1a67e0917ef8c161c3f1bd3f41f3338ec31e10651e1a24fa7cb8b3b0f945n => A + 0x988edc243b31a7277a3a951dcf6b13b3c2da9570a983f6426b0d57699aafdb65n => B + 0x998b1a67e0917ef8c161c3f1bd3f41f3338ec31e10651e1a24fa7cb8b3b0f945n => C + 0x988edc243b31a7277a3a951dcf6b13b3c2da9570a983f6426b0d57699aafdb65n => D + 0xd53121332312450f6d12cc7c2c270cfdfc70fea39eaf66ccc348b9e842e96903n => E + 0x5c5784950f4a07d843aa21bb45990d33d09c708310a60ac5cbdbe57ebcc34e36n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa77d4c3572add8f2a6f3853d74d93d14ed245fbf98164f19b7536808b25935c7n => A + 0x1921bf0f043fa277e90062dd29c7076608658632f791fc47e7022fdf1649f638n => B + 0xa77d4c3572add8f2a6f3853d74d93d14ed245fbf98164f19b7536808b25935c7n => C + 0x1921bf0f043fa277e90062dd29c7076608658632f791fc47e7022fdf1649f638n => D + 0x6754a0f582776516f1c2b746e496ac76c35c635218c2812db0c269f535456579n => E + 0x3cc5cd4afacd52da73b5b685f3b3698425fac4622af9f47cf15b1bf15a07f615n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x2508b655efada04069774d6e23e5bef04c87c5257fab643083b1094170dc2be8n => A + 0x28977e6994da9925c20a9eb47785f338577b38d1e777019fadab19ba3a5796d1n => B + 0x2508b655efada04069774d6e23e5bef04c87c5257fab643083b1094170dc2be8n => C + 0x28977e6994da9925c20a9eb47785f338577b38d1e777019fadab19ba3a5796d1n => D + 0x80c2e53e2184c871bff427a03a86d907878658401b5b1ee48e04476007a56750n => E + 0xe0ad0527f60cf4ed2c8fbee3b25786eb060491ef671c1a4a7dc8221d72a84bedn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe1ef478db06b507b8d44e27ba114430002e3009f43a71a42b4206b3adeef8c9bn => A + 0xf63b0b353103de94efade5e81501833d65d63226673337de6bf493efc1e8923cn => B + 0xe1ef478db06b507b8d44e27ba114430002e3009f43a71a42b4206b3adeef8c9bn => C + 0xf63b0b353103de94efade5e81501833d65d63226673337de6bf493efc1e8923cn => D + 0x21e4912cd1840f408f3364fc6270a1d0247126e590cbf455552bbb358da620dbn => E + 0x880cb3bddc304a95b537540c9d7f27979d4f7b8a65cd02c48abbc6ebc887754bn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x02e12ca06895a191453139bee24bdde6a64a454d26c9a6f32dd36c099d5acbb4n => A + 0xc899288ba86f0120d91dfa04f0a42b1b8d113b413cb0d3d72851970b034e79a0n => B + 0x02e12ca06895a191453139bee24bdde6a64a454d26c9a6f32dd36c099d5acbb4n => C + 0xc899288ba86f0120d91dfa04f0a42b1b8d113b413cb0d3d72851970b034e79a0n => D + 0x54476ccf85694e651a48cdb756e5638b000684ae572d3b481ffaba575cd3eacen => E + 0x859fd04771369e8181a1682b79ad2dbbd242664c45515eb4a20356cfab285d6dn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd92b28ba73efef88fdf1a734c5ee2eee135a2b7d2f634c538b570389bdbffbfen => A + 0x0ac092761d4bb1a27fdcbf45ae7a19fb28b2057a9bd7ea974cd2ddd85c7767b4n => B + 0xd92b28ba73efef88fdf1a734c5ee2eee135a2b7d2f634c538b570389bdbffbfen => C + 0x0ac092761d4bb1a27fdcbf45ae7a19fb28b2057a9bd7ea974cd2ddd85c7767b4n => D + 0x20790dca383a3ddce0c07f1a5ea5c876557689684713ccf40c23b4c90aafcf85n => E + 0xab4807874688627b9854376fc1d5ec18647ef15b79a1e1fddc4ee5d721c5cd60n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8a57ae31242a6d43d6fc3cc23276572a92009ef91b76bed49334865030b79af2n => A + 0x26b629eaa213bf1e73a327b7fa50b27928190fca6dcd9198075c8eb6be1609aan => B + 0x8a57ae31242a6d43d6fc3cc23276572a92009ef91b76bed49334865030b79af2n => C + 0x26b629eaa213bf1e73a327b7fa50b27928190fca6dcd9198075c8eb6be1609aan => D + 0x954dc99fd44f3e7c232bdeec5391c5dbfd0db777fc80d7aeab2dc450f8575dfbn => E + 0x4c971294d73c02b795d3bd87e6701205a43a273a00e331e8e32e8b95a6cde496n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xad55e839cb2169ac06cfd009a1cbf75358e09290f44b6e03a0403b1c439f2c60n => A + 0x06d454fada09c0ee05a50909f04e573629f8569eb6bdeeb2e0dd24fa8ad2f301n => B + 0xad55e839cb2169ac06cfd009a1cbf75358e09290f44b6e03a0403b1c439f2c60n => C + 0x06d454fada09c0ee05a50909f04e573629f8569eb6bdeeb2e0dd24fa8ad2f301n => D + 0xd94ce17300e7d81491e3be4bf15bf1067b0ff1274e40ec446d0ffe68328d9786n => E + 0xf398adcc48e3e4c1b61893824aff400258615492589626efb6709cdac60608a9n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x3514d81ad94f3f6bc155b591517f89728d141e5e5bf3631be6ae4fbd29c82476n => A + 0xb4496fde534f9f2bd2684ad3018f46291da7f0b654eeb4b08fd2fec4ae11d872n => B + 0x3514d81ad94f3f6bc155b591517f89728d141e5e5bf3631be6ae4fbd29c82476n => C + 0xb4496fde534f9f2bd2684ad3018f46291da7f0b654eeb4b08fd2fec4ae11d872n => D + 0xc46f62a9ca658252aa89c2584e7c42de9d2691085a1d09a49605a97fc22885b3n => E + 0x89924ae51f7cea53613127579a39494722b8efe423c362c985eb3e64512debddn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x356feca5afe6a57966a913fdd45d3f72fc2afb22925c64f652b04dd8180d9985n => A + 0xb30b109c41eff8eb5074048cda6d92c967a5edda94d52c1fe8e5cfd35b44bedfn => B + 0x356feca5afe6a57966a913fdd45d3f72fc2afb22925c64f652b04dd8180d9985n => C + 0xb30b109c41eff8eb5074048cda6d92c967a5edda94d52c1fe8e5cfd35b44bedfn => D + 0x8ca48da63dd5a4030ec50a8032bb784108cf4ab38d43029c1a20c606062e34c6n => E + 0x8794cadab88a88aeccd874183caa67e5e0840f2a52c21afc4380305ddb522daan : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc1a8f82a96d2f8bf68cc091911eb3ed24becc73ced34ef21c61ad7e3f1d7218cn => A + 0x5d2bdfb60a2e852d3cc1dbdd6bf3edea209a0e26c37379319c10dfd08ba4ba28n => B + 0xc1a8f82a96d2f8bf68cc091911eb3ed24becc73ced34ef21c61ad7e3f1d7218cn => C + 0x5d2bdfb60a2e852d3cc1dbdd6bf3edea209a0e26c37379319c10dfd08ba4ba28n => D + 0x5e6003b8648d3711c9200ad6b469f891a0557f68b0adb909af50735bb2da19c8n => E + 0xb1a425971c4470e6f1d511f1aafffe95fd02a55057ea84a542f680ed8eff5d77n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x7714216e23d792f3d7d8d8661bd916133a1f808aefe05ee249fcd1971ff584a8n => A + 0x9a24e1ebb9490c817fb5c5f3bd722bc8f6ef89836f1067acffbaf019d42dad7fn => B + 0x7714216e23d792f3d7d8d8661bd916133a1f808aefe05ee249fcd1971ff584a8n => C + 0x9a24e1ebb9490c817fb5c5f3bd722bc8f6ef89836f1067acffbaf019d42dad7fn => D + 0x46b1583b06e20450070024d51e6284cca6210740c42216444cd3b21e2df540f8n => E + 0x982d2ec537f916c2fb78f4480a7b07eaf212f4982da4327e2150f7c302580d4fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc5c4c11e31ee4870b4ade52b68e97aa5a7c2ee4d8afc5c7e6560ec6576085c5dn => A + 0x57b28d5e1a7d308eeafdded3787d55c84f69e3e4a83a6b699f4f1d4f6197be3dn => B + 0xc5c4c11e31ee4870b4ade52b68e97aa5a7c2ee4d8afc5c7e6560ec6576085c5dn => C + 0x57b28d5e1a7d308eeafdded3787d55c84f69e3e4a83a6b699f4f1d4f6197be3dn => D + 0x0b510b467833ff32f2092864e92ce28bd847cb6a2fb875f81a121d1ed6910432n => E + 0xe4f6f05c8403e63ec11337d2b42bda3cf2ef27f1bc7e553e32b7ce2fa6f4a71an : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x030e3bc22011c42b73dfa562911dbb82f3d7d0dc573b6f57792e9482d0796d32n => A + 0x7cf80ec9e70fa5cd1cdd1989d60022642d732f82c5a8d07d52395fe100080f12n => B + 0x030e3bc22011c42b73dfa562911dbb82f3d7d0dc573b6f57792e9482d0796d32n => C + 0x7cf80ec9e70fa5cd1cdd1989d60022642d732f82c5a8d07d52395fe100080f12n => D + 0xc97c0e170b999617b4459ffc4c9071f4104d890862f80ba5fe65f19f200ede6bn => E + 0x71d62051e9283dd9bde3cb2079542358cb8f2274a645085d49637dacebd5de42n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xcf81493a578034c2a8da9ad2052f8f6f591017cff974976fc81faa0f45782eeen => A + 0x0efe88703066b88ce1ac5528d5c2472c1ecf8afbb0b97039be8dbadfedc09ce3n => B + 0xcf81493a578034c2a8da9ad2052f8f6f591017cff974976fc81faa0f45782eeen => C + 0x0efe88703066b88ce1ac5528d5c2472c1ecf8afbb0b97039be8dbadfedc09ce3n => D + 0x4c935eba4a5921f4da3d76c3d432964a8ae666fc24e7e155fc979a4267a4ab8fn => E + 0xcbe6b0835c825c9b305c7865ef7294e2d67b014fb71e8231a021a05656528207n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x3eb5478f6ce697cc8a20706575e5038f5afb985be446729e11bc322abe94ea15n => A + 0x9eb39f4913714f37334bcb938ef3e0c10a6ccf3e4e0aca6fc1c3e118f5b0f970n => B + 0x3eb5478f6ce697cc8a20706575e5038f5afb985be446729e11bc322abe94ea15n => C + 0x9eb39f4913714f37334bcb938ef3e0c10a6ccf3e4e0aca6fc1c3e118f5b0f970n => D + 0x2e7502cd84e2aff2a4b6af971c07e677242c6ac82f442d5d6c069fe41d2f5934n => E + 0xe43c1a1335d2ee0b22fef14d48389e78afe2fcadb8d116452b058e83d21b2f75n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x036659955f4192bd022af120317242818b6f5ee1f3e87f4f85a260e5116360d4n => A + 0x4e0691066533b27c925b5202c0af6ba9de6ac3b8d114b90c7824db3f4f6c3d1fn => B + 0x036659955f4192bd022af120317242818b6f5ee1f3e87f4f85a260e5116360d4n => C + 0x4e0691066533b27c925b5202c0af6ba9de6ac3b8d114b90c7824db3f4f6c3d1fn => D + 0xe97dc5707374e99944871b55deed5350cf228a37d56551c450cbb281b3452208n => E + 0x97f3bf9c6d56bf1ed15aabf889ef70158987b5f572a5b4d3d30a1ac9ccf90e97n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x897a48e8ef42ade8c2af85be29c73506f103789ae03fa7aece4bdc6941829250n => A + 0xd889d3fc8acee6cf12c463fc6801458949829d341e81c75b7668b06e73b01484n => B + 0x897a48e8ef42ade8c2af85be29c73506f103789ae03fa7aece4bdc6941829250n => C + 0xd889d3fc8acee6cf12c463fc6801458949829d341e81c75b7668b06e73b01484n => D + 0x02cc147c18f49cd11b1e2eeb239c8a896ffac9127529e80e25dec906e05d3abfn => E + 0x384af6bc9f4455dc97b89eb57963fcde82e6e1e30963aec41f05234cb340f0f5n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa8b58ef1678acfb89c894b1d48947810423745a63d4b1a7f859746a55e953756n => A + 0x3552bdb862f64fd5e8c2673f4c86f6ac0871a5d365ea15efed12e2f0e0041941n => B + 0xa8b58ef1678acfb89c894b1d48947810423745a63d4b1a7f859746a55e953756n => C + 0x3552bdb862f64fd5e8c2673f4c86f6ac0871a5d365ea15efed12e2f0e0041941n => D + 0x4099f3ee0dff2d5a16f87e698d9f5d89135cb8ce2b2e74c07639ad26f0d3c6bdn => E + 0x4f02c5fd56a3b8a3c446c9fa22180cf6f27f806f8300920f031da1675f2ff844n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc4825b5ab067884704548ff4c0908faca175907ead1a660420bc41abe34908cen => A + 0x3c44cb43fc18892571b0e5ca206e623d3a412274d376fe0ccd62c4514fcda2e1n => B + 0xc4825b5ab067884704548ff4c0908faca175907ead1a660420bc41abe34908cen => C + 0x3c44cb43fc18892571b0e5ca206e623d3a412274d376fe0ccd62c4514fcda2e1n => D + 0xc007591075c9459bdc5935dbc0626dc697b46b018b8f45323fcf686bb7ae0227n => E + 0xb446c4b5886f4fa5358197b06d89cf5a1b60265f46d54a5d1111a9597c978139n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd7112cd655028fce845620e427712ffc00e4288e7fbc08131cfc108abe6b3680n => A + 0xdfa308f42640dd8ecdbc22cdfa28cc1739f35a043e5a98bd714ba66314eb1a41n => B + 0xd7112cd655028fce845620e427712ffc00e4288e7fbc08131cfc108abe6b3680n => C + 0xdfa308f42640dd8ecdbc22cdfa28cc1739f35a043e5a98bd714ba66314eb1a41n => D + 0x61ab6417f7873d0f87facb01be05d2c755daaf72fbb7edf1f65605ae3a5cacc9n => E + 0xb330c479bcccda42bda5c9bb957e9fa47780288e17f4afd996e4de722f690074n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x457f1373ec139136fe046d6e1bb6696c181f28199248eb6e7b511f0fb763c8d3n => A + 0x6a961817a20f481f5e7c1d26fd2e80c98a19122ce2d77fc8abd1657faa944608n => B + 0x457f1373ec139136fe046d6e1bb6696c181f28199248eb6e7b511f0fb763c8d3n => C + 0x6a961817a20f481f5e7c1d26fd2e80c98a19122ce2d77fc8abd1657faa944608n => D + 0x20dd5c9606863bb8b50e733b06d61339e4d1aa989c007351fadb48a2f5217360n => E + 0xacbc1d33c06095af627bd111df4e6e59baa8a245143c9ba01c86151ca641763fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x6c516f7dfaa82ca52901f1b0079ced7383c7bc058e66c22aa91242ac17db6b8dn => A + 0x09cba5f51112fc86b754c16dc3f5b1b64083c9e4c41c35d320a5733d3f80357en => B + 0x6c516f7dfaa82ca52901f1b0079ced7383c7bc058e66c22aa91242ac17db6b8dn => C + 0x09cba5f51112fc86b754c16dc3f5b1b64083c9e4c41c35d320a5733d3f80357en => D + 0x1867de8846eb9c9a44e7985701ff65d4865d98cf110913fc1a180dde8528c5e9n => E + 0xf08d466745cb1b1bb741e530f8901392acb9a1bc0d3ec2f2b6ad8d8962474b70n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x39f9cb8bc24fab1271070f036cfc2f1a26655d70d912ebda59d4d7d2df30d700n => A + 0x5beae11ade70929f3c5aef8b97c399732b66598cdab15c007c99ec4df57ae901n => B + 0x39f9cb8bc24fab1271070f036cfc2f1a26655d70d912ebda59d4d7d2df30d700n => C + 0x5beae11ade70929f3c5aef8b97c399732b66598cdab15c007c99ec4df57ae901n => D + 0x9d174be0bd173d9e3c1117b556085c019dedef90e0b14c4443dca96e16a82dden => E + 0xe1143b532ebf34dc57d3cf68d84acf3e613520d17d5fbcba4495cb5af87a4cban : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb0b8303a58a7dff3483d618f8bc3e0d6b38a0df0d1e7f6112c327006b25eb77dn => A + 0x0e464e40f88f80503c54a23ef9ffee414989614c78ae3545bbe30842669f38d7n => B + 0xb0b8303a58a7dff3483d618f8bc3e0d6b38a0df0d1e7f6112c327006b25eb77dn => C + 0x0e464e40f88f80503c54a23ef9ffee414989614c78ae3545bbe30842669f38d7n => D + 0x0d90632637266a5c9eb136d81feda3f2639f6ddd03f7a23e93cfbc79a61cc251n => E + 0x8c14cdcd99fcd97e7fe901ffeff41b0fd8f74d2ae1a30d137eaa90c3bc14cad2n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd5325666c12d37783c6010203428997be4138ffa1f3b992f564280ab3d89c9a3n => A + 0xb17affa007a78d00a1bfc1484a7aad0c8167d6271358747e11df61304c3d3b29n => B + 0xd5325666c12d37783c6010203428997be4138ffa1f3b992f564280ab3d89c9a3n => C + 0xb17affa007a78d00a1bfc1484a7aad0c8167d6271358747e11df61304c3d3b29n => D + 0x604cc9ccf75994185aa3a6e6991b48a9cff981b6c04bf96554e4c31430bbc010n => E + 0x9140ca7711594279e0306bd8f943f85a8b8289b3e5bd9822fd3f330b1c4f4fb5n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x22b3e06acc8aeac2712dd33c93b057394e48674be9b9d27284b9e9366bdbbeban => A + 0x9c32a32ce561f1a18093a664a44bb48205fe5e37a1be3815c27dd6ad14bd7537n => B + 0x22b3e06acc8aeac2712dd33c93b057394e48674be9b9d27284b9e9366bdbbeban => C + 0x9c32a32ce561f1a18093a664a44bb48205fe5e37a1be3815c27dd6ad14bd7537n => D + 0x42c4a0bcd726c6c6699c60856cfbfbe9a21299124b311cb10d838551020872d2n => E + 0x7d08b1e416bf693405eff38f9381eefd013fbba42c12abcf4c86ea979df2809fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa096c33abe0d43b57131c369a354c475fb4956a279eca75871204f6364769210n => A + 0x2d1b8412f5bc1e38cc856c85b769eb8718a16ab87f4ffd86e62ead5b78d1fe1bn => B + 0xa096c33abe0d43b57131c369a354c475fb4956a279eca75871204f6364769210n => C + 0x2d1b8412f5bc1e38cc856c85b769eb8718a16ab87f4ffd86e62ead5b78d1fe1bn => D + 0x74f507dc0b59ecf541d5b27e19f486ffb8832bc5ff8da8569e28bee5993634ban => E + 0xc4211a942066d94de9ede6dd4b9a9c70585f3cec4e8be6a37220b08546bb4189n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xade8dad5983f658306bb674757e86b6bc90357844a451d1191959afbf43520een => A + 0xaa7ae42d329fb9d7abc469e7bc9f194e6f4e4d7103d154c9fc29c981739675a1n => B + 0xade8dad5983f658306bb674757e86b6bc90357844a451d1191959afbf43520een => C + 0xaa7ae42d329fb9d7abc469e7bc9f194e6f4e4d7103d154c9fc29c981739675a1n => D + 0x7b737efa6fd174f276890d4d002e5947d246ff802f97b7425e1d8911e358fa0fn => E + 0xd65672d18eada10a2a52ed674bcb26688866b3d4a13bebc3e31d947b44884ce2n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8ca93a833f8b1ded44c92472a8545d215b6f66e034b99ff9f8b4e0847ec34781n => A + 0x4fe5235846b8722f943283171327626238ea524c86733c4a1f2b78f16447a7fan => B + 0x8ca93a833f8b1ded44c92472a8545d215b6f66e034b99ff9f8b4e0847ec34781n => C + 0x4fe5235846b8722f943283171327626238ea524c86733c4a1f2b78f16447a7fan => D + 0xd11c773d1d6773b2e1b84d30a18a4745742d5fa411336235bedc24142855f534n => E + 0xd833d3e678a969d783cfec82bb5ffb27e9810ee201ade7d03898f0178f904a22n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x015c7240c0e5cbf281e6ad4e7abd8b0f16e576110207659f3bb19381156cc830n => A + 0x1c10bab163d7a30dff31234efdc5ecf2b1b06ca3635024b8b40325c7505818bcn => B + 0x015c7240c0e5cbf281e6ad4e7abd8b0f16e576110207659f3bb19381156cc830n => C + 0x1c10bab163d7a30dff31234efdc5ecf2b1b06ca3635024b8b40325c7505818bcn => D + 0xb341c61bb3bca31048871f38f75815a646b6940d19c07e9be0e4dec11ccc4f1en => E + 0xb7beb1ab40e03b32a033a5cefc8a057e5b898d212c710767e77e77d8fe858e42n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x1907f4ac54fbe154ca085227c9e959a96025666f45cbfadebb724abfebe886f9n => A + 0x1508fc0ebc869cf81744b7bd795adc6e6df33857f97060128e30f89dba85f93en => B + 0x1907f4ac54fbe154ca085227c9e959a96025666f45cbfadebb724abfebe886f9n => C + 0x1508fc0ebc869cf81744b7bd795adc6e6df33857f97060128e30f89dba85f93en => D + 0xe71a58cf4b44a46ac74213c49758a474ee0ebf01b2e72ea76efc120aa77f7d66n => E + 0xacbd0930d372f2ebee104bfe0d35e7afd67946b59d43f09e7ab55a7d25142f75n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf7738b1a9eab496b9e3d687cc876c0470d9af2268ef6cb0f4c7c4ea94b632a12n => A + 0x8af2267b90a4489f20cb4f96c7475e640c96392ed1e1d670fa6944adb2385556n => B + 0xf7738b1a9eab496b9e3d687cc876c0470d9af2268ef6cb0f4c7c4ea94b632a12n => C + 0x8af2267b90a4489f20cb4f96c7475e640c96392ed1e1d670fa6944adb2385556n => D + 0x27679ce6394a6c4707ec14f649c0083f6dac7ae5e51d695d056b07cda2b1bd45n => E + 0x618bd1a3ff080a2a88cc9e17cde403cfce380517228220e4283077a139a44f72n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8c8052169ed0921be797ddbf515c127ba6e69d2672730f0bea40548986ff5384n => A + 0x065795f5a1c6c4bce543d1b28f7662b2439c6ecf562316c82f4a8fa24404a1a7n => B + 0x8c8052169ed0921be797ddbf515c127ba6e69d2672730f0bea40548986ff5384n => C + 0x065795f5a1c6c4bce543d1b28f7662b2439c6ecf562316c82f4a8fa24404a1a7n => D + 0x39995793c53c4ad007ddafd85d47e46faa021a701c6f78af08542ed2be905bc3n => E + 0xcf9d3fb5145fe226c529bb99b8dbabaae5d1ce7834f6cfbc08bcedd09b5b2330n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x90717c71d2d2a7d89df7beca2175c3b05cd4d55809e4a7f08bb63dd156044299n => A + 0x6abe6ae759afc26abe62430c356bdf097a112bc8d3df5dfcd0b647e7405618c8n => B + 0x90717c71d2d2a7d89df7beca2175c3b05cd4d55809e4a7f08bb63dd156044299n => C + 0x6abe6ae759afc26abe62430c356bdf097a112bc8d3df5dfcd0b647e7405618c8n => D + 0x5d3d0842f85792324af14c079f91bc19bfa2bdfdd661602def32ddf75e8ea1aen => E + 0x9f18d32e2af07f8b28654e9fe5363e66131c5787541bc57d73404ae815b3565en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8569623ed4c5fca42252aae04c4e521849ab0066a7a36ddcd226860705646b74n => A + 0xa6e819c225a6f91a2dfd0462b756dc5e1c142c04e9bcd0acecd71cca37f741c9n => B + 0x8569623ed4c5fca42252aae04c4e521849ab0066a7a36ddcd226860705646b74n => C + 0xa6e819c225a6f91a2dfd0462b756dc5e1c142c04e9bcd0acecd71cca37f741c9n => D + 0x4d4567e8cb1544a9a24f76f441b7babcc9d89455dc8a46caebc98dd53c2cce0cn => E + 0xecfed79287f3decdd8fc8f73ad60739b9f4b3749ecf83f79d85e1ea4d7108d7en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x38554fb2aae6976716eba348da6898ee6ad94eaec5dbe07b28209db15eab9acbn => A + 0x490a8e132d51387e1a05d6b60817ebd9888deb53f0567a8375e6b25c51ce49d1n => B + 0x38554fb2aae6976716eba348da6898ee6ad94eaec5dbe07b28209db15eab9acbn => C + 0x490a8e132d51387e1a05d6b60817ebd9888deb53f0567a8375e6b25c51ce49d1n => D + 0x4e813bf1e4d30a74931845745158ecfe6fd7ebabbaf9740797f78d57ef24b8aan => E + 0xaeca2981c2faec85c2f49ada05be5a2e4fa03ed9e4fa0bf4a324717cb597ab92n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x58251770ee357a02ea36203e6fb21d5ead29fe7bf4be54515f7e5dd77d870dbdn => A + 0xf803ae6b2956675f6e92daaebb1407d2e5421eb1875eeb62eb1e21c2b23f5d17n => B + 0x58251770ee357a02ea36203e6fb21d5ead29fe7bf4be54515f7e5dd77d870dbdn => C + 0xf803ae6b2956675f6e92daaebb1407d2e5421eb1875eeb62eb1e21c2b23f5d17n => D + 0x7b3630775e367f7482290664851feb56c516d865dd9a8b1f126f0986c23a00c3n => E + 0x600897ed87953997c42345db1d69b307691ca34737ef66f05b65a22bbaa099e6n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x03b5eb16583ade72b86bdd9adbcbdd646d02a26b830e1685b88e6c8f9861a37dn => A + 0x41bb741d38cb127dc9808b1d760f7f013e56b20d93bb6d17644427d198e718f6n => B + 0x03b5eb16583ade72b86bdd9adbcbdd646d02a26b830e1685b88e6c8f9861a37dn => C + 0x41bb741d38cb127dc9808b1d760f7f013e56b20d93bb6d17644427d198e718f6n => D + 0x3f95faf090353d250bdb370fddcb336e3e2fe5b12243369525836f798e288376n => E + 0xbfde84564d0901f40ac1c798f65ca6a77bfeaaaf130411d71f843b5176e0d949n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x0d91b97928ec4f8c662cb5eef638e553dd53f7e93d1652ab42629cc7dc1a052cn => A + 0x8767379d9d3a999820d5b2d6eb90c577a492fa198fdf400b1c6ec23e384bcd17n => B + 0x0d91b97928ec4f8c662cb5eef638e553dd53f7e93d1652ab42629cc7dc1a052cn => C + 0x8767379d9d3a999820d5b2d6eb90c577a492fa198fdf400b1c6ec23e384bcd17n => D + 0x55a9596876d69639e86db4095cc57ecacacdedcdd0543dbce8198639dc02e60bn => E + 0x166865a7ac764aa08c1192672d875ad11329b5e4a9a8ad1cb60a3760104e9776n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x7968aeaa15c6339af0e1d2219dc6c8904936333c32d74a2849763033cf7b6e9cn => A + 0xc64e7a09885ebc1cb83b38f0eb97379da918d3041ebd730ec6286c62f4bcefb7n => B + 0x7968aeaa15c6339af0e1d2219dc6c8904936333c32d74a2849763033cf7b6e9cn => C + 0xc64e7a09885ebc1cb83b38f0eb97379da918d3041ebd730ec6286c62f4bcefb7n => D + 0xe96307e4284acd6a802c323639068a8a80a66722cf5f796de873350157b45b0cn => E + 0x3f1325d902aeb0a4f10a48554b657748f59d8ace1893dd0ac29d96c0a6ea87bcn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x3455747190eafcb6d8109e28f275380f9ef5517cc3659e1b97d83d763c4a93d4n => A + 0x76076970989d319b01329cd058cf3f2335c0cff02f46474e93b26c628d6ba241n => B + 0x3455747190eafcb6d8109e28f275380f9ef5517cc3659e1b97d83d763c4a93d4n => C + 0x76076970989d319b01329cd058cf3f2335c0cff02f46474e93b26c628d6ba241n => D + 0x574bc965882c747d1521062d02e892fb60fc7e61cb6feb89f7b0db13a25cf2adn => E + 0x36eeb22b85afa71527bad7d13405180057f47064aaeeb62d022f594abb4e7f2en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe3aebff90cff066310181d68979bbe33a30633619566d55ea33ecb35f7646f41n => A + 0x11881e6f94f96343bc8413f801af7dedfba63649b18121517b0862cff15e3490n => B + 0xe3aebff90cff066310181d68979bbe33a30633619566d55ea33ecb35f7646f41n => C + 0x11881e6f94f96343bc8413f801af7dedfba63649b18121517b0862cff15e3490n => D + 0x36db8e59cc0e8752ebc8358a6c2c6ad67b418105a91135895f000c93274c75a6n => E + 0x1454ced05d4abf649ca2e4369d3f503e8383224b05cd7ca85899cc9be57647a0n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xafc2f2eb6ef19279f2f5c835f99a92f13259a1a0fe0c255f65765fe11186c93en => A + 0x99e5af54a2661842a640e06d08128ef13b96875ff1105b5cdfb0323c7d441b4an => B + 0xafc2f2eb6ef19279f2f5c835f99a92f13259a1a0fe0c255f65765fe11186c93en => C + 0x99e5af54a2661842a640e06d08128ef13b96875ff1105b5cdfb0323c7d441b4an => D + 0x8f59ac19baee9e1e51ab61fb116bd18ec12bed7eaea155bd53f067dbfbf371e1n => E + 0xa1c6ff55ae5c93b90560d704a519f4db6a4ccf5bdde2fdff41265b58f72f3e04n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xfa4ce9bb4812abac404b77ecee5cf454f0a5ad326bbcb37f32ef305acf8673b5n => A + 0x2ce644d17c25a201943aa771fe942ea715d6fe00bab4f6882c6aa936a2876c80n => B + 0xfa4ce9bb4812abac404b77ecee5cf454f0a5ad326bbcb37f32ef305acf8673b5n => C + 0x2ce644d17c25a201943aa771fe942ea715d6fe00bab4f6882c6aa936a2876c80n => D + 0xc75d40c4c6cad5eeb16019029a21bdf38c3053fc50848cdfd7041bec5c8c362dn => E + 0x443b34b3cb29dfe8b17ac24899d4c91e7a7b0bc323f8175193ad703030651f55n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x16c7d62fea81dbcae68c6961dff7c16b72e2ad3582b2dd227bba7b2bf717963an => A + 0x1d60791b799f74b7f0935446f6f8b3209fbabd07e0c9857f3feda7af3e829cf2n => B + 0x16c7d62fea81dbcae68c6961dff7c16b72e2ad3582b2dd227bba7b2bf717963an => C + 0x1d60791b799f74b7f0935446f6f8b3209fbabd07e0c9857f3feda7af3e829cf2n => D + 0x74e25aa546d7d5082f646d5ca12f682eeedc4d252cc8eb64d4c2b9c06dd22eeen => E + 0x1dd7f57b82f2c4f783c92da1fffd915d4b632dd2f6d871de7b2b5ad34ce379b8n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9869b517d915b83447df4c2f7c49a31e6939b45812e8c148212d6fea45b9b0fen => A + 0xdafd7866e7ae202c023523f7ec55ee88c7380106e3b22d805c235d622b66aa90n => B + 0x9869b517d915b83447df4c2f7c49a31e6939b45812e8c148212d6fea45b9b0fen => C + 0xdafd7866e7ae202c023523f7ec55ee88c7380106e3b22d805c235d622b66aa90n => D + 0x52b82ae56e2f02121da7217b2215a4e71d42071ac0d3d7440f08190ef98b00dfn => E + 0xca825af490059218400c9b7c18aae481136ff1609b72c0020121170a1ae5ff86n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf64b9a920efdec443271d5ff7fb1034d46ec1b165e840fdd4291f0306784582dn => A + 0xaa071faf13495c41379427fc0dd24ee28f156798bf58857e2ec16a9856b99c26n => B + 0xf64b9a920efdec443271d5ff7fb1034d46ec1b165e840fdd4291f0306784582dn => C + 0xaa071faf13495c41379427fc0dd24ee28f156798bf58857e2ec16a9856b99c26n => D + 0xb9c63274b41ca30d16c43b72b3ec1c2e11e64de3abd0babe8c6eef25aa0ebe85n => E + 0xe02974f14c7ba4e1d0f8be7540cfabcb79e8e02529b021eff38912cb3557642dn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb9fcb28ee45a046d95d1f66af679eb67d8148ec6e15ff55c685133f100eb57a8n => A + 0x179fae795109efc59a711db74eff6619b8f696025d9f45657fdbd8be95047a28n => B + 0xb9fcb28ee45a046d95d1f66af679eb67d8148ec6e15ff55c685133f100eb57a8n => C + 0x179fae795109efc59a711db74eff6619b8f696025d9f45657fdbd8be95047a28n => D + 0x33597704554ee903d485e5b6f11704f7fbf4320e1cadff61a67676c21040640fn => E + 0x8426056150a131e419c36f64fcf2e515df0c94b8e289834feab622677e4c777fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x598ac3921aac0f7b14eef88097b6950e155654c0152ee8f254fb11199fcf3d82n => A + 0x3ebdca0e8425fb880dea3c09c34a134dc6826191f24335e66550ee9ef08bca9bn => B + 0x598ac3921aac0f7b14eef88097b6950e155654c0152ee8f254fb11199fcf3d82n => C + 0x3ebdca0e8425fb880dea3c09c34a134dc6826191f24335e66550ee9ef08bca9bn => D + 0x04aa293b10c926a891dd7629894ea4634de842b23d3566ce4a8fbc5dbe0dd1c1n => E + 0x88b574c7cd087c85363ff20282832adf1e7381b9dcd3b0495beed0ab26300161n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xfe11aa258ab2d717694580fea68435e0fd402c396ba3cd49f60ed5a2934189bfn => A + 0xa19fea895aca01577f0b5eba7100b36a82ced9664f3673a1330ea6e5ccfc1550n => B + 0xfe11aa258ab2d717694580fea68435e0fd402c396ba3cd49f60ed5a2934189bfn => C + 0xa19fea895aca01577f0b5eba7100b36a82ced9664f3673a1330ea6e5ccfc1550n => D + 0x7f8aec5c3c385d05d8cd1d8a9f0a0205aa3809ae8350cf3dd34739f0b0819e86n => E + 0x026fd20cb86b1d4eac43b249baf69ec2ac152e53d3f9af4145afe2a56f1dd76fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8121cef34530e165bb50772b42ec6af1254675c919dcecb63b9d596a5ebdd2b0n => A + 0x82d6ad4437a2bceff7e3101680bef8853de1a6d3b23075875a90a087aff9991an => B + 0x8121cef34530e165bb50772b42ec6af1254675c919dcecb63b9d596a5ebdd2b0n => C + 0x82d6ad4437a2bceff7e3101680bef8853de1a6d3b23075875a90a087aff9991an => D + 0x16cede85410f0ab770bd872e2abcd0d7bfb887010a866919cb5a53e331d0f1fbn => E + 0x57482a0e0fbf441b7afdfdd74a1b77dc2f38bd608e87bfc52cb2e9d03c1cd72bn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xdbe808e60623a9caa882e36cad3d7518eb370833e3dd7773a957015a3b248b89n => A + 0x46cbad77e3e1da19064e7a62dcf90b5b3d99f2d7b8147f3ed7546b80612f2b63n => B + 0xdbe808e60623a9caa882e36cad3d7518eb370833e3dd7773a957015a3b248b89n => C + 0x46cbad77e3e1da19064e7a62dcf90b5b3d99f2d7b8147f3ed7546b80612f2b63n => D + 0x88b59563cf1bc70a98f11a85a42031fad310f87da297554d938cca6c8cd4a3fbn => E + 0x602dc36fce1c85ac7ae93bcb3e9c6b3e867350b6effd55787a91afd53347f146n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xbcaeb4f4864bf03e81154ac8bbe41655c42e98a5edf259a620479406a943b4f5n => A + 0xd52175d416c44b9a60279854d81f7ba2f89117ddc0728059700c011ea0615e84n => B + 0xbcaeb4f4864bf03e81154ac8bbe41655c42e98a5edf259a620479406a943b4f5n => C + 0xd52175d416c44b9a60279854d81f7ba2f89117ddc0728059700c011ea0615e84n => D + 0x79a4925b7dccc21bcd45e98cd5a4ec0a95c8d5042901a4b6d1366519aaf52311n => E + 0xf5b0ac79d36d58828d92fcade5bf875254834aed004306b1a2a25496e1027be1n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9f3ca68ce19beb5d5f997ce346063d8e5babec8d439d41a026c811f4446f299bn => A + 0x49239b10b43c868c9553d3c56c0d0db2fe366438d11f2723db88df52318adb86n => B + 0x9f3ca68ce19beb5d5f997ce346063d8e5babec8d439d41a026c811f4446f299bn => C + 0x49239b10b43c868c9553d3c56c0d0db2fe366438d11f2723db88df52318adb86n => D + 0x666aa1c4501b0b759753aa03416ef9a44c30df020da52f7eb1cb33b55d39150en => E + 0x8aa220741f8d9ced957370505fae7fbbe25b97e4917eae7814dd7f15c5d4f242n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xdb3debb29528c036e113dfe7aed9bd2683ea3c241208fbf41c902f12aeba651an => A + 0x70bb5c52155aa0a2f820ee2827972f55b7e4432804a406287fb4117f7ca3f829n => B + 0xdb3debb29528c036e113dfe7aed9bd2683ea3c241208fbf41c902f12aeba651an => C + 0x70bb5c52155aa0a2f820ee2827972f55b7e4432804a406287fb4117f7ca3f829n => D + 0x182f65b391a3e9429a0b26adb086063ebc6ba132b5b31e8ef3793ca59da7220en => E + 0xc997ac822abc947f251bad7bb7e479871e8ec8b11229298d85de9f2e4b232ed8n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa7112225ef86f7cf4a623cfc898153cff85023b9d0e8e7b1eead05b850dc87d9n => A + 0x74bac9ce5f0b194e3098f5c2349cf63b7c500e59aa7ad12285536b9eb5c4d5f1n => B + 0xa7112225ef86f7cf4a623cfc898153cff85023b9d0e8e7b1eead05b850dc87d9n => C + 0x74bac9ce5f0b194e3098f5c2349cf63b7c500e59aa7ad12285536b9eb5c4d5f1n => D + 0x83748714fcaa4532804a9c5cb95f1b3e41818d67c9cf2a77d445eee9b9dfa049n => E + 0xdd7e9548a9c4153ef527d5c2096e99d64c81fab0d17de01d483e5ea4103af801n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xbe4fa14ffd43e2002f4794b8ccada89746c4e0a694ef4ab9e62fccfa63063046n => A + 0x1a15c990c2b8a7c77865aacd329f40bdd1b4e6da20718ae20eb35f19bed93595n => B + 0xbe4fa14ffd43e2002f4794b8ccada89746c4e0a694ef4ab9e62fccfa63063046n => C + 0x1a15c990c2b8a7c77865aacd329f40bdd1b4e6da20718ae20eb35f19bed93595n => D + 0xcc0a53b851a981167e1b974037d5ef7d80cb0c4a2bb280a56e5ccc58df93f11fn => E + 0x34dceade480f103ad5586bbaa3f3fba7d2313ff146f59a26bb6c8c420480ff14n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x2c26b3a4afb9af388448718188b81ad1d5295c3229fa6216734a809d7e5572a2n => A + 0x9441ac581a82cdb7fde669b6ac85a7e48d094fcb3ab2aea3a2557d27e07d7dc3n => B + 0x2c26b3a4afb9af388448718188b81ad1d5295c3229fa6216734a809d7e5572a2n => C + 0x9441ac581a82cdb7fde669b6ac85a7e48d094fcb3ab2aea3a2557d27e07d7dc3n => D + 0xeb7c27d76eb2a7a40521ffdae640810ac68a4ab5a5b9eaa30b571fb0e8adcc4en => E + 0x40357c3f43ee6a6762af5588966d61d88a9314925ca20e3d7f608ce9d435f986n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x27163948cdd65229859d18a5960db853fa56620b1b4682965c20a7b2958bd8a2n => A + 0x10acb5f3f9192b051f4781cf0ac8f382ec117fa36a988872bcd9655cd6578231n => B + 0x27163948cdd65229859d18a5960db853fa56620b1b4682965c20a7b2958bd8a2n => C + 0x10acb5f3f9192b051f4781cf0ac8f382ec117fa36a988872bcd9655cd6578231n => D + 0xab8a31edb66400b9f3850ac1b374423a49161d9f9d1a9ac40df05c94fad8c6efn => E + 0x77b1d676b0c6a6b8966ca263b59d61adb30f2d07b8219f8b2cb825aa7b0ead68n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x4188ee98672002457d07e792a517ec366e9477f1ffd9ef05a29dc699330a3c80n => A + 0x2730ab0d95a2eec67a5675131f1aa05bacb73793eef08fbfdd090c5645034e87n => B + 0x4188ee98672002457d07e792a517ec366e9477f1ffd9ef05a29dc699330a3c80n => C + 0x2730ab0d95a2eec67a5675131f1aa05bacb73793eef08fbfdd090c5645034e87n => D + 0x33920c4687c2ccdb14bb0d27b9819b2de57f1aa4558a1b533cc7fd7a7760b5a7n => E + 0xe12a1617a2fba9298a959d03782f3da4f28494f9c1623f8685f2b9669628259en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xbbb4a6a7f0efba9f83cd480b858cf1d48f5a4949ef0d3a14d4cf7efe8e63fbban => A + 0x2021926a78ca4ec553a8575f633c46ad9cb1e912508c39d015520b33868d32a6n => B + 0xbbb4a6a7f0efba9f83cd480b858cf1d48f5a4949ef0d3a14d4cf7efe8e63fbban => C + 0x2021926a78ca4ec553a8575f633c46ad9cb1e912508c39d015520b33868d32a6n => D + 0xa8979db48930f36240b06b94826d069ed8468a5211d26398d906fb69e6a28baan => E + 0x307c2ee457f5f9a963da17c8d0fa5f0567f362970f68102b3027f391df961adfn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xebb9cff29315f5aa90a28f77f8320af338b6c8f761011362e69d919ce7f30b2fn => A + 0x100ec0f417f23b72ed934cad21e9cad32dc3e2ae277425bd5b470bfff2831cafn => B + 0xebb9cff29315f5aa90a28f77f8320af338b6c8f761011362e69d919ce7f30b2fn => C + 0x100ec0f417f23b72ed934cad21e9cad32dc3e2ae277425bd5b470bfff2831cafn => D + 0xeffd22a808a83e62fa3a3add291ac7d06c1a4ec10c9d243e7dcbbb4c91903156n => E + 0x69ac619be595c63232415ce80827ba33511926dc5d29e40de3a7836194b828d8n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x30b072124115fdd42f6879cc84644fe069584816d2ddc7a50fa85ddbd5585eb3n => A + 0x7e4dc72c7330cc0bfa11a199a18aa803c75d653312ee11056c6f23408e74e7can => B + 0x30b072124115fdd42f6879cc84644fe069584816d2ddc7a50fa85ddbd5585eb3n => C + 0x7e4dc72c7330cc0bfa11a199a18aa803c75d653312ee11056c6f23408e74e7can => D + 0x2fb76f83c26141e5d20b73188990554fff4feef340893c5d222998c07affe60bn => E + 0xdedd2ba4678a5dc89a484dc8fa486ab6c5bfb3656c2f46ebc0c8878ac9f75359n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xfa86270f43cf6bf8884afe0c9fbc9dd40efca7fbe26a44fe1c0b370a031dc417n => A + 0xe566dafd6ec4cebc41355431c9b3ecbba6c982120d07cdd2dd1118659b78e056n => B + 0xfa86270f43cf6bf8884afe0c9fbc9dd40efca7fbe26a44fe1c0b370a031dc417n => C + 0xe566dafd6ec4cebc41355431c9b3ecbba6c982120d07cdd2dd1118659b78e056n => D + 0x55931111b2dbe12b30201e588bb0051fdae480e53ddd0f9967b21c79826af75bn => E + 0x44621e4a6519e820759b04074f77878fe0cee9d5c1e480cfc0c5403bdc013c13n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe7ee4a6a4b39e916669a91e27d08862bcdaba191a695d239e631073fbd797919n => A + 0xbaf3502fdfe7f11590e301175da4b41ec390f2cf32312192a57ded9301f230ddn => B + 0xe7ee4a6a4b39e916669a91e27d08862bcdaba191a695d239e631073fbd797919n => C + 0xbaf3502fdfe7f11590e301175da4b41ec390f2cf32312192a57ded9301f230ddn => D + 0x84fe89abd446f46a5073eb43ccb0bc31278becc252da621d244a0b4cf68352a0n => E + 0xc8d862dc0e65ed8d6b05571074b30ec57dce227391220007fbd4e887e98bf7ban : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xbe17b386553e1b0e7e754d7380a69b758d014514b3ccf7fa661fc8c610789140n => A + 0x2ca65d9720238ae99352457d694a9b5850bbe5adf8858dcab9e920c4fef24b2en => B + 0xbe17b386553e1b0e7e754d7380a69b758d014514b3ccf7fa661fc8c610789140n => C + 0x2ca65d9720238ae99352457d694a9b5850bbe5adf8858dcab9e920c4fef24b2en => D + 0xe339d5682f9945a1c4f6b4bbf3770ab47472f028e79f0cae1909691a54eacb15n => E + 0x72941929e46fe4c5b9bec8df36f75237100fb0b2125919c5881c717cb4e0d211n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9a5a5313b6754d5cec62640ae75c2acb1b148820c27ed97e44054628a6be5a6cn => A + 0x8b15b11438de7df76d0a1fd01ee6001ba358d0f2ea0cf288ac62e96bf09c0b00n => B + 0x9a5a5313b6754d5cec62640ae75c2acb1b148820c27ed97e44054628a6be5a6cn => C + 0x8b15b11438de7df76d0a1fd01ee6001ba358d0f2ea0cf288ac62e96bf09c0b00n => D + 0xf110821fdd1b3c72ab56a8499541c72eab0396ce961a0a4b546554339184e1e9n => E + 0x1cb8a813693eea7b6c087a0528fca618dada0c6fc7dca6a22d06407be354d743n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x705561b9c66034f390695fd09134be6bb9e05c1a77061ed22441a575d18930b5n => A + 0x00a6585734f58e6c65bff24900add3d02f0a6f51dafdae242cb74a1789c51338n => B + 0x705561b9c66034f390695fd09134be6bb9e05c1a77061ed22441a575d18930b5n => C + 0x00a6585734f58e6c65bff24900add3d02f0a6f51dafdae242cb74a1789c51338n => D + 0x0f6effaa72a6e0e6d51490558a89dd02d1d9e3c09a8ae7ab602c07db0dd1a117n => E + 0xb3c116eeabfbcfaf68d686e0c65ca8f48ca52454384624be4f28c4099ef59c93n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xbd07ca37ffb84bf7ab3d85c9f791be37a92356083708020890546a1408c52c77n => A + 0x0527960c1cb9814af5cbd752b9c0bda57a8b81a02cd0eebbc1a7ad95a510ee45n => B + 0xbd07ca37ffb84bf7ab3d85c9f791be37a92356083708020890546a1408c52c77n => C + 0x0527960c1cb9814af5cbd752b9c0bda57a8b81a02cd0eebbc1a7ad95a510ee45n => D + 0xa085fb0b2ec5f26c2d73fe6dbc8f0ad243d9875c87e4dfbafcfc1dd390e5d46dn => E + 0x877f3e0d252f863ee23d54c425bf2b677900b1b7570587000e2366415b493501n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe932cc99d7c46e844a8e94893fb5f9dc80658fae667044acb65a9bac4b911771n => A + 0x35329f9b3276221f270dcdcb3137591b20c8caa71a28268590cc3c46301fc34dn => B + 0xe932cc99d7c46e844a8e94893fb5f9dc80658fae667044acb65a9bac4b911771n => C + 0x35329f9b3276221f270dcdcb3137591b20c8caa71a28268590cc3c46301fc34dn => D + 0xa0532d2aef2c9d67a1e448e7d57e61b997c46f496095dd4a5cb11e7ed0017de9n => E + 0x39e73004b0d9ff9d419b80d195a66091750d0223e8aa02f30f43446d0d63c1f5n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xfb28b58e4405e3982f21c8bd61c8a86676fc4b3ec3406d83c3df8b89188f419an => A + 0x8d37245be6ca02ed9676cf0144bc0e28a94a82d12240c0a5198c1c7d76773462n => B + 0xfb28b58e4405e3982f21c8bd61c8a86676fc4b3ec3406d83c3df8b89188f419an => C + 0x8d37245be6ca02ed9676cf0144bc0e28a94a82d12240c0a5198c1c7d76773462n => D + 0xa9cb45e5de10e0e116094f588c92ca3ff057dd8f78fcdd00746a7235f374c745n => E + 0xd8f5ef4cbe006bd2ed2ebcdbddc57a2b9046be0c4338f5951cfe6e0345ee0e9bn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x00adb7cee3b8eef9dc03caf17918fa70c8a63fe0bd6bf389f0139895e7ee0dc8n => A + 0x09b1dc08d050f078ab5ca050e6ee8e738e054902da4058cb74a53cd7f6961384n => B + 0x00adb7cee3b8eef9dc03caf17918fa70c8a63fe0bd6bf389f0139895e7ee0dc8n => C + 0x09b1dc08d050f078ab5ca050e6ee8e738e054902da4058cb74a53cd7f6961384n => D + 0x298b84aa48d908e2cc1d4a237e51f51dcdebfb5d0a6114d7588716779dd79b51n => E + 0x8561a3dfd3f9b85bab2d60f87944420b36ec6b51408de68c356d9fc34e12d872n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x0511936ab792682a5cdc21434d5748b36e280810eb7b2bd8bb6df91105e41aa0n => A + 0xfe22a519014ec4dac6f5a9e0b3a253432bba7d3f09b2e8d7f92740fbb73bd599n => B + 0x0511936ab792682a5cdc21434d5748b36e280810eb7b2bd8bb6df91105e41aa0n => C + 0xfe22a519014ec4dac6f5a9e0b3a253432bba7d3f09b2e8d7f92740fbb73bd599n => D + 0x965bd298314381f0aab878c08cc6977440c65ddf880a42fc6301a31201e756f0n => E + 0x090a7303ebb3d30c819e1dd35b2b616b4b0f9858f3a07e7ab51b5c3139d393e4n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8f1d1d8f59ad92abb5aef578c764cdecd7f5fb164b479f75e28a655ec8dca4bdn => A + 0xcb2efb7958d939bb8930355973284a0f83b6b9da802bfc086bc09b8cc29b01dbn => B + 0x8f1d1d8f59ad92abb5aef578c764cdecd7f5fb164b479f75e28a655ec8dca4bdn => C + 0xcb2efb7958d939bb8930355973284a0f83b6b9da802bfc086bc09b8cc29b01dbn => D + 0xddb3604aa05cc3a5aaff534528ac50b12e5b758d109e38fb9fc403ab31e29f7bn => E + 0x13a519611ecdd3c9c9e5cd2ba76b24a6592c77aeeff2ad0e9c7521cc1853381cn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd784259cb8c9510dc7e41d19d05e03696a44b9d8c8c38ab06503eddf9b7284c2n => A + 0xd1d7b3cd8abb2f8c4648c92117223af83fd651df4c5489603659d1aadef09359n => B + 0xd784259cb8c9510dc7e41d19d05e03696a44b9d8c8c38ab06503eddf9b7284c2n => C + 0xd1d7b3cd8abb2f8c4648c92117223af83fd651df4c5489603659d1aadef09359n => D + 0x668326e8ea4120bae725a66e95337dea0cb3d70367096f72145e4aab08373524n => E + 0xfbe063c5070deee3ccf3f65430e4946bfbb4937609cc11a34c373a85f3914643n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x963e0aaa33f049cae09b2bbcebdfeea2e4240cb5b3578da7258311cdb14d3c5an => A + 0x0219ce9b9a54779f4e2865d57331c19f93ec1e00c02f7fec511260dc474b99d3n => B + 0x963e0aaa33f049cae09b2bbcebdfeea2e4240cb5b3578da7258311cdb14d3c5an => C + 0x0219ce9b9a54779f4e2865d57331c19f93ec1e00c02f7fec511260dc474b99d3n => D + 0x5bc1b885887b5e40200365dc4bb2adcf3fab6a3badc1fc974268aaccd5054e17n => E + 0x49afc5b17df4526a7e445a3972501ea150ffb6c5ec6623b5a70f9818efeff5dbn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x94eec3bcbead11a6df645832d755d41697625b31710f33a7fc66b606f2c651aen => A + 0x27b0db983e2e707424d56c8a7d678fe5c032962cd6abe81c4cdbc1ff2aaa1d22n => B + 0x94eec3bcbead11a6df645832d755d41697625b31710f33a7fc66b606f2c651aen => C + 0x27b0db983e2e707424d56c8a7d678fe5c032962cd6abe81c4cdbc1ff2aaa1d22n => D + 0x8918a64cc37cd75bbac49a1ce8101cf89bcb3631b4b470d2768ef7e4ff9f6cdcn => E + 0xf9c64921f967f51ea23149b9aaf7e02f5f394c6b1df43d918eabd11da0e018cfn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x5da07aa9cc697852563f3d1204189fd11f5de95052f1b8af35beb0c3797893bfn => A + 0x9c003ac77bdc8541366c420f0fcf8a7d77a3c458e2c46b6e7a7fbb2e0f59fcf1n => B + 0x5da07aa9cc697852563f3d1204189fd11f5de95052f1b8af35beb0c3797893bfn => C + 0x9c003ac77bdc8541366c420f0fcf8a7d77a3c458e2c46b6e7a7fbb2e0f59fcf1n => D + 0xa6b9ed53e09bcc5a2542ceef3d156917ad90d2d0c6b5599ce11f1bd503645551n => E + 0xe29153d34a9c568e0ada718ca2396d76243fe0b098a81550e8f4fb94b3174a2fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x805eb0d809e2d4859f4d6392f40675d91e6fcdbf57466ec9fc7d0521729bcfe0n => A + 0x9204bded2fd6414a4e6f5a8a2cf17fd0b4c83dd9d759d30fea1a8517d0dc0695n => B + 0x805eb0d809e2d4859f4d6392f40675d91e6fcdbf57466ec9fc7d0521729bcfe0n => C + 0x9204bded2fd6414a4e6f5a8a2cf17fd0b4c83dd9d759d30fea1a8517d0dc0695n => D + 0x635a72fa0dc6cd2419d169d0b70e8d0e30179f3171fd4b2a99f833b8ad64dd7dn => E + 0xf0b9704a5ece3aec00c18478f4a0fe8bd4ae20c008a9afe2c2ba0f3556c12f79n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x742cbb66978115e837d49ecae7bc52ba0bb9642c47a9e8b7b75446b5d6c99487n => A + 0x14c0f825aaf6cdbe0fe56782e7279f66d647fed005646de3fad9eab25685a94en => B + 0x742cbb66978115e837d49ecae7bc52ba0bb9642c47a9e8b7b75446b5d6c99487n => C + 0x14c0f825aaf6cdbe0fe56782e7279f66d647fed005646de3fad9eab25685a94en => D + 0x6508b777f03cf6096a9b5abdd2cb086dad1e5c4ea7055e1b5882968c58f3103dn => E + 0x9ab012b250f4dd219c767c23926dfb1c39872cb134f2a31476bc99df66e408adn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9875fb470424d1e0ad0351bb0544574f0cfe9da2be36e9db28cba8665e029c56n => A + 0x4808d89e1a220cc9a7f74c4dca2c0b491f1f0051d7106a1ac097635f65ef01e0n => B + 0x9875fb470424d1e0ad0351bb0544574f0cfe9da2be36e9db28cba8665e029c56n => C + 0x4808d89e1a220cc9a7f74c4dca2c0b491f1f0051d7106a1ac097635f65ef01e0n => D + 0x76e20b1cd170dd0ab59e3cdfdddc22572886c6324f84ce03eeb054b3f5b1999cn => E + 0x51f16fa10901a18cf7e2a42590598babc906900ef33765c814f232e99adb5bf1n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9a35d99d6c8f1f029a2e71767dcea24c03c809381be215aec2d590bf1350cc1fn => A + 0x740cb06968b64dd1ca722b731172b197c1228aacde41cb677f35fa33ce3c4a25n => B + 0x9a35d99d6c8f1f029a2e71767dcea24c03c809381be215aec2d590bf1350cc1fn => C + 0x740cb06968b64dd1ca722b731172b197c1228aacde41cb677f35fa33ce3c4a25n => D + 0x27ac136e83ebc6b8912942e5825dbed604c19ce1f69338d96e50f2b5db32c19cn => E + 0xa0e3a6b17e1ac8a36973f74777670a66786b157b0f4988f8d8978969c1415861n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa7c09f7d87a5a0891ad39bc5470ace48223190b6fec967f19ce4531d7b53e0ben => A + 0x834b5567b59c8083d133f7219bca927c9d5f71813ad8169ba92dc3f5a875501en => B + 0xa7c09f7d87a5a0891ad39bc5470ace48223190b6fec967f19ce4531d7b53e0ben => C + 0x834b5567b59c8083d133f7219bca927c9d5f71813ad8169ba92dc3f5a875501en => D + 0x28db76bbbc3368818d4cb9308c289c4a37a2ff17ff054e16658ccf5c0887608an => E + 0xfdbc83ce36f4d193e418737407e0e5a897a4a0016af8130acfe90946035b459en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x7a51314d8bf2d8119e88a2e127a509a67fe7e32bb6d4824a3da1702c478e731fn => A + 0xe8e1844a82ca853f0402d9b177dcb2f816cc0bd7716f5cf8857106111f35edccn => B + 0x7a51314d8bf2d8119e88a2e127a509a67fe7e32bb6d4824a3da1702c478e731fn => C + 0xe8e1844a82ca853f0402d9b177dcb2f816cc0bd7716f5cf8857106111f35edccn => D + 0x15f59387ee3c2da25a9e2999d92ca31bb3fce6f02f7242a03dcbe635879d0a35n => E + 0x45933cdb6deeee8ab9e7251af1f7e55c5f1078d92f37e9bf8ead793ab6e54760n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x6bb15edf689122b7be705c4d5ccbe38b755194d0334316a4c48472f0ab51d2ecn => A + 0xcddd655630e97312376013b73676c513972c0bf1f100fdda236a070509d22352n => B + 0x6bb15edf689122b7be705c4d5ccbe38b755194d0334316a4c48472f0ab51d2ecn => C + 0xcddd655630e97312376013b73676c513972c0bf1f100fdda236a070509d22352n => D + 0x60aec6a0e408ece9809f10fa2d9b64fe1bc5985f16a94072a58a05c1847c54d5n => E + 0xfac367cb6ebc912e2f2b2208accd3fb7de8f4c052a4a32ef4e9df7709f82898fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf01e6fcd72e8ddafcf2399fb31132b8a241ef65140b450a90b198ed76abb0addn => A + 0x7ca1c410cd1fe193d9e61dc8cdea696cef1234d4fe1c41c95201816270f5458bn => B + 0xf01e6fcd72e8ddafcf2399fb31132b8a241ef65140b450a90b198ed76abb0addn => C + 0x7ca1c410cd1fe193d9e61dc8cdea696cef1234d4fe1c41c95201816270f5458bn => D + 0x503aa5ed0c73b9bbb63972b53a53abfd3de229abe790ce9bbb0ecfe497876cc5n => E + 0x8adb95f0bbea6a91710de148fdd8426ac295badf74f3cdc030aa64591cb63ffan : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd906c454956f41047ab9e0581ad87f9254769192a0651e6289d2f3d7e94d8d2fn => A + 0xf9853490e81ea86a78843b6849afae42727e99bac28e31b6f70c114db793b559n => B + 0xd906c454956f41047ab9e0581ad87f9254769192a0651e6289d2f3d7e94d8d2fn => C + 0xf9853490e81ea86a78843b6849afae42727e99bac28e31b6f70c114db793b559n => D + 0xa7f651a7a91ae5f0cd8b48b86b839696967eb5a9f9a52e4d664c54c915fff9a4n => E + 0x120a669bd0ea1a945cc96f2a5dd4c357c35085dcd7e55ef2091601d2167066dbn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9a8b76fc0e3c8b6b11cd2fa8051eb33be6e8957d71a7d952e2ac5c559870d02en => A + 0xceeabd4503be10668703bc6ce77821e81645394915cc690bfe6ea11baf3259f9n => B + 0x9a8b76fc0e3c8b6b11cd2fa8051eb33be6e8957d71a7d952e2ac5c559870d02en => C + 0xceeabd4503be10668703bc6ce77821e81645394915cc690bfe6ea11baf3259f9n => D + 0xd75bbb926205e41bc2bc7fc1d19614ef7fb580f5a47aa8293a326719a00fafban => E + 0x3672de01e5ce30bface8cb4752f1b9adc5dd32e68b47a62b5af8db1480a548c8n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x574cc2ae25112f6649a98f96e7b7832fe25e1a39525cb175e9ff64f1ff9768dfn => A + 0xbb301d9c3e3bed96b08e35b66e9cb6d4fedc9d68387fabf166af13603b4252d2n => B + 0x574cc2ae25112f6649a98f96e7b7832fe25e1a39525cb175e9ff64f1ff9768dfn => C + 0xbb301d9c3e3bed96b08e35b66e9cb6d4fedc9d68387fabf166af13603b4252d2n => D + 0x62aa48b5476cd8f115d75ee443f5adb40aeb9bcdfdf2a2813cc8299654509f62n => E + 0x0a0d07beb9c7a40dfbd745e38a4d8f3b4439d0c1adc5043a46f5d58ad2858798n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa38b6d877c2402f1d977fcd30734e26b68383c8596d24d1be34d4f47f1b121e8n => A + 0xf06c0b9f62b4554de58c462233557ac6007577c98f93ee142ab2d25becfd2db5n => B + 0xa38b6d877c2402f1d977fcd30734e26b68383c8596d24d1be34d4f47f1b121e8n => C + 0xf06c0b9f62b4554de58c462233557ac6007577c98f93ee142ab2d25becfd2db5n => D + 0x8d736507fe7a76bacda1fe4799ae96dc2bd80bf146bf0a31c373751194252291n => E + 0x73c2f4cb95c43d11160db0535ee9462f48819d4e5f863c2bd2ce46dbfbfb5970n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x346a267d26c05fb9f68e08b9c93b2e6cb1c91bbf4e08ccd302436bdce9620820n => A + 0xcd10b75e585560e0f4dc58f86741ef201402290fcfeb4a8f5fc13e56a01ff58fn => B + 0x346a267d26c05fb9f68e08b9c93b2e6cb1c91bbf4e08ccd302436bdce9620820n => C + 0xcd10b75e585560e0f4dc58f86741ef201402290fcfeb4a8f5fc13e56a01ff58fn => D + 0xa20abf727c7e8af1d7363f833ea6729df87b9b2cb696449f4e32c19e87b10ccfn => E + 0x485f34bea3ed1eb66b6c197273dd503f0c1e0a5ac10533b85788e9d4e2ba98f3n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x6d912e6ce9b8074c3aa08514b62712f4ec20e21fa0c26f24536c0cb0ffd8f36en => A + 0x1452df3182e5a33a461328b5e5fe98d41eb70ad6ddf76dbca7eebbde640f5e9an => B + 0x6d912e6ce9b8074c3aa08514b62712f4ec20e21fa0c26f24536c0cb0ffd8f36en => C + 0x1452df3182e5a33a461328b5e5fe98d41eb70ad6ddf76dbca7eebbde640f5e9an => D + 0xa3dca1d737b6c2509d5b7c7c51a61096b02973088ab898f00f6321a16f064633n => E + 0x0a345a0ee3789f55c76ce416577427fbcfd819644928d0c57f2ef5fe9b4921edn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb489ef9f7a97774db8c9a8f98c65ff89ccaef9bdc138d9a914037531f7195f81n => A + 0x9651020c20e7f5c9574235d2696227c1966b0f5f751a913c33d22b1b2a7c3656n => B + 0xb489ef9f7a97774db8c9a8f98c65ff89ccaef9bdc138d9a914037531f7195f81n => C + 0x9651020c20e7f5c9574235d2696227c1966b0f5f751a913c33d22b1b2a7c3656n => D + 0x11d84233e61af679cecae418fa2f3a4a28ca819dd63777e58bde9aedf5b8f299n => E + 0x88474c76ccf4cf1dea4b6fb19f947402fa4066dd609acddc0f5f6e4e6775d399n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x921c627778fcf1b2f6d4bb5fa0e7f455d5fcc6b65e36779854c482ff1229a2c2n => A + 0x93f34a05c2801b6411de974bb16bef37fcb15b737ceb471a924c14d1c736f923n => B + 0x921c627778fcf1b2f6d4bb5fa0e7f455d5fcc6b65e36779854c482ff1229a2c2n => C + 0x93f34a05c2801b6411de974bb16bef37fcb15b737ceb471a924c14d1c736f923n => D + 0x019aa2ce0fc99b29425de5b1a95a881fbf6e61992f6f78268e89b6fc2ede4f47n => E + 0x117ae8ff4e093848fc4ea584522f083767463497dad1ef86e38cf35e3a736831n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xab2a58c7694ce478488d098927680efb67ce44a304489b7887e749a3c47d395an => A + 0xb0613d58fd791a7f95209ac2f8fb848394dd3058a4db045ea7dda370e9ecba25n => B + 0xab2a58c7694ce478488d098927680efb67ce44a304489b7887e749a3c47d395an => C + 0xb0613d58fd791a7f95209ac2f8fb848394dd3058a4db045ea7dda370e9ecba25n => D + 0x0356b60627e342f9c753dc0bb0a7552bd365ab9bf47a2bcab66993708044c5ffn => E + 0x0bf1fb84a3432bff012c5f97891b51b7bfa220ac533900a8b8c9438fa9cecad8n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf70154ad2fa71d311781e7e245dd8fb56866f92baac06d30b92a6840609967a0n => A + 0x91fb5fe972b02571fe955e3ff2a238e56d63e651d6f27701e771be449cf88b5dn => B + 0xf70154ad2fa71d311781e7e245dd8fb56866f92baac06d30b92a6840609967a0n => C + 0x91fb5fe972b02571fe955e3ff2a238e56d63e651d6f27701e771be449cf88b5dn => D + 0x5bf63f3ae6f05da3e32c364660bd31d3e08ec59c3d16b27193159886ec15a1f8n => E + 0xe5e3c29ea93020e37224f702ee692bbf9c23ae044032d40b1b91ebe4259ec39an : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe29205ea41d3a7f3e47bd439b77627e87de61286e21de19def8d7f4dd9d12d57n => A + 0xa7a221da3e3e781b2e94384188dbd7f9fb138b82533cc9f97d255c60d3f36fc7n => B + 0xe29205ea41d3a7f3e47bd439b77627e87de61286e21de19def8d7f4dd9d12d57n => C + 0xa7a221da3e3e781b2e94384188dbd7f9fb138b82533cc9f97d255c60d3f36fc7n => D + 0x1da74bae09634a5ecf47212ffad80d76180c5534fb8d41a4f77b628561d1f7b8n => E + 0xb706d78f00803f0427cfca61c476455ffe3f39165740f3460eb67282d36a4da2n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf5fdac6ee434961b4c7d2f42f18b47f0f3ebec5797939222afd87978d9557ee1n => A + 0xaf363de330f417eb5f611b6a7b14206576c38b88a8b1ca4bb301d8582190ee5fn => B + 0xf5fdac6ee434961b4c7d2f42f18b47f0f3ebec5797939222afd87978d9557ee1n => C + 0xaf363de330f417eb5f611b6a7b14206576c38b88a8b1ca4bb301d8582190ee5fn => D + 0x21cac06afb462b02d2630006724e9e62cfe8970f35fc765f1f32c52437f5d65dn => E + 0x930b0a304a4869c5f9c3e00b31e67727e7b6c46a38bd229e30b04ed5c755a941n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x6276dd73c417d1bd74163d8d4c8650f478f7a7bc916545542d35f6532762c3c6n => A + 0x0b3e1a4741230b53930d46c8fdfc30b1a9e0187a5798cffe642cf052a2d08cf6n => B + 0x6276dd73c417d1bd74163d8d4c8650f478f7a7bc916545542d35f6532762c3c6n => C + 0x0b3e1a4741230b53930d46c8fdfc30b1a9e0187a5798cffe642cf052a2d08cf6n => D + 0xa7b9e3c70df8f1b873a387ec084c3c9332993a0261c27247bc70970aba16cccbn => E + 0x8cdd8183b288a9da165abc2f22cb08e9575ceb4c5f1e1767bf15894cccc5556an : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xcb6ff92d6c8847eef3cfdf102fb06df2e62d9e53b8e37c10fc6c264f9f9c0cf5n => A + 0xb707cb768816a28e535534216847d63098b8ab68acab0f6505d6e656136160a3n => B + 0xcb6ff92d6c8847eef3cfdf102fb06df2e62d9e53b8e37c10fc6c264f9f9c0cf5n => C + 0xb707cb768816a28e535534216847d63098b8ab68acab0f6505d6e656136160a3n => D + 0x509b0192acb8c48bb0dd7a3b27b18e7cb6f67b70e01b44f461c89072546c1a6en => E + 0x9526a8243cc8c0f00dd39610375948e206b6ff562e7a8dc6fcc9d6a1833711b2n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa503eda6fb2b99a93fb1c8d8a5cd71a59cfed20b0465ccd6e491dc9e7e2933b1n => A + 0x3bd9962bcc9f6aca9d7ce29c02ca92458882ea3bc979ccc1ff46578238ad4659n => B + 0xa503eda6fb2b99a93fb1c8d8a5cd71a59cfed20b0465ccd6e491dc9e7e2933b1n => C + 0x3bd9962bcc9f6aca9d7ce29c02ca92458882ea3bc979ccc1ff46578238ad4659n => D + 0xe754801ac3dc10e14ae9803592ad6efdcb0ab90018f0e4eea2a52083814c3fa3n => E + 0x534a92835984e68674959e4ed6b3b06a0c81f6367c1950fbecc0219b63293599n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa5683d4e730fc10c14e3f8177eec4be4d7724f22af79cbf359dcc0f1120c829bn => A + 0x7b52306e00b2659e164bce50501b36103702f30e310d89e6da897fb757f4f8f8n => B + 0xa5683d4e730fc10c14e3f8177eec4be4d7724f22af79cbf359dcc0f1120c829bn => C + 0x7b52306e00b2659e164bce50501b36103702f30e310d89e6da897fb757f4f8f8n => D + 0x56815abb10d0949497cb48e56778c7c30012c7f4599355fb4e34d5191ee6f4e2n => E + 0x562f6808cdc031c073ea86830d3fa0007b181ef4e22b496ef3962ce254071a0an : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xba74d9ba536b9d74df5ac100615d979562c078d9694cf09ad84a2ae32e438eccn => A + 0xd495924d0e02c10f459a9d5964c59c7650e260b97508ac0e84cff596fead6825n => B + 0xba74d9ba536b9d74df5ac100615d979562c078d9694cf09ad84a2ae32e438eccn => C + 0xd495924d0e02c10f459a9d5964c59c7650e260b97508ac0e84cff596fead6825n => D + 0xf219029cb300641675b1ca40cec9853ae586655060767b3517c7691c4147ee3dn => E + 0xf543d739f83086f2f16d5a87e4cef6a24da2c166d0996e8f7ef5926465309a5dn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x7467ba0441775822f222f3016cadeeb9376f8a041036f6dd5a549aa107f6a393n => A + 0x483e6f7506a6140a5d55325a66c3cde68bef6a9da362f2084894896133901376n => B + 0x7467ba0441775822f222f3016cadeeb9376f8a041036f6dd5a549aa107f6a393n => C + 0x483e6f7506a6140a5d55325a66c3cde68bef6a9da362f2084894896133901376n => D + 0xc1dd3aece4830b1cf743623b0c9d71c500a5e36b75810ef7885bef4f1df02f70n => E + 0xe998a96dca70b074211822631c49120cf8b6bc891a3fe635a2d9c4f386962b48n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa315267f9d01b3258a39e1fbae20216bd11735013036a4053b42324a6c430678n => A + 0x162fdaad37013e34c85efdb992070f8ac7f4bb05c2d55df5ea42bb675da7b668n => B + 0xa315267f9d01b3258a39e1fbae20216bd11735013036a4053b42324a6c430678n => C + 0x162fdaad37013e34c85efdb992070f8ac7f4bb05c2d55df5ea42bb675da7b668n => D + 0x19af0b6057875a93aab1ef95e12dc7c72eb917a40fcedef26015d6225cdb09f2n => E + 0x10dcc08158e9fc6331453d79fe09f8e67d1ea1194e3e9c549a5950fed6bb5e2an : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x6ec1a966a1d833f574ad767e1ec38dd710b2ef6c5c54d63fdfce8ebed97f546en => A + 0xe4fb087d5ea36396e403ebb4fefdf20fd72776bbc7787425a9db8ed6e68f9b3cn => B + 0x6ec1a966a1d833f574ad767e1ec38dd710b2ef6c5c54d63fdfce8ebed97f546en => C + 0xe4fb087d5ea36396e403ebb4fefdf20fd72776bbc7787425a9db8ed6e68f9b3cn => D + 0x81184041753b612852a43d1d339953a67dff93011df75e914a299e64b715929bn => E + 0x62d23bb4dc346525ea190355f50813a233e949a0c238aa98cadaa330afcc1840n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x43a52607f1a8277bdf84c3b7a09f12a3895e46fbc3311c4fdf2ed7dc562da381n => A + 0x0c4ec752b7a78146cb337a6632cbe2a9f003f6d5377928037b656d2245acbf1an => B + 0x43a52607f1a8277bdf84c3b7a09f12a3895e46fbc3311c4fdf2ed7dc562da381n => C + 0x0c4ec752b7a78146cb337a6632cbe2a9f003f6d5377928037b656d2245acbf1an => D + 0x4c5df14b8f588f5a83b0a11a80cc3a059d1b72e40284b78536ab51abd18618e6n => E + 0xd34eaa3b740c87e53100318af37031d9d2a996413a0c41f36646b469f6177eedn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xee268c9d8b43a979e5d88546c1be09eedcc8029870e0a32f227a14b66c58c84en => A + 0x4e867e52d8ed59965bc39f236f036cc54c8bfcfcabe28acaa47f95a44d882f8bn => B + 0xee268c9d8b43a979e5d88546c1be09eedcc8029870e0a32f227a14b66c58c84en => C + 0x4e867e52d8ed59965bc39f236f036cc54c8bfcfcabe28acaa47f95a44d882f8bn => D + 0x5c0148aa3d3798cce914075f74a47352cac48d887a1663634d95026bf4f2ff80n => E + 0x126846212b91465b86b68a6c7f26ac8d01d7d99605371387b39d9c168e0dc1bfn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xeb99f9bc70ab105d9036ff7acd9dd147972fe50b79ad119cdea23d0fc80a5ee2n => A + 0xb7fe36c4eea5f744ea9ea1610cd963f51bdd393577b5e9168acd57ffc16b3b80n => B + 0xeb99f9bc70ab105d9036ff7acd9dd147972fe50b79ad119cdea23d0fc80a5ee2n => C + 0xb7fe36c4eea5f744ea9ea1610cd963f51bdd393577b5e9168acd57ffc16b3b80n => D + 0x2465b10c706c291321e11f38446b59492096eecdefb2b61ad61f1613c28f7e02n => E + 0x5899f5a0a452ecfbe14f92f50e67a7b3ec78f363295f3802bd34a9aff101ac50n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x0616f49ab378fc4ebec4cec85e92e48f7391a58a3a7aa4954d971b20c9d357c2n => A + 0xede821be629fa8900cc4e56007fa29afca5e9c4cdb8ea42e5eeb870e8a5e2540n => B + 0x0616f49ab378fc4ebec4cec85e92e48f7391a58a3a7aa4954d971b20c9d357c2n => C + 0xede821be629fa8900cc4e56007fa29afca5e9c4cdb8ea42e5eeb870e8a5e2540n => D + 0xfc7d4ab8d4fc1bf9f01abd9d00c2d2d1a8d076c0cdb4a62bd21c599ae4127c3dn => E + 0x641e6b26c5cd3757301fe66bc7e0ecebf35bc374009e1ef80b1fb871756fdcf5n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x37a61733e021bfb31652df11ea45d31847f16bb4ca9ada10f6d20adcea7730afn => A + 0x9865ca2b1d3552ca72f958864c1a42bbfca85ca9bb4b6dc2b4721f36b2765dc2n => B + 0x37a61733e021bfb31652df11ea45d31847f16bb4ca9ada10f6d20adcea7730afn => C + 0x9865ca2b1d3552ca72f958864c1a42bbfca85ca9bb4b6dc2b4721f36b2765dc2n => D + 0x232e1897a2d5b4eede8c103521462a4c56f95396d84082c1dfea7b7ea00fc2e7n => E + 0x5c5ab435c2c0c6cb4ff29b2caa990c2bf0a22c59d7757ab7e9f29a09be12ad4an : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xccf226892ad785a9e36004959c956325bfbd58572661bb03bb59d3b286db1a9fn => A + 0xcd5a8601ee3f77bf5835d1b507bbcc8bfb39322ac49ed32ea75b73f1703ded53n => B + 0xccf226892ad785a9e36004959c956325bfbd58572661bb03bb59d3b286db1a9fn => C + 0xcd5a8601ee3f77bf5835d1b507bbcc8bfb39322ac49ed32ea75b73f1703ded53n => D + 0x3082660711f5823444a19e4c13c3e403da1370b769c3d321c13eb9b3dc35ac91n => E + 0x9db305567aad3548e90393770a7209cea156833f027642a392aacf8d0c0a3104n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa3c19dcb8f71f66478da83af5fc68164e775fccf0a1970f5b17f83b476807282n => A + 0xc0a8beffe033e0177ef6cbfff60b3a4bf7b8edddd828b68557a6896a3258b223n => B + 0xa3c19dcb8f71f66478da83af5fc68164e775fccf0a1970f5b17f83b476807282n => C + 0xc0a8beffe033e0177ef6cbfff60b3a4bf7b8edddd828b68557a6896a3258b223n => D + 0xd2b19d1a592cccb9bc16d12924585cd3b68e9d68f89dd4c73fa22bf4258b2852n => E + 0x51988036cc46042fac2d1f6135c2e4f9ca7ec27ac6351d9df95f561bb8dfacaen : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xefb34cd3a3f520b78b835008b4900d9d5f0658d4a89d54aa29fa2576d0bf1285n => A + 0x6f7ca2d030f22c47b1c16ad7984322cc1720cb2aea4be2df15f4ff920e924de0n => B + 0xefb34cd3a3f520b78b835008b4900d9d5f0658d4a89d54aa29fa2576d0bf1285n => C + 0x6f7ca2d030f22c47b1c16ad7984322cc1720cb2aea4be2df15f4ff920e924de0n => D + 0x78c08ed6f665c4e1ca6566ce45c208c8a0d9fbfb4383f75a4e98af1b97427c24n => E + 0x3ca1f201894a59328f787d886245d688d010f925739024ff048f00ce79e596e8n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe6256326cdfec2b4f49058a6f27aae1e12b897bb0de03f566b9f3ed228f45da5n => A + 0x49336341e163494ac0187eb845b180505cc027d4f37854659e98809cc33e7d84n => B + 0xe6256326cdfec2b4f49058a6f27aae1e12b897bb0de03f566b9f3ed228f45da5n => C + 0x49336341e163494ac0187eb845b180505cc027d4f37854659e98809cc33e7d84n => D + 0xa63b134118df89e4adf09c0481adaf7a52fd1e0f198a92c02c363bb59dddea85n => E + 0xb7c28c39d9cbf3341f0c9314b7fe1a7ec62862d33cb27e0f733e87865ba00b0an : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc28a0d337cc81e22560f005e90580c18b8c3e555a40f80822c5a0d0a5cf8beabn => A + 0xcb19bb3833e26ef7f91c175b98411a2365209f1d1a4d789b49c52840a669991dn => B + 0xc28a0d337cc81e22560f005e90580c18b8c3e555a40f80822c5a0d0a5cf8beabn => C + 0xcb19bb3833e26ef7f91c175b98411a2365209f1d1a4d789b49c52840a669991dn => D + 0x91a6e21a324a929808629cca9a857728097ac61e2b5f7e0a0d0c3c2b83e3f1c6n => E + 0x8c86ee5eb7a33b8c81e554c48c6728a7f776d28b652b34db665f8e979c6aaea9n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xdc8b7987b3bc86394b58d570654ad146082bd3e2eff6b954c4dc59e3d95f1505n => A + 0x6323c062c82b194b16428a738a50ce8d97b5aba8065e681b588a3bf6ca7b057an => B + 0xdc8b7987b3bc86394b58d570654ad146082bd3e2eff6b954c4dc59e3d95f1505n => C + 0x6323c062c82b194b16428a738a50ce8d97b5aba8065e681b588a3bf6ca7b057an => D + 0xfc725db3f8c9ae7b3c08fe9ae734f0fc3163b8db46cf9a2fee195e3ccb57021bn => E + 0x6dd3f2502a87c877a0e5ec6fdde5d54ae8db157e7ab48a330071e061ded0eb21n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xdc28f4a04974d2e9f07dc348a678cdbc2bbbe6d66beb4889494c063b41d23b97n => A + 0x5ce96c6be7847d6abbba4972d71f3711bfdd3a31a5bca3992b8a523232c2fb67n => B + 0xdc28f4a04974d2e9f07dc348a678cdbc2bbbe6d66beb4889494c063b41d23b97n => C + 0x5ce96c6be7847d6abbba4972d71f3711bfdd3a31a5bca3992b8a523232c2fb67n => D + 0x0159df913aad3a7abf73a72f6fa498a8b66da473b30b2aa039670521ecb8d64en => E + 0x88aa800788f1c3c501d31a2a58042f9051c5d851c7d8b7fd1a90ddcffb0fd7fen : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x1c80a81804caca8ed9d79d473b5bd0e33b48957af0465b93c40c540b1ed3b759n => A + 0x9bcd44b51ca05e05888a9cd1de5c723408d9ec3ab74113a362696f0f906a142bn => B + 0x1c80a81804caca8ed9d79d473b5bd0e33b48957af0465b93c40c540b1ed3b759n => C + 0x9bcd44b51ca05e05888a9cd1de5c723408d9ec3ab74113a362696f0f906a142bn => D + 0xef5529e063a25d8170a61c91d479725cc8341c477a56e6c41455fdefe575cbd3n => E + 0x4145b5e96a3a491f571cefed834bf8e90ac2df36c2bc42260438b58a763b4c1fn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x16437e7a1826d62da03254d29731a35f7f59a4d1be82975f0cbbafa240590491n => A + 0x543339bec6ddba086265c830012785ef8ec6dbbfebf7319e180c20bd484cf519n => B + 0x16437e7a1826d62da03254d29731a35f7f59a4d1be82975f0cbbafa240590491n => C + 0x543339bec6ddba086265c830012785ef8ec6dbbfebf7319e180c20bd484cf519n => D + 0x63e9478d987654aee4f8d4da87dacb21d6296ba136ec2c801ce035f668f611dan => E + 0x5790580d70d2af92b0b26c1bdd014b96f41974d20e1012285782f7ecea812967n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x4f4eefba0c03623f9a8ac701eaf6e8d8e389467ac106807c2e748849f30eb047n => A + 0x89a5b2316f24d310670dadfeec9620dbb81a04ecf18e042ea9a077f1b3897cd4n => B + 0x4f4eefba0c03623f9a8ac701eaf6e8d8e389467ac106807c2e748849f30eb047n => C + 0x89a5b2316f24d310670dadfeec9620dbb81a04ecf18e042ea9a077f1b3897cd4n => D + 0x42db69baa4cdbb95413a7f7de9fd79e56679621e859842b69a92c4c28fcf56abn => E + 0x608aea70a8fcab50cd9545ba6cebbef6365facb9aab6ffc5ac028736f3532782n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc18af02276d33926bb6e65bbb8f851c2bb304fdd4139c157aa4211559ce96a3dn => A + 0xc5662c278961a32ea4765df8300dd8e038ef5420c432ccb311e9d87bc34672f3n => B + 0xc18af02276d33926bb6e65bbb8f851c2bb304fdd4139c157aa4211559ce96a3dn => C + 0xc5662c278961a32ea4765df8300dd8e038ef5420c432ccb311e9d87bc34672f3n => D + 0x192d9ee4e3d9e4719444ffe1ffd1ccfc9599af51a65bc3e27f14515b85b8fc91n => E + 0x99a3cdac55daec66a75c8a9d6c62b0f98fb34dfa3d5a70d537775ca054dc7b02n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x57d0b8f1b5e793feacc68dee7b2a984dbc69d33cc8f1785455b6a0ec1d550374n => A + 0x6eaf428154f4cd4b09803cddd496993a95e163242904f798fe2e8935bd732aaan => B + 0x57d0b8f1b5e793feacc68dee7b2a984dbc69d33cc8f1785455b6a0ec1d550374n => C + 0x6eaf428154f4cd4b09803cddd496993a95e163242904f798fe2e8935bd732aaan => D + 0x662e45e40d1aec05f397ce59ba63731e6918c4ab906f0da9d8bfeb9e468fe9c8n => E + 0xbab3692c6ab92cb3ad0f5494fd5c1cf72f77eb4386b31bcc6bb6434051513b9en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xa778fe2ee1159418a6381d6a2f3c0dac30c574f4183a4e1e370ee433d1cdfbden => A + 0x87774e9b14de6d30462ad3d0389910d5f9168774beab05eeedecf17f224ce86en => B + 0xa778fe2ee1159418a6381d6a2f3c0dac30c574f4183a4e1e370ee433d1cdfbden => C + 0x87774e9b14de6d30462ad3d0389910d5f9168774beab05eeedecf17f224ce86en => D + 0xf1ffec7331177d69f93c1b9325d0905fd642df35f71844db0f3b79e146fc9691n => E + 0x64c32c2748bff72a73a6165703eecddbbb2120f6cf067128985bf1aba9941660n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x3066438b1f003f323c9bc2709a01f12e3efff529b3ddcb06edf9dee244d69e6en => A + 0xf809336041d2539105a68a9e0dd70f1a77b7fff6495dea9958a0929e7f5b9d10n => B + 0x3066438b1f003f323c9bc2709a01f12e3efff529b3ddcb06edf9dee244d69e6en => C + 0xf809336041d2539105a68a9e0dd70f1a77b7fff6495dea9958a0929e7f5b9d10n => D + 0xb27510b23d0d6faac836defd3595161fc3e839167274a65952a7b5e9586d9cedn => E + 0xbe03992744686fcda321f2cac168c99104daf6e3d7fcfad2107a3cab28f3f34en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xeebab5b0b632ece0d0dece36a43ece5cac95e9a2dd4a63a1d41fd9798f3a8bdcn => A + 0xead5b3776194b91cd451c18bc69aa3b92c55bf6d2f9dff439ab59aa36473ed0an => B + 0xeebab5b0b632ece0d0dece36a43ece5cac95e9a2dd4a63a1d41fd9798f3a8bdcn => C + 0xead5b3776194b91cd451c18bc69aa3b92c55bf6d2f9dff439ab59aa36473ed0an => D + 0xf46c3cf01960a31a0157fcfa28a73319129ac414f185e212affd5620ed718353n => E + 0xaa51a45d56927a03b9a0a24b451be04b6937b499ea8b944893c6701c051cbf3cn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x999a76415b016f0736d21189623d68f632a8baf3070ef8a3f1c9fe1ca0b07a57n => A + 0x55aa4bdebc26e017307f1bc88dc1b678b22ba261823a4bfc7ef712f6a03163den => B + 0x999a76415b016f0736d21189623d68f632a8baf3070ef8a3f1c9fe1ca0b07a57n => C + 0x55aa4bdebc26e017307f1bc88dc1b678b22ba261823a4bfc7ef712f6a03163den => D + 0xb7e7e13f650ca9ca933003df65e51b111b7ecf68e7abacc4b69032a44ec1b422n => E + 0x2b5fe2edbf141d32c11150bc2475186b6d0ff6840cca80dcbc022ea307b7f3b1n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x64f949083f7a634deee630f0910549c78469047147a27a35a15a498324e5d7b5n => A + 0x81089578109f4779f25b6f81fabf34ba68fde8ad40f54e46b159cb056de5f575n => B + 0x64f949083f7a634deee630f0910549c78469047147a27a35a15a498324e5d7b5n => C + 0x81089578109f4779f25b6f81fabf34ba68fde8ad40f54e46b159cb056de5f575n => D + 0x2f3848a1271b9d674512fa13c960bf504a649b63f109c2a60d7999378badb2f7n => E + 0x2426a1516c95d932ebeb3bfc3ececabbcb386adaa289e61bfdd4e4db414b1fc6n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x3a24416b465dd724eb21b0fff751c47732fb17d88098ed39b1c3100c8f47c63fn => A + 0x4763ce5666d4ffa6b753a7e43e78ccc886b9ba03faf6dc18fc529a64ddb66962n => B + 0x3a24416b465dd724eb21b0fff751c47732fb17d88098ed39b1c3100c8f47c63fn => C + 0x4763ce5666d4ffa6b753a7e43e78ccc886b9ba03faf6dc18fc529a64ddb66962n => D + 0x4d5f4fcc5acc3c1fa5326a973ed8a0e62345b1a921038f61bdcc9b643c0e9a77n => E + 0x996e92391a3d9a612d6e887a28ce6d53b71e6905d6eae4cf4ceb824c2eb8cb50n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x98cb3c089d60923a26b0f50e9fd5fe880a81990f9acc2407b50aff9cc52cc184n => A + 0x46d6b82b17c983566487481e3a6cf55d6ac0dfa5df6f352337a184d6c745f26an => B + 0x98cb3c089d60923a26b0f50e9fd5fe880a81990f9acc2407b50aff9cc52cc184n => C + 0x46d6b82b17c983566487481e3a6cf55d6ac0dfa5df6f352337a184d6c745f26an => D + 0xdeb955943d500e4fa4b09d8fdd5b26e9849ea6dc472155ca5347a11383f63422n => E + 0x3ff8d1ca8142009e850de00bc10081c172c3fb839bb6fceca9bf960aefd29e17n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xef6dfbe57742c918c018c25cdee3e0e312c435dc46930259a47b84463ce5ea93n => A + 0x771f8d94c1af25bb8b83ec0b42fc6046ec882171d8b4af62521e35c43f616616n => B + 0xef6dfbe57742c918c018c25cdee3e0e312c435dc46930259a47b84463ce5ea93n => C + 0x771f8d94c1af25bb8b83ec0b42fc6046ec882171d8b4af62521e35c43f616616n => D + 0x04cda6897c4d593ffea2e5625948e4f79a7c5b9e87f66540d5278bf268a2bc19n => E + 0xdcedb5395b648b9bfef38046b4e310198273826544109ea85046a8d1a6c6a9b4n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9c711c973854fc283cba9a430059c07250280b480044879f18450ac08c68a29cn => A + 0x81a457a6000acf79d61e30d490de82cae8ccecd64d2a7bd4f4e21fa53ca6ea38n => B + 0x9c711c973854fc283cba9a430059c07250280b480044879f18450ac08c68a29cn => C + 0x81a457a6000acf79d61e30d490de82cae8ccecd64d2a7bd4f4e21fa53ca6ea38n => D + 0x1bf350081f224472df8893a2829af7423696fe60fab8fa22e05a671a0355ab93n => E + 0xaa54a3875309def55d31c00ed46e19b4a99315acf389c1954345cfce296b8b55n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xdd1feeb08a9e51b39970c07eb3a4b189156ccd922dd911361a85d3756f95b7d8n => A + 0x2dff7cc30d7a4fdda0cceb0371cd83e9c1daaaed6c537ba8e7001e4e8973e5acn => B + 0xdd1feeb08a9e51b39970c07eb3a4b189156ccd922dd911361a85d3756f95b7d8n => C + 0x2dff7cc30d7a4fdda0cceb0371cd83e9c1daaaed6c537ba8e7001e4e8973e5acn => D + 0x0dd585af6c107c1723afc1c3d1f310356f5c220ee79518d19cf4035a2ac80aa9n => E + 0x6e941d318a6417af46126bcfc2938395beff4193f2da7085fb81b3a1ae57e20dn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x0fa56cd5640be2ffb1c1780e6e32fd7d10cddf814fce972a6eb6bd549064885fn => A + 0x312956fc8a255ec6e4eec21724a107342cd3ce7ae4f4f6f429d8d1eee5fdde8en => B + 0x0fa56cd5640be2ffb1c1780e6e32fd7d10cddf814fce972a6eb6bd549064885fn => C + 0x312956fc8a255ec6e4eec21724a107342cd3ce7ae4f4f6f429d8d1eee5fdde8en => D + 0x5a8f1d572a15e2d87671ae77e6375eb83b51e67cab75005679d6806b679d1a3an => E + 0xb92d3cb5cfda3dbfabcedbfc193a3098814dd1dd20803cece2b86f603d430999n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb7a110e5fa1c6855cd2ea55cb3797c0cf1195bc9bd65bf164c1390923b4d6ab5n => A + 0x9077c2aeb9ab015c9ed5f3ddf087aafcec69399baf26f81bfc26a37e3d8ee05an => B + 0xb7a110e5fa1c6855cd2ea55cb3797c0cf1195bc9bd65bf164c1390923b4d6ab5n => C + 0x9077c2aeb9ab015c9ed5f3ddf087aafcec69399baf26f81bfc26a37e3d8ee05an => D + 0x0db413bf64bb9f7c13af59d4e1daba7862815efda9ded650fa2b173d4e488ae3n => E + 0x7f02207f6a65b52abd5c2ed43bbc1fd62e1bd5011e8f41c4c6328d1726850732n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x888a38fbf3972f8610ae71246ad97176870cf578ecc0ee1cd464557a0c89bad4n => A + 0xd80780a4543fc4a9fd3c09092b791df5b5aac12ab242d360a162ac08fda45551n => B + 0x888a38fbf3972f8610ae71246ad97176870cf578ecc0ee1cd464557a0c89bad4n => C + 0xd80780a4543fc4a9fd3c09092b791df5b5aac12ab242d360a162ac08fda45551n => D + 0x4597a98b1e3b20dd210164b8f68c0a54cd119e0bea0339e77423e8334bda3595n => E + 0x3a17605dfc14befcfc8eddc3474f4af469121e5eabb9f80830adc62e72ceac6bn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xdaa0ff7fede56285728364f045f5ad8d53eaddb5db54b7b1d113c73f9045c791n => A + 0x4488200587d477ffb92e40a6e313b94b3a28cce6edb177c19ec0f35e85469c20n => B + 0xdaa0ff7fede56285728364f045f5ad8d53eaddb5db54b7b1d113c73f9045c791n => C + 0x4488200587d477ffb92e40a6e313b94b3a28cce6edb177c19ec0f35e85469c20n => D + 0x02e85046c7221579ce1181660235f582fe50b72656000275c9f202083bf867d1n => E + 0x4fc9f089ee33e55a1a2d4fb24e74de7652359ef467ac899b40637b56094d15bcn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xcda55ffe9d57eee8288de2a671b4721d6bafa830b10785f425c172742e2b6ad0n => A + 0x87ef3c102bf4dbb3b4871c739612c574cffa73cae0c4d55c8d138f139dfbe526n => B + 0xcda55ffe9d57eee8288de2a671b4721d6bafa830b10785f425c172742e2b6ad0n => C + 0x87ef3c102bf4dbb3b4871c739612c574cffa73cae0c4d55c8d138f139dfbe526n => D + 0xb075e2d470babf33bc0c0f73d32e1a735b10662f0710799b9d45182ea1c32ac8n => E + 0x4a5545f2625aeef3ebc8b7116496dd1c2d7d27b040f91456d0858a0892696d2en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb829e717b085b64c41b901fbfa536fbbe8db83ce333da2a5f60e06b5c6161150n => A + 0x0304c99b864089724dcfed6a54e4323724a15d04e8c263ee7726607ed794082an => B + 0xb829e717b085b64c41b901fbfa536fbbe8db83ce333da2a5f60e06b5c6161150n => C + 0x0304c99b864089724dcfed6a54e4323724a15d04e8c263ee7726607ed794082an => D + 0x07afe4fa95024aa275ce294d622951c0a8c850edd9543ab9e4517e6bde4665f9n => E + 0xd44875be7879f76613b363d1484ae66f8ec9124a6d882df254cd6da0c2416146n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x65f312e675197f2b069de77240ce7c191bb0deb422edc40a011936eba8d947e3n => A + 0x4fb523c0b263b2402f614f641f46596a74b9433d388da49d66fbe8967078666fn => B + 0x65f312e675197f2b069de77240ce7c191bb0deb422edc40a011936eba8d947e3n => C + 0x4fb523c0b263b2402f614f641f46596a74b9433d388da49d66fbe8967078666fn => D + 0x8d3af18047501f3a77dae48a33c5a58a41f47a1c7e019f9757152124e5058f74n => E + 0xe08fa74f6a5da3101dadf08eb9c38513562c4ce2e1cf2ff3ea36a20dc9d11e41n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xec1dd8939038fcfb7073674e8e7bfda536496626e895b4311f16509445608c91n => A + 0xa3c6dba872b3be04be5d43338e0b78dff357914993456458a6f141589cec3bb4n => B + 0xec1dd8939038fcfb7073674e8e7bfda536496626e895b4311f16509445608c91n => C + 0xa3c6dba872b3be04be5d43338e0b78dff357914993456458a6f141589cec3bb4n => D + 0x5aefe84c3e1064d9873b7af25c575c0a2814398450bebd0e4de5cd163fa1ec7an => E + 0x9b66648b7071a28b259e5783e76ab44b493e9b6dcab699381944dbf5ef28fa38n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x012e81f8a92d69ad981b68d7ee4f664857a13c7d887c1e15f9a8e945a7e5516en => A + 0xdbeadc66b9ff472405562a994f97dd80917f24b1bef24c10b3fccaee06f47513n => B + 0x012e81f8a92d69ad981b68d7ee4f664857a13c7d887c1e15f9a8e945a7e5516en => C + 0xdbeadc66b9ff472405562a994f97dd80917f24b1bef24c10b3fccaee06f47513n => D + 0x9ca5fef0662a962b7bc6b8f09cf92a2d4a595a96a3ae12f5e47cf9cb6c722365n => E + 0x252ba24afcc346813877fff318b9a6ea60025102dbf2488394522bb7d4ab6dean : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xbf0fe6ae903d5fcbbb06d8ba8d39a4fddd55a42d926202ad8e6d99f490ddd34en => A + 0xfd13af19424ebfa21bfacd2d347ce6199e8d409bf80e871a76412fd57dee2ce6n => B + 0xbf0fe6ae903d5fcbbb06d8ba8d39a4fddd55a42d926202ad8e6d99f490ddd34en => C + 0xfd13af19424ebfa21bfacd2d347ce6199e8d409bf80e871a76412fd57dee2ce6n => D + 0x9f31bc39e2fda836bfbec16d6c97b90bdca38c6884a79e1023028ab10c4df5b8n => E + 0xbcd0c83ebe3f0b0b2b66614f764551ac7b03bb3c44c95154e2f5b8bbbb4ff875n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc6aece9de12270568c5a9e2cad96804d7c0d8d83fc4e8cf1d9c8c239a6783ddan => A + 0xde58dd3dd01116e9eddeca39e049f2904c0fd10c8dc03ad8e22ec7673a24af1bn => B + 0xc6aece9de12270568c5a9e2cad96804d7c0d8d83fc4e8cf1d9c8c239a6783ddan => C + 0xde58dd3dd01116e9eddeca39e049f2904c0fd10c8dc03ad8e22ec7673a24af1bn => D + 0x789353316bec0b211c1402c37b9266aade8e2de456ba87221514b8c86efb51bfn => E + 0xf461d580a29c58f8275c6b7a7998987c1594578afdeba4d634a5a6103351ddf2n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd364ea37e268e50483f6062f707440f06336ce447cc9ef21d116fe448c8a36a5n => A + 0xf81a902fc47d34862a866d10b9796d1134435ca84f234c9563c697c91d08171dn => B + 0xd364ea37e268e50483f6062f707440f06336ce447cc9ef21d116fe448c8a36a5n => C + 0xf81a902fc47d34862a866d10b9796d1134435ca84f234c9563c697c91d08171dn => D + 0x019927c2007ea909f7ca7a047035c659db74052dd9a2ccae4ad7aef18d3cf860n => E + 0xff2358908e8d3034b8c755c25a081a4ebc59bafc212e2db6ee1da98f10153591n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xcadd5fbaa46120e4c5248fd701d80913ab1105d300d7e366b860ddfbd83b3886n => A + 0xa161d5fb75132231d3e2de7668a90a1b89b5a8e4ae2f1857f3ef1d744314955bn => B + 0xcadd5fbaa46120e4c5248fd701d80913ab1105d300d7e366b860ddfbd83b3886n => C + 0xa161d5fb75132231d3e2de7668a90a1b89b5a8e4ae2f1857f3ef1d744314955bn => D + 0x04e177d24b962be36fee89c392a906eef4a9572941d981998d27dc3be1448af8n => E + 0x644891618238fa6e67b6dbb52f2834946b95cfbc8b3014a1c5c71da7ff1f0450n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x1fad973796956a3bc645c4961f4bb97671b5a398841d4a47e2cd66242010ca10n => A + 0xefef971e59877c2cb89f6bbb7c45b0ae571154e20424d8f9fd465572de3713d0n => B + 0x1fad973796956a3bc645c4961f4bb97671b5a398841d4a47e2cd66242010ca10n => C + 0xefef971e59877c2cb89f6bbb7c45b0ae571154e20424d8f9fd465572de3713d0n => D + 0x9fb425e5604555d467182999ab50b297b80e41c176880ba4dcd86f4ab62ab21cn => E + 0xfa3cc36761c611da59244060b4c4e5622ee7f9f4a49729058d5fc172d8c9f460n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x963e93c0868afde2e18aa259d7fb5220665b574c1fb280a5d4c5077666838925n => A + 0xeb01ad2918df1abf8b18e3ea4fe74c6ec39e8eafb0303e65b9b63feb6d4ada24n => B + 0x963e93c0868afde2e18aa259d7fb5220665b574c1fb280a5d4c5077666838925n => C + 0xeb01ad2918df1abf8b18e3ea4fe74c6ec39e8eafb0303e65b9b63feb6d4ada24n => D + 0xedb597ae7af136991d99da6a6763f0e2276982b8d876e04ef23e904f739724bfn => E + 0x8528979d5fb78abcd60ba7ee642ebad5986377d1256775cbff4ee81c7b09e7aan : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd346f0d4ca88637ce60bfcb5999bf26ddd9a4174a52dec13558d6bd7cb978e14n => A + 0x508da77a55e12c9d36fb5e268adbcd908d3ec5b652e354f07c470fc79e0f5941n => B + 0xd346f0d4ca88637ce60bfcb5999bf26ddd9a4174a52dec13558d6bd7cb978e14n => C + 0x508da77a55e12c9d36fb5e268adbcd908d3ec5b652e354f07c470fc79e0f5941n => D + 0xaa86bdf9b0c37f6925c7b6129adb76098f52f3782c8ccd96db52748976acd7bfn => E + 0x20f65531e733c8cb93cf9a957140aa1511a163783f94e91d040c8fa89889bc68n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x16a521b5160abee559c42786e32434425ea6b590c4dea1816b9684665fecaf4cn => A + 0x88dffd058ef1b1e3379b0c61fd67c2c5f25b762a3f670ab7f2d2c94b56923ff3n => B + 0x16a521b5160abee559c42786e32434425ea6b590c4dea1816b9684665fecaf4cn => C + 0x88dffd058ef1b1e3379b0c61fd67c2c5f25b762a3f670ab7f2d2c94b56923ff3n => D + 0x51a2c291a29e071367225f0443e6c3f6c86c101f2fc1e506a3bb9fcda5d17cean => E + 0x5811bfaa2da594b3d3a800d34efac14f3000a50e2e559098d0884600aa83f729n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x82cfb4f5027f60164fa03aa0b393c226608842b672eed9bc5d93a8cbf35d76e2n => A + 0x10271e1135c8c0bf828b63edc7b4fe2a35d86c6938389a2b6fc69439bee48f11n => B + 0x82cfb4f5027f60164fa03aa0b393c226608842b672eed9bc5d93a8cbf35d76e2n => C + 0x10271e1135c8c0bf828b63edc7b4fe2a35d86c6938389a2b6fc69439bee48f11n => D + 0xbe388c197c8f288de91c3cbd9526fcb98cb204532f456cdea8df2c1151794180n => E + 0xdbf0c2a99b250d6bb26d20a9ed848527f21bc639d4e85b8b97ea5ec83f51a8ffn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8fb3ef8867a711675fea3a6471d86576e932c5ee3ef9399fa710a5838284ff8dn => A + 0x7e954acb367c36f64a82315d650263559f7812a211e84c6d323f8622bd85e18dn => B + 0x8fb3ef8867a711675fea3a6471d86576e932c5ee3ef9399fa710a5838284ff8dn => C + 0x7e954acb367c36f64a82315d650263559f7812a211e84c6d323f8622bd85e18dn => D + 0x34b32795c89442ed027c7dc7a0751dedd7485c0d7d616dd446fbd6388127018cn => E + 0xcaa0ecad8e0be7aba85385d75da0c858341be621c4ae7a0df6e476ebcf18d636n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc0c10e927b4a8c66bda0b454e50973a28e6b3cb0786d057bf0ec7998a33e313cn => A + 0xd1b143404c44801b0b72966580b32cebced707765dda991c17095cb22adac36an => B + 0xc0c10e927b4a8c66bda0b454e50973a28e6b3cb0786d057bf0ec7998a33e313cn => C + 0xd1b143404c44801b0b72966580b32cebced707765dda991c17095cb22adac36an => D + 0x7b1a20154667492e9ce7fb5bd59af3989dae1688b93d56b4c1a5a8bd860cf86fn => E + 0x0a1bb9c20abff2a48e083d806837d6965e59cbef62a039f3c483c1f2726ffd21n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf59b244244e56832d3dfb06519eab72a3fc8013c07da107755fdd2a915484cdcn => A + 0x08f6d3e79a5ba623dbe841a5607f19ca418e913e90f57ee4899041ac12a544fan => B + 0xf59b244244e56832d3dfb06519eab72a3fc8013c07da107755fdd2a915484cdcn => C + 0x08f6d3e79a5ba623dbe841a5607f19ca418e913e90f57ee4899041ac12a544fan => D + 0x4b9c603d37bd76366475e891611f4804b5c1be14af9f77426122dd1276a7e085n => E + 0x240991e0b05db9c2f36430799e59703e05df5ea6ecef71b8286926f758a67bbcn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xe57ebeb241980a24f854a9537ecf7f10cc755270d4a6278ffbfe14f1828aeec4n => A + 0x0fc55a11b50b61f8a7572f5a5de2d7d5e12d21b54d2750b305ea89d565dcf40bn => B + 0xe57ebeb241980a24f854a9537ecf7f10cc755270d4a6278ffbfe14f1828aeec4n => C + 0x0fc55a11b50b61f8a7572f5a5de2d7d5e12d21b54d2750b305ea89d565dcf40bn => D + 0xe2b9e8f31c09e9830b0edab5a59ebcdd0802838f3ffd28ce7dc74d890e2ea4c4n => E + 0x40937113bd33281332f9e137341efd8b45eb7f9292939868c2328a3f686265dfn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb49df96c9932678be9e1e87a099639b8ed60fbeed82ab06058ef10cbc5f8722cn => A + 0xf33275809c8b8a49603bbea546546fcfb8b16e38b7efc8f61f7f57d23cb700d3n => B + 0xb49df96c9932678be9e1e87a099639b8ed60fbeed82ab06058ef10cbc5f8722cn => C + 0xf33275809c8b8a49603bbea546546fcfb8b16e38b7efc8f61f7f57d23cb700d3n => D + 0x12ef466045f4e8cf82806f0c1addc869c04827e0e972fefa39187b40ac854115n => E + 0x6d9c5aa94096aa915d1f12de9d1b629a79915e55fbc3741ed24a74f6cc5d02ddn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9d4b05ab227924ac5d889d181ad77a379c162efa8f6009363c4b86fb6dc672afn => A + 0x3881ab3cf49f41307f842f65c84743cc40e3e04dbc4d8ec967e119efd9fd3560n => B + 0x9d4b05ab227924ac5d889d181ad77a379c162efa8f6009363c4b86fb6dc672afn => C + 0x3881ab3cf49f41307f842f65c84743cc40e3e04dbc4d8ec967e119efd9fd3560n => D + 0x9539f54f5800d3f853b54209e27d645b74d58d2d5b48e6bee4b438c0d3f5bf3an => E + 0xadf4c90f4b7b76fac49ca80d48af768accb89dd31cfc1fb8f562188f33e53897n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xba1c1a4d31dc16e80cfdc038d426c1b3be6c73328f57cd58f0e62fefdc8c7229n => A + 0x0aed3ea3a710a8a9cbe5c24d485a3a9bde36be1e82fcd2c7c45d4cadd88e4dean => B + 0xba1c1a4d31dc16e80cfdc038d426c1b3be6c73328f57cd58f0e62fefdc8c7229n => C + 0x0aed3ea3a710a8a9cbe5c24d485a3a9bde36be1e82fcd2c7c45d4cadd88e4dean => D + 0x29d5b91afe9b1e439fd1ddfc229852e3710ae7aa3e4a7d393206ab1c3cc711d6n => E + 0xdd1230e76a5ac712690be69fb12600761f6bc970fc4d415b917f7df1d2670710n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x8f612f51952fe16faf5a47b5e1a951251545171fc41e87558a382078aa2a6cb7n => A + 0x2c95d52e7255048fabd0e7a7450a4190cdb11624393bbb6d1a10d4196beda3e3n => B + 0x8f612f51952fe16faf5a47b5e1a951251545171fc41e87558a382078aa2a6cb7n => C + 0x2c95d52e7255048fabd0e7a7450a4190cdb11624393bbb6d1a10d4196beda3e3n => D + 0x448ea0c7efa9573f923eb617f4e0714c528f711b69b1ec36e1cae12ef3681ba6n => E + 0xe093262082d0fe74d9df2a6b80df724ba53cdd733e4d85c249549cb8888a4d0an : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x9547db010dd7a56f0cde51fc0001d3c488435bac18e6745f6aa997051ed77a1en => A + 0xc98473a144c685d236e94a0575abd7191a05a88baed6b6e2bd14601562d0639bn => B + 0x9547db010dd7a56f0cde51fc0001d3c488435bac18e6745f6aa997051ed77a1en => C + 0xc98473a144c685d236e94a0575abd7191a05a88baed6b6e2bd14601562d0639bn => D + 0x47bad7adcdb6b6c182685ec0b992a8ee0cb1a9674d42e0f95f84deaee110f50en => E + 0xfd965c7bb6b4f6b397356da06cb06b3aa4ceb04bc5b0d356b3ded2cffb01eab3n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x5935cfb3d9e4a541efefe69820055d63e590fff3ac2b473817d2ec905434a4b5n => A + 0xb00290fc8fa51329cef2e7243b6d64b8a315deed1a4895bf3d939e382c296c18n => B + 0x5935cfb3d9e4a541efefe69820055d63e590fff3ac2b473817d2ec905434a4b5n => C + 0xb00290fc8fa51329cef2e7243b6d64b8a315deed1a4895bf3d939e382c296c18n => D + 0x49def09f4de1e918a2f4ded73b57a56133dbc0a797a189c7444afdef1c4d10c1n => E + 0x32aeb6d436c388ea5d959d44f623ba5ecf2ced145946fe42065d47c4e40b4f0dn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xef5271c87d9de118c7ce1def744ca804abb4968e7e8f72eb0e2a32b887d5a23an => A + 0x07db6a4e34dfacf7c683dde736c3d7c800e5b0fa2b8dc4da977d60c4647e0693n => B + 0xef5271c87d9de118c7ce1def744ca804abb4968e7e8f72eb0e2a32b887d5a23an => C + 0x07db6a4e34dfacf7c683dde736c3d7c800e5b0fa2b8dc4da977d60c4647e0693n => D + 0xc490cdd8afbbeab854ab7340c757afcbfc551372bd18e9c7a41b443c16533a59n => E + 0xfe3d5531019748e58a1a35a4a09d8a558cf00eb9c1157c3448b0d75b3149de2en : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x31a2af7e3546bc6a712778db2030deabe35abcf63507be26b880bd5b3bd9d5dbn => A + 0x3f71f4bf6e78f7c1858bbcedec3bba4b62baca01da8a07c4d386b8f5b1a5ca15n => B + 0x31a2af7e3546bc6a712778db2030deabe35abcf63507be26b880bd5b3bd9d5dbn => C + 0x3f71f4bf6e78f7c1858bbcedec3bba4b62baca01da8a07c4d386b8f5b1a5ca15n => D + 0xdaf6150d6ed72eb35940d6df3d63b5075cf1a61b99755862801525d4e3b89613n => E + 0x7485896292968a0a7bba48c1d01beb6ba52b31be32d9760494c12a8ba5d77fb4n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xc3c3d53c682e000d7bf7f3c4d1bcca13bd362f7f3d80a461fc65360ae8a34ae0n => A + 0x0266a49ddf524a27969f44cf89358e927b41f1a0e39c6de6e5e0b9ac6f93f099n => B + 0xc3c3d53c682e000d7bf7f3c4d1bcca13bd362f7f3d80a461fc65360ae8a34ae0n => C + 0x0266a49ddf524a27969f44cf89358e927b41f1a0e39c6de6e5e0b9ac6f93f099n => D + 0x2abfa0091ca70d65ee7a4b4cc0366e5177c616e05638e7da456e7db914116b6dn => E + 0x1ab8e51cb77c1165988eea36cd61d4ce6d5beb6999c9c586c90a84969e0d39f0n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0x6ff4d4ba4901f911e489f3730e9d9272b228bea04796aeaae932a74215c09232n => A + 0xc31872ca438252ede883a60553969d2beabc733eef72b79f531525421c5e4067n => B + 0x6ff4d4ba4901f911e489f3730e9d9272b228bea04796aeaae932a74215c09232n => C + 0xc31872ca438252ede883a60553969d2beabc733eef72b79f531525421c5e4067n => D + 0x54ee432cc86ce56cb26a6e30860950c51e11c211c8c0ffd8c7ce4752068716ben => E + 0xe352ef00bb8e7ed7992a74e71076cc803a9271745849aa38779d8fb8736bc052n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xee7d88f81dd5a3f4d4678092b7366bc9f6925613caa70aa82b21e2c43ee186bbn => A + 0x99d4cbd43a003fbfaa25d2cd550963af597e9b935382496f6340134d50d67a81n => B + 0xee7d88f81dd5a3f4d4678092b7366bc9f6925613caa70aa82b21e2c43ee186bbn => C + 0x99d4cbd43a003fbfaa25d2cd550963af597e9b935382496f6340134d50d67a81n => D + 0xe04f0e485d8a3c9d422865f2ebe15c29cab09fb11e78c3edd2fc89baf5622ed6n => E + 0x3413bdde78804dc082ef9e7fd2d7349455e535c67926b7cc77dc5587ad0f4ccdn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xd4dea9ef87c1615a56454cd366163544dfcaa382b90f7f7e19f8528666072b3an => A + 0xd4ec856527d2f0e9c34b26f457001c292950419d4784d2f70934cd57dc9891d4n => B + 0xd4dea9ef87c1615a56454cd366163544dfcaa382b90f7f7e19f8528666072b3an => C + 0xd4ec856527d2f0e9c34b26f457001c292950419d4784d2f70934cd57dc9891d4n => D + 0x142998e7a258d437011e23fa7083b903c65018c3e2a63bcaf15d336987247949n => E + 0x2d460780867af817a4449815b1cf9340ebef8e1f5d50908daf39286a5af47e5dn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xb2811f162ee320d5d6797ca57b32bf8c59b2466fa54ae49f5c3a185bf4a3be9dn => A + 0x9a70649dd8190e7dfc852cd597afb9b9ee9a241cb67fa5b4105f5fa49b819eabn => B + 0xb2811f162ee320d5d6797ca57b32bf8c59b2466fa54ae49f5c3a185bf4a3be9dn => C + 0x9a70649dd8190e7dfc852cd597afb9b9ee9a241cb67fa5b4105f5fa49b819eabn => D + 0x3e50eac54cdb8a6a56a19c63bf258fba7a4ece81fb7ccc1a23a6c2ca10a5c6ebn => E + 0xd430ab9c92963a974ac5dacb52384c5aa878ffd1435271249d550dacad0cd7d0n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + diff --git a/test/diagnostic/special.zkasm b/test/diagnostic/special.zkasm index 3e4c798a..1de80f88 100644 --- a/test/diagnostic/special.zkasm +++ b/test/diagnostic/special.zkasm @@ -1,2 +1,3 @@ INCLUDE "special/infree0.zkasm" INCLUDE "special/sp_offset.zkasm" +INCLUDE "special/assume_free.zkasm" diff --git a/test/diagnostic/special/assume_free.zkasm b/test/diagnostic/special/assume_free.zkasm new file mode 100644 index 00000000..b2cf1a18 --- /dev/null +++ b/test/diagnostic/special/assume_free.zkasm @@ -0,0 +1,104 @@ +VAR GLOBAL v0[8] +VAR GLOBAL v1[12] +VAR GLOBAL padding[7] +VAR GLOBAL g7_8[8] +VAR GLOBAL g15 +VAR CTX lpadding[10] +VAR CTX l10_80[80] +VAR CTX l90 +CONST %CS1 = 10 +CONST %CS2 = 2 +CONST %CS3 = 3 +CONSTL %CL1 = 100 + +VAR GLOBAL assumef_var1 +VAR GLOBAL assumef_var2 +VAR GLOBAL assumef_var3 +VAR GLOBAL assumef_var4 +VAR GLOBAL assumef_var5 + + :JMP(assume_free_start) + ; This is used for calls + assume_free_label_call: + 1 => A + 1 => A + 1 => A + :RETURN + + assume_free_label_no_call: + :RETURN + +assume_free_start: + ;; + ; F_MLOAD + ;; + ; small test + 10 :MSTORE(assumef_var1) + $ + 3 => A :F_MLOAD(assumef_var1) + 13 :ASSERT + + 10 :MLOAD(assumef_var1) + + ; 2^32-1 (maximum allowed value for freeinput computations) + 0xfffffffen :MSTORE(assumef_var1) + $ + 1 => A :F_MLOAD(assumef_var1) + 0xffffffffn :ASSERT + + ; random value + 0x9334b875 :MSTORE(assumef_var1) + $ + 0x6ccb478a => A :F_MLOAD(assumef_var1) + 0xffffffffn :ASSERT + + ; zero value + 0x0 :MSTORE(assumef_var1) + $ + 0x6ccb478a => A :F_MLOAD(assumef_var1) + 0x6ccb478a :ASSERT + + ; large value + 1 :MSTORE(assumef_var1) + $ + 0xF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFn => A :F_MLOAD(assumef_var1) + 0xF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEF0n: ASSERT + + ; large values + 0xB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFA0A1A2A3A4A5A6A7A8A9AAABACADAEAFn :MSTORE(assumef_var1) + $ + 0x4040404040404040404040404040404040404040404040404040404040404040n => A :F_MLOAD(assumef_var1) + 0xF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFn: ASSERT + + ; large2 values + + 0xB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFA0A1A2A3A4A5A6A7A8A9AAABACADAEAFn :MSTORE(assumef_var1) + $ + 0x4F4E4D4C4B4A494847464544434241405F5E5D5C5B5A59585756555453525150n => A :F_MLOAD(assumef_var1) + 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFn: ASSERT + + + 0x1111111111111111111111111111111111111111111111111111111111111111n :MSTORE(g15) + 0x2222222222222222222222222222222222222222222222222222222222222222n :MSTORE(l90) + 0x3333333333333333333333333333333333333333333333333333333333333333n :MSTORE(g7_8) + 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn :MSTORE(g7_8+1) + 0x5555555555555555555555555555555555555555555555555555555555555555n :MSTORE(g7_8+3) + 0x6666666666666666666666666666666666666666666666666666666666666666n :MSTORE(g7_8+5) + 0x4444444444444444444444444444444444444444444444444444444444444444n :MSTORE(l10_80) + + 2 * $ + 8 => A :F_MLOAD(g15) + 0x222222222222222222222222222222222222222222222222222222222222222An :ASSERT + 2 * $ + 8 => A :F_MLOAD(l90) + 0x444444444444444444444444444444444444444444444444444444444444444Cn :ASSERT + 2 * $ + 8 => A :F_MLOAD(g7_8) + 0x666666666666666666666666666666666666666666666666666666666666666En :ASSERT + 2 * $ + 8 => A :F_MLOAD(l10_80) + 0x8888888888888888888888888888888888888888888888888888888888888890n :ASSERT + + 0 => E + $ => A :MLOAD(g7_8[E+2]) + 0 :ASSERT + + 2 * $ + 8 => A :F_MLOAD(g7_8[E+2]) + 8 :ASSERT + + 1 => E + 2 * $ + 1 => A :F_MLOAD(g7_8[E+2]) + 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABn :ASSERT + + 6 => E + $ + 1 => A :F_MLOAD(g7_8[E-1]) + 0x6666666666666666666666666666666666666666666666666666666666666667n :ASSERT diff --git a/test/features/arith_secp256r1/gen.sage b/test/features/arith_secp256r1/gen.sage new file mode 100644 index 00000000..c598e62b --- /dev/null +++ b/test/features/arith_secp256r1/gen.sage @@ -0,0 +1,66 @@ +from pathlib import Path + +source_path = Path(__file__).resolve() +source_dir = source_path.parent + +p = 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffff +K = GF(p) +a = K(0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc) +b = K(0x5ac635d8aa3a93e7b3ebbd55769886bc651d06b0cc53b0f63bce3c3e27d2604b) +E = EllipticCurve(K, (a, b)) +G = E(0x6b17d1f2e12c4247f8bce6e563a440f277037d812deb33a0f4a13945d898c296, 0x4fe342e2fe1a7f9b8ee7eb4a7c0f9e162bce33576b315ececbb6406837bf51f5) +E.set_order(0xffffffff00000000ffffffffffffffffbce6faada7179e84f3b9cac2fc632551 * 0x1) + +diagnostic_dir = "../../diagnostic/operations/arith" +f_diff = open(Path.joinpath(source_dir, diagnostic_dir, "secp256r1_ecadd_different_ops.zkasm"), "w") +f_same = open(Path.joinpath(source_dir, diagnostic_dir, "secp256r1_ecadd_same_ops.zkasm"), "w") + +def output_operation(f, p1, p2, operation_type): + pr = p1 + p2 + f.write("\t" + format(int(p1[0]),"#066x") + "n => A\n") + f.write("\t" + format(int(p1[1]),"#066x") + "n => B\n") + f.write("\t" + format(int(p2[0]),"#066x") + "n => C\n") + f.write("\t" + format(int(p2[1]),"#066x") + "n => D\n") + f.write("\t" + format(int(pr[0]),"#066x") + "n => E\n") + f.write("\t" + format(int(pr[1]),"#066x") + "n : ARITH_SECP256R1_ECADD_" + operation_type + "\n") + f.write("\n\t\t\t:CALL(REDUNDANT_ARITH_SECP256R1_ECADD_" + operation_type + "_CHECK)\n\n\n") + +special_points = ( + # special points (x:p-3) + (0xffffffff00000001000000000000000000000000fffffffffffffffffffffffc, 0x19719bebf6aea13f25c96dfd7c71f5225d4c8fc09eb5a0ab9f39e9178e55c121), + # special points (y:p-1) + (0x8d0177ebab9c6e9e10db6dd095dbac0d6375e8a97b70f611875d877f0069d2c7,0xffffffff00000001000000000000000000000000fffffffffffffffffffffffe), + (0x6916fac45e568b6b9e2e2ecd611b282e5fcc40a3067d601057f879ce5a8a73cc,0xffffffff00000001000000000000000000000000fffffffffffffffffffffffe), + (0x9e78d4ef60d05f750f6636209092bc43cbdd6b47e11a9de20a9feb2a50bb96c,0xffffffff00000001000000000000000000000000fffffffffffffffffffffffe)) + +for i in range(4): + p1 = E(special_points[i]) + p2 = E.random_point() + pr = p1 - p2 + output_operation(f_diff, pr, p2, "DIFFERENT") + +p1 = E.random_point() +p2 = G +output_operation(f_diff, pr, p2, "DIFFERENT") + + +p1 = E.random_point() +p2 = G +pr = p1 - p2 +output_operation(f_diff, pr, p2, "DIFFERENT") + + +p1 = G +p2 = E.random_point() +pr = p1 - p2 +output_operation(f_diff, pr, p2, "DIFFERENT") + +for i in range(250): + p1 = E.random_point() + p2 = E.random_point() + output_operation(f_diff, p1, p2, "DIFFERENT") + output_operation(f_same, p1, p1, "SAME") + +f_diff.close() +f_same.close() + diff --git a/test/features/durian/durian.zkasm b/test/features/durian/durian.zkasm new file mode 100644 index 00000000..58120b58 --- /dev/null +++ b/test/features/durian/durian.zkasm @@ -0,0 +1,461 @@ +; constants needed by executor C++ +CONST %N = 2**23 + +VAR GLOBAL lastHashKId +VAR GLOBAL lastHashPId +VAR GLOBAL lastHashSId + +VAR GLOBAL initial_A +VAR GLOBAL initial_B +VAR GLOBAL initial_C +VAR GLOBAL initial_D +VAR GLOBAL initial_E +VAR GLOBAL initial_CTX +VAR GLOBAL initial_SP +VAR GLOBAL initial_PC +VAR GLOBAL initial_GAS +VAR GLOBAL initial_SR +VAR GLOBAL initial_RR +VAR GLOBAL initial_HASHPOS +VAR GLOBAL initial_RCX + +start: + + STEP => A + 0 :ASSERT + + + A :MSTORE(initial_A) + B :MSTORE(initial_B) + C :MSTORE(initial_C) + D :MSTORE(initial_D) + E :MSTORE(initial_E) + CTX :MSTORE(initial_CTX) + SP :MSTORE(initial_SP) + PC :MSTORE(initial_PC) + GAS :MSTORE(initial_GAS) + SR :MSTORE(initial_SR) + RR :MSTORE(initial_RR) + HASHPOS :MSTORE(initial_HASHPOS) + RCX :MSTORE(initial_RCX) + 0 => A,B,C,D,E,CTX, SP, PC, GAS, SR, RR, HASHPOS, RCX + + -1 :MSTORE(lastHashKId) + -1 :MSTORE(lastHashPId) + -1 :MSTORE(lastHashSId) + +INCLUDE "../../diagnostic/constants.zkasm" +INCLUDE "../../diagnostic/lvalues.zkasm" + +INCLUDE "../../../node_modules/@0xpolygonhermez/zkevm-rom/main/constants.zkasm" + +VAR GLOBAL g7_8[8] +VAR GLOBAL g15 +VAR CTX l10_80[80] +VAR CTX l90 + +VAR GLOBAL assumef_var1 + + :JMP(assume_free_start) + +REDUNDANT_ARITH_BN254_ADDFP2_CHECK: + + ${(A+C) % const.BN254_P} => E + ${(B+D) % const.BN254_P} :ARITH_BN254_ADDFP2 + + ${ARITH_BN254_ADDFP2(A,C)} => E + ${ARITH_BN254_ADDFP2(B,D)} :ARITH_BN254_ADDFP2 + :RETURN + +REDUNDANT_ARITH_BN254_MULFP2_CHECK: + + ${(A*C) >= (B*D) ? (((A*C)-(B*D)) % const.BN254_P) : (const.BN254_P - (((B*D)-(A*C)) % const.BN254_P))} => E + ${((A*D)+(B*C)) % const.BN254_P} :ARITH_BN254_MULFP2 + + ${ARITH_BN254_MULFP2_X(A,B,C,D)} => E + ${ARITH_BN254_MULFP2_Y(A,B,C,D)} :ARITH_BN254_MULFP2 + :RETURN + +REDUNDANT_ARITH_BN254_SUBFP2_CHECK: + + ${(A + const.BN254_P - C) % const.BN254_P} => E + ${(B + const.BN254_P - D) % const.BN254_P} :ARITH_BN254_SUBFP2 + + ${ARITH_BN254_SUBFP2(A,C)} => E + ${ARITH_BN254_SUBFP2(B,D)} :ARITH_BN254_SUBFP2 + :RETURN + +REDUNDANT_ARITH_ECADD_DIFFERENT: + + ${xAddPointEc(A,B,C,D)} => E + ${yAddPointEc(A,B,C,D)} :ARITH_ECADD_DIFFERENT + :RETURN + +REDUNDANT_ARITH_ECADD_SAME: + + ${xDblPointEc(A,B)} => E + ${yDblPointEc(A,B)} :ARITH_ECADD_SAME + :RETURN + +REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK: + + ${xAddPointEc_secp256r1(A,B,C,D)} => E + ${yAddPointEc_secp256r1(A,B,C,D)} :ARITH_SECP256R1_ECADD_DIFFERENT + :RETURN + +REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK: + + ${xDblPointEc_secp256r1(A,B)} => E + ${yDblPointEc_secp256r1(A,B)} :ARITH_SECP256R1_ECADD_SAME + :RETURN + +assume_free_start: + ;; + ; F_MLOAD + ;; + + ; small test + 10 :MSTORE(assumef_var1) + $ + 3 => A :F_MLOAD(assumef_var1) + 13 :ASSERT + + 10 :MLOAD(assumef_var1) + + ; 2^32-1 (maximum allowed value for freeinput computations) + 0xfffffffen :MSTORE(assumef_var1) + $ + 1 => A :F_MLOAD(assumef_var1) + 0xffffffffn :ASSERT + + ; random value + 0x9334b875 :MSTORE(assumef_var1) + $ + 0x6ccb478a => A :F_MLOAD(assumef_var1) + 0xffffffffn :ASSERT + + ; zero value + 0x0 :MSTORE(assumef_var1) + $ + 0x6ccb478a => A :F_MLOAD(assumef_var1) + 0x6ccb478a :ASSERT + + ; large value + 1 :MSTORE(assumef_var1) + $ + 0xF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFn => A :F_MLOAD(assumef_var1) + 0xF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEF0n: ASSERT + + ; large values + 0xB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFA0A1A2A3A4A5A6A7A8A9AAABACADAEAFn :MSTORE(assumef_var1) + $ + 0x4040404040404040404040404040404040404040404040404040404040404040n => A :F_MLOAD(assumef_var1) + 0xF0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFFE0E1E2E3E4E5E6E7E8E9EAEBECEDEEEFn: ASSERT + + ; large2 values + + 0xB0B1B2B3B4B5B6B7B8B9BABBBCBDBEBFA0A1A2A3A4A5A6A7A8A9AAABACADAEAFn :MSTORE(assumef_var1) + $ + 0x4F4E4D4C4B4A494847464544434241405F5E5D5C5B5A59585756555453525150n => A :F_MLOAD(assumef_var1) + 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFn: ASSERT + + + 0x1111111111111111111111111111111111111111111111111111111111111111n :MSTORE(g15) + 0x2222222222222222222222222222222222222222222222222222222222222222n :MSTORE(l90) + 0x3333333333333333333333333333333333333333333333333333333333333333n :MSTORE(g7_8) + 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAn :MSTORE(g7_8+1) + 0x5555555555555555555555555555555555555555555555555555555555555555n :MSTORE(g7_8+3) + 0x6666666666666666666666666666666666666666666666666666666666666666n :MSTORE(g7_8+5) + 0x4444444444444444444444444444444444444444444444444444444444444444n :MSTORE(l10_80) + + 2 * $ + 8 => A :F_MLOAD(g15) + 0x222222222222222222222222222222222222222222222222222222222222222An :ASSERT + 2 * $ + 8 => A :F_MLOAD(l90) + 0x444444444444444444444444444444444444444444444444444444444444444Cn :ASSERT + 2 * $ + 8 => A :F_MLOAD(g7_8) + 0x666666666666666666666666666666666666666666666666666666666666666En :ASSERT + 2 * $ + 8 => A :F_MLOAD(l10_80) + 0x8888888888888888888888888888888888888888888888888888888888888890n :ASSERT + + 0 => E + $ => A :MLOAD(g7_8[E+2]) + 0 :ASSERT + + 2 * $ + 8 => A :F_MLOAD(g7_8[E+2]) + 8 :ASSERT + + 1 => E + 2 * $ + 1 => A :F_MLOAD(g7_8[E+2]) + 0xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABn :ASSERT + + 6 => E + $ + 1 => A :F_MLOAD(g7_8[E-1]) + 0x6666666666666666666666666666666666666666666666666666666666666667n :ASSERT + + ; ARITH + + 0n => A + 0n => B + 0n => C + 0n => D + 0n :ARITH + + 2132730398305190967668080390814n => A + 54292886400143341927280054073980425823246656081n => B + 1n => C + 0n => D + 115792089237316195423570985008687907853269984665640564039457584007913129639935n :ARITH + + 0n => A + 20461646802298906980762583770860915677116535487874170572552628192653608014730n => B + 6992781226881595625739967127142000520977098989512983986793047316871483459918n => C + 0n => D + 6992781226881595625739967127142000520977098989512983986793047316871483459918n :ARITH + + 8185294398670857206588387453006456912211107202444686619085770886559782939833n => A + 0n => B + 20430345858968609673351474973766446317558778020642244131730714986194551525821n => C + 0n => D + 20430345858968609673351474973766446317558778020642244131730714986194551525821n :ARITH + + + ; ARITH_BN254_ADDFP2 + + 13711656746733268222567533172112676883000101112146768892351115648827973300480n => A + 6393502799910690217707124289990572571312170142480195367219759198051579256141n => B + 771545936994033968269212401953290148355162413878965127328485084765403652892n => C + 14359778202859430638045081279086754832692244010987672849237907527453437647710n => D + 14483202683727302190836745574065967031355263526025734019679600733593376953372n => E + 20753281002770120855752205569077327404004414153467868216457666725505016903851n :ARITH_BN254_ADDFP2 + :CALL(REDUNDANT_ARITH_BN254_ADDFP2_CHECK) + + 8950689131250675683911095685718419621318943349561831872421652304087298144165n => A + 1201117866460819778145459617748368949511220862457430989430304177713753150104n => B + 16954731464485579583787780888674604373523807040372883934851063671747148339817n => C + 19351931856693804646323751145431439633992380512831548435359093289277373166030n => D + 4017177723896980045452470829135748906146439232636892144583678081189220275399n => E + 20553049723154624424469210763179808583503601375288979424789397466991126316134n :ARITH_BN254_ADDFP2 + :CALL(REDUNDANT_ARITH_BN254_ADDFP2_CHECK) + + + ; ARITH_BN254_MULFP2 + + 0n => A + 0n => B + 0n => C + 0n => D + 0n => E + 0n :ARITH_BN254_MULFP2 + :CALL(REDUNDANT_ARITH_BN254_MULFP2_CHECK) + + 0n => A + 0n => B + 1n => C + 0n => D + 0n => E + 0n :ARITH_BN254_MULFP2 + :CALL(REDUNDANT_ARITH_BN254_MULFP2_CHECK) + + 1 => A,B,C,D + 0 => E + 2 :ARITH_BN254_MULFP2 + :CALL(REDUNDANT_ARITH_BN254_MULFP2_CHECK) + + 115792089237316195423570985008687907853269984665640564039457584007913129639935n => A + 115792089237316195423570985008687907853269984665640564039457584007913129639935n => B + 0n => C + 0n => D + 0n => E + 0n :ARITH_BN254_MULFP2 + :CALL(REDUNDANT_ARITH_BN254_MULFP2_CHECK) + + 115792089237316195423570985008687907853269984665640564039457584007913129639935n => A + 0n => B + 115792089237316195423570985008687907853269984665640564039457584007913129639935n => C + 0n => D + 12283109618583340521412061117291584720854994367414008739435419022702680857751n => E + 0n :ARITH_BN254_MULFP2 + :CALL(REDUNDANT_ARITH_BN254_MULFP2_CHECK) + + 13711656746733268222567533172112676883000101112146768892351115648827973300480n => A + 399593924994418138606695268124410785707010633905012210451234949878223703508n => B + 771545936994033968269212401953290148355162413878965127328485084765403652892n => C + 14359778202859430638045081279086754832692244010987672849237907527453437647710n => D + 11442959275179928994186022512829515819458919430637441527826162829474096963046n => E + 14810311712192582060568872108847442858577129136466113105142261840396162638808n :ARITH_BN254_MULFP2 + :CALL(REDUNDANT_ARITH_BN254_MULFP2_CHECK) + + + ; ARITH_BN254_SUBFP2 + + 13711656746733268222567533172112676883000101112146768892351115648827973300480n => A + 399593924994418138606695268124410785707010633905012210451234949878223703508n => B + 771545936994033968269212401953290148355162413878965127328485084765403652892n => C + 14359778202859430638045081279086754832692244010987672849237907527453437647710n => D + 12940110809739234254298320770159386734644938698267803765022630564062569647588n => E + 7928058593974262722808019734294931041711077780215163023902365317070012264381n :ARITH_BN254_SUBFP2 + :CALL(REDUNDANT_ARITH_BN254_SUBFP2_CHECK) + + 8950689131250675683911095685718419621318943349561831872421652304087298144165n => A + 1201117866460819778145459617748368949511220862457430989430304177713753150104n => B + 16954731464485579583787780888674604373523807040372883934851063671747148339817n => C + 19351931856693804646323751145431439633992380512831548435359093289277373166030n => D + 13884200538604371322369720542301090336491447466486771600259626526985376012931n => E + 3737428881606290354068114217574204404215151506923706216760248783081606192657n :ARITH_BN254_SUBFP2 + :CALL(REDUNDANT_ARITH_BN254_SUBFP2_CHECK) + + 2999113016370801447448637477310555551699411366746876888402482806647931650955n => A + 15111836776712714633472521107426170732646708720491125290424115686452538044788n => B + 1615640209694347989024567018706328391116430477872687075840266591062548700110n => C + 1361179629352358267333550734567663993971386151768430307761609245213368478601n => D + 1383472806676453458424070458604227160582980888874189812562216215585382950845n => E + 13750657147360356366138970372858506738675322568722694982662506441239169566187n :ARITH_BN254_SUBFP2 + :CALL(REDUNDANT_ARITH_BN254_SUBFP2_CHECK) + + + ; ARITH_ECADD_DIFFERENT + + %SECP256K1_GX => A + %SECP256K1_GY => B + 89565891926547004231252920425935692360644145829622209833684329913297188986597n => C + 12158399299693830322967808612713398636155367887041628176798871954788371653930n => D + 112711660439710606056748659173929673102114977341539408544630613555209775888121n => E + 25583027980570883691656905877401976406448868254816295069919888960541586679410n :ARITH_ECADD_DIFFERENT + :CALL(REDUNDANT_ARITH_ECADD_DIFFERENT) + + 112711660439710606056748659173929673102114977341539408544630613555209775888121n => A + 25583027980570883691656905877401976406448868254816295069919888960541586679410n => B + %SECP256K1_GX => C + %SECP256K1_GY => D + 103388573995635080359749164254216598308788835304023601477803095234286494993683n => E + 37057141145242123013015316630864329550140216928701153669873286428255828810018n :ARITH_ECADD_DIFFERENT + :CALL(REDUNDANT_ARITH_ECADD_DIFFERENT) + + 55066263022277343669578718895168534326250603453777594175500187360389116729240n => A + 32670510020758816978083085130507043184471273380659243275938904335757337482424n => B + 89565891926547004231252920425935692360644145829622209833684329913297188986597n => C + 12158399299693830322967808612713398636155367887041628176798871954788371653930n => D + 112711660439710606056748659173929673102114977341539408544630613555209775888121n => E + 25583027980570883691656905877401976406448868254816295069919888960541586679410n :ARITH_ECADD_DIFFERENT + :CALL(REDUNDANT_ARITH_ECADD_DIFFERENT) + + ; ARITH_ECADD_SAME + + %SECP256K1_GX => A + %SECP256K1_GY => B + 89565891926547004231252920425935692360644145829622209833684329913297188986597n => E + 12158399299693830322967808612713398636155367887041628176798871954788371653930n :ARITH_ECADD_SAME + :CALL(REDUNDANT_ARITH_ECADD_SAME) + + 89565891926547004231252920425935692360644145829622209833684329913297188986597n => A + 12158399299693830322967808612713398636155367887041628176798871954788371653930n => B + 103388573995635080359749164254216598308788835304023601477803095234286494993683n => E + 37057141145242123013015316630864329550140216928701153669873286428255828810018n :ARITH_ECADD_SAME + :CALL(REDUNDANT_ARITH_ECADD_SAME) + + 115780575977492633039504758427830329241728645270042306223540962614150928364886n => A + 78735063515800386211891312544505775871260717697865196436804966483607426560663n => B + 115780575977492633039504758427830329241728645270042306223540962614150928364886n => C + 78735063515800386211891312544505775871260717697865196436804966483607426560663n => D + 94111259592240215275188773285036844871058226277992966241101117022315524122714n => E + 76870767327212528811304566602812752860184934880685532702451763239157141742375n :ARITH_ECADD_SAME + :CALL(REDUNDANT_ARITH_ECADD_SAME) + + ; ARITH_SECP256R1_ECADD_DIFFERENT + + 0x544311262e9e2949e7601fc620d04082c46fa29d94a9b414f5dde31c7aac09f8n => A + 0xcc19d44560f5cbe1b96a22b4ea202ab68ff9083763a4a1a1cbac1ca9b6ed11d4n => B + 0xf92c7bc653fc5e5e16b2d1b5a4f8c85078dbd737e46eefd1186d5d453cb71c04n => C + 0xe78feb012c46fc1a79af6ad830ccb124de7de7b9313122420fa30bdc83f4057fn => D + 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffcn => E + 0x19719bebf6aea13f25c96dfd7c71f5225d4c8fc09eb5a0ab9f39e9178e55c121n : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0xc80ff59db5ecd988dbaba55f9197a5844c00e515ecc62dac46bad5c5280868a6n => A + 0x0bbe8299fca62abd0932ab0c53cd66b6609cc6720106d210f7750fcc6c445988n => B + 0x9597af33e3e9acbbf303ccb4b36aeb455979fe6ca35d9f27e86fae5aacda1a08n => C + 0x1ef8ce2d14fb74686b648427dd6ba4e44bf805c5590a65bdc6ff00e55dd83d2an => D + 0x8d0177ebab9c6e9e10db6dd095dbac0d6375e8a97b70f611875d877f0069d2c7n => E + 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffen : ARITH_SECP256R1_ECADD_DIFFERENT + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x728cad943915a8c2efee531dd868edeb750b818c442a4498fea8e578b6eb9d29n => A + 0x94548cd42b424a4a88173ef56add5b298ada92c024fd21436c19c020b6f782d2n => B + 0x7f45378a3e45b342403c9f645cfa8bcd94881f1bdbf3388d36c5c40fae0336c1n => C + 0x3b486438f3e1b4ffd9cb58225995377ffdd3d58abc6eeddc3e5ea2d5ea10082cn => D + 0x6916fac45e568b6b9e2e2ecd611b282e5fcc40a3067d601057f879ce5a8a73ccn => E + 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffen : ARITH_SECP256R1_ECADD_DIFFERENT + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_DIFFERENT_CHECK) + + + 0x9b09703235204c5107fbfde0699bb9d99335a5d71fbcbf0d8ad05dfa7e95f809n => A + 0x739c8f31333aeed1fbcbd4312dd4a735ee7409071995b2b1457b21f343454d64n => B + 0x9b09703235204c5107fbfde0699bb9d99335a5d71fbcbf0d8ad05dfa7e95f809n => C + 0x739c8f31333aeed1fbcbd4312dd4a735ee7409071995b2b1457b21f343454d64n => D + 0xd340cf8faf00eb6dc57efe3434673941a3016a6cf070d0b8562fbd75a1931411n => E + 0xe41118cc49d7457b08dc63c505cb329d3623aa8d443050cd74606f348755df5cn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xfc6c194044b07efdd0abd9a9ae12f5506afa47381211f5b09ee0a371666afd6dn => A + 0x826d12e63bc33ab066a1991d0c2e08c5512a6312a9461815c49b3983f88ce45en => B + 0xfc6c194044b07efdd0abd9a9ae12f5506afa47381211f5b09ee0a371666afd6dn => C + 0x826d12e63bc33ab066a1991d0c2e08c5512a6312a9461815c49b3983f88ce45en => D + 0x3ace81f19275390017eb1d767cf0e284e26563a7073c661a8033309370ce8bf8n => E + 0x5a01eb286257703d7babc3b8f3b6e206b99735fb03eabcdb19c328da124775dbn : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + 0xf374f93d33e90700da7b6e4ce21d222d3522ef70c031d03156146275d5264befn => A + 0x0c753a0e4d05ead857678cefd1c90fbdbbf3ff45ebb8d10f9120e7656f52b7adn => B + 0xf374f93d33e90700da7b6e4ce21d222d3522ef70c031d03156146275d5264befn => C + 0x0c753a0e4d05ead857678cefd1c90fbdbbf3ff45ebb8d10f9120e7656f52b7adn => D + 0x7f80e2e3b4eb2c082b06e283e74ea8b895b4f6f7db9a64c55ac274b0b344ddfcn => E + 0xa08aec378d16c8ea6c611780af280e66cb9332f4fb39b6888efedc1e3783cd52n : ARITH_SECP256R1_ECADD_SAME + + :CALL(REDUNDANT_ARITH_SECP256R1_ECADD_SAME_CHECK) + + + :JMP(end) + +ecrecover_store_args: +ecrecover_end: +checkFirstTxType: +writeBlockInfoRoot: +outOfCountersStep: +outOfCountersArith: +outOfCountersBinary: +outOfCountersKeccak: +outOfCountersSha256: +outOfCountersMemalign: +outOfCountersPoseidon: +outOfCountersPadding: +invalidIntrinsicTxSenderCode: + + A => A ; NOP + +end: + + $ => A :MLOAD(initial_A) + $ => B :MLOAD(initial_B) + $ => C :MLOAD(initial_C) + $ => D :MLOAD(initial_D) + $ => E :MLOAD(initial_E) + $ => CTX :MLOAD(initial_CTX) + $ => SP :MLOAD(initial_SP) + $ => PC :MLOAD(initial_PC) + $ => GAS :MLOAD(initial_GAS) + $ => SR :MLOAD(initial_SR) + $ => RR :MLOAD(initial_RR) + $ => HASHPOS :MLOAD(initial_HASHPOS) + $ => RCX :MLOAD(initial_RCX) + +; label finalizeExecution needed by executor C++ +finalizeExecution: + :JMP(finalWait) +finalWait: + ${beforeLast()} :JMPN(finalWait) + :JMP(start) +opINVALID: +; label checkAndSaveFrom needed by executor C++ +checkAndSaveFrom: + :JMP(opINVALID) diff --git a/test/verify_zkasm.js b/test/verify_zkasm.js index 04059e7a..3d43347d 100644 --- a/test/verify_zkasm.js +++ b/test/verify_zkasm.js @@ -27,12 +27,10 @@ const smPaddingSha256 = require("../src/sm/sm_padding_sha256.js"); const smPaddingSha256Bit = require("../src/sm/sm_padding_sha256bit/sm_padding_sha256bit.js"); const smBits2FieldSha256 = require("../src/sm/sm_bits2field_sha256.js"); const smSha256F = require("../src/sm/sm_sha256f/sm_sha256f.js"); -const { config } = require("yargs"); -module.exports.verifyZkasm = async function (zkasmFile, pilVerification = true, pilConfig = {}, mainConfig = {}) { +module.exports.verifyZkasm = async function (zkasmFile, pilVerification = true, pilConfig = {}, mainConfig = {}, zkasmConfig = {}) { const Fr = new F1Field("0xFFFFFFFF00000001"); - const brief = false; /* pilConfig example: @@ -49,16 +47,19 @@ module.exports.verifyZkasm = async function (zkasmFile, pilVerification = true, console.log('force use N = 2 ** '+Math.log2(pilConfig.defines.N)); } + if (mainConfig && mainConfig.pilJsonFilename) { + fs.writeFileSync(mainConfig.pilJsonFilename, JSON.stringify(pil)); + } + const constPols = (mainConfig && mainConfig.constants === false) ? false : newConstantPolsArray(pil); const cmPols = newCommitPolsArray(pil); const polDeg = cmPols.$$defArray[0].polDeg; const N = polDeg; - console.log('Pil N = 2 ** '+Math.log2(polDeg)); + console.log('PIL N = 2 ** '+Math.log2(polDeg)); const input = JSON.parse(await fs.promises.readFile(path.join(__dirname, "inputs", "empty_input.json"), "utf8")); - const zkasmFinalFilename = zkasmFile.startsWith('/') ? zkasmFile : path.join(__dirname, "zkasm", zkasmFile); - console.log(zkasmFinalFilename); - const rom = await zkasm.compile(zkasmFinalFilename); + const zkasmFinalFilename = (zkasmFile.startsWith('/') || zkasmConfig.compileFromString) ? zkasmFile : path.join(__dirname, "zkasm", zkasmFile); + const rom = await zkasm.compile(zkasmFinalFilename, null, zkasmConfig); if (mainConfig && mainConfig.romFilename) { await fs.promises.writeFile(mainConfig.romFilename, JSON.stringify(rom, null, 1) + "\n"); @@ -155,6 +156,9 @@ module.exports.verifyZkasm = async function (zkasmFile, pilVerification = true, } } } + if (mainConfig && mainConfig.constFilename && constPols !== false) { + await constPols.saveToFile(mainConfig.constFilename); + } } console.log("Exec Main..."); @@ -262,17 +266,10 @@ module.exports.verifyZkasm = async function (zkasmFile, pilVerification = true, } } - if (mainConfig && mainConfig.constFilename && constPols !== false) { - await constPols.saveToFile(mainConfig.constFilename); - } - if (mainConfig && mainConfig.commitFilename) { await cmPols.saveToFile(mainConfig.commitFilename); } - if (mainConfig && mainConfig.pilJsonFilename) { - fs.writeFileSync(mainConfig.pilJsonFilename, JSON.stringify(pil)); - } } if (mainConfig && mainConfig.externalPilVerification) { diff --git a/tools/arith/arith.ejs.pil b/tools/arith/arith.ejs.pil index c53af5ff..e366e2f8 100644 --- a/tools/arith/arith.ejs.pil +++ b/tools/arith/arith.ejs.pil @@ -1,27 +1,35 @@ /* Equations: + selEq arithEq + EQ0: A(x1) * B(y1) + C(x2) = D (y2) * 2 ** 256 + op (y3) 0 1 ARITH - EQ0: A(x1) * B(y1) + C(x2) = D (y2) * 2 ** 256 + op (y3) - selEq[0] + EQ1: s * x2 - s * x1 - y2 + y1 + (q0 * p1) lambda - ADD 1 2 ARITH_ECADD_DIFFERENT + EQ2: 2 * s * y1 - 3 * x1 * x1 + (q0 * p1) lambda - DBL 2 3 ARITH_ECADD_SAME + EQ3: s * s - x1 - x2 - x3 + (q1 * p1) x3 1+2 2,3 ARITH_ECADD_DIFFERENT, ARITH_ECADD_SAME + EQ4: s * x1 - s * x3 - y1 - y3 + (q2 * p1) y3 1+2 2,3 ARITH_ECADD_DIFFERENT, ARITH_ECADD_SAME - EQ1: s * x2 - s * x1 - y2 + y1 + (q0 * p1) lambda - ADD - selEq[1] - EQ2: 2 * s * y1 - 3 * x1 * x1 + (q0 * p1) lambda - DBL - selEq[2] - EQ3: s * s - x1 - x2 - x3 + (q1 * p1) x3 - selEq[3] - EQ4: s * x1 - s * x3 - y1 - y3 + (q2 * p1) y3 - selEq[3] + EQ5: x1 * x2 - y1 * y2 - x3 + (q1 * p2) 3 4 ARITH_BN254_MULFP2 + EQ6: y1 * x2 + x1 * y2 - y3 + (q2 * p2) 3 4 ARITH_BN254_MULFP2 - EQ5: x1 * x2 - y1 * y2 - x3 + (q1 * p2) - selEq[4] - EQ6: y1 * x2 + x1 * y2 - y3 + (q2 * p2) - selEq[4] + EQ7: x1 + x2 - x3 + (q1 * p2) 4 5 ARITH_BN254_ADDFP2 + EQ8: y1 + y2 - y3 + (q2 * p2) 4 5 ARITH_BN254_ADDFP2 - EQ7: x1 + x2 - x3 + (q1 * p2) - selEq[5] - EQ8: y1 + y2 - y3 + (q2 * p2) - selEq[5] + EQ9: x1 - x2 - x3 + (q1 * p2) 5 6 ARITH_BN254_SUBFP2 + EQ10: y1 - y2 - y3 + (q2 * p2) 5 6 ARITH_BN254_SUBFP2 - EQ9: x1 - x2 - x3 + (q1 * p2) - selEq[6] - EQ10: y1 - y2 - y3 + (q2 * p2) - selEq[6] + EQ11: s * x2 - s * x1 - y2 + y1 + (q0 * p3) lambda - ADD 6 7 ARITH_SECP256R1_ECADD_DIFFERENT + EQ12: 2 * s * y1 - 3 * x1 * x1 - a + (q0 * p3) lambda - DBL 7 8 ARITH_SECP256R1_ECADD_SAME + EQ13: s * s - x1 - x2 - x3 + (q1 * p3) x3 6+7 7,8 ARITH_SECP256R1_ECADD_DIFFERENT, ARITH_SECP256R1_ECADD_SAME + EQ14: s * x1 - s * x3 - y1 - y3 + (q2 * p3) y3 6+7 7,8 ARITH_SECP256R1_ECADD_DIFFERENT, ARITH_SECP256R1_ECADD_SAME where p1 refers to the base field order of: · Secp256k1: 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE FFFF FC2F and p2 refers to the base field order of: · BN254: 0x3064 4E72 E131 A029 B850 45B6 8181 585D 9781 6A91 6871 CA8D 3C20 8C16 D87C FD47 + and p3 refers to the base field order of: + · Secp256r1: 0xFFFF FFFF 0000 0001 0000 0000 0000 0000 0000 0000 FFFF FFFF FFFF FFFF FFFF FFFF + */ include "global.pil"; @@ -43,13 +51,16 @@ namespace Arith(%N); pol commit q1[16]; pol commit q2[16]; - pol commit resultEq0; - pol commit resultEq1; - pol commit resultEq2; + pol commit resultEq; + + resultEq * (1 - resultEq) = 0; + + pol sel_secp256k1 = selEq[1] + selEq[2]; + pol sel_bn254 = selEq[3] + selEq[4] + selEq[5]; + pol sel_secp256r1 = selEq[6] + selEq[7]; - resultEq0 * (1 - resultEq0) = 0; - resultEq1 * (1 - resultEq1) = 0; - resultEq2 * (1 - resultEq2) = 0; + pol sel_check_diff = selEq[1] + selEq[6]; + pol sel_check_lt_prime = sel_secp256k1 + sel_bn254 + sel_secp256r1; // FEATURE: // · Verify that the x1,x2 are different when adding different elliptic curve points (EQ1,EQ3,EQ4). @@ -113,21 +124,18 @@ namespace Arith(%N); // (A) forbidden, executor must control this situation, because expending an // unnecessary inverse. - (xAreDifferent - selEq[1]) * Global.CLK32[16] = 0; + (xAreDifferent - sel_check_diff) * Global.CLK32[16] = 0; // COST: 2 commit, 2 im, 0 constant, 4 constraints - // FEATURE: // - // Verify that the result of Secp256k1 addition (EQ1/EQ2,EQ3,EQ4) is free of aliases, i.e. that x3,y3 ∊ [0, p-1] - // Verify that the result of 𝔽p² = 𝔽p[u]/(u² + 1) multiplication, addition and subtraction (EQ5,EQ6 || EQ7,EQ8 || EQ9,EQ10) - // is free of aliases, i.e. that x3,y3 ∊ [0, p-1] - // + // Verify that the result of Secp256k1, Secp256r1 and BN254 operations are free of aliases, i.e. that x3,y3 ∊ [0, p-1] // Here, p refers, respectively, to the base field order of any of the following elliptic curves: // // Secp256k1: 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE FFFF FC2F // BN254: 0x3064 4E72 E131 A029 B850 45B6 8181 585D 9781 6A91 6871 CA8D 3C20 8C16 D87C FD47 + // Secp256r1: 0xFFFF FFFF 0000 0001 0000 0000 0000 0000 0000 0000 FFFF FFFF FFFF FFFF FFFF FFFF // // Strategy: Compare from the most significant chunk to the least significant chunk of x3 and y3 (A). On each chunk, // chunkLtPrime indicates whether the chunk is smaller than the FPEC chunk. valueLtPrime indicates if any @@ -149,68 +157,47 @@ namespace Arith(%N); // chunkPrime(0..15) - 1 = [0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFD, 0xFFFE, 0xFC2E] // chunkPrime(0..15) = [0x3064, 0x4e72, 0xe131, 0xa029, 0xb850, 0x45b6, 0x8181, 0x585d, 0x9781, 0x6a91, 0x6871, 0xca8d, 0x3c20, 0x8c16, 0xd87c, 0xfd47] // chunkPrime(0..15) - 1 = [0x3063, 0x4e71, 0xe130, 0xa028, 0xb84f, 0x45b5, 0x8180, 0x585c, 0x9780, 0x6a90, 0x6870, 0xca8c, 0x3c1f, 0x8c15, 0xd87b, 0xfd46] + // chunkPrime(0..15) = [0xFFFF, 0xFFFF, 0x0000, 0x0001, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF, 0xFFFF] + // chunkPrime(0..15) - 1 = [0xFFFE, 0xFFFE, N/A, 0x0000, N/A, N/A, N/A, N/A, N/A, N/A, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE, 0xFFFE] // - // different Secp256k1 prime chunks [0xFFFF, 0xFFFE, 0xFFFD, 0xFC2F, 0xFC2E] - // different BN254 prime chunks [0x3064, 0x4e72, 0xe131, 0xa029, 0xb850, 0x45b6, 0x8181, 0x585d, 0x9781, 0x6a91, 0x6871, 0xca8d, 0x3c20, 0x8c16, 0xd87c, 0xfd47, - // 0x3063, 0x4e71, 0xe130, 0xa028, 0xb84f, 0x45b5, 0x8180, 0x585c, 0x9780, 0x6a90, 0x6870, 0xca8c, 0x3c1f, 0x8c15, 0xd87b, 0xfd46] - - // CLK0 CLK1 CLK2 CLK3 CLK4 CLK5 CLK6 CLK7 CLK8 CLK9 CLK10 CLK11 CLK12 CLK13 CLK14 CLK15 - // Secp256k1: 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFF fffe FFFF fc2f - // BN254: 0x3064 4e72 e131 a029 b850 45b6 8181 585d 9781 6a91 6871 ca8d 3c20 8c16 d87c fd47 + // N/A: means there aren't valid values, if prover said that this chunk is smaller it's false. + // NOTE: first block of 2^16 values are all valid, This is convenient because the range selector 0 then indicates any valid 16-bit value // - // RANGE_SEL P_RANGE BASE - // / 0 [0,0xFFFF] CLK0, ..., CLK12, CLK14 - // | 1 [0,0xFFFE] CLK13 - // Secp256k1 | 2 [0,0xFFFD] - // | 3 [0,0xFC2F] CLK15 - // \ 4 [0,0xFC2E] - // / 5 [0,0x3064] CLK0 - // | 6 [0,0x3063] - // | 7 [0,0x4e72] CLK1 - // | 8 [0,0x4e71] - // | 9 [0,0xe131] CLK2 - // | 10 [0,0xe130] - // | 11 [0,0xa029] CLK3 - // | 12 [0,0xa028] - // | 13 [0,0xb850] CLK4 - // | 14 [0,0xb84f] - // | 15 [0,0x45b6] CLK5 - // | 16 [0,0x45b5] - // | 17 [0,0x8181] CLK6 - // | 18 [0,0x8180] - // | 19 [0,0x585d] CLK7 - // BN254 | 20 [0,0x585c] - // | 21 [0,0x9781] CLK8 - // | 22 [0,0x9780] - // | 23 [0,0x6a91] CLK9 - // | 24 [0,0x6a90] - // | 25 [0,0x6871] CLK10 - // | 26 [0,0x6870] - // | 27 [0,0xca8d] CLK11 - // | 28 [0,0xca8c] - // | 29 [0,0x3c20] CLK12 - // | 30 [0,0x3c1f] - // | 31 [0,0x8c16] CLK13 - // | 32 [0,0x8c15] - // | 33 [0,0xd87c] CLK14 - // | 34 [0,0xd87b] - // | 35 [0,0xfd47] CLK15 - // \ 36 [0,0xfd46] + // RANGE_SEL BYTE2 + // 0 0..2**16-1 + // ---------------------------- + // 1 0..2**16-2 + // 0 2**16-1 (*) + // ----------------------------- + // 2 0..TO <--- this block check a value from 0..TO + // 0 TO+1..2**16-1 (*) (even range_sel was used to check a value not is greater than prime chunk) + // ----------------------------- + // 3 0..TO-1 <--- this block check a value less than TO + // 0 TO..2**16-1 (*) (odd range_sel was used to check a value is less than prime chunk) + // ----------------------------- // - // pRangeSecp256k1 = (CLK13 + 3 * CLK15 + chunkLtPrime) * selEq[3] - // pRangeBN254 = (5 * CLK0 + 7 * CLK1 + 9 * CLK2 + 11 * CLK3 + 13 * CLK4 + 15 * CLK5 + 17 * CLK6 + 19 * CLK7 + 21 * CLK8 + 23 * CLK9 + 25 * CLK10 + 27 * CLK11 + 29 * CLK12 + 31 * CLK13 + 33 * CLK14 + 35 * CLK15) * (selEq[4] + selEq[5] + selEq[6]) - // pRange = (pRangeSecp256k1 + pRangeBN254) * (1 - valueLtPrime) + // (*) it's possible compact table if invalid values are eleminated, but after it's necessary a constant pol to + // indicate values. If this values remains with range_sel = 0, it's possible reuse BYTE2 for values. // - // CLK pRange pRange - // [selEq[3] = 1, chunkLtPrime = 0] [selEq[3] = 1, chunkLtPrime = 1] + // ----------------------------- + // 2*K 0 <--- this block check a value is 0. + // 0 1..2**16-1 + // ----------------------------- + // 0 1..2**16-1 <--- no values less than 0. + // ----------------------------- // + // BLOCKS (2**16) x 16 clocks/chunks = 2**20 values * 7 blocks = (2**22 - 2**20) < 2**23 + // ------------------------------------------------------------------------------------- + // (clp) + // 0: FULL ( 0 + 0 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 1: pSecp256k1 (16 + 0 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 2: LT(pSecp256k1) (16 + 16 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 3: BN254 (48 + 0 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 4: LT(BN254) (48 + 16 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 5: pSecp256r1 (80 + 0 + 0,1,2,3,4,5,6,7,8,...,14,15) + // 6: LT(pSecp256r1) (80 + 16 + 0,1,2,3,4,5,6,7,8,...,14,15) // - // 0 0 + 3 * 0 + 0 = 0 0 + 3 * 0 + 1 = 1 - // : : : - // 12 0 + 3 * 0 + 0 = 0 0 + 3 * 0 + 1 = 1 - // 13 1 + 3 * 0 + 0 = 1 1 + 3 * 0 + 1 = 2 - // 14 0 + 3 * 0 + 0 = 0 0 + 3 * 0 + 1 = 1 - // 15 0 + 3 * 1 + 0 = 3 0 + 3 * 1 + 1 = 4 + // clp = chunkLtPrime * 16 // // valueLtPrime' = valueLtPrime * (1 - CLK0 - CLK16) + chunkLtPrime // @@ -229,14 +216,13 @@ namespace Arith(%N); // (D) when valueLtPrime = 0 ==> chunkLtPrime must be zero, if not it FAILS // (E) on clocks 0 and 16, current value of valueLtPrime isn't considered // - // - // Examples (Secp256k1 prime): + // // Examples (Secp256k1 prime): // ┌──────── pRange // ┌── max_value │ ┌───── chunkLtPrime // │ ┌─ example │ │ ┌── valueLtPrime // │ │ │ │ │ - // CLK0 0xFFFF 0xFFFF 0 0 0 - // CLK1 0xFFFF 0xFF00 1 1 0 // RANGE [0, 0xFFFE] + // CLK0 0xFFFF 0xFFFF 16 0 0 (16 = clock(0) + Secp256k1(16)) + // CLK1 0xFFFF 0xFF00 33 1 0 RANGE [0, 0xFFFE] (33 = clock(1) + Secp256k1(16) + chunkLtPrime(16)) // CLK2 0xFFFF 0x0000 0 0 1 // CLK3 0xFFFF 0x0000 0 0 1 // CLK4 0xFFFF 0xFFFF 0 0 1 @@ -249,22 +235,22 @@ namespace Arith(%N); // ┌── max_value │ ┌───── chunkLtPrime // │ ┌─ example │ │ ┌── valueLtPrime // │ │ │ │ │ - // CLK0 0xFFFF 0xFFFF 0 0 0 - // CLK1 0xFFFF 0xFFFF 0 0 0 - // CLK2 0xFFFF 0xFFFF 0 0 0 + // CLK0 0xFFFF 0xFFFF 16 0 0 (16 = clock(0) + Secp256k1(16)) + // CLK1 0xFFFF 0xFFFF 17 0 0 (17 = clock(1) + Secp256k1(16)) + // CLK2 0xFFFF 0xFFFF 18 0 0 (18 = clock(2) + Secp256k1(16)) // : - // CLK12 0xFFFF 0xFFFF 0 0 0 - // CLK13 0xFFFE 0xFFFF 1 0 0 // CLK13 == 1 RANGE [0, 0xFFFE] - // CLK14 0xFFFF 0xFFFF 0 0 0 - // CLK15 0xFC2F 0xFC00 4 1 0 // CLK15 == 1 RANGE [0, 0xFC2F] + // CLK12 0xFFFF 0xFFFF 28 0 0 (28 = clock(12) + Secp256k1(16)) + // CLK13 0xFFFE 0xFFFF 29 0 0 CLK13 == 1 RANGE [0, 0xFFFE] (29 = clock(13) + Secp256k1(16)) + // CLK14 0xFFFF 0xFFFF 30 0 0 (30 = clock(14) + Secp256k1(16)) + // CLK15 0xFC2F 0xFC00 47 1 0 CLK15 == 1 RANGE [0, 0xFC2F] 47 = 46+1 (47 = clock(15) + Secp256k1(16) + chunkLtPrime(16)) // CLK16 0xFFFF 0xFFFF 0 0 1 // valueLtPrime indicates whether, at this point, we know that the value is smaller than the prime. - // If selEq[3],selEq[4],selEq[5],selEq[6] = 0, it must be 0. + // For regular ARITH (selEq[0] = 1), it must be 0. pol commit valueLtPrime; // chunkLtPrime indicates whether the current value chunk is smaller than the prime chunk. - // If selEq[3],selEq[4],selEq[5],selEq[6] = 0 or valueLtPrime = 1, it must be 0. + // For regular ARITH (selEq[0] = 1) or if valueLtPrime =1, it must be 0. pol commit chunkLtPrime; // binary constraints @@ -276,38 +262,15 @@ namespace Arith(%N); valueLtPrime' = valueLtPrime * (1 - Global.CLK32[0] - Global.CLK32[16]) + chunkLtPrime; // This constraint is used to verify (and to enforce) that at the end of a 16-clock cycle, valueLtPrime is equal to 1. - // This constraint is applied when one of selEq[3],selEq[4],selEq[5],selEq[6] equals 1. - (valueLtPrime' - selEq[3] - selEq[4] - selEq[5] - selEq[6]) * (Global.CLK32[15] + Global.CLK32[31]) = 0; - - pol constant RANGE_SEL; // 0:2**16, - // 1:2**16-1,0 - // 2:2**16-2,0:2 - // 3:2**16-976,0:976 - // 4:2**16-977,0:977 - // ----------------------------------------------------------------------- - // 5:2**16-53147,0:53147 16:2**16-47688,0:47688 27:2**16-13682,0:13682 - // 6:2**16-53146,0:53146 17:2**16-32382,0:32382 28:2**16-13681,0:13681 - // 7:2**16-45453,0:45453 18:2**16-32381,0:32381 29:2**16-50143,0:50143 - // 8:2**16-45452,0:45452 19:2**16-42914,0:42914 30:2**16-50142,0:50142 - // 9:2**16-7886,0:7886 20:2**16-42913,0:42913 31:2**16-29673,0:29673 - // 10:2**16-7885,0:7885 21:2**16-26750,0:26750 32:2**16-29672,0:29672 - // 11:2**16-24534,0:24534 22:2**16-26749,0:26749 33:2**16-10115,0:10115 - // 12:2**16-24533,0:24533 23:2**16-38254,0:38254 34:2**16-10114,0:10114 - // 13:2**16-18351,0:18351 24:2**16-38253,0:38253 35:2**16-696,0:696 - // 14:2**16-18350,0:18350 25:2**16-38798,0:38798 36:2**16-695,0:695 - // 15:2**16-47689,0:47689 26:2**16-38797,0:38797 - - // range to be looked up for each chunk and for each prime - pol pRangeSecp256k1 = (Global.CLK32[13] + Global.CLK32[29] + 3 * (Global.CLK32[15] + Global.CLK32[31]) + chunkLtPrime) * selEq[3]; - pol pRangeBN254 = (5 * (Global.CLK32[0] + Global.CLK32[16]) + 7 * (Global.CLK32[1] + Global.CLK32[17]) + 9 * (Global.CLK32[2] + Global.CLK32[18]) - + 11 * (Global.CLK32[3] + Global.CLK32[19]) + 13 * (Global.CLK32[4] + Global.CLK32[20]) + 15 * (Global.CLK32[5] + Global.CLK32[21]) - + 17 * (Global.CLK32[6] + Global.CLK32[22]) + 19 * (Global.CLK32[7] + Global.CLK32[23]) + 21 * (Global.CLK32[8] + Global.CLK32[24]) - + 23 * (Global.CLK32[9] + Global.CLK32[25]) + 25 * (Global.CLK32[10] + Global.CLK32[26]) + 27 * (Global.CLK32[11] + Global.CLK32[27]) - + 29 * (Global.CLK32[12] + Global.CLK32[28]) + 31 * (Global.CLK32[13] + Global.CLK32[29]) + 33 * (Global.CLK32[14] + Global.CLK32[30]) - + 35 * (Global.CLK32[15] + Global.CLK32[31]) + chunkLtPrime) * (selEq[4] + selEq[5] + selEq[6]); + // This constraint is applied on SECP256K1(1,2), BN254(3,4,5), SECP256R1(6,7) equals 1. + (valueLtPrime' - sel_check_lt_prime) * (Global.CLK32[15] + Global.CLK32[31]) = 0; + + pol constant RANGE_SEL; // lookup with RANGE_SEL as first column and BYTE2 as second column - {(pRangeSecp256k1 + pRangeBN254) * (1 - valueLtPrime), <%- clksel(['x3[15..0]','y3[15..0]'], 'Global.CLK32') %>} in {RANGE_SEL, Global.BYTE2}; + {(<%- clksel(['[0..15]','[0..15]'], 'Global.CLK32') %> + + 16 * sel_secp256k1 + 48 * sel_bn254 + 80 * sel_secp256r1 + 16 * chunkLtPrime) * (1 - valueLtPrime), + <%- clksel(['x3[15..0]','y3[15..0]'], 'Global.CLK32') %>} in {RANGE_SEL, Global.BYTE2}; /**** * @@ -448,6 +411,45 @@ namespace Arith(%N); <%- equation('pol eq10_## =', 'y1-y2-y3+p*q2-p*offset', {p: 21888242871839275222246405745257275088696311157297823662689037894645226208583n, offset: 0x8n}) %> + /******* + * + * EQ11: s * x2 - s * x1 - y2 + y1 - p * (q0 - offset) = 0 + * + *******/ + + <%- equation('pol eq11_## =', 's*x2-s*x1-y2+y1-p*q0+p*offset', {p: 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffffn, + offset:0x20000000000000000000000000000000000000000000000000000000000000000n}) %> + + /******* + * + * EQ12: 2 * s * y1 - 3 * x1 * x1 - a + (q0 * offset) = 0 + * + *******/ + + <%- equation('pol eq12_## =', 's*y1+s*y1-x1*x1-x1*x1-x1*x1-a+p*q0-p*offset', {a: 0xffffffff00000001000000000000000000000000fffffffffffffffffffffffcn, + p: 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffffn, + offset:0x40000000000000000000000000000000000000000000000000000000000000000n}) %> + + /******* + * + * EQ13: s * s - x1 - x2 - x3 - p * (q1 - offset) = 0 + * + *******/ + + <%- equation('pol eq13_## =', 's*s-x1-x2-x3-p*q1+p*offset', {p: 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffffn, + offset:0x4n}) %> + + /******* + * + * EQ14: s * x1 - s * x3 - y1 - y3 + p * (q2 - offset) = 0 + * + *******/ + + <%- equation('pol eq14_## =', 's*x1-s*x3-y1-y3+p*q2-p*offset', {p: 0xffffffff00000001000000000000000000000000ffffffffffffffffffffffffn, + offset:0x20000000000000000000000000000000000000000000000000000000000000000n}) %> + + + pol eq0 = <%- clksel(['eq0_[0..31]'], 'Global.CLK32') %>; pol eq1 = <%- clksel(['eq1_[0..31]'], 'Global.CLK32') %>; pol eq2 = <%- clksel(['eq2_[0..31]'], 'Global.CLK32') %>; @@ -459,11 +461,18 @@ namespace Arith(%N); pol eq8 = <%- clksel(['eq8_[0..31]'], 'Global.CLK32') %>; pol eq9 = <%- clksel(['eq9_[0..31]'], 'Global.CLK32') %>; pol eq10 = <%- clksel(['eq10_[0..31]'], 'Global.CLK32') %>; + pol eq11 = <%- clksel(['eq11_[0..31]'], 'Global.CLK32') %>; + pol eq12 = <%- clksel(['eq12_[0..31]'], 'Global.CLK32') %>; + pol eq13 = <%- clksel(['eq13_[0..31]'], 'Global.CLK32') %>; + pol eq14 = <%- clksel(['eq14_[0..31]'], 'Global.CLK32') %>; + + pol commit selEq[8]; - pol commit selEq[7]; + (<%- join('selEq[0..7]',' + ') %>) * (1 - <%- join('selEq[0..7]',' - ') %>) = 0; - <%- latch(['selEq[0..6]'],'Global.CLK32[31]') %> - <%- binary(['selEq[0..6]']) %> + <%- latch(['selEq[0..7]'],'Global.CLK32[31]') %> + + <%- binary(['selEq[0..7]']) %> pol commit carry[3]; @@ -476,13 +485,20 @@ namespace Arith(%N); carry[2] in GL_SIGNED_22BITS; selEq[0] * (eq0 + carry[0]) = selEq[0] * carry[0]' * 2**16; + selEq[1] * (eq1 + carry[0]) = selEq[1] * carry[0]' * 2**16; selEq[2] * (eq2 + carry[0]) = selEq[2] * carry[0]' * 2**16; - selEq[3] * (eq3 + carry[1]) = selEq[3] * carry[1]' * 2**16; - selEq[3] * (eq4 + carry[2]) = selEq[3] * carry[2]' * 2**16; - selEq[4] * (eq5 + carry[1]) = selEq[4] * carry[1]' * 2**16; - selEq[4] * (eq6 + carry[2]) = selEq[4] * carry[2]' * 2**16; - selEq[5] * (eq7 + carry[1]) = selEq[5] * carry[1]' * 2**16; - selEq[5] * (eq8 + carry[2]) = selEq[5] * carry[2]' * 2**16; - selEq[6] * (eq9 + carry[1]) = selEq[6] * carry[1]' * 2**16; - selEq[6] * (eq10 + carry[2]) = selEq[6] * carry[2]' * 2**16; + sel_secp256k1 * (eq3 + carry[1]) = sel_secp256k1 * carry[1]' * 2**16; + sel_secp256k1 * (eq4 + carry[2]) = sel_secp256k1 * carry[2]' * 2**16; + + selEq[3] * (eq5 + carry[1]) = selEq[3] * carry[1]' * 2**16; + selEq[3] * (eq6 + carry[2]) = selEq[3] * carry[2]' * 2**16; + selEq[4] * (eq7 + carry[1]) = selEq[4] * carry[1]' * 2**16; + selEq[4] * (eq8 + carry[2]) = selEq[4] * carry[2]' * 2**16; + selEq[5] * (eq9 + carry[1]) = selEq[5] * carry[1]' * 2**16; + selEq[5] * (eq10 + carry[2]) = selEq[5] * carry[2]' * 2**16; + + selEq[6] * (eq11 + carry[0]) = selEq[6] * carry[0]' * 2**16; + selEq[7] * (eq12 + carry[0]) = selEq[7] * carry[0]' * 2**16; + sel_secp256r1 * (eq13 + carry[1]) = sel_secp256r1 * carry[1]' * 2**16; + sel_secp256r1 * (eq14 + carry[2]) = sel_secp256r1 * carry[2]' * 2**16; diff --git a/tools/arith/pilTools.js b/tools/arith/pilTools.js index 64e0c2a5..3e89b144 100644 --- a/tools/arith/pilTools.js +++ b/tools/arith/pilTools.js @@ -47,6 +47,9 @@ function nameToIndex(name, index, config = {}, cls = '') else if (name.endsWith('_')) { name += index; } + else if (name === '') { + name += index; + } else { name += '[' + index + ']'; } @@ -364,7 +367,9 @@ function extractPilEquations(pil) }, latch: () => {}, clksel: () => {}, - binary: () => {} + binary: () => {}, + join: () => {}, + expandTerms: () => {} }); return equations;