Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(ssa): Pass to preprocess functions #7072

Open
wants to merge 22 commits into
base: master
Choose a base branch
from
Open

Conversation

aakoshh
Copy link
Contributor

@aakoshh aakoshh commented Jan 15, 2025

Description

Problem*

Followup for #7001 (comment)

Summary*

Adds a Ssa::preprocess_fns pass that does a subset of SSA passes on functions in a bottom-up order, so that by the time they are inlined into other functions, they have a chance to be already simplified. The changes made are cumulative, ie. if A calls B, then B gets optimised first, and then A inlines the optimised B before it gets optimised itself.

To avoid going all the way to the top and optimising the functions near the entry point, the weight of the functions (derived from their instruction count) is accumulated to the callers, and the average of the accumulated weights serves as a cutoff for running the preprocessing.

Added a --skip-preprocess-fns CLI option to turn this pass off.

TODO:

  • Fix the inlining logic by separating expensive-or-recursive vs ACIR-to-Brillig related info (allows Brillig-to-Brillig calls to be inlined even if ACIR-to-Brillig marks them as Brillig entry points)
  • Fix defunctionalization to inherit the runtime onto the callee
  • Fix the removal of unreachable functions to remove never-called Brillig functions
  • Create issue for fixing the DIE for mutable references
  • Look at the SSA in Tom's comments and create issues as required

Additional Context

Idea

We noticed in #7001 (comment) that main gets bloated to 65K blocks after the unrolling pass, because everything it calls has already been inlined into it, and then we have to simplify down this large function, which came with a big memory footprint.

@TomAFrench suggested switching to a bottom-up scenario, where we optimise functions that get called by others before inlining them, and to start as follows:

We can validate this by hacking the inlining pass so that we fully inline into, unroll and mem2reg functions called serialize. Note I'm thinking having this as a separate pass and we'd run the full inlining pass afterwards rather than trying to fit everything inside of the inlining pass.

Testing

cargo run -p nargo_cli -- --program-dir ../aztec-packages/noir-projects/noir-protocol-circuits/crates/rollup-base-public compile  --silence-warnings --skip-underconstrained-check --skip-brillig-constraints-check --force --show-ssa-pass "Preprocessing"

Result

Unfortunately this hasn't significantly changed the number of blocks after unrolling in the main, at least not yet:

AFTER Unrolling: functions=33
    FUNCTION main: blocks=62495

The SSA of one of the fist serialize function in the linked comment changed as follows:

Before Pre-processing
acir(inline) fn serialize f33 {
  b0(v36: Field, v37: u32, v38: Field, v39: Field, v40: Field, v41: Field, v42: Field, v43: u32, v44: Field, v45: u32, v46: Field, v47: u32, v48: Field, v49: u32, v50: Field, v51: Field, v52: Field, v53: Field, v54: u64, v55: Field, v56: Field, v57: Field, v58: Field, v59: Field, v60: Field):
    v62, v63 = call f34() -> ([Field; 25], u32)
    v64 = allocate -> &mut [Field; 25]
    store v62 at v64
    v65 = allocate -> &mut u32
    store v63 at v65
    v67 = call f36(v36, v37) -> [Field; 2]
    call f35(v64, v65, v67)
    v70 = call f38(v38, v39, v40, v41) -> [Field; 4]
    call f37(v64, v65, v70)
    v73 = call f40(v42, v43, v44, v45, v46, v47, v48, v49) -> [Field; 8]
    call f39(v64, v65, v73)
    v76 = call f42(v50, v51, v52, v53, v54, v55, v56, v57, v58) -> [Field; 9]
    call f41(v64, v65, v76)
    call f43(v64, v65, v59)
    call f43(v64, v65, v60)
    v80 = load v64 -> [Field; 25]
    v81 = load v65 -> u32
    v83 = call f44(v80, v81) -> [Field; 25]
    return v83
}
After Pre-processing
acir(inline) fn serialize f33 {
  b0(v36: Field, v37: u32, v38: Field, v39: Field, v40: Field, v41: Field, v42: Field, v43: u32, v44: Field, v45: u32, v46: Field, v47: u32, v48: Field, v49: u32, v50: Field, v51: Field, v52: Field, v53: Field, v54: u64, v55: Field, v56: Field, v57: Field, v58: Field, v59: Field, v60: Field):
    v61 = cast v37 as Field
    v62 = cast v43 as Field
    v63 = cast v45 as Field
    v64 = cast v47 as Field
    v65 = cast v49 as Field
    v66 = cast v54 as Field
    v67 = make_array [v36, v61, v38, v39, v40, v41, v42, v62, v44, v63, v46, v64, v48, v65, v50, v51, v52, v53, v66, v55, v56, v57, v58, v59, v60] : [Field; 25]
    return v67
}

So this has been achieved 🎉 :

This whole stack of SSA will eventually become some casts and a single make_array instruction ...

Integration Test Failures

External repos and some integration tests are failing. The simplest example is perhaps this:

cargo run -q -p nargo_cli -- --program-dir . execute --force --silence-warnings
error: Failed constraint
  ┌─ /Users/aakoshh/Work/aztec/noir/test_programs/execution_success/traits_in_crates_1/src/main.nr:4:12

4 │     assert(V.Q == y);
  │            --------

  = Call stack:
    1. /Users/aakoshh/Work/aztec/noir/test_programs/execution_success/traits_in_crates_1/src/main.nr:4:12

Failed to solve program: 'Cannot satisfy constraint'

Looking at the SSA it seems completely wrong:

After Removing Paired rc_inc & rc_decs:
acir(inline) fn main f0 {
  b0(v0: Field, v1: Field):
    v2 = allocate -> &mut Field
    store v0 at v2
    call f1(v2)
    v4 = load v2 -> Field
    v5 = eq v4, v1
    constrain v4 == v1
    return
}
acir(inline) fn Add10 f1 {
  b0(v0: &mut Field):
    v1 = load v0 -> Field
    v2 = load v0 -> Field
    v4 = add v2, Field 10
    store v4 at v0
    return
}

After Pre-processing Functions:
acir(inline) fn main f0 {
  b0(v0: Field, v1: Field):
    v2 = allocate -> &mut Field
    store v0 at v2
    call f1(v2)
    v4 = load v2 -> Field
    v5 = eq v4, v1
    constrain v4 == v1
    return
}
acir(inline) fn Add10 f1 {
  b0(v0: &mut Field):
    return                              # Whole function body got eliminated!
}

This goes away if we remove the function.dead_instruction_elimination(true); call. It looks like it doesn't know that storing to the mutable v0 can be used outside.

Documentation*

Check one:

  • No documentation needed.
  • Documentation included in this PR.
  • [For Experimental Features] Documentation to be submitted in a separate PR.

PR Checklist*

  • I have tested the changes locally.
  • I have formatted the changes with Prettier and/or cargo fmt on default settings.

Copy link
Contributor

github-actions bot commented Jan 15, 2025

Compilation Memory Report

Program Peak Memory %
keccak256 77.62M 0%
workspace 123.58M 0%
regression_4709 424.16M 0%
ram_blowup_regression 1.48G 0%
rollup-root 601.87M 0%
rollup-merge 487.36M -2%
rollup-block-root-single-tx 7.53G -57%
rollup-block-root-empty 494.32M 1%
rollup-block-root 7.54G -57%
rollup-block-merge 601.87M 0%
rollup-base-public 2.38G 0%
rollup-base-private 1.14G 0%
private-kernel-tail 201.71M -3%
private-kernel-reset 584.66M 0%
private-kernel-inner 307.95M 4%

Copy link
Contributor

github-actions bot commented Jan 15, 2025

Execution Memory Report

Program Peak Memory %
keccak256 74.71M 0%
workspace 123.90M 0%
regression_4709 316.02M 0%
ram_blowup_regression 512.62M 0%
rollup-root 498.36M 0%
rollup-merge 473.05M 0%
rollup-block-root 1.23G 0%
rollup-block-merge 498.37M 0%
rollup-base-public 733.71M -1%
rollup-base-private 590.04M 0%
private-kernel-tail 180.89M 0%
private-kernel-reset 245.54M 0%
private-kernel-inner 208.94M 0%

Copy link
Contributor

github-actions bot commented Jan 15, 2025

Compilation Report

Program Compilation Time %
sha256_regression 1.010s -7%
regression_4709 0.813s -4%
ram_blowup_regression 18.200s 8%
rollup-root 3.510s 0%
rollup-merge 2.264s 7%
rollup-block-root-single-tx 98.600s -29%
rollup-block-root-empty 2.196s 5%
rollup-block-root 98.700s -30%
rollup-block-merge 3.508s -2%
rollup-base-public 28.600s 1%
rollup-base-private 10.560s -2%
private-kernel-tail 0.967s -6%
private-kernel-reset 6.244s -3%
private-kernel-inner 2.158s 10%

Copy link
Contributor

github-actions bot commented Jan 15, 2025

Execution Report

Program Execution Time %
sha256_regression 0.051s -4%
regression_4709 0.001s 0%
ram_blowup_regression 0.609s -2%
rollup-root 0.104s 0%
rollup-merge 0.006s 0%
rollup-block-root 36.900s 1%
rollup-block-merge 0.103s -1%
rollup-base-public 1.218s 2%
rollup-base-private 0.449s -1%
private-kernel-tail 0.018s -6%
private-kernel-reset 0.310s -1%
private-kernel-inner 0.067s 0%

@TomAFrench
Copy link
Member

TomAFrench commented Jan 15, 2025

Some observations based on the post-preprocessed SSA of rollup_base_public:

  • There's anarray_concat has ~2k duplicate array_gets all under the same predicate so we should be able to simplify that immediately.
  • We also have a lambda function (f210) receives non-reference arguments, does about 50 allocations and stores all of the arguments into them. It then immediately loads these again before calling another function.
  • we still have a lot of cases of functions which either:
    • immediately return
    • just forward its arguments onto another function and return the results (sometimes adding a constant argument or ignoring a return value)
    • do a single binary operation and return the result (e.g. check equality).

The last would benefit from a generalization of this PR but we can break out other PRs to tackle the other two cases.

@TomAFrench
Copy link
Member

TomAFrench commented Jan 15, 2025

Posting for SSA tests (obviously once cut down)

