package com.kamikaze.pfordelta;
/**
* This is a version of the kamikaze PForDelta library that was slightly cleaned
* up by D. Lemire. It is included in the JavaFastPFOR library for comparison
* purposes. As the original
*/
public class PForDeltaUnpack128 {
static protected void unpack(int[] out, int[] in, int bits) {
switch (bits) {
case 0:
unpack0(out, in);
break;
case 1:
unpack1(out, in);
break;
case 2:
unpack2(out, in);
break;
case 3:
unpack3(out, in);
break;
case 4:
unpack4(out, in);
break;
case 5:
unpack5(out, in);
break;
case 6:
unpack6(out, in);
break;
case 7:
unpack7(out, in);
break;
case 8:
unpack8(out, in);
break;
case 9:
unpack9(out, in);
break;
case 10:
unpack10(out, in);
break;
case 11:
unpack11(out, in);
break;
case 12:
unpack12(out, in);
break;
case 13:
unpack13(out, in);
break;
case 16:
unpack16(out, in);
break;
case 20:
unpack20(out, in);
break;
case 28:
unpack28(out, in);
break;
default:
break;
}
}
static private void unpack0(int[] out, int[] in) {
}
static private void unpack1(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 1;
for (i = 0, w = 1; i < 4; ++i, w += 1) {
int curInputValue0 = in[w];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 1) & mask;
out[2 + outOffset] = (curInputValue0 >>> 2) & mask;
out[3 + outOffset] = (curInputValue0 >>> 3) & mask;
out[4 + outOffset] = (curInputValue0 >>> 4) & mask;
out[5 + outOffset] = (curInputValue0 >>> 5) & mask;
out[6 + outOffset] = (curInputValue0 >>> 6) & mask;
out[7 + outOffset] = (curInputValue0 >>> 7) & mask;
out[8 + outOffset] = (curInputValue0 >>> 8) & mask;
out[9 + outOffset] = (curInputValue0 >>> 9) & mask;
out[10 + outOffset] = (curInputValue0 >>> 10) & mask;
out[11 + outOffset] = (curInputValue0 >>> 11) & mask;
out[12 + outOffset] = (curInputValue0 >>> 12) & mask;
out[13 + outOffset] = (curInputValue0 >>> 13) & mask;
out[14 + outOffset] = (curInputValue0 >>> 14) & mask;
out[15 + outOffset] = (curInputValue0 >>> 15) & mask;
out[16 + outOffset] = (curInputValue0 >>> 16) & mask;
out[17 + outOffset] = (curInputValue0 >>> 17) & mask;
out[18 + outOffset] = (curInputValue0 >>> 18) & mask;
out[19 + outOffset] = (curInputValue0 >>> 19) & mask;
out[20 + outOffset] = (curInputValue0 >>> 20) & mask;
out[21 + outOffset] = (curInputValue0 >>> 21) & mask;
out[22 + outOffset] = (curInputValue0 >>> 22) & mask;
out[23 + outOffset] = (curInputValue0 >>> 23) & mask;
out[24 + outOffset] = (curInputValue0 >>> 24) & mask;
out[25 + outOffset] = (curInputValue0 >>> 25) & mask;
out[26 + outOffset] = (curInputValue0 >>> 26) & mask;
out[27 + outOffset] = (curInputValue0 >>> 27) & mask;
out[28 + outOffset] = (curInputValue0 >>> 28) & mask;
out[29 + outOffset] = (curInputValue0 >>> 29) & mask;
out[30 + outOffset] = (curInputValue0 >>> 30) & mask;
out[31 + outOffset] = curInputValue0 >>> 31;
outOffset += 32;
}
}
static private void unpack2(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 3;
for (i = 0, w = 1; i < 4; ++i, w += 2) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 2) & mask;
out[2 + outOffset] = (curInputValue0 >>> 4) & mask;
out[3 + outOffset] = (curInputValue0 >>> 6) & mask;
out[4 + outOffset] = (curInputValue0 >>> 8) & mask;
out[5 + outOffset] = (curInputValue0 >>> 10) & mask;
out[6 + outOffset] = (curInputValue0 >>> 12) & mask;
out[7 + outOffset] = (curInputValue0 >>> 14) & mask;
out[8 + outOffset] = (curInputValue0 >>> 16) & mask;
out[9 + outOffset] = (curInputValue0 >>> 18) & mask;
out[10 + outOffset] = (curInputValue0 >>> 20) & mask;
out[11 + outOffset] = (curInputValue0 >>> 22) & mask;
out[12 + outOffset] = (curInputValue0 >>> 24) & mask;
out[13 + outOffset] = (curInputValue0 >>> 26) & mask;
out[14 + outOffset] = (curInputValue0 >>> 28) & mask;
out[15 + outOffset] = curInputValue0 >>> 30;
out[16 + outOffset] = curInputValue1 & mask;
out[17 + outOffset] = (curInputValue1 >>> 2) & mask;
out[18 + outOffset] = (curInputValue1 >>> 4) & mask;
out[19 + outOffset] = (curInputValue1 >>> 6) & mask;
out[20 + outOffset] = (curInputValue1 >>> 8) & mask;
out[21 + outOffset] = (curInputValue1 >>> 10) & mask;
out[22 + outOffset] = (curInputValue1 >>> 12) & mask;
out[23 + outOffset] = (curInputValue1 >>> 14) & mask;
out[24 + outOffset] = (curInputValue1 >>> 16) & mask;
out[25 + outOffset] = (curInputValue1 >>> 18) & mask;
out[26 + outOffset] = (curInputValue1 >>> 20) & mask;
out[27 + outOffset] = (curInputValue1 >>> 22) & mask;
out[28 + outOffset] = (curInputValue1 >>> 24) & mask;
out[29 + outOffset] = (curInputValue1 >>> 26) & mask;
out[30 + outOffset] = (curInputValue1 >>> 28) & mask;
out[31 + outOffset] = curInputValue1 >>> 30;
outOffset += 32;
}
}
static private void unpack3(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 7;
for (i = 0, w = 1; i < 4; ++i, w += 3) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 3) & mask;
out[2 + outOffset] = (curInputValue0 >>> 6) & mask;
out[3 + outOffset] = (curInputValue0 >>> 9) & mask;
out[4 + outOffset] = (curInputValue0 >>> 12) & mask;
out[5 + outOffset] = (curInputValue0 >>> 15) & mask;
out[6 + outOffset] = (curInputValue0 >>> 18) & mask;
out[7 + outOffset] = (curInputValue0 >>> 21) & mask;
out[8 + outOffset] = (curInputValue0 >>> 24) & mask;
out[9 + outOffset] = (curInputValue0 >>> 27) & mask;
out[10 + outOffset] = ((curInputValue0 >>> 30) | (curInputValue1 << 2))
& mask;
out[11 + outOffset] = (curInputValue1 >>> 1) & mask;
out[12 + outOffset] = (curInputValue1 >>> 4) & mask;
out[13 + outOffset] = (curInputValue1 >>> 7) & mask;
out[14 + outOffset] = (curInputValue1 >>> 10) & mask;
out[15 + outOffset] = (curInputValue1 >>> 13) & mask;
out[16 + outOffset] = (curInputValue1 >>> 16) & mask;
out[17 + outOffset] = (curInputValue1 >>> 19) & mask;
out[18 + outOffset] = (curInputValue1 >>> 22) & mask;
out[19 + outOffset] = (curInputValue1 >>> 25) & mask;
out[20 + outOffset] = (curInputValue1 >>> 28) & mask;
out[21 + outOffset] = ((curInputValue1 >>> 31) | (curInputValue2 << 1))
& mask;
out[22 + outOffset] = (curInputValue2 >>> 2) & mask;
out[23 + outOffset] = (curInputValue2 >>> 5) & mask;
out[24 + outOffset] = (curInputValue2 >>> 8) & mask;
out[25 + outOffset] = (curInputValue2 >>> 11) & mask;
out[26 + outOffset] = (curInputValue2 >>> 14) & mask;
out[27 + outOffset] = (curInputValue2 >>> 17) & mask;
out[28 + outOffset] = (curInputValue2 >>> 20) & mask;
out[29 + outOffset] = (curInputValue2 >>> 23) & mask;
out[30 + outOffset] = (curInputValue2 >>> 26) & mask;
out[31 + outOffset] = curInputValue2 >>> 29;
outOffset += 32;
}
}
static private void unpack4(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 15;
for (i = 0, w = 1; i < 4; ++i, w += 4) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 4) & mask;
out[2 + outOffset] = (curInputValue0 >>> 8) & mask;
out[3 + outOffset] = (curInputValue0 >>> 12) & mask;
out[4 + outOffset] = (curInputValue0 >>> 16) & mask;
out[5 + outOffset] = (curInputValue0 >>> 20) & mask;
out[6 + outOffset] = (curInputValue0 >>> 24) & mask;
out[7 + outOffset] = curInputValue0 >>> 28;
out[8 + outOffset] = curInputValue1 & mask;
out[9 + outOffset] = (curInputValue1 >>> 4) & mask;
out[10 + outOffset] = (curInputValue1 >>> 8) & mask;
out[11 + outOffset] = (curInputValue1 >>> 12) & mask;
out[12 + outOffset] = (curInputValue1 >>> 16) & mask;
out[13 + outOffset] = (curInputValue1 >>> 20) & mask;
out[14 + outOffset] = (curInputValue1 >>> 24) & mask;
out[15 + outOffset] = curInputValue1 >>> 28;
out[16 + outOffset] = curInputValue2 & mask;
out[17 + outOffset] = (curInputValue2 >>> 4) & mask;
out[18 + outOffset] = (curInputValue2 >>> 8) & mask;
out[19 + outOffset] = (curInputValue2 >>> 12) & mask;
out[20 + outOffset] = (curInputValue2 >>> 16) & mask;
out[21 + outOffset] = (curInputValue2 >>> 20) & mask;
out[22 + outOffset] = (curInputValue2 >>> 24) & mask;
out[23 + outOffset] = curInputValue2 >>> 28;
out[24 + outOffset] = curInputValue3 & mask;
out[25 + outOffset] = (curInputValue3 >>> 4) & mask;
out[26 + outOffset] = (curInputValue3 >>> 8) & mask;
out[27 + outOffset] = (curInputValue3 >>> 12) & mask;
out[28 + outOffset] = (curInputValue3 >>> 16) & mask;
out[29 + outOffset] = (curInputValue3 >>> 20) & mask;
out[30 + outOffset] = (curInputValue3 >>> 24) & mask;
out[31 + outOffset] = curInputValue3 >>> 28;
outOffset += 32;
}
}
static private void unpack5(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 31;
for (i = 0, w = 1; i < 4; ++i, w += 5) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 5) & mask;
out[2 + outOffset] = (curInputValue0 >>> 10) & mask;
out[3 + outOffset] = (curInputValue0 >>> 15) & mask;
out[4 + outOffset] = (curInputValue0 >>> 20) & mask;
out[5 + outOffset] = (curInputValue0 >>> 25) & mask;
out[6 + outOffset] = ((curInputValue0 >>> 30) | (curInputValue1 << 2))
& mask;
out[7 + outOffset] = (curInputValue1 >>> 3) & mask;
out[8 + outOffset] = (curInputValue1 >>> 8) & mask;
out[9 + outOffset] = (curInputValue1 >>> 13) & mask;
out[10 + outOffset] = (curInputValue1 >>> 18) & mask;
out[11 + outOffset] = (curInputValue1 >>> 23) & mask;
out[12 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[13 + outOffset] = (curInputValue2 >>> 1) & mask;
out[14 + outOffset] = (curInputValue2 >>> 6) & mask;
out[15 + outOffset] = (curInputValue2 >>> 11) & mask;
out[16 + outOffset] = (curInputValue2 >>> 16) & mask;
out[17 + outOffset] = (curInputValue2 >>> 21) & mask;
out[18 + outOffset] = (curInputValue2 >>> 26) & mask;
out[19 + outOffset] = ((curInputValue2 >>> 31) | (curInputValue3 << 1))
& mask;
out[20 + outOffset] = (curInputValue3 >>> 4) & mask;
out[21 + outOffset] = (curInputValue3 >>> 9) & mask;
out[22 + outOffset] = (curInputValue3 >>> 14) & mask;
out[23 + outOffset] = (curInputValue3 >>> 19) & mask;
out[24 + outOffset] = (curInputValue3 >>> 24) & mask;
out[25 + outOffset] = ((curInputValue3 >>> 29) | (curInputValue4 << 3))
& mask;
out[26 + outOffset] = (curInputValue4 >>> 2) & mask;
out[27 + outOffset] = (curInputValue4 >>> 7) & mask;
out[28 + outOffset] = (curInputValue4 >>> 12) & mask;
out[29 + outOffset] = (curInputValue4 >>> 17) & mask;
out[30 + outOffset] = (curInputValue4 >>> 22) & mask;
out[31 + outOffset] = curInputValue4 >>> 27;
outOffset += 32;
}
}
static private void unpack6(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 63;
for (i = 0, w = 1; i < 4; ++i, w += 6) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 6) & mask;
out[2 + outOffset] = (curInputValue0 >>> 12) & mask;
out[3 + outOffset] = (curInputValue0 >>> 18) & mask;
out[4 + outOffset] = (curInputValue0 >>> 24) & mask;
out[5 + outOffset] = ((curInputValue0 >>> 30) | (curInputValue1 << 2))
& mask;
out[6 + outOffset] = (curInputValue1 >>> 4) & mask;
out[7 + outOffset] = (curInputValue1 >>> 10) & mask;
out[8 + outOffset] = (curInputValue1 >>> 16) & mask;
out[9 + outOffset] = (curInputValue1 >>> 22) & mask;
out[10 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[11 + outOffset] = (curInputValue2 >>> 2) & mask;
out[12 + outOffset] = (curInputValue2 >>> 8) & mask;
out[13 + outOffset] = (curInputValue2 >>> 14) & mask;
out[14 + outOffset] = (curInputValue2 >>> 20) & mask;
out[15 + outOffset] = curInputValue2 >>> 26;
out[16 + outOffset] = curInputValue3 & mask;
out[17 + outOffset] = (curInputValue3 >>> 6) & mask;
out[18 + outOffset] = (curInputValue3 >>> 12) & mask;
out[19 + outOffset] = (curInputValue3 >>> 18) & mask;
out[20 + outOffset] = (curInputValue3 >>> 24) & mask;
out[21 + outOffset] = ((curInputValue3 >>> 30) | (curInputValue4 << 2))
& mask;
out[22 + outOffset] = (curInputValue4 >>> 4) & mask;
out[23 + outOffset] = (curInputValue4 >>> 10) & mask;
out[24 + outOffset] = (curInputValue4 >>> 16) & mask;
out[25 + outOffset] = (curInputValue4 >>> 22) & mask;
out[26 + outOffset] = ((curInputValue4 >>> 28) | (curInputValue5 << 4))
& mask;
out[27 + outOffset] = (curInputValue5 >>> 2) & mask;
out[28 + outOffset] = (curInputValue5 >>> 8) & mask;
out[29 + outOffset] = (curInputValue5 >>> 14) & mask;
out[30 + outOffset] = (curInputValue5 >>> 20) & mask;
out[31 + outOffset] = curInputValue5 >>> 26;
outOffset += 32;
}
}
static private void unpack7(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 127;
for (i = 0, w = 1; i < 4; ++i, w += 7) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 7) & mask;
out[2 + outOffset] = (curInputValue0 >>> 14) & mask;
out[3 + outOffset] = (curInputValue0 >>> 21) & mask;
out[4 + outOffset] = ((curInputValue0 >>> 28) | (curInputValue1 << 4))
& mask;
out[5 + outOffset] = (curInputValue1 >>> 3) & mask;
out[6 + outOffset] = (curInputValue1 >>> 10) & mask;
out[7 + outOffset] = (curInputValue1 >>> 17) & mask;
out[8 + outOffset] = (curInputValue1 >>> 24) & mask;
out[9 + outOffset] = ((curInputValue1 >>> 31) | (curInputValue2 << 1))
& mask;
out[10 + outOffset] = (curInputValue2 >>> 6) & mask;
out[11 + outOffset] = (curInputValue2 >>> 13) & mask;
out[12 + outOffset] = (curInputValue2 >>> 20) & mask;
out[13 + outOffset] = ((curInputValue2 >>> 27) | (curInputValue3 << 5))
& mask;
out[14 + outOffset] = (curInputValue3 >>> 2) & mask;
out[15 + outOffset] = (curInputValue3 >>> 9) & mask;
out[16 + outOffset] = (curInputValue3 >>> 16) & mask;
out[17 + outOffset] = (curInputValue3 >>> 23) & mask;
out[18 + outOffset] = ((curInputValue3 >>> 30) | (curInputValue4 << 2))
& mask;
out[19 + outOffset] = (curInputValue4 >>> 5) & mask;
out[20 + outOffset] = (curInputValue4 >>> 12) & mask;
out[21 + outOffset] = (curInputValue4 >>> 19) & mask;
out[22 + outOffset] = ((curInputValue4 >>> 26) | (curInputValue5 << 6))
& mask;
out[23 + outOffset] = (curInputValue5 >>> 1) & mask;
out[24 + outOffset] = (curInputValue5 >>> 8) & mask;
out[25 + outOffset] = (curInputValue5 >>> 15) & mask;
out[26 + outOffset] = (curInputValue5 >>> 22) & mask;
out[27 + outOffset] = ((curInputValue5 >>> 29) | (curInputValue6 << 3))
& mask;
out[28 + outOffset] = (curInputValue6 >>> 4) & mask;
out[29 + outOffset] = (curInputValue6 >>> 11) & mask;
out[30 + outOffset] = (curInputValue6 >>> 18) & mask;
out[31 + outOffset] = curInputValue6 >>> 25;
outOffset += 32;
}
}
static private void unpack8(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 255;
for (i = 0, w = 1; i < 4; ++i, w += 8) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 8) & mask;
out[2 + outOffset] = (curInputValue0 >>> 16) & mask;
out[3 + outOffset] = curInputValue0 >>> 24;
out[4 + outOffset] = curInputValue1 & mask;
out[5 + outOffset] = (curInputValue1 >>> 8) & mask;
out[6 + outOffset] = (curInputValue1 >>> 16) & mask;
out[7 + outOffset] = curInputValue1 >>> 24;
out[8 + outOffset] = curInputValue2 & mask;
out[9 + outOffset] = (curInputValue2 >>> 8) & mask;
out[10 + outOffset] = (curInputValue2 >>> 16) & mask;
out[11 + outOffset] = curInputValue2 >>> 24;
out[12 + outOffset] = curInputValue3 & mask;
out[13 + outOffset] = (curInputValue3 >>> 8) & mask;
out[14 + outOffset] = (curInputValue3 >>> 16) & mask;
out[15 + outOffset] = curInputValue3 >>> 24;
out[16 + outOffset] = curInputValue4 & mask;
out[17 + outOffset] = (curInputValue4 >>> 8) & mask;
out[18 + outOffset] = (curInputValue4 >>> 16) & mask;
out[19 + outOffset] = curInputValue4 >>> 24;
out[20 + outOffset] = curInputValue5 & mask;
out[21 + outOffset] = (curInputValue5 >>> 8) & mask;
out[22 + outOffset] = (curInputValue5 >>> 16) & mask;
out[23 + outOffset] = curInputValue5 >>> 24;
out[24 + outOffset] = curInputValue6 & mask;
out[25 + outOffset] = (curInputValue6 >>> 8) & mask;
out[26 + outOffset] = (curInputValue6 >>> 16) & mask;
out[27 + outOffset] = curInputValue6 >>> 24;
out[28 + outOffset] = curInputValue7 & mask;
out[29 + outOffset] = (curInputValue7 >>> 8) & mask;
out[30 + outOffset] = (curInputValue7 >>> 16) & mask;
out[31 + outOffset] = curInputValue7 >>> 24;
outOffset += 32;
}
}
static private void unpack9(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 511;
for (i = 0, w = 1; i < 4; ++i, w += 9) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 9) & mask;
out[2 + outOffset] = (curInputValue0 >>> 18) & mask;
out[3 + outOffset] = ((curInputValue0 >>> 27) | (curInputValue1 << 5))
& mask;
out[4 + outOffset] = (curInputValue1 >>> 4) & mask;
out[5 + outOffset] = (curInputValue1 >>> 13) & mask;
out[6 + outOffset] = (curInputValue1 >>> 22) & mask;
out[7 + outOffset] = ((curInputValue1 >>> 31) | (curInputValue2 << 1))
& mask;
out[8 + outOffset] = (curInputValue2 >>> 8) & mask;
out[9 + outOffset] = (curInputValue2 >>> 17) & mask;
out[10 + outOffset] = ((curInputValue2 >>> 26) | (curInputValue3 << 6))
& mask;
out[11 + outOffset] = (curInputValue3 >>> 3) & mask;
out[12 + outOffset] = (curInputValue3 >>> 12) & mask;
out[13 + outOffset] = (curInputValue3 >>> 21) & mask;
out[14 + outOffset] = ((curInputValue3 >>> 30) | (curInputValue4 << 2))
& mask;
out[15 + outOffset] = (curInputValue4 >>> 7) & mask;
out[16 + outOffset] = (curInputValue4 >>> 16) & mask;
out[17 + outOffset] = ((curInputValue4 >>> 25) | (curInputValue5 << 7))
& mask;
out[18 + outOffset] = (curInputValue5 >>> 2) & mask;
out[19 + outOffset] = (curInputValue5 >>> 11) & mask;
out[20 + outOffset] = (curInputValue5 >>> 20) & mask;
out[21 + outOffset] = ((curInputValue5 >>> 29) | (curInputValue6 << 3))
& mask;
out[22 + outOffset] = (curInputValue6 >>> 6) & mask;
out[23 + outOffset] = (curInputValue6 >>> 15) & mask;
out[24 + outOffset] = ((curInputValue6 >>> 24) | (curInputValue7 << 8))
& mask;
out[25 + outOffset] = (curInputValue7 >>> 1) & mask;
out[26 + outOffset] = (curInputValue7 >>> 10) & mask;
out[27 + outOffset] = (curInputValue7 >>> 19) & mask;
out[28 + outOffset] = ((curInputValue7 >>> 28) | (curInputValue8 << 4))
& mask;
out[29 + outOffset] = (curInputValue8 >>> 5) & mask;
out[30 + outOffset] = (curInputValue8 >>> 14) & mask;
out[31 + outOffset] = curInputValue8 >>> 23;
outOffset += 32;
}
}
static private void unpack10(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 1023;
for (i = 0, w = 1; i < 4; ++i, w += 10) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 10) & mask;
out[2 + outOffset] = (curInputValue0 >>> 20) & mask;
out[3 + outOffset] = ((curInputValue0 >>> 30) | (curInputValue1 << 2))
& mask;
out[4 + outOffset] = (curInputValue1 >>> 8) & mask;
out[5 + outOffset] = (curInputValue1 >>> 18) & mask;
out[6 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[7 + outOffset] = (curInputValue2 >>> 6) & mask;
out[8 + outOffset] = (curInputValue2 >>> 16) & mask;
out[9 + outOffset] = ((curInputValue2 >>> 26) | (curInputValue3 << 6))
& mask;
out[10 + outOffset] = (curInputValue3 >>> 4) & mask;
out[11 + outOffset] = (curInputValue3 >>> 14) & mask;
out[12 + outOffset] = ((curInputValue3 >>> 24) | (curInputValue4 << 8))
& mask;
out[13 + outOffset] = (curInputValue4 >>> 2) & mask;
out[14 + outOffset] = (curInputValue4 >>> 12) & mask;
out[15 + outOffset] = curInputValue4 >>> 22;
out[16 + outOffset] = curInputValue5 & mask;
out[17 + outOffset] = (curInputValue5 >>> 10) & mask;
out[18 + outOffset] = (curInputValue5 >>> 20) & mask;
out[19 + outOffset] = ((curInputValue5 >>> 30) | (curInputValue6 << 2))
& mask;
out[20 + outOffset] = (curInputValue6 >>> 8) & mask;
out[21 + outOffset] = (curInputValue6 >>> 18) & mask;
out[22 + outOffset] = ((curInputValue6 >>> 28) | (curInputValue7 << 4))
& mask;
out[23 + outOffset] = (curInputValue7 >>> 6) & mask;
out[24 + outOffset] = (curInputValue7 >>> 16) & mask;
out[25 + outOffset] = ((curInputValue7 >>> 26) | (curInputValue8 << 6))
& mask;
out[26 + outOffset] = (curInputValue8 >>> 4) & mask;
out[27 + outOffset] = (curInputValue8 >>> 14) & mask;
out[28 + outOffset] = ((curInputValue8 >>> 24) | (curInputValue9 << 8))
& mask;
out[29 + outOffset] = (curInputValue9 >>> 2) & mask;
out[30 + outOffset] = (curInputValue9 >>> 12) & mask;
out[31 + outOffset] = curInputValue9 >>> 22;
outOffset += 32;
}
}
static private void unpack11(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 2047;
for (i = 0, w = 1; i < 4; ++i, w += 11) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 11) & mask;
out[2 + outOffset] = ((curInputValue0 >>> 22) | (curInputValue1 << 10))
& mask;
out[3 + outOffset] = (curInputValue1 >>> 1) & mask;
out[4 + outOffset] = (curInputValue1 >>> 12) & mask;
out[5 + outOffset] = ((curInputValue1 >>> 23) | (curInputValue2 << 9))
& mask;
out[6 + outOffset] = (curInputValue2 >>> 2) & mask;
out[7 + outOffset] = (curInputValue2 >>> 13) & mask;
out[8 + outOffset] = ((curInputValue2 >>> 24) | (curInputValue3 << 8))
& mask;
out[9 + outOffset] = (curInputValue3 >>> 3) & mask;
out[10 + outOffset] = (curInputValue3 >>> 14) & mask;
out[11 + outOffset] = ((curInputValue3 >>> 25) | (curInputValue4 << 7))
& mask;
out[12 + outOffset] = (curInputValue4 >>> 4) & mask;
out[13 + outOffset] = (curInputValue4 >>> 15) & mask;
out[14 + outOffset] = ((curInputValue4 >>> 26) | (curInputValue5 << 6))
& mask;
out[15 + outOffset] = (curInputValue5 >>> 5) & mask;
out[16 + outOffset] = (curInputValue5 >>> 16) & mask;
out[17 + outOffset] = ((curInputValue5 >>> 27) | (curInputValue6 << 5))
& mask;
out[18 + outOffset] = (curInputValue6 >>> 6) & mask;
out[19 + outOffset] = (curInputValue6 >>> 17) & mask;
out[20 + outOffset] = ((curInputValue6 >>> 28) | (curInputValue7 << 4))
& mask;
out[21 + outOffset] = (curInputValue7 >>> 7) & mask;
out[22 + outOffset] = (curInputValue7 >>> 18) & mask;
out[23 + outOffset] = ((curInputValue7 >>> 29) | (curInputValue8 << 3))
& mask;
out[24 + outOffset] = (curInputValue8 >>> 8) & mask;
out[25 + outOffset] = (curInputValue8 >>> 19) & mask;
out[26 + outOffset] = ((curInputValue8 >>> 30) | (curInputValue9 << 2))
& mask;
out[27 + outOffset] = (curInputValue9 >>> 9) & mask;
out[28 + outOffset] = (curInputValue9 >>> 20) & mask;
out[29 + outOffset] = ((curInputValue9 >>> 31) | (curInputValue10 << 1))
& mask;
out[30 + outOffset] = (curInputValue10 >>> 10) & mask;
out[31 + outOffset] = curInputValue10 >>> 21;
outOffset += 32;
}
}
static private void unpack12(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 4095;
for (i = 0, w = 1; i < 4; ++i, w += 12) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 12) & mask;
out[2 + outOffset] = ((curInputValue0 >>> 24) | (curInputValue1 << 8))
& mask;
out[3 + outOffset] = (curInputValue1 >>> 4) & mask;
out[4 + outOffset] = (curInputValue1 >>> 16) & mask;
out[5 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[6 + outOffset] = (curInputValue2 >>> 8) & mask;
out[7 + outOffset] = curInputValue2 >>> 20;
out[8 + outOffset] = curInputValue3 & mask;
out[9 + outOffset] = (curInputValue3 >>> 12) & mask;
out[10 + outOffset] = ((curInputValue3 >>> 24) | (curInputValue4 << 8))
& mask;
out[11 + outOffset] = (curInputValue4 >>> 4) & mask;
out[12 + outOffset] = (curInputValue4 >>> 16) & mask;
out[13 + outOffset] = ((curInputValue4 >>> 28) | (curInputValue5 << 4))
& mask;
out[14 + outOffset] = (curInputValue5 >>> 8) & mask;
out[15 + outOffset] = curInputValue5 >>> 20;
out[16 + outOffset] = curInputValue6 & mask;
out[17 + outOffset] = (curInputValue6 >>> 12) & mask;
out[18 + outOffset] = ((curInputValue6 >>> 24) | (curInputValue7 << 8))
& mask;
out[19 + outOffset] = (curInputValue7 >>> 4) & mask;
out[20 + outOffset] = (curInputValue7 >>> 16) & mask;
out[21 + outOffset] = ((curInputValue7 >>> 28) | (curInputValue8 << 4))
& mask;
out[22 + outOffset] = (curInputValue8 >>> 8) & mask;
out[23 + outOffset] = curInputValue8 >>> 20;
out[24 + outOffset] = curInputValue9 & mask;
out[25 + outOffset] = (curInputValue9 >>> 12) & mask;
out[26 + outOffset] = ((curInputValue9 >>> 24) | (curInputValue10 << 8))
& mask;
out[27 + outOffset] = (curInputValue10 >>> 4) & mask;
out[28 + outOffset] = (curInputValue10 >>> 16) & mask;
out[29 + outOffset] = ((curInputValue10 >>> 28) | (curInputValue11 << 4))
& mask;
out[30 + outOffset] = (curInputValue11 >>> 8) & mask;
out[31 + outOffset] = curInputValue11 >>> 20;
outOffset += 32;
}
}
static private void unpack13(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 8191;
for (i = 0, w = 1; i < 4; ++i, w += 13) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
int curInputValue12 = in[w + 12];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = (curInputValue0 >>> 13) & mask;
out[2 + outOffset] = ((curInputValue0 >>> 26) | (curInputValue1 << 6))
& mask;
out[3 + outOffset] = (curInputValue1 >>> 7) & mask;
out[4 + outOffset] = ((curInputValue1 >>> 20) | (curInputValue2 << 12))
& mask;
out[5 + outOffset] = (curInputValue2 >>> 1) & mask;
out[6 + outOffset] = (curInputValue2 >>> 14) & mask;
out[7 + outOffset] = ((curInputValue2 >>> 27) | (curInputValue3 << 5))
& mask;
out[8 + outOffset] = (curInputValue3 >>> 8) & mask;
out[9 + outOffset] = ((curInputValue3 >>> 21) | (curInputValue4 << 11))
& mask;
out[10 + outOffset] = (curInputValue4 >>> 2) & mask;
out[11 + outOffset] = (curInputValue4 >>> 15) & mask;
out[12 + outOffset] = ((curInputValue4 >>> 28) | (curInputValue5 << 4))
& mask;
out[13 + outOffset] = (curInputValue5 >>> 9) & mask;
out[14 + outOffset] = ((curInputValue5 >>> 22) | (curInputValue6 << 10))
& mask;
out[15 + outOffset] = (curInputValue6 >>> 3) & mask;
out[16 + outOffset] = (curInputValue6 >>> 16) & mask;
out[17 + outOffset] = ((curInputValue6 >>> 29) | (curInputValue7 << 3))
& mask;
out[18 + outOffset] = (curInputValue7 >>> 10) & mask;
out[19 + outOffset] = ((curInputValue7 >>> 23) | (curInputValue8 << 9))
& mask;
out[20 + outOffset] = (curInputValue8 >>> 4) & mask;
out[21 + outOffset] = (curInputValue8 >>> 17) & mask;
out[22 + outOffset] = ((curInputValue8 >>> 30) | (curInputValue9 << 2))
& mask;
out[23 + outOffset] = (curInputValue9 >>> 11) & mask;
out[24 + outOffset] = ((curInputValue9 >>> 24) | (curInputValue10 << 8))
& mask;
out[25 + outOffset] = (curInputValue10 >>> 5) & mask;
out[26 + outOffset] = (curInputValue10 >>> 18) & mask;
out[27 + outOffset] = ((curInputValue10 >>> 31) | (curInputValue11 << 1))
& mask;
out[28 + outOffset] = (curInputValue11 >>> 12) & mask;
out[29 + outOffset] = ((curInputValue11 >>> 25) | (curInputValue12 << 7))
& mask;
out[30 + outOffset] = (curInputValue12 >>> 6) & mask;
out[31 + outOffset] = curInputValue12 >>> 19;
outOffset += 32;
}
}
static private void unpack16(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 65535;
for (i = 0, w = 1; i < 4; ++i, w += 16) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
int curInputValue12 = in[w + 12];
int curInputValue13 = in[w + 13];
int curInputValue14 = in[w + 14];
int curInputValue15 = in[w + 15];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = curInputValue0 >>> 16;
out[2 + outOffset] = curInputValue1 & mask;
out[3 + outOffset] = curInputValue1 >>> 16;
out[4 + outOffset] = curInputValue2 & mask;
out[5 + outOffset] = curInputValue2 >>> 16;
out[6 + outOffset] = curInputValue3 & mask;
out[7 + outOffset] = curInputValue3 >>> 16;
out[8 + outOffset] = curInputValue4 & mask;
out[9 + outOffset] = curInputValue4 >>> 16;
out[10 + outOffset] = curInputValue5 & mask;
out[11 + outOffset] = curInputValue5 >>> 16;
out[12 + outOffset] = curInputValue6 & mask;
out[13 + outOffset] = curInputValue6 >>> 16;
out[14 + outOffset] = curInputValue7 & mask;
out[15 + outOffset] = curInputValue7 >>> 16;
out[16 + outOffset] = curInputValue8 & mask;
out[17 + outOffset] = curInputValue8 >>> 16;
out[18 + outOffset] = curInputValue9 & mask;
out[19 + outOffset] = curInputValue9 >>> 16;
out[20 + outOffset] = curInputValue10 & mask;
out[21 + outOffset] = curInputValue10 >>> 16;
out[22 + outOffset] = curInputValue11 & mask;
out[23 + outOffset] = curInputValue11 >>> 16;
out[24 + outOffset] = curInputValue12 & mask;
out[25 + outOffset] = curInputValue12 >>> 16;
out[26 + outOffset] = curInputValue13 & mask;
out[27 + outOffset] = curInputValue13 >>> 16;
out[28 + outOffset] = curInputValue14 & mask;
out[29 + outOffset] = curInputValue14 >>> 16;
out[30 + outOffset] = curInputValue15 & mask;
out[31 + outOffset] = curInputValue15 >>> 16;
outOffset += 32;
}
}
static private void unpack20(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 1048575;
for (i = 0, w = 1; i < 4; ++i, w += 20) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
int curInputValue12 = in[w + 12];
int curInputValue13 = in[w + 13];
int curInputValue14 = in[w + 14];
int curInputValue15 = in[w + 15];
int curInputValue16 = in[w + 16];
int curInputValue17 = in[w + 17];
int curInputValue18 = in[w + 18];
int curInputValue19 = in[w + 19];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = ((curInputValue0 >>> 20) | (curInputValue1 << 12))
& mask;
out[2 + outOffset] = (curInputValue1 >>> 8) & mask;
out[3 + outOffset] = ((curInputValue1 >>> 28) | (curInputValue2 << 4))
& mask;
out[4 + outOffset] = ((curInputValue2 >>> 16) | (curInputValue3 << 16))
& mask;
out[5 + outOffset] = (curInputValue3 >>> 4) & mask;
out[6 + outOffset] = ((curInputValue3 >>> 24) | (curInputValue4 << 8))
& mask;
out[7 + outOffset] = curInputValue4 >>> 12;
out[8 + outOffset] = curInputValue5 & mask;
out[9 + outOffset] = ((curInputValue5 >>> 20) | (curInputValue6 << 12))
& mask;
out[10 + outOffset] = (curInputValue6 >>> 8) & mask;
out[11 + outOffset] = ((curInputValue6 >>> 28) | (curInputValue7 << 4))
& mask;
out[12 + outOffset] = ((curInputValue7 >>> 16) | (curInputValue8 << 16))
& mask;
out[13 + outOffset] = (curInputValue8 >>> 4) & mask;
out[14 + outOffset] = ((curInputValue8 >>> 24) | (curInputValue9 << 8))
& mask;
out[15 + outOffset] = curInputValue9 >>> 12;
out[16 + outOffset] = curInputValue10 & mask;
out[17 + outOffset] = ((curInputValue10 >>> 20) | (curInputValue11 << 12))
& mask;
out[18 + outOffset] = (curInputValue11 >>> 8) & mask;
out[19 + outOffset] = ((curInputValue11 >>> 28) | (curInputValue12 << 4))
& mask;
out[20 + outOffset] = ((curInputValue12 >>> 16) | (curInputValue13 << 16))
& mask;
out[21 + outOffset] = (curInputValue13 >>> 4) & mask;
out[22 + outOffset] = ((curInputValue13 >>> 24) | (curInputValue14 << 8))
& mask;
out[23 + outOffset] = curInputValue14 >>> 12;
out[24 + outOffset] = curInputValue15 & mask;
out[25 + outOffset] = ((curInputValue15 >>> 20) | (curInputValue16 << 12))
& mask;
out[26 + outOffset] = (curInputValue16 >>> 8) & mask;
out[27 + outOffset] = ((curInputValue16 >>> 28) | (curInputValue17 << 4))
& mask;
out[28 + outOffset] = ((curInputValue17 >>> 16) | (curInputValue18 << 16))
& mask;
out[29 + outOffset] = (curInputValue18 >>> 4) & mask;
out[30 + outOffset] = ((curInputValue18 >>> 24) | (curInputValue19 << 8))
& mask;
out[31 + outOffset] = curInputValue19 >>> 12;
outOffset += 32;
}
}
static private void unpack28(int[] out, int[] in) {
int i, w;
int outOffset = 0;
final int mask = 268435455;
for (i = 0, w = 1; i < 4; ++i, w += 28) {
int curInputValue0 = in[w];
int curInputValue1 = in[w + 1];
int curInputValue2 = in[w + 2];
int curInputValue3 = in[w + 3];
int curInputValue4 = in[w + 4];
int curInputValue5 = in[w + 5];
int curInputValue6 = in[w + 6];
int curInputValue7 = in[w + 7];
int curInputValue8 = in[w + 8];
int curInputValue9 = in[w + 9];
int curInputValue10 = in[w + 10];
int curInputValue11 = in[w + 11];
int curInputValue12 = in[w + 12];
int curInputValue13 = in[w + 13];
int curInputValue14 = in[w + 14];
int curInputValue15 = in[w + 15];
int curInputValue16 = in[w + 16];
int curInputValue17 = in[w + 17];
int curInputValue18 = in[w + 18];
int curInputValue19 = in[w + 19];
int curInputValue20 = in[w + 20];
int curInputValue21 = in[w + 21];
int curInputValue22 = in[w + 22];
int curInputValue23 = in[w + 23];
int curInputValue24 = in[w + 24];
int curInputValue25 = in[w + 25];
int curInputValue26 = in[w + 26];
int curInputValue27 = in[w + 27];
out[0 + outOffset] = curInputValue0 & mask;
out[1 + outOffset] = ((curInputValue0 >>> 28) | (curInputValue1 << 4))
& mask;
out[2 + outOffset] = ((curInputValue1 >>> 24) | (curInputValue2 << 8))
& mask;
out[3 + outOffset] = ((curInputValue2 >>> 20) | (curInputValue3 << 12))
& mask;
out[4 + outOffset] = ((curInputValue3 >>> 16) | (curInputValue4 << 16))
& mask;
out[5 + outOffset] = ((curInputValue4 >>> 12) | (curInputValue5 << 20))
& mask;
out[6 + outOffset] = ((curInputValue5 >>> 8) | (curInputValue6 << 24))
& mask;
out[7 + outOffset] = curInputValue6 >>> 4;
out[8 + outOffset] = curInputValue7 & mask;
out[9 + outOffset] = ((curInputValue7 >>> 28) | (curInputValue8 << 4))
& mask;
out[10 + outOffset] = ((curInputValue8 >>> 24) | (curInputValue9 << 8))
& mask;
out[11 + outOffset] = ((curInputValue9 >>> 20) | (curInputValue10 << 12))
& mask;
out[12 + outOffset] = ((curInputValue10 >>> 16) | (curInputValue11 << 16))
& mask;
out[13 + outOffset] = ((curInputValue11 >>> 12) | (curInputValue12 << 20))
& mask;
out[14 + outOffset] = ((curInputValue12 >>> 8) | (curInputValue13 << 24))
& mask;
out[15 + outOffset] = curInputValue13 >>> 4;
out[16 + outOffset] = curInputValue14 & mask;
out[17 + outOffset] = ((curInputValue14 >>> 28) | (curInputValue15 << 4))
& mask;
out[18 + outOffset] = ((curInputValue15 >>> 24) | (curInputValue16 << 8))
& mask;
out[19 + outOffset] = ((curInputValue16 >>> 20) | (curInputValue17 << 12))
& mask;
out[20 + outOffset] = ((curInputValue17 >>> 16) | (curInputValue18 << 16))
& mask;
out[21 + outOffset] = ((curInputValue18 >>> 12) | (curInputValue19 << 20))
& mask;
out[22 + outOffset] = ((curInputValue19 >>> 8) | (curInputValue20 << 24))
& mask;
out[23 + outOffset] = curInputValue20 >>> 4;
out[24 + outOffset] = curInputValue21 & mask;
out[25 + outOffset] = ((curInputValue21 >>> 28) | (curInputValue22 << 4))
& mask;
out[26 + outOffset] = ((curInputValue22 >>> 24) | (curInputValue23 << 8))
& mask;
out[27 + outOffset] = ((curInputValue23 >>> 20) | (curInputValue24 << 12))
& mask;
out[28 + outOffset] = ((curInputValue24 >>> 16) | (curInputValue25 << 16))
& mask;
out[29 + outOffset] = ((curInputValue25 >>> 12) | (curInputValue26 << 20))
& mask;
out[30 + outOffset] = ((curInputValue26 >>> 8) | (curInputValue27 << 24))
& mask;
out[31 + outOffset] = curInputValue27 >>> 4;
outOffset += 32;
}
}
}