github.com/apache/arrow/go/v7@v7.0.1/parquet/internal/utils/bit_packing_default.go (about)

     1  // Licensed to the Apache Software Foundation (ASF) under one
     2  // or more contributor license agreements.  See the NOTICE file
     3  // distributed with this work for additional information
     4  // regarding copyright ownership.  The ASF licenses this file
     5  // to you under the Apache License, Version 2.0 (the
     6  // "License"); you may not use this file except in compliance
     7  // with the License.  You may obtain a copy of the License at
     8  //
     9  // http://www.apache.org/licenses/LICENSE-2.0
    10  //
    11  // Unless required by applicable law or agreed to in writing, software
    12  // distributed under the License is distributed on an "AS IS" BASIS,
    13  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14  // See the License for the specific language governing permissions and
    15  // limitations under the License.
    16  
    17  package utils
    18  
    19  import (
    20  	"encoding/binary"
    21  	"io"
    22  )
    23  
    24  type unpackFunc func(in io.Reader, out []uint32)
    25  
    26  func unpack1_32(in io.Reader, out []uint32) {
    27  	var inl uint32
    28  	binary.Read(in, binary.LittleEndian, &inl)
    29  	for idx := range out[:32] {
    30  		out[idx] = (inl >> idx) & 1
    31  	}
    32  }
    33  
    34  func unpack2_32(in io.Reader, out []uint32) {
    35  	var inl uint32
    36  	binary.Read(in, binary.LittleEndian, &inl)
    37  	out[0] = (inl >> 0) % (1 << 2)
    38  	out[1] = (inl >> 2) % (1 << 2)
    39  	out[2] = (inl >> 4) % (1 << 2)
    40  	out[3] = (inl >> 6) % (1 << 2)
    41  	out[4] = (inl >> 8) % (1 << 2)
    42  	out[5] = (inl >> 10) % (1 << 2)
    43  	out[6] = (inl >> 12) % (1 << 2)
    44  	out[7] = (inl >> 14) % (1 << 2)
    45  	out[8] = (inl >> 16) % (1 << 2)
    46  	out[9] = (inl >> 18) % (1 << 2)
    47  	out[10] = (inl >> 20) % (1 << 2)
    48  	out[11] = (inl >> 22) % (1 << 2)
    49  	out[12] = (inl >> 24) % (1 << 2)
    50  	out[13] = (inl >> 26) % (1 << 2)
    51  	out[14] = (inl >> 28) % (1 << 2)
    52  	out[15] = (inl >> 30)
    53  	binary.Read(in, binary.LittleEndian, &inl)
    54  	out[16] = (inl >> 0) % (1 << 2)
    55  	out[17] = (inl >> 2) % (1 << 2)
    56  	out[18] = (inl >> 4) % (1 << 2)
    57  	out[19] = (inl >> 6) % (1 << 2)
    58  	out[20] = (inl >> 8) % (1 << 2)
    59  	out[21] = (inl >> 10) % (1 << 2)
    60  	out[22] = (inl >> 12) % (1 << 2)
    61  	out[23] = (inl >> 14) % (1 << 2)
    62  	out[24] = (inl >> 16) % (1 << 2)
    63  	out[25] = (inl >> 18) % (1 << 2)
    64  	out[26] = (inl >> 20) % (1 << 2)
    65  	out[27] = (inl >> 22) % (1 << 2)
    66  	out[28] = (inl >> 24) % (1 << 2)
    67  	out[29] = (inl >> 26) % (1 << 2)
    68  	out[30] = (inl >> 28) % (1 << 2)
    69  	out[31] = (inl >> 30)
    70  }
    71  
    72  func unpack3_32(in io.Reader, out []uint32) {
    73  	var inl uint32
    74  	binary.Read(in, binary.LittleEndian, &inl)
    75  	out[0] = (inl >> 0) % (1 << 3)
    76  	out[1] = (inl >> 3) % (1 << 3)
    77  	out[2] = (inl >> 6) % (1 << 3)
    78  	out[3] = (inl >> 9) % (1 << 3)
    79  	out[4] = (inl >> 12) % (1 << 3)
    80  	out[5] = (inl >> 15) % (1 << 3)
    81  	out[6] = (inl >> 18) % (1 << 3)
    82  	out[7] = (inl >> 21) % (1 << 3)
    83  	out[8] = (inl >> 24) % (1 << 3)
    84  	out[9] = (inl >> 27) % (1 << 3)
    85  	out[10] = (inl >> 30)
    86  	binary.Read(in, binary.LittleEndian, &inl)
    87  	out[10] |= (inl % (1 << 1)) << (3 - 1)
    88  	out[11] = (inl >> 1) % (1 << 3)
    89  	out[12] = (inl >> 4) % (1 << 3)
    90  	out[13] = (inl >> 7) % (1 << 3)
    91  	out[14] = (inl >> 10) % (1 << 3)
    92  	out[15] = (inl >> 13) % (1 << 3)
    93  	out[16] = (inl >> 16) % (1 << 3)
    94  	out[17] = (inl >> 19) % (1 << 3)
    95  	out[18] = (inl >> 22) % (1 << 3)
    96  	out[19] = (inl >> 25) % (1 << 3)
    97  	out[20] = (inl >> 28) % (1 << 3)
    98  	out[21] = (inl >> 31) % (1 << 3)
    99  	binary.Read(in, binary.LittleEndian, &inl)
   100  	out[21] |= (inl % (1 << 2)) << (3 - 2)
   101  	out[22] = (inl >> 2) % (1 << 3)
   102  	out[23] = (inl >> 5) % (1 << 3)
   103  	out[24] = (inl >> 8) % (1 << 3)
   104  	out[25] = (inl >> 11) % (1 << 3)
   105  	out[26] = (inl >> 14) % (1 << 3)
   106  	out[27] = (inl >> 17) % (1 << 3)
   107  	out[28] = (inl >> 20) % (1 << 3)
   108  	out[29] = (inl >> 23) % (1 << 3)
   109  	out[30] = (inl >> 26) % (1 << 3)
   110  	out[31] = (inl >> 29)
   111  }
   112  
   113  func unpack4_32(in io.Reader, out []uint32) {
   114  	var inl uint32
   115  	binary.Read(in, binary.LittleEndian, &inl)
   116  	for i := 0; i < 28; i += 4 {
   117  		out[i/4] = (inl >> i) % (1 << 4)
   118  	}
   119  	out[7] = (inl >> 28)
   120  	binary.Read(in, binary.LittleEndian, &inl)
   121  	for i := 0; i < 28; i += 4 {
   122  		out[8+i/4] = (inl >> i) % (1 << 4)
   123  	}
   124  	out[15] = (inl >> 28)
   125  	binary.Read(in, binary.LittleEndian, &inl)
   126  	for i := 0; i < 28; i += 4 {
   127  		out[16+i/4] = (inl >> i) % (1 << 4)
   128  	}
   129  	out[23] = (inl >> 28)
   130  	binary.Read(in, binary.LittleEndian, &inl)
   131  	for i := 0; i < 28; i += 4 {
   132  		out[24+i/4] = (inl >> i) % (1 << 4)
   133  	}
   134  	out[31] = (inl >> 28)
   135  }
   136  
   137  func unpack5_32(in io.Reader, out []uint32) {
   138  	var inl uint32
   139  	binary.Read(in, binary.LittleEndian, &inl)
   140  	out[0] = (inl >> 0) % (1 << 5)
   141  	out[1] = (inl >> 5) % (1 << 5)
   142  	out[2] = (inl >> 10) % (1 << 5)
   143  	out[3] = (inl >> 15) % (1 << 5)
   144  	out[4] = (inl >> 20) % (1 << 5)
   145  	out[5] = (inl >> 25) % (1 << 5)
   146  	out[6] = (inl >> 30)
   147  	binary.Read(in, binary.LittleEndian, &inl)
   148  	out[6] |= (inl % (1 << 3)) << (5 - 3)
   149  	out[7] = (inl >> 3) % (1 << 5)
   150  	out[8] = (inl >> 8) % (1 << 5)
   151  	out[9] = (inl >> 13) % (1 << 5)
   152  	out[10] = (inl >> 18) % (1 << 5)
   153  	out[11] = (inl >> 23) % (1 << 5)
   154  	out[12] = (inl >> 28)
   155  	binary.Read(in, binary.LittleEndian, &inl)
   156  	out[12] |= (inl % (1 << 1)) << (5 - 1)
   157  	out[13] = (inl >> 1) % (1 << 5)
   158  	out[14] = (inl >> 6) % (1 << 5)
   159  	out[15] = (inl >> 11) % (1 << 5)
   160  	out[16] = (inl >> 16) % (1 << 5)
   161  	out[17] = (inl >> 21) % (1 << 5)
   162  	out[18] = (inl >> 26) % (1 << 5)
   163  	out[19] = (inl >> 31)
   164  	binary.Read(in, binary.LittleEndian, &inl)
   165  	out[19] |= (inl % (1 << 4)) << (5 - 4)
   166  	out[20] = (inl >> 4) % (1 << 5)
   167  	out[21] = (inl >> 9) % (1 << 5)
   168  	out[22] = (inl >> 14) % (1 << 5)
   169  	out[23] = (inl >> 19) % (1 << 5)
   170  	out[24] = (inl >> 24) % (1 << 5)
   171  	out[25] = (inl >> 29)
   172  	binary.Read(in, binary.LittleEndian, &inl)
   173  	out[25] |= (inl % (1 << 2)) << (5 - 2)
   174  	out[26] = (inl >> 2) % (1 << 5)
   175  	out[27] = (inl >> 7) % (1 << 5)
   176  	out[28] = (inl >> 12) % (1 << 5)
   177  	out[29] = (inl >> 17) % (1 << 5)
   178  	out[30] = (inl >> 22) % (1 << 5)
   179  	out[31] = (inl >> 27)
   180  }
   181  
   182  func unpack6_32(in io.Reader, out []uint32) {
   183  	var inl uint32
   184  	binary.Read(in, binary.LittleEndian, &inl)
   185  	out[0] = (inl >> 0) % (1 << 6)
   186  	out[1] = (inl >> 6) % (1 << 6)
   187  	out[2] = (inl >> 12) % (1 << 6)
   188  	out[3] = (inl >> 18) % (1 << 6)
   189  	out[4] = (inl >> 24) % (1 << 6)
   190  	out[5] = (inl >> 30)
   191  	binary.Read(in, binary.LittleEndian, &inl)
   192  	out[5] |= (inl % (1 << 4)) << (6 - 4)
   193  	out[6] = (inl >> 4) % (1 << 6)
   194  	out[7] = (inl >> 10) % (1 << 6)
   195  	out[8] = (inl >> 16) % (1 << 6)
   196  	out[9] = (inl >> 22) % (1 << 6)
   197  	out[10] = (inl >> 28)
   198  	binary.Read(in, binary.LittleEndian, &inl)
   199  	out[10] |= (inl % (1 << 2)) << (6 - 2)
   200  	out[11] = (inl >> 2) % (1 << 6)
   201  	out[12] = (inl >> 8) % (1 << 6)
   202  	out[13] = (inl >> 14) % (1 << 6)
   203  	out[14] = (inl >> 20) % (1 << 6)
   204  	out[15] = (inl >> 26)
   205  	binary.Read(in, binary.LittleEndian, &inl)
   206  	out[16] = (inl >> 0) % (1 << 6)
   207  	out[17] = (inl >> 6) % (1 << 6)
   208  	out[18] = (inl >> 12) % (1 << 6)
   209  	out[19] = (inl >> 18) % (1 << 6)
   210  	out[20] = (inl >> 24) % (1 << 6)
   211  	out[21] = (inl >> 30)
   212  	binary.Read(in, binary.LittleEndian, &inl)
   213  	out[21] |= (inl % (1 << 4)) << (6 - 4)
   214  	out[22] = (inl >> 4) % (1 << 6)
   215  	out[23] = (inl >> 10) % (1 << 6)
   216  	out[24] = (inl >> 16) % (1 << 6)
   217  	out[25] = (inl >> 22) % (1 << 6)
   218  	out[26] = (inl >> 28)
   219  	binary.Read(in, binary.LittleEndian, &inl)
   220  	out[26] |= (inl % (1 << 2)) << (6 - 2)
   221  	out[27] = (inl >> 2) % (1 << 6)
   222  	out[28] = (inl >> 8) % (1 << 6)
   223  	out[29] = (inl >> 14) % (1 << 6)
   224  	out[30] = (inl >> 20) % (1 << 6)
   225  	out[31] = (inl >> 26)
   226  }
   227  
   228  func unpack7_32(in io.Reader, out []uint32) {
   229  	var inl uint32
   230  	binary.Read(in, binary.LittleEndian, &inl)
   231  	out[0] = (inl >> 0) % (1 << 7)
   232  	out[1] = (inl >> 7) % (1 << 7)
   233  	out[2] = (inl >> 14) % (1 << 7)
   234  	out[3] = (inl >> 21) % (1 << 7)
   235  	out[4] = (inl >> 28)
   236  	binary.Read(in, binary.LittleEndian, &inl)
   237  	out[4] |= (inl % (1 << 3)) << (7 - 3)
   238  	out[5] = (inl >> 3) % (1 << 7)
   239  	out[6] = (inl >> 10) % (1 << 7)
   240  	out[7] = (inl >> 17) % (1 << 7)
   241  	out[8] = (inl >> 24) % (1 << 7)
   242  	out[9] = (inl >> 31)
   243  	binary.Read(in, binary.LittleEndian, &inl)
   244  	out[9] |= (inl % (1 << 6)) << (7 - 6)
   245  	out[10] = (inl >> 6) % (1 << 7)
   246  	out[11] = (inl >> 13) % (1 << 7)
   247  	out[12] = (inl >> 20) % (1 << 7)
   248  	out[13] = (inl >> 27)
   249  	binary.Read(in, binary.LittleEndian, &inl)
   250  	out[13] |= (inl % (1 << 2)) << (7 - 2)
   251  	out[14] = (inl >> 2) % (1 << 7)
   252  	out[15] = (inl >> 9) % (1 << 7)
   253  	out[16] = (inl >> 16) % (1 << 7)
   254  	out[17] = (inl >> 23) % (1 << 7)
   255  	out[18] = (inl >> 30)
   256  	binary.Read(in, binary.LittleEndian, &inl)
   257  	out[18] |= (inl % (1 << 5)) << (7 - 5)
   258  	out[19] = (inl >> 5) % (1 << 7)
   259  	out[20] = (inl >> 12) % (1 << 7)
   260  	out[21] = (inl >> 19) % (1 << 7)
   261  	out[22] = (inl >> 26)
   262  	binary.Read(in, binary.LittleEndian, &inl)
   263  	out[22] |= (inl % (1 << 1)) << (7 - 1)
   264  	out[23] = (inl >> 1) % (1 << 7)
   265  	out[24] = (inl >> 8) % (1 << 7)
   266  	out[25] = (inl >> 15) % (1 << 7)
   267  	out[26] = (inl >> 22) % (1 << 7)
   268  	out[27] = (inl >> 29)
   269  	binary.Read(in, binary.LittleEndian, &inl)
   270  	out[27] |= (inl % (1 << 4)) << (7 - 4)
   271  	out[28] = (inl >> 4) % (1 << 7)
   272  	out[29] = (inl >> 11) % (1 << 7)
   273  	out[30] = (inl >> 18) % (1 << 7)
   274  	out[31] = (inl >> 25)
   275  }
   276  
   277  func unpack8_32(in io.Reader, out []uint32) {
   278  	var inl uint32
   279  	binary.Read(in, binary.LittleEndian, &inl)
   280  	for i := 0; i < 24; i += 8 {
   281  		out[0+i/8] = (inl >> i) % (1 << 8)
   282  	}
   283  	out[3] = (inl >> 24)
   284  	binary.Read(in, binary.LittleEndian, &inl)
   285  	for i := 0; i < 24; i += 8 {
   286  		out[4+i/8] = (inl >> i) % (1 << 8)
   287  	}
   288  	out[7] = (inl >> 24)
   289  	binary.Read(in, binary.LittleEndian, &inl)
   290  	for i := 0; i < 24; i += 8 {
   291  		out[8+i/8] = (inl >> i) % (1 << 8)
   292  	}
   293  	out[11] = (inl >> 24)
   294  	binary.Read(in, binary.LittleEndian, &inl)
   295  	for i := 0; i < 24; i += 8 {
   296  		out[12+i/8] = (inl >> i) % (1 << 8)
   297  	}
   298  	out[15] = (inl >> 24)
   299  	binary.Read(in, binary.LittleEndian, &inl)
   300  	for i := 0; i < 24; i += 8 {
   301  		out[16+i/8] = (inl >> i) % (1 << 8)
   302  	}
   303  	out[19] = (inl >> 24)
   304  	binary.Read(in, binary.LittleEndian, &inl)
   305  	for i := 0; i < 24; i += 8 {
   306  		out[20+i/8] = (inl >> i) % (1 << 8)
   307  	}
   308  	out[23] = (inl >> 24)
   309  	binary.Read(in, binary.LittleEndian, &inl)
   310  	for i := 0; i < 24; i += 8 {
   311  		out[24+i/8] = (inl >> i) % (1 << 8)
   312  	}
   313  	out[27] = (inl >> 24)
   314  	binary.Read(in, binary.LittleEndian, &inl)
   315  	for i := 0; i < 24; i += 8 {
   316  		out[28+i/8] = (inl >> i) % (1 << 8)
   317  	}
   318  	out[31] = (inl >> 24)
   319  }
   320  
   321  func unpack9_32(in io.Reader, out []uint32) {
   322  	var inl uint32
   323  	binary.Read(in, binary.LittleEndian, &inl)
   324  	out[0] = (inl >> 0) % (1 << 9)
   325  	out[1] = (inl >> 9) % (1 << 9)
   326  	out[2] = (inl >> 18) % (1 << 9)
   327  	out[3] = (inl >> 27)
   328  	binary.Read(in, binary.LittleEndian, &inl)
   329  	out[3] |= (inl % (1 << 4)) << (9 - 4)
   330  	out[4] = (inl >> 4) % (1 << 9)
   331  	out[5] = (inl >> 13) % (1 << 9)
   332  	out[6] = (inl >> 22) % (1 << 9)
   333  	out[7] = (inl >> 31)
   334  	binary.Read(in, binary.LittleEndian, &inl)
   335  	out[7] |= (inl % (1 << 8)) << (9 - 8)
   336  	out[8] = (inl >> 8) % (1 << 9)
   337  	out[9] = (inl >> 17) % (1 << 9)
   338  	out[10] = (inl >> 26)
   339  	binary.Read(in, binary.LittleEndian, &inl)
   340  	out[10] |= (inl % (1 << 3)) << (9 - 3)
   341  	out[11] = (inl >> 3) % (1 << 9)
   342  	out[12] = (inl >> 12) % (1 << 9)
   343  	out[13] = (inl >> 21) % (1 << 9)
   344  	out[14] = (inl >> 30)
   345  	binary.Read(in, binary.LittleEndian, &inl)
   346  	out[14] |= (inl % (1 << 7)) << (9 - 7)
   347  	out[15] = (inl >> 7) % (1 << 9)
   348  	out[16] = (inl >> 16) % (1 << 9)
   349  	out[17] = (inl >> 25)
   350  	binary.Read(in, binary.LittleEndian, &inl)
   351  	out[17] |= (inl % (1 << 2)) << (9 - 2)
   352  	out[18] = (inl >> 2) % (1 << 9)
   353  	out[19] = (inl >> 11) % (1 << 9)
   354  	out[20] = (inl >> 20) % (1 << 9)
   355  	out[21] = (inl >> 29)
   356  	binary.Read(in, binary.LittleEndian, &inl)
   357  	out[21] |= (inl % (1 << 6)) << (9 - 6)
   358  	out[22] = (inl >> 6) % (1 << 9)
   359  	out[23] = (inl >> 15) % (1 << 9)
   360  	out[24] = (inl >> 24)
   361  	binary.Read(in, binary.LittleEndian, &inl)
   362  	out[24] |= (inl % (1 << 1)) << (9 - 1)
   363  	out[25] = (inl >> 1) % (1 << 9)
   364  	out[26] = (inl >> 10) % (1 << 9)
   365  	out[27] = (inl >> 19) % (1 << 9)
   366  	out[28] = (inl >> 28)
   367  	binary.Read(in, binary.LittleEndian, &inl)
   368  	out[28] |= (inl % (1 << 5)) << (9 - 5)
   369  	out[29] = (inl >> 5) % (1 << 9)
   370  	out[30] = (inl >> 14) % (1 << 9)
   371  	out[31] = (inl >> 23)
   372  }
   373  
   374  func unpack10_32(in io.Reader, out []uint32) {
   375  	var inl uint32
   376  	binary.Read(in, binary.LittleEndian, &inl)
   377  	out[0] = (inl >> 0) % (1 << 10)
   378  	out[1] = (inl >> 10) % (1 << 10)
   379  	out[2] = (inl >> 20) % (1 << 10)
   380  	out[3] = (inl >> 30)
   381  	binary.Read(in, binary.LittleEndian, &inl)
   382  	out[3] |= (inl % (1 << 8)) << (10 - 8)
   383  	out[4] = (inl >> 8) % (1 << 10)
   384  	out[5] = (inl >> 18) % (1 << 10)
   385  	out[6] = (inl >> 28)
   386  	binary.Read(in, binary.LittleEndian, &inl)
   387  	out[6] |= (inl % (1 << 6)) << (10 - 6)
   388  	out[7] = (inl >> 6) % (1 << 10)
   389  	out[8] = (inl >> 16) % (1 << 10)
   390  	out[9] = (inl >> 26)
   391  	binary.Read(in, binary.LittleEndian, &inl)
   392  	out[9] |= (inl % (1 << 4)) << (10 - 4)
   393  	out[10] = (inl >> 4) % (1 << 10)
   394  	out[11] = (inl >> 14) % (1 << 10)
   395  	out[12] = (inl >> 24)
   396  	binary.Read(in, binary.LittleEndian, &inl)
   397  	out[12] |= (inl % (1 << 2)) << (10 - 2)
   398  	out[13] = (inl >> 2) % (1 << 10)
   399  	out[14] = (inl >> 12) % (1 << 10)
   400  	out[15] = (inl >> 22)
   401  	binary.Read(in, binary.LittleEndian, &inl)
   402  	out[16] = (inl >> 0) % (1 << 10)
   403  	out[17] = (inl >> 10) % (1 << 10)
   404  	out[18] = (inl >> 20) % (1 << 10)
   405  	out[19] = (inl >> 30)
   406  	binary.Read(in, binary.LittleEndian, &inl)
   407  	out[19] |= (inl % (1 << 8)) << (10 - 8)
   408  	out[20] = (inl >> 8) % (1 << 10)
   409  	out[21] = (inl >> 18) % (1 << 10)
   410  	out[22] = (inl >> 28)
   411  	binary.Read(in, binary.LittleEndian, &inl)
   412  	out[22] |= (inl % (1 << 6)) << (10 - 6)
   413  	out[23] = (inl >> 6) % (1 << 10)
   414  	out[24] = (inl >> 16) % (1 << 10)
   415  	out[25] = (inl >> 26)
   416  	binary.Read(in, binary.LittleEndian, &inl)
   417  	out[25] |= (inl % (1 << 4)) << (10 - 4)
   418  	out[26] = (inl >> 4) % (1 << 10)
   419  	out[27] = (inl >> 14) % (1 << 10)
   420  	out[28] = (inl >> 24)
   421  	binary.Read(in, binary.LittleEndian, &inl)
   422  	out[28] |= (inl % (1 << 2)) << (10 - 2)
   423  	out[29] = (inl >> 2) % (1 << 10)
   424  	out[30] = (inl >> 12) % (1 << 10)
   425  	out[31] = (inl >> 22)
   426  }
   427  
   428  func unpack11_32(in io.Reader, out []uint32) {
   429  	var inl uint32
   430  	binary.Read(in, binary.LittleEndian, &inl)
   431  	out[0] = (inl >> 0) % (1 << 11)
   432  	out[1] = (inl >> 11) % (1 << 11)
   433  	out[2] = (inl >> 22)
   434  	binary.Read(in, binary.LittleEndian, &inl)
   435  	out[2] |= (inl % (1 << 1)) << (11 - 1)
   436  	out[3] = (inl >> 1) % (1 << 11)
   437  	out[4] = (inl >> 12) % (1 << 11)
   438  	out[5] = (inl >> 23)
   439  	binary.Read(in, binary.LittleEndian, &inl)
   440  	out[5] |= (inl % (1 << 2)) << (11 - 2)
   441  	out[6] = (inl >> 2) % (1 << 11)
   442  	out[7] = (inl >> 13) % (1 << 11)
   443  	out[8] = (inl >> 24)
   444  	binary.Read(in, binary.LittleEndian, &inl)
   445  	out[8] |= (inl % (1 << 3)) << (11 - 3)
   446  	out[9] = (inl >> 3) % (1 << 11)
   447  	out[10] = (inl >> 14) % (1 << 11)
   448  	out[11] = (inl >> 25)
   449  	binary.Read(in, binary.LittleEndian, &inl)
   450  	out[11] |= (inl % (1 << 4)) << (11 - 4)
   451  	out[12] = (inl >> 4) % (1 << 11)
   452  	out[13] = (inl >> 15) % (1 << 11)
   453  	out[14] = (inl >> 26)
   454  	binary.Read(in, binary.LittleEndian, &inl)
   455  	out[14] |= (inl % (1 << 5)) << (11 - 5)
   456  	out[15] = (inl >> 5) % (1 << 11)
   457  	out[16] = (inl >> 16) % (1 << 11)
   458  	out[17] = (inl >> 27)
   459  	binary.Read(in, binary.LittleEndian, &inl)
   460  	out[17] |= (inl % (1 << 6)) << (11 - 6)
   461  	out[18] = (inl >> 6) % (1 << 11)
   462  	out[19] = (inl >> 17) % (1 << 11)
   463  	out[20] = (inl >> 28)
   464  	binary.Read(in, binary.LittleEndian, &inl)
   465  	out[20] |= (inl % (1 << 7)) << (11 - 7)
   466  	out[21] = (inl >> 7) % (1 << 11)
   467  	out[22] = (inl >> 18) % (1 << 11)
   468  	out[23] = (inl >> 29)
   469  	binary.Read(in, binary.LittleEndian, &inl)
   470  	out[23] |= (inl % (1 << 8)) << (11 - 8)
   471  	out[24] = (inl >> 8) % (1 << 11)
   472  	out[25] = (inl >> 19) % (1 << 11)
   473  	out[26] = (inl >> 30)
   474  	binary.Read(in, binary.LittleEndian, &inl)
   475  	out[26] |= (inl % (1 << 9)) << (11 - 9)
   476  	out[27] = (inl >> 9) % (1 << 11)
   477  	out[28] = (inl >> 20) % (1 << 11)
   478  	out[29] = (inl >> 31)
   479  	binary.Read(in, binary.LittleEndian, &inl)
   480  	out[29] |= (inl % (1 << 10)) << (11 - 10)
   481  	out[30] = (inl >> 10) % (1 << 11)
   482  	out[31] = (inl >> 21)
   483  }
   484  
   485  func unpack12_32(in io.Reader, out []uint32) {
   486  	var inl uint32
   487  	binary.Read(in, binary.LittleEndian, &inl)
   488  	out[0] = (inl >> 0) % (1 << 12)
   489  	out[1] = (inl >> 12) % (1 << 12)
   490  	out[2] = (inl >> 24)
   491  	binary.Read(in, binary.LittleEndian, &inl)
   492  	out[2] |= (inl % (1 << 4)) << (12 - 4)
   493  	out[3] = (inl >> 4) % (1 << 12)
   494  	out[4] = (inl >> 16) % (1 << 12)
   495  	out[5] = (inl >> 28)
   496  	binary.Read(in, binary.LittleEndian, &inl)
   497  	out[5] |= (inl % (1 << 8)) << (12 - 8)
   498  	out[6] = (inl >> 8) % (1 << 12)
   499  	out[7] = (inl >> 20)
   500  	binary.Read(in, binary.LittleEndian, &inl)
   501  	out[8] = (inl >> 0) % (1 << 12)
   502  	out[9] = (inl >> 12) % (1 << 12)
   503  	out[10] = (inl >> 24)
   504  	binary.Read(in, binary.LittleEndian, &inl)
   505  	out[10] |= (inl % (1 << 4)) << (12 - 4)
   506  	out[11] = (inl >> 4) % (1 << 12)
   507  	out[12] = (inl >> 16) % (1 << 12)
   508  	out[13] = (inl >> 28)
   509  	binary.Read(in, binary.LittleEndian, &inl)
   510  	out[13] |= (inl % (1 << 8)) << (12 - 8)
   511  	out[14] = (inl >> 8) % (1 << 12)
   512  	out[15] = (inl >> 20)
   513  	binary.Read(in, binary.LittleEndian, &inl)
   514  	out[16] = (inl >> 0) % (1 << 12)
   515  	out[17] = (inl >> 12) % (1 << 12)
   516  	out[18] = (inl >> 24)
   517  	binary.Read(in, binary.LittleEndian, &inl)
   518  	out[18] |= (inl % (1 << 4)) << (12 - 4)
   519  	out[19] = (inl >> 4) % (1 << 12)
   520  	out[20] = (inl >> 16) % (1 << 12)
   521  	out[21] = (inl >> 28)
   522  	binary.Read(in, binary.LittleEndian, &inl)
   523  	out[21] |= (inl % (1 << 8)) << (12 - 8)
   524  	out[22] = (inl >> 8) % (1 << 12)
   525  	out[23] = (inl >> 20)
   526  	binary.Read(in, binary.LittleEndian, &inl)
   527  	out[24] = (inl >> 0) % (1 << 12)
   528  	out[25] = (inl >> 12) % (1 << 12)
   529  	out[26] = (inl >> 24)
   530  	binary.Read(in, binary.LittleEndian, &inl)
   531  	out[26] |= (inl % (1 << 4)) << (12 - 4)
   532  	out[27] = (inl >> 4) % (1 << 12)
   533  	out[28] = (inl >> 16) % (1 << 12)
   534  	out[29] = (inl >> 28)
   535  	binary.Read(in, binary.LittleEndian, &inl)
   536  	out[29] |= (inl % (1 << 8)) << (12 - 8)
   537  	out[30] = (inl >> 8) % (1 << 12)
   538  	out[31] = (inl >> 20)
   539  }
   540  
   541  func unpack13_32(in io.Reader, out []uint32) {
   542  	var inl uint32
   543  	binary.Read(in, binary.LittleEndian, &inl)
   544  	out[0] = (inl >> 0) % (1 << 13)
   545  	out[1] = (inl >> 13) % (1 << 13)
   546  	out[2] = (inl >> 26)
   547  	binary.Read(in, binary.LittleEndian, &inl)
   548  	out[2] |= (inl % (1 << 7)) << (13 - 7)
   549  	out[3] = (inl >> 7) % (1 << 13)
   550  	out[4] = (inl >> 20)
   551  	binary.Read(in, binary.LittleEndian, &inl)
   552  	out[4] |= (inl % (1 << 1)) << (13 - 1)
   553  	out[5] = (inl >> 1) % (1 << 13)
   554  	out[6] = (inl >> 14) % (1 << 13)
   555  	out[7] = (inl >> 27)
   556  	binary.Read(in, binary.LittleEndian, &inl)
   557  	out[7] |= (inl % (1 << 8)) << (13 - 8)
   558  	out[8] = (inl >> 8) % (1 << 13)
   559  	out[9] = (inl >> 21)
   560  	binary.Read(in, binary.LittleEndian, &inl)
   561  	out[9] |= (inl % (1 << 2)) << (13 - 2)
   562  	out[10] = (inl >> 2) % (1 << 13)
   563  	out[11] = (inl >> 15) % (1 << 13)
   564  	out[12] = (inl >> 28)
   565  	binary.Read(in, binary.LittleEndian, &inl)
   566  	out[12] |= (inl % (1 << 9)) << (13 - 9)
   567  	out[13] = (inl >> 9) % (1 << 13)
   568  	out[14] = (inl >> 22)
   569  	binary.Read(in, binary.LittleEndian, &inl)
   570  	out[14] |= (inl % (1 << 3)) << (13 - 3)
   571  	out[15] = (inl >> 3) % (1 << 13)
   572  	out[16] = (inl >> 16) % (1 << 13)
   573  	out[17] = (inl >> 29)
   574  	binary.Read(in, binary.LittleEndian, &inl)
   575  	out[17] |= (inl % (1 << 10)) << (13 - 10)
   576  	out[18] = (inl >> 10) % (1 << 13)
   577  	out[19] = (inl >> 23)
   578  	binary.Read(in, binary.LittleEndian, &inl)
   579  	out[19] |= (inl % (1 << 4)) << (13 - 4)
   580  	out[20] = (inl >> 4) % (1 << 13)
   581  	out[21] = (inl >> 17) % (1 << 13)
   582  	out[22] = (inl >> 30)
   583  	binary.Read(in, binary.LittleEndian, &inl)
   584  	out[22] |= (inl % (1 << 11)) << (13 - 11)
   585  	out[23] = (inl >> 11) % (1 << 13)
   586  	out[24] = (inl >> 24)
   587  	binary.Read(in, binary.LittleEndian, &inl)
   588  	out[24] |= (inl % (1 << 5)) << (13 - 5)
   589  	out[25] = (inl >> 5) % (1 << 13)
   590  	out[26] = (inl >> 18) % (1 << 13)
   591  	out[27] = (inl >> 31)
   592  	binary.Read(in, binary.LittleEndian, &inl)
   593  	out[27] |= (inl % (1 << 12)) << (13 - 12)
   594  	out[28] = (inl >> 12) % (1 << 13)
   595  	out[29] = (inl >> 25)
   596  	binary.Read(in, binary.LittleEndian, &inl)
   597  	out[29] |= (inl % (1 << 6)) << (13 - 6)
   598  	out[30] = (inl >> 6) % (1 << 13)
   599  	out[31] = (inl >> 19)
   600  }
   601  
   602  func unpack14_32(in io.Reader, out []uint32) {
   603  	var inl uint32
   604  	binary.Read(in, binary.LittleEndian, &inl)
   605  	out[0] = (inl >> 0) % (1 << 14)
   606  	out[1] = (inl >> 14) % (1 << 14)
   607  	out[2] = (inl >> 28)
   608  	binary.Read(in, binary.LittleEndian, &inl)
   609  	out[2] |= (inl % (1 << 10)) << (14 - 10)
   610  	out[3] = (inl >> 10) % (1 << 14)
   611  	out[4] = (inl >> 24)
   612  	binary.Read(in, binary.LittleEndian, &inl)
   613  	out[4] |= (inl % (1 << 6)) << (14 - 6)
   614  	out[5] = (inl >> 6) % (1 << 14)
   615  	out[6] = (inl >> 20)
   616  	binary.Read(in, binary.LittleEndian, &inl)
   617  	out[6] |= (inl % (1 << 2)) << (14 - 2)
   618  	out[7] = (inl >> 2) % (1 << 14)
   619  	out[8] = (inl >> 16) % (1 << 14)
   620  	out[9] = (inl >> 30)
   621  	binary.Read(in, binary.LittleEndian, &inl)
   622  	out[9] |= (inl % (1 << 12)) << (14 - 12)
   623  	out[10] = (inl >> 12) % (1 << 14)
   624  	out[11] = (inl >> 26)
   625  	binary.Read(in, binary.LittleEndian, &inl)
   626  	out[11] |= (inl % (1 << 8)) << (14 - 8)
   627  	out[12] = (inl >> 8) % (1 << 14)
   628  	out[13] = (inl >> 22)
   629  	binary.Read(in, binary.LittleEndian, &inl)
   630  	out[13] |= (inl % (1 << 4)) << (14 - 4)
   631  	out[14] = (inl >> 4) % (1 << 14)
   632  	out[15] = (inl >> 18)
   633  	binary.Read(in, binary.LittleEndian, &inl)
   634  	out[16] = (inl >> 0) % (1 << 14)
   635  	out[17] = (inl >> 14) % (1 << 14)
   636  	out[18] = (inl >> 28)
   637  	binary.Read(in, binary.LittleEndian, &inl)
   638  	out[18] |= (inl % (1 << 10)) << (14 - 10)
   639  	out[19] = (inl >> 10) % (1 << 14)
   640  	out[20] = (inl >> 24)
   641  	binary.Read(in, binary.LittleEndian, &inl)
   642  	out[20] |= (inl % (1 << 6)) << (14 - 6)
   643  	out[21] = (inl >> 6) % (1 << 14)
   644  	out[22] = (inl >> 20)
   645  	binary.Read(in, binary.LittleEndian, &inl)
   646  	out[22] |= (inl % (1 << 2)) << (14 - 2)
   647  	out[23] = (inl >> 2) % (1 << 14)
   648  	out[24] = (inl >> 16) % (1 << 14)
   649  	out[25] = (inl >> 30)
   650  	binary.Read(in, binary.LittleEndian, &inl)
   651  	out[25] |= (inl % (1 << 12)) << (14 - 12)
   652  	out[26] = (inl >> 12) % (1 << 14)
   653  	out[27] = (inl >> 26)
   654  	binary.Read(in, binary.LittleEndian, &inl)
   655  	out[27] |= (inl % (1 << 8)) << (14 - 8)
   656  	out[28] = (inl >> 8) % (1 << 14)
   657  	out[29] = (inl >> 22)
   658  	binary.Read(in, binary.LittleEndian, &inl)
   659  	out[29] |= (inl % (1 << 4)) << (14 - 4)
   660  	out[30] = (inl >> 4) % (1 << 14)
   661  	out[31] = (inl >> 18)
   662  }
   663  
   664  func unpack15_32(in io.Reader, out []uint32) {
   665  	var inl uint32
   666  	binary.Read(in, binary.LittleEndian, &inl)
   667  	out[0] = (inl >> 0) % (1 << 15)
   668  	out[1] = (inl >> 15) % (1 << 15)
   669  	out[2] = (inl >> 30)
   670  	binary.Read(in, binary.LittleEndian, &inl)
   671  	out[2] |= (inl % (1 << 13)) << (15 - 13)
   672  	out[3] = (inl >> 13) % (1 << 15)
   673  	out[4] = (inl >> 28)
   674  	binary.Read(in, binary.LittleEndian, &inl)
   675  	out[4] |= (inl % (1 << 11)) << (15 - 11)
   676  	out[5] = (inl >> 11) % (1 << 15)
   677  	out[6] = (inl >> 26)
   678  	binary.Read(in, binary.LittleEndian, &inl)
   679  	out[6] |= (inl % (1 << 9)) << (15 - 9)
   680  	out[7] = (inl >> 9) % (1 << 15)
   681  	out[8] = (inl >> 24)
   682  	binary.Read(in, binary.LittleEndian, &inl)
   683  	out[8] |= (inl % (1 << 7)) << (15 - 7)
   684  	out[9] = (inl >> 7) % (1 << 15)
   685  	out[10] = (inl >> 22)
   686  	binary.Read(in, binary.LittleEndian, &inl)
   687  	out[10] |= (inl % (1 << 5)) << (15 - 5)
   688  	out[11] = (inl >> 5) % (1 << 15)
   689  	out[12] = (inl >> 20)
   690  	binary.Read(in, binary.LittleEndian, &inl)
   691  	out[12] |= (inl % (1 << 3)) << (15 - 3)
   692  	out[13] = (inl >> 3) % (1 << 15)
   693  	out[14] = (inl >> 18)
   694  	binary.Read(in, binary.LittleEndian, &inl)
   695  	out[14] |= (inl % (1 << 1)) << (15 - 1)
   696  	out[15] = (inl >> 1) % (1 << 15)
   697  	out[16] = (inl >> 16) % (1 << 15)
   698  	out[17] = (inl >> 31)
   699  	binary.Read(in, binary.LittleEndian, &inl)
   700  	out[17] |= (inl % (1 << 14)) << (15 - 14)
   701  	out[18] = (inl >> 14) % (1 << 15)
   702  	out[19] = (inl >> 29)
   703  	binary.Read(in, binary.LittleEndian, &inl)
   704  	out[19] |= (inl % (1 << 12)) << (15 - 12)
   705  	out[20] = (inl >> 12) % (1 << 15)
   706  	out[21] = (inl >> 27)
   707  	binary.Read(in, binary.LittleEndian, &inl)
   708  	out[21] |= (inl % (1 << 10)) << (15 - 10)
   709  	out[22] = (inl >> 10) % (1 << 15)
   710  	out[23] = (inl >> 25)
   711  	binary.Read(in, binary.LittleEndian, &inl)
   712  	out[23] |= (inl % (1 << 8)) << (15 - 8)
   713  	out[24] = (inl >> 8) % (1 << 15)
   714  	out[25] = (inl >> 23)
   715  	binary.Read(in, binary.LittleEndian, &inl)
   716  	out[25] |= (inl % (1 << 6)) << (15 - 6)
   717  	out[26] = (inl >> 6) % (1 << 15)
   718  	out[27] = (inl >> 21)
   719  	binary.Read(in, binary.LittleEndian, &inl)
   720  	out[27] |= (inl % (1 << 4)) << (15 - 4)
   721  	out[28] = (inl >> 4) % (1 << 15)
   722  	out[29] = (inl >> 19)
   723  	binary.Read(in, binary.LittleEndian, &inl)
   724  	out[29] |= (inl % (1 << 2)) << (15 - 2)
   725  	out[30] = (inl >> 2) % (1 << 15)
   726  	out[31] = (inl >> 17)
   727  }
   728  
   729  func unpack16_32(in io.Reader, out []uint32) {
   730  	var inl uint32
   731  	for i := 0; i < 16; i++ {
   732  		binary.Read(in, binary.LittleEndian, &inl)
   733  		out[i*2] = (inl >> 0) % (1 << 16)
   734  		out[(i*2)+1] = (inl >> 16)
   735  	}
   736  }
   737  
   738  func unpack17_32(in io.Reader, out []uint32) {
   739  	var inl uint32
   740  	binary.Read(in, binary.LittleEndian, &inl)
   741  	out[0] = (inl >> 0) % (1 << 17)
   742  	out[1] = (inl >> 17)
   743  	binary.Read(in, binary.LittleEndian, &inl)
   744  	out[1] |= (inl % (1 << 2)) << (17 - 2)
   745  	out[2] = (inl >> 2) % (1 << 17)
   746  	out[3] = (inl >> 19)
   747  	binary.Read(in, binary.LittleEndian, &inl)
   748  	out[3] |= (inl % (1 << 4)) << (17 - 4)
   749  	out[4] = (inl >> 4) % (1 << 17)
   750  	out[5] = (inl >> 21)
   751  	binary.Read(in, binary.LittleEndian, &inl)
   752  	out[5] |= (inl % (1 << 6)) << (17 - 6)
   753  	out[6] = (inl >> 6) % (1 << 17)
   754  	out[7] = (inl >> 23)
   755  	binary.Read(in, binary.LittleEndian, &inl)
   756  	out[7] |= (inl % (1 << 8)) << (17 - 8)
   757  	out[8] = (inl >> 8) % (1 << 17)
   758  	out[9] = (inl >> 25)
   759  	binary.Read(in, binary.LittleEndian, &inl)
   760  	out[9] |= (inl % (1 << 10)) << (17 - 10)
   761  	out[10] = (inl >> 10) % (1 << 17)
   762  	out[11] = (inl >> 27)
   763  	binary.Read(in, binary.LittleEndian, &inl)
   764  	out[11] |= (inl % (1 << 12)) << (17 - 12)
   765  	out[12] = (inl >> 12) % (1 << 17)
   766  	out[13] = (inl >> 29)
   767  	binary.Read(in, binary.LittleEndian, &inl)
   768  	out[13] |= (inl % (1 << 14)) << (17 - 14)
   769  	out[14] = (inl >> 14) % (1 << 17)
   770  	out[15] = (inl >> 31)
   771  	binary.Read(in, binary.LittleEndian, &inl)
   772  	out[15] |= (inl % (1 << 16)) << (17 - 16)
   773  	out[16] = (inl >> 16)
   774  	binary.Read(in, binary.LittleEndian, &inl)
   775  	out[16] |= (inl % (1 << 1)) << (17 - 1)
   776  	out[17] = (inl >> 1) % (1 << 17)
   777  	out[18] = (inl >> 18)
   778  	binary.Read(in, binary.LittleEndian, &inl)
   779  	out[18] |= (inl % (1 << 3)) << (17 - 3)
   780  	out[19] = (inl >> 3) % (1 << 17)
   781  	out[20] = (inl >> 20)
   782  	binary.Read(in, binary.LittleEndian, &inl)
   783  	out[20] |= (inl % (1 << 5)) << (17 - 5)
   784  	out[21] = (inl >> 5) % (1 << 17)
   785  	out[22] = (inl >> 22)
   786  	binary.Read(in, binary.LittleEndian, &inl)
   787  	out[22] |= (inl % (1 << 7)) << (17 - 7)
   788  	out[23] = (inl >> 7) % (1 << 17)
   789  	out[24] = (inl >> 24)
   790  	binary.Read(in, binary.LittleEndian, &inl)
   791  	out[24] |= (inl % (1 << 9)) << (17 - 9)
   792  	out[25] = (inl >> 9) % (1 << 17)
   793  	out[26] = (inl >> 26)
   794  	binary.Read(in, binary.LittleEndian, &inl)
   795  	out[26] |= (inl % (1 << 11)) << (17 - 11)
   796  	out[27] = (inl >> 11) % (1 << 17)
   797  	out[28] = (inl >> 28)
   798  	binary.Read(in, binary.LittleEndian, &inl)
   799  	out[28] |= (inl % (1 << 13)) << (17 - 13)
   800  	out[29] = (inl >> 13) % (1 << 17)
   801  	out[30] = (inl >> 30)
   802  	binary.Read(in, binary.LittleEndian, &inl)
   803  	out[30] |= (inl % (1 << 15)) << (17 - 15)
   804  	out[31] = (inl >> 15)
   805  }
   806  
   807  func unpack18_32(in io.Reader, out []uint32) {
   808  	var inl uint32
   809  	binary.Read(in, binary.LittleEndian, &inl)
   810  	out[0] = (inl >> 0) % (1 << 18)
   811  	out[1] = (inl >> 18)
   812  	binary.Read(in, binary.LittleEndian, &inl)
   813  	out[1] |= (inl % (1 << 4)) << (18 - 4)
   814  	out[2] = (inl >> 4) % (1 << 18)
   815  	out[3] = (inl >> 22)
   816  	binary.Read(in, binary.LittleEndian, &inl)
   817  	out[3] |= (inl % (1 << 8)) << (18 - 8)
   818  	out[4] = (inl >> 8) % (1 << 18)
   819  	out[5] = (inl >> 26)
   820  	binary.Read(in, binary.LittleEndian, &inl)
   821  	out[5] |= (inl % (1 << 12)) << (18 - 12)
   822  	out[6] = (inl >> 12) % (1 << 18)
   823  	out[7] = (inl >> 30)
   824  	binary.Read(in, binary.LittleEndian, &inl)
   825  	out[7] |= (inl % (1 << 16)) << (18 - 16)
   826  	out[8] = (inl >> 16)
   827  	binary.Read(in, binary.LittleEndian, &inl)
   828  	out[8] |= (inl % (1 << 2)) << (18 - 2)
   829  	out[9] = (inl >> 2) % (1 << 18)
   830  	out[10] = (inl >> 20)
   831  	binary.Read(in, binary.LittleEndian, &inl)
   832  	out[10] |= (inl % (1 << 6)) << (18 - 6)
   833  	out[11] = (inl >> 6) % (1 << 18)
   834  	out[12] = (inl >> 24)
   835  	binary.Read(in, binary.LittleEndian, &inl)
   836  	out[12] |= (inl % (1 << 10)) << (18 - 10)
   837  	out[13] = (inl >> 10) % (1 << 18)
   838  	out[14] = (inl >> 28)
   839  	binary.Read(in, binary.LittleEndian, &inl)
   840  	out[14] |= (inl % (1 << 14)) << (18 - 14)
   841  	out[15] = (inl >> 14)
   842  	binary.Read(in, binary.LittleEndian, &inl)
   843  	out[16] = (inl >> 0) % (1 << 18)
   844  	out[17] = (inl >> 18)
   845  	binary.Read(in, binary.LittleEndian, &inl)
   846  	out[17] |= (inl % (1 << 4)) << (18 - 4)
   847  	out[18] = (inl >> 4) % (1 << 18)
   848  	out[19] = (inl >> 22)
   849  	binary.Read(in, binary.LittleEndian, &inl)
   850  	out[19] |= (inl % (1 << 8)) << (18 - 8)
   851  	out[20] = (inl >> 8) % (1 << 18)
   852  	out[21] = (inl >> 26)
   853  	binary.Read(in, binary.LittleEndian, &inl)
   854  	out[21] |= (inl % (1 << 12)) << (18 - 12)
   855  	out[22] = (inl >> 12) % (1 << 18)
   856  	out[23] = (inl >> 30)
   857  	binary.Read(in, binary.LittleEndian, &inl)
   858  	out[23] |= (inl % (1 << 16)) << (18 - 16)
   859  	out[24] = (inl >> 16)
   860  	binary.Read(in, binary.LittleEndian, &inl)
   861  	out[24] |= (inl % (1 << 2)) << (18 - 2)
   862  	out[25] = (inl >> 2) % (1 << 18)
   863  	out[26] = (inl >> 20)
   864  	binary.Read(in, binary.LittleEndian, &inl)
   865  	out[26] |= (inl % (1 << 6)) << (18 - 6)
   866  	out[27] = (inl >> 6) % (1 << 18)
   867  	out[28] = (inl >> 24)
   868  	binary.Read(in, binary.LittleEndian, &inl)
   869  	out[28] |= (inl % (1 << 10)) << (18 - 10)
   870  	out[29] = (inl >> 10) % (1 << 18)
   871  	out[30] = (inl >> 28)
   872  	binary.Read(in, binary.LittleEndian, &inl)
   873  	out[30] |= (inl % (1 << 14)) << (18 - 14)
   874  	out[31] = (inl >> 14)
   875  }
   876  
   877  func unpack19_32(in io.Reader, out []uint32) {
   878  	var inl uint32
   879  	binary.Read(in, binary.LittleEndian, &inl)
   880  	out[0] = (inl >> 0) % (1 << 19)
   881  	out[1] = (inl >> 19)
   882  	binary.Read(in, binary.LittleEndian, &inl)
   883  	out[1] |= (inl % (1 << 6)) << (19 - 6)
   884  	out[2] = (inl >> 6) % (1 << 19)
   885  	out[3] = (inl >> 25)
   886  	binary.Read(in, binary.LittleEndian, &inl)
   887  	out[3] |= (inl % (1 << 12)) << (19 - 12)
   888  	out[4] = (inl >> 12) % (1 << 19)
   889  	out[5] = (inl >> 31)
   890  	binary.Read(in, binary.LittleEndian, &inl)
   891  	out[5] |= (inl % (1 << 18)) << (19 - 18)
   892  	out[6] = (inl >> 18)
   893  	binary.Read(in, binary.LittleEndian, &inl)
   894  	out[6] |= (inl % (1 << 5)) << (19 - 5)
   895  	out[7] = (inl >> 5) % (1 << 19)
   896  	out[8] = (inl >> 24)
   897  	binary.Read(in, binary.LittleEndian, &inl)
   898  	out[8] |= (inl % (1 << 11)) << (19 - 11)
   899  	out[9] = (inl >> 11) % (1 << 19)
   900  	out[10] = (inl >> 30)
   901  	binary.Read(in, binary.LittleEndian, &inl)
   902  	out[10] |= (inl % (1 << 17)) << (19 - 17)
   903  	out[11] = (inl >> 17)
   904  	binary.Read(in, binary.LittleEndian, &inl)
   905  	out[11] |= (inl % (1 << 4)) << (19 - 4)
   906  	out[12] = (inl >> 4) % (1 << 19)
   907  	out[13] = (inl >> 23)
   908  	binary.Read(in, binary.LittleEndian, &inl)
   909  	out[13] |= (inl % (1 << 10)) << (19 - 10)
   910  	out[14] = (inl >> 10) % (1 << 19)
   911  	out[15] = (inl >> 29)
   912  	binary.Read(in, binary.LittleEndian, &inl)
   913  	out[15] |= (inl % (1 << 16)) << (19 - 16)
   914  	out[16] = (inl >> 16)
   915  	binary.Read(in, binary.LittleEndian, &inl)
   916  	out[16] |= (inl % (1 << 3)) << (19 - 3)
   917  	out[17] = (inl >> 3) % (1 << 19)
   918  	out[18] = (inl >> 22)
   919  	binary.Read(in, binary.LittleEndian, &inl)
   920  	out[18] |= (inl % (1 << 9)) << (19 - 9)
   921  	out[19] = (inl >> 9) % (1 << 19)
   922  	out[20] = (inl >> 28)
   923  	binary.Read(in, binary.LittleEndian, &inl)
   924  	out[20] |= (inl % (1 << 15)) << (19 - 15)
   925  	out[21] = (inl >> 15)
   926  	binary.Read(in, binary.LittleEndian, &inl)
   927  	out[21] |= (inl % (1 << 2)) << (19 - 2)
   928  	out[22] = (inl >> 2) % (1 << 19)
   929  	out[23] = (inl >> 21)
   930  	binary.Read(in, binary.LittleEndian, &inl)
   931  	out[23] |= (inl % (1 << 8)) << (19 - 8)
   932  	out[24] = (inl >> 8) % (1 << 19)
   933  	out[25] = (inl >> 27)
   934  	binary.Read(in, binary.LittleEndian, &inl)
   935  	out[25] |= (inl % (1 << 14)) << (19 - 14)
   936  	out[26] = (inl >> 14)
   937  	binary.Read(in, binary.LittleEndian, &inl)
   938  	out[26] |= (inl % (1 << 1)) << (19 - 1)
   939  	out[27] = (inl >> 1) % (1 << 19)
   940  	out[28] = (inl >> 20)
   941  	binary.Read(in, binary.LittleEndian, &inl)
   942  	out[28] |= (inl % (1 << 7)) << (19 - 7)
   943  	out[29] = (inl >> 7) % (1 << 19)
   944  	out[30] = (inl >> 26)
   945  	binary.Read(in, binary.LittleEndian, &inl)
   946  	out[30] |= (inl % (1 << 13)) << (19 - 13)
   947  	out[31] = (inl >> 13)
   948  }
   949  
   950  func unpack20_32(in io.Reader, out []uint32) {
   951  	var inl uint32
   952  	binary.Read(in, binary.LittleEndian, &inl)
   953  	out[0] = (inl >> 0) % (1 << 20)
   954  	out[1] = (inl >> 20)
   955  	binary.Read(in, binary.LittleEndian, &inl)
   956  	out[1] |= (inl % (1 << 8)) << (20 - 8)
   957  	out[2] = (inl >> 8) % (1 << 20)
   958  	out[3] = (inl >> 28)
   959  	binary.Read(in, binary.LittleEndian, &inl)
   960  	out[3] |= (inl % (1 << 16)) << (20 - 16)
   961  	out[4] = (inl >> 16)
   962  	binary.Read(in, binary.LittleEndian, &inl)
   963  	out[4] |= (inl % (1 << 4)) << (20 - 4)
   964  	out[5] = (inl >> 4) % (1 << 20)
   965  	out[6] = (inl >> 24)
   966  	binary.Read(in, binary.LittleEndian, &inl)
   967  	out[6] |= (inl % (1 << 12)) << (20 - 12)
   968  	out[7] = (inl >> 12)
   969  	binary.Read(in, binary.LittleEndian, &inl)
   970  	out[8] = (inl >> 0) % (1 << 20)
   971  	out[9] = (inl >> 20)
   972  	binary.Read(in, binary.LittleEndian, &inl)
   973  	out[9] |= (inl % (1 << 8)) << (20 - 8)
   974  	out[10] = (inl >> 8) % (1 << 20)
   975  	out[11] = (inl >> 28)
   976  	binary.Read(in, binary.LittleEndian, &inl)
   977  	out[11] |= (inl % (1 << 16)) << (20 - 16)
   978  	out[12] = (inl >> 16)
   979  	binary.Read(in, binary.LittleEndian, &inl)
   980  	out[12] |= (inl % (1 << 4)) << (20 - 4)
   981  	out[13] = (inl >> 4) % (1 << 20)
   982  	out[14] = (inl >> 24)
   983  	binary.Read(in, binary.LittleEndian, &inl)
   984  	out[14] |= (inl % (1 << 12)) << (20 - 12)
   985  	out[15] = (inl >> 12)
   986  	binary.Read(in, binary.LittleEndian, &inl)
   987  	out[16] = (inl >> 0) % (1 << 20)
   988  	out[17] = (inl >> 20)
   989  	binary.Read(in, binary.LittleEndian, &inl)
   990  	out[17] |= (inl % (1 << 8)) << (20 - 8)
   991  	out[18] = (inl >> 8) % (1 << 20)
   992  	out[19] = (inl >> 28)
   993  	binary.Read(in, binary.LittleEndian, &inl)
   994  	out[19] |= (inl % (1 << 16)) << (20 - 16)
   995  	out[20] = (inl >> 16)
   996  	binary.Read(in, binary.LittleEndian, &inl)
   997  	out[20] |= (inl % (1 << 4)) << (20 - 4)
   998  	out[21] = (inl >> 4) % (1 << 20)
   999  	out[22] = (inl >> 24)
  1000  	binary.Read(in, binary.LittleEndian, &inl)
  1001  	out[22] |= (inl % (1 << 12)) << (20 - 12)
  1002  	out[23] = (inl >> 12)
  1003  	binary.Read(in, binary.LittleEndian, &inl)
  1004  	out[24] = (inl >> 0) % (1 << 20)
  1005  	out[25] = (inl >> 20)
  1006  	binary.Read(in, binary.LittleEndian, &inl)
  1007  	out[25] |= (inl % (1 << 8)) << (20 - 8)
  1008  	out[26] = (inl >> 8) % (1 << 20)
  1009  	out[27] = (inl >> 28)
  1010  	binary.Read(in, binary.LittleEndian, &inl)
  1011  	out[27] |= (inl % (1 << 16)) << (20 - 16)
  1012  	out[28] = (inl >> 16)
  1013  	binary.Read(in, binary.LittleEndian, &inl)
  1014  	out[28] |= (inl % (1 << 4)) << (20 - 4)
  1015  	out[29] = (inl >> 4) % (1 << 20)
  1016  	out[30] = (inl >> 24)
  1017  	binary.Read(in, binary.LittleEndian, &inl)
  1018  	out[30] |= (inl % (1 << 12)) << (20 - 12)
  1019  	out[31] = (inl >> 12)
  1020  }
  1021  
  1022  func unpack21_32(in io.Reader, out []uint32) {
  1023  	var inl uint32
  1024  	binary.Read(in, binary.LittleEndian, &inl)
  1025  	out[0] = (inl >> 0) % (1 << 21)
  1026  	out[1] = (inl >> 21)
  1027  	binary.Read(in, binary.LittleEndian, &inl)
  1028  	out[1] |= (inl % (1 << 10)) << (21 - 10)
  1029  	out[2] = (inl >> 10) % (1 << 21)
  1030  	out[3] = (inl >> 31)
  1031  	binary.Read(in, binary.LittleEndian, &inl)
  1032  	out[3] |= (inl % (1 << 20)) << (21 - 20)
  1033  	out[4] = (inl >> 20)
  1034  	binary.Read(in, binary.LittleEndian, &inl)
  1035  	out[4] |= (inl % (1 << 9)) << (21 - 9)
  1036  	out[5] = (inl >> 9) % (1 << 21)
  1037  	out[6] = (inl >> 30)
  1038  	binary.Read(in, binary.LittleEndian, &inl)
  1039  	out[6] |= (inl % (1 << 19)) << (21 - 19)
  1040  	out[7] = (inl >> 19)
  1041  	binary.Read(in, binary.LittleEndian, &inl)
  1042  	out[7] |= (inl % (1 << 8)) << (21 - 8)
  1043  	out[8] = (inl >> 8) % (1 << 21)
  1044  	out[9] = (inl >> 29)
  1045  	binary.Read(in, binary.LittleEndian, &inl)
  1046  	out[9] |= (inl % (1 << 18)) << (21 - 18)
  1047  	out[10] = (inl >> 18)
  1048  	binary.Read(in, binary.LittleEndian, &inl)
  1049  	out[10] |= (inl % (1 << 7)) << (21 - 7)
  1050  	out[11] = (inl >> 7) % (1 << 21)
  1051  	out[12] = (inl >> 28)
  1052  	binary.Read(in, binary.LittleEndian, &inl)
  1053  	out[12] |= (inl % (1 << 17)) << (21 - 17)
  1054  	out[13] = (inl >> 17)
  1055  	binary.Read(in, binary.LittleEndian, &inl)
  1056  	out[13] |= (inl % (1 << 6)) << (21 - 6)
  1057  	out[14] = (inl >> 6) % (1 << 21)
  1058  	out[15] = (inl >> 27)
  1059  	binary.Read(in, binary.LittleEndian, &inl)
  1060  	out[15] |= (inl % (1 << 16)) << (21 - 16)
  1061  	out[16] = (inl >> 16)
  1062  	binary.Read(in, binary.LittleEndian, &inl)
  1063  	out[16] |= (inl % (1 << 5)) << (21 - 5)
  1064  	out[17] = (inl >> 5) % (1 << 21)
  1065  	out[18] = (inl >> 26)
  1066  	binary.Read(in, binary.LittleEndian, &inl)
  1067  	out[18] |= (inl % (1 << 15)) << (21 - 15)
  1068  	out[19] = (inl >> 15)
  1069  	binary.Read(in, binary.LittleEndian, &inl)
  1070  	out[19] |= (inl % (1 << 4)) << (21 - 4)
  1071  	out[20] = (inl >> 4) % (1 << 21)
  1072  	out[21] = (inl >> 25)
  1073  	binary.Read(in, binary.LittleEndian, &inl)
  1074  	out[21] |= (inl % (1 << 14)) << (21 - 14)
  1075  	out[22] = (inl >> 14)
  1076  	binary.Read(in, binary.LittleEndian, &inl)
  1077  	out[22] |= (inl % (1 << 3)) << (21 - 3)
  1078  	out[23] = (inl >> 3) % (1 << 21)
  1079  	out[24] = (inl >> 24)
  1080  	binary.Read(in, binary.LittleEndian, &inl)
  1081  	out[24] |= (inl % (1 << 13)) << (21 - 13)
  1082  	out[25] = (inl >> 13)
  1083  	binary.Read(in, binary.LittleEndian, &inl)
  1084  	out[25] |= (inl % (1 << 2)) << (21 - 2)
  1085  	out[26] = (inl >> 2) % (1 << 21)
  1086  	out[27] = (inl >> 23)
  1087  	binary.Read(in, binary.LittleEndian, &inl)
  1088  	out[27] |= (inl % (1 << 12)) << (21 - 12)
  1089  	out[28] = (inl >> 12)
  1090  	binary.Read(in, binary.LittleEndian, &inl)
  1091  	out[28] |= (inl % (1 << 1)) << (21 - 1)
  1092  	out[29] = (inl >> 1) % (1 << 21)
  1093  	out[30] = (inl >> 22)
  1094  	binary.Read(in, binary.LittleEndian, &inl)
  1095  	out[30] |= (inl % (1 << 11)) << (21 - 11)
  1096  	out[31] = (inl >> 11)
  1097  }
  1098  
  1099  func unpack22_32(in io.Reader, out []uint32) {
  1100  	var inl uint32
  1101  	binary.Read(in, binary.LittleEndian, &inl)
  1102  	out[0] = (inl >> 0) % (1 << 22)
  1103  	out[1] = (inl >> 22)
  1104  	binary.Read(in, binary.LittleEndian, &inl)
  1105  	out[1] |= (inl % (1 << 12)) << (22 - 12)
  1106  	out[2] = (inl >> 12)
  1107  	binary.Read(in, binary.LittleEndian, &inl)
  1108  	out[2] |= (inl % (1 << 2)) << (22 - 2)
  1109  	out[3] = (inl >> 2) % (1 << 22)
  1110  	out[4] = (inl >> 24)
  1111  	binary.Read(in, binary.LittleEndian, &inl)
  1112  	out[4] |= (inl % (1 << 14)) << (22 - 14)
  1113  	out[5] = (inl >> 14)
  1114  	binary.Read(in, binary.LittleEndian, &inl)
  1115  	out[5] |= (inl % (1 << 4)) << (22 - 4)
  1116  	out[6] = (inl >> 4) % (1 << 22)
  1117  	out[7] = (inl >> 26)
  1118  	binary.Read(in, binary.LittleEndian, &inl)
  1119  	out[7] |= (inl % (1 << 16)) << (22 - 16)
  1120  	out[8] = (inl >> 16)
  1121  	binary.Read(in, binary.LittleEndian, &inl)
  1122  	out[8] |= (inl % (1 << 6)) << (22 - 6)
  1123  	out[9] = (inl >> 6) % (1 << 22)
  1124  	out[10] = (inl >> 28)
  1125  	binary.Read(in, binary.LittleEndian, &inl)
  1126  	out[10] |= (inl % (1 << 18)) << (22 - 18)
  1127  	out[11] = (inl >> 18)
  1128  	binary.Read(in, binary.LittleEndian, &inl)
  1129  	out[11] |= (inl % (1 << 8)) << (22 - 8)
  1130  	out[12] = (inl >> 8) % (1 << 22)
  1131  	out[13] = (inl >> 30)
  1132  	binary.Read(in, binary.LittleEndian, &inl)
  1133  	out[13] |= (inl % (1 << 20)) << (22 - 20)
  1134  	out[14] = (inl >> 20)
  1135  	binary.Read(in, binary.LittleEndian, &inl)
  1136  	out[14] |= (inl % (1 << 10)) << (22 - 10)
  1137  	out[15] = (inl >> 10)
  1138  	binary.Read(in, binary.LittleEndian, &inl)
  1139  	out[16] = (inl >> 0) % (1 << 22)
  1140  	out[17] = (inl >> 22)
  1141  	binary.Read(in, binary.LittleEndian, &inl)
  1142  	out[17] |= (inl % (1 << 12)) << (22 - 12)
  1143  	out[18] = (inl >> 12)
  1144  	binary.Read(in, binary.LittleEndian, &inl)
  1145  	out[18] |= (inl % (1 << 2)) << (22 - 2)
  1146  	out[19] = (inl >> 2) % (1 << 22)
  1147  	out[20] = (inl >> 24)
  1148  	binary.Read(in, binary.LittleEndian, &inl)
  1149  	out[20] |= (inl % (1 << 14)) << (22 - 14)
  1150  	out[21] = (inl >> 14)
  1151  	binary.Read(in, binary.LittleEndian, &inl)
  1152  	out[21] |= (inl % (1 << 4)) << (22 - 4)
  1153  	out[22] = (inl >> 4) % (1 << 22)
  1154  	out[23] = (inl >> 26)
  1155  	binary.Read(in, binary.LittleEndian, &inl)
  1156  	out[23] |= (inl % (1 << 16)) << (22 - 16)
  1157  	out[24] = (inl >> 16)
  1158  	binary.Read(in, binary.LittleEndian, &inl)
  1159  	out[24] |= (inl % (1 << 6)) << (22 - 6)
  1160  	out[25] = (inl >> 6) % (1 << 22)
  1161  	out[26] = (inl >> 28)
  1162  	binary.Read(in, binary.LittleEndian, &inl)
  1163  	out[26] |= (inl % (1 << 18)) << (22 - 18)
  1164  	out[27] = (inl >> 18)
  1165  	binary.Read(in, binary.LittleEndian, &inl)
  1166  	out[27] |= (inl % (1 << 8)) << (22 - 8)
  1167  	out[28] = (inl >> 8) % (1 << 22)
  1168  	out[29] = (inl >> 30)
  1169  	binary.Read(in, binary.LittleEndian, &inl)
  1170  	out[29] |= (inl % (1 << 20)) << (22 - 20)
  1171  	out[30] = (inl >> 20)
  1172  	binary.Read(in, binary.LittleEndian, &inl)
  1173  	out[30] |= (inl % (1 << 10)) << (22 - 10)
  1174  	out[31] = (inl >> 10)
  1175  }
  1176  
  1177  func unpack23_32(in io.Reader, out []uint32) {
  1178  	var inl uint32
  1179  	binary.Read(in, binary.LittleEndian, &inl)
  1180  	out[0] = (inl >> 0) % (1 << 23)
  1181  	out[1] = (inl >> 23)
  1182  	binary.Read(in, binary.LittleEndian, &inl)
  1183  	out[1] |= (inl % (1 << 14)) << (23 - 14)
  1184  	out[2] = (inl >> 14)
  1185  	binary.Read(in, binary.LittleEndian, &inl)
  1186  	out[2] |= (inl % (1 << 5)) << (23 - 5)
  1187  	out[3] = (inl >> 5) % (1 << 23)
  1188  	out[4] = (inl >> 28)
  1189  	binary.Read(in, binary.LittleEndian, &inl)
  1190  	out[4] |= (inl % (1 << 19)) << (23 - 19)
  1191  	out[5] = (inl >> 19)
  1192  	binary.Read(in, binary.LittleEndian, &inl)
  1193  	out[5] |= (inl % (1 << 10)) << (23 - 10)
  1194  	out[6] = (inl >> 10)
  1195  	binary.Read(in, binary.LittleEndian, &inl)
  1196  	out[6] |= (inl % (1 << 1)) << (23 - 1)
  1197  	out[7] = (inl >> 1) % (1 << 23)
  1198  	out[8] = (inl >> 24)
  1199  	binary.Read(in, binary.LittleEndian, &inl)
  1200  	out[8] |= (inl % (1 << 15)) << (23 - 15)
  1201  	out[9] = (inl >> 15)
  1202  	binary.Read(in, binary.LittleEndian, &inl)
  1203  	out[9] |= (inl % (1 << 6)) << (23 - 6)
  1204  	out[10] = (inl >> 6) % (1 << 23)
  1205  	out[11] = (inl >> 29)
  1206  	binary.Read(in, binary.LittleEndian, &inl)
  1207  	out[11] |= (inl % (1 << 20)) << (23 - 20)
  1208  	out[12] = (inl >> 20)
  1209  	binary.Read(in, binary.LittleEndian, &inl)
  1210  	out[12] |= (inl % (1 << 11)) << (23 - 11)
  1211  	out[13] = (inl >> 11)
  1212  	binary.Read(in, binary.LittleEndian, &inl)
  1213  	out[13] |= (inl % (1 << 2)) << (23 - 2)
  1214  	out[14] = (inl >> 2) % (1 << 23)
  1215  	out[15] = (inl >> 25)
  1216  	binary.Read(in, binary.LittleEndian, &inl)
  1217  	out[15] |= (inl % (1 << 16)) << (23 - 16)
  1218  	out[16] = (inl >> 16)
  1219  	binary.Read(in, binary.LittleEndian, &inl)
  1220  	out[16] |= (inl % (1 << 7)) << (23 - 7)
  1221  	out[17] = (inl >> 7) % (1 << 23)
  1222  	out[18] = (inl >> 30)
  1223  	binary.Read(in, binary.LittleEndian, &inl)
  1224  	out[18] |= (inl % (1 << 21)) << (23 - 21)
  1225  	out[19] = (inl >> 21)
  1226  	binary.Read(in, binary.LittleEndian, &inl)
  1227  	out[19] |= (inl % (1 << 12)) << (23 - 12)
  1228  	out[20] = (inl >> 12)
  1229  	binary.Read(in, binary.LittleEndian, &inl)
  1230  	out[20] |= (inl % (1 << 3)) << (23 - 3)
  1231  	out[21] = (inl >> 3) % (1 << 23)
  1232  	out[22] = (inl >> 26)
  1233  	binary.Read(in, binary.LittleEndian, &inl)
  1234  	out[22] |= (inl % (1 << 17)) << (23 - 17)
  1235  	out[23] = (inl >> 17)
  1236  	binary.Read(in, binary.LittleEndian, &inl)
  1237  	out[23] |= (inl % (1 << 8)) << (23 - 8)
  1238  	out[24] = (inl >> 8) % (1 << 23)
  1239  	out[25] = (inl >> 31)
  1240  	binary.Read(in, binary.LittleEndian, &inl)
  1241  	out[25] |= (inl % (1 << 22)) << (23 - 22)
  1242  	out[26] = (inl >> 22)
  1243  	binary.Read(in, binary.LittleEndian, &inl)
  1244  	out[26] |= (inl % (1 << 13)) << (23 - 13)
  1245  	out[27] = (inl >> 13)
  1246  	binary.Read(in, binary.LittleEndian, &inl)
  1247  	out[27] |= (inl % (1 << 4)) << (23 - 4)
  1248  	out[28] = (inl >> 4) % (1 << 23)
  1249  	out[29] = (inl >> 27)
  1250  	binary.Read(in, binary.LittleEndian, &inl)
  1251  	out[29] |= (inl % (1 << 18)) << (23 - 18)
  1252  	out[30] = (inl >> 18)
  1253  	binary.Read(in, binary.LittleEndian, &inl)
  1254  	out[30] |= (inl % (1 << 9)) << (23 - 9)
  1255  	out[31] = (inl >> 9)
  1256  }
  1257  
  1258  func unpack24_32(in io.Reader, out []uint32) {
  1259  	var inl uint32
  1260  	for i := 0; i < 8; i++ {
  1261  		base := i * 4
  1262  
  1263  		binary.Read(in, binary.LittleEndian, &inl)
  1264  		out[base] = (inl >> 0) % (1 << 24)
  1265  		out[base+1] = (inl >> 24)
  1266  		binary.Read(in, binary.LittleEndian, &inl)
  1267  		out[base+1] |= (inl % (1 << 16)) << (24 - 16)
  1268  		out[base+2] = (inl >> 16)
  1269  		binary.Read(in, binary.LittleEndian, &inl)
  1270  		out[base+2] |= (inl % (1 << 8)) << (24 - 8)
  1271  		out[base+3] = (inl >> 8)
  1272  	}
  1273  }
  1274  
  1275  func unpack25_32(in io.Reader, out []uint32) {
  1276  	var inl uint32
  1277  	binary.Read(in, binary.LittleEndian, &inl)
  1278  	out[0] = (inl >> 0) % (1 << 25)
  1279  	out[1] = (inl >> 25)
  1280  	binary.Read(in, binary.LittleEndian, &inl)
  1281  	out[1] |= (inl % (1 << 18)) << (25 - 18)
  1282  	out[2] = (inl >> 18)
  1283  	binary.Read(in, binary.LittleEndian, &inl)
  1284  	out[2] |= (inl % (1 << 11)) << (25 - 11)
  1285  	out[3] = (inl >> 11)
  1286  	binary.Read(in, binary.LittleEndian, &inl)
  1287  	out[3] |= (inl % (1 << 4)) << (25 - 4)
  1288  	out[4] = (inl >> 4) % (1 << 25)
  1289  	out[5] = (inl >> 29)
  1290  	binary.Read(in, binary.LittleEndian, &inl)
  1291  	out[5] |= (inl % (1 << 22)) << (25 - 22)
  1292  	out[6] = (inl >> 22)
  1293  	binary.Read(in, binary.LittleEndian, &inl)
  1294  	out[6] |= (inl % (1 << 15)) << (25 - 15)
  1295  	out[7] = (inl >> 15)
  1296  	binary.Read(in, binary.LittleEndian, &inl)
  1297  	out[7] |= (inl % (1 << 8)) << (25 - 8)
  1298  	out[8] = (inl >> 8)
  1299  	binary.Read(in, binary.LittleEndian, &inl)
  1300  	out[8] |= (inl % (1 << 1)) << (25 - 1)
  1301  	out[9] = (inl >> 1) % (1 << 25)
  1302  	out[10] = (inl >> 26)
  1303  	binary.Read(in, binary.LittleEndian, &inl)
  1304  	out[10] |= (inl % (1 << 19)) << (25 - 19)
  1305  	out[11] = (inl >> 19)
  1306  	binary.Read(in, binary.LittleEndian, &inl)
  1307  	out[11] |= (inl % (1 << 12)) << (25 - 12)
  1308  	out[12] = (inl >> 12)
  1309  	binary.Read(in, binary.LittleEndian, &inl)
  1310  	out[12] |= (inl % (1 << 5)) << (25 - 5)
  1311  	out[13] = (inl >> 5) % (1 << 25)
  1312  	out[14] = (inl >> 30)
  1313  	binary.Read(in, binary.LittleEndian, &inl)
  1314  	out[14] |= (inl % (1 << 23)) << (25 - 23)
  1315  	out[15] = (inl >> 23)
  1316  	binary.Read(in, binary.LittleEndian, &inl)
  1317  	out[15] |= (inl % (1 << 16)) << (25 - 16)
  1318  	out[16] = (inl >> 16)
  1319  	binary.Read(in, binary.LittleEndian, &inl)
  1320  	out[16] |= (inl % (1 << 9)) << (25 - 9)
  1321  	out[17] = (inl >> 9)
  1322  	binary.Read(in, binary.LittleEndian, &inl)
  1323  	out[17] |= (inl % (1 << 2)) << (25 - 2)
  1324  	out[18] = (inl >> 2) % (1 << 25)
  1325  	out[19] = (inl >> 27)
  1326  	binary.Read(in, binary.LittleEndian, &inl)
  1327  	out[19] |= (inl % (1 << 20)) << (25 - 20)
  1328  	out[20] = (inl >> 20)
  1329  	binary.Read(in, binary.LittleEndian, &inl)
  1330  	out[20] |= (inl % (1 << 13)) << (25 - 13)
  1331  	out[21] = (inl >> 13)
  1332  	binary.Read(in, binary.LittleEndian, &inl)
  1333  	out[21] |= (inl % (1 << 6)) << (25 - 6)
  1334  	out[22] = (inl >> 6) % (1 << 25)
  1335  	out[23] = (inl >> 31)
  1336  	binary.Read(in, binary.LittleEndian, &inl)
  1337  	out[23] |= (inl % (1 << 24)) << (25 - 24)
  1338  	out[24] = (inl >> 24)
  1339  	binary.Read(in, binary.LittleEndian, &inl)
  1340  	out[24] |= (inl % (1 << 17)) << (25 - 17)
  1341  	out[25] = (inl >> 17)
  1342  	binary.Read(in, binary.LittleEndian, &inl)
  1343  	out[25] |= (inl % (1 << 10)) << (25 - 10)
  1344  	out[26] = (inl >> 10)
  1345  	binary.Read(in, binary.LittleEndian, &inl)
  1346  	out[26] |= (inl % (1 << 3)) << (25 - 3)
  1347  	out[27] = (inl >> 3) % (1 << 25)
  1348  	out[28] = (inl >> 28)
  1349  	binary.Read(in, binary.LittleEndian, &inl)
  1350  	out[28] |= (inl % (1 << 21)) << (25 - 21)
  1351  	out[29] = (inl >> 21)
  1352  	binary.Read(in, binary.LittleEndian, &inl)
  1353  	out[29] |= (inl % (1 << 14)) << (25 - 14)
  1354  	out[30] = (inl >> 14)
  1355  	binary.Read(in, binary.LittleEndian, &inl)
  1356  	out[30] |= (inl % (1 << 7)) << (25 - 7)
  1357  	out[31] = (inl >> 7)
  1358  }
  1359  
  1360  func unpack26_32(in io.Reader, out []uint32) {
  1361  	var inl uint32
  1362  	binary.Read(in, binary.LittleEndian, &inl)
  1363  	out[0] = (inl >> 0) % (1 << 26)
  1364  	out[1] = (inl >> 26)
  1365  	binary.Read(in, binary.LittleEndian, &inl)
  1366  	out[1] |= (inl % (1 << 20)) << (26 - 20)
  1367  	out[2] = (inl >> 20)
  1368  	binary.Read(in, binary.LittleEndian, &inl)
  1369  	out[2] |= (inl % (1 << 14)) << (26 - 14)
  1370  	out[3] = (inl >> 14)
  1371  	binary.Read(in, binary.LittleEndian, &inl)
  1372  	out[3] |= (inl % (1 << 8)) << (26 - 8)
  1373  	out[4] = (inl >> 8)
  1374  	binary.Read(in, binary.LittleEndian, &inl)
  1375  	out[4] |= (inl % (1 << 2)) << (26 - 2)
  1376  	out[5] = (inl >> 2) % (1 << 26)
  1377  	out[6] = (inl >> 28)
  1378  	binary.Read(in, binary.LittleEndian, &inl)
  1379  	out[6] |= (inl % (1 << 22)) << (26 - 22)
  1380  	out[7] = (inl >> 22)
  1381  	binary.Read(in, binary.LittleEndian, &inl)
  1382  	out[7] |= (inl % (1 << 16)) << (26 - 16)
  1383  	out[8] = (inl >> 16)
  1384  	binary.Read(in, binary.LittleEndian, &inl)
  1385  	out[8] |= (inl % (1 << 10)) << (26 - 10)
  1386  	out[9] = (inl >> 10)
  1387  	binary.Read(in, binary.LittleEndian, &inl)
  1388  	out[9] |= (inl % (1 << 4)) << (26 - 4)
  1389  	out[10] = (inl >> 4) % (1 << 26)
  1390  	out[11] = (inl >> 30)
  1391  	binary.Read(in, binary.LittleEndian, &inl)
  1392  	out[11] |= (inl % (1 << 24)) << (26 - 24)
  1393  	out[12] = (inl >> 24)
  1394  	binary.Read(in, binary.LittleEndian, &inl)
  1395  	out[12] |= (inl % (1 << 18)) << (26 - 18)
  1396  	out[13] = (inl >> 18)
  1397  	binary.Read(in, binary.LittleEndian, &inl)
  1398  	out[13] |= (inl % (1 << 12)) << (26 - 12)
  1399  	out[14] = (inl >> 12)
  1400  	binary.Read(in, binary.LittleEndian, &inl)
  1401  	out[14] |= (inl % (1 << 6)) << (26 - 6)
  1402  	out[15] = (inl >> 6)
  1403  	binary.Read(in, binary.LittleEndian, &inl)
  1404  	out[16] = (inl >> 0) % (1 << 26)
  1405  	out[17] = (inl >> 26)
  1406  	binary.Read(in, binary.LittleEndian, &inl)
  1407  	out[17] |= (inl % (1 << 20)) << (26 - 20)
  1408  	out[18] = (inl >> 20)
  1409  	binary.Read(in, binary.LittleEndian, &inl)
  1410  	out[18] |= (inl % (1 << 14)) << (26 - 14)
  1411  	out[19] = (inl >> 14)
  1412  	binary.Read(in, binary.LittleEndian, &inl)
  1413  	out[19] |= (inl % (1 << 8)) << (26 - 8)
  1414  	out[20] = (inl >> 8)
  1415  	binary.Read(in, binary.LittleEndian, &inl)
  1416  	out[20] |= (inl % (1 << 2)) << (26 - 2)
  1417  	out[21] = (inl >> 2) % (1 << 26)
  1418  	out[22] = (inl >> 28)
  1419  	binary.Read(in, binary.LittleEndian, &inl)
  1420  	out[22] |= (inl % (1 << 22)) << (26 - 22)
  1421  	out[23] = (inl >> 22)
  1422  	binary.Read(in, binary.LittleEndian, &inl)
  1423  	out[23] |= (inl % (1 << 16)) << (26 - 16)
  1424  	out[24] = (inl >> 16)
  1425  	binary.Read(in, binary.LittleEndian, &inl)
  1426  	out[24] |= (inl % (1 << 10)) << (26 - 10)
  1427  	out[25] = (inl >> 10)
  1428  	binary.Read(in, binary.LittleEndian, &inl)
  1429  	out[25] |= (inl % (1 << 4)) << (26 - 4)
  1430  	out[26] = (inl >> 4) % (1 << 26)
  1431  	out[27] = (inl >> 30)
  1432  	binary.Read(in, binary.LittleEndian, &inl)
  1433  	out[27] |= (inl % (1 << 24)) << (26 - 24)
  1434  	out[28] = (inl >> 24)
  1435  	binary.Read(in, binary.LittleEndian, &inl)
  1436  	out[28] |= (inl % (1 << 18)) << (26 - 18)
  1437  	out[29] = (inl >> 18)
  1438  	binary.Read(in, binary.LittleEndian, &inl)
  1439  	out[29] |= (inl % (1 << 12)) << (26 - 12)
  1440  	out[30] = (inl >> 12)
  1441  	binary.Read(in, binary.LittleEndian, &inl)
  1442  	out[30] |= (inl % (1 << 6)) << (26 - 6)
  1443  	out[31] = (inl >> 6)
  1444  }
  1445  
  1446  func unpack27_32(in io.Reader, out []uint32) {
  1447  	var inl uint32
  1448  	binary.Read(in, binary.LittleEndian, &inl)
  1449  	out[0] = (inl >> 0) % (1 << 27)
  1450  	out[1] = (inl >> 27)
  1451  	binary.Read(in, binary.LittleEndian, &inl)
  1452  	out[1] |= (inl % (1 << 22)) << (27 - 22)
  1453  	out[2] = (inl >> 22)
  1454  	binary.Read(in, binary.LittleEndian, &inl)
  1455  	out[2] |= (inl % (1 << 17)) << (27 - 17)
  1456  	out[3] = (inl >> 17)
  1457  	binary.Read(in, binary.LittleEndian, &inl)
  1458  	out[3] |= (inl % (1 << 12)) << (27 - 12)
  1459  	out[4] = (inl >> 12)
  1460  	binary.Read(in, binary.LittleEndian, &inl)
  1461  	out[4] |= (inl % (1 << 7)) << (27 - 7)
  1462  	out[5] = (inl >> 7)
  1463  	binary.Read(in, binary.LittleEndian, &inl)
  1464  	out[5] |= (inl % (1 << 2)) << (27 - 2)
  1465  	out[6] = (inl >> 2) % (1 << 27)
  1466  	out[7] = (inl >> 29)
  1467  	binary.Read(in, binary.LittleEndian, &inl)
  1468  	out[7] |= (inl % (1 << 24)) << (27 - 24)
  1469  	out[8] = (inl >> 24)
  1470  	binary.Read(in, binary.LittleEndian, &inl)
  1471  	out[8] |= (inl % (1 << 19)) << (27 - 19)
  1472  	out[9] = (inl >> 19)
  1473  	binary.Read(in, binary.LittleEndian, &inl)
  1474  	out[9] |= (inl % (1 << 14)) << (27 - 14)
  1475  	out[10] = (inl >> 14)
  1476  	binary.Read(in, binary.LittleEndian, &inl)
  1477  	out[10] |= (inl % (1 << 9)) << (27 - 9)
  1478  	out[11] = (inl >> 9)
  1479  	binary.Read(in, binary.LittleEndian, &inl)
  1480  	out[11] |= (inl % (1 << 4)) << (27 - 4)
  1481  	out[12] = (inl >> 4) % (1 << 27)
  1482  	out[13] = (inl >> 31)
  1483  	binary.Read(in, binary.LittleEndian, &inl)
  1484  	out[13] |= (inl % (1 << 26)) << (27 - 26)
  1485  	out[14] = (inl >> 26)
  1486  	binary.Read(in, binary.LittleEndian, &inl)
  1487  	out[14] |= (inl % (1 << 21)) << (27 - 21)
  1488  	out[15] = (inl >> 21)
  1489  	binary.Read(in, binary.LittleEndian, &inl)
  1490  	out[15] |= (inl % (1 << 16)) << (27 - 16)
  1491  	out[16] = (inl >> 16)
  1492  	binary.Read(in, binary.LittleEndian, &inl)
  1493  	out[16] |= (inl % (1 << 11)) << (27 - 11)
  1494  	out[17] = (inl >> 11)
  1495  	binary.Read(in, binary.LittleEndian, &inl)
  1496  	out[17] |= (inl % (1 << 6)) << (27 - 6)
  1497  	out[18] = (inl >> 6)
  1498  	binary.Read(in, binary.LittleEndian, &inl)
  1499  	out[18] |= (inl % (1 << 1)) << (27 - 1)
  1500  	out[19] = (inl >> 1) % (1 << 27)
  1501  	out[20] = (inl >> 28)
  1502  	binary.Read(in, binary.LittleEndian, &inl)
  1503  	out[20] |= (inl % (1 << 23)) << (27 - 23)
  1504  	out[21] = (inl >> 23)
  1505  	binary.Read(in, binary.LittleEndian, &inl)
  1506  	out[21] |= (inl % (1 << 18)) << (27 - 18)
  1507  	out[22] = (inl >> 18)
  1508  	binary.Read(in, binary.LittleEndian, &inl)
  1509  	out[22] |= (inl % (1 << 13)) << (27 - 13)
  1510  	out[23] = (inl >> 13)
  1511  	binary.Read(in, binary.LittleEndian, &inl)
  1512  	out[23] |= (inl % (1 << 8)) << (27 - 8)
  1513  	out[24] = (inl >> 8)
  1514  	binary.Read(in, binary.LittleEndian, &inl)
  1515  	out[24] |= (inl % (1 << 3)) << (27 - 3)
  1516  	out[25] = (inl >> 3) % (1 << 27)
  1517  	out[26] = (inl >> 30)
  1518  	binary.Read(in, binary.LittleEndian, &inl)
  1519  	out[26] |= (inl % (1 << 25)) << (27 - 25)
  1520  	out[27] = (inl >> 25)
  1521  	binary.Read(in, binary.LittleEndian, &inl)
  1522  	out[27] |= (inl % (1 << 20)) << (27 - 20)
  1523  	out[28] = (inl >> 20)
  1524  	binary.Read(in, binary.LittleEndian, &inl)
  1525  	out[28] |= (inl % (1 << 15)) << (27 - 15)
  1526  	out[29] = (inl >> 15)
  1527  	binary.Read(in, binary.LittleEndian, &inl)
  1528  	out[29] |= (inl % (1 << 10)) << (27 - 10)
  1529  	out[30] = (inl >> 10)
  1530  	binary.Read(in, binary.LittleEndian, &inl)
  1531  	out[30] |= (inl % (1 << 5)) << (27 - 5)
  1532  	out[31] = (inl >> 5)
  1533  }
  1534  
  1535  func unpack28_32(in io.Reader, out []uint32) {
  1536  	var inl uint32
  1537  	for i := 0; i < 4; i++ {
  1538  		base := i * 8
  1539  
  1540  		binary.Read(in, binary.LittleEndian, &inl)
  1541  		out[base] = (inl >> 0) % (1 << 28)
  1542  		out[base+1] = (inl >> 28)
  1543  		binary.Read(in, binary.LittleEndian, &inl)
  1544  		out[base+1] |= (inl % (1 << 24)) << (28 - 24)
  1545  		out[base+2] = (inl >> 24)
  1546  		binary.Read(in, binary.LittleEndian, &inl)
  1547  		out[base+2] |= (inl % (1 << 20)) << (28 - 20)
  1548  		out[base+3] = (inl >> 20)
  1549  		binary.Read(in, binary.LittleEndian, &inl)
  1550  		out[base+3] |= (inl % (1 << 16)) << (28 - 16)
  1551  		out[base+4] = (inl >> 16)
  1552  		binary.Read(in, binary.LittleEndian, &inl)
  1553  		out[base+4] |= (inl % (1 << 12)) << (28 - 12)
  1554  		out[base+5] = (inl >> 12)
  1555  		binary.Read(in, binary.LittleEndian, &inl)
  1556  		out[base+5] |= (inl % (1 << 8)) << (28 - 8)
  1557  		out[base+6] = (inl >> 8)
  1558  		binary.Read(in, binary.LittleEndian, &inl)
  1559  		out[base+6] |= (inl % (1 << 4)) << (28 - 4)
  1560  		out[base+7] = (inl >> 4)
  1561  	}
  1562  }
  1563  
  1564  func unpack29_32(in io.Reader, out []uint32) {
  1565  	var inl uint32
  1566  	binary.Read(in, binary.LittleEndian, &inl)
  1567  	out[0] = (inl >> 0) % (1 << 29)
  1568  	out[1] = (inl >> 29)
  1569  	binary.Read(in, binary.LittleEndian, &inl)
  1570  	out[1] |= (inl % (1 << 26)) << (29 - 26)
  1571  	out[2] = (inl >> 26)
  1572  	binary.Read(in, binary.LittleEndian, &inl)
  1573  	out[2] |= (inl % (1 << 23)) << (29 - 23)
  1574  	out[3] = (inl >> 23)
  1575  	binary.Read(in, binary.LittleEndian, &inl)
  1576  	out[3] |= (inl % (1 << 20)) << (29 - 20)
  1577  	out[4] = (inl >> 20)
  1578  	binary.Read(in, binary.LittleEndian, &inl)
  1579  	out[4] |= (inl % (1 << 17)) << (29 - 17)
  1580  	out[5] = (inl >> 17)
  1581  	binary.Read(in, binary.LittleEndian, &inl)
  1582  	out[5] |= (inl % (1 << 14)) << (29 - 14)
  1583  	out[6] = (inl >> 14)
  1584  	binary.Read(in, binary.LittleEndian, &inl)
  1585  	out[6] |= (inl % (1 << 11)) << (29 - 11)
  1586  	out[7] = (inl >> 11)
  1587  	binary.Read(in, binary.LittleEndian, &inl)
  1588  	out[7] |= (inl % (1 << 8)) << (29 - 8)
  1589  	out[8] = (inl >> 8)
  1590  	binary.Read(in, binary.LittleEndian, &inl)
  1591  	out[8] |= (inl % (1 << 5)) << (29 - 5)
  1592  	out[9] = (inl >> 5)
  1593  	binary.Read(in, binary.LittleEndian, &inl)
  1594  	out[9] |= (inl % (1 << 2)) << (29 - 2)
  1595  	out[10] = (inl >> 2) % (1 << 29)
  1596  	out[11] = (inl >> 31)
  1597  	binary.Read(in, binary.LittleEndian, &inl)
  1598  	out[11] |= (inl % (1 << 28)) << (29 - 28)
  1599  	out[12] = (inl >> 28)
  1600  	binary.Read(in, binary.LittleEndian, &inl)
  1601  	out[12] |= (inl % (1 << 25)) << (29 - 25)
  1602  	out[13] = (inl >> 25)
  1603  	binary.Read(in, binary.LittleEndian, &inl)
  1604  	out[13] |= (inl % (1 << 22)) << (29 - 22)
  1605  	out[14] = (inl >> 22)
  1606  	binary.Read(in, binary.LittleEndian, &inl)
  1607  	out[14] |= (inl % (1 << 19)) << (29 - 19)
  1608  	out[15] = (inl >> 19)
  1609  	binary.Read(in, binary.LittleEndian, &inl)
  1610  	out[15] |= (inl % (1 << 16)) << (29 - 16)
  1611  	out[16] = (inl >> 16)
  1612  	binary.Read(in, binary.LittleEndian, &inl)
  1613  	out[16] |= (inl % (1 << 13)) << (29 - 13)
  1614  	out[17] = (inl >> 13)
  1615  	binary.Read(in, binary.LittleEndian, &inl)
  1616  	out[17] |= (inl % (1 << 10)) << (29 - 10)
  1617  	out[18] = (inl >> 10)
  1618  	binary.Read(in, binary.LittleEndian, &inl)
  1619  	out[18] |= (inl % (1 << 7)) << (29 - 7)
  1620  	out[19] = (inl >> 7)
  1621  	binary.Read(in, binary.LittleEndian, &inl)
  1622  	out[19] |= (inl % (1 << 4)) << (29 - 4)
  1623  	out[20] = (inl >> 4)
  1624  	binary.Read(in, binary.LittleEndian, &inl)
  1625  	out[20] |= (inl % (1 << 1)) << (29 - 1)
  1626  	out[21] = (inl >> 1) % (1 << 29)
  1627  	out[22] = (inl >> 30)
  1628  	binary.Read(in, binary.LittleEndian, &inl)
  1629  	out[22] |= (inl % (1 << 27)) << (29 - 27)
  1630  	out[23] = (inl >> 27)
  1631  	binary.Read(in, binary.LittleEndian, &inl)
  1632  	out[23] |= (inl % (1 << 24)) << (29 - 24)
  1633  	out[24] = (inl >> 24)
  1634  	binary.Read(in, binary.LittleEndian, &inl)
  1635  	out[24] |= (inl % (1 << 21)) << (29 - 21)
  1636  	out[25] = (inl >> 21)
  1637  	binary.Read(in, binary.LittleEndian, &inl)
  1638  	out[25] |= (inl % (1 << 18)) << (29 - 18)
  1639  	out[26] = (inl >> 18)
  1640  	binary.Read(in, binary.LittleEndian, &inl)
  1641  	out[26] |= (inl % (1 << 15)) << (29 - 15)
  1642  	out[27] = (inl >> 15)
  1643  	binary.Read(in, binary.LittleEndian, &inl)
  1644  	out[27] |= (inl % (1 << 12)) << (29 - 12)
  1645  	out[28] = (inl >> 12)
  1646  	binary.Read(in, binary.LittleEndian, &inl)
  1647  	out[28] |= (inl % (1 << 9)) << (29 - 9)
  1648  	out[29] = (inl >> 9)
  1649  	binary.Read(in, binary.LittleEndian, &inl)
  1650  	out[29] |= (inl % (1 << 6)) << (29 - 6)
  1651  	out[30] = (inl >> 6)
  1652  	binary.Read(in, binary.LittleEndian, &inl)
  1653  	out[30] |= (inl % (1 << 3)) << (29 - 3)
  1654  	out[31] = (inl >> 3)
  1655  }
  1656  
  1657  func unpack30_32(in io.Reader, out []uint32) {
  1658  	var inl uint32
  1659  	binary.Read(in, binary.LittleEndian, &inl)
  1660  	out[0] = (inl >> 0) % (1 << 30)
  1661  	out[1] = (inl >> 30)
  1662  	binary.Read(in, binary.LittleEndian, &inl)
  1663  	out[1] |= (inl % (1 << 28)) << (30 - 28)
  1664  	out[2] = (inl >> 28)
  1665  	binary.Read(in, binary.LittleEndian, &inl)
  1666  	out[2] |= (inl % (1 << 26)) << (30 - 26)
  1667  	out[3] = (inl >> 26)
  1668  	binary.Read(in, binary.LittleEndian, &inl)
  1669  	out[3] |= (inl % (1 << 24)) << (30 - 24)
  1670  	out[4] = (inl >> 24)
  1671  	binary.Read(in, binary.LittleEndian, &inl)
  1672  	out[4] |= (inl % (1 << 22)) << (30 - 22)
  1673  	out[5] = (inl >> 22)
  1674  	binary.Read(in, binary.LittleEndian, &inl)
  1675  	out[5] |= (inl % (1 << 20)) << (30 - 20)
  1676  	out[6] = (inl >> 20)
  1677  	binary.Read(in, binary.LittleEndian, &inl)
  1678  	out[6] |= (inl % (1 << 18)) << (30 - 18)
  1679  	out[7] = (inl >> 18)
  1680  	binary.Read(in, binary.LittleEndian, &inl)
  1681  	out[7] |= (inl % (1 << 16)) << (30 - 16)
  1682  	out[8] = (inl >> 16)
  1683  	binary.Read(in, binary.LittleEndian, &inl)
  1684  	out[8] |= (inl % (1 << 14)) << (30 - 14)
  1685  	out[9] = (inl >> 14)
  1686  	binary.Read(in, binary.LittleEndian, &inl)
  1687  	out[9] |= (inl % (1 << 12)) << (30 - 12)
  1688  	out[10] = (inl >> 12)
  1689  	binary.Read(in, binary.LittleEndian, &inl)
  1690  	out[10] |= (inl % (1 << 10)) << (30 - 10)
  1691  	out[11] = (inl >> 10)
  1692  	binary.Read(in, binary.LittleEndian, &inl)
  1693  	out[11] |= (inl % (1 << 8)) << (30 - 8)
  1694  	out[12] = (inl >> 8)
  1695  	binary.Read(in, binary.LittleEndian, &inl)
  1696  	out[12] |= (inl % (1 << 6)) << (30 - 6)
  1697  	out[13] = (inl >> 6)
  1698  	binary.Read(in, binary.LittleEndian, &inl)
  1699  	out[13] |= (inl % (1 << 4)) << (30 - 4)
  1700  	out[14] = (inl >> 4)
  1701  	binary.Read(in, binary.LittleEndian, &inl)
  1702  	out[14] |= (inl % (1 << 2)) << (30 - 2)
  1703  	out[15] = (inl >> 2)
  1704  	binary.Read(in, binary.LittleEndian, &inl)
  1705  	out[16] = (inl >> 0) % (1 << 30)
  1706  	out[17] = (inl >> 30)
  1707  	binary.Read(in, binary.LittleEndian, &inl)
  1708  	out[17] |= (inl % (1 << 28)) << (30 - 28)
  1709  	out[18] = (inl >> 28)
  1710  	binary.Read(in, binary.LittleEndian, &inl)
  1711  	out[18] |= (inl % (1 << 26)) << (30 - 26)
  1712  	out[19] = (inl >> 26)
  1713  	binary.Read(in, binary.LittleEndian, &inl)
  1714  	out[19] |= (inl % (1 << 24)) << (30 - 24)
  1715  	out[20] = (inl >> 24)
  1716  	binary.Read(in, binary.LittleEndian, &inl)
  1717  	out[20] |= (inl % (1 << 22)) << (30 - 22)
  1718  	out[21] = (inl >> 22)
  1719  	binary.Read(in, binary.LittleEndian, &inl)
  1720  	out[21] |= (inl % (1 << 20)) << (30 - 20)
  1721  	out[22] = (inl >> 20)
  1722  	binary.Read(in, binary.LittleEndian, &inl)
  1723  	out[22] |= (inl % (1 << 18)) << (30 - 18)
  1724  	out[23] = (inl >> 18)
  1725  	binary.Read(in, binary.LittleEndian, &inl)
  1726  	out[23] |= (inl % (1 << 16)) << (30 - 16)
  1727  	out[24] = (inl >> 16)
  1728  	binary.Read(in, binary.LittleEndian, &inl)
  1729  	out[24] |= (inl % (1 << 14)) << (30 - 14)
  1730  	out[25] = (inl >> 14)
  1731  	binary.Read(in, binary.LittleEndian, &inl)
  1732  	out[25] |= (inl % (1 << 12)) << (30 - 12)
  1733  	out[26] = (inl >> 12)
  1734  	binary.Read(in, binary.LittleEndian, &inl)
  1735  	out[26] |= (inl % (1 << 10)) << (30 - 10)
  1736  	out[27] = (inl >> 10)
  1737  	binary.Read(in, binary.LittleEndian, &inl)
  1738  	out[27] |= (inl % (1 << 8)) << (30 - 8)
  1739  	out[28] = (inl >> 8)
  1740  	binary.Read(in, binary.LittleEndian, &inl)
  1741  	out[28] |= (inl % (1 << 6)) << (30 - 6)
  1742  	out[29] = (inl >> 6)
  1743  	binary.Read(in, binary.LittleEndian, &inl)
  1744  	out[29] |= (inl % (1 << 4)) << (30 - 4)
  1745  	out[30] = (inl >> 4)
  1746  	binary.Read(in, binary.LittleEndian, &inl)
  1747  	out[30] |= (inl % (1 << 2)) << (30 - 2)
  1748  	out[31] = (inl >> 2)
  1749  }
  1750  
  1751  func unpack31_32(in io.Reader, out []uint32) {
  1752  	var inl uint32
  1753  	binary.Read(in, binary.LittleEndian, &inl)
  1754  	out[0] = (inl >> 0) % (1 << 31)
  1755  	out[1] = (inl >> 31)
  1756  	binary.Read(in, binary.LittleEndian, &inl)
  1757  	out[1] |= (inl % (1 << 30)) << (31 - 30)
  1758  	out[2] = (inl >> 30)
  1759  	binary.Read(in, binary.LittleEndian, &inl)
  1760  	out[2] |= (inl % (1 << 29)) << (31 - 29)
  1761  	out[3] = (inl >> 29)
  1762  	binary.Read(in, binary.LittleEndian, &inl)
  1763  	out[3] |= (inl % (1 << 28)) << (31 - 28)
  1764  	out[4] = (inl >> 28)
  1765  	binary.Read(in, binary.LittleEndian, &inl)
  1766  	out[4] |= (inl % (1 << 27)) << (31 - 27)
  1767  	out[5] = (inl >> 27)
  1768  	binary.Read(in, binary.LittleEndian, &inl)
  1769  	out[5] |= (inl % (1 << 26)) << (31 - 26)
  1770  	out[6] = (inl >> 26)
  1771  	binary.Read(in, binary.LittleEndian, &inl)
  1772  	out[6] |= (inl % (1 << 25)) << (31 - 25)
  1773  	out[7] = (inl >> 25)
  1774  	binary.Read(in, binary.LittleEndian, &inl)
  1775  	out[7] |= (inl % (1 << 24)) << (31 - 24)
  1776  	out[8] = (inl >> 24)
  1777  	binary.Read(in, binary.LittleEndian, &inl)
  1778  	out[8] |= (inl % (1 << 23)) << (31 - 23)
  1779  	out[9] = (inl >> 23)
  1780  	binary.Read(in, binary.LittleEndian, &inl)
  1781  	out[9] |= (inl % (1 << 22)) << (31 - 22)
  1782  	out[10] = (inl >> 22)
  1783  	binary.Read(in, binary.LittleEndian, &inl)
  1784  	out[10] |= (inl % (1 << 21)) << (31 - 21)
  1785  	out[11] = (inl >> 21)
  1786  	binary.Read(in, binary.LittleEndian, &inl)
  1787  	out[11] |= (inl % (1 << 20)) << (31 - 20)
  1788  	out[12] = (inl >> 20)
  1789  	binary.Read(in, binary.LittleEndian, &inl)
  1790  	out[12] |= (inl % (1 << 19)) << (31 - 19)
  1791  	out[13] = (inl >> 19)
  1792  	binary.Read(in, binary.LittleEndian, &inl)
  1793  	out[13] |= (inl % (1 << 18)) << (31 - 18)
  1794  	out[14] = (inl >> 18)
  1795  	binary.Read(in, binary.LittleEndian, &inl)
  1796  	out[14] |= (inl % (1 << 17)) << (31 - 17)
  1797  	out[15] = (inl >> 17)
  1798  	binary.Read(in, binary.LittleEndian, &inl)
  1799  	out[15] |= (inl % (1 << 16)) << (31 - 16)
  1800  	out[16] = (inl >> 16)
  1801  	binary.Read(in, binary.LittleEndian, &inl)
  1802  	out[16] |= (inl % (1 << 15)) << (31 - 15)
  1803  	out[17] = (inl >> 15)
  1804  	binary.Read(in, binary.LittleEndian, &inl)
  1805  	out[17] |= (inl % (1 << 14)) << (31 - 14)
  1806  	out[18] = (inl >> 14)
  1807  	binary.Read(in, binary.LittleEndian, &inl)
  1808  	out[18] |= (inl % (1 << 13)) << (31 - 13)
  1809  	out[19] = (inl >> 13)
  1810  	binary.Read(in, binary.LittleEndian, &inl)
  1811  	out[19] |= (inl % (1 << 12)) << (31 - 12)
  1812  	out[20] = (inl >> 12)
  1813  	binary.Read(in, binary.LittleEndian, &inl)
  1814  	out[20] |= (inl % (1 << 11)) << (31 - 11)
  1815  	out[21] = (inl >> 11)
  1816  	binary.Read(in, binary.LittleEndian, &inl)
  1817  	out[21] |= (inl % (1 << 10)) << (31 - 10)
  1818  	out[22] = (inl >> 10)
  1819  	binary.Read(in, binary.LittleEndian, &inl)
  1820  	out[22] |= (inl % (1 << 9)) << (31 - 9)
  1821  	out[23] = (inl >> 9)
  1822  	binary.Read(in, binary.LittleEndian, &inl)
  1823  	out[23] |= (inl % (1 << 8)) << (31 - 8)
  1824  	out[24] = (inl >> 8)
  1825  	binary.Read(in, binary.LittleEndian, &inl)
  1826  	out[24] |= (inl % (1 << 7)) << (31 - 7)
  1827  	out[25] = (inl >> 7)
  1828  	binary.Read(in, binary.LittleEndian, &inl)
  1829  	out[25] |= (inl % (1 << 6)) << (31 - 6)
  1830  	out[26] = (inl >> 6)
  1831  	binary.Read(in, binary.LittleEndian, &inl)
  1832  	out[26] |= (inl % (1 << 5)) << (31 - 5)
  1833  	out[27] = (inl >> 5)
  1834  	binary.Read(in, binary.LittleEndian, &inl)
  1835  	out[27] |= (inl % (1 << 4)) << (31 - 4)
  1836  	out[28] = (inl >> 4)
  1837  	binary.Read(in, binary.LittleEndian, &inl)
  1838  	out[28] |= (inl % (1 << 3)) << (31 - 3)
  1839  	out[29] = (inl >> 3)
  1840  	binary.Read(in, binary.LittleEndian, &inl)
  1841  	out[29] |= (inl % (1 << 2)) << (31 - 2)
  1842  	out[30] = (inl >> 2)
  1843  	binary.Read(in, binary.LittleEndian, &inl)
  1844  	out[30] |= (inl % (1 << 1)) << (31 - 1)
  1845  	out[31] = (inl >> 1)
  1846  }
  1847  
  1848  func unpack32_32(in io.Reader, out []uint32) {
  1849  	for idx := range out[:32] {
  1850  		binary.Read(in, binary.LittleEndian, &out[idx])
  1851  	}
  1852  }
  1853  
  1854  func nullunpack32(_ io.Reader, out []uint32) {
  1855  	out[0] = 0
  1856  	for i := 1; i < 32; i *= 2 {
  1857  		copy(out[i:], out[:i])
  1858  	}
  1859  }
  1860  
  1861  func unpack32Default(in io.Reader, out []uint32, nbits int) int {
  1862  	batch := len(out) / 32 * 32
  1863  	nloops := batch / 32
  1864  
  1865  	var f unpackFunc
  1866  	switch nbits {
  1867  	case 0:
  1868  		f = nullunpack32
  1869  	case 1:
  1870  		f = unpack1_32
  1871  	case 2:
  1872  		f = unpack2_32
  1873  	case 3:
  1874  		f = unpack3_32
  1875  	case 4:
  1876  		f = unpack4_32
  1877  	case 5:
  1878  		f = unpack5_32
  1879  	case 6:
  1880  		f = unpack6_32
  1881  	case 7:
  1882  		f = unpack7_32
  1883  	case 8:
  1884  		f = unpack8_32
  1885  	case 9:
  1886  		f = unpack9_32
  1887  	case 10:
  1888  		f = unpack10_32
  1889  	case 11:
  1890  		f = unpack11_32
  1891  	case 12:
  1892  		f = unpack12_32
  1893  	case 13:
  1894  		f = unpack13_32
  1895  	case 14:
  1896  		f = unpack14_32
  1897  	case 15:
  1898  		f = unpack15_32
  1899  	case 16:
  1900  		f = unpack16_32
  1901  	case 17:
  1902  		f = unpack17_32
  1903  	case 18:
  1904  		f = unpack18_32
  1905  	case 19:
  1906  		f = unpack19_32
  1907  	case 20:
  1908  		f = unpack20_32
  1909  	case 21:
  1910  		f = unpack21_32
  1911  	case 22:
  1912  		f = unpack22_32
  1913  	case 23:
  1914  		f = unpack23_32
  1915  	case 24:
  1916  		f = unpack24_32
  1917  	case 25:
  1918  		f = unpack25_32
  1919  	case 26:
  1920  		f = unpack26_32
  1921  	case 27:
  1922  		f = unpack27_32
  1923  	case 28:
  1924  		f = unpack28_32
  1925  	case 29:
  1926  		f = unpack29_32
  1927  	case 30:
  1928  		f = unpack30_32
  1929  	case 31:
  1930  		f = unpack31_32
  1931  	case 32:
  1932  		f = unpack32_32
  1933  	default:
  1934  		return 0
  1935  	}
  1936  
  1937  	for i := 0; i < nloops; i++ {
  1938  		f(in, out[i*32:])
  1939  	}
  1940  	return batch
  1941  }