SSA
acir(inline) fn lambda f210 {
  b0(v36: Field, v37: u32, v38: Field, v39: Field, v40: Field, v41: Field, v42: Field, v43: u32, v44: Field, v45: u32, v46: Field, v47: u32, v48: Field, v49: u32, v50: Field, v51: Field, v52: Field, v53: Field, v54: u64, v55: Field, v56: Field, v57: Field, v58: Field, v59: Field, v60: Field, v61: Field, v62: Field, v63: u32, v64: u32, v65: u32, v66: u32, v67: Field, v68: Field, v69: Field, v70: Field, v71: Field, v72: Field, v73: Field, v74: Field, v75: Field, v76: Field, v77: u64, v78: Field, v79: Field, v80: Field, v81: Field, v82: Field, v83: Field, v84: u32, v85: Field):
    v86 = allocate -> &mut Field
    store v36 at v86
    v87 = allocate -> &mut u32
    store v37 at v87
    v88 = allocate -> &mut Field
    store v38 at v88
    v89 = allocate -> &mut Field
    store v39 at v89
    v90 = allocate -> &mut Field
    store v40 at v90
    v91 = allocate -> &mut Field
    store v41 at v91
    v92 = allocate -> &mut Field
    store v42 at v92
    v93 = allocate -> &mut u32
    store v43 at v93
    v94 = allocate -> &mut Field
    store v44 at v94
    v95 = allocate -> &mut u32
    store v45 at v95
    v96 = allocate -> &mut Field
    store v46 at v96
    v97 = allocate -> &mut u32
    store v47 at v97
    v98 = allocate -> &mut Field
    store v48 at v98
    v99 = allocate -> &mut u32
    store v49 at v99
    v100 = allocate -> &mut Field
    store v50 at v100
    v101 = allocate -> &mut Field
    store v51 at v101
    v102 = allocate -> &mut Field
    store v52 at v102
    v103 = allocate -> &mut Field
    store v53 at v103
    v104 = allocate -> &mut u64
    store v54 at v104
    v105 = allocate -> &mut Field
    store v55 at v105
    v106 = allocate -> &mut Field
    store v56 at v106
    v107 = allocate -> &mut Field
    store v57 at v107
    v108 = allocate -> &mut Field
    store v58 at v108
    v109 = allocate -> &mut Field
    store v59 at v109
    v110 = allocate -> &mut Field
    store v60 at v110
    v111 = allocate -> &mut Field
    store v61 at v111
    v112 = allocate -> &mut Field
    store v62 at v112
    v113 = allocate -> &mut u32
    store v63 at v113
    v114 = allocate -> &mut u32
    store v64 at v114
    v115 = allocate -> &mut u32
    store v65 at v115
    v116 = allocate -> &mut u32
    store v66 at v116
    v117 = allocate -> &mut Field
    store v67 at v117
    v118 = allocate -> &mut Field
    store v68 at v118
    v119 = allocate -> &mut Field
    store v69 at v119
    v120 = allocate -> &mut Field
    store v70 at v120
    v121 = allocate -> &mut Field
    store v71 at v121
    v122 = allocate -> &mut Field
    store v72 at v122
    v123 = allocate -> &mut Field
    store v73 at v123
    v124 = allocate -> &mut Field
    store v74 at v124
    v125 = allocate -> &mut Field
    store v75 at v125
    v126 = allocate -> &mut Field
    store v76 at v126
    v127 = allocate -> &mut u64
    store v77 at v127
    v128 = allocate -> &mut Field
    store v78 at v128
    v129 = allocate -> &mut Field
    store v79 at v129
    v130 = allocate -> &mut Field
    store v80 at v130
    v131 = allocate -> &mut Field
    store v81 at v131
    v132 = load v86 -> Field
    v133 = load v87 -> u32
    v134 = load v88 -> Field
    v135 = load v89 -> Field
    v136 = load v90 -> Field
    v137 = load v91 -> Field
    v138 = load v92 -> Field
    v139 = load v93 -> u32
    v140 = load v94 -> Field
    v141 = load v95 -> u32
    v142 = load v96 -> Field
    v143 = load v97 -> u32
    v144 = load v98 -> Field
    v145 = load v99 -> u32
    v146 = load v100 -> Field
    v147 = load v101 -> Field
    v148 = load v102 -> Field
    v149 = load v103 -> Field
    v150 = load v104 -> u64
    v151 = load v105 -> Field
    v152 = load v106 -> Field
    v153 = load v107 -> Field
    v154 = load v108 -> Field
    v155 = load v109 -> Field
    v156 = load v110 -> Field
    v157 = load v111 -> Field
    v158 = load v112 -> Field
    v159 = load v113 -> u32
    v160 = load v114 -> u32
    v161 = load v115 -> u32
    v162 = load v116 -> u32
    v163 = load v117 -> Field
    v164 = load v118 -> Field
    v165 = load v119 -> Field
    v166 = load v120 -> Field
    v167 = load v121 -> Field
    v168 = load v122 -> Field
    v169 = load v123 -> Field
    v170 = load v124 -> Field
    v171 = load v125 -> Field
    v172 = load v126 -> Field
    v173 = load v127 -> u64
    v174 = load v128 -> Field
    v175 = load v129 -> Field
    v176 = load v130 -> Field
    v177 = load v131 -> Field
    v178 = load v86 -> Field
    v179 = load v87 -> u32
    v180 = load v88 -> Field
    v181 = load v89 -> Field
    v182 = load v90 -> Field
    v183 = load v91 -> Field
    v184 = load v92 -> Field
    v185 = load v93 -> u32
    v186 = load v94 -> Field
    v187 = load v95 -> u32
    v188 = load v96 -> Field
    v189 = load v97 -> u32
    v190 = load v98 -> Field
    v191 = load v99 -> u32
    v192 = load v100 -> Field
    v193 = load v101 -> Field
    v194 = load v102 -> Field
    v195 = load v103 -> Field
    v196 = load v104 -> u64
    v197 = load v105 -> Field
    v198 = load v106 -> Field
    v199 = load v107 -> Field
    v200 = load v108 -> Field
    v201 = load v109 -> Field
    v202 = load v110 -> Field
    v203 = load v111 -> Field
    v204 = load v112 -> Field
    v205 = load v113 -> u32
    v206 = load v114 -> u32
    v207 = load v115 -> u32
    v208 = load v116 -> u32
    v209 = load v117 -> Field
    v210 = load v118 -> Field
    v211 = load v119 -> Field
    v212 = load v120 -> Field
    v213 = load v121 -> Field
    v214 = load v122 -> Field
    v215 = load v123 -> Field
    v216 = load v124 -> Field
    v217 = load v125 -> Field
    v218 = load v126 -> Field
    v219 = load v127 -> u64
    v220 = load v128 -> Field
    v221 = load v129 -> Field
    v222 = load v130 -> Field
    v223 = load v131 -> Field
    v225 = call f233(v82, v83, v84, v85, v158, v203) -> Field
    return v225
}
acir(inline) fn array_concat f222 {
  b0(v36: [Field; 1], v37: [Field; 1847]):
    v40 = array_get v36, index u32 0 -> Field
    v41 = array_get v36, index u32 0 -> Field
    v42 = array_get v36, index u32 0 -> Field
    v43 = array_get v36, index u32 0 -> Field
    v44 = array_get v36, index u32 0 -> Field
    v45 = array_get v36, index u32 0 -> Field
    v46 = array_get v36, index u32 0 -> Field
    v47 = array_get v36, index u32 0 -> Field
    v48 = array_get v36, index u32 0 -> Field
    v49 = array_get v36, index u32 0 -> Field
    v50 = array_get v36, index u32 0 -> Field
    v51 = array_get v36, index u32 0 -> Field
    v52 = array_get v36, index u32 0 -> Field
    v53 = array_get v36, index u32 0 -> Field
    v54 = array_get v36, index u32 0 -> Field
    v55 = array_get v36, index u32 0 -> Field
    v56 = array_get v36, index u32 0 -> Field
    v57 = array_get v36, index u32 0 -> Field
    v58 = array_get v36, index u32 0 -> Field
    v59 = array_get v36, index u32 0 -> Field
    v60 = array_get v36, index u32 0 -> Field
    v61 = array_get v36, index u32 0 -> Field
    v62 = array_get v36, index u32 0 -> Field
    v63 = array_get v36, index u32 0 -> Field
    v64 = array_get v36, index u32 0 -> Field
    v65 = array_get v36, index u32 0 -> Field
    v66 = array_get v36, index u32 0 -> Field
    v67 = array_get v36, index u32 0 -> Field
    v68 = array_get v36, index u32 0 -> Field
    v69 = array_get v36, index u32 0 -> Field
    v70 = array_get v36, index u32 0 -> Field
    v71 = array_get v36, index u32 0 -> Field
    v72 = array_get v36, index u32 0 -> Field
    v73 = array_get v36, index u32 0 -> Field
    v74 = array_get v36, index u32 0 -> Field
    v75 = array_get v36, index u32 0 -> Field
    v76 = array_get v36, index u32 0 -> Field
    v77 = array_get v36, index u32 0 -> Field
    v78 = array_get v36, index u32 0 -> Field
    v79 = array_get v36, index u32 0 -> Field
    v80 = array_get v36, index u32 0 -> Field
    v81 = array_get v36, index u32 0 -> Field
    v82 = array_get v36, index u32 0 -> Field
    v83 = array_get v36, index u32 0 -> Field
    v84 = array_get v36, index u32 0 -> Field
    v85 = array_get v36, index u32 0 -> Field
    v86 = array_get v36, index u32 0 -> Field
    v87 = array_get v36, index u32 0 -> Field
    v88 = array_get v36, index u32 0 -> Field
    v89 = array_get v36, index u32 0 -> Field
    v90 = array_get v36, index u32 0 -> Field
    v91 = array_get v36, index u32 0 -> Field
    v92 = array_get v36, index u32 0 -> Field
    v93 = array_get v36, index u32 0 -> Field
    v94 = array_get v36, index u32 0 -> Field
    v95 = array_get v36, index u32 0 -> Field
    v96 = array_get v36, index u32 0 -> Field
    v97 = array_get v36, index u32 0 -> Field
    v98 = array_get v36, index u32 0 -> Field
    v99 = array_get v36, index u32 0 -> Field
    v100 = array_get v36, index u32 0 -> Field
    v101 = array_get v36, index u32 0 -> Field
    v102 = array_get v36, index u32 0 -> Field
    v103 = array_get v36, index u32 0 -> Field
    v104 = array_get v36, index u32 0 -> Field
    v105 = array_get v36, index u32 0 -> Field
    v106 = array_get v36, index u32 0 -> Field
    v107 = array_get v36, index u32 0 -> Field
    v108 = array_get v36, index u32 0 -> Field
    v109 = array_get v36, index u32 0 -> Field
    v110 = array_get v36, index u32 0 -> Field
    v111 = array_get v36, index u32 0 -> Field
    v112 = array_get v36, index u32 0 -> Field
    v113 = array_get v36, index u32 0 -> Field
    v114 = array_get v36, index u32 0 -> Field
    v115 = array_get v36, index u32 0 -> Field
    v116 = array_get v36, index u32 0 -> Field
    v117 = array_get v36, index u32 0 -> Field
    v118 = array_get v36, index u32 0 -> Field
    v119 = array_get v36, index u32 0 -> Field
    v120 = array_get v36, index u32 0 -> Field
    v121 = array_get v36, index u32 0 -> Field
    v122 = array_get v36, index u32 0 -> Field
    v123 = array_get v36, index u32 0 -> Field
    v124 = array_get v36, index u32 0 -> Field
    v125 = array_get v36, index u32 0 -> Field
    v126 = array_get v36, index u32 0 -> Field
    v127 = array_get v36, index u32 0 -> Field
    v128 = array_get v36, index u32 0 -> Field
    v129 = array_get v36, index u32 0 -> Field
    v130 = array_get v36, index u32 0 -> Field
    v131 = array_get v36, index u32 0 -> Field
    v132 = array_get v36, index u32 0 -> Field
    v133 = array_get v36, index u32 0 -> Field
    v134 = array_get v36, index u32 0 -> Field
    v135 = array_get v36, index u32 0 -> Field
    v136 = array_get v36, index u32 0 -> Field
    v137 = array_get v36, index u32 0 -> Field
    v138 = array_get v36, index u32 0 -> Field
    v139 = array_get v36, index u32 0 -> Field
    v140 = array_get v36, index u32 0 -> Field
    v141 = array_get v36, index u32 0 -> Field
    v142 = array_get v36, index u32 0 -> Field
    v143 = array_get v36, index u32 0 -> Field
    v144 = array_get v36, index u32 0 -> Field
    v145 = array_get v36, index u32 0 -> Field
    v146 = array_get v36, index u32 0 -> Field
    v147 = array_get v36, index u32 0 -> Field
    v148 = array_get v36, index u32 0 -> Field
    v149 = array_get v36, index u32 0 -> Field
    v150 = array_get v36, index u32 0 -> Field
    v151 = array_get v36, index u32 0 -> Field
    v152 = array_get v36, index u32 0 -> Field
    v153 = array_get v36, index u32 0 -> Field
    v154 = array_get v36, index u32 0 -> Field
    v155 = array_get v36, index u32 0 -> Field
    v156 = array_get v36, index u32 0 -> Field
    v157 = array_get v36, index u32 0 -> Field
    v158 = array_get v36, index u32 0 -> Field
    v159 = array_get v36, index u32 0 -> Field
    v160 = array_get v36, index u32 0 -> Field
    v161 = array_get v36, index u32 0 -> Field
    v162 = array_get v36, index u32 0 -> Field
    v163 = array_get v36, index u32 0 -> Field
    v164 = array_get v36, index u32 0 -> Field
    v165 = array_get v36, index u32 0 -> Field
    v166 = array_get v36, index u32 0 -> Field
    v167 = array_get v36, index u32 0 -> Field
    v168 = array_get v36, index u32 0 -> Field
    v169 = array_get v36, index u32 0 -> Field
    v170 = array_get v36, index u32 0 -> Field
    v171 = array_get v36, index u32 0 -> Field
    v172 = array_get v36, index u32 0 -> Field
    v173 = array_get v36, index u32 0 -> Field
    v174 = array_get v36, index u32 0 -> Field
    v175 = array_get v36, index u32 0 -> Field
    v176 = array_get v36, index u32 0 -> Field
    v177 = array_get v36, index u32 0 -> Field
    v178 = array_get v36, index u32 0 -> Field
    v179 = array_get v36, index u32 0 -> Field
    v180 = array_get v36, index u32 0 -> Field
    v181 = array_get v36, index u32 0 -> Field
    v182 = array_get v36, index u32 0 -> Field
    v183 = array_get v36, index u32 0 -> Field
    v184 = array_get v36, index u32 0 -> Field
    v185 = array_get v36, index u32 0 -> Field
    v186 = array_get v36, index u32 0 -> Field
    v187 = array_get v36, index u32 0 -> Field
    v188 = array_get v36, index u32 0 -> Field
    v189 = array_get v36, index u32 0 -> Field
    v190 = array_get v36, index u32 0 -> Field
    v191 = array_get v36, index u32 0 -> Field
    v192 = array_get v36, index u32 0 -> Field
    v193 = array_get v36, index u32 0 -> Field
    v194 = array_get v36, index u32 0 -> Field
    v195 = array_get v36, index u32 0 -> Field
    v196 = array_get v36, index u32 0 -> Field
    v197 = array_get v36, index u32 0 -> Field
    v198 = array_get v36, index u32 0 -> Field
    v199 = array_get v36, index u32 0 -> Field
    v200 = array_get v36, index u32 0 -> Field
    v201 = array_get v36, index u32 0 -> Field
    v202 = array_get v36, index u32 0 -> Field
    v203 = array_get v36, index u32 0 -> Field
    v204 = array_get v36, index u32 0 -> Field
    v205 = array_get v36, index u32 0 -> Field
    v206 = array_get v36, index u32 0 -> Field
    v207 = array_get v36, index u32 0 -> Field
    v208 = array_get v36, index u32 0 -> Field
    v209 = array_get v36, index u32 0 -> Field
    v210 = array_get v36, index u32 0 -> Field
    v211 = array_get v36, index u32 0 -> Field
    v212 = array_get v36, index u32 0 -> Field
    v213 = array_get v36, index u32 0 -> Field
    v214 = array_get v36, index u32 0 -> Field
    v215 = array_get v36, index u32 0 -> Field
    v216 = array_get v36, index u32 0 -> Field
    v217 = array_get v36, index u32 0 -> Field
    v218 = array_get v36, index u32 0 -> Field
    v219 = array_get v36, index u32 0 -> Field
    v220 = array_get v36, index u32 0 -> Field
    v221 = array_get v36, index u32 0 -> Field
    v222 = array_get v36, index u32 0 -> Field
    v223 = array_get v36, index u32 0 -> Field
    v224 = array_get v36, index u32 0 -> Field
    v225 = array_get v36, index u32 0 -> Field
    v226 = array_get v36, index u32 0 -> Field
    v227 = array_get v36, index u32 0 -> Field
    v228 = array_get v36, index u32 0 -> Field
    v229 = array_get v36, index u32 0 -> Field
    v230 = array_get v36, index u32 0 -> Field
    v231 = array_get v36, index u32 0 -> Field
    v232 = array_get v36, index u32 0 -> Field
    v233 = array_get v36, index u32 0 -> Field
    v234 = array_get v36, index u32 0 -> Field
    v235 = array_get v36, index u32 0 -> Field
    v236 = array_get v36, index u32 0 -> Field
    v237 = array_get v36, index u32 0 -> Field
    v238 = array_get v36, index u32 0 -> Field
    v239 = array_get v36, index u32 0 -> Field
    v240 = array_get v36, index u32 0 -> Field
    v241 = array_get v36, index u32 0 -> Field
    v242 = array_get v36, index u32 0 -> Field
    v243 = array_get v36, index u32 0 -> Field
    v244 = array_get v36, index u32 0 -> Field
    v245 = array_get v36, index u32 0 -> Field
    v246 = array_get v36, index u32 0 -> Field
    v247 = array_get v36, index u32 0 -> Field
    v248 = array_get v36, index u32 0 -> Field
    v249 = array_get v36, index u32 0 -> Field
    v250 = array_get v36, index u32 0 -> Field
    v251 = array_get v36, index u32 0 -> Field
    v252 = array_get v36, index u32 0 -> Field
    v253 = array_get v36, index u32 0 -> Field
    v254 = array_get v36, index u32 0 -> Field
    v255 = array_get v36, index u32 0 -> Field
    v256 = array_get v36, index u32 0 -> Field
    v257 = array_get v36, index u32 0 -> Field
    v258 = array_get v36, index u32 0 -> Field
    v259 = array_get v36, index u32 0 -> Field
    v260 = array_get v36, index u32 0 -> Field
    v261 = array_get v36, index u32 0 -> Field
    v262 = array_get v36, index u32 0 -> Field
    v263 = array_get v36, index u32 0 -> Field
    v264 = array_get v36, index u32 0 -> Field
    v265 = array_get v36, index u32 0 -> Field
    v266 = array_get v36, index u32 0 -> Field
    v267 = array_get v36, index u32 0 -> Field
    v268 = array_get v36, index u32 0 -> Field
    v269 = array_get v36, index u32 0 -> Field
    v270 = array_get v36, index u32 0 -> Field
    v271 = array_get v36, index u32 0 -> Field
    v272 = array_get v36, index u32 0 -> Field
    v273 = array_get v36, index u32 0 -> Field
    v274 = array_get v36, index u32 0 -> Field
    v275 = array_get v36, index u32 0 -> Field
    v276 = array_get v36, index u32 0 -> Field
    v277 = array_get v36, index u32 0 -> Field
    v278 = array_get v36, index u32 0 -> Field
    v279 = array_get v36, index u32 0 -> Field
    v280 = array_get v36, index u32 0 -> Field
    v281 = array_get v36, index u32 0 -> Field
    v282 = array_get v36, index u32 0 -> Field
    v283 = array_get v36, index u32 0 -> Field
    v284 = array_get v36, index u32 0 -> Field
    v285 = array_get v36, index u32 0 -> Field
    v286 = array_get v36, index u32 0 -> Field
    v287 = array_get v36, index u32 0 -> Field
    v288 = array_get v36, index u32 0 -> Field
    v289 = array_get v36, index u32 0 -> Field
    v290 = array_get v36, index u32 0 -> Field
    v291 = array_get v36, index u32 0 -> Field
    v292 = array_get v36, index u32 0 -> Field
    v293 = array_get v36, index u32 0 -> Field
    v294 = array_get v36, index u32 0 -> Field
    v295 = array_get v36, index u32 0 -> Field
    v296 = array_get v36, index u32 0 -> Field
    v297 = array_get v36, index u32 0 -> Field
    v298 = array_get v36, index u32 0 -> Field
    v299 = array_get v36, index u32 0 -> Field
    v300 = array_get v36, index u32 0 -> Field
    v301 = array_get v36, index u32 0 -> Field
    v302 = array_get v36, index u32 0 -> Field
    v303 = array_get v36, index u32 0 -> Field
    v304 = array_get v36, index u32 0 -> Field
    v305 = array_get v36, index u32 0 -> Field
    v306 = array_get v36, index u32 0 -> Field
    v307 = array_get v36, index u32 0 -> Field
    v308 = array_get v36, index u32 0 -> Field
    v309 = array_get v36, index u32 0 -> Field
    v310 = array_get v36, index u32 0 -> Field
    v311 = array_get v36, index u32 0 -> Field
    v312 = array_get v36, index u32 0 -> Field
    v313 = array_get v36, index u32 0 -> Field
    v314 = array_get v36, index u32 0 -> Field
    v315 = array_get v36, index u32 0 -> Field
    v316 = array_get v36, index u32 0 -> Field
    v317 = array_get v36, index u32 0 -> Field
    v318 = array_get v36, index u32 0 -> Field
    v319 = array_get v36, index u32 0 -> Field
    v320 = array_get v36, index u32 0 -> Field
    v321 = array_get v36, index u32 0 -> Field
    v322 = array_get v36, index u32 0 -> Field
    v323 = array_get v36, index u32 0 -> Field
    v324 = array_get v36, index u32 0 -> Field
    v325 = array_get v36, index u32 0 -> Field
    v326 = array_get v36, index u32 0 -> Field
    v327 = array_get v36, index u32 0 -> Field
    v328 = array_get v36, index u32 0 -> Field
    v329 = array_get v36, index u32 0 -> Field
    v330 = array_get v36, index u32 0 -> Field
    v331 = array_get v36, index u32 0 -> Field
    v332 = array_get v36, index u32 0 -> Field
    v333 = array_get v36, index u32 0 -> Field
    v334 = array_get v36, index u32 0 -> Field
    v335 = array_get v36, index u32 0 -> Field
    v336 = array_get v36, index u32 0 -> Field
    v337 = array_get v36, index u32 0 -> Field
    v338 = array_get v36, index u32 0 -> Field
    v339 = array_get v36, index u32 0 -> Field
    v340 = array_get v36, index u32 0 -> Field
    v341 = array_get v36, index u32 0 -> Field
    v342 = array_get v36, index u32 0 -> Field
    v343 = array_get v36, index u32 0 -> Field
    v344 = array_get v36, index u32 0 -> Field
    v345 = array_get v36, index u32 0 -> Field
    v346 = array_get v36, index u32 0 -> Field
    v347 = array_get v36, index u32 0 -> Field
    v348 = array_get v36, index u32 0 -> Field
    v349 = array_get v36, index u32 0 -> Field
    v350 = array_get v36, index u32 0 -> Field
    v351 = array_get v36, index u32 0 -> Field
    v352 = array_get v36, index u32 0 -> Field
    v353 = array_get v36, index u32 0 -> Field
    v354 = array_get v36, index u32 0 -> Field
    v355 = array_get v36, index u32 0 -> Field
    v356 = array_get v36, index u32 0 -> Field
    v357 = array_get v36, index u32 0 -> Field
    v358 = array_get v36, index u32 0 -> Field
    v359 = array_get v36, index u32 0 -> Field
    v360 = array_get v36, index u32 0 -> Field
    v361 = array_get v36, index u32 0 -> Field
    v362 = array_get v36, index u32 0 -> Field
    v363 = array_get v36, index u32 0 -> Field
    v364 = array_get v36, index u32 0 -> Field
    v365 = array_get v36, index u32 0 -> Field
    v366 = array_get v36, index u32 0 -> Field
    v367 = array_get v36, index u32 0 -> Field
    v368 = array_get v36, index u32 0 -> Field
    v369 = array_get v36, index u32 0 -> Field
    v370 = array_get v36, index u32 0 -> Field
    v371 = array_get v36, index u32 0 -> Field
    v372 = array_get v36, index u32 0 -> Field
    v373 = array_get v36, index u32 0 -> Field
    v374 = array_get v36, index u32 0 -> Field
    v375 = array_get v36, index u32 0 -> Field
    v376 = array_get v36, index u32 0 -> Field
    v377 = array_get v36, index u32 0 -> Field
    v378 = array_get v36, index u32 0 -> Field
    v379 = array_get v36, index u32 0 -> Field
    v380 = array_get v36, index u32 0 -> Field
    v381 = array_get v36, index u32 0 -> Field
    v382 = array_get v36, index u32 0 -> Field
    v383 = array_get v36, index u32 0 -> Field
    v384 = array_get v36, index u32 0 -> Field
    v385 = array_get v36, index u32 0 -> Field
    v386 = array_get v36, index u32 0 -> Field
    v387 = array_get v36, index u32 0 -> Field
    v388 = array_get v36, index u32 0 -> Field
    v389 = array_get v36, index u32 0 -> Field
    v390 = array_get v36, index u32 0 -> Field
    v391 = array_get v36, index u32 0 -> Field
    v392 = array_get v36, index u32 0 -> Field
    v393 = array_get v36, index u32 0 -> Field
    v394 = array_get v36, index u32 0 -> Field
    v395 = array_get v36, index u32 0 -> Field
    v396 = array_get v36, index u32 0 -> Field
    v397 = array_get v36, index u32 0 -> Field
    v398 = array_get v36, index u32 0 -> Field
    v399 = array_get v36, index u32 0 -> Field
    v400 = array_get v36, index u32 0 -> Field
    v401 = array_get v36, index u32 0 -> Field
    v402 = array_get v36, index u32 0 -> Field
    v403 = array_get v36, index u32 0 -> Field
    v404 = array_get v36, index u32 0 -> Field
    v405 = array_get v36, index u32 0 -> Field
    v406 = array_get v36, index u32 0 -> Field
    v407 = array_get v36, index u32 0 -> Field
    v408 = array_get v36, index u32 0 -> Field
    v409 = array_get v36, index u32 0 -> Field
    v410 = array_get v36, index u32 0 -> Field
    v411 = array_get v36, index u32 0 -> Field
    v412 = array_get v36, index u32 0 -> Field
    v413 = array_get v36, index u32 0 -> Field
    v414 = array_get v36, index u32 0 -> Field
    v415 = array_get v36, index u32 0 -> Field
    v416 = array_get v36, index u32 0 -> Field
    v417 = array_get v36, index u32 0 -> Field
    v418 = array_get v36, index u32 0 -> Field
    v419 = array_get v36, index u32 0 -> Field
    v420 = array_get v36, index u32 0 -> Field
    v421 = array_get v36, index u32 0 -> Field
    v422 = array_get v36, index u32 0 -> Field
    v423 = array_get v36, index u32 0 -> Field
    v424 = array_get v36, index u32 0 -> Field
    v425 = array_get v36, index u32 0 -> Field
    v426 = array_get v36, index u32 0 -> Field
    v427 = array_get v36, index u32 0 -> Field
    v428 = array_get v36, index u32 0 -> Field
    v429 = array_get v36, index u32 0 -> Field
    v430 = array_get v36, index u32 0 -> Field
    v431 = array_get v36, index u32 0 -> Field
    v432 = array_get v36, index u32 0 -> Field
    v433 = array_get v36, index u32 0 -> Field
    v434 = array_get v36, index u32 0 -> Field
    v435 = array_get v36, index u32 0 -> Field
    v436 = array_get v36, index u32 0 -> Field
    v437 = array_get v36, index u32 0 -> Field
    v438 = array_get v36, index u32 0 -> Field
    v439 = array_get v36, index u32 0 -> Field
    v440 = array_get v36, index u32 0 -> Field
    v441 = array_get v36, index u32 0 -> Field
    v442 = array_get v36, index u32 0 -> Field
    v443 = array_get v36, index u32 0 -> Field
    v444 = array_get v36, index u32 0 -> Field
    v445 = array_get v36, index u32 0 -> Field
    v446 = array_get v36, index u32 0 -> Field
    v447 = array_get v36, index u32 0 -> Field
    v448 = array_get v36, index u32 0 -> Field
    v449 = array_get v36, index u32 0 -> Field
    v450 = array_get v36, index u32 0 -> Field
    v451 = array_get v36, index u32 0 -> Field
    v452 = array_get v36, index u32 0 -> Field
    v453 = array_get v36, index u32 0 -> Field
    v454 = array_get v36, index u32 0 -> Field
    v455 = array_get v36, index u32 0 -> Field
    v456 = array_get v36, index u32 0 -> Field
    v457 = array_get v36, index u32 0 -> Field
    v458 = array_get v36, index u32 0 -> Field
    v459 = array_get v36, index u32 0 -> Field
    v460 = array_get v36, index u32 0 -> Field
    v461 = array_get v36, index u32 0 -> Field
    v462 = array_get v36, index u32 0 -> Field
    v463 = array_get v36, index u32 0 -> Field
    v464 = array_get v36, index u32 0 -> Field
    v465 = array_get v36, index u32 0 -> Field
    v466 = array_get v36, index u32 0 -> Field
    v467 = array_get v36, index u32 0 -> Field
    v468 = array_get v36, index u32 0 -> Field
    v469 = array_get v36, index u32 0 -> Field
    v470 = array_get v36, index u32 0 -> Field
    v471 = array_get v36, index u32 0 -> Field
    v472 = array_get v36, index u32 0 -> Field
    v473 = array_get v36, index u32 0 -> Field
    v474 = array_get v36, index u32 0 -> Field
    v475 = array_get v36, index u32 0 -> Field
    v476 = array_get v36, index u32 0 -> Field
    v477 = array_get v36, index u32 0 -> Field
    v478 = array_get v36, index u32 0 -> Field
    v479 = array_get v36, index u32 0 -> Field
    v480 = array_get v36, index u32 0 -> Field
    v481 = array_get v36, index u32 0 -> Field
    v482 = array_get v36, index u32 0 -> Field
    v483 = array_get v36, index u32 0 -> Field
    v484 = array_get v36, index u32 0 -> Field
    v485 = array_get v36, index u32 0 -> Field
    v486 = array_get v36, index u32 0 -> Field
    v487 = array_get v36, index u32 0 -> Field
    v488 = array_get v36, index u32 0 -> Field
    v489 = array_get v36, index u32 0 -> Field
    v490 = array_get v36, index u32 0 -> Field
    v491 = array_get v36, index u32 0 -> Field
    v492 = array_get v36, index u32 0 -> Field
    v493 = array_get v36, index u32 0 -> Field
    v494 = array_get v36, index u32 0 -> Field
    v495 = array_get v36, index u32 0 -> Field
    v496 = array_get v36, index u32 0 -> Field
    v497 = array_get v36, index u32 0 -> Field
    v498 = array_get v36, index u32 0 -> Field
    v499 = array_get v36, index u32 0 -> Field
    v500 = array_get v36, index u32 0 -> Field
    v501 = array_get v36, index u32 0 -> Field
    v502 = array_get v36, index u32 0 -> Field
    v503 = array_get v36, index u32 0 -> Field
    v504 = array_get v36, index u32 0 -> Field
    v505 = array_get v36, index u32 0 -> Field
    v506 = array_get v36, index u32 0 -> Field
    v507 = array_get v36, index u32 0 -> Field
    v508 = array_get v36, index u32 0 -> Field
    v509 = array_get v36, index u32 0 -> Field
    v510 = array_get v36, index u32 0 -> Field
    v511 = array_get v36, index u32 0 -> Field
    v512 = array_get v36, index u32 0 -> Field
    v513 = array_get v36, index u32 0 -> Field
    v514 = array_get v36, index u32 0 -> Field
    v515 = array_get v36, index u32 0 -> Field
    v516 = array_get v36, index u32 0 -> Field
    v517 = array_get v36, index u32 0 -> Field
    v518 = array_get v36, index u32 0 -> Field
    v519 = array_get v36, index u32 0 -> Field
    v520 = array_get v36, index u32 0 -> Field
    v521 = array_get v36, index u32 0 -> Field
    v522 = array_get v36, index u32 0 -> Field
    v523 = array_get v36, index u32 0 -> Field
    v524 = array_get v36, index u32 0 -> Field
    v525 = array_get v36, index u32 0 -> Field
    v526 = array_get v36, index u32 0 -> Field
    v527 = array_get v36, index u32 0 -> Field
    v528 = array_get v36, index u32 0 -> Field
    v529 = array_get v36, index u32 0 -> Field
    v530 = array_get v36, index u32 0 -> Field
    v531 = array_get v36, index u32 0 -> Field
    v532 = array_get v36, index u32 0 -> Field
    v533 = array_get v36, index u32 0 -> Field
    v534 = array_get v36, index u32 0 -> Field
    v535 = array_get v36, index u32 0 -> Field
    v536 = array_get v36, index u32 0 -> Field
    v537 = array_get v36, index u32 0 -> Field
    v538 = array_get v36, index u32 0 -> Field
    v539 = array_get v36, index u32 0 -> Field
    v540 = array_get v36, index u32 0 -> Field
    v541 = array_get v36, index u32 0 -> Field
    v542 = array_get v36, index u32 0 -> Field
    v543 = array_get v36, index u32 0 -> Field
    v544 = array_get v36, index u32 0 -> Field
    v545 = array_get v36, index u32 0 -> Field
    v546 = array_get v36, index u32 0 -> Field
    v547 = array_get v36, index u32 0 -> Field
    v548 = array_get v36, index u32 0 -> Field
    v549 = array_get v36, index u32 0 -> Field
    v550 = array_get v36, index u32 0 -> Field
    v551 = array_get v36, index u32 0 -> Field
    v552 = array_get v36, index u32 0 -> Field
    v553 = array_get v36, index u32 0 -> Field
    v554 = array_get v36, index u32 0 -> Field
    v555 = array_get v36, index u32 0 -> Field
    v556 = array_get v36, index u32 0 -> Field
    v557 = array_get v36, index u32 0 -> Field
    v558 = array_get v36, index u32 0 -> Field
    v559 = array_get v36, index u32 0 -> Field
    v560 = array_get v36, index u32 0 -> Field
    v561 = array_get v36, index u32 0 -> Field
    v562 = array_get v36, index u32 0 -> Field
    v563 = array_get v36, index u32 0 -> Field
    v564 = array_get v36, index u32 0 -> Field
    v565 = array_get v36, index u32 0 -> Field
    v566 = array_get v36, index u32 0 -> Field
    v567 = array_get v36, index u32 0 -> Field
    v568 = array_get v36, index u32 0 -> Field
    v569 = array_get v36, index u32 0 -> Field
    v570 = array_get v36, index u32 0 -> Field
    v571 = array_get v36, index u32 0 -> Field
    v572 = array_get v36, index u32 0 -> Field
    v573 = array_get v36, index u32 0 -> Field
    v574 = array_get v36, index u32 0 -> Field
    v575 = array_get v36, index u32 0 -> Field
    v576 = array_get v36, index u32 0 -> Field
    v577 = array_get v36, index u32 0 -> Field
    v578 = array_get v36, index u32 0 -> Field
    v579 = array_get v36, index u32 0 -> Field
    v580 = array_get v36, index u32 0 -> Field
    v581 = array_get v36, index u32 0 -> Field
    v582 = array_get v36, index u32 0 -> Field
    v583 = array_get v36, index u32 0 -> Field
    v584 = array_get v36, index u32 0 -> Field
    v585 = array_get v36, index u32 0 -> Field
    v586 = array_get v36, index u32 0 -> Field
    v587 = array_get v36, index u32 0 -> Field
    v588 = array_get v36, index u32 0 -> Field
    v589 = array_get v36, index u32 0 -> Field
    v590 = array_get v36, index u32 0 -> Field
    v591 = array_get v36, index u32 0 -> Field
    v592 = array_get v36, index u32 0 -> Field
    v593 = array_get v36, index u32 0 -> Field
    v594 = array_get v36, index u32 0 -> Field
    v595 = array_get v36, index u32 0 -> Field
    v596 = array_get v36, index u32 0 -> Field
    v597 = array_get v36, index u32 0 -> Field
    v598 = array_get v36, index u32 0 -> Field
    v599 = array_get v36, index u32 0 -> Field
    v600 = array_get v36, index u32 0 -> Field
    v601 = array_get v36, index u32 0 -> Field
    v602 = array_get v36, index u32 0 -> Field
    v603 = array_get v36, index u32 0 -> Field
    v604 = array_get v36, index u32 0 -> Field
    v605 = array_get v36, index u32 0 -> Field
    v606 = array_get v36, index u32 0 -> Field
    v607 = array_get v36, index u32 0 -> Field
    v608 = array_get v36, index u32 0 -> Field
    v609 = array_get v36, index u32 0 -> Field
    v610 = array_get v36, index u32 0 -> Field
    v611 = array_get v36, index u32 0 -> Field
    v612 = array_get v36, index u32 0 -> Field
    v613 = array_get v36, index u32 0 -> Field
    v614 = array_get v36, index u32 0 -> Field
    v615 = array_get v36, index u32 0 -> Field
    v616 = array_get v36, index u32 0 -> Field
    v617 = array_get v36, index u32 0 -> Field
    v618 = array_get v36, index u32 0 -> Field
    v619 = array_get v36, index u32 0 -> Field
    v620 = array_get v36, index u32 0 -> Field
    v621 = array_get v36, index u32 0 -> Field
    v622 = array_get v36, index u32 0 -> Field
    v623 = array_get v36, index u32 0 -> Field
    v624 = array_get v36, index u32 0 -> Field
    v625 = array_get v36, index u32 0 -> Field
    v626 = array_get v36, index u32 0 -> Field
    v627 = array_get v36, index u32 0 -> Field
    v628 = array_get v36, index u32 0 -> Field
    v629 = array_get v36, index u32 0 -> Field
    v630 = array_get v36, index u32 0 -> Field
    v631 = array_get v36, index u32 0 -> Field
    v632 = array_get v36, index u32 0 -> Field
    v633 = array_get v36, index u32 0 -> Field
    v634 = array_get v36, index u32 0 -> Field
    v635 = array_get v36, index u32 0 -> Field
    v636 = array_get v36, index u32 0 -> Field
    v637 = array_get v36, index u32 0 -> Field
    v638 = array_get v36, index u32 0 -> Field
    v639 = array_get v36, index u32 0 -> Field
    v640 = array_get v36, index u32 0 -> Field
    v641 = array_get v36, index u32 0 -> Field
    v642 = array_get v36, index u32 0 -> Field
    v643 = array_get v36, index u32 0 -> Field
    v644 = array_get v36, index u32 0 -> Field
    v645 = array_get v36, index u32 0 -> Field
    v646 = array_get v36, index u32 0 -> Field
    v647 = array_get v36, index u32 0 -> Field
    v648 = array_get v36, index u32 0 -> Field
    v649 = array_get v36, index u32 0 -> Field
    v650 = array_get v36, index u32 0 -> Field
    v651 = array_get v36, index u32 0 -> Field
    v652 = array_get v36, index u32 0 -> Field
    v653 = array_get v36, index u32 0 -> Field
    v654 = array_get v36, index u32 0 -> Field
    v655 = array_get v36, index u32 0 -> Field
    v656 = array_get v36, index u32 0 -> Field
    v657 = array_get v36, index u32 0 -> Field
    v658 = array_get v36, index u32 0 -> Field
    v659 = array_get v36, index u32 0 -> Field
    v660 = array_get v36, index u32 0 -> Field
    v661 = array_get v36, index u32 0 -> Field
    v662 = array_get v36, index u32 0 -> Field
    v663 = array_get v36, index u32 0 -> Field
    v664 = array_get v36, index u32 0 -> Field
    v665 = array_get v36, index u32 0 -> Field
    v666 = array_get v36, index u32 0 -> Field
    v667 = array_get v36, index u32 0 -> Field
    v668 = array_get v36, index u32 0 -> Field
    v669 = array_get v36, index u32 0 -> Field
    v670 = array_get v36, index u32 0 -> Field
    v671 = array_get v36, index u32 0 -> Field
    v672 = array_get v36, index u32 0 -> Field
    v673 = array_get v36, index u32 0 -> Field
    v674 = array_get v36, index u32 0 -> Field
    v675 = array_get v36, index u32 0 -> Field
    v676 = array_get v36, index u32 0 -> Field
    v677 = array_get v36, index u32 0 -> Field
    v678 = array_get v36, index u32 0 -> Field
    v679 = array_get v36, index u32 0 -> Field
    v680 = array_get v36, index u32 0 -> Field
    v681 = array_get v36, index u32 0 -> Field
    v682 = array_get v36, index u32 0 -> Field
    v683 = array_get v36, index u32 0 -> Field
    v684 = array_get v36, index u32 0 -> Field
    v685 = array_get v36, index u32 0 -> Field
    v686 = array_get v36, index u32 0 -> Field
    v687 = array_get v36, index u32 0 -> Field
    v688 = array_get v36, index u32 0 -> Field
    v689 = array_get v36, index u32 0 -> Field
    v690 = array_get v36, index u32 0 -> Field
    v691 = array_get v36, index u32 0 -> Field
    v692 = array_get v36, index u32 0 -> Field
    v693 = array_get v36, index u32 0 -> Field
    v694 = array_get v36, index u32 0 -> Field
    v695 = array_get v36, index u32 0 -> Field
    v696 = array_get v36, index u32 0 -> Field
    v697 = array_get v36, index u32 0 -> Field
    v698 = array_get v36, index u32 0 -> Field
    v699 = array_get v36, index u32 0 -> Field
    v700 = array_get v36, index u32 0 -> Field
    v701 = array_get v36, index u32 0 -> Field
    v702 = array_get v36, index u32 0 -> Field
    v703 = array_get v36, index u32 0 -> Field
    v704 = array_get v36, index u32 0 -> Field
    v705 = array_get v36, index u32 0 -> Field
    v706 = array_get v36, index u32 0 -> Field
    v707 = array_get v36, index u32 0 -> Field
    v708 = array_get v36, index u32 0 -> Field
    v709 = array_get v36, index u32 0 -> Field
    v710 = array_get v36, index u32 0 -> Field
    v711 = array_get v36, index u32 0 -> Field
    v712 = array_get v36, index u32 0 -> Field
    v713 = array_get v36, index u32 0 -> Field
    v714 = array_get v36, index u32 0 -> Field
    v715 = array_get v36, index u32 0 -> Field
    v716 = array_get v36, index u32 0 -> Field
    v717 = array_get v36, index u32 0 -> Field
    v718 = array_get v36, index u32 0 -> Field
    v719 = array_get v36, index u32 0 -> Field
    v720 = array_get v36, index u32 0 -> Field
    v721 = array_get v36, index u32 0 -> Field
    v722 = array_get v36, index u32 0 -> Field
    v723 = array_get v36, index u32 0 -> Field
    v724 = array_get v36, index u32 0 -> Field
    v725 = array_get v36, index u32 0 -> Field
    v726 = array_get v36, index u32 0 -> Field
    v727 = array_get v36, index u32 0 -> Field
    v728 = array_get v36, index u32 0 -> Field
    v729 = array_get v36, index u32 0 -> Field
    v730 = array_get v36, index u32 0 -> Field
    v731 = array_get v36, index u32 0 -> Field
    v732 = array_get v36, index u32 0 -> Field
    v733 = array_get v36, index u32 0 -> Field
    v734 = array_get v36, index u32 0 -> Field
    v735 = array_get v36, index u32 0 -> Field
    v736 = array_get v36, index u32 0 -> Field
    v737 = array_get v36, index u32 0 -> Field
    v738 = array_get v36, index u32 0 -> Field
    v739 = array_get v36, index u32 0 -> Field
    v740 = array_get v36, index u32 0 -> Field
    v741 = array_get v36, index u32 0 -> Field
    v742 = array_get v36, index u32 0 -> Field
    v743 = array_get v36, index u32 0 -> Field
    v744 = array_get v36, index u32 0 -> Field
    v745 = array_get v36, index u32 0 -> Field
    v746 = array_get v36, index u32 0 -> Field
    v747 = array_get v36, index u32 0 -> Field
    v748 = array_get v36, index u32 0 -> Field
    v749 = array_get v36, index u32 0 -> Field
    v750 = array_get v36, index u32 0 -> Field
    v751 = array_get v36, index u32 0 -> Field
    v752 = array_get v36, index u32 0 -> Field
    v753 = array_get v36, index u32 0 -> Field
    v754 = array_get v36, index u32 0 -> Field
    v755 = array_get v36, index u32 0 -> Field
    v756 = array_get v36, index u32 0 -> Field
    v757 = array_get v36, index u32 0 -> Field
    v758 = array_get v36, index u32 0 -> Field
    v759 = array_get v36, index u32 0 -> Field
    v760 = array_get v36, index u32 0 -> Field
    v761 = array_get v36, index u32 0 -> Field
    v762 = array_get v36, index u32 0 -> Field
    v763 = array_get v36, index u32 0 -> Field
    v764 = array_get v36, index u32 0 -> Field
    v765 = array_get v36, index u32 0 -> Field
    v766 = array_get v36, index u32 0 -> Field
    v767 = array_get v36, index u32 0 -> Field
    v768 = array_get v36, index u32 0 -> Field
    v769 = array_get v36, index u32 0 -> Field
    v770 = array_get v36, index u32 0 -> Field
    v771 = array_get v36, index u32 0 -> Field
    v772 = array_get v36, index u32 0 -> Field
    v773 = array_get v36, index u32 0 -> Field
    v774 = array_get v36, index u32 0 -> Field
    v775 = array_get v36, index u32 0 -> Field
    v776 = array_get v36, index u32 0 -> Field
    v777 = array_get v36, index u32 0 -> Field
    v778 = array_get v36, index u32 0 -> Field
    v779 = array_get v36, index u32 0 -> Field
    v780 = array_get v36, index u32 0 -> Field
    v781 = array_get v36, index u32 0 -> Field
    v782 = array_get v36, index u32 0 -> Field
    v783 = array_get v36, index u32 0 -> Field
    v784 = array_get v36, index u32 0 -> Field
    v785 = array_get v36, index u32 0 -> Field
    v786 = array_get v36, index u32 0 -> Field
    v787 = array_get v36, index u32 0 -> Field
    v788 = array_get v36, index u32 0 -> Field
    v789 = array_get v36, index u32 0 -> Field
    v790 = array_get v36, index u32 0 -> Field
    v791 = array_get v36, index u32 0 -> Field
    v792 = array_get v36, index u32 0 -> Field
    v793 = array_get v36, index u32 0 -> Field
    v794 = array_get v36, index u32 0 -> Field
    v795 = array_get v36, index u32 0 -> Field
    v796 = array_get v36, index u32 0 -> Field
    v797 = array_get v36, index u32 0 -> Field
    v798 = array_get v36, index u32 0 -> Field
    v799 = array_get v36, index u32 0 -> Field
    v800 = array_get v36, index u32 0 -> Field
    v801 = array_get v36, index u32 0 -> Field
    v802 = array_get v36, index u32 0 -> Field
    v803 = array_get v36, index u32 0 -> Field
    v804 = array_get v36, index u32 0 -> Field
    v805 = array_get v36, index u32 0 -> Field
    v806 = array_get v36, index u32 0 -> Field
    v807 = array_get v36, index u32 0 -> Field
    v808 = array_get v36, index u32 0 -> Field
    v809 = array_get v36, index u32 0 -> Field
    v810 = array_get v36, index u32 0 -> Field
    v811 = array_get v36, index u32 0 -> Field
    v812 = array_get v36, index u32 0 -> Field
    v813 = array_get v36, index u32 0 -> Field
    v814 = array_get v36, index u32 0 -> Field
    v815 = array_get v36, index u32 0 -> Field
    v816 = array_get v36, index u32 0 -> Field
    v817 = array_get v36, index u32 0 -> Field
    v818 = array_get v36, index u32 0 -> Field
    v819 = array_get v36, index u32 0 -> Field
    v820 = array_get v36, index u32 0 -> Field
    v821 = array_get v36, index u32 0 -> Field
    v822 = array_get v36, index u32 0 -> Field
    v823 = array_get v36, index u32 0 -> Field
    v824 = array_get v36, index u32 0 -> Field
    v825 = array_get v36, index u32 0 -> Field
    v826 = array_get v36, index u32 0 -> Field
    v827 = array_get v36, index u32 0 -> Field
    v828 = array_get v36, index u32 0 -> Field
    v829 = array_get v36, index u32 0 -> Field
    v830 = array_get v36, index u32 0 -> Field
    v831 = array_get v36, index u32 0 -> Field
    v832 = array_get v36, index u32 0 -> Field
    v833 = array_get v36, index u32 0 -> Field
    v834 = array_get v36, index u32 0 -> Field
    v835 = array_get v36, index u32 0 -> Field
    v836 = array_get v36, index u32 0 -> Field
    v837 = array_get v36, index u32 0 -> Field
    v838 = array_get v36, index u32 0 -> Field
    v839 = array_get v36, index u32 0 -> Field
    v840 = array_get v36, index u32 0 -> Field
    v841 = array_get v36, index u32 0 -> Field
    v842 = array_get v36, index u32 0 -> Field
    v843 = array_get v36, index u32 0 -> Field
    v844 = array_get v36, index u32 0 -> Field
    v845 = array_get v36, index u32 0 -> Field
    v846 = array_get v36, index u32 0 -> Field
    v847 = array_get v36, index u32 0 -> Field
    v848 = array_get v36, index u32 0 -> Field
    v849 = array_get v36, index u32 0 -> Field
    v850 = array_get v36, index u32 0 -> Field
    v851 = array_get v36, index u32 0 -> Field
    v852 = array_get v36, index u32 0 -> Field
    v853 = array_get v36, index u32 0 -> Field
    v854 = array_get v36, index u32 0 -> Field
    v855 = array_get v36, index u32 0 -> Field
    v856 = array_get v36, index u32 0 -> Field
    v857 = array_get v36, index u32 0 -> Field
    v858 = array_get v36, index u32 0 -> Field
    v859 = array_get v36, index u32 0 -> Field
    v860 = array_get v36, index u32 0 -> Field
    v861 = array_get v36, index u32 0 -> Field
    v862 = array_get v36, index u32 0 -> Field
    v863 = array_get v36, index u32 0 -> Field
    v864 = array_get v36, index u32 0 -> Field
    v865 = array_get v36, index u32 0 -> Field
    v866 = array_get v36, index u32 0 -> Field
    v867 = array_get v36, index u32 0 -> Field
    v868 = array_get v36, index u32 0 -> Field
    v869 = array_get v36, index u32 0 -> Field
    v870 = array_get v36, index u32 0 -> Field
    v871 = array_get v36, index u32 0 -> Field
    v872 = array_get v36, index u32 0 -> Field
    v873 = array_get v36, index u32 0 -> Field
    v874 = array_get v36, index u32 0 -> Field
    v875 = array_get v36, index u32 0 -> Field
    v876 = array_get v36, index u32 0 -> Field
    v877 = array_get v36, index u32 0 -> Field
    v878 = array_get v36, index u32 0 -> Field
    v879 = array_get v36, index u32 0 -> Field
    v880 = array_get v36, index u32 0 -> Field
    v881 = array_get v36, index u32 0 -> Field
    v882 = array_get v36, index u32 0 -> Field
    v883 = array_get v36, index u32 0 -> Field
    v884 = array_get v36, index u32 0 -> Field
    v885 = array_get v36, index u32 0 -> Field
    v886 = array_get v36, index u32 0 -> Field
    v887 = array_get v36, index u32 0 -> Field
    v888 = array_get v36, index u32 0 -> Field
    v889 = array_get v36, index u32 0 -> Field
    v890 = array_get v36, index u32 0 -> Field
    v891 = array_get v36, index u32 0 -> Field
    v892 = array_get v36, index u32 0 -> Field
    v893 = array_get v36, index u32 0 -> Field
    v894 = array_get v36, index u32 0 -> Field
    v895 = array_get v36, index u32 0 -> Field
    v896 = array_get v36, index u32 0 -> Field
    v897 = array_get v36, index u32 0 -> Field
    v898 = array_get v36, index u32 0 -> Field
    v899 = array_get v36, index u32 0 -> Field
    v900 = array_get v36, index u32 0 -> Field
    v901 = array_get v36, index u32 0 -> Field
    v902 = array_get v36, index u32 0 -> Field
    v903 = array_get v36, index u32 0 -> Field
    v904 = array_get v36, index u32 0 -> Field
    v905 = array_get v36, index u32 0 -> Field
    v906 = array_get v36, index u32 0 -> Field
    v907 = array_get v36, index u32 0 -> Field
    v908 = array_get v36, index u32 0 -> Field
    v909 = array_get v36, index u32 0 -> Field
    v910 = array_get v36, index u32 0 -> Field
    v911 = array_get v36, index u32 0 -> Field
    v912 = array_get v36, index u32 0 -> Field
    v913 = array_get v36, index u32 0 -> Field
    v914 = array_get v36, index u32 0 -> Field
    v915 = array_get v36, index u32 0 -> Field
    v916 = array_get v36, index u32 0 -> Field
    v917 = array_get v36, index u32 0 -> Field
    v918 = array_get v36, index u32 0 -> Field
    v919 = array_get v36, index u32 0 -> Field
    v920 = array_get v36, index u32 0 -> Field
    v921 = array_get v36, index u32 0 -> Field
    v922 = array_get v36, index u32 0 -> Field
    v923 = array_get v36, index u32 0 -> Field
    v924 = array_get v36, index u32 0 -> Field
    v925 = array_get v36, index u32 0 -> Field
    v926 = array_get v36, index u32 0 -> Field
    v927 = array_get v36, index u32 0 -> Field
    v928 = array_get v36, index u32 0 -> Field
    v929 = array_get v36, index u32 0 -> Field
    v930 = array_get v36, index u32 0 -> Field
    v931 = array_get v36, index u32 0 -> Field
    v932 = array_get v36, index u32 0 -> Field
    v933 = array_get v36, index u32 0 -> Field
    v934 = array_get v36, index u32 0 -> Field
    v935 = array_get v36, index u32 0 -> Field
    v936 = array_get v36, index u32 0 -> Field
    v937 = array_get v36, index u32 0 -> Field
    v938 = array_get v36, index u32 0 -> Field
    v939 = array_get v36, index u32 0 -> Field
    v940 = array_get v36, index u32 0 -> Field
    v941 = array_get v36, index u32 0 -> Field
    v942 = array_get v36, index u32 0 -> Field
    v943 = array_get v36, index u32 0 -> Field
    v944 = array_get v36, index u32 0 -> Field
    v945 = array_get v36, index u32 0 -> Field
    v946 = array_get v36, index u32 0 -> Field
    v947 = array_get v36, index u32 0 -> Field
    v948 = array_get v36, index u32 0 -> Field
    v949 = array_get v36, index u32 0 -> Field
    v950 = array_get v36, index u32 0 -> Field
    v951 = array_get v36, index u32 0 -> Field
    v952 = array_get v36, index u32 0 -> Field
    v953 = array_get v36, index u32 0 -> Field
    v954 = array_get v36, index u32 0 -> Field
    v955 = array_get v36, index u32 0 -> Field
    v956 = array_get v36, index u32 0 -> Field
    v957 = array_get v36, index u32 0 -> Field
    v958 = array_get v36, index u32 0 -> Field
    v959 = array_get v36, index u32 0 -> Field
    v960 = array_get v36, index u32 0 -> Field
    v961 = array_get v36, index u32 0 -> Field
    v962 = array_get v36, index u32 0 -> Field
    v963 = array_get v36, index u32 0 -> Field
    v964 = array_get v36, index u32 0 -> Field
    v965 = array_get v36, index u32 0 -> Field
    v966 = array_get v36, index u32 0 -> Field
    v967 = array_get v36, index u32 0 -> Field
    v968 = array_get v36, index u32 0 -> Field
    v969 = array_get v36, index u32 0 -> Field
    v970 = array_get v36, index u32 0 -> Field
    v971 = array_get v36, index u32 0 -> Field
    v972 = array_get v36, index u32 0 -> Field
    v973 = array_get v36, index u32 0 -> Field
    v974 = array_get v36, index u32 0 -> Field
    v975 = array_get v36, index u32 0 -> Field
    v976 = array_get v36, index u32 0 -> Field
    v977 = array_get v36, index u32 0 -> Field
    v978 = array_get v36, index u32 0 -> Field
    v979 = array_get v36, index u32 0 -> Field
    v980 = array_get v36, index u32 0 -> Field
    v981 = array_get v36, index u32 0 -> Field
    v982 = array_get v36, index u32 0 -> Field
    v983 = array_get v36, index u32 0 -> Field
    v984 = array_get v36, index u32 0 -> Field
    v985 = array_get v36, index u32 0 -> Field
    v986 = array_get v36, index u32 0 -> Field
    v987 = array_get v36, index u32 0 -> Field
    v988 = array_get v36, index u32 0 -> Field
    v989 = array_get v36, index u32 0 -> Field
    v990 = array_get v36, index u32 0 -> Field
    v991 = array_get v36, index u32 0 -> Field
    v992 = array_get v36, index u32 0 -> Field
    v993 = array_get v36, index u32 0 -> Field
    v994 = array_get v36, index u32 0 -> Field
    v995 = array_get v36, index u32 0 -> Field
    v996 = array_get v36, index u32 0 -> Field
    v997 = array_get v36, index u32 0 -> Field
    v998 = array_get v36, index u32 0 -> Field
    v999 = array_get v36, index u32 0 -> Field
    v1000 = array_get v36, index u32 0 -> Field
    v1001 = array_get v36, index u32 0 -> Field
    v1002 = array_get v36, index u32 0 -> Field
    v1003 = array_get v36, index u32 0 -> Field
    v1004 = array_get v36, index u32 0 -> Field
    v1005 = array_get v36, index u32 0 -> Field
    v1006 = array_get v36, index u32 0 -> Field
    v1007 = array_get v36, index u32 0 -> Field
    v1008 = array_get v36, index u32 0 -> Field
    v1009 = array_get v36, index u32 0 -> Field
    v1010 = array_get v36, index u32 0 -> Field
    v1011 = array_get v36, index u32 0 -> Field
    v1012 = array_get v36, index u32 0 -> Field
    v1013 = array_get v36, index u32 0 -> Field
    v1014 = array_get v36, index u32 0 -> Field
    v1015 = array_get v36, index u32 0 -> Field
    v1016 = array_get v36, index u32 0 -> Field
    v1017 = array_get v36, index u32 0 -> Field
    v1018 = array_get v36, index u32 0 -> Field
    v1019 = array_get v36, index u32 0 -> Field
    v1020 = array_get v36, index u32 0 -> Field
    v1021 = array_get v36, index u32 0 -> Field
    v1022 = array_get v36, index u32 0 -> Field
    v1023 = array_get v36, index u32 0 -> Field
    v1024 = array_get v36, index u32 0 -> Field
    v1025 = array_get v36, index u32 0 -> Field
    v1026 = array_get v36, index u32 0 -> Field
    v1027 = array_get v36, index u32 0 -> Field
    v1028 = array_get v36, index u32 0 -> Field
    v1029 = array_get v36, index u32 0 -> Field
    v1030 = array_get v36, index u32 0 -> Field
    v1031 = array_get v36, index u32 0 -> Field
    v1032 = array_get v36, index u32 0 -> Field
    v1033 = array_get v36, index u32 0 -> Field
    v1034 = array_get v36, index u32 0 -> Field
    v1035 = array_get v36, index u32 0 -> Field
    v1036 = array_get v36, index u32 0 -> Field
    v1037 = array_get v36, index u32 0 -> Field
    v1038 = array_get v36, index u32 0 -> Field
    v1039 = array_get v36, index u32 0 -> Field
    v1040 = array_get v36, index u32 0 -> Field
    v1041 = array_get v36, index u32 0 -> Field
    v1042 = array_get v36, index u32 0 -> Field
    v1043 = array_get v36, index u32 0 -> Field
    v1044 = array_get v36, index u32 0 -> Field
    v1045 = array_get v36, index u32 0 -> Field
    v1046 = array_get v36, index u32 0 -> Field
    v1047 = array_get v36, index u32 0 -> Field
    v1048 = array_get v36, index u32 0 -> Field
    v1049 = array_get v36, index u32 0 -> Field
    v1050 = array_get v36, index u32 0 -> Field
    v1051 = array_get v36, index u32 0 -> Field
    v1052 = array_get v36, index u32 0 -> Field
    v1053 = array_get v36, index u32 0 -> Field
    v1054 = array_get v36, index u32 0 -> Field
    v1055 = array_get v36, index u32 0 -> Field
    v1056 = array_get v36, index u32 0 -> Field
    v1057 = array_get v36, index u32 0 -> Field
    v1058 = array_get v36, index u32 0 -> Field
    v1059 = array_get v36, index u32 0 -> Field
    v1060 = array_get v36, index u32 0 -> Field
    v1061 = array_get v36, index u32 0 -> Field
    v1062 = array_get v36, index u32 0 -> Field
    v1063 = array_get v36, index u32 0 -> Field
    v1064 = array_get v36, index u32 0 -> Field
    v1065 = array_get v36, index u32 0 -> Field
    v1066 = array_get v36, index u32 0 -> Field
    v1067 = array_get v36, index u32 0 -> Field
    v1068 = array_get v36, index u32 0 -> Field
    v1069 = array_get v36, index u32 0 -> Field
    v1070 = array_get v36, index u32 0 -> Field
    v1071 = array_get v36, index u32 0 -> Field
    v1072 = array_get v36, index u32 0 -> Field
    v1073 = array_get v36, index u32 0 -> Field
    v1074 = array_get v36, index u32 0 -> Field
    v1075 = array_get v36, index u32 0 -> Field
    v1076 = array_get v36, index u32 0 -> Field
    v1077 = array_get v36, index u32 0 -> Field
    v1078 = array_get v36, index u32 0 -> Field
    v1079 = array_get v36, index u32 0 -> Field
    v1080 = array_get v36, index u32 0 -> Field
    v1081 = array_get v36, index u32 0 -> Field
    v1082 = array_get v36, index u32 0 -> Field
    v1083 = array_get v36, index u32 0 -> Field
    v1084 = array_get v36, index u32 0 -> Field
    v1085 = array_get v36, index u32 0 -> Field
    v1086 = array_get v36, index u32 0 -> Field
    v1087 = array_get v36, index u32 0 -> Field
    v1088 = array_get v36, index u32 0 -> Field
    v1089 = array_get v36, index u32 0 -> Field
    v1090 = array_get v36, index u32 0 -> Field
    v1091 = array_get v36, index u32 0 -> Field
    v1092 = array_get v36, index u32 0 -> Field
    v1093 = array_get v36, index u32 0 -> Field
    v1094 = array_get v36, index u32 0 -> Field
    v1095 = array_get v36, index u32 0 -> Field
    v1096 = array_get v36, index u32 0 -> Field
    v1097 = array_get v36, index u32 0 -> Field
    v1098 = array_get v36, index u32 0 -> Field
    v1099 = array_get v36, index u32 0 -> Field
    v1100 = array_get v36, index u32 0 -> Field
    v1101 = array_get v36, index u32 0 -> Field
    v1102 = array_get v36, index u32 0 -> Field
    v1103 = array_get v36, index u32 0 -> Field
    v1104 = array_get v36, index u32 0 -> Field
    v1105 = array_get v36, index u32 0 -> Field
    v1106 = array_get v36, index u32 0 -> Field
    v1107 = array_get v36, index u32 0 -> Field
    v1108 = array_get v36, index u32 0 -> Field
    v1109 = array_get v36, index u32 0 -> Field
    v1110 = array_get v36, index u32 0 -> Field
    v1111 = array_get v36, index u32 0 -> Field
    v1112 = array_get v36, index u32 0 -> Field
    v1113 = array_get v36, index u32 0 -> Field
    v1114 = array_get v36, index u32 0 -> Field
    v1115 = array_get v36, index u32 0 -> Field
    v1116 = array_get v36, index u32 0 -> Field
    v1117 = array_get v36, index u32 0 -> Field
    v1118 = array_get v36, index u32 0 -> Field
    v1119 = array_get v36, index u32 0 -> Field
    v1120 = array_get v36, index u32 0 -> Field
    v1121 = array_get v36, index u32 0 -> Field
    v1122 = array_get v36, index u32 0 -> Field
    v1123 = array_get v36, index u32 0 -> Field
    v1124 = array_get v36, index u32 0 -> Field
    v1125 = array_get v36, index u32 0 -> Field
    v1126 = array_get v36, index u32 0 -> Field
    v1127 = array_get v36, index u32 0 -> Field
    v1128 = array_get v36, index u32 0 -> Field
    v1129 = array_get v36, index u32 0 -> Field
    v1130 = array_get v36, index u32 0 -> Field
    v1131 = array_get v36, index u32 0 -> Field
    v1132 = array_get v36, index u32 0 -> Field
    v1133 = array_get v36, index u32 0 -> Field
    v1134 = array_get v36, index u32 0 -> Field
    v1135 = array_get v36, index u32 0 -> Field
    v1136 = array_get v36, index u32 0 -> Field
    v1137 = array_get v36, index u32 0 -> Field
    v1138 = array_get v36, index u32 0 -> Field
    v1139 = array_get v36, index u32 0 -> Field
    v1140 = array_get v36, index u32 0 -> Field
    v1141 = array_get v36, index u32 0 -> Field
    v1142 = array_get v36, index u32 0 -> Field
    v1143 = array_get v36, index u32 0 -> Field
    v1144 = array_get v36, index u32 0 -> Field
    v1145 = array_get v36, index u32 0 -> Field
    v1146 = array_get v36, index u32 0 -> Field
    v1147 = array_get v36, index u32 0 -> Field
    v1148 = array_get v36, index u32 0 -> Field
    v1149 = array_get v36, index u32 0 -> Field
    v1150 = array_get v36, index u32 0 -> Field
    v1151 = array_get v36, index u32 0 -> Field
    v1152 = array_get v36, index u32 0 -> Field
    v1153 = array_get v36, index u32 0 -> Field
    v1154 = array_get v36, index u32 0 -> Field
    v1155 = array_get v36, index u32 0 -> Field
    v1156 = array_get v36, index u32 0 -> Field
    v1157 = array_get v36, index u32 0 -> Field
    v1158 = array_get v36, index u32 0 -> Field
    v1159 = array_get v36, index u32 0 -> Field
    v1160 = array_get v36, index u32 0 -> Field
    v1161 = array_get v36, index u32 0 -> Field
    v1162 = array_get v36, index u32 0 -> Field
    v1163 = array_get v36, index u32 0 -> Field
    v1164 = array_get v36, index u32 0 -> Field
    v1165 = array_get v36, index u32 0 -> Field
    v1166 = array_get v36, index u32 0 -> Field
    v1167 = array_get v36, index u32 0 -> Field
    v1168 = array_get v36, index u32 0 -> Field
    v1169 = array_get v36, index u32 0 -> Field
    v1170 = array_get v36, index u32 0 -> Field
    v1171 = array_get v36, index u32 0 -> Field
    v1172 = array_get v36, index u32 0 -> Field
    v1173 = array_get v36, index u32 0 -> Field
    v1174 = array_get v36, index u32 0 -> Field
    v1175 = array_get v36, index u32 0 -> Field
    v1176 = array_get v36, index u32 0 -> Field
    v1177 = array_get v36, index u32 0 -> Field
    v1178 = array_get v36, index u32 0 -> Field
    v1179 = array_get v36, index u32 0 -> Field
    v1180 = array_get v36, index u32 0 -> Field
    v1181 = array_get v36, index u32 0 -> Field
    v1182 = array_get v36, index u32 0 -> Field
    v1183 = array_get v36, index u32 0 -> Field
    v1184 = array_get v36, index u32 0 -> Field
    v1185 = array_get v36, index u32 0 -> Field
    v1186 = array_get v36, index u32 0 -> Field
    v1187 = array_get v36, index u32 0 -> Field
    v1188 = array_get v36, index u32 0 -> Field
    v1189 = array_get v36, index u32 0 -> Field
    v1190 = array_get v36, index u32 0 -> Field
    v1191 = array_get v36, index u32 0 -> Field
    v1192 = array_get v36, index u32 0 -> Field
    v1193 = array_get v36, index u32 0 -> Field
    v1194 = array_get v36, index u32 0 -> Field
    v1195 = array_get v36, index u32 0 -> Field
    v1196 = array_get v36, index u32 0 -> Field
    v1197 = array_get v36, index u32 0 -> Field
    v1198 = array_get v36, index u32 0 -> Field
    v1199 = array_get v36, index u32 0 -> Field
    v1200 = array_get v36, index u32 0 -> Field
    v1201 = array_get v36, index u32 0 -> Field
    v1202 = array_get v36, index u32 0 -> Field
    v1203 = array_get v36, index u32 0 -> Field
    v1204 = array_get v36, index u32 0 -> Field
    v1205 = array_get v36, index u32 0 -> Field
    v1206 = array_get v36, index u32 0 -> Field
    v1207 = array_get v36, index u32 0 -> Field
    v1208 = array_get v36, index u32 0 -> Field
    v1209 = array_get v36, index u32 0 -> Field
    v1210 = array_get v36, index u32 0 -> Field
    v1211 = array_get v36, index u32 0 -> Field
    v1212 = array_get v36, index u32 0 -> Field
    v1213 = array_get v36, index u32 0 -> Field
    v1214 = array_get v36, index u32 0 -> Field
    v1215 = array_get v36, index u32 0 -> Field
    v1216 = array_get v36, index u32 0 -> Field
    v1217 = array_get v36, index u32 0 -> Field
    v1218 = array_get v36, index u32 0 -> Field
    v1219 = array_get v36, index u32 0 -> Field
    v1220 = array_get v36, index u32 0 -> Field
    v1221 = array_get v36, index u32 0 -> Field
    v1222 = array_get v36, index u32 0 -> Field
    v1223 = array_get v36, index u32 0 -> Field
    v1224 = array_get v36, index u32 0 -> Field
    v1225 = array_get v36, index u32 0 -> Field
    v1226 = array_get v36, index u32 0 -> Field
    v1227 = array_get v36, index u32 0 -> Field
    v1228 = array_get v36, index u32 0 -> Field
    v1229 = array_get v36, index u32 0 -> Field
    v1230 = array_get v36, index u32 0 -> Field
    v1231 = array_get v36, index u32 0 -> Field
    v1232 = array_get v36, index u32 0 -> Field
    v1233 = array_get v36, index u32 0 -> Field
    v1234 = array_get v36, index u32 0 -> Field
    v1235 = array_get v36, index u32 0 -> Field
    v1236 = array_get v36, index u32 0 -> Field
    v1237 = array_get v36, index u32 0 -> Field
    v1238 = array_get v36, index u32 0 -> Field
    v1239 = array_get v36, index u32 0 -> Field
    v1240 = array_get v36, index u32 0 -> Field
    v1241 = array_get v36, index u32 0 -> Field
    v1242 = array_get v36, index u32 0 -> Field
    v1243 = array_get v36, index u32 0 -> Field
    v1244 = array_get v36, index u32 0 -> Field
    v1245 = array_get v36, index u32 0 -> Field
    v1246 = array_get v36, index u32 0 -> Field
    v1247 = array_get v36, index u32 0 -> Field
    v1248 = array_get v36, index u32 0 -> Field
    v1249 = array_get v36, index u32 0 -> Field
    v1250 = array_get v36, index u32 0 -> Field
    v1251 = array_get v36, index u32 0 -> Field
    v1252 = array_get v36, index u32 0 -> Field
    v1253 = array_get v36, index u32 0 -> Field
    v1254 = array_get v36, index u32 0 -> Field
    v1255 = array_get v36, index u32 0 -> Field
    v1256 = array_get v36, index u32 0 -> Field
    v1257 = array_get v36, index u32 0 -> Field
    v1258 = array_get v36, index u32 0 -> Field
    v1259 = array_get v36, index u32 0 -> Field
    v1260 = array_get v36, index u32 0 -> Field
    v1261 = array_get v36, index u32 0 -> Field
    v1262 = array_get v36, index u32 0 -> Field
    v1263 = array_get v36, index u32 0 -> Field
    v1264 = array_get v36, index u32 0 -> Field
    v1265 = array_get v36, index u32 0 -> Field
    v1266 = array_get v36, index u32 0 -> Field
    v1267 = array_get v36, index u32 0 -> Field
    v1268 = array_get v36, index u32 0 -> Field
    v1269 = array_get v36, index u32 0 -> Field
    v1270 = array_get v36, index u32 0 -> Field
    v1271 = array_get v36, index u32 0 -> Field
    v1272 = array_get v36, index u32 0 -> Field
    v1273 = array_get v36, index u32 0 -> Field
    v1274 = array_get v36, index u32 0 -> Field
    v1275 = array_get v36, index u32 0 -> Field
    v1276 = array_get v36, index u32 0 -> Field
    v1277 = array_get v36, index u32 0 -> Field
    v1278 = array_get v36, index u32 0 -> Field
    v1279 = array_get v36, index u32 0 -> Field
    v1280 = array_get v36, index u32 0 -> Field
    v1281 = array_get v36, index u32 0 -> Field
    v1282 = array_get v36, index u32 0 -> Field
    v1283 = array_get v36, index u32 0 -> Field
    v1284 = array_get v36, index u32 0 -> Field
    v1285 = array_get v36, index u32 0 -> Field
    v1286 = array_get v36, index u32 0 -> Field
    v1287 = array_get v36, index u32 0 -> Field
    v1288 = array_get v36, index u32 0 -> Field
    v1289 = array_get v36, index u32 0 -> Field
    v1290 = array_get v36, index u32 0 -> Field
    v1291 = array_get v36, index u32 0 -> Field
    v1292 = array_get v36, index u32 0 -> Field
    v1293 = array_get v36, index u32 0 -> Field
    v1294 = array_get v36, index u32 0 -> Field
    v1295 = array_get v36, index u32 0 -> Field
    v1296 = array_get v36, index u32 0 -> Field
    v1297 = array_get v36, index u32 0 -> Field
    v1298 = array_get v36, index u32 0 -> Field
    v1299 = array_get v36, index u32 0 -> Field
    v1300 = array_get v36, index u32 0 -> Field
    v1301 = array_get v36, index u32 0 -> Field
    v1302 = array_get v36, index u32 0 -> Field
    v1303 = array_get v36, index u32 0 -> Field
    v1304 = array_get v36, index u32 0 -> Field
    v1305 = array_get v36, index u32 0 -> Field
    v1306 = array_get v36, index u32 0 -> Field
    v1307 = array_get v36, index u32 0 -> Field
    v1308 = array_get v36, index u32 0 -> Field
    v1309 = array_get v36, index u32 0 -> Field
    v1310 = array_get v36, index u32 0 -> Field
    v1311 = array_get v36, index u32 0 -> Field
    v1312 = array_get v36, index u32 0 -> Field
    v1313 = array_get v36, index u32 0 -> Field
    v1314 = array_get v36, index u32 0 -> Field
    v1315 = array_get v36, index u32 0 -> Field
    v1316 = array_get v36, index u32 0 -> Field
    v1317 = array_get v36, index u32 0 -> Field
    v1318 = array_get v36, index u32 0 -> Field
    v1319 = array_get v36, index u32 0 -> Field
    v1320 = array_get v36, index u32 0 -> Field
    v1321 = array_get v36, index u32 0 -> Field
    v1322 = array_get v36, index u32 0 -> Field
    v1323 = array_get v36, index u32 0 -> Field
    v1324 = array_get v36, index u32 0 -> Field
    v1325 = array_get v36, index u32 0 -> Field
    v1326 = array_get v36, index u32 0 -> Field
    v1327 = array_get v36, index u32 0 -> Field
    v1328 = array_get v36, index u32 0 -> Field
    v1329 = array_get v36, index u32 0 -> Field
    v1330 = array_get v36, index u32 0 -> Field
    v1331 = array_get v36, index u32 0 -> Field
    v1332 = array_get v36, index u32 0 -> Field
    v1333 = array_get v36, index u32 0 -> Field
    v1334 = array_get v36, index u32 0 -> Field
    v1335 = array_get v36, index u32 0 -> Field
    v1336 = array_get v36, index u32 0 -> Field
    v1337 = array_get v36, index u32 0 -> Field
    v1338 = array_get v36, index u32 0 -> Field
    v1339 = array_get v36, index u32 0 -> Field
    v1340 = array_get v36, index u32 0 -> Field
    v1341 = array_get v36, index u32 0 -> Field
    v1342 = array_get v36, index u32 0 -> Field
    v1343 = array_get v36, index u32 0 -> Field
    v1344 = array_get v36, index u32 0 -> Field
    v1345 = array_get v36, index u32 0 -> Field
    v1346 = array_get v36, index u32 0 -> Field
    v1347 = array_get v36, index u32 0 -> Field
    v1348 = array_get v36, index u32 0 -> Field
    v1349 = array_get v36, index u32 0 -> Field
    v1350 = array_get v36, index u32 0 -> Field
    v1351 = array_get v36, index u32 0 -> Field
    v1352 = array_get v36, index u32 0 -> Field
    v1353 = array_get v36, index u32 0 -> Field
    v1354 = array_get v36, index u32 0 -> Field
    v1355 = array_get v36, index u32 0 -> Field
    v1356 = array_get v36, index u32 0 -> Field
    v1357 = array_get v36, index u32 0 -> Field
    v1358 = array_get v36, index u32 0 -> Field
    v1359 = array_get v36, index u32 0 -> Field
    v1360 = array_get v36, index u32 0 -> Field
    v1361 = array_get v36, index u32 0 -> Field
    v1362 = array_get v36, index u32 0 -> Field
    v1363 = array_get v36, index u32 0 -> Field
    v1364 = array_get v36, index u32 0 -> Field
    v1365 = array_get v36, index u32 0 -> Field
    v1366 = array_get v36, index u32 0 -> Field
    v1367 = array_get v36, index u32 0 -> Field
    v1368 = array_get v36, index u32 0 -> Field
    v1369 = array_get v36, index u32 0 -> Field
    v1370 = array_get v36, index u32 0 -> Field
    v1371 = array_get v36, index u32 0 -> Field
    v1372 = array_get v36, index u32 0 -> Field
    v1373 = array_get v36, index u32 0 -> Field
    v1374 = array_get v36, index u32 0 -> Field
    v1375 = array_get v36, index u32 0 -> Field
    v1376 = array_get v36, index u32 0 -> Field
    v1377 = array_get v36, index u32 0 -> Field
    v1378 = array_get v36, index u32 0 -> Field
    v1379 = array_get v36, index u32 0 -> Field
    v1380 = array_get v36, index u32 0 -> Field
    v1381 = array_get v36, index u32 0 -> Field
    v1382 = array_get v36, index u32 0 -> Field
    v1383 = array_get v36, index u32 0 -> Field
    v1384 = array_get v36, index u32 0 -> Field
    v1385 = array_get v36, index u32 0 -> Field
    v1386 = array_get v36, index u32 0 -> Field
    v1387 = array_get v36, index u32 0 -> Field
    v1388 = array_get v36, index u32 0 -> Field
    v1389 = array_get v36, index u32 0 -> Field
    v1390 = array_get v36, index u32 0 -> Field
    v1391 = array_get v36, index u32 0 -> Field
    v1392 = array_get v36, index u32 0 -> Field
    v1393 = array_get v36, index u32 0 -> Field
    v1394 = array_get v36, index u32 0 -> Field
    v1395 = array_get v36, index u32 0 -> Field
    v1396 = array_get v36, index u32 0 -> Field
    v1397 = array_get v36, index u32 0 -> Field
    v1398 = array_get v36, index u32 0 -> Field
    v1399 = array_get v36, index u32 0 -> Field
    v1400 = array_get v36, index u32 0 -> Field
    v1401 = array_get v36, index u32 0 -> Field
    v1402 = array_get v36, index u32 0 -> Field
    v1403 = array_get v36, index u32 0 -> Field
    v1404 = array_get v36, index u32 0 -> Field
    v1405 = array_get v36, index u32 0 -> Field
    v1406 = array_get v36, index u32 0 -> Field
    v1407 = array_get v36, index u32 0 -> Field
    v1408 = array_get v36, index u32 0 -> Field
    v1409 = array_get v36, index u32 0 -> Field
    v1410 = array_get v36, index u32 0 -> Field
    v1411 = array_get v36, index u32 0 -> Field
    v1412 = array_get v36, index u32 0 -> Field
    v1413 = array_get v36, index u32 0 -> Field
    v1414 = array_get v36, index u32 0 -> Field
    v1415 = array_get v36, index u32 0 -> Field
    v1416 = array_get v36, index u32 0 -> Field
    v1417 = array_get v36, index u32 0 -> Field
    v1418 = array_get v36, index u32 0 -> Field
    v1419 = array_get v36, index u32 0 -> Field
    v1420 = array_get v36, index u32 0 -> Field
    v1421 = array_get v36, index u32 0 -> Field
    v1422 = array_get v36, index u32 0 -> Field
    v1423 = array_get v36, index u32 0 -> Field
    v1424 = array_get v36, index u32 0 -> Field
    v1425 = array_get v36, index u32 0 -> Field
    v1426 = array_get v36, index u32 0 -> Field
    v1427 = array_get v36, index u32 0 -> Field
    v1428 = array_get v36, index u32 0 -> Field
    v1429 = array_get v36, index u32 0 -> Field
    v1430 = array_get v36, index u32 0 -> Field
    v1431 = array_get v36, index u32 0 -> Field
    v1432 = array_get v36, index u32 0 -> Field
    v1433 = array_get v36, index u32 0 -> Field
    v1434 = array_get v36, index u32 0 -> Field
    v1435 = array_get v36, index u32 0 -> Field
    v1436 = array_get v36, index u32 0 -> Field
    v1437 = array_get v36, index u32 0 -> Field
    v1438 = array_get v36, index u32 0 -> Field
    v1439 = array_get v36, index u32 0 -> Field
    v1440 = array_get v36, index u32 0 -> Field
    v1441 = array_get v36, index u32 0 -> Field
    v1442 = array_get v36, index u32 0 -> Field
    v1443 = array_get v36, index u32 0 -> Field
    v1444 = array_get v36, index u32 0 -> Field
    v1445 = array_get v36, index u32 0 -> Field
    v1446 = array_get v36, index u32 0 -> Field
    v1447 = array_get v36, index u32 0 -> Field
    v1448 = array_get v36, index u32 0 -> Field
    v1449 = array_get v36, index u32 0 -> Field
    v1450 = array_get v36, index u32 0 -> Field
    v1451 = array_get v36, index u32 0 -> Field
    v1452 = array_get v36, index u32 0 -> Field
    v1453 = array_get v36, index u32 0 -> Field
    v1454 = array_get v36, index u32 0 -> Field
    v1455 = array_get v36, index u32 0 -> Field
    v1456 = array_get v36, index u32 0 -> Field
    v1457 = array_get v36, index u32 0 -> Field
    v1458 = array_get v36, index u32 0 -> Field
    v1459 = array_get v36, index u32 0 -> Field
    v1460 = array_get v36, index u32 0 -> Field
    v1461 = array_get v36, index u32 0 -> Field
    v1462 = array_get v36, index u32 0 -> Field
    v1463 = array_get v36, index u32 0 -> Field
    v1464 = array_get v36, index u32 0 -> Field
    v1465 = array_get v36, index u32 0 -> Field
    v1466 = array_get v36, index u32 0 -> Field
    v1467 = array_get v36, index u32 0 -> Field
    v1468 = array_get v36, index u32 0 -> Field
    v1469 = array_get v36, index u32 0 -> Field
    v1470 = array_get v36, index u32 0 -> Field
    v1471 = array_get v36, index u32 0 -> Field
    v1472 = array_get v36, index u32 0 -> Field
    v1473 = array_get v36, index u32 0 -> Field
    v1474 = array_get v36, index u32 0 -> Field
    v1475 = array_get v36, index u32 0 -> Field
    v1476 = array_get v36, index u32 0 -> Field
    v1477 = array_get v36, index u32 0 -> Field
    v1478 = array_get v36, index u32 0 -> Field
    v1479 = array_get v36, index u32 0 -> Field
    v1480 = array_get v36, index u32 0 -> Field
    v1481 = array_get v36, index u32 0 -> Field
    v1482 = array_get v36, index u32 0 -> Field
    v1483 = array_get v36, index u32 0 -> Field
    v1484 = array_get v36, index u32 0 -> Field
    v1485 = array_get v36, index u32 0 -> Field
    v1486 = array_get v36, index u32 0 -> Field
    v1487 = array_get v36, index u32 0 -> Field
    v1488 = array_get v36, index u32 0 -> Field
    v1489 = array_get v36, index u32 0 -> Field
    v1490 = array_get v36, index u32 0 -> Field
    v1491 = array_get v36, index u32 0 -> Field
    v1492 = array_get v36, index u32 0 -> Field
    v1493 = array_get v36, index u32 0 -> Field
    v1494 = array_get v36, index u32 0 -> Field
    v1495 = array_get v36, index u32 0 -> Field
    v1496 = array_get v36, index u32 0 -> Field
    v1497 = array_get v36, index u32 0 -> Field
    v1498 = array_get v36, index u32 0 -> Field
    v1499 = array_get v36, index u32 0 -> Field
    v1500 = array_get v36, index u32 0 -> Field
    v1501 = array_get v36, index u32 0 -> Field
    v1502 = array_get v36, index u32 0 -> Field
    v1503 = array_get v36, index u32 0 -> Field
    v1504 = array_get v36, index u32 0 -> Field
    v1505 = array_get v36, index u32 0 -> Field
    v1506 = array_get v36, index u32 0 -> Field
    v1507 = array_get v36, index u32 0 -> Field
    v1508 = array_get v36, index u32 0 -> Field
    v1509 = array_get v36, index u32 0 -> Field
    v1510 = array_get v36, index u32 0 -> Field
    v1511 = array_get v36, index u32 0 -> Field
    v1512 = array_get v36, index u32 0 -> Field
    v1513 = array_get v36, index u32 0 -> Field
    v1514 = array_get v36, index u32 0 -> Field
    v1515 = array_get v36, index u32 0 -> Field
    v1516 = array_get v36, index u32 0 -> Field
    v1517 = array_get v36, index u32 0 -> Field
    v1518 = array_get v36, index u32 0 -> Field
    v1519 = array_get v36, index u32 0 -> Field
    v1520 = array_get v36, index u32 0 -> Field
    v1521 = array_get v36, index u32 0 -> Field
    v1522 = array_get v36, index u32 0 -> Field
    v1523 = array_get v36, index u32 0 -> Field
    v1524 = array_get v36, index u32 0 -> Field
    v1525 = array_get v36, index u32 0 -> Field
    v1526 = array_get v36, index u32 0 -> Field
    v1527 = array_get v36, index u32 0 -> Field
    v1528 = array_get v36, index u32 0 -> Field
    v1529 = array_get v36, index u32 0 -> Field
    v1530 = array_get v36, index u32 0 -> Field
    v1531 = array_get v36, index u32 0 -> Field
    v1532 = array_get v36, index u32 0 -> Field
    v1533 = array_get v36, index u32 0 -> Field
    v1534 = array_get v36, index u32 0 -> Field
    v1535 = array_get v36, index u32 0 -> Field
    v1536 = array_get v36, index u32 0 -> Field
    v1537 = array_get v36, index u32 0 -> Field
    v1538 = array_get v36, index u32 0 -> Field
    v1539 = array_get v36, index u32 0 -> Field
    v1540 = array_get v36, index u32 0 -> Field
    v1541 = array_get v36, index u32 0 -> Field
    v1542 = array_get v36, index u32 0 -> Field
    v1543 = array_get v36, index u32 0 -> Field
    v1544 = array_get v36, index u32 0 -> Field
    v1545 = array_get v36, index u32 0 -> Field
    v1546 = array_get v36, index u32 0 -> Field
    v1547 = array_get v36, index u32 0 -> Field
    v1548 = array_get v36, index u32 0 -> Field
    v1549 = array_get v36, index u32 0 -> Field
    v1550 = array_get v36, index u32 0 -> Field
    v1551 = array_get v36, index u32 0 -> Field
    v1552 = array_get v36, index u32 0 -> Field
    v1553 = array_get v36, index u32 0 -> Field
    v1554 = array_get v36, index u32 0 -> Field
    v1555 = array_get v36, index u32 0 -> Field
    v1556 = array_get v36, index u32 0 -> Field
    v1557 = array_get v36, index u32 0 -> Field
    v1558 = array_get v36, index u32 0 -> Field
    v1559 = array_get v36, index u32 0 -> Field
    v1560 = array_get v36, index u32 0 -> Field
    v1561 = array_get v36, index u32 0 -> Field
    v1562 = array_get v36, index u32 0 -> Field
    v1563 = array_get v36, index u32 0 -> Field
    v1564 = array_get v36, index u32 0 -> Field
    v1565 = array_get v36, index u32 0 -> Field
    v1566 = array_get v36, index u32 0 -> Field
    v1567 = array_get v36, index u32 0 -> Field
    v1568 = array_get v36, index u32 0 -> Field
    v1569 = array_get v36, index u32 0 -> Field
    v1570 = array_get v36, index u32 0 -> Field
    v1571 = array_get v36, index u32 0 -> Field
    v1572 = array_get v36, index u32 0 -> Field
    v1573 = array_get v36, index u32 0 -> Field
    v1574 = array_get v36, index u32 0 -> Field
    v1575 = array_get v36, index u32 0 -> Field
    v1576 = array_get v36, index u32 0 -> Field
    v1577 = array_get v36, index u32 0 -> Field
    v1578 = array_get v36, index u32 0 -> Field
    v1579 = array_get v36, index u32 0 -> Field
    v1580 = array_get v36, index u32 0 -> Field
    v1581 = array_get v36, index u32 0 -> Field
    v1582 = array_get v36, index u32 0 -> Field
    v1583 = array_get v36, index u32 0 -> Field
    v1584 = array_get v36, index u32 0 -> Field
    v1585 = array_get v36, index u32 0 -> Field
    v1586 = array_get v36, index u32 0 -> Field
    v1587 = array_get v36, index u32 0 -> Field
    v1588 = array_get v36, index u32 0 -> Field
    v1589 = array_get v36, index u32 0 -> Field
    v1590 = array_get v36, index u32 0 -> Field
    v1591 = array_get v36, index u32 0 -> Field
    v1592 = array_get v36, index u32 0 -> Field
    v1593 = array_get v36, index u32 0 -> Field
    v1594 = array_get v36, index u32 0 -> Field
    v1595 = array_get v36, index u32 0 -> Field
    v1596 = array_get v36, index u32 0 -> Field
    v1597 = array_get v36, index u32 0 -> Field
    v1598 = array_get v36, index u32 0 -> Field
    v1599 = array_get v36, index u32 0 -> Field
    v1600 = array_get v36, index u32 0 -> Field
    v1601 = array_get v36, index u32 0 -> Field
    v1602 = array_get v36, index u32 0 -> Field
    v1603 = array_get v36, index u32 0 -> Field
    v1604 = array_get v36, index u32 0 -> Field
    v1605 = array_get v36, index u32 0 -> Field
    v1606 = array_get v36, index u32 0 -> Field
    v1607 = array_get v36, index u32 0 -> Field
    v1608 = array_get v36, index u32 0 -> Field
    v1609 = array_get v36, index u32 0 -> Field
    v1610 = array_get v36, index u32 0 -> Field
    v1611 = array_get v36, index u32 0 -> Field
    v1612 = array_get v36, index u32 0 -> Field
    v1613 = array_get v36, index u32 0 -> Field
    v1614 = array_get v36, index u32 0 -> Field
    v1615 = array_get v36, index u32 0 -> Field
    v1616 = array_get v36, index u32 0 -> Field
    v1617 = array_get v36, index u32 0 -> Field
    v1618 = array_get v36, index u32 0 -> Field
    v1619 = array_get v36, index u32 0 -> Field
    v1620 = array_get v36, index u32 0 -> Field
    v1621 = array_get v36, index u32 0 -> Field
    v1622 = array_get v36, index u32 0 -> Field
    v1623 = array_get v36, index u32 0 -> Field
    v1624 = array_get v36, index u32 0 -> Field
    v1625 = array_get v36, index u32 0 -> Field
    v1626 = array_get v36, index u32 0 -> Field
    v1627 = array_get v36, index u32 0 -> Field
    v1628 = array_get v36, index u32 0 -> Field
    v1629 = array_get v36, index u32 0 -> Field
    v1630 = array_get v36, index u32 0 -> Field
    v1631 = array_get v36, index u32 0 -> Field
    v1632 = array_get v36, index u32 0 -> Field
    v1633 = array_get v36, index u32 0 -> Field
    v1634 = array_get v36, index u32 0 -> Field
    v1635 = array_get v36, index u32 0 -> Field
    v1636 = array_get v36, index u32 0 -> Field
    v1637 = array_get v36, index u32 0 -> Field
    v1638 = array_get v36, index u32 0 -> Field
    v1639 = array_get v36, index u32 0 -> Field
    v1640 = array_get v36, index u32 0 -> Field
    v1641 = array_get v36, index u32 0 -> Field
    v1642 = array_get v36, index u32 0 -> Field
    v1643 = array_get v36, index u32 0 -> Field
    v1644 = array_get v36, index u32 0 -> Field
    v1645 = array_get v36, index u32 0 -> Field
    v1646 = array_get v36, index u32 0 -> Field
    v1647 = array_get v36, index u32 0 -> Field
    v1648 = array_get v36, index u32 0 -> Field
    v1649 = array_get v36, index u32 0 -> Field
    v1650 = array_get v36, index u32 0 -> Field
    v1651 = array_get v36, index u32 0 -> Field
    v1652 = array_get v36, index u32 0 -> Field
    v1653 = array_get v36, index u32 0 -> Field
    v1654 = array_get v36, index u32 0 -> Field
    v1655 = array_get v36, index u32 0 -> Field
    v1656 = array_get v36, index u32 0 -> Field
    v1657 = array_get v36, index u32 0 -> Field
    v1658 = array_get v36, index u32 0 -> Field
    v1659 = array_get v36, index u32 0 -> Field
    v1660 = array_get v36, index u32 0 -> Field
    v1661 = array_get v36, index u32 0 -> Field
    v1662 = array_get v36, index u32 0 -> Field
    v1663 = array_get v36, index u32 0 -> Field
    v1664 = array_get v36, index u32 0 -> Field
    v1665 = array_get v36, index u32 0 -> Field
    v1666 = array_get v36, index u32 0 -> Field
    v1667 = array_get v36, index u32 0 -> Field
    v1668 = array_get v36, index u32 0 -> Field
    v1669 = array_get v36, index u32 0 -> Field
    v1670 = array_get v36, index u32 0 -> Field
    v1671 = array_get v36, index u32 0 -> Field
    v1672 = array_get v36, index u32 0 -> Field
    v1673 = array_get v36, index u32 0 -> Field
    v1674 = array_get v36, index u32 0 -> Field
    v1675 = array_get v36, index u32 0 -> Field
    v1676 = array_get v36, index u32 0 -> Field
    v1677 = array_get v36, index u32 0 -> Field
    v1678 = array_get v36, index u32 0 -> Field
    v1679 = array_get v36, index u32 0 -> Field
    v1680 = array_get v36, index u32 0 -> Field
    v1681 = array_get v36, index u32 0 -> Field
    v1682 = array_get v36, index u32 0 -> Field
    v1683 = array_get v36, index u32 0 -> Field
    v1684 = array_get v36, index u32 0 -> Field
    v1685 = array_get v36, index u32 0 -> Field
    v1686 = array_get v36, index u32 0 -> Field
    v1687 = array_get v36, index u32 0 -> Field
    v1688 = array_get v36, index u32 0 -> Field
    v1689 = array_get v36, index u32 0 -> Field
    v1690 = array_get v36, index u32 0 -> Field
    v1691 = array_get v36, index u32 0 -> Field
    v1692 = array_get v36, index u32 0 -> Field
    v1693 = array_get v36, index u32 0 -> Field
    v1694 = array_get v36, index u32 0 -> Field
    v1695 = array_get v36, index u32 0 -> Field
    v1696 = array_get v36, index u32 0 -> Field
    v1697 = array_get v36, index u32 0 -> Field
    v1698 = array_get v36, index u32 0 -> Field
    v1699 = array_get v36, index u32 0 -> Field
    v1700 = array_get v36, index u32 0 -> Field
    v1701 = array_get v36, index u32 0 -> Field
    v1702 = array_get v36, index u32 0 -> Field
    v1703 = array_get v36, index u32 0 -> Field
    v1704 = array_get v36, index u32 0 -> Field
    v1705 = array_get v36, index u32 0 -> Field
    v1706 = array_get v36, index u32 0 -> Field
    v1707 = array_get v36, index u32 0 -> Field
    v1708 = array_get v36, index u32 0 -> Field
    v1709 = array_get v36, index u32 0 -> Field
    v1710 = array_get v36, index u32 0 -> Field
    v1711 = array_get v36, index u32 0 -> Field
    v1712 = array_get v36, index u32 0 -> Field
    v1713 = array_get v36, index u32 0 -> Field
    v1714 = array_get v36, index u32 0 -> Field
    v1715 = array_get v36, index u32 0 -> Field
    v1716 = array_get v36, index u32 0 -> Field
    v1717 = array_get v36, index u32 0 -> Field
    v1718 = array_get v36, index u32 0 -> Field
    v1719 = array_get v36, index u32 0 -> Field
    v1720 = array_get v36, index u32 0 -> Field
    v1721 = array_get v36, index u32 0 -> Field
    v1722 = array_get v36, index u32 0 -> Field
    v1723 = array_get v36, index u32 0 -> Field
    v1724 = array_get v36, index u32 0 -> Field
    v1725 = array_get v36, index u32 0 -> Field
    v1726 = array_get v36, index u32 0 -> Field
    v1727 = array_get v36, index u32 0 -> Field
    v1728 = array_get v36, index u32 0 -> Field
    v1729 = array_get v36, index u32 0 -> Field
    v1730 = array_get v36, index u32 0 -> Field
    v1731 = array_get v36, index u32 0 -> Field
    v1732 = array_get v36, index u32 0 -> Field
    v1733 = array_get v36, index u32 0 -> Field
    v1734 = array_get v36, index u32 0 -> Field
    v1735 = array_get v36, index u32 0 -> Field
    v1736 = array_get v36, index u32 0 -> Field
    v1737 = array_get v36, index u32 0 -> Field
    v1738 = array_get v36, index u32 0 -> Field
    v1739 = array_get v36, index u32 0 -> Field
    v1740 = array_get v36, index u32 0 -> Field
    v1741 = array_get v36, index u32 0 -> Field
    v1742 = array_get v36, index u32 0 -> Field
    v1743 = array_get v36, index u32 0 -> Field
    v1744 = array_get v36, index u32 0 -> Field
    v1745 = array_get v36, index u32 0 -> Field
    v1746 = array_get v36, index u32 0 -> Field
    v1747 = array_get v36, index u32 0 -> Field
    v1748 = array_get v36, index u32 0 -> Field
    v1749 = array_get v36, index u32 0 -> Field
    v1750 = array_get v36, index u32 0 -> Field
    v1751 = array_get v36, index u32 0 -> Field
    v1752 = array_get v36, index u32 0 -> Field
    v1753 = array_get v36, index u32 0 -> Field
    v1754 = array_get v36, index u32 0 -> Field
    v1755 = array_get v36, index u32 0 -> Field
    v1756 = array_get v36, index u32 0 -> Field
    v1757 = array_get v36, index u32 0 -> Field
    v1758 = array_get v36, index u32 0 -> Field
    v1759 = array_get v36, index u32 0 -> Field
    v1760 = array_get v36, index u32 0 -> Field
    v1761 = array_get v36, index u32 0 -> Field
    v1762 = array_get v36, index u32 0 -> Field
    v1763 = array_get v36, index u32 0 -> Field
    v1764 = array_get v36, index u32 0 -> Field
    v1765 = array_get v36, index u32 0 -> Field
    v1766 = array_get v36, index u32 0 -> Field
    v1767 = array_get v36, index u32 0 -> Field
    v1768 = array_get v36, index u32 0 -> Field
    v1769 = array_get v36, index u32 0 -> Field
    v1770 = array_get v36, index u32 0 -> Field
    v1771 = array_get v36, index u32 0 -> Field
    v1772 = array_get v36, index u32 0 -> Field
    v1773 = array_get v36, index u32 0 -> Field
    v1774 = array_get v36, index u32 0 -> Field
    v1775 = array_get v36, index u32 0 -> Field
    v1776 = array_get v36, index u32 0 -> Field
    v1777 = array_get v36, index u32 0 -> Field
    v1778 = array_get v36, index u32 0 -> Field
    v1779 = array_get v36, index u32 0 -> Field
    v1780 = array_get v36, index u32 0 -> Field
    v1781 = array_get v36, index u32 0 -> Field
    v1782 = array_get v36, index u32 0 -> Field
    v1783 = array_get v36, index u32 0 -> Field
    v1784 = array_get v36, index u32 0 -> Field
    v1785 = array_get v36, index u32 0 -> Field
    v1786 = array_get v36, index u32 0 -> Field
    v1787 = array_get v36, index u32 0 -> Field
    v1788 = array_get v36, index u32 0 -> Field
    v1789 = array_get v36, index u32 0 -> Field
    v1790 = array_get v36, index u32 0 -> Field
    v1791 = array_get v36, index u32 0 -> Field
    v1792 = array_get v36, index u32 0 -> Field
    v1793 = array_get v36, index u32 0 -> Field
    v1794 = array_get v36, index u32 0 -> Field
    v1795 = array_get v36, index u32 0 -> Field
    v1796 = array_get v36, index u32 0 -> Field
    v1797 = array_get v36, index u32 0 -> Field
    v1798 = array_get v36, index u32 0 -> Field
    v1799 = array_get v36, index u32 0 -> Field
    v1800 = array_get v36, index u32 0 -> Field
    v1801 = array_get v36, index u32 0 -> Field
    v1802 = array_get v36, index u32 0 -> Field
    v1803 = array_get v36, index u32 0 -> Field
    v1804 = array_get v36, index u32 0 -> Field
    v1805 = array_get v36, index u32 0 -> Field
    v1806 = array_get v36, index u32 0 -> Field
    v1807 = array_get v36, index u32 0 -> Field
    v1808 = array_get v36, index u32 0 -> Field
    v1809 = array_get v36, index u32 0 -> Field
    v1810 = array_get v36, index u32 0 -> Field
    v1811 = array_get v36, index u32 0 -> Field
    v1812 = array_get v36, index u32 0 -> Field
    v1813 = array_get v36, index u32 0 -> Field
    v1814 = array_get v36, index u32 0 -> Field
    v1815 = array_get v36, index u32 0 -> Field
    v1816 = array_get v36, index u32 0 -> Field
    v1817 = array_get v36, index u32 0 -> Field
    v1818 = array_get v36, index u32 0 -> Field
    v1819 = array_get v36, index u32 0 -> Field
    v1820 = array_get v36, index u32 0 -> Field
    v1821 = array_get v36, index u32 0 -> Field
    v1822 = array_get v36, index u32 0 -> Field
    v1823 = array_get v36, index u32 0 -> Field
    v1824 = array_get v36, index u32 0 -> Field
    v1825 = array_get v36, index u32 0 -> Field
    v1826 = array_get v36, index u32 0 -> Field
    v1827 = array_get v36, index u32 0 -> Field
    v1828 = array_get v36, index u32 0 -> Field
    v1829 = array_get v36, index u32 0 -> Field
    v1830 = array_get v36, index u32 0 -> Field
    v1831 = array_get v36, index u32 0 -> Field
    v1832 = array_get v36, index u32 0 -> Field
    v1833 = array_get v36, index u32 0 -> Field
    v1834 = array_get v36, index u32 0 -> Field
    v1835 = array_get v36, index u32 0 -> Field
    v1836 = array_get v36, index u32 0 -> Field
    v1837 = array_get v36, index u32 0 -> Field
    v1838 = array_get v36, index u32 0 -> Field
    v1839 = array_get v36, index u32 0 -> Field
    v1840 = array_get v36, index u32 0 -> Field
    v1841 = array_get v36, index u32 0 -> Field
    v1842 = array_get v36, index u32 0 -> Field
    v1843 = array_get v36, index u32 0 -> Field
    v1844 = array_get v36, index u32 0 -> Field
    v1845 = array_get v36, index u32 0 -> Field
    v1846 = array_get v36, index u32 0 -> Field
    v1847 = array_get v36, index u32 0 -> Field
    v1848 = array_get v36, index u32 0 -> Field
    v1849 = array_get v36, index u32 0 -> Field
    v1850 = array_get v36, index u32 0 -> Field
    v1851 = array_get v36, index u32 0 -> Field
    v1852 = array_get v36, index u32 0 -> Field
    v1853 = array_get v36, index u32 0 -> Field
    v1854 = array_get v36, index u32 0 -> Field
    v1855 = array_get v36, index u32 0 -> Field
    v1856 = array_get v36, index u32 0 -> Field
    v1857 = array_get v36, index u32 0 -> Field
    v1858 = array_get v36, index u32 0 -> Field
    v1859 = array_get v36, index u32 0 -> Field
    v1860 = array_get v36, index u32 0 -> Field
    v1861 = array_get v36, index u32 0 -> Field
    v1862 = array_get v36, index u32 0 -> Field
    v1863 = array_get v36, index u32 0 -> Field
    v1864 = array_get v36, index u32 0 -> Field
    v1865 = array_get v36, index u32 0 -> Field
    v1866 = array_get v36, index u32 0 -> Field
    v1867 = array_get v36, index u32 0 -> Field
    v1868 = array_get v36, index u32 0 -> Field
    v1869 = array_get v36, index u32 0 -> Field
    v1870 = array_get v36, index u32 0 -> Field
    v1871 = array_get v36, index u32 0 -> Field
    v1872 = array_get v36, index u32 0 -> Field
    v1873 = array_get v36, index u32 0 -> Field
    v1874 = array_get v36, index u32 0 -> Field
    v1875 = array_get v36, index u32 0 -> Field
    v1876 = array_get v36, index u32 0 -> Field
    v1877 = array_get v36, index u32 0 -> Field
    v1878 = array_get v36, index u32 0 -> Field
    v1879 = array_get v36, index u32 0 -> Field
    v1880 = array_get v36, index u32 0 -> Field
    v1881 = array_get v36, index u32 0 -> Field
    v1882 = array_get v36, index u32 0 -> Field
    v1883 = array_get v36, index u32 0 -> Field
    v1884 = array_get v36, index u32 0 -> Field
    v1885 = array_get v36, index u32 0 -> Field
    v1886 = array_get v36, index u32 0 -> Field
    v1887 = array_get v36, index u32 0 -> Field
    v1888 = make_array [v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63, v64, v65, v66, v67, v68, v69, v70, v71, v72, v73, v74, v75, v76, v77, v78, v79, v80, v81, v82, v83, v84, v85, v86, v87, v88, v89, v90, v91, v92, v93, v94, v95, v96, v97, v98, v99, v100, v101, v102, v103, v104, v105, v106, v107, v108, v109, v110, v111, v112, v113, v114, v115, v116, v117, v118, v119, v120, v121, v122, v123, v124, v125, v126, v127, v128, v129, v130, v131, v132, v133, v134, v135, v136, v137, v138, v139, v140, v141, v142, v143, v144, v145, v146, v147, v148, v149, v150, v151, v152, v153, v154, v155, v156, v157, v158, v159, v160, v161, v162, v163, v164, v165, v166, v167, v168, v169, v170, v171, v172, v173, v174, v175, v176, v177, v178, v179, v180, v181, v182, v183, v184, v185, v186, v187, v188, v189, v190, v191, v192, v193, v194, v195, v196, v197, v198, v199, v200, v201, v202, v203, v204, v205, v206, v207, v208, v209, v210, v211, v212, v213, v214, v215, v216, v217, v218, v219, v220, v221, v222, v223, v224, v225, v226, v227, v228, v229, v230, v231, v232, v233, v234, v235, v236, v237, v238, v239, v240, v241, v242, v243, v244, v245, v246, v247, v248, v249, v250, v251, v252, v253, v254, v255, v256, v257, v258, v259, v260, v261, v262, v263, v264, v265, v266, v267, v268, v269, v270, v271, v272, v273, v274, v275, v276, v277, v278, v279, v280, v281, v282, v283, v284, v285, v286, v287, v288, v289, v290, v291, v292, v293, v294, v295, v296, v297, v298, v299, v300, v301, v302, v303, v304, v305, v306, v307, v308, v309, v310, v311, v312, v313, v314, v315, v316, v317, v318, v319, v320, v321, v322, v323, v324, v325, v326, v327, v328, v329, v330, v331, v332, v333, v334, v335, v336, v337, v338, v339, v340, v341, v342, v343, v344, v345, v346, v347, v348, v349, v350, v351, v352, v353, v354, v355, v356, v357, v358, v359, v360, v361, v362, v363, v364, v365, v366, v367, v368, v369, v370, v371, v372, v373, v374, v375, v376, v377, v378, v379, v380, v381, v382, v383, v384, v385, v386, v387, v388, v389, v390, v391, v392, v393, v394, v395, v396, v397, v398, v399, v400, v401, v402, v403, v404, v405, v406, v407, v408, v409, v410, v411, v412, v413, v414, v415, v416, v417, v418, v419, v420, v421, v422, v423, v424, v425, v426, v427, v428, v429, v430, v431, v432, v433, v434, v435, v436, v437, v438, v439, v440, v441, v442, v443, v444, v445, v446, v447, v448, v449, v450, v451, v452, v453, v454, v455, v456, v457, v458, v459, v460, v461, v462, v463, v464, v465, v466, v467, v468, v469, v470, v471, v472, v473, v474, v475, v476, v477, v478, v479, v480, v481, v482, v483, v484, v485, v486, v487, v488, v489, v490, v491, v492, v493, v494, v495, v496, v497, v498, v499, v500, v501, v502, v503, v504, v505, v506, v507, v508, v509, v510, v511, v512, v513, v514, v515, v516, v517, v518, v519, v520, v521, v522, v523, v524, v525, v526, v527, v528, v529, v530, v531, v532, v533, v534, v535, v536, v537, v538, v539, v540, v541, v542, v543, v544, v545, v546, v547, v548, v549, v550, v551, v552, v553, v554, v555, v556, v557, v558, v559, v560, v561, v562, v563, v564, v565, v566, v567, v568, v569, v570, v571, v572, v573, v574, v575, v576, v577, v578, v579, v580, v581, v582, v583, v584, v585, v586, v587, v588, v589, v590, v591, v592, v593, v594, v595, v596, v597, v598, v599, v600, v601, v602, v603, v604, v605, v606, v607, v608, v609, v610, v611, v612, v613, v614, v615, v616, v617, v618, v619, v620, v621, v622, v623, v624, v625, v626, v627, v628, v629, v630, v631, v632, v633, v634, v635, v636, v637, v638, v639, v640, v641, v642, v643, v644, v645, v646, v647, v648, v649, v650, v651, v652, v653, v654, v655, v656, v657, v658, v659, v660, v661, v662, v663, v664, v665, v666, v667, v668, v669, v670, v671, v672, v673, v674, v675, v676, v677, v678, v679, v680, v681, v682, v683, v684, v685, v686, v687, v688, v689, v690, v691, v692, v693, v694, v695, v696, v697, v698, v699, v700, v701, v702, v703, v704, v705, v706, v707, v708, v709, v710, v711, v712, v713, v714, v715, v716, v717, v718, v719, v720, v721, v722, v723, v724, v725, v726, v727, v728, v729, v730, v731, v732, v733, v734, v735, v736, v737, v738, v739, v740, v741, v742, v743, v744, v745, v746, v747, v748, v749, v750, v751, v752, v753, v754, v755, v756, v757, v758, v759, v760, v761, v762, v763, v764, v765, v766, v767, v768, v769, v770, v771, v772, v773, v774, v775, v776, v777, v778, v779, v780, v781, v782, v783, v784, v785, v786, v787, v788, v789, v790, v791, v792, v793, v794, v795, v796, v797, v798, v799, v800, v801, v802, v803, v804, v805, v806, v807, v808, v809, v810, v811, v812, v813, v814, v815, v816, v817, v818, v819, v820, v821, v822, v823, v824, v825, v826, v827, v828, v829, v830, v831, v832, v833, v834, v835, v836, v837, v838, v839, v840, v841, v842, v843, v844, v845, v846, v847, v848, v849, v850, v851, v852, v853, v854, v855, v856, v857, v858, v859, v860, v861, v862, v863, v864, v865, v866, v867, v868, v869, v870, v871, v872, v873, v874, v875, v876, v877, v878, v879, v880, v881, v882, v883, v884, v885, v886, v887, v888, v889, v890, v891, v892, v893, v894, v895, v896, v897, v898, v899, v900, v901, v902, v903, v904, v905, v906, v907, v908, v909, v910, v911, v912, v913, v914, v915, v916, v917, v918, v919, v920, v921, v922, v923, v924, v925, v926, v927, v928, v929, v930, v931, v932, v933, v934, v935, v936, v937, v938, v939, v940, v941, v942, v943, v944, v945, v946, v947, v948, v949, v950, v951, v952, v953, v954, v955, v956, v957, v958, v959, v960, v961, v962, v963, v964, v965, v966, v967, v968, v969, v970, v971, v972, v973, v974, v975, v976, v977, v978, v979, v980, v981, v982, v983, v984, v985, v986, v987, v988, v989, v990, v991, v992, v993, v994, v995, v996, v997, v998, v999, v1000, v1001, v1002, v1003, v1004, v1005, v1006, v1007, v1008, v1009, v1010, v1011, v1012, v1013, v1014, v1015, v1016, v1017, v1018, v1019, v1020, v1021, v1022, v1023, v1024, v1025, v1026, v1027, v1028, v1029, v1030, v1031, v1032, v1033, v1034, v1035, v1036, v1037, v1038, v1039, v1040, v1041, v1042, v1043, v1044, v1045, v1046, v1047, v1048, v1049, v1050, v1051, v1052, v1053, v1054, v1055, v1056, v1057, v1058, v1059, v1060, v1061, v1062, v1063, v1064, v1065, v1066, v1067, v1068, v1069, v1070, v1071, v1072, v1073, v1074, v1075, v1076, v1077, v1078, v1079, v1080, v1081, v1082, v1083, v1084, v1085, v1086, v1087, v1088, v1089, v1090, v1091, v1092, v1093, v1094, v1095, v1096, v1097, v1098, v1099, v1100, v1101, v1102, v1103, v1104, v1105, v1106, v1107, v1108, v1109, v1110, v1111, v1112, v1113, v1114, v1115, v1116, v1117, v1118, v1119, v1120, v1121, v1122, v1123, v1124, v1125, v1126, v1127, v1128, v1129, v1130, v1131, v1132, v1133, v1134, v1135, v1136, v1137, v1138, v1139, v1140, v1141, v1142, v1143, v1144, v1145, v1146, v1147, v1148, v1149, v1150, v1151, v1152, v1153, v1154, v1155, v1156, v1157, v1158, v1159, v1160, v1161, v1162, v1163, v1164, v1165, v1166, v1167, v1168, v1169, v1170, v1171, v1172, v1173, v1174, v1175, v1176, v1177, v1178, v1179, v1180, v1181, v1182, v1183, v1184, v1185, v1186, v1187, v1188, v1189, v1190, v1191, v1192, v1193, v1194, v1195, v1196, v1197, v1198, v1199, v1200, v1201, v1202, v1203, v1204, v1205, v1206, v1207, v1208, v1209, v1210, v1211, v1212, v1213, v1214, v1215, v1216, v1217, v1218, v1219, v1220, v1221, v1222, v1223, v1224, v1225, v1226, v1227, v1228, v1229, v1230, v1231, v1232, v1233, v1234, v1235, v1236, v1237, v1238, v1239, v1240, v1241, v1242, v1243, v1244, v1245, v1246, v1247, v1248, v1249, v1250, v1251, v1252, v1253, v1254, v1255, v1256, v1257, v1258, v1259, v1260, v1261, v1262, v1263, v1264, v1265, v1266, v1267, v1268, v1269, v1270, v1271, v1272, v1273, v1274, v1275, v1276, v1277, v1278, v1279, v1280, v1281, v1282, v1283, v1284, v1285, v1286, v1287, v1288, v1289, v1290, v1291, v1292, v1293, v1294, v1295, v1296, v1297, v1298, v1299, v1300, v1301, v1302, v1303, v1304, v1305, v1306, v1307, v1308, v1309, v1310, v1311, v1312, v1313, v1314, v1315, v1316, v1317, v1318, v1319, v1320, v1321, v1322, v1323, v1324, v1325, v1326, v1327, v1328, v1329, v1330, v1331, v1332, v1333, v1334, v1335, v1336, v1337, v1338, v1339, v1340, v1341, v1342, v1343, v1344, v1345, v1346, v1347, v1348, v1349, v1350, v1351, v1352, v1353, v1354, v1355, v1356, v1357, v1358, v1359, v1360, v1361, v1362, v1363, v1364, v1365, v1366, v1367, v1368, v1369, v1370, v1371, v1372, v1373, v1374, v1375, v1376, v1377, v1378, v1379, v1380, v1381, v1382, v1383, v1384, v1385, v1386, v1387, v1388, v1389, v1390, v1391, v1392, v1393, v1394, v1395, v1396, v1397, v1398, v1399, v1400, v1401, v1402, v1403, v1404, v1405, v1406, v1407, v1408, v1409, v1410, v1411, v1412, v1413, v1414, v1415, v1416, v1417, v1418, v1419, v1420, v1421, v1422, v1423, v1424, v1425, v1426, v1427, v1428, v1429, v1430, v1431, v1432, v1433, v1434, v1435, v1436, v1437, v1438, v1439, v1440, v1441, v1442, v1443, v1444, v1445, v1446, v1447, v1448, v1449, v1450, v1451, v1452, v1453, v1454, v1455, v1456, v1457, v1458, v1459, v1460, v1461, v1462, v1463, v1464, v1465, v1466, v1467, v1468, v1469, v1470, v1471, v1472, v1473, v1474, v1475, v1476, v1477, v1478, v1479, v1480, v1481, v1482, v1483, v1484, v1485, v1486, v1487, v1488, v1489, v1490, v1491, v1492, v1493, v1494, v1495, v1496, v1497, v1498, v1499, v1500, v1501, v1502, v1503, v1504, v1505, v1506, v1507, v1508, v1509, v1510, v1511, v1512, v1513, v1514, v1515, v1516, v1517, v1518, v1519, v1520, v1521, v1522, v1523, v1524, v1525, v1526, v1527, v1528, v1529, v1530, v1531, v1532, v1533, v1534, v1535, v1536, v1537, v1538, v1539, v1540, v1541, v1542, v1543, v1544, v1545, v1546, v1547, v1548, v1549, v1550, v1551, v1552, v1553, v1554, v1555, v1556, v1557, v1558, v1559, v1560, v1561, v1562, v1563, v1564, v1565, v1566, v1567, v1568, v1569, v1570, v1571, v1572, v1573, v1574, v1575, v1576, v1577, v1578, v1579, v1580, v1581, v1582, v1583, v1584, v1585, v1586, v1587, v1588, v1589, v1590, v1591, v1592, v1593, v1594, v1595, v1596, v1597, v1598, v1599, v1600, v1601, v1602, v1603, v1604, v1605, v1606, v1607, v1608, v1609, v1610, v1611, v1612, v1613, v1614, v1615, v1616, v1617, v1618, v1619, v1620, v1621, v1622, v1623, v1624, v1625, v1626, v1627, v1628, v1629, v1630, v1631, v1632, v1633, v1634, v1635, v1636, v1637, v1638, v1639, v1640, v1641, v1642, v1643, v1644, v1645, v1646, v1647, v1648, v1649, v1650, v1651, v1652, v1653, v1654, v1655, v1656, v1657, v1658, v1659, v1660, v1661, v1662, v1663, v1664, v1665, v1666, v1667, v1668, v1669, v1670, v1671, v1672, v1673, v1674, v1675, v1676, v1677, v1678, v1679, v1680, v1681, v1682, v1683, v1684, v1685, v1686, v1687, v1688, v1689, v1690, v1691, v1692, v1693, v1694, v1695, v1696, v1697, v1698, v1699, v1700, v1701, v1702, v1703, v1704, v1705, v1706, v1707, v1708, v1709, v1710, v1711, v1712, v1713, v1714, v1715, v1716, v1717, v1718, v1719, v1720, v1721, v1722, v1723, v1724, v1725, v1726, v1727, v1728, v1729, v1730, v1731, v1732, v1733, v1734, v1735, v1736, v1737, v1738, v1739, v1740, v1741, v1742, v1743, v1744, v1745, v1746, v1747, v1748, v1749, v1750, v1751, v1752, v1753, v1754, v1755, v1756, v1757, v1758, v1759, v1760, v1761, v1762, v1763, v1764, v1765, v1766, v1767, v1768, v1769, v1770, v1771, v1772, v1773, v1774, v1775, v1776, v1777, v1778, v1779, v1780, v1781, v1782, v1783, v1784, v1785, v1786, v1787, v1788, v1789, v1790, v1791, v1792, v1793, v1794, v1795, v1796, v1797, v1798, v1799, v1800, v1801, v1802, v1803, v1804, v1805, v1806, v1807, v1808, v1809, v1810, v1811, v1812, v1813, v1814, v1815, v1816, v1817, v1818, v1819, v1820, v1821, v1822, v1823, v1824, v1825, v1826, v1827, v1828, v1829, v1830, v1831, v1832, v1833, v1834, v1835, v1836, v1837, v1838, v1839, v1840, v1841, v1842, v1843, v1844, v1845, v1846, v1847, v1848, v1849, v1850, v1851, v1852, v1853, v1854, v1855, v1856, v1857, v1858, v1859, v1860, v1861, v1862, v1863, v1864, v1865, v1866, v1867, v1868, v1869, v1870, v1871, v1872, v1873, v1874, v1875, v1876, v1877, v1878, v1879, v1880, v1881, v1882, v1883, v1884, v1885, v1886, v1887] : [Field; 1848]
    v1889 = allocate -> &mut [Field; 1848]
    store v1888 at v1889
    jmp b1(u32 0)
  b1(v38: u32):
    v1891 = lt v38, u32 1847
    jmpif v1891 then: b3, else: b2
  b2():
    v1892 = load v1889 -> [Field; 1848]
    return v1892
  b3():
    v1893 = load v1889 -> [Field; 1848]
    v1895 = add v38, u32 1
    v1896 = array_get v37, index v38 -> Field
    v1897 = array_set v1893, index v1895, value v1896
    v1898 = unchecked_add v1895, u32 1
    store v1897 at v1889
    v1899 = unchecked_add v38, u32 1
    jmp b1(v1899)
}

