1. Hash each cell. Split every row into aligned cells of L extension-field elements. Cell j starts at offset jL, then its base-field limbs are chunked and chain-hashed into one 8-FE digest.
celli,j=Ci[jL..(j+1)L)∈EL
qi,j=Hchain(chunks(limbsF(celli,j)))∈F8
2. Chain only systematic cell digests into one digest per row. The row digest ignores parity cells.
rowi=Hchain(qi,0,…,qi,Nsys−1)
Rrows=Hchain(row0,…,rowB−1)
3. Merkle-commit each column, then bind row and column commitments together. Non-power-of-two row counts are zero-padded inside each column tree.
colj=Merkle(q0,j,q1,j,…,qB−1,j,0,…,0)
Rcol=Merkle(col0,…,colN−1)
D=H(Rrows,Rcol),r=D
4. Run the standard row barycentric LDT. The same evens/odds identity is checked for every row.
j=0∑M−1sL[j]Ci[2j]=j=0∑M−1sR[j]Ci[2j+1]