Polygon zkEVM的pil-stark Fibonacci状态机初体验

1. 引言

前序博客:

实操主要见:

相关代码见:

pil-stark代码库的主要作用是:

  • 从某状态机生成stark证明。该状态机以PIL语言编写。

Polygon zkEVM中借用了iden3的circom工具,其与snarkjs的关系为:
在这里插入图片描述

总体流程为:
在这里插入图片描述

2. pil-stark Fibonacci状态机初体验

测试用例见pil-stark/test文件夹,以其中的sm_fibonacci为例:

  • 1)创建tmp文件夹,用于存储编译输出文件:mkdir tmp

  • 2)debug运行fibonacci buildconst:运行状态机中main_buildconst_fibonacci.js,输出为fibonacci.const

    /usr/local/bin/node --max-old-space-size=32000 test/sm_fibonacci/main_buildconst_fibonacci.js -o tmp/fibonacci.const
    file Generated Correctly
    
  • 3)debug运行fibonacci exec:运行main_exec_fibonacci.js,输入有fibonacci.input.json,输出为fibonacci.commit

    /usr/local/bin/node --max-old-space-size=32000 test/sm_fibonacci/main_exec_fibonacci.js -i test/sm_fibonacci/fibonacci.input.json -o tmp/fibonacci.commit
    Result: 74469561660084004
    file Generated Correctly
    
  • 4)debug运行fibonacci PIL verify:运行node_modules/pilcom/src/main_pilverifier.js,输入有:

    • 4.1)fibonacci.commit:为基于fibonacci.input.json运行状态机中main_exec_fibonacci.js获得的输出。【对pil中的commit多项式赋值】
    • 4.2)fibonacci_main.pil程序。
    • 4.3)fibonacci.const:为运行状态机中main_buildconst_fibonacci.js获得的输出。【对pil中的const多项式赋值】
    /usr/local/bin/node --max-old-space-size=32000 node_modules/pilcom/src/main_pilverifier.js tmp/fibonacci.commit -p test/sm_fibonacci/fibonacci_main.pil -c tmp/fibonacci.const
    loading tmp/fibonacci.const.. 0 of 0.001953125
    loading tmp/fibonacci.commit.. 0 of 0.001953125
    Preparing public 1/3
    calculateExpression: 0
    Preparing public 2/3
    Preparing public 3/3
    Checking identities 1/5
    calculateExpression: 1
    Checking identities 2/5
    calculateExpression: 3
    calculateExpression: 2
    Checking identities 3/5
    calculateExpression: 4
    Checking identities 4/5
    calculateExpression: 5
    Checking identities 5/5
    calculateExpression: 6
    PIL OK!!
    

    其中,verifyPil主要流程为:

    • a)将pil编译结果中的references各多项式索引信息分组分别存入refCm、refConst和refIm中;
    • b)依次将各commit多项式的赋值给pols.cm[i].v_n。将各const多项式的赋值给pols.const[i].v_n。给各public变量赋值,若源自cmP,则为pols.cm[pil.publics[i].polId].v_n[pil.publics[i].idx];若源自imP,则先调用calculateExpression(pil.publics[i].polId)计算相应的expression值,然后赋值pols.exps[pil.publics[i].polId].v_n[pil.publics[i].idx]
      for (let i=0; i<pil.publics.length; i++) {
          console.log(`Preparing public ${i+1}/${pil.publics.length}`);
      
          if (pil.publics[i].polType == "cmP") {
              pols.publics[i] = pols.cm[pil.publics[i].polId].v_n[pil.publics[i].idx];
          } else if (pil.publics[i].polType == "imP") {
              await calculateExpression(pil.publics[i].polId);
              pols.publics[i] = pols.exps[pil.publics[i].polId].v_n[pil.publics[i].idx];
              delete pols.exps[pil.publics[i].polId].v_n;
          } else {
              throw new Error(`Invalid public type: ${polType.type}`);
          }
      }
      
    • c)对pil中的= polIdentities约束,依次calculateExpression(pil.polIdentities[i].e),逐个判断结算结果pols.exps[pil.polIdentities[i].e].v_n[j]是否为0,若为非零值则说明有错误。若全部为0值,则说明verifyPil验证通过。
  • 5)debug运行fibonacci build constree:运行main_buildconsttree.js,输入有:【pil中的所有const多项式构建一个merkle tree。详细参看 STARKs and STARK VM: Proofs of Computational Integrity,本质为将const多项式在trace domain的evaluation值扩展到low degree extension domain的evaluation值,然后将所有const多项式的low degree extension domain的evaluation值构建一棵merkle tree。】

    • 5.i.1)fibonacci.const:为运行状态机中main_buildconst_fibonacci.js获得的输出。【为pil中的const多项式赋值】
    • 5.i.2)状态机中fibonacci_main.pil程序
    • 5.i.3)状态机中fibonacci.starkstruct.json,为:
      {
              "nBits": 10,
              "nBitsExt": 11,
              "nQueries": 8,
              "verificationHashType": "GL",
              "steps": [
                  {"nBits": 11},
                  {"nBits": 7},
                  {"nBits": 3}
              ]
      }
      

    输出为:

    • 5.o.1)fibonacci.consttree:为常量多项式在Low Degree Extension domain evaluation值的Merkle树。
    • 5.o.2)fibonacci.verkey.json:为常量多项式在Low Degree Extension domain evaluation值的Merkle树 的root。
    /usr/local/bin/node --max-old-space-size=32000 src/main_buildconsttree.js -c /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.const -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci_main.pil -s /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci.starkstruct.json -t /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.consttree -v /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.verkey.json
    loading /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.const.. 0 of 0.001953125
    Interpolating reverse....
    Layer ifft0
    start block 10 0
    end block 10 0
    Interpolating prepare....
    linear interpolatePrepare start.... 0/0
    linear interpolatePrepare end.... 0/0
    Bit reverse....
    Layer fft 0
    start block 11 0
    end block 11 0
    interpolation terminated
    pool terminated
    Start merkelizing..
    slicing buff 0
    creating thread 0
    waiting..
    linear hash start.... 0/2048
    merkelizing hash start.... 0/1024
    merkelizing hash end.... 0/1024
    merkelizing hash start.... 0/512
    merkelizing hash end.... 0/512
    merkelizing hash start.... 0/256
    merkelizing hash end.... 0/256
    merkelizing hash start.... 0/128
    merkelizing hash end.... 0/128
    merkelizing hash start.... 0/64
    merkelizing hash end.... 0/64
    merkelizing hash start.... 0/32
    merkelizing hash end.... 0/32
    merkelizing hash start.... 0/16
    merkelizing hash end.... 0/16
    merkelizing hash start.... 0/8
    merkelizing hash end.... 0/8
    merkelizing hash start.... 0/4
    merkelizing hash end.... 0/4
    merkelizing hash start.... 0/2
    merkelizing hash end.... 0/2
    merkelizing hash start.... 0/1
    merkelizing hash end.... 0/1
    writting tree.. 0 / 4096
    writting tree.. 0 / 16380
    files Generated Correctly
    
  • 6)debug运行fibonacci prove:运行main_prover.js,输入有:

    • 6.i.1)fibonacci.commit:为基于fibonacci.input.json运行状态机中main_exec_fibonacci.js获得的输出。
    • 6.i.2)fibonacci.const:为运行状态机中main_buildconst_fibonacci.js获得的输出。
    • 6.i.3)fibonacci.consttree:为运行main_buildconsttree.js获得的输出。
    • 6.i.4)fibonacci_main.pil:状态机程序
    • 6.i.5)fibonacci.starkstruct.json:状态机STARK结构配置文件

    输出有:

    • 6.o,1)fibonacci.proof.json:STARK证明
    • 6.o.2)fibonacci.proof.zkin.json:zk输入,供fibonacci C12 exec使用。
    • 6.o.3)fibonacci.public.json:公开输入
    /usr/local/bin/node --max-old-space-size=32000 src/main_prover.js -m /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.commit -c /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.const -t /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.consttree -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci_main.pil -s /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci.starkstruct.json -o /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.proof.json -z /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.proof.zkin.json -b /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.public.json
    loading /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.const.. 0 of 0.001953125
    loading /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.commit.. 0 of 0.001953125
    Loading tree.. 0/4096
    Loading tree.. 0/16380
    Merkelizing 1....
    Interpolating reverse....
    Layer ifft0
    start block 10 0
    end block 10 0
    Interpolating prepare....
    linear interpolatePrepare start.... 0/0
    linear interpolatePrepare end.... 0/0
    Bit reverse....
    Layer fft 0
    start block 11 0
    end block 11 0
    interpolation terminated
    pool terminated
    slicing buff 0
    creating thread 0
    waiting..
    linear hash start.... 0/2048
    merkelizing hash start.... 0/1024
    merkelizing hash end.... 0/1024
    merkelizing hash start.... 0/512
    merkelizing hash end.... 0/512
    merkelizing hash start.... 0/256
    merkelizing hash end.... 0/256
    merkelizing hash start.... 0/128
    merkelizing hash end.... 0/128
    merkelizing hash start.... 0/64
    merkelizing hash end.... 0/64
    merkelizing hash start.... 0/32
    merkelizing hash end.... 0/32
    merkelizing hash start.... 0/16
    merkelizing hash end.... 0/16
    merkelizing hash start.... 0/8
    merkelizing hash end.... 0/8
    merkelizing hash start.... 0/4
    merkelizing hash end.... 0/4
    merkelizing hash start.... 0/2
    merkelizing hash end.... 0/2
    merkelizing hash start.... 0/1
    merkelizing hash end.... 0/1
    start exec step2prev... 0/1024
    end exec step2prev... 0/1024
    Merkelizing 2....
    Interpolating reverse....
    Layer ifft0
    start block 10 0
    end block 10 0
    Interpolating prepare....
    Bit reverse....
    Layer fft 0
    linear interpolatePrepare start.... 0/0
    linear interpolatePrepare end.... 0/0
    start block 11 0
    end block 11 0
    interpolation terminated
    pool terminated
    slicing buff 0
    creating thread 0
    waiting..
    linear hash start.... 0/2048
    merkelizing hash start.... 0/1024
    merkelizing hash end.... 0/1024
    merkelizing hash start.... 0/512
    merkelizing hash end.... 0/512
    merkelizing hash start.... 0/256
    merkelizing hash end.... 0/256
    merkelizing hash start.... 0/128
    merkelizing hash end.... 0/128
    merkelizing hash start.... 0/64
    merkelizing hash end.... 0/64
    merkelizing hash start.... 0/32
    merkelizing hash end.... 0/32
    merkelizing hash start.... 0/16
    merkelizing hash end.... 0/16
    merkelizing hash start.... 0/8
    merkelizing hash end.... 0/8
    merkelizing hash start.... 0/4
    merkelizing hash end.... 0/4
    merkelizing hash start.... 0/2
    merkelizing hash end.... 0/2
    merkelizing hash start.... 0/1
    merkelizing hash end.... 0/1
    start exec step3prev... 0/1024
    end exec step3prev... 0/1024
    Merkelizing 3....
    Interpolating reverse....
    Layer ifft0
    start block 10 0
    end block 10 0
    Interpolating prepare....
    Bit reverse....
    linear interpolatePrepare start.... 0/0
    linear interpolatePrepare end.... 0/0
    Layer fft 0
    start block 11 0
    end block 11 0
    interpolation terminated
    pool terminated
    slicing buff 0
    creating thread 0
    waiting..
    linear hash start.... 0/2048
    merkelizing hash start.... 0/1024
    merkelizing hash end.... 0/1024
    merkelizing hash start.... 0/512
    merkelizing hash end.... 0/512
    merkelizing hash start.... 0/256
    merkelizing hash end.... 0/256
    merkelizing hash start.... 0/128
    merkelizing hash end.... 0/128
    merkelizing hash start.... 0/64
    merkelizing hash end.... 0/64
    merkelizing hash start.... 0/32
    merkelizing hash end.... 0/32
    merkelizing hash start.... 0/16
    merkelizing hash end.... 0/16
    merkelizing hash start.... 0/8
    merkelizing hash end.... 0/8
    merkelizing hash start.... 0/4
    merkelizing hash end.... 0/4
    merkelizing hash start.... 0/2
    merkelizing hash end.... 0/2
    merkelizing hash start.... 0/1
    merkelizing hash end.... 0/1
    start exec step4... 0/1024
    end exec step4... 0/1024
    Interpolating reverse....
    Layer ifft0
    start block 10 0
    end block 10 0
    linear interpolatePrepare start.... 0/1
    linear interpolatePrepare end.... 0/1
    start block 11 0
    Interpolating prepare....
    Bit reverse....
    Layer fft 0
    end block 11 0
    interpolation terminated
    pool terminated
    start exec step42ns... 0/2048
    end exec step42ns... 0/2048
    Merkelizing 4....
    slicing buff 0
    creating thread 0
    waiting..
    linear hash start.... 0/2048
    merkelizing hash start.... 0/1024
    merkelizing hash end.... 0/1024
    merkelizing hash start.... 0/512
    merkelizing hash end.... 0/512
    merkelizing hash start.... 0/256
    merkelizing hash end.... 0/256
    merkelizing hash start.... 0/128
    merkelizing hash end.... 0/128
    merkelizing hash start.... 0/64
    merkelizing hash end.... 0/64
    merkelizing hash start.... 0/32
    merkelizing hash end.... 0/32
    merkelizing hash start.... 0/16
    merkelizing hash end.... 0/16
    merkelizing hash start.... 0/8
    merkelizing hash end.... 0/8
    merkelizing hash start.... 0/4
    merkelizing hash end.... 0/4
    merkelizing hash start.... 0/2
    merkelizing hash end.... 0/2
    merkelizing hash start.... 0/1
    merkelizing hash end.... 0/1
    start exec step52ns... 0/2048
    end exec step52ns... 0/2048
    slicing buff 0
    creating thread 0
    waiting..
    linear hash start.... 0/128
    linear hash end.... 0/128
    merkelizing hash start.... 0/64
    merkelizing hash end.... 0/64
    merkelizing hash start.... 0/32
    merkelizing hash end.... 0/32
    merkelizing hash start.... 0/16
    merkelizing hash end.... 0/16
    merkelizing hash start.... 0/8
    merkelizing hash end.... 0/8
    merkelizing hash start.... 0/4
    merkelizing hash end.... 0/4
    merkelizing hash start.... 0/2
    merkelizing hash end.... 0/2
    merkelizing hash start.... 0/1
    merkelizing hash end.... 0/1
    slicing buff 0
    creating thread 0
    waiting..
    linear hash start.... 0/8
    linear hash end.... 0/8
    merkelizing hash start.... 0/4
    merkelizing hash end.... 0/4
    merkelizing hash start.... 0/2
    merkelizing hash end.... 0/2
    merkelizing hash start.... 0/1
    merkelizing hash end.... 0/1
    files Generated Correctly
    
  • 7)debug运行fibonacci verify proof:运行main_verifier.js,输出为验证是否通过,输入有:

    • 7.i.1)fibonacci_main.pil:状态机程序。
    • 7.i.2)fibonacci.starkstruct.json:状态机STARK结构配置文件。
    • 7.i.3)fibonacci.proof.json:STARK证明。
    • 7.i.4)fibonacci.public.json:公开输入。
    • 7.i.5)fibonacci.verkey.json:验证密钥。
    /usr/local/bin/node --max-old-space-size=32000 src/main_verifier.js -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci_main.pil -s /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci//fibonacci.starkstruct.json -o /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.proof.json -b /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.public.json -v /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.verkey.json
    Query:1419
    Query:837
    Query:685
    Query:1624
    Query:1237
    Query:7
    Query:672
    Query:827
    Verification Ok!!
    
  • 8)debug运行fibonacci generate circom:运行main_pil2circom.js,输出为fibonacci.verifier.circom文件,输入有:

    • 8.i.1)fibonacci_main.pil:状态机程序。
    • 8.i.2)fibonacci.starkstruct.json:状态机STARK结构配置文件。
    • 8.i.3)fibonacci.verkey.json:验证密钥。
    /usr/local/bin/node --max-old-space-size=32000 src/main_pil2circom.js -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci_main.pil -s /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci.starkstruct.json -v /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.verkey.json -o /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.verifier.circom
    file Generated Correctly
    
  • 9)scripts运行fibonacci_compileverifier:调用circom,输入为fibonacci.verifier.circom,输出有:

    • 9.1)fibonacci.verifier.r1cs:为电路的r1cs 约束系统,以二进制表示。
    • 9.2)fibonacci.verifier.sym:为在注释模式下调试和打印约束系统所需的符号文件。
    • 9.3)fibonacci.verifier_js文件夹:包含了3个文件:
      • ffibonacci.verifier.wasm:为生成witness的wasm代码。
      • generate_witness.js
      • witness_calculator.js
    $ npm run fibonacci_compileverifier
    Debugger attached.
    
    > pil-stark@0.0.13 fibonacci_compileverifier
    > circom --O1 --prime goldilocks --r1cs --sym --wasm --verbose tmp/fibonacci.verifier.circom -o tmp
    
    template instances: 29
    non-linear constraints: 216090
    linear constraints: 115823
    public inputs: 3
    public outputs: 0
    private inputs: 2280
    private outputs: 0
    wires: 496743
    labels: 678212
    Written successfully: tmp/fibonacci.verifier.r1cs
    Written successfully: tmp/fibonacci.verifier.sym
    Written successfully: tmp/fibonacci.verifier_js/fibonacci.verifier.wasm
    Everything went okay, circom safe
    Waiting for the debugger to disconnect...
    
  • 10)debug运行fibonacci C12 setup:运作compressor12/main_compressor12_setup.js,输入为fibonacci.verifier.r1cs,输出有:

    • 10.1)fibonacci.c12.pil
    • 10.2)fibonacci.c12.const
    • 10.3)fibonacci.c12.exec
    /usr/local/bin/node --max-old-space-size=32000 src/compressor12/main_compressor12_setup.js -r /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.verifier.r1cs -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.pil -c /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.const -e /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.exec
    undefined: Loading constraints: 0/331913
    undefined: Loading constraints: 100000/331913
    undefined: Loading constraints: 200000/331913
    undefined: Loading constraints: 300000/331913
    undefined: Loading custom gate uses: 0/13845
    Plonk info constraint processing... 0/339443
    Plonk info constraint processing... 10000/339443
    Plonk info constraint processing... 20000/339443
    Plonk info constraint processing... 30000/339443
    Plonk info constraint processing... 40000/339443
    Plonk info constraint processing... 50000/339443
    Plonk info constraint processing... 60000/339443
    Plonk info constraint processing... 70000/339443
    Plonk info constraint processing... 80000/339443
    Plonk info constraint processing... 90000/339443
    Plonk info constraint processing... 100000/339443
    Plonk info constraint processing... 110000/339443
    Plonk info constraint processing... 120000/339443
    Plonk info constraint processing... 130000/339443
    Plonk info constraint processing... 140000/339443
    Plonk info constraint processing... 150000/339443
    Plonk info constraint processing... 160000/339443
    Plonk info constraint processing... 170000/339443
    Plonk info constraint processing... 180000/339443
    Plonk info constraint processing... 190000/339443
    Plonk info constraint processing... 200000/339443
    Plonk info constraint processing... 210000/339443
    Plonk info constraint processing... 220000/339443
    Plonk info constraint processing... 230000/339443
    Plonk info constraint processing... 240000/339443
    Plonk info constraint processing... 250000/339443
    Plonk info constraint processing... 260000/339443
    Plonk info constraint processing... 270000/339443
    Plonk info constraint processing... 280000/339443
    Plonk info constraint processing... 290000/339443
    Plonk info constraint processing... 300000/339443
    Plonk info constraint processing... 310000/339443
    Plonk info constraint processing... 320000/339443
    Plonk info constraint processing... 330000/339443
    ffffffff00000000,0,0,1,0 => 106084
    0,ffffffff00000000,1,1,0 => 5913
    1,0,0,ffffffff00000000,0 => 3642
    0,1,1,ffffffff00000000,0 => 1635
    0,ffffffff00000000,0,0,0 => 1517
    0,1,ffffffff00000000,1,0 => 1483
    0,1,ffffffff00000000,0,0 => 1135
    0,1,ffffffff00000000,ffffffff00000000,0 => 766
    ffffffff00000000,4a7a08980debbbfc,4a7a08980debbbfc,1,c61bd208ec3c0fa1 => 449
    ffffffff00000000,0,4a7a08980debbbfc,1,0 => 449
    ffffffff00000000,88b95a9fbc6de52a,88b95a9fbc6de52a,1,75ce679679451a15 => 449
    ffffffff00000000,0,88b95a9fbc6de52a,1,0 => 449
    ffffffff00000000,4d04f2cd3118664d,4d04f2cd3118664d,1,c3756f9932155297 => 449
    ffffffff00000000,0,4d04f2cd3118664d,1,0 => 449
    ffffffff00000000,f0989f5a7fcbd82a,f0989f5a7fcbd82a,1,ee347190fb432101 => 449
    ffffffff00000000,0,f0989f5a7fcbd82a,1,0 => 449
    ffffffff00000000,1ef29998af0b1fef,1ef29998af0b1fef,1,7138c73b09116996 => 449
    ffffffff00000000,0,1ef29998af0b1fef,1,0 => 449
    ffffffff00000000,7351eb33f82f6410,7351eb33f82f6410,1,18b6d0e3aeec489f => 449
    ffffffff00000000,0,7351eb33f82f6410,1,0 => 449
    ffffffff00000000,2bc7ac626a09c162,2bc7ac626a09c162,1,71afa5ff39384c97 => 449
    ffffffff00000000,0,2bc7ac626a09c162,1,0 => 449
    ffffffff00000000,1087e3821ca4b3c4,1087e3821ca4b3c4,1,b500968a50b4639e => 449
    ffffffff00000000,0,1087e3821ca4b3c4,1,0 => 449
    ffffffff00000000,323b5dc54f3bbbdb,323b5dc54f3bbbdb,1,fddd08812d4e5f9c => 449
    ffffffff00000000,0,323b5dc54f3bbbdb,1,0 => 449
    ffffffff00000000,d8805df640cc8402,d8805df640cc8402,1,c68b2f87b5ed9227 => 449
    ffffffff00000000,0,d8805df640cc8402,1,0 => 449
    ffffffff00000000,1e89ac5c625a8760,1e89ac5c625a8760,1,88818136a288ec90 => 449
    ffffffff00000000,0,1e89ac5c625a8760,1,0 => 449
    ffffffff00000000,3abcfd0cda24d38b,3abcfd0cda24d38b,1,e085319e9b6f3e7a => 449
    ffffffff00000000,0,3abcfd0cda24d38b,1,0 => 449
    ffffffff00000000,79d787dd08dd3780,79d787dd08dd3780,1,b875ba22cab61421 => 449
    ffffffff00000000,0,79d787dd08dd3780,1,0 => 449
    ffffffff00000000,a632e574be3e71ac,a632e574be3e71ac,1,57d26c1b01a1d8a => 449
    ffffffff00000000,0,a632e574be3e71ac,1,0 => 449
    ffffffff00000000,3c46e651b6a23a8d,3c46e651b6a23a8d,1,3b37aa4c7bdbf85b => 449
    ffffffff00000000,0,3c46e651b6a23a8d,1,0 => 449
    ffffffff00000000,5b7b3b391095f880,5b7b3b391095f880,1,284556ef72cc8092 => 449
    ffffffff00000000,0,5b7b3b391095f880,1,0 => 449
    ffffffff00000000,cf7442db23abe935,cf7442db23abe935,1,34e12532d49bc4dc => 449
    ffffffff00000000,0,cf7442db23abe935,1,0 => 449
    ffffffff00000000,91b5bf3d70cf3f65,91b5bf3d70cf3f65,1,26920ca9f36f8dc7 => 449
    ffffffff00000000,0,91b5bf3d70cf3f65,1,0 => 449
    ffffffff00000000,65d11247f2707307,65d11247f2707307,1,d857a28fb2c421ab => 449
    ffffffff00000000,0,65d11247f2707307,1,0 => 449
    ffffffff00000000,1c9f391e51b790c9,1c9f391e51b790c9,1,8c74b3f7223aa763 => 449
    ffffffff00000000,0,1c9f391e51b790c9,1,0 => 449
    ffffffff00000000,2a388e6f4039b806,2a388e6f4039b806,1,9a103489b100a053 => 449
    ffffffff00000000,0,2a388e6f4039b806,1,0 => 449
    ffffffff00000000,3ca151f7e6fc00f6,3ca151f7e6fc00f6,1,eef35d88a609158 => 449
    ffffffff00000000,0,3ca151f7e6fc00f6,1,0 => 449
    ffffffff00000000,7b63d9a86963b41a,7b63d9a86963b41a,1,4bba55aa033ecb1a => 449
    ffffffff00000000,0,7b63d9a86963b41a,1,0 => 449
    ffffffff00000000,3fa8d372f7344454,3fa8d372f7344454,1,eca3e14ceeaeb136 => 449
    ffffffff00000000,0,3fa8d372f7344454,1,0 => 449
    ffffffff00000000,16059cb4de21ff7f,16059cb4de21ff7f,1,bed7e03755429ce => 449
    ffffffff00000000,0,16059cb4de21ff7f,1,0 => 449
    ffffffff00000000,a9092b66a659ff4,a9092b66a659ff4,1,fcb9ba16f792d2b7 => 449
    ffffffff00000000,0,a9092b66a659ff4,1,0 => 449
    ffffffff00000000,828ec16f9c6ee9c,828ec16f9c6ee9c,1,f4e5eac2a11101e8 => 449
    ffffffff00000000,0,828ec16f9c6ee9c,1,0 => 449
    ffffffff00000000,7d68ecd3cd7da252,7d68ecd3cd7da252,1,e631f0801c4a98b9 => 449
    ffffffff00000000,0,7d68ecd3cd7da252,1,0 => 449
    ffffffff00000000,5297fa1e1cf4d377,5297fa1e1cf4d377,1,57fb75397922986 => 449
    ffffffff00000000,0,5297fa1e1cf4d377,1,0 => 449
    ffffffff00000000,53ae26090307aca3,53ae26090307aca3,1,90ba84aaf5e2b8f1 => 449
    ffffffff00000000,0,53ae26090307aca3,1,0 => 449
    ffffffff00000000,afd52822e73d527a,afd52822e73d527a,1,586ae3c6c944c0b => 449
    ffffffff00000000,0,afd52822e73d527a,1,0 => 449
    ffffffff00000000,a85eaaf2eef4cfc0,a85eaaf2eef4cfc0,1,ceffc43f9654abbc => 449
    ffffffff00000000,0,a85eaaf2eef4cfc0,1,0 => 449
    ffffffff00000000,99442cf0931f1a7e,99442cf0931f1a7e,1,f9895cb3b20da4b4 => 449
    ffffffff00000000,0,99442cf0931f1a7e,1,0 => 449
    ffffffff00000000,f25d540fa7629bb3,f25d540fa7629bb3,1,eb5429158f26a89d => 449
    ffffffff00000000,0,f25d540fa7629bb3,1,0 => 449
    ffffffff00000000,f9ed8af24eaf2a0,f9ed8af24eaf2a0,1,149a3cd0446e3c87 => 449
    ffffffff00000000,0,f9ed8af24eaf2a0,1,0 => 449
    ffffffff00000000,d74713c4163d69ce,d74713c4163d69ce,1,c8689c5d0ac80474 => 449
    ffffffff00000000,0,d74713c4163d69ce,1,0 => 449
    ffffffff00000000,6d58a91881d46bee,6d58a91881d46bee,1,811a3ea0f21d5126 => 449
    ffffffff00000000,0,6d58a91881d46bee,1,0 => 449
    ffffffff00000000,8f18be1301169a7b,8f18be1301169a7b,1,7c5da2b0db881b7e => 449
    ffffffff00000000,0,8f18be1301169a7b,1,0 => 449
    ffffffff00000000,fe62a11c507d13e5,fe62a11c507d13e5,1,6230bec05c648678 => 449
    ffffffff00000000,0,fe62a11c507d13e5,1,0 => 449
    ffffffff00000000,9090d1278db99caf,9090d1278db99caf,1,d574aae62da15a33 => 449
    ffffffff00000000,0,9090d1278db99caf,1,0 => 449
    ffffffff00000000,830be92f181eb360,830be92f181eb360,1,848d5ca5cc080dfe => 449
    ffffffff00000000,0,830be92f181eb360,1,0 => 449
    ffffffff00000000,9e20ae83795b9bc8,9e20ae83795b9bc8,1,d7508f949452f707 => 449
    ffffffff00000000,0,9e20ae83795b9bc8,1,0 => 449
    ffffffff00000000,7a23b663ee28848c,7a23b663ee28848c,1,41713ccda295d50 => 449
    ffffffff00000000,0,7a23b663ee28848c,1,0 => 449
    ffffffff00000000,b46a64b6463ef8ce,b46a64b6463ef8ce,1,3cdd28d942e7a6c5 => 449
    ffffffff00000000,0,b46a64b6463ef8ce,1,0 => 449
    ffffffff00000000,1741c1a157fbc1aa,1741c1a157fbc1aa,1,d49067f60471b3ca => 449
    ffffffff00000000,0,1741c1a157fbc1aa,1,0 => 449
    ffffffff00000000,a3f43e119257968,a3f43e119257968,1,3a2ae8f86f866db5 => 449
    ffffffff00000000,0,a3f43e119257968,1,0 => 449
    ffffffff00000000,bf4ed33ff6108b42,bf4ed33ff6108b42,1,7f17bb53dd6f1bf7 => 449
    ffffffff00000000,0,bf4ed33ff6108b42,1,0 => 449
    ffffffff00000000,59c8f6c034d529d0,59c8f6c034d529d0,1,f5198387236dca52 => 449
    ffffffff00000000,0,59c8f6c034d529d0,1,0 => 449
    ffffffff00000000,c33c076ce7b20bf9,c33c076ce7b20bf9,1,9c767dc4f44e25e6 => 449
    ffffffff00000000,0,c33c076ce7b20bf9,1,0 => 449
    ffffffff00000000,8ece55b9d9728275,8ece55b9d9728275,1,f3d47e2cc4047246 => 449
    ffffffff00000000,0,8ece55b9d9728275,1,0 => 449
    ffffffff00000000,6652e553f7ebd7c6,6652e553f7ebd7c6,1,b94ecdd6da4e1492 => 449
    ffffffff00000000,0,6652e553f7ebd7c6,1,0 => 449
    ffffffff00000000,147b09f625a910b9,147b09f625a910b9,1,b3c8b5917b17a566 => 449
    ffffffff00000000,0,147b09f625a910b9,1,0 => 449
    ffffffff00000000,8ea632ce3c53ee73,8ea632ce3c53ee73,1,87f3508aa34953b1 => 449
    ffffffff00000000,0,8ea632ce3c53ee73,1,0 => 449
    ffffffff00000000,2310f8673d49613a,2310f8673d49613a,1,37f56bd3017e8e0b => 449
    ffffffff00000000,0,2310f8673d49613a,1,0 => 449
    ffffffff00000000,2f89d3427359a8f5,2f89d3427359a8f5,1,873c591232c868b4 => 449
    ffffffff00000000,0,2f89d3427359a8f5,1,0 => 449
    ffffffff00000000,cf5b97f96cda7c7a,cf5b97f96cda7c7a,1,c387f11c3f3bc078 => 449
    ffffffff00000000,0,cf5b97f96cda7c7a,1,0 => 449
    ffffffff00000000,ea5e95747cdd2ba9,ea5e95747cdd2ba9,1,14a9dee0c265ab32 => 449
    ffffffff00000000,0,ea5e95747cdd2ba9,1,0 => 449
    ffffffff00000000,a5c0e44d3ac569bc,a5c0e44d3ac569bc,1,34352e5c2182bffa => 449
    ffffffff00000000,0,a5c0e44d3ac569bc,1,0 => 449
    ffffffff00000000,88affa66d28b280a,88affa66d28b280a,1,d6df4562ed1103f2 => 449
    ffffffff00000000,0,88affa66d28b280a,1,0 => 449
    ffffffff00000000,6336a3cd4b3e035,6336a3cd4b3e035,1,79defca543f7451d => 449
    ffffffff00000000,0,6336a3cd4b3e035,1,0 => 449
    ffffffff00000000,f3b6c9934da17aee,f3b6c9934da17aee,1,ae04f738c32c6592 => 449
    ffffffff00000000,0,f3b6c9934da17aee,1,0 => 449
    ffffffff00000000,229ee0eeff3e8bbf,229ee0eeff3e8bbf,1,d071730c6e5469fa => 449
    ffffffff00000000,0,229ee0eeff3e8bbf,1,0 => 449
    ffffffff00000000,fd00788f5a10683d,fd00788f5a10683d,1,bd77aec474c37281 => 449
    ffffffff00000000,0,fd00788f5a10683d,1,0 => 449
    ffffffff00000000,c2f93741eaeb1d28,c2f93741eaeb1d28,1,c7c9efb5bf14d96 => 449
    ffffffff00000000,0,c2f93741eaeb1d28,1,0 => 449
    ffffffff00000000,176327aa2a2fe2ce,176327aa2a2fe2ce,1,a3adbd45a0e51f86 => 449
    ffffffff00000000,0,176327aa2a2fe2ce,1,0 => 449
    ffffffff00000000,131a58e0f301238c,131a58e0f301238c,1,7dd76d457e044b95 => 449
    ffffffff00000000,0,131a58e0f301238c,1,0 => 449
    ffffffff00000000,6fffb3eb8e476c3c,6fffb3eb8e476c3c,1,bdcd6dfb9d0fb33b => 449
    ffffffff00000000,0,6fffb3eb8e476c3c,1,0 => 449
    ffffffff00000000,21edd413165c6c99,21edd413165c6c99,1,cc619baac34093c5 => 449
    ffffffff00000000,0,21edd413165c6c99,1,0 => 449
    ffffffff00000000,b29e1a94ada2dda7,b29e1a94ada2dda7,1,4700e8d31319d68f => 449
    ffffffff00000000,0,b29e1a94ada2dda7,1,0 => 449
    ffffffff00000000,eb872c9d24406055,eb872c9d24406055,1,2513a2c9380268bd => 449
    ffffffff00000000,0,eb872c9d24406055,1,0 => 449
    ffffffff00000000,b8a32cdea5c42323,b8a32cdea5c42323,1,602846d4ce6eb6a0 => 449
    ffffffff00000000,0,b8a32cdea5c42323,1,0 => 449
    ffffffff00000000,e75bdef93ce48179,e75bdef93ce48179,1,af2179964b5ea68e => 449
    ffffffff00000000,0,e75bdef93ce48179,1,0 => 449
    ffffffff00000000,fdc18bea5099cf99,fdc18bea5099cf99,1,b03801e4f5632daf => 449
    ffffffff00000000,0,fdc18bea5099cf99,1,0 => 449
    ffffffff00000000,eaeb8ef6ede6982a,eaeb8ef6ede6982a,1,c1bb003281c2c4da => 449
    ffffffff00000000,0,eaeb8ef6ede6982a,1,0 => 449
    ffffffff00000000,1b5c200d28290108,1b5c200d28290108,1,63963fe4024c4e12 => 449
    ffffffff00000000,0,1b5c200d28290108,1,0 => 449
    ffffffff00000000,fe572e5977f7a8ca,fe572e5977f7a8ca,1,b85c99621edea1ee => 449
    ffffffff00000000,0,fe572e5977f7a8ca,1,0 => 449
    ffffffff00000000,ee4b38b0259d4112,ee4b38b0259d4112,1,1387d90e92e5c708 => 449
    ffffffff00000000,0,ee4b38b0259d4112,1,0 => 449
    ffffffff00000000,1a7833f19658ccbb,1a7833f19658ccbb,1,780eb4774a03351f => 449
    ffffffff00000000,0,1a7833f19658ccbb,1,0 => 449
    ffffffff00000000,e008cd8ee855d593,e008cd8ee855d593,1,c81b080b62d6609e => 449
    ffffffff00000000,0,e008cd8ee855d593,1,0 => 449
    ffffffff00000000,a6b1d63adb8c2f96,a6b1d63adb8c2f96,1,cdd2a7b1f9068ba2 => 449
    ffffffff00000000,0,a6b1d63adb8c2f96,1,0 => 449
    ffffffff00000000,90ce24d7664ed2c,90ce24d7664ed2c,1,9803627abbda779e => 449
    ffffffff00000000,0,90ce24d7664ed2c,1,0 => 449
    ffffffff00000000,3fd53a1a8ced2c37,3fd53a1a8ced2c37,1,25f48bb1d12cf96d => 449
    ffffffff00000000,0,3fd53a1a8ced2c37,1,0 => 449
    ffffffff00000000,18fdfe159f348749,18fdfe159f348749,1,eadb3640580ff9c5 => 449
    ffffffff00000000,0,18fdfe159f348749,1,0 => 449
    ffffffff00000000,906f00c3959a0ef9,906f00c3959a0ef9,1,f208dca724f284ac => 449
    ffffffff00000000,0,906f00c3959a0ef9,1,0 => 449
    ffffffff00000000,bd8b858cba18057d,bd8b858cba18057d,1,59bc1e23f80e451d => 449
    ffffffff00000000,0,bd8b858cba18057d,1,0 => 449
    ffffffff00000000,2e0af81ac548b64f,2e0af81ac548b64f,1,e05b7e7a5574f17e => 449
    ffffffff00000000,0,2e0af81ac548b64f,1,0 => 449
    ffffffff00000000,e3792d990ea8af34,e3792d990ea8af34,1,c1f93cb240c62a80 => 449
    ffffffff00000000,0,e3792d990ea8af34,1,0 => 449
    ffffffff00000000,c669318b227cd3e5,c669318b227cd3e5,1,c9c2e52cb79d8a03 => 449
    ffffffff00000000,0,c669318b227cd3e5,1,0 => 449
    ffffffff00000000,718045fc67cddb44,718045fc67cddb44,1,5140cbe776caa63e => 449
    ffffffff00000000,0,718045fc67cddb44,1,0 => 449
    ffffffff00000000,45f2138dfcdaa22d,45f2138dfcdaa22d,1,a605375c63f9b29b => 449
    ffffffff00000000,0,45f2138dfcdaa22d,1,0 => 449
    ffffffff00000000,61634286e9d703a6,61634286e9d703a6,1,1e31d83f9b02b400 => 449
    ffffffff00000000,0,61634286e9d703a6,1,0 => 449
    ffffffff00000000,25179ba56912295c,25179ba56912295c,1,381f86dbdc7b1570 => 449
    ffffffff00000000,0,25179ba56912295c,1,0 => 449
    ffffffff00000000,2141f7ab4e5e2c89,2141f7ab4e5e2c89,1,ade28607aac4c8b3 => 449
    ffffffff00000000,0,2141f7ab4e5e2c89,1,0 => 449
    ffffffff00000000,5b6dd62cb2febcbe,5b6dd62cb2febcbe,1,6d6df090b0f7f28c => 449
    ffffffff00000000,0,5b6dd62cb2febcbe,1,0 => 449
    ffffffff00000000,841a45ff256fa1e5,841a45ff256fa1e5,1,c4c65034b0c58624 => 449
    ffffffff00000000,0,841a45ff256fa1e5,1,0 => 449
    ffffffff00000000,5c36a1503dbb55d1,5c36a1503dbb55d1,1,2e0bf3e12afb927c => 449
    ffffffff00000000,0,5c36a1503dbb55d1,1,0 => 449
    ffffffff00000000,fdcf43560b20fabd,fdcf43560b20fabd,1,299b6b8b21a8f90b => 449
    ffffffff00000000,0,fdcf43560b20fabd,1,0 => 449
    ffffffff00000000,beca3d40401eb73b,beca3d40401eb73b,1,68ec6e0fb071e23b => 449
    ffffffff00000000,0,beca3d40401eb73b,1,0 => 449
    ffffffff00000000,e9903f32bc75c38f,e9903f32bc75c38f,1,e65a777fabb1fb7 => 449
    ffffffff00000000,0,e9903f32bc75c38f,1,0 => 449
    ffffffff00000000,c89d4a647517c107,c89d4a647517c107,1,95e9760842338e8c => 449
    ffffffff00000000,0,c89d4a647517c107,1,0 => 449
    ffffffff00000000,176d75b276eeb8b1,176d75b276eeb8b1,1,99c5a563693eb92c => 449
    ffffffff00000000,0,176d75b276eeb8b1,1,0 => 449
    ffffffff00000000,d5bbf4ad5b6ba11c,d5bbf4ad5b6ba11c,1,549d995e90e5a918 => 449
    ffffffff00000000,0,d5bbf4ad5b6ba11c,1,0 => 449
    ffffffff00000000,7f3102d38266007e,7f3102d38266007e,1,cd05ad4d32a887f => 449
    ffffffff00000000,0,7f3102d38266007e,1,0 => 449
    ffffffff00000000,4467863819e029d7,4467863819e029d7,1,73e617cea734698 => 449
    ffffffff00000000,0,4467863819e029d7,1,0 => 449
    ffffffff00000000,918370e47bd9afcd,918370e47bd9afcd,1,f8c68091625e5173 => 449
    ffffffff00000000,0,918370e47bd9afcd,1,0 => 449
    ffffffff00000000,e9b44d20e4412239,e9b44d20e4412239,1,a678b8cb54d0dc1f => 449
    ffffffff00000000,0,e9b44d20e4412239,1,0 => 449
    ffffffff00000000,c3ed019b2a39ac6,c3ed019b2a39ac6,1,5d9e76ea113ac468 => 449
    ffffffff00000000,0,c3ed019b2a39ac6,1,0 => 449
    ffffffff00000000,bf4616dc12688e1f,bf4616dc12688e1f,1,81bae26e50afe726 => 449
    ffffffff00000000,0,bf4616dc12688e1f,1,0 => 449
    ffffffff00000000,aae0a4ef4184e7c1,aae0a4ef4184e7c1,1,9a68a3026f33d89e => 449
    ffffffff00000000,0,aae0a4ef4184e7c1,1,0 => 449
    ffffffff00000000,dafcd5573b34e7f0,dafcd5573b34e7f0,1,3869b9c560d857a => 449
    ffffffff00000000,0,dafcd5573b34e7f0,1,0 => 449
    ffffffff00000000,5512cbf7b4e9bcbb,5512cbf7b4e9bcbb,1,2c044589dc37bd07 => 449
    ffffffff00000000,0,5512cbf7b4e9bcbb,1,0 => 449
    ffffffff00000000,70026943063637e4,70026943063637e4,1,704b8a285661ef76 => 449
    ffffffff00000000,0,70026943063637e4,1,0 => 449
    ffffffff00000000,8f036e13a6c8f7a5,8f036e13a6c8f7a5,1,40b2e05d2aa456e4 => 449
    ffffffff00000000,0,8f036e13a6c8f7a5,1,0 => 449
    ffffffff00000000,8086a1d4a06eabc1,8086a1d4a06eabc1,1,70c07dcc64c34324 => 449
    ffffffff00000000,0,8086a1d4a06eabc1,1,0 => 449
    ffffffff00000000,babc261fab892c36,babc261fab892c36,1,d7f207cc143c06da => 449
    ffffffff00000000,0,babc261fab892c36,1,0 => 449
    ffffffff00000000,e8d28c0ffb036f4,e8d28c0ffb036f4,1,274afbb35495b542 => 449
    ffffffff00000000,0,e8d28c0ffb036f4,1,0 => 449
    ffffffff00000000,202e3b004337edc9,202e3b004337edc9,1,2003c4c9174f11d0 => 449
    ffffffff00000000,0,202e3b004337edc9,1,0 => 449
    ffffffff00000000,4372049c801aa705,4372049c801aa705,1,65385145be4ea9f0 => 449
    ffffffff00000000,0,4372049c801aa705,1,0 => 449
    0,1,ffffffff00000000,0,2e479dc157bf31bb => 449
    0,1,ffffffff00000000,0,6f49de07a6234346 => 449
    0,1,ffffffff00000000,0,213ce7bede378d7b => 449
    0,1,ffffffff00000000,0,5b0431345d4dea83 => 449
    0,1,ffffffff00000000,0,a2de45780344d6a1 => 449
    0,1,ffffffff00000000,0,7103aaf94a7bf308 => 449
    0,1,ffffffff00000000,0,5326fc0d97279301 => 449
    0,1,ffffffff00000000,0,a9ceb74fec024747 => 449
    0,1,ffffffff00000000,0,27f8ec88bb21b1a3 => 449
    0,1,ffffffff00000000,0,fceb4fda1ded0893 => 449
    0,1,ffffffff00000000,0,fac6ff1346a41675 => 449
    0,1,ffffffff00000000,0,9351036095630f9f => 449
    0,1,ffffffff00000000,0,ad535b24afc26bfb => 449
    0,1,ffffffff00000000,0,4627f5c6993e44be => 449
    0,1,ffffffff00000000,0,645cf794b8f1cc58 => 449
    0,1,ffffffff00000000,0,241c70ed0af61617 => 449
    0,1,ffffffff00000000,0,acb8e076647905f1 => 449
    0,1,ffffffff00000000,0,3737e9db4c4f474d => 449
    0,1,ffffffff00000000,0,e7ea5e33e75fffb6 => 449
    0,1,ffffffff00000000,0,90dee49fc9bfc23a => 449
    0,1,ffffffff00000000,0,d1b1edf76bc09c92 => 449
    0,1,ffffffff00000000,0,b65481ba645c602 => 449
    0,1,ffffffff00000000,0,438a7c91d416ca4d => 449
    0,1,ffffffff00000000,0,b60de3bcc5ea751c => 449
    0,1,ffffffff00000000,0,c99cab6aef6f58bc => 449
    0,1,ffffffff00000000,0,69a5ed92a72ee4ff => 449
    0,1,ffffffff00000000,0,5e7b329c1ed4ad71 => 449
    0,1,ffffffff00000000,0,5fc0ac0800144885 => 449
    0,1,ffffffff00000000,0,32db829239774eca => 449
    0,1,ffffffff00000000,0,ade699c5830f310 => 449
    0,1,ffffffff00000000,0,7cc5583b10415f21 => 449
    0,1,ffffffff00000000,0,85df9ed2e166d64f => 449
    0,1,ffffffff00000000,0,6604df4fee32bcb1 => 449
    0,1,ffffffff00000000,0,da608834c40e603d => 449
    0,1,ffffffff00000000,0,8f97fe408061f183 => 449
    0,1,ffffffff00000000,0,a93f485c96f37b89 => 449
    0,1,ffffffff00000000,0,6704e8ee8f18d563 => 449
    0,1,ffffffff00000000,0,cee3e9ac1e072119 => 449
    0,1,ffffffff00000000,0,510d0e65e2b470c1 => 449
    0,1,ffffffff00000000,0,f6323f486b9038f0 => 449
    0,1,ffffffff00000000,0,b508cdeffa5ceef => 449
    0,1,ffffffff00000000,0,f2417089e4fb3cbd => 449
    0,1,ffffffff00000000,0,60e75c2890d15730 => 449
    0,1,ffffffff00000000,0,a6217d8bf660f29c => 449
    0,1,ffffffff00000000,0,839b4e8fafead540 => 449
    0,1,ffffffff00000000,0,d3f3e5e82920adc => 449
    0,1,ffffffff00000000,0,8f7d83bddee7bba8 => 449
    0,1,ffffffff00000000,0,780f2243ea071d06 => 449
    0,1,ffffffff00000000,0,eb915845f3de1634 => 449
    0,1,ffffffff00000000,0,d19e120d26b6f386 => 449
    0,1,ffffffff00000000,0,16ee53a7e5fecc6 => 449
    0,1,ffffffff00000000,0,cb5fd54e7933e477 => 449
    0,1,ffffffff00000000,0,acb8417879fd449f => 449
    0,1,ffffffff00000000,0,9c22190be7f74732 => 449
    0,1,ffffffff00000000,0,5d693c1ba3ba3621 => 449
    0,1,ffffffff00000000,0,3d639263da827b13 => 449
    0,1,ffffffff00000000,0,e273fd971bc8d0e7 => 449
    0,1,ffffffff00000000,0,418f02702d227ed5 => 449
    0,1,ffffffff00000000,0,8c25fda3b503038c => 449
    0,1,ffffffff00000000,0,2cbaed4daec8c07c => 449
    0,1,ffffffff00000000,0,5f58e6afcdd6ddc2 => 449
    0,1,ffffffff00000000,0,284650ac5e1b0eba => 449
    0,1,ffffffff00000000,0,635b337ee819dab5 => 449
    0,1,ffffffff00000000,0,9f9a036ed4f2d49f => 449
    0,1,ffffffff00000000,0,b93e260cae5c170e => 449
    0,1,ffffffff00000000,0,b0a7eae879ddb76d => 449
    0,1,ffffffff00000000,0,34c6efb812b04bf5 => 449
    0,1,ffffffff00000000,0,40bf0ab5fa14c112 => 449
    0,1,ffffffff00000000,0,b6b570fc7c5740d3 => 449
    0,1,ffffffff00000000,0,5a27b9002de33454 => 449
    0,1,ffffffff00000000,0,b1a5b165b6d2b2d2 => 449
    0,1,ffffffff00000000,0,8722e0ace9d1be22 => 449
    0,1,ffffffff00000000,0,788ee3b37e5680fb => 449
    0,1,ffffffff00000000,0,14a726661551e284 => 449
    0,1,ffffffff00000000,0,98b7672f9ef3b419 => 449
    0,1,ffffffff00000000,0,bb93ae776bb30e3a => 449
    0,1,ffffffff00000000,0,28fd3b046380f850 => 449
    0,1,ffffffff00000000,0,337dc00c61bd9ce1 => 449
    0,1,ffffffff00000000,0,d5eca244c7a4ff1d => 449
    0,1,ffffffff00000000,0,7762638264d279bd => 449
    0,1,ffffffff00000000,0,c1e434bedeefd767 => 449
    0,1,ffffffff00000000,0,299351a53b8ec22 => 449
    0,1,ffffffff00000000,0,b2d456e4ad251b80 => 449
    0,1,ffffffff00000000,0,3e9ed1fda49cea0b => 449
    0,1,ffffffff00000000,0,2972a92ba450bed8 => 449
    0,1,ffffffff00000000,0,20216dd77be493de => 449
    0,1,ffffffff00000000,0,adffe8cf28449ec6 => 449
    0,1,ffffffff00000000,0,1c4dbb1c4c27d243 => 449
    0,1,ffffffff00000000,0,388a128b7fd9a609 => 449
    0,1,ffffffff00000000,0,2300e5d6baedf0fb => 449
    0,1,ffffffff00000000,0,2f63aa8647e15104 => 449
    0,1,ffffffff00000000,0,f1c36ce86ecec269 => 449
    0,1,ffffffff00000000,0,27181125183970c9 => 449
    0,1,ffffffff00000000,0,e584029370dca96d => 449
    0,1,ffffffff00000000,0,4d9bbc3e02f1cfb2 => 449
    0,1,ffffffff00000000,0,ea35bc29692af6f8 => 449
    0,1,ffffffff00000000,0,18e21b4beabb4137 => 449
    0,1,ffffffff00000000,0,1e3b9fc625b554f4 => 449
    0,1,ffffffff00000000,0,25d64362697828fd => 449
    0,1,ffffffff00000000,0,db7f023869fb8d38 => 449
    0,1,ffffffff00000000,0,b462065911d4e1fc => 449
    0,1,ffffffff00000000,0,49c24ae4437d8030 => 449
    0,1,ffffffff00000000,0,d793862c112b0566 => 449
    0,1,ffffffff00000000,0,aadd1106730d8feb => 449
    0,1,ffffffff00000000,0,c43b6e0e97b0d568 => 449
    0,1,ffffffff00000000,0,e29024c18ee6fca2 => 449
    0,1,ffffffff00000000,0,5e50c27535b88c66 => 449
    0,1,ffffffff00000000,0,10383f20a4ff9a87 => 449
    0,1,ffffffff00000000,0,38e8ee9d71a45af8 => 449
    0,1,ffffffff00000000,0,dd5118375bf1a9b9 => 449
    0,1,ffffffff00000000,0,86ab99b4dde6c8b0 => 449
    0,1,ffffffff00000000,0,b1204f603f51c080 => 449
    0,1,ffffffff00000000,0,ef61ac8470250ecf => 449
    0,1,ffffffff00000000,0,1bbcd90f132c603f => 449
    0,1,ffffffff00000000,0,cd1dabd964db557 => 449
    0,1,ffffffff00000000,0,11a3ae5beb9d1ec9 => 449
    0,1,ffffffff00000000,0,f755bfeea585d11d => 449
    0,1,ffffffff00000000,0,a3b83250268ea4d7 => 449
    0,1,ffffffff00000000,0,516306f4927c93af => 449
    0,1,ffffffff00000000,0,ddb4ac49c9efa1da => 449
    0,1,ffffffff00000000,0,64bb6dec369d4418 => 449
    0,1,ffffffff00000000,0,8d37f755f4ae9f6 => 449
    0,1,ffffffff00000000,0,eec49b613478675b => 449
    0,1,ffffffff00000000,0,f143933aed25e0b0 => 449
    0,1,ffffffff00000000,0,e4c5dd8255dfc622 => 449
    0,1,ffffffff00000000,0,e7ad7756f193198e => 449
    0,1,ffffffff00000000,0,92c2318b87fff9cb => 449
    0,1,ffffffff00000000,0,739c25f8fd73596d => 449
    0,1,ffffffff00000000,0,5636cac9f16dfed0 => 449
    0,1,ffffffff00000000,0,dd8f909a938e0172 => 449
    0,1,ffffffff00000000,0,c6401fe115063f5b => 449
    0,1,ffffffff00000000,0,8ad97b33f1ac1455 => 449
    0,1,ffffffff00000000,0,784d3d2f1698309 => 449
    0,1,ffffffff00000000,0,530fb67ea1809a81 => 449
    0,1,ffffffff00000000,0,410492299bb01f49 => 449
    0,1,ffffffff00000000,0,139542347424b9ac => 449
    0,1,ffffffff00000000,0,9cb0bd5ea1a1115e => 449
    0,1,ffffffff00000000,0,2e3f615c38f49a1 => 449
    0,1,ffffffff00000000,0,985d4f4a9c5291ef => 449
    0,1,ffffffff00000000,0,775b9feafdcd26e7 => 449
    0,1,ffffffff00000000,0,304265a6384f0f2d => 449
    0,1,ffffffff00000000,0,593664c39773012c => 449
    0,1,ffffffff00000000,0,4f0a2e5fb028f2ce => 449
    0,1,ffffffff00000000,0,d8185f9adfea4fd0 => 449
    0,1,ffffffff00000000,0,ef87139ca9a3ab1e => 449
    0,1,ffffffff00000000,0,3ba71336c34ee133 => 449
    0,1,ffffffff00000000,0,7d3a455d56b70238 => 449
    0,1,ffffffff00000000,0,660d32e130182684 => 449
    0,1,ffffffff00000000,0,297a863f48cd1f43 => 449
    0,1,ffffffff00000000,0,90e0a736a751ebb7 => 449
    0,1,ffffffff00000000,0,549f80ce550c4fd3 => 449
    0,1,ffffffff00000000,0,f73b2922f38bd64 => 449
    0,1,ffffffff00000000,0,16bf1f73fb7a9c3f => 449
    0,1,ffffffff00000000,0,6d1f5a59005bec17 => 449
    0,1,ffffffff00000000,0,c5cb72a2a51159b0 => 449
    0,1,ffffffff00000000,0,8470f39d2d5c900e => 449
    0,1,ffffffff00000000,0,25abb3f1d39fcb76 => 449
    0,1,ffffffff00000000,0,23eb8cc9b372442f => 449
    0,1,ffffffff00000000,0,d687ba55c64f6364 => 449
    0,1,ffffffff00000000,0,da8d9e90fd8ff158 => 449
    0,1,ffffffff00000000,0,e3cbdc7d2fe45ea7 => 449
    0,1,ffffffff00000000,0,b9a8c9b3aee52297 => 449
    0,1,ffffffff00000000,0,c0d28a5c10960bd3 => 449
    0,1,ffffffff00000000,0,45d7ac9b68f71a34 => 449
    0,1,ffffffff00000000,0,eeb76e397069e804 => 449
    0,1,ffffffff00000000,0,9c9c98207cb10767 => 449
    0,1,ffffffff00000000,0,65700b51aedfb5ef => 449
    0,1,ffffffff00000000,0,911f451539869408 => 449
    0,1,ffffffff00000000,0,7ae6849fbc3a0ec6 => 449
    0,1,ffffffff00000000,0,3bb340eba06afe7e => 449
    0,1,ffffffff00000000,0,b46e9d8b682ea65e => 449
    0,1,ffffffff00000000,0,8dcf22f9a3b34356 => 449
    0,1,ffffffff00000000,0,77bdaeda586257a7 => 449
    0,1,ffffffff00000000,0,f19e400a5104d20d => 449
    0,1,ffffffff00000000,0,c368a348e46d950f => 449
    0,1,ffffffff00000000,0,9ef1cd60e679f284 => 449
    0,1,ffffffff00000000,0,5cd377dc8bb882a2 => 449
    0,1,ffffffff00000000,0,a7b0fb7883eee860 => 449
    0,1,ffffffff00000000,0,7684403ec392950d => 449
    0,1,ffffffff00000000,0,5fa3f06f4fed3b52 => 449
    0,1,ffffffff00000000,0,8df57ac11bc04831 => 449
    0,1,ffffffff00000000,0,2db01efa1e1e1897 => 449
    0,1,ffffffff00000000,0,54846de4aadb9ca2 => 449
    0,1,ffffffff00000000,0,ba6745385893c784 => 449
    0,1,ffffffff00000000,0,541d496344d2c75b => 449
    0,1,ffffffff00000000,0,e909678474e687fe => 449
    0,1,ffffffff00000000,0,dfe89923f6c9c2ff => 449
    0,1,ffffffff00000000,0,5ff98fd5d51fe610 => 449
    0,1,ffffffff00000000,0,83e8941918964615 => 449
    0,1,ffffffff00000000,0,5922040b47f150c1 => 449
    0,1,ffffffff00000000,0,f97d750e3dd94521 => 449
    0,1,ffffffff00000000,0,5080d4c2b86f56d7 => 449
    0,1,ffffffff00000000,0,a7de115b56c78d70 => 449
    0,1,ffffffff00000000,0,6a9242ac87538194 => 449
    0,1,ffffffff00000000,0,f7856ef7f9173e44 => 449
    0,1,ffffffff00000000,0,2265fc92feb0dc09 => 449
    0,1,ffffffff00000000,0,17dfc8e4f7ba8a57 => 449
    0,1,ffffffff00000000,0,9001a64209f21db8 => 449
    0,1,ffffffff00000000,0,b932b7cf752e5545 => 449
    0,1,ffffffff00000000,0,a0b1df81b6fe59fc => 449
    0,1,ffffffff00000000,0,8ef1dd26770af2c2 => 449
    0,1,ffffffff00000000,0,541a4f9cfbeed35 => 449
    0,1,ffffffff00000000,0,9e61106178bfc530 => 449
    0,1,ffffffff00000000,0,b3767e80935d8af2 => 449
    0,1,ffffffff00000000,0,98d5782065af06 => 449
    0,1,ffffffff00000000,0,31d191cd5c1466c7 => 449
    0,1,ffffffff00000000,0,410fefafa319ac9d => 449
    0,1,ffffffff00000000,0,bdf8f242e316c4ab => 449
    0,1,ffffffff00000000,0,9e8cd55b57637ed0 => 449
    0,1,ffffffff00000000,0,4d001fd58f002526 => 449
    0,1,ffffffff00000000,0,ca6637000eb4a9f8 => 449
    0,1,ffffffff00000000,0,2f2339d624f91f78 => 449
    0,1,ffffffff00000000,0,6d1a7918c80df518 => 449
    0,1,ffffffff00000000,0,df9a4939342308e9 => 449
    0,1,ffffffff00000000,0,ebc2151ee6c8398c => 449
    0,1,ffffffff00000000,0,3cc2ba8a1116515 => 449
    0,1,ffffffff00000000,0,d341d037e840cf83 => 449
    0,1,ffffffff00000000,0,387cb5d25af4afcc => 449
    0,1,ffffffff00000000,0,bba2515f22909e87 => 449
    0,1,ffffffff00000000,0,7248fe7705f38e47 => 449
    0,1,ffffffff00000000,0,262e963c8da05d3d => 449
    0,1,ffffffff00000000,0,59e89b094d220ec2 => 449
    0,1,ffffffff00000000,0,55d5b52b78b9c5e => 449
    0,1,ffffffff00000000,0,82b27eb33514ef99 => 449
    0,1,ffffffff00000000,0,d30094ca96b7ce7b => 449
    0,1,ffffffff00000000,0,cf5cb381cd0a1535 => 449
    0,1,ffffffff00000000,0,feed4db6919e5a7c => 449
    0,1,ffffffff00000000,0,41703f53753be59f => 449
    0,1,ffffffff00000000,0,5eeea940fcde8b6f => 449
    0,1,ffffffff00000000,0,4cd1f1b175100206 => 449
    0,1,ffffffff00000000,0,4a20358574454ec0 => 449
    0,1,ffffffff00000000,0,6f02dc07d141875c => 449
    0,1,ffffffff00000000,0,296a202ed8e556a2 => 449
    0,1,ffffffff00000000,0,2afd67999bf32ee5 => 449
    0,1,ffffffff00000000,0,7acfd96efa95491d => 449
    0,1,ffffffff00000000,0,6798ba0c0abb2c6d => 449
    0,1,ffffffff00000000,0,34c6f57b26c92122 => 449
    0,1,ffffffff00000000,0,5736e1bad206b5de => 449
    0,1,ffffffff00000000,0,20057d2a0056521b => 449
    0,1,ffffffff00000000,0,3dea5bd5d0578bd7 => 449
    0,1,ffffffff00000000,0,16e50d897d4634ac => 449
    0,1,ffffffff00000000,0,29bff3ecb9b7a6e3 => 449
    0,1,1000000000000,ffffffff00000000,0 => 294
    0,1,fffeffff00000001,ffffffff00000000,0 => 294
    1,0,ffffffff00000000,0,0 => 194
    0,ffffffff00000000,ffffffff00000000,0,0 => 132
    0,1,fffffffeff000001,ffffffff00000000,0 => 96
    0,1,1000000,ffffffff00000000,0 => 96
    0,1,fffffeff00000101,ffffffff00000000,0 => 96
    0,1,ffffffff00,ffffffff00000000,0 => 96
    0,ffffffff00000000,ffffffff00000000,1,0 => 88
    0,ffffffff00000000,efffffff10000001,efffffff10000001,0 => 48
    0,ffffffff00000000,efffffff10000001,ffffffff0000000,0 => 48
    0,ffffffff00000000,efffffff10000001,feffffff00000001,0 => 48
    0,ffffffff00000000,efffffff10000001,100000000000000,0 => 48
    0,ffffffff00000000,efffffff10000001,fffffffefff00001,0 => 48
    0,ffffffff00000000,efffffff10000001,100000,0 => 48
    0,ffffffff00000000,efffffff10000001,ffffffff0000,0 => 48
    0,ffffffff00000000,efffffff10000001,fffeffff00010001,0 => 48
    0,ffffffff00000000,efffffff10000001,100000000000,0 => 48
    0,ffffffff00000000,efffffff10000001,ffffefff00000001,0 => 48
    0,ffffffff00000000,efffffff10000001,100,0 => 48
    0,ffffffff00000000,efffffff10000001,fffffffeffffff01,0 => 48
    0,ffffffff00000000,efffffff10000001,ffffffef00000011,0 => 48
    0,ffffffff00000000,efffffff10000001,ffffffff0,0 => 48
    0,ffffffff00000000,efffffff10000001,fffffffe00000001,0 => 48
    0,ffffffff00000000,efffffff10000001,100000000,0 => 48
    0,ffffffff00000000,1,ffffffff00000000,0 => 27
    200000000000001,0,ffffffff00000000,1,0 => 16
    40001,0,ffffffff00000000,1,0 => 16
    0,ffffffff00000000,0,0,1 => 16
    0,6270d5277401268f,ffffffff00000000,0,0 => 16
    c465162d27278a79,0,ffffffff00000000,1,0 => 8
    c21e639730b6958e,0,ffffffff00000000,1,0 => 8
    e29d1cef5b5b1152,0,ffffffff00000000,1,0 => 8
    ffffffffffff1,0,ffffffff00000000,1,0 => 8
    6270d52774012690,0,ffffffff00000000,1,0 => 8
    e6fa2fd4a3bee0b4,0,ffffffff00000000,1,0 => 8
    4086ebc219f3569c,0,ffffffff00000000,1,0 => 8
    7fff7fff8000001,0,ffffffff00000000,1,0 => 8
    ffffff7f00000002,0,ffffffff00000000,1,0 => 8
    ffffbfff00004002,0,ffffffff00000000,1,0 => 8
    1000000000000001,0,ffffffff00000000,1,0 => 8
    1000001,0,ffffffff00000000,1,0 => 8
    fffeffff00000002,0,ffffffff00000000,1,0 => 8
    2,0,ffffffff00000000,1,0 => 8
    0,ffffffff00000000,0,0,70088f165d151802 => 8
    0,ffffffff00000000,0,0,551136b191446c3d => 8
    0,ffffffff00000000,0,0,de288a3c6592ec51 => 8
    0,ffffffff00000000,0,0,27bb7c3dbd05d4b3 => 8
    0,ce2d24dacdd9a6a3,ffffffff00000000,0,4e5e0a72a1f58d10 => 8
    0,ecab727d25ca7a5d,ffffffff00000000,0,1c909840d79503bc => 8
    0,36058c86abf76f6d,ffffffff00000000,0,31 => 8
    0,6270d5277401268f,1,ffffffff00000000,0 => 8
    0,1,2,1,0 => 4
    0,4,8,1,0 => 4
    0,10,20,1,0 => 4
    0,40,80,1,0 => 4
    0,100,200,1,0 => 4
    0,400,800,1,0 => 4
    0,1000,2000,1,0 => 4
    0,4000,8000,1,0 => 4
    0,10000,20000,1,0 => 4
    0,40000,80000,1,0 => 4
    0,100000,200000,1,0 => 4
    0,400000,800000,1,0 => 4
    0,1,1,1,0 => 4
    0,ffffffff00000000,dfffffff20000001,dfffffff20000001,0 => 3
    0,ffffffff00000000,dfffffff20000001,1fffffffe0000000,0 => 3
    0,ffffffff00000000,dfffffff20000001,fffffffeffe00001,0 => 3
    0,ffffffff00000000,dfffffff20000001,200000,0 => 3
    0,ffffffff00000000,dfffffff20000001,200000000000,0 => 3
    0,ffffffff00000000,dfffffff20000001,ffffdfff00000001,0 => 3
    0,ffffffff00000000,dfffffff20000001,ffffffdf00000021,0 => 3
    0,ffffffff00000000,dfffffff20000001,1fffffffe0,0 => 3
    0,1000000,2000000,1,0 => 3
    0,4000000,8000000,1,0 => 3
    0,10000000,20000000,1,0 => 3
    0,40000000,80000000,1,0 => 3
    0,fffffffeffffffff,fffffffeffffffff,1,0 => 2
    2,0,0,ffffffff00000000,0 => 2
    0,fffffffefffffffd,fffffffefffffffd,1,0 => 2
    4,0,0,ffffffff00000000,0 => 2
    0,fffffffefffffff9,fffffffefffffff9,1,0 => 2
    8,0,0,ffffffff00000000,0 => 2
    0,fffffffefffffff1,fffffffefffffff1,1,0 => 2
    10,0,0,ffffffff00000000,0 => 2
    0,fffffffeffffffe1,fffffffeffffffe1,1,0 => 2
    20,0,0,ffffffff00000000,0 => 2
    0,fffffffeffffffc1,fffffffeffffffc1,1,0 => 2
    40,0,0,ffffffff00000000,0 => 2
    0,fffffffeffffff81,fffffffeffffff81,1,0 => 2
    80,0,0,ffffffff00000000,0 => 2
    0,fffffffeffffff01,fffffffeffffff01,1,0 => 2
    100,0,0,ffffffff00000000,0 => 2
    0,fffffffefffffe01,fffffffefffffe01,1,0 => 2
    200,0,0,ffffffff00000000,0 => 2
    0,fffffffefffffc01,fffffffefffffc01,1,0 => 2
    400,0,0,ffffffff00000000,0 => 2
    0,fffffffefffff801,fffffffefffff801,1,0 => 2
    800,0,0,ffffffff00000000,0 => 2
    0,fffffffefffff001,fffffffefffff001,1,0 => 2
    1000,0,0,ffffffff00000000,0 => 2
    0,fffffffeffffe001,fffffffeffffe001,1,0 => 2
    2000,0,0,ffffffff00000000,0 => 2
    0,fffffffeffffc001,fffffffeffffc001,1,0 => 2
    4000,0,0,ffffffff00000000,0 => 2
    0,fffffffeffff8001,fffffffeffff8001,1,0 => 2
    8000,0,0,ffffffff00000000,0 => 2
    fffffffeffff0001,0,0,1,10000 => 2
    fffffffefffe0001,0,0,1,20000 => 2
    fffffffefffc0001,0,0,1,40000 => 2
    fffffffefff80001,0,0,1,80000 => 2
    fffffffefff00001,0,0,1,100000 => 2
    fffffffeffe00001,0,0,1,200000 => 2
    fffffffeffc00001,0,0,1,400000 => 2
    fffffffeff800001,0,0,1,800000 => 2
    fffffffeff000001,0,0,1,1000000 => 2
    fffffffefe000001,0,0,1,2000000 => 2
    fffffffefc000001,0,0,1,4000000 => 2
    fffffffef8000001,0,0,1,8000000 => 2
    fffffffef0000001,0,0,1,10000000 => 2
    fffffffee0000001,0,0,1,20000000 => 2
    fffffffec0000001,0,0,1,40000000 => 2
    fffffffe80000001,0,0,1,80000000 => 2
    0,1,ffffffff00000000,0,ffffffff => 2
    0,100000000,ffffffff00000000,1,0 => 2
    0,8000000000000000,ffffffff00000000,1,0 => 2
    0,ffffffff00000000,ffffffff00000000,0,1 => 2
    0,100000000,200000000,1,0 => 1
    0,400000000,800000000,1,0 => 1
    0,1000000000,2000000000,1,0 => 1
    0,4000000000,8000000000,1,0 => 1
    0,10000000000,20000000000,1,0 => 1
    0,40000000000,80000000000,1,0 => 1
    0,100000000000,200000000000,1,0 => 1
    0,400000000000,800000000000,1,0 => 1
    0,1000000000000,2000000000000,1,0 => 1
    0,4000000000000,8000000000000,1,0 => 1
    0,10000000000000,20000000000000,1,0 => 1
    0,40000000000000,80000000000000,1,0 => 1
    0,100000000000000,200000000000000,1,0 => 1
    0,400000000000000,800000000000000,1,0 => 1
    0,1000000000000000,2000000000000000,1,0 => 1
    0,4000000000000000,ffffffff00000000,1,0 => 1
    0,1000000,ffffffff00000000,1,0 => 1
    0,2000000,4000000,1,0 => 1
    0,8000000,10000000,1,0 => 1
    0,20000000,40000000,1,0 => 1
    0,80000000,100000000,1,0 => 1
    0,200000000,400000000,1,0 => 1
    0,800000000,1000000000,1,0 => 1
    0,2000000000,4000000000,1,0 => 1
    0,8000000000,10000000000,1,0 => 1
    0,20000000000,40000000000,1,0 => 1
    0,80000000000,100000000000,1,0 => 1
    0,200000000000,400000000000,1,0 => 1
    0,800000000000,1000000000000,1,0 => 1
    0,2000000000000,4000000000000,1,0 => 1
    0,8000000000000,10000000000000,1,0 => 1
    0,20000000000000,40000000000000,1,0 => 1
    0,80000000000000,100000000000000,1,0 => 1
    0,200000000000000,400000000000000,1,0 => 1
    0,800000000000000,1000000000000000,1,0 => 1
    0,2000000000000000,4000000000000000,1,0 => 1
    0,ffffffff00000000,1,0,ffffffff00000000 => 1
    nConstraints: 331913
    PLONK nConstraints: 339443
    plonkAdditions: 7530
    Processing constraint... 0/339443
    Processing constraint... 10000/339443
    Processing constraint... 20000/339443
    Processing constraint... 30000/339443
    Processing constraint... 40000/339443
    Processing constraint... 50000/339443
    Processing constraint... 60000/339443
    Processing constraint... 70000/339443
    Processing constraint... 80000/339443
    Processing constraint... 90000/339443
    Processing constraint... 100000/339443
    Processing constraint... 110000/339443
    Processing constraint... 120000/339443
    Processing constraint... 130000/339443
    Processing constraint... 140000/339443
    Processing constraint... 150000/339443
    Processing constraint... 160000/339443
    Processing constraint... 170000/339443
    Processing constraint... 180000/339443
    Processing constraint... 190000/339443
    Processing constraint... 200000/339443
    Processing constraint... 210000/339443
    Processing constraint... 220000/339443
    Processing constraint... 230000/339443
    Processing constraint... 240000/339443
    Processing constraint... 250000/339443
    Processing constraint... 260000/339443
    Processing constraint... 270000/339443
    Processing constraint... 280000/339443
    Processing constraint... 290000/339443
    Processing constraint... 300000/339443
    Processing constraint... 310000/339443
    Processing constraint... 320000/339443
    Processing constraint... 330000/339443
    Processing custom gates... 0/13845
    Processing custom gates... 10000/13845
    Preparing S... 0/131072
    Preparing S... 10000/131072
    Preparing S... 20000/131072
    Preparing S... 30000/131072
    Preparing S... 40000/131072
    Preparing S... 50000/131072
    Preparing S... 60000/131072
    Preparing S... 70000/131072
    Preparing S... 80000/131072
    Preparing S... 90000/131072
    Preparing S... 100000/131072
    Preparing S... 110000/131072
    Preparing S... 120000/131072
    Preparing S... 130000/131072
    Connection S... 0/112596
    Connection S... 10000/112596
    Connection S... 20000/112596
    Connection S... 30000/112596
    Connection S... 40000/112596
    Connection S... 50000/112596
    Connection S... 60000/112596
    Connection S... 70000/112596
    Connection S... 80000/112596
    Connection S... 90000/112596
    Connection S... 100000/112596
    Connection S... 110000/112596
    files Generated Correctly
    
  • 11)debug运行fibonacci C12 genStarkinfo:运行main_genstarkinfo.js,输入为fibonacci.c12.pil和状态机内的fibonacci.c12.starkstruct.json,输出为fibonacci.c12.starkinfo.json

    /usr/local/bin/node --max-old-space-size=32000 ./src/main_genstarkinfo.js -p tmp/fibonacci.c12.pil -s /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci.c12.starkstruct.json -i tmp/fibonacci.c12.starkinfo.json
    files Generated Correctly
    
  • 12)debug运行fibonacci C12 exec

    /usr/local/bin/node --max-old-space-size=32000 src/compressor12/main_compressor12_exec.js -i /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.proof.zkin.json -w /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.verifier_js/fibonacci.verifier.wasm -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.pil -e /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.exec -m /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.commit
    WebAssembly.instantiate(): Import #1 module="runtime" function="printErrorMessage" error: function import requires a callable
    LinkError: WebAssembly.instantiate(): Import #1 module="runtime" function="printErrorMessage" error: function import requires a callable
        at builder (/Users/lanyu/zyd/0xPolygonHermez/pil-stark/node_modules/circom_runtime/build/main.cjs:100:40)
        at async run (/Users/lanyu/zyd/0xPolygonHermez/pil-stark/src/compressor12/main_compressor12_exec.js:46:16)
    Process exited with code 1
    

    解决方案为:在WebAssembly.instantiate()的runtime模块中添加printErrorMessage和writeBufferMessage伪函数实现:【不推荐,等待官方更新

    const instance = await WebAssembly.instantiate(wasmModule, {
        env: {
            "memory": memory
        },
        runtime: {
            exceptionHandler: function(code) {
                let errStr;
                if (code == 1) {
                    errStr = "Signal not found. ";
                } else if (code == 2) {
                    errStr = "Too many signals set. ";
                } else if (code == 3) {
                    errStr = "Signal already set. ";
                } else if (code == 4) {
                    errStr = "Assert Failed. ";
                } else if (code == 5) {
                    errStr = "Not enough memory. ";
                } else if (code == 6) {
                    errStr = "Input signal array access exceeds the size";
                } else {
                    errStr = "Unknown error.";
                }
                console.log("ERROR: ", code, errStr);
                throw new Error(errStr);
            },
            showSharedRWMemory: function() {
                const shared_rw_memory_size = instance.exports.getFieldNumLen32();
                const arr = new Uint32Array(shared_rw_memory_size);
                for (let j=0; j<shared_rw_memory_size; j++) {
                    arr[shared_rw_memory_size-1-j] = instance.exports.readSharedRWMemory(j);
                }
                console.log(ffjavascript.Scalar.fromArray(arr, 0x100000000));
            },
            error: function(code, pstr, a,b,c,d) {
                let errStr;
                if (code == 7) {
                    errStr=p2str(pstr) + " " + wc.getFr(b).toString() + " != " + wc.getFr(c).toString() + " " +p2str(d);
                } else if (code == 9) {
                    errStr=p2str(pstr) + " " + wc.getFr(b).toString() + " " +p2str(c);
                } else if ((code == 5)&&(options.sym)) {
                    errStr=p2str(pstr)+ " " + options.sym.labelIdx2Name[c];
                } else {
                    errStr=p2str(pstr)+ " " + a + " " + b + " " + c + " " + d;
                }
                console.log("ERROR: ", code, errStr);
                throw new Error(errStr);
            },
            printErrorMessage: function(a) {
                console.log(wc.getFr(a).toString());
            },
            writeBufferMessage: function(a) {
                console.log(wc.getFr(a).toString());
            },
            log: function(a) {
                console.log(wc.getFr(a).toString());
            },
            logGetSignal: function(signal, pVal) {
                if (options.logGetSignal) {
                    options.logGetSignal(signal, wc.getFr(pVal) );
                }
            },
            logSetSignal: function(signal, pVal) {
                if (options.logSetSignal) {
                    options.logSetSignal(signal, wc.getFr(pVal) );
                }
            },
            logStartComponent: function(cIdx) {
                if (options.logStartComponent) {
                    options.logStartComponent(cIdx);
                }
            },
            logFinishComponent: function(cIdx) {
                if (options.logFinishComponent) {
                    options.logFinishComponent(cIdx);
                }
            }
        }
    });
    

    然后有:运行compressor12/main_compressor12_exec.js,输出为:

    • 12.o.1)fibonacci.c12.commit
      输入有:
    • 12.i.1)fibonacci.proof.zkin.json:zk输入。
    • 12.i.2)fibonacci.verifier_js/fibonacci.verifier.wasm:生成witness的wasm代码。
    • 12.i.3)fibonacci.c12.pil
    • 12.i.4)fibonacci.c12.exec
    /usr/local/bin/node --max-old-space-size=32000 src/compressor12/main_compressor12_exec.js -i /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.proof.zkin.json -w /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.verifier_js/fibonacci.verifier.wasm -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.pil -e /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.exec -m /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.commit
    files Generated Correctly
    
  • 13)debug运行fibonacci C12 build consstree:耗资源且生成慢。运行main_buildconsttree.js,输入有fibonacci.c12.pilfibonacci.c12.const,输出有fibonacci.c12.consttreefibonacci.c12.verkey.json

    /usr/local/bin/node --max-old-space-size=32000 src/main_buildconsttree.js -c /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.const -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.pil -s /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci.c12.starkstruct.json -t /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.consttree -v /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.verkey.json
    loading /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.const.. 0 of 2.5
    Interpolating reverse....
    Layer ifft0
    start block 15 32768
    start block 15 0
    start block 15 65536
    start block 15 98304
    end block 15 65536
    end block 15 0
    end block 15 32768
    end block 15 98304
    Layer ifft15
    start block 17 0
    start block 17 32768
    start block 17 65536
    start block 17 98304
    end block 17 0
    end block 17 32768
    end block 17 65536
    end block 17 98304
    Interpolating prepare....
    linear interpolatePrepare start.... 0/10
    linear interpolatePrepare start.... 1/10
    linear interpolatePrepare start.... 2/10
    linear interpolatePrepare start.... 3/10
    linear interpolatePrepare end.... 3/10
    linear interpolatePrepare start.... 7/10
    linear interpolatePrepare end.... 2/10
    linear interpolatePrepare start.... 8/10
    linear interpolatePrepare end.... 1/10
    linear interpolatePrepare start.... 9/10
    linear interpolatePrepare end.... 0/10
    linear interpolatePrepare start.... 10/10
    linear interpolatePrepare end.... 10/10
    linear interpolatePrepare end.... 8/10
    linear interpolatePrepare end.... 7/10
    linear interpolatePrepare end.... 9/10
    linear interpolatePrepare start.... 5/10
    linear interpolatePrepare start.... 6/10
    linear interpolatePrepare start.... 4/10
    linear interpolatePrepare end.... 5/10
    linear interpolatePrepare end.... 6/10
    linear interpolatePrepare end.... 4/10
    Bit reverse....
    Layer fft 0
    start block 16 0
    start block 16 65536
    start block 16 131072
    start block 16 196608
    start block 16 262144
    start block 16 327680
    start block 16 393216
    end block 16 0
    start block 16 458752
    end block 16 65536
    end block 16 262144
    end block 16 393216
    end block 16 196608
    end block 16 131072
    end block 16 327680
    end block 16 458752
    Layer fft 16
    start block 19 0
    start block 19 65536
    start block 19 131072
    start block 19 196608
    start block 19 262144
    start block 19 327680
    start block 19 393216
    end block 19 0
    start block 19 458752
    end block 19 65536
    end block 19 262144
    end block 19 327680
    end block 19 131072
    end block 19 196608
    end block 19 393216
    end block 19 458752
    interpolation terminated
    pool terminated
    Start merkelizing..
    linear hash bn128 start.... 0/524288
    linear hash bn128 start.... 65536/524288
    linear hash bn128 start.... 131072/524288
    linear hash bn128 start.... 327680/524288
    linear hash bn128 start.... 196608/524288
    linear hash bn128 start.... 262144/524288
    linear hash bn128 start.... 393216/524288
    linear hash bn128 end.... 327680/524288
    linear hash bn128 start.... 458752/524288
    linear hash bn128 end.... 262144/524288
    linear hash bn128 end.... 0/524288
    linear hash bn128 end.... 65536/524288
    linear hash bn128 end.... 196608/524288
    linear hash bn128 end.... 131072/524288
    linear hash bn128 end.... 393216/524288
    linear hash bn128 end.... 458752/524288
    merkelizing bn128 hash start.... 0/32768
    merkelizing bn128 hash start.... 4682/32768
    merkelizing bn128 hash start.... 9364/32768
    merkelizing bn128 hash start.... 14046/32768
    merkelizing bn128 hash start.... 18728/32768
    merkelizing bn128 hash start.... 23410/32768
    merkelizing bn128 hash start.... 28092/32768
    merkelizing bn128 hash end.... 9364/32768
    merkelizing bn128 hash end.... 4682/32768
    merkelizing bn128 hash end.... 14046/32768
    merkelizing bn128 hash end.... 0/32768
    merkelizing bn128 hash end.... 28092/32768
    merkelizing bn128 hash end.... 23410/32768
    merkelizing bn128 hash end.... 18728/32768
    merkelizing bn128 hash start.... 0/2048
    merkelizing bn128 hash end.... 0/2048
    merkelizing bn128 hash start.... 0/128
    merkelizing bn128 hash end.... 0/128
    merkelizing bn128 hash start.... 0/8
    merkelizing bn128 hash end.... 0/8
    merkelizing bn128 hash start.... 0/1
    merkelizing bn128 hash end.... 0/1
    writting tree.. 0 / 10485760
    writting tree.. 0 / 2236996
    files Generated Correctly
    
  • 14)debug运行fibonacci C12 prove:耗资源且生成慢。运行main_prover.js,输入有:

    • 14.i.1)fibonacci.c12.commit
    • 14.i.2)fibonacci.c12.const
    • 14.i.3)fibonacci.c12.consttree
    • 14.i.4)fibonacci.c12.pil
    • 14.i.5)sm_fibonacci/fibonacci.c12.starkstruct.json
      输出有:
    • 14.o.1)fibonacci.c12.proof.json:STARK证明。
    • 14.o.2)fibonacci.c12.proof.zkin.json:隐私输入。
    • 14.o.3)fibonacci.c12.public.json:公开输入。
    /usr/local/bin/node --max-old-space-size=32000 src/main_prover.js -m /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.commit -c /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.const -t /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.consttree -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.pil -s /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci/fibonacci.c12.starkstruct.json -o /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.proof.json -z /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.proof.zkin.json -b /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.public.json --proverAddr=0xf39fd6e51aad88f6f4ce6ab8827279cfffb92266
    loading /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.const.. 0 of 2.5
    loading /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.commit.. 0 of 1.5
    Merkelizing 1....
    Interpolating reverse....
    Layer ifft0
    start block 14 0
    start block 14 32768
    start block 14 16384
    start block 14 98304
    start block 14 81920
    start block 14 49152
    start block 14 65536
    end block 14 98304
    end block 14 49152
    start block 14 114688
    end block 14 81920
    end block 14 16384
    end block 14 65536
    end block 14 0
    end block 14 32768
    end block 14 114688
    Layer ifft14
    start block 17 0
    start block 17 16384
    start block 17 32768
    start block 17 49152
    start block 17 65536
    start block 17 81920
    end block 17 16384
    end block 17 49152
    end block 17 65536
    start block 17 114688
    start block 17 98304
    end block 17 81920
    end block 17 0
    end block 17 32768
    end block 17 98304
    end block 17 114688
    Interpolating prepare....
    linear interpolatePrepare start.... 0/6
    linear interpolatePrepare start.... 1/6
    linear interpolatePrepare start.... 2/6
    linear interpolatePrepare start.... 3/6
    linear interpolatePrepare start.... 4/6
    linear interpolatePrepare start.... 5/6
    linear interpolatePrepare end.... 3/6
    linear interpolatePrepare end.... 4/6
    linear interpolatePrepare end.... 5/6
    linear interpolatePrepare start.... 6/6
    linear interpolatePrepare end.... 0/6
    linear interpolatePrepare end.... 2/6
    linear interpolatePrepare end.... 6/6
    linear interpolatePrepare end.... 1/6
    Bit reverse....
    Layer fft 0
    start block 16 0
    start block 16 65536
    start block 16 131072
    start block 16 196608
    start block 16 262144
    start block 16 327680
    start block 16 393216
    end block 16 0
    end block 16 65536
    start block 16 458752
    end block 16 196608
    end block 16 262144
    end block 16 393216
    end block 16 131072
    end block 16 327680
    end block 16 458752
    Layer fft 16
    start block 19 0
    start block 19 65536
    start block 19 131072
    start block 19 196608
    start block 19 262144
    start block 19 327680
    start block 19 393216
    end block 19 0
    start block 19 458752
    end block 19 65536
    end block 19 196608
    end block 19 131072
    end block 19 262144
    end block 19 393216
    end block 19 327680
    end block 19 458752
    interpolation terminated
    pool terminated
    linear hash bn128 start.... 0/524288
    linear hash bn128 start.... 131072/524288
    linear hash bn128 start.... 65536/524288
    linear hash bn128 start.... 196608/524288
    linear hash bn128 start.... 393216/524288
    linear hash bn128 start.... 327680/524288
    linear hash bn128 start.... 262144/524288
    linear hash bn128 end.... 65536/524288
    linear hash bn128 start.... 458752/524288
    linear hash bn128 end.... 131072/524288
    linear hash bn128 end.... 393216/524288
    linear hash bn128 end.... 262144/524288
    linear hash bn128 end.... 196608/524288
    linear hash bn128 end.... 327680/524288
    linear hash bn128 end.... 0/524288
    linear hash bn128 end.... 458752/524288
    merkelizing bn128 hash start.... 0/32768
    merkelizing bn128 hash start.... 4682/32768
    merkelizing bn128 hash start.... 9364/32768
    merkelizing bn128 hash start.... 14046/32768
    merkelizing bn128 hash start.... 18728/32768
    merkelizing bn128 hash start.... 23410/32768
    merkelizing bn128 hash start.... 28092/32768
    merkelizing bn128 hash end.... 28092/32768
    merkelizing bn128 hash end.... 18728/32768
    merkelizing bn128 hash end.... 4682/32768
    merkelizing bn128 hash end.... 23410/32768
    merkelizing bn128 hash end.... 0/32768
    merkelizing bn128 hash end.... 9364/32768
    merkelizing bn128 hash end.... 14046/32768
    merkelizing bn128 hash start.... 0/2048
    merkelizing bn128 hash end.... 0/2048
    merkelizing bn128 hash start.... 0/128
    merkelizing bn128 hash end.... 0/128
    merkelizing bn128 hash start.... 0/8
    merkelizing bn128 hash end.... 0/8
    merkelizing bn128 hash start.... 0/1
    merkelizing bn128 hash end.... 0/1
    start exec step2prev... 74900/131072
    start exec step2prev... 0/131072
    start exec step2prev... 18725/131072
    end exec step2prev... 18725/131072
    end exec step2prev... 0/131072
    end exec step2prev... 74900/131072
    start exec step2prev... 56175/131072
    start exec step2prev... 37450/131072
    end exec step2prev... 37450/131072
    start exec step2prev... 112350/131072
    end exec step2prev... 112350/131072
    start exec step2prev... 93625/131072
    end exec step2prev... 93625/131072
    end exec step2prev... 56175/131072
    Merkelizing 2....
    Interpolating reverse....
    Layer ifft0
    start block 12 4096
    end block 12 4096
    start block 12 28672
    end block 12 28672
    start block 12 32768
    end block 12 32768
    start block 12 36864
    end block 12 36864
    start block 12 40960
    end block 12 40960
    start block 12 12288
    end block 12 12288
    start block 12 49152
    end block 12 49152
    start block 12 53248
    end block 12 53248
    start block 12 57344
    end block 12 57344
    start block 12 61440
    end block 12 61440
    start block 12 65536
    end block 12 65536
    start block 12 69632
    end block 12 69632
    start block 12 73728
    end block 12 73728
    start block 12 77824
    end block 12 77824
    start block 12 81920
    end block 12 81920
    start block 12 86016
    end block 12 86016
    start block 12 94208
    end block 12 94208
    start block 12 102400
    end block 12 102400
    start block 12 110592
    end block 12 110592
    start block 12 118784
    end block 12 118784
    start block 12 126976
    start block 12 45056
    end block 12 45056
    start block 12 90112
    end block 12 90112
    start block 12 98304
    end block 12 98304
    start block 12 106496
    end block 12 106496
    start block 12 114688
    end block 12 114688
    start block 12 122880
    end block 12 122880
    end block 12 126976
    start block 12 8192
    end block 12 8192
    start block 17 8192
    start block 12 20480
    end block 12 20480
    start block 17 20480
    start block 12 0
    end block 12 0
    start block 17 0
    Layer ifft12
    start block 17 4096
    end block 17 4096
    start block 17 28672
    end block 17 28672
    start block 17 32768
    end block 17 32768
    start block 17 45056
    end block 17 45056
    start block 17 57344
    end block 17 57344
    start block 17 65536
    start block 17 12288
    end block 17 12288
    start block 17 36864
    end block 17 36864
    start block 17 49152
    end block 17 49152
    start block 17 61440
    end block 17 61440
    start block 12 16384
    end block 12 16384
    start block 17 16384
    start block 12 24576
    end block 12 24576
    start block 17 24576
    end block 17 8192
    start block 17 40960
    end block 17 40960
    start block 17 53248
    end block 17 53248
    start block 17 73728
    end block 17 73728
    start block 17 106496
    start block 17 69632
    end block 17 69632
    start block 17 81920
    end block 17 81920
    start block 17 94208
    end block 17 94208
    end block 17 65536
    start block 17 77824
    end block 17 77824
    start block 17 90112
    end block 17 90112
    start block 17 98304
    end block 17 98304
    start block 17 114688
    end block 17 114688
    start block 17 126976
    end block 17 126976
    end block 17 0
    start block 17 86016
    end block 17 86016
    start block 17 118784
    end block 17 118784
    linear interpolatePrepare start.... 0/0
    linear interpolatePrepare end.... 0/0
    end block 17 20480
    start block 17 102400
    end block 17 102400
    start block 17 122880
    end block 17 122880
    end block 17 24576
    start block 17 110592
    end block 17 110592
    end block 17 106496
    end block 17 16384
    Interpolating prepare....
    Bit reverse....
    Layer fft 0
    start block 12 0
    start block 12 4096
    start block 12 16384
    start block 12 8192
    end block 12 8192
    start block 12 28672
    end block 12 28672
    start block 12 49152
    end block 12 49152
    start block 12 65536
    start block 12 12288
    end block 12 12288
    start block 12 32768
    end block 12 32768
    start block 12 53248
    end block 12 53248
    start block 12 69632
    start block 12 24576
    end block 12 24576
    start block 12 40960
    end block 12 40960
    start block 12 57344
    end block 12 57344
    start block 12 73728
    end block 12 73728
    start block 12 90112
    end block 12 90112
    start block 12 110592
    end block 12 110592
    end block 12 16384
    start block 12 36864
    end block 12 36864
    start block 12 45056
    end block 12 45056
    start block 12 61440
    end block 12 61440
    start block 12 77824
    end block 12 77824
    start block 12 94208
    end block 12 94208
    start block 12 106496
    end block 12 106496
    start block 12 20480
    end block 12 69632
    start block 12 81920
    end block 12 81920
    start block 12 102400
    end block 12 102400
    start block 12 126976
    end block 12 126976
    start block 12 147456
    end block 12 147456
    start block 12 155648
    end block 12 65536
    start block 12 86016
    end block 12 86016
    start block 12 98304
    end block 12 98304
    start block 12 122880
    end block 12 122880
    start block 12 135168
    end block 12 135168
    start block 12 159744
    end block 12 0
    start block 12 114688
    end block 12 114688
    start block 12 143360
    end block 12 143360
    start block 12 163840
    end block 12 163840
    start block 12 172032
    end block 12 172032
    start block 12 180224
    end block 12 180224
    start block 12 212992
    start block 12 131072
    end block 12 131072
    start block 12 139264
    end block 12 139264
    start block 12 151552
    end block 12 151552
    start block 12 167936
    end block 12 167936
    start block 12 196608
    end block 12 196608
    start block 12 204800
    end block 12 204800
    start block 12 221184
    end block 12 159744
    start block 12 176128
    end block 12 176128
    start block 12 188416
    end block 12 188416
    start block 12 208896
    end block 12 208896
    start block 12 225280
    end block 12 225280
    start block 12 241664
    end block 12 241664
    start block 12 258048
    end block 12 258048
    start block 12 274432
    end block 12 155648
    start block 12 192512
    end block 12 192512
    start block 12 217088
    end block 12 217088
    start block 12 229376
    end block 12 229376
    start block 12 245760
    end block 12 245760
    start block 12 266240
    start block 12 118784
    end block 12 118784
    end block 12 20480
    end block 12 212992
    start block 12 233472
    end block 12 233472
    start block 12 253952
    end block 12 253952
    start block 12 282624
    end block 12 282624
    start block 12 299008
    end block 12 299008
    end block 12 221184
    start block 12 237568
    end block 12 237568
    start block 12 249856
    end block 12 249856
    start block 12 262144
    end block 12 262144
    start block 12 270336
    end block 12 270336
    start block 12 286720
    end block 12 286720
    start block 12 290816
    end block 12 290816
    start block 12 307200
    end block 12 307200
    start block 12 311296
    end block 12 266240
    start block 12 278528
    end block 12 278528
    start block 12 294912
    end block 12 294912
    start block 12 319488
    end block 12 319488
    start block 12 331776
    end block 12 331776
    start block 12 352256
    end block 12 352256
    start block 12 364544
    end block 12 274432
    start block 12 303104
    end block 12 303104
    start block 12 327680
    end block 12 327680
    end block 12 311296
    start block 12 323584
    end block 12 323584
    start block 12 335872
    end block 12 335872
    start block 12 339968
    end block 12 339968
    start block 12 348160
    end block 12 348160
    start block 12 368640
    end block 12 368640
    start block 12 389120
    end block 12 389120
    start block 12 405504
    end block 12 405504
    start block 12 315392
    end block 12 315392
    start block 12 344064
    end block 12 344064
    start block 12 376832
    end block 12 376832
    start block 12 393216
    end block 12 393216
    start block 12 409600
    end block 12 409600
    start block 12 184320
    end block 12 184320
    start block 12 200704
    end block 12 200704
    end block 12 364544
    start block 12 385024
    end block 12 385024
    start block 12 401408
    end block 12 401408
    start block 12 425984
    end block 12 425984
    start block 12 446464
    end block 12 446464
    start block 12 466944
    start block 12 360448
    end block 12 360448
    start block 12 380928
    end block 12 380928
    start block 12 397312
    end block 12 397312
    start block 12 421888
    end block 12 421888
    start block 12 438272
    start block 12 356352
    end block 12 356352
    start block 12 372736
    end block 12 372736
    start block 12 450560
    end block 12 4096
    start block 12 417792
    end block 12 417792
    start block 19 4096
    end block 19 4096
    start block 19 32768
    start block 12 430080
    end block 12 430080
    start block 12 442368
    end block 12 442368
    start block 12 458752
    end block 12 458752
    start block 12 475136
    end block 12 475136
    start block 12 491520
    end block 12 491520
    start block 12 499712
    end block 12 499712
    start block 12 516096
    end block 12 516096
    start block 19 16384
    start block 12 434176
    end block 12 434176
    start block 12 454656
    end block 12 454656
    start block 12 471040
    end block 12 471040
    start block 12 487424
    end block 12 487424
    start block 12 512000
    end block 12 512000
    start block 19 24576
    end block 12 438272
    start block 12 462848
    end block 12 462848
    start block 12 479232
    end block 12 479232
    start block 12 495616
    end block 12 495616
    start block 12 507904
    end block 12 507904
    start block 19 8192
    end block 19 8192
    start block 19 40960
    end block 12 466944
    start block 12 483328
    end block 12 483328
    start block 12 503808
    end block 12 503808
    start block 12 520192
    end block 12 520192
    start block 19 12288
    start block 12 413696
    end block 12 413696
    start block 19 0
    end block 19 0
    start block 19 28672
    end block 19 28672
    start block 19 53248
    end block 19 53248
    start block 19 69632
    end block 19 69632
    start block 19 81920
    end block 12 450560
    start block 19 20480
    end block 19 20480
    start block 19 36864
    end block 19 36864
    start block 19 57344
    end block 19 57344
    start block 19 73728
    end block 19 73728
    start block 19 86016
    Layer fft 12
    end block 19 24576
    start block 19 45056
    end block 19 45056
    start block 19 61440
    end block 19 61440
    start block 19 90112
    end block 19 32768
    start block 19 49152
    end block 19 49152
    start block 19 65536
    end block 19 65536
    start block 19 77824
    end block 19 77824
    start block 19 94208
    end block 19 81920
    start block 19 98304
    end block 19 86016
    end block 19 16384
    start block 19 106496
    end block 19 106496
    start block 19 118784
    end block 19 12288
    start block 19 110592
    end block 19 110592
    start block 19 122880
    end block 19 40960
    start block 19 114688
    end block 19 114688
    start block 19 126976
    start block 19 102400
    end block 19 102400
    start block 19 167936
    end block 19 118784
    start block 19 131072
    end block 19 131072
    start block 19 143360
    end block 19 143360
    start block 19 155648
    end block 19 90112
    start block 19 135168
    end block 19 135168
    start block 19 147456
    end block 19 147456
    start block 19 159744
    end block 19 122880
    start block 19 139264
    end block 19 139264
    start block 19 151552
    end block 19 126976
    start block 19 163840
    end block 19 94208
    start block 19 172032
    end block 19 98304
    start block 19 176128
    end block 19 167936
    start block 19 180224
    end block 19 172032
    start block 19 184320
    end block 19 176128
    start block 19 188416
    end block 19 151552
    start block 19 192512
    end block 19 184320
    end block 19 180224
    start block 19 196608
    start block 19 200704
    end block 19 163840
    start block 19 204800
    end block 19 188416
    start block 19 208896
    end block 19 196608
    start block 19 212992
    end block 19 200704
    start block 19 217088
    end block 19 217088
    start block 19 229376
    end block 19 208896
    start block 19 221184
    end block 19 212992
    start block 19 225280
    end block 19 221184
    start block 19 233472
    end block 19 155648
    start block 19 237568
    end block 19 192512
    start block 19 241664
    end block 19 159744
    start block 19 245760
    end block 19 204800
    start block 19 249856
    end block 19 245760
    start block 19 253952
    end block 19 237568
    start block 19 258048
    end block 19 258048
    start block 19 274432
    end block 19 241664
    start block 19 262144
    end block 19 262144
    start block 19 278528
    end block 19 249856
    start block 19 266240
    end block 19 253952
    start block 19 270336
    end block 19 270336
    start block 19 282624
    end block 19 274432
    start block 19 286720
    end block 19 278528
    start block 19 290816
    end block 19 282624
    start block 19 294912
    end block 19 286720
    start block 19 299008
    end block 19 266240
    start block 19 307200
    end block 19 307200
    end block 19 225280
    start block 19 303104
    end block 19 303104
    start block 19 319488
    end block 19 319488
    start block 19 339968
    end block 19 229376
    start block 19 311296
    end block 19 311296
    start block 19 335872
    end block 19 233472
    start block 19 315392
    end block 19 315392
    start block 19 323584
    end block 19 290816
    start block 19 327680
    end block 19 335872
    start block 19 344064
    end block 19 344064
    start block 19 356352
    end block 19 323584
    start block 19 348160
    end block 19 348160
    start block 19 360448
    start block 19 331776
    end block 19 339968
    start block 19 352256
    end block 19 352256
    start block 19 364544
    end block 19 294912
    start block 19 368640
    end block 19 368640
    start block 19 385024
    end block 19 299008
    start block 19 372736
    end block 19 327680
    start block 19 376832
    end block 19 331776
    start block 19 380928
    end block 19 360448
    start block 19 389120
    end block 19 372736
    start block 19 393216
    end block 19 393216
    start block 19 413696
    end block 19 413696
    start block 19 430080
    end block 19 385024
    start block 19 397312
    end block 19 397312
    start block 19 417792
    end block 19 417792
    start block 19 434176
    end block 19 356352
    start block 19 401408
    end block 19 401408
    start block 19 425984
    end block 19 425984
    start block 19 438272
    end block 19 380928
    start block 19 405504
    end block 19 405504
    start block 19 450560
    end block 19 376832
    start block 19 409600
    end block 19 409600
    start block 19 421888
    end block 19 421888
    end block 19 364544
    start block 19 446464
    start block 19 442368
    end block 19 389120
    start block 19 454656
    end block 19 446464
    start block 19 458752
    end block 19 430080
    end block 19 454656
    start block 19 466944
    start block 19 462848
    end block 19 438272
    start block 19 471040
    end block 19 450560
    end block 19 458752
    start block 19 479232
    end block 19 466944
    start block 19 483328
    end block 19 483328
    start block 19 495616
    end block 19 495616
    start block 19 507904
    end block 19 479232
    start block 19 487424
    end block 19 487424
    start block 19 503808
    start block 19 475136
    end block 19 475136
    start block 19 516096
    end block 19 442368
    start block 19 491520
    end block 19 491520
    end block 19 471040
    start block 19 499712
    end block 19 499712
    end block 19 434176
    start block 19 512000
    end block 19 512000
    end block 19 462848
    start block 19 520192
    end block 19 520192
    end block 19 516096
    end block 19 503808
    end block 19 507904
    interpolation terminated
    pool terminated
    linear hash bn128 start.... 131072/524288
    linear hash bn128 end.... 131072/524288
    linear hash bn128 start.... 65536/524288
    linear hash bn128 end.... 65536/524288
    linear hash bn128 start.... 458752/524288
    linear hash bn128 end.... 458752/524288
    linear hash bn128 start.... 262144/524288
    linear hash bn128 end.... 262144/524288
    linear hash bn128 start.... 0/524288
    linear hash bn128 start.... 196608/524288
    linear hash bn128 end.... 196608/524288
    linear hash bn128 end.... 0/524288
    linear hash bn128 start.... 327680/524288
    linear hash bn128 end.... 327680/524288
    linear hash bn128 start.... 393216/524288
    linear hash bn128 end.... 393216/524288
    merkelizing bn128 hash start.... 18728/32768
    merkelizing bn128 hash start.... 0/32768
    merkelizing bn128 hash start.... 9364/32768
    merkelizing bn128 hash start.... 4682/32768
    merkelizing bn128 hash start.... 14046/32768
    merkelizing bn128 hash start.... 23410/32768
    merkelizing bn128 hash start.... 28092/32768
    merkelizing bn128 hash end.... 9364/32768
    merkelizing bn128 hash end.... 4682/32768
    merkelizing bn128 hash end.... 23410/32768
    merkelizing bn128 hash end.... 0/32768
    merkelizing bn128 hash end.... 28092/32768
    merkelizing bn128 hash end.... 14046/32768
    merkelizing bn128 hash end.... 18728/32768
    merkelizing bn128 hash start.... 0/2048
    merkelizing bn128 hash end.... 0/2048
    merkelizing bn128 hash start.... 0/128
    merkelizing bn128 hash end.... 0/128
    merkelizing bn128 hash start.... 0/8
    merkelizing bn128 hash end.... 0/8
    merkelizing bn128 hash start.... 0/1
    merkelizing bn128 hash end.... 0/1
    start exec step3prev... 0/131072
    start exec step3prev... 18725/131072
    start exec step3prev... 37450/131072
    start exec step3prev... 56175/131072
    start exec step3prev... 74900/131072
    start exec step3prev... 93625/131072
    start exec step3prev... 112350/131072
    end exec step3prev... 0/131072
    end exec step3prev... 18725/131072
    end exec step3prev... 56175/131072
    end exec step3prev... 37450/131072
    end exec step3prev... 74900/131072
    end exec step3prev... 93625/131072
    end exec step3prev... 112350/131072
    Calculating z for connection 0
    Merkelizing 3....
    Interpolating reverse....
    Layer ifft0
    start block 12 4096
    start block 12 0
    start block 12 20480
    end block 12 0
    start block 12 28672
    end block 12 4096
    start block 12 32768
    end block 12 32768
    start block 12 40960
    end block 12 28672
    start block 12 36864
    start block 12 24576
    end block 12 20480
    start block 12 45056
    end block 12 45056
    start block 12 49152
    start block 12 8192
    end block 12 8192
    start block 12 77824
    end block 12 77824
    start block 12 106496
    start block 12 12288
    end block 12 12288
    start block 12 69632
    end block 12 69632
    start block 12 98304
    end block 12 98304
    end block 12 36864
    start block 12 53248
    end block 12 53248
    start block 12 61440
    end block 12 61440
    start block 12 90112
    end block 12 90112
    start block 12 102400
    end block 12 40960
    start block 12 57344
    end block 12 57344
    start block 12 65536
    end block 12 65536
    start block 12 86016
    end block 12 24576
    start block 12 94208
    end block 12 94208
    end block 12 49152
    start block 12 73728
    end block 12 73728
    start block 12 81920
    end block 12 81920
    start block 12 16384
    end block 12 16384
    start block 12 110592
    end block 12 110592
    start block 12 122880
    end block 12 122880
    end block 12 102400
    start block 12 114688
    end block 12 114688
    end block 12 86016
    start block 12 118784
    end block 12 118784
    end block 12 106496
    start block 12 126976
    end block 12 126976
    Layer ifft12
    start block 17 0
    end block 17 0
    start block 17 32768
    start block 17 4096
    end block 17 4096
    start block 17 36864
    start block 17 8192
    end block 17 8192
    start block 17 28672
    start block 17 16384
    end block 17 16384
    start block 17 12288
    end block 17 12288
    start block 17 24576
    end block 17 24576
    start block 17 20480
    end block 17 20480
    start block 17 49152
    start block 17 40960
    end block 17 36864
    start block 17 57344
    start block 17 53248
    end block 17 28672
    start block 17 45056
    end block 17 49152
    start block 17 65536
    end block 17 53248
    start block 17 69632
    start block 17 61440
    end block 17 65536
    start block 17 73728
    end block 17 40960
    start block 17 77824
    end block 17 57344
    start block 17 81920
    end block 17 81920
    start block 17 98304
    end block 17 32768
    start block 17 86016
    end block 17 86016
    start block 17 114688
    end block 17 73728
    start block 17 90112
    end block 17 90112
    start block 17 102400
    end block 17 77824
    start block 17 94208
    end block 17 45056
    start block 17 106496
    end block 17 61440
    start block 17 110592
    end block 17 69632
    start block 17 118784
    end block 17 106496
    start block 17 122880
    end block 17 114688
    start block 17 126976
    end block 17 110592
    end block 17 94208
    end block 17 98304
    end block 17 118784
    end block 17 126976
    end block 17 122880
    end block 17 102400
    Interpolating prepare....
    linear interpolatePrepare start.... 0/6
    linear interpolatePrepare start.... 1/6
    linear interpolatePrepare end.... 1/6
    linear interpolatePrepare start.... 2/6
    linear interpolatePrepare end.... 2/6
    linear interpolatePrepare start.... 3/6
    linear interpolatePrepare start.... 4/6
    linear interpolatePrepare start.... 6/6
    linear interpolatePrepare end.... 3/6
    linear interpolatePrepare start.... 5/6
    linear interpolatePrepare end.... 4/6
    linear interpolatePrepare end.... 6/6
    linear interpolatePrepare end.... 5/6
    linear interpolatePrepare end.... 0/6
    Bit reverse....
    Layer fft 0
    start block 14 0
    start block 14 16384
    start block 14 32768
    start block 14 49152
    start block 14 65536
    start block 14 81920
    start block 14 98304
    end block 14 32768
    start block 14 114688
    end block 14 16384
    start block 14 131072
    end block 14 49152
    start block 14 147456
    end block 14 0
    end block 14 81920
    start block 14 180224
    start block 14 163840
    end block 14 65536
    start block 14 196608
    end block 14 98304
    start block 14 212992
    end block 14 147456
    start block 14 229376
    end block 14 131072
    end block 14 114688
    start block 14 262144
    end block 14 163840
    start block 14 245760
    start block 14 278528
    end block 14 180224
    start block 14 294912
    end block 14 196608
    start block 14 311296
    end block 14 212992
    start block 14 327680
    end block 14 262144
    start block 14 344064
    end block 14 229376
    start block 14 360448
    end block 14 245760
    start block 14 376832
    end block 14 311296
    start block 14 393216
    end block 14 327680
    start block 14 409600
    end block 14 278528
    start block 14 425984
    end block 14 294912
    start block 14 442368
    end block 14 344064
    start block 14 458752
    end block 14 360448
    start block 14 475136
    end block 14 376832
    start block 14 491520
    end block 14 393216
    start block 14 507904
    end block 14 425984
    end block 14 409600
    end block 14 442368
    end block 14 458752
    end block 14 491520
    end block 14 475136
    end block 14 507904
    Layer fft 14
    start block 19 0
    start block 19 16384
    start block 19 32768
    start block 19 49152
    start block 19 65536
    start block 19 81920
    start block 19 98304
    end block 19 0
    end block 19 81920
    end block 19 49152
    end block 19 16384
    end block 19 32768
    start block 19 180224
    start block 19 114688
    start block 19 131072
    start block 19 147456
    start block 19 163840
    end block 19 65536
    start block 19 196608
    end block 19 98304
    start block 19 212992
    end block 19 147456
    start block 19 229376
    end block 19 163840
    start block 19 245760
    end block 19 131072
    start block 19 262144
    end block 19 180224
    start block 19 278528
    end block 19 114688
    start block 19 294912
    end block 19 196608
    start block 19 311296
    end block 19 212992
    start block 19 327680
    end block 19 262144
    start block 19 344064
    end block 19 245760
    start block 19 360448
    end block 19 229376
    start block 19 376832
    end block 19 278528
    start block 19 393216
    end block 19 294912
    start block 19 409600
    end block 19 311296
    start block 19 425984
    end block 19 327680
    end block 19 344064
    start block 19 442368
    end block 19 376832
    end block 19 409600
    start block 19 491520
    start block 19 458752
    start block 19 475136
    end block 19 393216
    end block 19 360448
    start block 19 507904
    end block 19 425984
    end block 19 442368
    end block 19 458752
    end block 19 507904
    end block 19 475136
    end block 19 491520
    interpolation terminated
    pool terminated
    linear hash bn128 start.... 327680/524288
    linear hash bn128 start.... 131072/524288
    linear hash bn128 start.... 196608/524288
    linear hash bn128 start.... 0/524288
    linear hash bn128 start.... 262144/524288
    linear hash bn128 start.... 65536/524288
    linear hash bn128 start.... 393216/524288
    linear hash bn128 end.... 393216/524288
    linear hash bn128 end.... 327680/524288
    linear hash bn128 start.... 458752/524288
    linear hash bn128 end.... 262144/524288
    linear hash bn128 end.... 196608/524288
    linear hash bn128 end.... 0/524288
    linear hash bn128 end.... 131072/524288
    linear hash bn128 end.... 65536/524288
    linear hash bn128 end.... 458752/524288
    merkelizing bn128 hash start.... 0/32768
    merkelizing bn128 hash start.... 9364/32768
    merkelizing bn128 hash start.... 14046/32768
    merkelizing bn128 hash start.... 4682/32768
    merkelizing bn128 hash start.... 18728/32768
    merkelizing bn128 hash start.... 28092/32768
    merkelizing bn128 hash start.... 23410/32768
    merkelizing bn128 hash end.... 23410/32768
    merkelizing bn128 hash end.... 4682/32768
    merkelizing bn128 hash end.... 18728/32768
    merkelizing bn128 hash end.... 0/32768
    merkelizing bn128 hash end.... 14046/32768
    merkelizing bn128 hash end.... 9364/32768
    merkelizing bn128 hash end.... 28092/32768
    merkelizing bn128 hash start.... 0/2048
    merkelizing bn128 hash end.... 0/2048
    merkelizing bn128 hash start.... 0/128
    merkelizing bn128 hash end.... 0/128
    merkelizing bn128 hash start.... 0/8
    merkelizing bn128 hash end.... 0/8
    merkelizing bn128 hash start.... 0/1
    merkelizing bn128 hash end.... 0/1
    start exec step4... 0/131072
    start exec step4... 18725/131072
    start exec step4... 37450/131072
    start exec step4... 56175/131072
    start exec step4... 74900/131072
    start exec step4... 93625/131072
    start exec step4... 112350/131072
    end exec step4... 56175/131072
    end exec step4... 112350/131072
    end exec step4... 18725/131072
    end exec step4... 37450/131072
    end exec step4... 0/131072
    end exec step4... 74900/131072
    end exec step4... 93625/131072
    Interpolating reverse....
    Layer ifft0
    start block 16 0
    start block 16 65536
    end block 16 0
    end block 16 65536
    Layer ifft16
    start block 17 0
    start block 17 65536
    end block 17 0
    end block 17 65536
    Interpolating prepare....
    linear interpolatePrepare start.... 0/39
    linear interpolatePrepare start.... 1/39
    linear interpolatePrepare end.... 1/39
    linear interpolatePrepare end.... 0/39
    linear interpolatePrepare start.... 7/39
    linear interpolatePrepare start.... 8/39
    linear interpolatePrepare end.... 7/39
    linear interpolatePrepare start.... 10/39
    linear interpolatePrepare end.... 10/39
    linear interpolatePrepare start.... 12/39
    linear interpolatePrepare end.... 8/39
    linear interpolatePrepare start.... 9/39
    linear interpolatePrepare end.... 9/39
    linear interpolatePrepare start.... 11/39
    linear interpolatePrepare end.... 11/39
    linear interpolatePrepare end.... 12/39
    linear interpolatePrepare start.... 13/39
    linear interpolatePrepare start.... 14/39
    linear interpolatePrepare end.... 14/39
    linear interpolatePrepare start.... 15/39
    linear interpolatePrepare end.... 13/39
    linear interpolatePrepare start.... 16/39
    linear interpolatePrepare end.... 15/39
    linear interpolatePrepare start.... 17/39
    linear interpolatePrepare end.... 16/39
    linear interpolatePrepare start.... 18/39
    linear interpolatePrepare end.... 18/39
    linear interpolatePrepare end.... 17/39
    linear interpolatePrepare start.... 20/39
    linear interpolatePrepare start.... 2/39
    linear interpolatePrepare start.... 4/39
    linear interpolatePrepare start.... 5/39
    linear interpolatePrepare start.... 19/39
    linear interpolatePrepare end.... 19/39
    linear interpolatePrepare start.... 22/39
    linear interpolatePrepare end.... 22/39
    linear interpolatePrepare start.... 25/39
    linear interpolatePrepare start.... 6/39
    linear interpolatePrepare end.... 6/39
    linear interpolatePrepare start.... 24/39
    linear interpolatePrepare end.... 20/39
    linear interpolatePrepare start.... 21/39
    linear interpolatePrepare start.... 3/39
    linear interpolatePrepare end.... 2/39
    linear interpolatePrepare end.... 4/39
    linear interpolatePrepare end.... 5/39
    linear interpolatePrepare end.... 21/39
    linear interpolatePrepare start.... 23/39
    linear interpolatePrepare start.... 27/39
    linear interpolatePrepare start.... 26/39
    linear interpolatePrepare end.... 26/39
    linear interpolatePrepare end.... 3/39
    linear interpolatePrepare start.... 28/39
    linear interpolatePrepare start.... 29/39
    linear interpolatePrepare end.... 29/39
    linear interpolatePrepare end.... 23/39
    linear interpolatePrepare start.... 31/39
    linear interpolatePrepare end.... 25/39
    linear interpolatePrepare start.... 35/39
    linear interpolatePrepare end.... 24/39
    linear interpolatePrepare start.... 30/39
    linear interpolatePrepare end.... 28/39
    linear interpolatePrepare start.... 33/39
    linear interpolatePrepare start.... 32/39
    linear interpolatePrepare start.... 34/39
    linear interpolatePrepare end.... 34/39
    linear interpolatePrepare end.... 27/39
    linear interpolatePrepare start.... 38/39
    linear interpolatePrepare end.... 38/39
    linear interpolatePrepare end.... 32/39
    linear interpolatePrepare start.... 37/39
    linear interpolatePrepare end.... 37/39
    linear interpolatePrepare end.... 35/39
    linear interpolatePrepare start.... 36/39
    linear interpolatePrepare end.... 36/39
    linear interpolatePrepare end.... 30/39
    linear interpolatePrepare start.... 39/39
    linear interpolatePrepare end.... 39/39
    linear interpolatePrepare end.... 31/39
    linear interpolatePrepare end.... 33/39
    Bit reverse....
    Layer fft 0
    start block 16 0
    start block 16 65536
    start block 16 131072
    start block 16 196608
    start block 16 262144
    start block 16 327680
    start block 16 393216
    end block 16 196608
    start block 16 458752
    end block 16 327680
    end block 16 262144
    end block 16 393216
    end block 16 131072
    end block 16 0
    end block 16 65536
    end block 16 458752
    Layer fft 16
    start block 19 0
    start block 19 65536
    start block 19 131072
    start block 19 196608
    start block 19 262144
    start block 19 327680
    start block 19 393216
    end block 19 196608
    start block 19 458752
    end block 19 131072
    end block 19 0
    end block 19 327680
    end block 19 65536
    end block 19 262144
    end block 19 393216
    end block 19 458752
    interpolation terminated
    pool terminated
    start exec step42ns... 0/524288
    start exec step42ns... 74899/524288
    start exec step42ns... 149798/524288
    start exec step42ns... 224697/524288
    start exec step42ns... 299596/524288
    start exec step42ns... 374495/524288
    start exec step42ns... 449394/524288
    end exec step42ns... 0/524288
    end exec step42ns... 74899/524288
    end exec step42ns... 149798/524288
    end exec step42ns... 299596/524288
    end exec step42ns... 224697/524288
    end exec step42ns... 374495/524288
    end exec step42ns... 449394/524288
    Merkelizing 4....
    linear hash bn128 start.... 65536/524288
    linear hash bn128 start.... 0/524288
    linear hash bn128 start.... 131072/524288
    linear hash bn128 start.... 196608/524288
    linear hash bn128 start.... 262144/524288
    linear hash bn128 start.... 327680/524288
    linear hash bn128 start.... 393216/524288
    linear hash bn128 end.... 196608/524288
    linear hash bn128 start.... 458752/524288
    linear hash bn128 end.... 0/524288
    linear hash bn128 end.... 262144/524288
    linear hash bn128 end.... 393216/524288
    linear hash bn128 end.... 131072/524288
    linear hash bn128 end.... 327680/524288
    linear hash bn128 end.... 65536/524288
    linear hash bn128 end.... 458752/524288
    merkelizing bn128 hash start.... 0/32768
    merkelizing bn128 hash start.... 4682/32768
    merkelizing bn128 hash start.... 9364/32768
    merkelizing bn128 hash start.... 14046/32768
    merkelizing bn128 hash start.... 18728/32768
    merkelizing bn128 hash start.... 23410/32768
    merkelizing bn128 hash start.... 28092/32768
    merkelizing bn128 hash end.... 4682/32768
    merkelizing bn128 hash end.... 28092/32768
    merkelizing bn128 hash end.... 9364/32768
    merkelizing bn128 hash end.... 23410/32768
    merkelizing bn128 hash end.... 0/32768
    merkelizing bn128 hash end.... 18728/32768
    merkelizing bn128 hash end.... 14046/32768
    merkelizing bn128 hash start.... 0/2048
    merkelizing bn128 hash end.... 0/2048
    merkelizing bn128 hash start.... 0/128
    merkelizing bn128 hash end.... 0/128
    merkelizing bn128 hash start.... 0/8
    merkelizing bn128 hash end.... 0/8
    merkelizing bn128 hash start.... 0/1
    merkelizing bn128 hash end.... 0/1
    start exec step52ns... 0/524288
    start exec step52ns... 74899/524288
    start exec step52ns... 149798/524288
    start exec step52ns... 224697/524288
    start exec step52ns... 299596/524288
    start exec step52ns... 374495/524288
    start exec step52ns... 449394/524288
    end exec step52ns... 74899/524288
    end exec step52ns... 0/524288
    end exec step52ns... 224697/524288
    end exec step52ns... 149798/524288
    end exec step52ns... 374495/524288
    end exec step52ns... 299596/524288
    end exec step52ns... 449394/524288
    linear hash bn128 start.... 18728/32768
    linear hash bn128 start.... 14046/32768
    linear hash bn128 start.... 4682/32768
    linear hash bn128 start.... 0/32768
    linear hash bn128 start.... 23410/32768
    linear hash bn128 start.... 28092/32768
    linear hash bn128 start.... 9364/32768
    linear hash bn128 end.... 0/32768
    linear hash bn128 end.... 14046/32768
    linear hash bn128 end.... 18728/32768
    linear hash bn128 end.... 4682/32768
    linear hash bn128 end.... 9364/32768
    linear hash bn128 end.... 28092/32768
    linear hash bn128 end.... 23410/32768
    merkelizing bn128 hash start.... 0/2048
    merkelizing bn128 hash end.... 0/2048
    merkelizing bn128 hash start.... 0/128
    merkelizing bn128 hash end.... 0/128
    merkelizing bn128 hash start.... 0/8
    merkelizing bn128 hash end.... 0/8
    merkelizing bn128 hash start.... 0/1
    merkelizing bn128 hash end.... 0/1
    linear hash bn128 start.... 0/2048
    linear hash bn128 end.... 0/2048
    merkelizing bn128 hash start.... 0/128
    merkelizing bn128 hash end.... 0/128
    merkelizing bn128 hash start.... 0/8
    merkelizing bn128 hash end.... 0/8
    merkelizing bn128 hash start.... 0/1
    merkelizing bn128 hash end.... 0/1
    linear hash bn128 start.... 0/128
    linear hash bn128 end.... 0/128
    merkelizing bn128 hash start.... 0/8
    merkelizing bn128 hash end.... 0/8
    merkelizing bn128 hash start.... 0/1
    merkelizing bn128 hash end.... 0/1
    linear hash bn128 start.... 0/16
    linear hash bn128 end.... 0/16
    merkelizing bn128 hash start.... 0/1
    merkelizing bn128 hash end.... 0/1
    Publics Hash: 0x702090191200537164411530605620165906781410959030051501669960618942365442542
    files Generated Correctly
    
  • 15)debug运行fibonacci C12 verify proof:运行main_verifier.js,输出为验证是否通过,输入有:

    • 15.i.1)fibonacci.c12.proof.json:STARK证明。
    • 15.i.2)fibonacci.c12.public.json:公开输入。
    • 15.i.3)fibonacci.c12.pil
    • 15.i.4)sm_fibonacci//fibonacci.c12.starkstruct.json
    • 15.i.5)fibonacci.c12.verkey.json
    /usr/local/bin/node --max-old-space-size=32000 src/main_verifier.js -p /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.pil -s /Users/lanyu/zyd/0xPolygonHermez/pil-stark/test/sm_fibonacci//fibonacci.c12.starkstruct.json -o /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.proof.json -b /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.public.json -v /Users/lanyu/zyd/0xPolygonHermez/pil-stark/tmp/fibonacci.c12.verkey.json
    Query:461815
    Query:444599
    Query:297818
    Query:456141
    Query:200968
    Query:347811
    Query:400070
    Query:512708
    Verification Ok!!
    