Comment on lines 14 to 18
// Bottom-up order, starting with the "leaf" functions, so we inline already optimized code into the ones that call them.
let bottom_up = inlining::compute_bottom_up_order(&self);
let not_to_inline = inlining::get_functions_to_inline_into(&self, false, aggressiveness);

for id in bottom_up.into_iter().filter(|id| !not_to_inline.contains(id)) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@TomAFrench do you reckon that this kind of bottoms-up ordering and the folding functions makes sense? Maybe not exactly like this (you mentioned doing stuff in parallel, and limiting which function it gets applied to), but as a general direction?

Copy link
Member

@TomAFrench TomAFrench Jan 16, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, it looks sensible to me from a quick skim. The execution failures we're getting on the protocol circuits seem real though (rather than just having stale inputs) so something is up.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It was because of calling the DIE pass; included an example in the PR description:

After Removing Paired rc_inc & rc_decs:
...
acir(inline) fn Add10 f1 {
  b0(v0: &mut Field):
    v1 = load v0 -> Field
    v2 = load v0 -> Field
    v4 = add v2, Field 10
    store v4 at v0
    return
}

After Pre-processing Functions:
...
acir(inline) fn Add10 f1 {
  b0(v0: &mut Field):
    return                              # Whole function body got eliminated!
}

It sees store v4 at v0 as a dead instruction.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks like we need to pass some extra context to the can_eliminate_if_unused method on Instruction

// Store instructions must be removed by DIE in acir code, any load

@aakoshh aakoshh changed the title feat(ssa): Pass to pre-process functions feat(ssa): Pass to preprocess functions Jan 16, 2025
Copy link
Contributor

github-actions bot commented Jan 16, 2025

Changes to number of Brillig opcodes executed

Generated at commit: 01b310b372f65fb13e6c040eb187673a2de10db9, compared to commit: ad5a9808ab7c2a89beadb6f95c664441ee27a5f8

🧾 Summary (10% most significant diffs)

Program Brillig opcodes (+/-) %
higher_order_functions_inliner_max +1,054 ❌ +1064.65%
brillig_fns_as_values_inliner_zero +160 ❌ +888.89%
higher_order_functions_inliner_zero +514 ❌ +38.76%
brillig_fns_as_values_inliner_min +69 ❌ +25.18%

Full diff report 👇
Program Brillig opcodes (+/-) %
higher_order_functions_inliner_max 1,153 (+1,054) +1064.65%
brillig_fns_as_values_inliner_zero 178 (+160) +888.89%
higher_order_functions_inliner_zero 1,840 (+514) +38.76%
brillig_fns_as_values_inliner_min 343 (+69) +25.18%
slices_inliner_zero 3,917 (+257) +7.02%
slices_inliner_min 4,809 (+185) +4.00%
higher_order_functions_inliner_min 2,878 (+62) +2.20%
hashmap_inliner_zero 76,420 (+535) +0.71%
sha256_inliner_min 18,584 (+76) +0.41%
hashmap_inliner_min 113,917 (+408) +0.36%
uhashmap_inliner_min 230,214 (+408) +0.18%
uhashmap_inliner_zero 176,297 (+233) +0.13%
sha256_regression_inliner_max 111,646 (+141) +0.13%
sha256_regression_inliner_min 161,295 (+86) +0.05%
sha256_var_padding_regression_inliner_min 271,083 (+90) +0.03%
sha256_inliner_max 13,197 (+4) +0.03%
sha256_var_padding_regression_inliner_max 196,670 (+6) +0.00%
sha256_var_padding_regression_inliner_zero 265,671 (-24) -0.01%
sha256_regression_inliner_zero 155,415 (-28) -0.02%
hashmap_inliner_max 48,525 (-60) -0.12%
uhashmap_inliner_max 137,407 (-289) -0.21%
slice_regex_inliner_zero 4,054 (-32) -0.78%
slice_regex_inliner_max 3,366 (-68) -1.98%
regression_6674_2_inliner_max 610 (-165) -21.29%
regression_6674_2_inliner_zero 626 (-183) -22.62%