参考资料

[1] https://github.com/iden3/snarkjs
[2] Circom docs

附录:Polygon Hermez 2.0 zkEVM系列博客

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
An Epic Low Poly asset pack of characters, props, weapons and environment assets to create a Fantasy themed polygonal style game. Modular sections are easy to piece together in a variety of combinations. OVER 1,118 Detailed prefabs are included with this pack. Key Features - Fully Modular Dungeons! - Includes a MASSIVE demo scene - (Character poses indicative only) Assets Characters (x19) Big Demon, Dwarf Casual Female, Dwarf Casual Male, Dwarf King, Dwarf Miner, Dwarf Soldier Female, Dwarf Soldier Male, Dwarf Worker, Hero Female, Hero Male, Nomad Female 01, Nomad Male 01, Nomad Female 02, Nomad Male 02, Nomad Male 03, Demon Skeleton 01, Demon Skeleton 02, Demon Skeleton 03 and Undead Knight. Character Attachments (x69) Ears, Faceplates (x2), Feather, Hair (x14), Hats, Headwrap, Shoulder Armor (x7), Hoods, Horns, Masks (x4), Neckwraps (x2), Turban, Animal Skull, Crown, Undead Head, Undead Helmet, Undead Skull, Bandana, Beards (x10), GasBag, GasMask, Helmets (x8), Environment (x480) Bones, Bramble, Well, Crystals, Dust, Balustrade, Beams, Floors, Forge, Gate, Grate, Lava, Wheel, Obelisk, Doors, Fireplace, Tunnels, Windows, Giant Golem, Grass, Hell Chains, Floating Rocks, Grounds, Ring, Rocks, Spikes, Mountains, Plants, Cliffs, Rubble, Sand, Waterfall, Shrine, Skull, Spider Web, Statue, Trees etc Buildings (x62) Walls, Towers, Tiles, Stairs, Pillars, Bridges, Archs, Tents etc. Props (x373) Anvil, Banners (x11), Barrel, Big Horn, Caliper, Basket, Beads, Chest, FlagLine, Hammock, Hanging Bag, Lantern, Plank, Platform, Pot, Roll Weapons (x81) Axes (x13), Knifves(x5), Mace (x7), Pack Axe, Shields (x8), Spears (x8), Staff (x6), Swords (x27), Hammer (x6) Vehicles (x2) Sand Boats (x2) FX (x32) Sparkle, Candel Flame, Cart Rail, Embers (x2) Dust (x2), Fires (x5), Gold Sparkle, Floating Rocks, Lava Bubbles, Lava Rocks (x3), Lava Steam (x2), Orb, Sand Waterfalls (x3) Sparks (x2), Steam (x2), Sun Shafts etc Compatibility - Works in

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值