Copy link
Contributor

github-actions bot commented Jan 16, 2025

Changes to Brillig bytecode sizes

Generated at commit: 01b310b372f65fb13e6c040eb187673a2de10db9, compared to commit: ad5a9808ab7c2a89beadb6f95c664441ee27a5f8

🧾 Summary (10% most significant diffs)

Program Brillig opcodes (+/-) %
higher_order_functions_inliner_max +571 ❌ +815.71%
brillig_fns_as_values_inliner_zero +113 ❌ +565.00%
higher_order_functions_inliner_zero +201 ❌ +30.18%
regression_6674_2_inliner_zero -47 ✅ -22.60%

Full diff report 👇
Program Brillig opcodes (+/-) %
higher_order_functions_inliner_max 641 (+571) +815.71%
brillig_fns_as_values_inliner_zero 133 (+113) +565.00%
higher_order_functions_inliner_zero 867 (+201) +30.18%
slices_inliner_zero 2,176 (+84) +4.02%
hashmap_inliner_zero 8,081 (+112) +1.41%
sha256_inliner_min 1,475 (+15) +1.03%
sha256_var_padding_regression_inliner_min 3,300 (+9) +0.27%
sha256_regression_inliner_max 6,689 (+13) +0.19%
sha256_inliner_max 2,288 (+4) +0.18%
sha256_regression_inliner_min 5,355 (+7) +0.13%
sha256_var_padding_regression_inliner_max 4,910 (+6) +0.12%
hashmap_inliner_max 19,770 (-8) -0.04%
sha256_regression_inliner_zero 4,861 (-8) -0.16%
sha256_var_padding_regression_inliner_zero 2,957 (-6) -0.20%
slices_inliner_min 2,617 (-16) -0.61%
uhashmap_inliner_min 9,734 (-94) -0.96%
uhashmap_inliner_zero 7,479 (-76) -1.01%
slice_regex_inliner_zero 1,619 (-32) -1.94%
uhashmap_inliner_max 12,450 (-261) -2.05%
hashmap_inliner_min 12,336 (-299) -2.37%
slice_regex_inliner_max 2,134 (-78) -3.53%
higher_order_functions_inliner_min 1,319 (-125) -8.66%
regression_6674_2_inliner_max 207 (-25) -10.78%
brillig_fns_as_values_inliner_min 198 (-25) -11.21%
regression_6674_2_inliner_zero 161 (-47) -22.60%

Copy link
Contributor

github-actions bot commented Jan 16, 2025

Changes to circuit sizes

Generated at commit: 01b310b372f65fb13e6c040eb187673a2de10db9, compared to commit: ad5a9808ab7c2a89beadb6f95c664441ee27a5f8

🧾 Summary (10% most significant diffs)

Program ACIR opcodes (+/-) % Circuit size (+/-) %
sha256_var_size_regression +212 ❌ +2.08% +305 ❌ +0.48%
hashmap -322 ✅ -0.87% -1,025 ✅ -1.04%

Full diff report 👇
Program ACIR opcodes (+/-) % Circuit size (+/-) %
sha256_var_size_regression 10,404 (+212) +2.08% 63,268 (+305) +0.48%
sha256_var_witness_const_regression 1,128 (+53) +4.93% 16,554 (+77) +0.47%
sha256 1,489 (+53) +3.69% 24,659 (+76) +0.31%
sha256_regression 22,448 (+106) +0.47% 180,538 (+152) +0.08%
hashmap 36,578 (-322) -0.87% 97,555 (-1,025) -1.04%

@aakoshh aakoshh force-pushed the af/ssa-preprocess-fns branch from 5817baf to 80872e5 Compare January 16, 2025 14:17
@aakoshh aakoshh marked this pull request as ready for review January 17, 2025 01:34
@aakoshh
Copy link
Contributor Author

aakoshh commented Jan 17, 2025

I investigated the increase of bytecode size of brillig_fns_as_values_inliner_zero; it was down to a series of lucky bugs 🐞 that it was earlier able to optimise the SSA down to nothing with --force-brillig --inliner-aggressiveness 0:

  • the test involves passing functions as values to higher order functions that take lambdas
  • this triggers defunctionalize, however the apply function it created did not inherit the runtime of the caller, so even with --force-brillig it was acir
  • this caused the inliner to ignore the cost of inlining for apply, because it only looks at the cost of inlining brillig functions; it got inlined into main and then with the constant propagation it realised that the constraints are trivially true

With the preprocessing pass this changed:

  • apply was inlined into an intermediate brillig function, not main (preprocessing does not run on entry points)
  • when it came to inlining, the intermediate function was not inlined into main, because its cost was larger than --inliner-aggressiveness 0 allowed

I fixed a few things:

  • separated the inlining decision to consider entry points and brillig costs separately, which allowed inlining more brillig functions
  • remove unreachable brillig functions that inlining now bypassed
  • fixed defunctionalisation to inherit the runtime and do away with some needless blocks

The result of these fixes is that the cost is bytecode size is higher than it was, but now it's high even if we use --skip-preprocess-fns, because it should not have been that low in the first place. It can still reduce everything down to nothing, just needs more aggressive inliner setting.

I'll investigate why higher_order_functions_inliner_max has grown.

@aakoshh
Copy link
Contributor Author

aakoshh commented Jan 17, 2025

I think the same thing happened with higher_order_functions:

$ cd test_programs/execution_success/higher_order_functions
$ cargo run -q -p nargo_cli -- --program-dir . info --force --silence-warnings --inliner-aggressiveness 9223372036854775807
+------------------------+----------+----------------------+--------------+-----------------+
| Package                | Function | Expression Width     | ACIR Opcodes | Brillig Opcodes |
+------------------------+----------+----------------------+--------------+-----------------+
| higher_order_functions | main     | Bounded { width: 4 } | 1            | 0               |
+------------------------+----------+----------------------+--------------+-----------------+
$ cargo run -q -p nargo_cli -- --program-dir . info --force --silence-warnings --inliner-aggressiveness 9223372036854775807 --force-brillig
+------------------------+----------+----------------------+--------------+-----------------+
| Package                | Function | Expression Width     | ACIR Opcodes | Brillig Opcodes |
+------------------------+----------+----------------------+--------------+-----------------+
| higher_order_functions | main     | Bounded { width: 4 } | 1            | 641             |
+------------------------+----------+----------------------+--------------+-----------------+
| higher_order_functions | main     | N/A                  | N/A          | 641             |
+------------------------+----------+----------------------+--------------+-----------------+
$ cargo run -q -p nargo_cli -- --program-dir . info --force --silence-warnings --inliner-aggressiveness 9223372036854775807 --force-brillig --skip-preprocess-fns
+------------------------+----------+----------------------+--------------+-----------------+
| Package                | Function | Expression Width     | ACIR Opcodes | Brillig Opcodes |
+------------------------+----------+----------------------+--------------+-----------------+
| higher_order_functions | main     | Bounded { width: 4 } | 1            | 641             |
+------------------------+----------+----------------------+--------------+-----------------+
| higher_order_functions | main     | N/A                  | N/A          | 641             |
+------------------------+----------+----------------------+--------------+-----------------+
$ git checkout master
Switched to branch 'master'
Your branch is up to date with 'origin/master'.

$ cargo run -q -p nargo_cli -- --program-dir . info --force --silence-warnings --inliner-aggressiveness 9223372036854775807 --force-brillig
+------------------------+----------+----------------------+--------------+-----------------+
| Package                | Function | Expression Width     | ACIR Opcodes | Brillig Opcodes |
+------------------------+----------+----------------------+--------------+-----------------+
| higher_order_functions | main     | Bounded { width: 4 } | 1            | 70              |
+------------------------+----------+----------------------+--------------+-----------------+
| higher_order_functions | main     | N/A                  | N/A          | 70              |
+------------------------+----------+----------------------+--------------+-----------------+

We can see that:

  • Without --force-brillig it can optimise everything down to nothing
  • There is no difference between using --skip-preprocess-fns or not
  • On master the cost is much lower, potentially because it inlined things it should not have - although in this case it's interesting that it still does not inline them even with maximum --inliner-aggressiveness 🤔 Actually the (incorrect) presence of acir fn apply functions prevented the brillig functions they call from being inlined; maybe that caused something to be different down the line.

@aakoshh aakoshh requested a review from a team January 17, 2025 02:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: 📋 Backlog
Development

Successfully merging this pull request may close these issues.

3 participants