theta/include/bit_packing.hpp (5,171 lines of code) (raw):
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */
#ifndef BIT_PACKING_HPP_
#define BIT_PACKING_HPP_
#include <memory>
namespace datasketches {
static inline uint8_t pack_bits(uint64_t value, uint8_t bits, uint8_t*& ptr, uint8_t offset) {
  if (offset > 0) {
    const uint8_t chunk_bits = 8 - offset;
    const uint8_t mask = (1 << chunk_bits) - 1;
    if (bits < chunk_bits) {
      *ptr |= (value << (chunk_bits - bits)) & mask;
      return offset + bits;
    }
    *ptr++ |= (value >> (bits - chunk_bits)) & mask;
    bits -= chunk_bits;
  }
  while (bits >= 8) {
    *ptr++ = static_cast<uint8_t>(value >> (bits - 8));
    bits -= 8;
  }
  if (bits > 0) {
    *ptr = static_cast<uint8_t>(value << (8 - bits));
    return bits;
  }
  return 0;
}
static inline uint8_t unpack_bits(uint64_t& value, uint8_t bits, const uint8_t*& ptr, uint8_t offset) {
  const uint8_t avail_bits = 8 - offset;
  const uint8_t chunk_bits = std::min(avail_bits, bits);
  const uint8_t mask = (1 << chunk_bits) - 1;
  value = (*ptr >> (avail_bits - chunk_bits)) & mask;
  ptr += avail_bits == chunk_bits;
  offset = (offset + chunk_bits) & 7;
  bits -= chunk_bits;
  while (bits >= 8) {
    value <<= 8;
    value |= *ptr++;
    bits -= 8;
  }
  if (bits > 0) {
    value <<= bits;
    value |= *ptr >> (8 - bits);
    return bits;
  }
  return offset;
}
// pack given number of bits from a block of 8 64-bit values into bytes
// we don't need 0 and 64 bits
// we assume that higher bits (which we are not packing) are zeros
// this assumption allows to avoid masking operations
static inline void pack_bits_1(const uint64_t* values, uint8_t* ptr) {
  *ptr = static_cast<uint8_t>(values[0] << 7);
  *ptr |= static_cast<uint8_t>(values[1] << 6);
  *ptr |= static_cast<uint8_t>(values[2] << 5);
  *ptr |= static_cast<uint8_t>(values[3] << 4);
  *ptr |= static_cast<uint8_t>(values[4] << 3);
  *ptr |= static_cast<uint8_t>(values[5] << 2);
  *ptr |= static_cast<uint8_t>(values[6] << 1);
  *ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_2(const uint64_t* values, uint8_t* ptr) {
  *ptr = static_cast<uint8_t>(values[0] << 6);
  *ptr |= static_cast<uint8_t>(values[1] << 4);
  *ptr |= static_cast<uint8_t>(values[2] << 2);
  *ptr++ |= static_cast<uint8_t>(values[3]);
  *ptr = static_cast<uint8_t>(values[4] << 6);
  *ptr |= static_cast<uint8_t>(values[5] << 4);
  *ptr |= static_cast<uint8_t>(values[6] << 2);
  *ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_3(const uint64_t* values, uint8_t* ptr) {
  *ptr = static_cast<uint8_t>(values[0] << 5);
  *ptr |= static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 1);
  *ptr = static_cast<uint8_t>(values[2] << 7);
  *ptr |= static_cast<uint8_t>(values[3] << 4);
  *ptr |= static_cast<uint8_t>(values[4] << 1);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr |= static_cast<uint8_t>(values[6] << 3);
  *ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_4(const uint64_t* values, uint8_t* ptr) {
  *ptr = static_cast<uint8_t>(values[0] << 4);
  *ptr++ |= static_cast<uint8_t>(values[1]);
  *ptr = static_cast<uint8_t>(values[2] << 4);
  *ptr++ |= static_cast<uint8_t>(values[3]);
  *ptr = static_cast<uint8_t>(values[4] << 4);
  *ptr++ |= static_cast<uint8_t>(values[5]);
  *ptr = static_cast<uint8_t>(values[6] << 4);
  *ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_5(const uint64_t* values, uint8_t* ptr) {
  *ptr = static_cast<uint8_t>(values[0] << 3);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr |= static_cast<uint8_t>(values[2] << 1);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 1);
  *ptr = static_cast<uint8_t>(values[4] << 7);
  *ptr |= static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 3);
  *ptr = static_cast<uint8_t>(values[6] << 5);
  *ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_6(const uint64_t* values, uint8_t* ptr) {
  *ptr = static_cast<uint8_t>(values[0] << 2);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 2);
  *ptr = static_cast<uint8_t>(values[2] << 6);
  *ptr++ |= static_cast<uint8_t>(values[3]);
  *ptr = static_cast<uint8_t>(values[4] << 2);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 2);
  *ptr = static_cast<uint8_t>(values[6] << 6);
  *ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_7(const uint64_t* values, uint8_t* ptr) {
  *ptr = static_cast<uint8_t>(values[0] << 1);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 5);
  *ptr = static_cast<uint8_t>(values[2] << 3);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 3);
  *ptr = static_cast<uint8_t>(values[4] << 5);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 1);
  *ptr = static_cast<uint8_t>(values[6] << 7);
  *ptr |= static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_8(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0]);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2]);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4]);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6]);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_9(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
  *ptr = static_cast<uint8_t>(values[0] << 7);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 3);
  *ptr = static_cast<uint8_t>(values[2] << 5);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 5);
  *ptr = static_cast<uint8_t>(values[4] << 3);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 7);
  *ptr = static_cast<uint8_t>(values[6] << 1);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_10(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
  *ptr = static_cast<uint8_t>(values[0] << 6);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 6);
  *ptr = static_cast<uint8_t>(values[2] << 2);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
  *ptr = static_cast<uint8_t>(values[4] << 6);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 6);
  *ptr = static_cast<uint8_t>(values[6] << 2);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_11(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
  *ptr = static_cast<uint8_t>(values[0] << 5);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 9);
  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
  *ptr = static_cast<uint8_t>(values[2] << 7);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 7);
  *ptr = static_cast<uint8_t>(values[4] << 1);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 5);
  *ptr = static_cast<uint8_t>(values[6] << 3);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_12(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
  *ptr = static_cast<uint8_t>(values[0] << 4);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
  *ptr = static_cast<uint8_t>(values[2] << 4);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
  *ptr = static_cast<uint8_t>(values[4] << 4);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
  *ptr = static_cast<uint8_t>(values[6] << 4);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_13(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
  *ptr = static_cast<uint8_t>(values[0] << 3);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 7);
  *ptr = static_cast<uint8_t>(values[2] << 1);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] >> 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 9);
  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
  *ptr = static_cast<uint8_t>(values[4] << 7);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 11);
  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
  *ptr = static_cast<uint8_t>(values[6] << 5);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_14(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
  *ptr = static_cast<uint8_t>(values[0] << 2);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 10);
  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
  *ptr = static_cast<uint8_t>(values[2] << 6);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
  *ptr = static_cast<uint8_t>(values[4] << 2);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 10);
  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
  *ptr = static_cast<uint8_t>(values[6] << 6);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_15(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
  *ptr = static_cast<uint8_t>(values[0] << 1);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 13);
  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
  *ptr = static_cast<uint8_t>(values[2] << 3);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 11);
  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
  *ptr = static_cast<uint8_t>(values[4] << 5);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 9);
  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
  *ptr = static_cast<uint8_t>(values[6] << 7);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_16(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
  *ptr++ = static_cast<uint8_t>(values[0]);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
  *ptr++ = static_cast<uint8_t>(values[2]);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
  *ptr++ = static_cast<uint8_t>(values[4]);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
  *ptr++ = static_cast<uint8_t>(values[6]);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_17(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
  *ptr = static_cast<uint8_t>(values[0] << 7);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 11);
  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
  *ptr = static_cast<uint8_t>(values[2] << 5);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 13);
  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
  *ptr = static_cast<uint8_t>(values[4] << 3);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 15);
  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
  *ptr = static_cast<uint8_t>(values[6] << 1);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_18(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
  *ptr = static_cast<uint8_t>(values[0] << 6);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 14);
  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
  *ptr = static_cast<uint8_t>(values[2] << 2);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
  *ptr = static_cast<uint8_t>(values[4] << 6);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 14);
  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
  *ptr = static_cast<uint8_t>(values[6] << 2);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_19(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
  *ptr = static_cast<uint8_t>(values[0] << 5);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 17);
  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
  *ptr = static_cast<uint8_t>(values[2] << 7);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 15);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 7);
  *ptr = static_cast<uint8_t>(values[4] << 1);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 13);
  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
  *ptr = static_cast<uint8_t>(values[6] << 3);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_20(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
  *ptr = static_cast<uint8_t>(values[0] << 4);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
  *ptr = static_cast<uint8_t>(values[2] << 4);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
  *ptr = static_cast<uint8_t>(values[4] << 4);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
  *ptr = static_cast<uint8_t>(values[6] << 4);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_21(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
  *ptr = static_cast<uint8_t>(values[0] << 3);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 15);
  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
  *ptr = static_cast<uint8_t>(values[2] << 1);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 17);
  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
  *ptr = static_cast<uint8_t>(values[4] << 7);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 19);
  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
  *ptr = static_cast<uint8_t>(values[6] << 5);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_22(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
  *ptr = static_cast<uint8_t>(values[0] << 2);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 18);
  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
  *ptr = static_cast<uint8_t>(values[2] << 6);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
  *ptr = static_cast<uint8_t>(values[4] << 2);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 18);
  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
  *ptr = static_cast<uint8_t>(values[6] << 6);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_23(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
  *ptr = static_cast<uint8_t>(values[0] << 1);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 21);
  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
  *ptr = static_cast<uint8_t>(values[2] << 3);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 19);
  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
  *ptr = static_cast<uint8_t>(values[4] << 5);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 17);
  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
  *ptr = static_cast<uint8_t>(values[6] << 7);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_24(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
  *ptr++ = static_cast<uint8_t>(values[0]);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
  *ptr++ = static_cast<uint8_t>(values[2]);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
  *ptr++ = static_cast<uint8_t>(values[4]);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
  *ptr++ = static_cast<uint8_t>(values[6]);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_25(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
  *ptr = static_cast<uint8_t>(values[0] << 7);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 19);
  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
  *ptr = static_cast<uint8_t>(values[2] << 5);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 21);
  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
  *ptr = static_cast<uint8_t>(values[4] << 3);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 23);
  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
  *ptr = static_cast<uint8_t>(values[6] << 1);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_26(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
  *ptr = static_cast<uint8_t>(values[0] << 6);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 22);
  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
  *ptr = static_cast<uint8_t>(values[2] << 2);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
  *ptr = static_cast<uint8_t>(values[4] << 6);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 22);
  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
  *ptr = static_cast<uint8_t>(values[6] << 2);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_27(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
  *ptr = static_cast<uint8_t>(values[0] << 5);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 25);
  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
  *ptr = static_cast<uint8_t>(values[2] << 7);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 23);
  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
  *ptr = static_cast<uint8_t>(values[4] << 1);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 21);
  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
  *ptr = static_cast<uint8_t>(values[6] << 3);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_28(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
  *ptr = static_cast<uint8_t>(values[0] << 4);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 24);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
  *ptr = static_cast<uint8_t>(values[2] << 4);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
  *ptr = static_cast<uint8_t>(values[4] << 4);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 24);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
  *ptr = static_cast<uint8_t>(values[6] << 4);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_29(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
  *ptr = static_cast<uint8_t>(values[0] << 3);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 26);
  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 23);
  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
  *ptr = static_cast<uint8_t>(values[2] << 1);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 25);
  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
  *ptr = static_cast<uint8_t>(values[4] << 7);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 27);
  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
  *ptr = static_cast<uint8_t>(values[6] << 5);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_30(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
  *ptr = static_cast<uint8_t>(values[0] << 2);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 28);
  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 26);
  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
  *ptr = static_cast<uint8_t>(values[2] << 6);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
  *ptr = static_cast<uint8_t>(values[4] << 2);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 28);
  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 26);
  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
  *ptr = static_cast<uint8_t>(values[6] << 6);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_31(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
  *ptr = static_cast<uint8_t>(values[0] << 1);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 30);
  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 29);
  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
  *ptr = static_cast<uint8_t>(values[2] << 3);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 27);
  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
  *ptr = static_cast<uint8_t>(values[4] << 5);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 25);
  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
  *ptr = static_cast<uint8_t>(values[6] << 7);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_32(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 24);
  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
  *ptr++ = static_cast<uint8_t>(values[0]);
  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 24);
  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
  *ptr++ = static_cast<uint8_t>(values[2]);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 24);
  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
  *ptr++ = static_cast<uint8_t>(values[4]);
  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 24);
  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
  *ptr++ = static_cast<uint8_t>(values[6]);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_33(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 25);
  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
  *ptr = static_cast<uint8_t>(values[0] << 7);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 26);
  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 27);
  *ptr++ = static_cast<uint8_t>(values[2] >> 19);
  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
  *ptr = static_cast<uint8_t>(values[2] << 5);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 29);
  *ptr++ = static_cast<uint8_t>(values[4] >> 21);
  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
  *ptr = static_cast<uint8_t>(values[4] << 3);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 30);
  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 31);
  *ptr++ = static_cast<uint8_t>(values[6] >> 23);
  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
  *ptr = static_cast<uint8_t>(values[6] << 1);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_34(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 26);
  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
  *ptr = static_cast<uint8_t>(values[0] << 6);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 28);
  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 30);
  *ptr++ = static_cast<uint8_t>(values[2] >> 22);
  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
  *ptr = static_cast<uint8_t>(values[2] << 2);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 26);
  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
  *ptr = static_cast<uint8_t>(values[4] << 6);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 28);
  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 30);
  *ptr++ = static_cast<uint8_t>(values[6] >> 22);
  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
  *ptr = static_cast<uint8_t>(values[6] << 2);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_35(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 27);
  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
  *ptr = static_cast<uint8_t>(values[0] << 5);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 30);
  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 33);
  *ptr++ = static_cast<uint8_t>(values[2] >> 25);
  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
  *ptr = static_cast<uint8_t>(values[2] << 7);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 31);
  *ptr++ = static_cast<uint8_t>(values[4] >> 23);
  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
  *ptr = static_cast<uint8_t>(values[4] << 1);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 34);
  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 29);
  *ptr++ = static_cast<uint8_t>(values[6] >> 21);
  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
  *ptr = static_cast<uint8_t>(values[6] << 3);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_36(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 28);
  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
  *ptr = static_cast<uint8_t>(values[0] << 4);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 32);
  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 28);
  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
  *ptr = static_cast<uint8_t>(values[2] << 4);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 28);
  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
  *ptr = static_cast<uint8_t>(values[4] << 4);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 32);
  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 28);
  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
  *ptr = static_cast<uint8_t>(values[6] << 4);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_37(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 29);
  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
  *ptr = static_cast<uint8_t>(values[0] << 3);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 34);
  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 31);
  *ptr++ = static_cast<uint8_t>(values[2] >> 23);
  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
  *ptr = static_cast<uint8_t>(values[2] << 1);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 33);
  *ptr++ = static_cast<uint8_t>(values[4] >> 25);
  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
  *ptr = static_cast<uint8_t>(values[4] << 7);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 30);
  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 35);
  *ptr++ = static_cast<uint8_t>(values[6] >> 27);
  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
  *ptr = static_cast<uint8_t>(values[6] << 5);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_38(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 30);
  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
  *ptr = static_cast<uint8_t>(values[0] << 2);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 36);
  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 34);
  *ptr++ = static_cast<uint8_t>(values[2] >> 26);
  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
  *ptr = static_cast<uint8_t>(values[2] << 6);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 30);
  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
  *ptr = static_cast<uint8_t>(values[4] << 2);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 36);
  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 34);
  *ptr++ = static_cast<uint8_t>(values[6] >> 26);
  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
  *ptr = static_cast<uint8_t>(values[6] << 6);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_39(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 31);
  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
  *ptr = static_cast<uint8_t>(values[0] << 1);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 38);
  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 37);
  *ptr++ = static_cast<uint8_t>(values[2] >> 29);
  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
  *ptr = static_cast<uint8_t>(values[2] << 3);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 35);
  *ptr++ = static_cast<uint8_t>(values[4] >> 27);
  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
  *ptr = static_cast<uint8_t>(values[4] << 5);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 34);
  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 33);
  *ptr++ = static_cast<uint8_t>(values[6] >> 25);
  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
  *ptr = static_cast<uint8_t>(values[6] << 7);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_40(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 32);
  *ptr++ = static_cast<uint8_t>(values[0] >> 24);
  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
  *ptr++ = static_cast<uint8_t>(values[0]);
  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 32);
  *ptr++ = static_cast<uint8_t>(values[2] >> 24);
  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
  *ptr++ = static_cast<uint8_t>(values[2]);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 32);
  *ptr++ = static_cast<uint8_t>(values[4] >> 24);
  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
  *ptr++ = static_cast<uint8_t>(values[4]);
  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 32);
  *ptr++ = static_cast<uint8_t>(values[6] >> 24);
  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
  *ptr++ = static_cast<uint8_t>(values[6]);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_41(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 33);
  *ptr++ = static_cast<uint8_t>(values[0] >> 25);
  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
  *ptr = static_cast<uint8_t>(values[0] << 7);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 34);
  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 35);
  *ptr++ = static_cast<uint8_t>(values[2] >> 27);
  *ptr++ = static_cast<uint8_t>(values[2] >> 19);
  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
  *ptr = static_cast<uint8_t>(values[2] << 5);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 37);
  *ptr++ = static_cast<uint8_t>(values[4] >> 29);
  *ptr++ = static_cast<uint8_t>(values[4] >> 21);
  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
  *ptr = static_cast<uint8_t>(values[4] << 3);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 38);
  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 39);
  *ptr++ = static_cast<uint8_t>(values[6] >> 31);
  *ptr++ = static_cast<uint8_t>(values[6] >> 23);
  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
  *ptr = static_cast<uint8_t>(values[6] << 1);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_42(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 34);
  *ptr++ = static_cast<uint8_t>(values[0] >> 26);
  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
  *ptr = static_cast<uint8_t>(values[0] << 6);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 36);
  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 38);
  *ptr++ = static_cast<uint8_t>(values[2] >> 30);
  *ptr++ = static_cast<uint8_t>(values[2] >> 22);
  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
  *ptr = static_cast<uint8_t>(values[2] << 2);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 34);
  *ptr++ = static_cast<uint8_t>(values[4] >> 26);
  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
  *ptr = static_cast<uint8_t>(values[4] << 6);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 36);
  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 38);
  *ptr++ = static_cast<uint8_t>(values[6] >> 30);
  *ptr++ = static_cast<uint8_t>(values[6] >> 22);
  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
  *ptr = static_cast<uint8_t>(values[6] << 2);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_43(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 35);
  *ptr++ = static_cast<uint8_t>(values[0] >> 27);
  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
  *ptr = static_cast<uint8_t>(values[0] << 5);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 38);
  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 41);
  *ptr++ = static_cast<uint8_t>(values[2] >> 33);
  *ptr++ = static_cast<uint8_t>(values[2] >> 25);
  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
  *ptr = static_cast<uint8_t>(values[2] << 7);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 39);
  *ptr++ = static_cast<uint8_t>(values[4] >> 31);
  *ptr++ = static_cast<uint8_t>(values[4] >> 23);
  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
  *ptr = static_cast<uint8_t>(values[4] << 1);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 42);
  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 37);
  *ptr++ = static_cast<uint8_t>(values[6] >> 29);
  *ptr++ = static_cast<uint8_t>(values[6] >> 21);
  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
  *ptr = static_cast<uint8_t>(values[6] << 3);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_44(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 36);
  *ptr++ = static_cast<uint8_t>(values[0] >> 28);
  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
  *ptr = static_cast<uint8_t>(values[0] << 4);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 40);
  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 36);
  *ptr++ = static_cast<uint8_t>(values[2] >> 28);
  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
  *ptr = static_cast<uint8_t>(values[2] << 4);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 36);
  *ptr++ = static_cast<uint8_t>(values[4] >> 28);
  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
  *ptr = static_cast<uint8_t>(values[4] << 4);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 40);
  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 36);
  *ptr++ = static_cast<uint8_t>(values[6] >> 28);
  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
  *ptr = static_cast<uint8_t>(values[6] << 4);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_45(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 37);
  *ptr++ = static_cast<uint8_t>(values[0] >> 29);
  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
  *ptr = static_cast<uint8_t>(values[0] << 3);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 42);
  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 39);
  *ptr++ = static_cast<uint8_t>(values[2] >> 31);
  *ptr++ = static_cast<uint8_t>(values[2] >> 23);
  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
  *ptr = static_cast<uint8_t>(values[2] << 1);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 41);
  *ptr++ = static_cast<uint8_t>(values[4] >> 33);
  *ptr++ = static_cast<uint8_t>(values[4] >> 25);
  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
  *ptr = static_cast<uint8_t>(values[4] << 7);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 38);
  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 43);
  *ptr++ = static_cast<uint8_t>(values[6] >> 35);
  *ptr++ = static_cast<uint8_t>(values[6] >> 27);
  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
  *ptr = static_cast<uint8_t>(values[6] << 5);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_46(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 38);
  *ptr++ = static_cast<uint8_t>(values[0] >> 30);
  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
  *ptr = static_cast<uint8_t>(values[0] << 2);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 44);
  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 42);
  *ptr++ = static_cast<uint8_t>(values[2] >> 34);
  *ptr++ = static_cast<uint8_t>(values[2] >> 26);
  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
  *ptr = static_cast<uint8_t>(values[2] << 6);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 38);
  *ptr++ = static_cast<uint8_t>(values[4] >> 30);
  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
  *ptr = static_cast<uint8_t>(values[4] << 2);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 44);
  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 42);
  *ptr++ = static_cast<uint8_t>(values[6] >> 34);
  *ptr++ = static_cast<uint8_t>(values[6] >> 26);
  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
  *ptr = static_cast<uint8_t>(values[6] << 6);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_47(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 39);
  *ptr++ = static_cast<uint8_t>(values[0] >> 31);
  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
  *ptr = static_cast<uint8_t>(values[0] << 1);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 46);
  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 45);
  *ptr++ = static_cast<uint8_t>(values[2] >> 37);
  *ptr++ = static_cast<uint8_t>(values[2] >> 29);
  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
  *ptr = static_cast<uint8_t>(values[2] << 3);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 43);
  *ptr++ = static_cast<uint8_t>(values[4] >> 35);
  *ptr++ = static_cast<uint8_t>(values[4] >> 27);
  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
  *ptr = static_cast<uint8_t>(values[4] << 5);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 42);
  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 41);
  *ptr++ = static_cast<uint8_t>(values[6] >> 33);
  *ptr++ = static_cast<uint8_t>(values[6] >> 25);
  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
  *ptr = static_cast<uint8_t>(values[6] << 7);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_48(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 40);
  *ptr++ = static_cast<uint8_t>(values[0] >> 32);
  *ptr++ = static_cast<uint8_t>(values[0] >> 24);
  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
  *ptr++ = static_cast<uint8_t>(values[0]);
  *ptr++ = static_cast<uint8_t>(values[1] >> 40);
  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 40);
  *ptr++ = static_cast<uint8_t>(values[2] >> 32);
  *ptr++ = static_cast<uint8_t>(values[2] >> 24);
  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
  *ptr++ = static_cast<uint8_t>(values[2]);
  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 40);
  *ptr++ = static_cast<uint8_t>(values[4] >> 32);
  *ptr++ = static_cast<uint8_t>(values[4] >> 24);
  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
  *ptr++ = static_cast<uint8_t>(values[4]);
  *ptr++ = static_cast<uint8_t>(values[5] >> 40);
  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 40);
  *ptr++ = static_cast<uint8_t>(values[6] >> 32);
  *ptr++ = static_cast<uint8_t>(values[6] >> 24);
  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
  *ptr++ = static_cast<uint8_t>(values[6]);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_49(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 41);
  *ptr++ = static_cast<uint8_t>(values[0] >> 33);
  *ptr++ = static_cast<uint8_t>(values[0] >> 25);
  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
  *ptr = static_cast<uint8_t>(values[0] << 7);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 42);
  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 43);
  *ptr++ = static_cast<uint8_t>(values[2] >> 35);
  *ptr++ = static_cast<uint8_t>(values[2] >> 27);
  *ptr++ = static_cast<uint8_t>(values[2] >> 19);
  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
  *ptr = static_cast<uint8_t>(values[2] << 5);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 45);
  *ptr++ = static_cast<uint8_t>(values[4] >> 37);
  *ptr++ = static_cast<uint8_t>(values[4] >> 29);
  *ptr++ = static_cast<uint8_t>(values[4] >> 21);
  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
  *ptr = static_cast<uint8_t>(values[4] << 3);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 46);
  *ptr++ = static_cast<uint8_t>(values[5] >> 38);
  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 47);
  *ptr++ = static_cast<uint8_t>(values[6] >> 39);
  *ptr++ = static_cast<uint8_t>(values[6] >> 31);
  *ptr++ = static_cast<uint8_t>(values[6] >> 23);
  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
  *ptr = static_cast<uint8_t>(values[6] << 1);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_50(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 42);
  *ptr++ = static_cast<uint8_t>(values[0] >> 34);
  *ptr++ = static_cast<uint8_t>(values[0] >> 26);
  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
  *ptr = static_cast<uint8_t>(values[0] << 6);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 44);
  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 46);
  *ptr++ = static_cast<uint8_t>(values[2] >> 38);
  *ptr++ = static_cast<uint8_t>(values[2] >> 30);
  *ptr++ = static_cast<uint8_t>(values[2] >> 22);
  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
  *ptr = static_cast<uint8_t>(values[2] << 2);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 48);
  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 42);
  *ptr++ = static_cast<uint8_t>(values[4] >> 34);
  *ptr++ = static_cast<uint8_t>(values[4] >> 26);
  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
  *ptr = static_cast<uint8_t>(values[4] << 6);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 44);
  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 46);
  *ptr++ = static_cast<uint8_t>(values[6] >> 38);
  *ptr++ = static_cast<uint8_t>(values[6] >> 30);
  *ptr++ = static_cast<uint8_t>(values[6] >> 22);
  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
  *ptr = static_cast<uint8_t>(values[6] << 2);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_51(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 43);
  *ptr++ = static_cast<uint8_t>(values[0] >> 35);
  *ptr++ = static_cast<uint8_t>(values[0] >> 27);
  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
  *ptr = static_cast<uint8_t>(values[0] << 5);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 46);
  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 49);
  *ptr++ = static_cast<uint8_t>(values[2] >> 41);
  *ptr++ = static_cast<uint8_t>(values[2] >> 33);
  *ptr++ = static_cast<uint8_t>(values[2] >> 25);
  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
  *ptr = static_cast<uint8_t>(values[2] << 7);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 47);
  *ptr++ = static_cast<uint8_t>(values[4] >> 39);
  *ptr++ = static_cast<uint8_t>(values[4] >> 31);
  *ptr++ = static_cast<uint8_t>(values[4] >> 23);
  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
  *ptr = static_cast<uint8_t>(values[4] << 1);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 50);
  *ptr++ = static_cast<uint8_t>(values[5] >> 42);
  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 45);
  *ptr++ = static_cast<uint8_t>(values[6] >> 37);
  *ptr++ = static_cast<uint8_t>(values[6] >> 29);
  *ptr++ = static_cast<uint8_t>(values[6] >> 21);
  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
  *ptr = static_cast<uint8_t>(values[6] << 3);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_52(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 44);
  *ptr++ = static_cast<uint8_t>(values[0] >> 36);
  *ptr++ = static_cast<uint8_t>(values[0] >> 28);
  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
  *ptr = static_cast<uint8_t>(values[0] << 4);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 48);
  *ptr++ = static_cast<uint8_t>(values[1] >> 40);
  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 44);
  *ptr++ = static_cast<uint8_t>(values[2] >> 36);
  *ptr++ = static_cast<uint8_t>(values[2] >> 28);
  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
  *ptr = static_cast<uint8_t>(values[2] << 4);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 48);
  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 44);
  *ptr++ = static_cast<uint8_t>(values[4] >> 36);
  *ptr++ = static_cast<uint8_t>(values[4] >> 28);
  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
  *ptr = static_cast<uint8_t>(values[4] << 4);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 48);
  *ptr++ = static_cast<uint8_t>(values[5] >> 40);
  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 44);
  *ptr++ = static_cast<uint8_t>(values[6] >> 36);
  *ptr++ = static_cast<uint8_t>(values[6] >> 28);
  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
  *ptr = static_cast<uint8_t>(values[6] << 4);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_53(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 45);
  *ptr++ = static_cast<uint8_t>(values[0] >> 37);
  *ptr++ = static_cast<uint8_t>(values[0] >> 29);
  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
  *ptr = static_cast<uint8_t>(values[0] << 3);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 50);
  *ptr++ = static_cast<uint8_t>(values[1] >> 42);
  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 47);
  *ptr++ = static_cast<uint8_t>(values[2] >> 39);
  *ptr++ = static_cast<uint8_t>(values[2] >> 31);
  *ptr++ = static_cast<uint8_t>(values[2] >> 23);
  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
  *ptr = static_cast<uint8_t>(values[2] << 1);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 52);
  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 49);
  *ptr++ = static_cast<uint8_t>(values[4] >> 41);
  *ptr++ = static_cast<uint8_t>(values[4] >> 33);
  *ptr++ = static_cast<uint8_t>(values[4] >> 25);
  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
  *ptr = static_cast<uint8_t>(values[4] << 7);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 46);
  *ptr++ = static_cast<uint8_t>(values[5] >> 38);
  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 51);
  *ptr++ = static_cast<uint8_t>(values[6] >> 43);
  *ptr++ = static_cast<uint8_t>(values[6] >> 35);
  *ptr++ = static_cast<uint8_t>(values[6] >> 27);
  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
  *ptr = static_cast<uint8_t>(values[6] << 5);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_54(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 46);
  *ptr++ = static_cast<uint8_t>(values[0] >> 38);
  *ptr++ = static_cast<uint8_t>(values[0] >> 30);
  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
  *ptr = static_cast<uint8_t>(values[0] << 2);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 52);
  *ptr++ = static_cast<uint8_t>(values[1] >> 44);
  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 50);
  *ptr++ = static_cast<uint8_t>(values[2] >> 42);
  *ptr++ = static_cast<uint8_t>(values[2] >> 34);
  *ptr++ = static_cast<uint8_t>(values[2] >> 26);
  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
  *ptr = static_cast<uint8_t>(values[2] << 6);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 48);
  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 46);
  *ptr++ = static_cast<uint8_t>(values[4] >> 38);
  *ptr++ = static_cast<uint8_t>(values[4] >> 30);
  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
  *ptr = static_cast<uint8_t>(values[4] << 2);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 52);
  *ptr++ = static_cast<uint8_t>(values[5] >> 44);
  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 50);
  *ptr++ = static_cast<uint8_t>(values[6] >> 42);
  *ptr++ = static_cast<uint8_t>(values[6] >> 34);
  *ptr++ = static_cast<uint8_t>(values[6] >> 26);
  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
  *ptr = static_cast<uint8_t>(values[6] << 6);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_55(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 47);
  *ptr++ = static_cast<uint8_t>(values[0] >> 39);
  *ptr++ = static_cast<uint8_t>(values[0] >> 31);
  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
  *ptr = static_cast<uint8_t>(values[0] << 1);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 54);
  *ptr++ = static_cast<uint8_t>(values[1] >> 46);
  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 53);
  *ptr++ = static_cast<uint8_t>(values[2] >> 45);
  *ptr++ = static_cast<uint8_t>(values[2] >> 37);
  *ptr++ = static_cast<uint8_t>(values[2] >> 29);
  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
  *ptr = static_cast<uint8_t>(values[2] << 3);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 52);
  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 51);
  *ptr++ = static_cast<uint8_t>(values[4] >> 43);
  *ptr++ = static_cast<uint8_t>(values[4] >> 35);
  *ptr++ = static_cast<uint8_t>(values[4] >> 27);
  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
  *ptr = static_cast<uint8_t>(values[4] << 5);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 50);
  *ptr++ = static_cast<uint8_t>(values[5] >> 42);
  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 49);
  *ptr++ = static_cast<uint8_t>(values[6] >> 41);
  *ptr++ = static_cast<uint8_t>(values[6] >> 33);
  *ptr++ = static_cast<uint8_t>(values[6] >> 25);
  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
  *ptr = static_cast<uint8_t>(values[6] << 7);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_56(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 48);
  *ptr++ = static_cast<uint8_t>(values[0] >> 40);
  *ptr++ = static_cast<uint8_t>(values[0] >> 32);
  *ptr++ = static_cast<uint8_t>(values[0] >> 24);
  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
  *ptr++ = static_cast<uint8_t>(values[0]);
  *ptr++ = static_cast<uint8_t>(values[1] >> 48);
  *ptr++ = static_cast<uint8_t>(values[1] >> 40);
  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 48);
  *ptr++ = static_cast<uint8_t>(values[2] >> 40);
  *ptr++ = static_cast<uint8_t>(values[2] >> 32);
  *ptr++ = static_cast<uint8_t>(values[2] >> 24);
  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
  *ptr++ = static_cast<uint8_t>(values[2]);
  *ptr++ = static_cast<uint8_t>(values[3] >> 48);
  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 48);
  *ptr++ = static_cast<uint8_t>(values[4] >> 40);
  *ptr++ = static_cast<uint8_t>(values[4] >> 32);
  *ptr++ = static_cast<uint8_t>(values[4] >> 24);
  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
  *ptr++ = static_cast<uint8_t>(values[4]);
  *ptr++ = static_cast<uint8_t>(values[5] >> 48);
  *ptr++ = static_cast<uint8_t>(values[5] >> 40);
  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 48);
  *ptr++ = static_cast<uint8_t>(values[6] >> 40);
  *ptr++ = static_cast<uint8_t>(values[6] >> 32);
  *ptr++ = static_cast<uint8_t>(values[6] >> 24);
  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
  *ptr++ = static_cast<uint8_t>(values[6]);
  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_57(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 49);
  *ptr++ = static_cast<uint8_t>(values[0] >> 41);
  *ptr++ = static_cast<uint8_t>(values[0] >> 33);
  *ptr++ = static_cast<uint8_t>(values[0] >> 25);
  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
  *ptr = static_cast<uint8_t>(values[0] << 7);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 50);
  *ptr++ = static_cast<uint8_t>(values[1] >> 42);
  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 51);
  *ptr++ = static_cast<uint8_t>(values[2] >> 43);
  *ptr++ = static_cast<uint8_t>(values[2] >> 35);
  *ptr++ = static_cast<uint8_t>(values[2] >> 27);
  *ptr++ = static_cast<uint8_t>(values[2] >> 19);
  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
  *ptr = static_cast<uint8_t>(values[2] << 5);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 52);
  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 53);
  *ptr++ = static_cast<uint8_t>(values[4] >> 45);
  *ptr++ = static_cast<uint8_t>(values[4] >> 37);
  *ptr++ = static_cast<uint8_t>(values[4] >> 29);
  *ptr++ = static_cast<uint8_t>(values[4] >> 21);
  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
  *ptr = static_cast<uint8_t>(values[4] << 3);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 54);
  *ptr++ = static_cast<uint8_t>(values[5] >> 46);
  *ptr++ = static_cast<uint8_t>(values[5] >> 38);
  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 55);
  *ptr++ = static_cast<uint8_t>(values[6] >> 47);
  *ptr++ = static_cast<uint8_t>(values[6] >> 39);
  *ptr++ = static_cast<uint8_t>(values[6] >> 31);
  *ptr++ = static_cast<uint8_t>(values[6] >> 23);
  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
  *ptr = static_cast<uint8_t>(values[6] << 1);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_58(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 50);
  *ptr++ = static_cast<uint8_t>(values[0] >> 42);
  *ptr++ = static_cast<uint8_t>(values[0] >> 34);
  *ptr++ = static_cast<uint8_t>(values[0] >> 26);
  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
  *ptr = static_cast<uint8_t>(values[0] << 6);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 52);
  *ptr++ = static_cast<uint8_t>(values[1] >> 44);
  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 54);
  *ptr++ = static_cast<uint8_t>(values[2] >> 46);
  *ptr++ = static_cast<uint8_t>(values[2] >> 38);
  *ptr++ = static_cast<uint8_t>(values[2] >> 30);
  *ptr++ = static_cast<uint8_t>(values[2] >> 22);
  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
  *ptr = static_cast<uint8_t>(values[2] << 2);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 56);
  *ptr++ = static_cast<uint8_t>(values[3] >> 48);
  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 50);
  *ptr++ = static_cast<uint8_t>(values[4] >> 42);
  *ptr++ = static_cast<uint8_t>(values[4] >> 34);
  *ptr++ = static_cast<uint8_t>(values[4] >> 26);
  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
  *ptr = static_cast<uint8_t>(values[4] << 6);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 52);
  *ptr++ = static_cast<uint8_t>(values[5] >> 44);
  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 54);
  *ptr++ = static_cast<uint8_t>(values[6] >> 46);
  *ptr++ = static_cast<uint8_t>(values[6] >> 38);
  *ptr++ = static_cast<uint8_t>(values[6] >> 30);
  *ptr++ = static_cast<uint8_t>(values[6] >> 22);
  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
  *ptr = static_cast<uint8_t>(values[6] << 2);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_59(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 51);
  *ptr++ = static_cast<uint8_t>(values[0] >> 43);
  *ptr++ = static_cast<uint8_t>(values[0] >> 35);
  *ptr++ = static_cast<uint8_t>(values[0] >> 27);
  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
  *ptr = static_cast<uint8_t>(values[0] << 5);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 54);
  *ptr++ = static_cast<uint8_t>(values[1] >> 46);
  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 57);
  *ptr++ = static_cast<uint8_t>(values[2] >> 49);
  *ptr++ = static_cast<uint8_t>(values[2] >> 41);
  *ptr++ = static_cast<uint8_t>(values[2] >> 33);
  *ptr++ = static_cast<uint8_t>(values[2] >> 25);
  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
  *ptr = static_cast<uint8_t>(values[2] << 7);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 52);
  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 55);
  *ptr++ = static_cast<uint8_t>(values[4] >> 47);
  *ptr++ = static_cast<uint8_t>(values[4] >> 39);
  *ptr++ = static_cast<uint8_t>(values[4] >> 31);
  *ptr++ = static_cast<uint8_t>(values[4] >> 23);
  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
  *ptr = static_cast<uint8_t>(values[4] << 1);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 58);
  *ptr++ = static_cast<uint8_t>(values[5] >> 50);
  *ptr++ = static_cast<uint8_t>(values[5] >> 42);
  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 53);
  *ptr++ = static_cast<uint8_t>(values[6] >> 45);
  *ptr++ = static_cast<uint8_t>(values[6] >> 37);
  *ptr++ = static_cast<uint8_t>(values[6] >> 29);
  *ptr++ = static_cast<uint8_t>(values[6] >> 21);
  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
  *ptr = static_cast<uint8_t>(values[6] << 3);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_60(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 52);
  *ptr++ = static_cast<uint8_t>(values[0] >> 44);
  *ptr++ = static_cast<uint8_t>(values[0] >> 36);
  *ptr++ = static_cast<uint8_t>(values[0] >> 28);
  *ptr++ = static_cast<uint8_t>(values[0] >> 20);
  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
  *ptr = static_cast<uint8_t>(values[0] << 4);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 56);
  *ptr++ = static_cast<uint8_t>(values[1] >> 48);
  *ptr++ = static_cast<uint8_t>(values[1] >> 40);
  *ptr++ = static_cast<uint8_t>(values[1] >> 32);
  *ptr++ = static_cast<uint8_t>(values[1] >> 24);
  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
  *ptr++ = static_cast<uint8_t>(values[1]);
  *ptr++ = static_cast<uint8_t>(values[2] >> 52);
  *ptr++ = static_cast<uint8_t>(values[2] >> 44);
  *ptr++ = static_cast<uint8_t>(values[2] >> 36);
  *ptr++ = static_cast<uint8_t>(values[2] >> 28);
  *ptr++ = static_cast<uint8_t>(values[2] >> 20);
  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
  *ptr = static_cast<uint8_t>(values[2] << 4);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 56);
  *ptr++ = static_cast<uint8_t>(values[3] >> 48);
  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 52);
  *ptr++ = static_cast<uint8_t>(values[4] >> 44);
  *ptr++ = static_cast<uint8_t>(values[4] >> 36);
  *ptr++ = static_cast<uint8_t>(values[4] >> 28);
  *ptr++ = static_cast<uint8_t>(values[4] >> 20);
  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
  *ptr = static_cast<uint8_t>(values[4] << 4);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 56);
  *ptr++ = static_cast<uint8_t>(values[5] >> 48);
  *ptr++ = static_cast<uint8_t>(values[5] >> 40);
  *ptr++ = static_cast<uint8_t>(values[5] >> 32);
  *ptr++ = static_cast<uint8_t>(values[5] >> 24);
  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
  *ptr++ = static_cast<uint8_t>(values[5]);
  *ptr++ = static_cast<uint8_t>(values[6] >> 52);
  *ptr++ = static_cast<uint8_t>(values[6] >> 44);
  *ptr++ = static_cast<uint8_t>(values[6] >> 36);
  *ptr++ = static_cast<uint8_t>(values[6] >> 28);
  *ptr++ = static_cast<uint8_t>(values[6] >> 20);
  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
  *ptr = static_cast<uint8_t>(values[6] << 4);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_61(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 53);
  *ptr++ = static_cast<uint8_t>(values[0] >> 45);
  *ptr++ = static_cast<uint8_t>(values[0] >> 37);
  *ptr++ = static_cast<uint8_t>(values[0] >> 29);
  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
  *ptr = static_cast<uint8_t>(values[0] << 3);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 58);
  *ptr++ = static_cast<uint8_t>(values[1] >> 50);
  *ptr++ = static_cast<uint8_t>(values[1] >> 42);
  *ptr++ = static_cast<uint8_t>(values[1] >> 34);
  *ptr++ = static_cast<uint8_t>(values[1] >> 26);
  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
  *ptr = static_cast<uint8_t>(values[1] << 6);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 55);
  *ptr++ = static_cast<uint8_t>(values[2] >> 47);
  *ptr++ = static_cast<uint8_t>(values[2] >> 39);
  *ptr++ = static_cast<uint8_t>(values[2] >> 31);
  *ptr++ = static_cast<uint8_t>(values[2] >> 23);
  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
  *ptr = static_cast<uint8_t>(values[2] << 1);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 60);
  *ptr++ = static_cast<uint8_t>(values[3] >> 52);
  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 57);
  *ptr++ = static_cast<uint8_t>(values[4] >> 49);
  *ptr++ = static_cast<uint8_t>(values[4] >> 41);
  *ptr++ = static_cast<uint8_t>(values[4] >> 33);
  *ptr++ = static_cast<uint8_t>(values[4] >> 25);
  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
  *ptr = static_cast<uint8_t>(values[4] << 7);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 54);
  *ptr++ = static_cast<uint8_t>(values[5] >> 46);
  *ptr++ = static_cast<uint8_t>(values[5] >> 38);
  *ptr++ = static_cast<uint8_t>(values[5] >> 30);
  *ptr++ = static_cast<uint8_t>(values[5] >> 22);
  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
  *ptr = static_cast<uint8_t>(values[5] << 2);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 59);
  *ptr++ = static_cast<uint8_t>(values[6] >> 51);
  *ptr++ = static_cast<uint8_t>(values[6] >> 43);
  *ptr++ = static_cast<uint8_t>(values[6] >> 35);
  *ptr++ = static_cast<uint8_t>(values[6] >> 27);
  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
  *ptr = static_cast<uint8_t>(values[6] << 5);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_62(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 54);
  *ptr++ = static_cast<uint8_t>(values[0] >> 46);
  *ptr++ = static_cast<uint8_t>(values[0] >> 38);
  *ptr++ = static_cast<uint8_t>(values[0] >> 30);
  *ptr++ = static_cast<uint8_t>(values[0] >> 22);
  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
  *ptr = static_cast<uint8_t>(values[0] << 2);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 60);
  *ptr++ = static_cast<uint8_t>(values[1] >> 52);
  *ptr++ = static_cast<uint8_t>(values[1] >> 44);
  *ptr++ = static_cast<uint8_t>(values[1] >> 36);
  *ptr++ = static_cast<uint8_t>(values[1] >> 28);
  *ptr++ = static_cast<uint8_t>(values[1] >> 20);
  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
  *ptr = static_cast<uint8_t>(values[1] << 4);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 58);
  *ptr++ = static_cast<uint8_t>(values[2] >> 50);
  *ptr++ = static_cast<uint8_t>(values[2] >> 42);
  *ptr++ = static_cast<uint8_t>(values[2] >> 34);
  *ptr++ = static_cast<uint8_t>(values[2] >> 26);
  *ptr++ = static_cast<uint8_t>(values[2] >> 18);
  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
  *ptr = static_cast<uint8_t>(values[2] << 6);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 56);
  *ptr++ = static_cast<uint8_t>(values[3] >> 48);
  *ptr++ = static_cast<uint8_t>(values[3] >> 40);
  *ptr++ = static_cast<uint8_t>(values[3] >> 32);
  *ptr++ = static_cast<uint8_t>(values[3] >> 24);
  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
  *ptr++ = static_cast<uint8_t>(values[3]);
  *ptr++ = static_cast<uint8_t>(values[4] >> 54);
  *ptr++ = static_cast<uint8_t>(values[4] >> 46);
  *ptr++ = static_cast<uint8_t>(values[4] >> 38);
  *ptr++ = static_cast<uint8_t>(values[4] >> 30);
  *ptr++ = static_cast<uint8_t>(values[4] >> 22);
  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
  *ptr = static_cast<uint8_t>(values[4] << 2);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 60);
  *ptr++ = static_cast<uint8_t>(values[5] >> 52);
  *ptr++ = static_cast<uint8_t>(values[5] >> 44);
  *ptr++ = static_cast<uint8_t>(values[5] >> 36);
  *ptr++ = static_cast<uint8_t>(values[5] >> 28);
  *ptr++ = static_cast<uint8_t>(values[5] >> 20);
  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
  *ptr = static_cast<uint8_t>(values[5] << 4);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 58);
  *ptr++ = static_cast<uint8_t>(values[6] >> 50);
  *ptr++ = static_cast<uint8_t>(values[6] >> 42);
  *ptr++ = static_cast<uint8_t>(values[6] >> 34);
  *ptr++ = static_cast<uint8_t>(values[6] >> 26);
  *ptr++ = static_cast<uint8_t>(values[6] >> 18);
  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
  *ptr = static_cast<uint8_t>(values[6] << 6);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void pack_bits_63(const uint64_t* values, uint8_t* ptr) {
  *ptr++ = static_cast<uint8_t>(values[0] >> 55);
  *ptr++ = static_cast<uint8_t>(values[0] >> 47);
  *ptr++ = static_cast<uint8_t>(values[0] >> 39);
  *ptr++ = static_cast<uint8_t>(values[0] >> 31);
  *ptr++ = static_cast<uint8_t>(values[0] >> 23);
  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
  *ptr = static_cast<uint8_t>(values[0] << 1);
  *ptr++ |= static_cast<uint8_t>(values[1] >> 62);
  *ptr++ = static_cast<uint8_t>(values[1] >> 54);
  *ptr++ = static_cast<uint8_t>(values[1] >> 46);
  *ptr++ = static_cast<uint8_t>(values[1] >> 38);
  *ptr++ = static_cast<uint8_t>(values[1] >> 30);
  *ptr++ = static_cast<uint8_t>(values[1] >> 22);
  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
  *ptr = static_cast<uint8_t>(values[1] << 2);
  *ptr++ |= static_cast<uint8_t>(values[2] >> 61);
  *ptr++ = static_cast<uint8_t>(values[2] >> 53);
  *ptr++ = static_cast<uint8_t>(values[2] >> 45);
  *ptr++ = static_cast<uint8_t>(values[2] >> 37);
  *ptr++ = static_cast<uint8_t>(values[2] >> 29);
  *ptr++ = static_cast<uint8_t>(values[2] >> 21);
  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
  *ptr = static_cast<uint8_t>(values[2] << 3);
  *ptr++ |= static_cast<uint8_t>(values[3] >> 60);
  *ptr++ = static_cast<uint8_t>(values[3] >> 52);
  *ptr++ = static_cast<uint8_t>(values[3] >> 44);
  *ptr++ = static_cast<uint8_t>(values[3] >> 36);
  *ptr++ = static_cast<uint8_t>(values[3] >> 28);
  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
  *ptr = static_cast<uint8_t>(values[3] << 4);
  *ptr++ |= static_cast<uint8_t>(values[4] >> 59);
  *ptr++ = static_cast<uint8_t>(values[4] >> 51);
  *ptr++ = static_cast<uint8_t>(values[4] >> 43);
  *ptr++ = static_cast<uint8_t>(values[4] >> 35);
  *ptr++ = static_cast<uint8_t>(values[4] >> 27);
  *ptr++ = static_cast<uint8_t>(values[4] >> 19);
  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
  *ptr = static_cast<uint8_t>(values[4] << 5);
  *ptr++ |= static_cast<uint8_t>(values[5] >> 58);
  *ptr++ = static_cast<uint8_t>(values[5] >> 50);
  *ptr++ = static_cast<uint8_t>(values[5] >> 42);
  *ptr++ = static_cast<uint8_t>(values[5] >> 34);
  *ptr++ = static_cast<uint8_t>(values[5] >> 26);
  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
  *ptr = static_cast<uint8_t>(values[5] << 6);
  *ptr++ |= static_cast<uint8_t>(values[6] >> 57);
  *ptr++ = static_cast<uint8_t>(values[6] >> 49);
  *ptr++ = static_cast<uint8_t>(values[6] >> 41);
  *ptr++ = static_cast<uint8_t>(values[6] >> 33);
  *ptr++ = static_cast<uint8_t>(values[6] >> 25);
  *ptr++ = static_cast<uint8_t>(values[6] >> 17);
  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
  *ptr = static_cast<uint8_t>(values[6] << 7);
  *ptr++ |= static_cast<uint8_t>(values[7] >> 56);
  *ptr++ = static_cast<uint8_t>(values[7] >> 48);
  *ptr++ = static_cast<uint8_t>(values[7] >> 40);
  *ptr++ = static_cast<uint8_t>(values[7] >> 32);
  *ptr++ = static_cast<uint8_t>(values[7] >> 24);
  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
  *ptr = static_cast<uint8_t>(values[7]);
}
static inline void unpack_bits_1(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr >> 7;
  values[1] = (*ptr >> 6) & 1;
  values[2] = (*ptr >> 5) & 1;
  values[3] = (*ptr >> 4) & 1;
  values[4] = (*ptr >> 3) & 1;
  values[5] = (*ptr >> 2) & 1;
  values[6] = (*ptr >> 1) & 1;
  values[7] = *ptr & 1;
}
static inline void unpack_bits_2(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr >> 6;
  values[1] = (*ptr >> 4) & 3;
  values[2] = (*ptr >> 2) & 3;
  values[3] = *ptr++ & 3;
  values[4] = *ptr >> 6;
  values[5] = (*ptr >> 4) & 3;
  values[6] = (*ptr >> 2) & 3;
  values[7] = *ptr & 3;
}
static inline void unpack_bits_3(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr >> 5;
  values[1] = (*ptr >> 2) & 7;
  values[2] = (*ptr++ & 3) << 1;
  values[2] |= *ptr >> 7;
  values[3] = (*ptr >> 4) & 7;
  values[4] = (*ptr >> 1) & 7;
  values[5] = (*ptr++ & 1) << 2;
  values[5] |= *ptr >> 6;
  values[6] = (*ptr >> 3) & 7;
  values[7] = *ptr & 7;
}
static inline void unpack_bits_4(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr >> 4;
  values[1] = *ptr++ & 0xf;
  values[2] = *ptr >> 4;
  values[3] = *ptr++ & 0xf;
  values[4] = *ptr >> 4;
  values[5] = *ptr++ & 0xf;
  values[6] = *ptr >> 4;
  values[7] = *ptr & 0xf;
}
static inline void unpack_bits_5(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr >> 3;
  values[1] = (*ptr++ & 7) << 2;
  values[1] |= *ptr >> 6;
  values[2] = (*ptr >> 1) & 0x1f;
  values[3] = (*ptr++ & 1) << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 1;
  values[4] |= *ptr >> 7;
  values[5] = (*ptr >> 2) & 0x1f;
  values[6] = (*ptr++ & 3) << 3;
  values[6] |= *ptr >> 5;
  values[7] = *ptr & 0x1f;
}
static inline void unpack_bits_6(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr >> 2;
  values[1] = (*ptr++ & 3) << 4;
  values[1] |= *ptr >> 4;
  values[2] = (*ptr++ & 0xf) << 2;
  values[2] |= *ptr >> 6;
  values[3] = *ptr++ & 0x3f;
  values[4] = *ptr >> 2;
  values[5] = (*ptr++ & 3) << 4;
  values[5] |= *ptr >> 4;
  values[6] = (*ptr++ & 0xf) << 2;
  values[6] |= *ptr >> 6;
  values[7] = *ptr & 0x3f;
}
static inline void unpack_bits_7(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr >> 1;
  values[1] = (*ptr++ & 1) << 6;
  values[1] |= *ptr >> 2;
  values[2] = (*ptr++ & 3) << 5;
  values[2] |= *ptr >> 3;
  values[3] = (*ptr++ & 7) << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 3;
  values[4] |= *ptr >> 5;
  values[5] = (*ptr++ & 0x1f) << 2;
  values[5] |= *ptr >> 6;
  values[6] = (*ptr++ & 0x3f) << 1;
  values[6] |= *ptr >> 7;
  values[7] = *ptr & 0x7f;
}
static inline void unpack_bits_8(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++;
  values[1] = *ptr++;
  values[2] = *ptr++;
  values[3] = *ptr++;
  values[4] = *ptr++;
  values[5] = *ptr++;
  values[6] = *ptr++;
  values[7] = *ptr;
}
static inline void unpack_bits_9(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 1;
  values[0] |= *ptr >> 7;
  values[1] = (*ptr++ & 0x7f) << 2;
  values[1] |= *ptr >> 6;
  values[2] = (*ptr++ & 0x3f) << 3;
  values[2] |= *ptr >> 5;
  values[3] = (*ptr++ & 0x1f) << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 5;
  values[4] |= *ptr >> 3;
  values[5] = (*ptr++ & 7) << 6;
  values[5] |= *ptr >> 2;
  values[6] = (*ptr++ & 3) << 7;
  values[6] |= *ptr >> 1;
  values[7] = (*ptr++ & 1) << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_10(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 2;
  values[0] |= *ptr >> 6;
  values[1] = (*ptr++ & 0x3f) << 4;
  values[1] |= *ptr >> 4;
  values[2] = (*ptr++ & 0xf) << 6;
  values[2] |= *ptr >> 2;
  values[3] = (*ptr++ & 3) << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 2;
  values[4] |= *ptr >> 6;
  values[5] = (*ptr++ & 0x3f) << 4;
  values[5] |= *ptr >> 4;
  values[6] = (*ptr++ & 0xf) << 6;
  values[6] |= *ptr >> 2;
  values[7] = (*ptr++ & 3) << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_11(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 3;
  values[0] |= *ptr >> 5;
  values[1] = (*ptr++ & 0x1f) << 6;
  values[1] |= *ptr >> 2;
  values[2] = (*ptr++ & 3) << 9;
  values[2] |= *ptr++ << 1;
  values[2] |= *ptr >> 7;
  values[3] = (*ptr++ & 0x7f) << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 7;
  values[4] |= *ptr >> 1;
  values[5] = (*ptr++ & 1) << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = (*ptr++ & 0x3f) << 5;
  values[6] |= *ptr >> 3;
  values[7] = (*ptr++ & 7) << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_12(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 4;
  values[0] |= *ptr >> 4;
  values[1] = (*ptr++ & 0xf) << 8;
  values[1] |= *ptr++;
  values[2] = *ptr++ << 4;
  values[2] |= *ptr >> 4;
  values[3] = (*ptr++ & 0xf) << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 4;
  values[4] |= *ptr >> 4;
  values[5] = (*ptr++ & 0xf) << 8;
  values[5] |= *ptr++;
  values[6] = *ptr++ << 4;
  values[6] |= *ptr >> 4;
  values[7] = (*ptr++ & 0xf) << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_13(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 5;
  values[0] |= *ptr >> 3;
  values[1] = (*ptr++ & 7) << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = (*ptr++ & 0x3f) << 7;
  values[2] |= *ptr >> 1;
  values[3] = (*ptr++ & 1) << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 9;
  values[4] |= *ptr++ << 1;
  values[4] |= *ptr >> 7;
  values[5] = (*ptr++ & 0x7f) << 6;
  values[5] |= *ptr >> 2;
  values[6] = (*ptr++ & 3) << 11;
  values[6] |= *ptr++ << 3;
  values[6] |= *ptr >> 5;
  values[7] = (*ptr++ & 0x1f) << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_14(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 6;
  values[0] |= *ptr >> 2;
  values[1] = (*ptr++ & 3) << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = (*ptr++ & 0xf) << 10;
  values[2] |= *ptr++ << 2;
  values[2] |= *ptr >> 6;
  values[3] = (*ptr++ & 0x3f) << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 6;
  values[4] |= *ptr >> 2;
  values[5] = (*ptr++ & 3) << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = (*ptr++ & 0xf) << 10;
  values[6] |= *ptr++ << 2;
  values[6] |= *ptr >> 6;
  values[7] = (*ptr++ & 0x3f) << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_15(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 7;
  values[0] |= *ptr >> 1;
  values[1] = (*ptr++ & 1) << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = (*ptr++ & 3) << 13;
  values[2] |= *ptr++ << 5;
  values[2] |= *ptr >> 3;
  values[3] = (*ptr++ & 7) << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 11;
  values[4] |= *ptr++ << 3;
  values[4] |= *ptr >> 5;
  values[5] = (*ptr++ & 0x1f) << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = (*ptr++ & 0x3f) << 9;
  values[6] |= *ptr++ << 1;
  values[6] |= *ptr >> 7;
  values[7] = (*ptr++ & 0x7f) << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_16(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 8;
  values[0] |= *ptr++;
  values[1] = *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = *ptr++ << 8;
  values[2] |= *ptr++;
  values[3] = *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 8;
  values[4] |= *ptr++;
  values[5] = *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = *ptr++ << 8;
  values[6] |= *ptr++;
  values[7] = *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_17(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 9;
  values[0] |= *ptr++ << 1;
  values[0] |= *ptr >> 7;
  values[1] = (*ptr++ & 0x7f) << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = (*ptr++ & 0x3f) << 11;
  values[2] |= *ptr++ << 3;
  values[2] |= *ptr >> 5;
  values[3] = (*ptr++ & 0x1f) << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 13;
  values[4] |= *ptr++ << 5;
  values[4] |= *ptr >> 3;
  values[5] = (*ptr++ & 7) << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = (*ptr++ & 3) << 15;
  values[6] |= *ptr++ << 7;
  values[6] |= *ptr >> 1;
  values[7] = (*ptr++ & 1) << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_18(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 10;
  values[0] |= *ptr++ << 2;
  values[0] |= *ptr >> 6;
  values[1] = (*ptr++ & 0x3f) << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = (*ptr++ & 0xf) << 14;
  values[2] |= *ptr++ << 6;
  values[2] |= *ptr >> 2;
  values[3] = (*ptr++ & 3) << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 10;
  values[4] |= *ptr++ << 2;
  values[4] |= *ptr >> 6;
  values[5] = (*ptr++ & 0x3f) << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = (*ptr++ & 0xf) << 14;
  values[6] |= *ptr++ << 6;
  values[6] |= *ptr >> 2;
  values[7] = (*ptr++ & 3) << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_19(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 11;
  values[0] |= *ptr++ << 3;
  values[0] |= *ptr >> 5;
  values[1] = (*ptr++ & 0x1f) << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = (*ptr++ & 3) << 17;
  values[2] |= *ptr++ << 9;
  values[2] |= *ptr++ << 1;
  values[2] |= *ptr >> 7;
  values[3] = (*ptr++ & 0x7f) << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 15;
  values[4] |= *ptr++ << 7;
  values[4] |= *ptr >> 1;
  values[5] = (*ptr++ & 1) << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = (*ptr++ & 0x3f) << 13;
  values[6] |= *ptr++ << 5;
  values[6] |= *ptr >> 3;
  values[7] = (*ptr++ & 7) << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_20(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 12;
  values[0] |= *ptr++ << 4;
  values[0] |= *ptr >> 4;
  values[1] = (*ptr++ & 0xf) << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = *ptr++ << 12;
  values[2] |= *ptr++ << 4;
  values[2] |= *ptr >> 4;
  values[3] = (*ptr++ & 0xf) << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 12;
  values[4] |= *ptr++ << 4;
  values[4] |= *ptr >> 4;
  values[5] = (*ptr++ & 0xf) << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = *ptr++ << 12;
  values[6] |= *ptr++ << 4;
  values[6] |= *ptr >> 4;
  values[7] = (*ptr++ & 0xf) << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_21(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 13;
  values[0] |= *ptr++ << 5;
  values[0] |= *ptr >> 3;
  values[1] = (*ptr++ & 7) << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = (*ptr++ & 0x3f) << 15;
  values[2] |= *ptr++ << 7;
  values[2] |= *ptr >> 1;
  values[3] = (*ptr++ & 1) << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 17;
  values[4] |= *ptr++ << 9;
  values[4] |= *ptr++ << 1;
  values[4] |= *ptr >> 7;
  values[5] = (*ptr++ & 0x7f) << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = (*ptr++ & 3) << 19;
  values[6] |= *ptr++ << 11;
  values[6] |= *ptr++ << 3;
  values[6] |= *ptr >> 5;
  values[7] = (*ptr++ & 0x1f) << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_22(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 14;
  values[0] |= *ptr++ << 6;
  values[0] |= *ptr >> 2;
  values[1] = (*ptr++ & 3) << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = (*ptr++ & 0xf) << 18;
  values[2] |= *ptr++ << 10;
  values[2] |= *ptr++ << 2;
  values[2] |= *ptr >> 6;
  values[3] = (*ptr++ & 0x3f) << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 14;
  values[4] |= *ptr++ << 6;
  values[4] |= *ptr >> 2;
  values[5] = (*ptr++ & 3) << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = (*ptr++ & 0xf) << 18;
  values[6] |= *ptr++ << 10;
  values[6] |= *ptr++ << 2;
  values[6] |= *ptr >> 6;
  values[7] = (*ptr++ & 0x3f) << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_23(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 15;
  values[0] |= *ptr++ << 7;
  values[0] |= *ptr >> 1;
  values[1] = (*ptr++ & 1) << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = (*ptr++ & 3) << 21;
  values[2] |= *ptr++ << 13;
  values[2] |= *ptr++ << 5;
  values[2] |= *ptr >> 3;
  values[3] = (*ptr++ & 7) << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 19;
  values[4] |= *ptr++ << 11;
  values[4] |= *ptr++ << 3;
  values[4] |= *ptr >> 5;
  values[5] = (*ptr++ & 0x1f) << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = (*ptr++ & 0x3f) << 17;
  values[6] |= *ptr++ << 9;
  values[6] |= *ptr++ << 1;
  values[6] |= *ptr >> 7;
  values[7] = (*ptr++ & 0x7f) << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_24(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 16;
  values[0] |= *ptr++ << 8;
  values[0] |= *ptr++;
  values[1] = *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = *ptr++ << 16;
  values[2] |= *ptr++ << 8;
  values[2] |= *ptr++;
  values[3] = *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 16;
  values[4] |= *ptr++ << 8;
  values[4] |= *ptr++;
  values[5] = *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = *ptr++ << 16;
  values[6] |= *ptr++ << 8;
  values[6] |= *ptr++;
  values[7] = *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_25(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 17;
  values[0] |= *ptr++ << 9;
  values[0] |= *ptr++ << 1;
  values[0] |= *ptr >> 7;
  values[1] = (*ptr++ & 0x7f) << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = (*ptr++ & 0x3f) << 19;
  values[2] |= *ptr++ << 11;
  values[2] |= *ptr++ << 3;
  values[2] |= *ptr >> 5;
  values[3] = (*ptr++ & 0x1f) << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 21;
  values[4] |= *ptr++ << 13;
  values[4] |= *ptr++ << 5;
  values[4] |= *ptr >> 3;
  values[5] = (*ptr++ & 7) << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = (*ptr++ & 3) << 23;
  values[6] |= *ptr++ << 15;
  values[6] |= *ptr++ << 7;
  values[6] |= *ptr >> 1;
  values[7] = static_cast<uint64_t>(*ptr++ & 1) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_26(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 18;
  values[0] |= *ptr++ << 10;
  values[0] |= *ptr++ << 2;
  values[0] |= *ptr >> 6;
  values[1] = (*ptr++ & 0x3f) << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = (*ptr++ & 0xf) << 22;
  values[2] |= *ptr++ << 14;
  values[2] |= *ptr++ << 6;
  values[2] |= *ptr >> 2;
  values[3] = static_cast<uint64_t>(*ptr++ & 3) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 18;
  values[4] |= *ptr++ << 10;
  values[4] |= *ptr++ << 2;
  values[4] |= *ptr >> 6;
  values[5] = (*ptr++ & 0x3f) << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = (*ptr++ & 0xf) << 22;
  values[6] |= *ptr++ << 14;
  values[6] |= *ptr++ << 6;
  values[6] |= *ptr >> 2;
  values[7] = static_cast<uint64_t>(*ptr++ & 3) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_27(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 19;
  values[0] |= *ptr++ << 11;
  values[0] |= *ptr++ << 3;
  values[0] |= *ptr >> 5;
  values[1] = (*ptr++ & 0x1f) << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 3) << 25;
  values[2] |= *ptr++ << 17;
  values[2] |= *ptr++ << 9;
  values[2] |= *ptr++ << 1;
  values[2] |= *ptr >> 7;
  values[3] = (*ptr++ & 0x7f) << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = (*ptr++ & 0xf) << 23;
  values[4] |= *ptr++ << 15;
  values[4] |= *ptr++ << 7;
  values[4] |= *ptr >> 1;
  values[5] = static_cast<uint64_t>(*ptr++ & 1) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = (*ptr++ & 0x3f) << 21;
  values[6] |= *ptr++ << 13;
  values[6] |= *ptr++ << 5;
  values[6] |= *ptr >> 3;
  values[7] = static_cast<uint64_t>(*ptr++ & 7) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_28(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 20;
  values[0] |= *ptr++ << 12;
  values[0] |= *ptr++ << 4;
  values[0] |= *ptr >> 4;
  values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 24;
  values[1] |= *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = *ptr++ << 20;
  values[2] |= *ptr++ << 12;
  values[2] |= *ptr++ << 4;
  values[2] |= *ptr >> 4;
  values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 20;
  values[4] |= *ptr++ << 12;
  values[4] |= *ptr++ << 4;
  values[4] |= *ptr >> 4;
  values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 24;
  values[5] |= *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = *ptr++ << 20;
  values[6] |= *ptr++ << 12;
  values[6] |= *ptr++ << 4;
  values[6] |= *ptr >> 4;
  values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_29(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 21;
  values[0] |= *ptr++ << 13;
  values[0] |= *ptr++ << 5;
  values[0] |= *ptr >> 3;
  values[1] = static_cast<uint64_t>(*ptr++ & 7) << 26;
  values[1] |= *ptr++ << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = (*ptr++ & 0x3f) << 23;
  values[2] |= *ptr++ << 15;
  values[2] |= *ptr++ << 7;
  values[2] |= *ptr >> 1;
  values[3] = static_cast<uint64_t>(*ptr++ & 1) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 25;
  values[4] |= *ptr++ << 17;
  values[4] |= *ptr++ << 9;
  values[4] |= *ptr++ << 1;
  values[4] |= *ptr >> 7;
  values[5] = (*ptr++ & 0x7f) << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = static_cast<uint64_t>(*ptr++ & 3) << 27;
  values[6] |= *ptr++ << 19;
  values[6] |= *ptr++ << 11;
  values[6] |= *ptr++ << 3;
  values[6] |= *ptr >> 5;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_30(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 22;
  values[0] |= *ptr++ << 14;
  values[0] |= *ptr++ << 6;
  values[0] |= *ptr >> 2;
  values[1] = static_cast<uint64_t>(*ptr++ & 3) << 28;
  values[1] |= *ptr++ << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 26;
  values[2] |= *ptr++ << 18;
  values[2] |= *ptr++ << 10;
  values[2] |= *ptr++ << 2;
  values[2] |= *ptr >> 6;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = *ptr++ << 22;
  values[4] |= *ptr++ << 14;
  values[4] |= *ptr++ << 6;
  values[4] |= *ptr >> 2;
  values[5] = static_cast<uint64_t>(*ptr++ & 3) << 28;
  values[5] |= *ptr++ << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 26;
  values[6] |= *ptr++ << 18;
  values[6] |= *ptr++ << 10;
  values[6] |= *ptr++ << 2;
  values[6] |= *ptr >> 6;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_31(uint64_t* values, const uint8_t* ptr) {
  values[0] = *ptr++ << 23;
  values[0] |= *ptr++ << 15;
  values[0] |= *ptr++ << 7;
  values[0] |= *ptr >> 1;
  values[1] = static_cast<uint64_t>(*ptr++ & 1) << 30;
  values[1] |= *ptr++ << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 3) << 29;
  values[2] |= *ptr++ << 21;
  values[2] |= *ptr++ << 13;
  values[2] |= *ptr++ << 5;
  values[2] |= *ptr >> 3;
  values[3] = static_cast<uint64_t>(*ptr++ & 7) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 27;
  values[4] |= *ptr++ << 19;
  values[4] |= *ptr++ << 11;
  values[4] |= *ptr++ << 3;
  values[4] |= *ptr >> 5;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 25;
  values[6] |= *ptr++ << 17;
  values[6] |= *ptr++ << 9;
  values[6] |= *ptr++ << 1;
  values[6] |= *ptr >> 7;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_32(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 24;
  values[0] |= *ptr++ << 16;
  values[0] |= *ptr++ << 8;
  values[0] |= *ptr++;
  values[1] = static_cast<uint64_t>(*ptr++) << 24;
  values[1] |= *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = static_cast<uint64_t>(*ptr++) << 24;
  values[2] |= *ptr++ << 16;
  values[2] |= *ptr++ << 8;
  values[2] |= *ptr++;
  values[3] = static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 24;
  values[4] |= *ptr++ << 16;
  values[4] |= *ptr++ << 8;
  values[4] |= *ptr++;
  values[5] = static_cast<uint64_t>(*ptr++) << 24;
  values[5] |= *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = static_cast<uint64_t>(*ptr++) << 24;
  values[6] |= *ptr++ << 16;
  values[6] |= *ptr++ << 8;
  values[6] |= *ptr++;
  values[7] = static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_33(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 25;
  values[0] |= *ptr++ << 17;
  values[0] |= *ptr++ << 9;
  values[0] |= *ptr++ << 1;
  values[0] |= *ptr >> 7;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x7f) << 26;
  values[1] |= *ptr++ << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 27;
  values[2] |= *ptr++ << 19;
  values[2] |= *ptr++ << 11;
  values[2] |= *ptr++ << 3;
  values[2] |= *ptr >> 5;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x1f) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 29;
  values[4] |= *ptr++ << 21;
  values[4] |= *ptr++ << 13;
  values[4] |= *ptr++ << 5;
  values[4] |= *ptr >> 3;
  values[5] = static_cast<uint64_t>(*ptr++ & 7) << 30;
  values[5] |= *ptr++ << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = static_cast<uint64_t>(*ptr++ & 3) << 31;
  values[6] |= *ptr++ << 23;
  values[6] |= *ptr++ << 15;
  values[6] |= *ptr++ << 7;
  values[6] |= *ptr >> 1;
  values[7] = static_cast<uint64_t>(*ptr++ & 1) << 32;
  values[7] |= *ptr++ << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_34(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 26;
  values[0] |= *ptr++ << 18;
  values[0] |= *ptr++ << 10;
  values[0] |= *ptr++ << 2;
  values[0] |= *ptr >> 6;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x3f) << 28;
  values[1] |= *ptr++ << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 30;
  values[2] |= *ptr++ << 22;
  values[2] |= *ptr++ << 14;
  values[2] |= *ptr++ << 6;
  values[2] |= *ptr >> 2;
  values[3] = static_cast<uint64_t>(*ptr++ & 3) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 26;
  values[4] |= *ptr++ << 18;
  values[4] |= *ptr++ << 10;
  values[4] |= *ptr++ << 2;
  values[4] |= *ptr >> 6;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x3f) << 28;
  values[5] |= *ptr++ << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 30;
  values[6] |= *ptr++ << 22;
  values[6] |= *ptr++ << 14;
  values[6] |= *ptr++ << 6;
  values[6] |= *ptr >> 2;
  values[7] = static_cast<uint64_t>(*ptr++ & 3) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr++;
}
static inline void unpack_bits_35(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 27;
  values[0] |= *ptr++ << 19;
  values[0] |= *ptr++ << 11;
  values[0] |= *ptr++ << 3;
  values[0] |= *ptr >> 5;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x1f) << 30;
  values[1] |= *ptr++ << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 2) << 33;
  values[2] |= static_cast<uint64_t>(*ptr++) << 25;
  values[2] |= *ptr++ << 17;
  values[2] |= *ptr++ << 9;
  values[2] |= *ptr++ << 1;
  values[2] |= *ptr >> 7;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x7f) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 31;
  values[4] |= *ptr++ << 23;
  values[4] |= *ptr++ << 15;
  values[4] |= *ptr++ << 7;
  values[4] |= *ptr >> 1;
  values[5] = static_cast<uint64_t>(*ptr++ & 1) << 34;
  values[5] |= static_cast<uint64_t>(*ptr++) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 29;
  values[6] |= *ptr++ << 21;
  values[6] |= *ptr++ << 13;
  values[6] |= *ptr++ << 5;
  values[6] |= *ptr >> 3;
  values[7] = static_cast<uint64_t>(*ptr++ & 7) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_36(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 28;
  values[0] |= *ptr++ << 20;
  values[0] |= *ptr++ << 12;
  values[0] |= *ptr++ << 4;
  values[0] |= *ptr >> 4;
  values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 32;
  values[1] |= static_cast<uint64_t>(*ptr++) << 24;
  values[1] |= *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = static_cast<uint64_t>(*ptr++) << 28;
  values[2] |= *ptr++ << 20;
  values[2] |= *ptr++ << 12;
  values[2] |= *ptr++ << 4;
  values[2] |= *ptr >> 4;
  values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 28;
  values[4] |= *ptr++ << 20;
  values[4] |= *ptr++ << 12;
  values[4] |= *ptr++ << 4;
  values[4] |= *ptr >> 4;
  values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 32;
  values[5] |= static_cast<uint64_t>(*ptr++) << 24;
  values[5] |= *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = static_cast<uint64_t>(*ptr++) << 28;
  values[6] |= *ptr++ << 20;
  values[6] |= *ptr++ << 12;
  values[6] |= *ptr++ << 4;
  values[6] |= *ptr >> 4;
  values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_37(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 29;
  values[0] |= *ptr++ << 21;
  values[0] |= *ptr++ << 13;
  values[0] |= *ptr++ << 5;
  values[0] |= *ptr >> 3;
  values[1] = static_cast<uint64_t>(*ptr++ & 7) << 34;
  values[1] |= static_cast<uint64_t>(*ptr++) << 26;
  values[1] |= *ptr++ << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 31;
  values[2] |= static_cast<uint64_t>(*ptr++) << 23;
  values[2] |= *ptr++ << 15;
  values[2] |= *ptr++ << 7;
  values[2] |= *ptr >> 1;
  values[3] = static_cast<uint64_t>(*ptr++ & 1) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 33;
  values[4] |= static_cast<uint64_t>(*ptr++) << 25;
  values[4] |= *ptr++ << 17;
  values[4] |= *ptr++ << 9;
  values[4] |= *ptr++ << 1;
  values[4] |= *ptr >> 7;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x7f) << 30;
  values[5] |= static_cast<uint64_t>(*ptr++) << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = static_cast<uint64_t>(*ptr++ & 3) << 35;
  values[6] |= static_cast<uint64_t>(*ptr++) << 27;
  values[6] |= *ptr++ << 19;
  values[6] |= *ptr++ << 11;
  values[6] |= *ptr++ << 3;
  values[6] |= *ptr >> 5;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_38(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 30;
  values[0] |= *ptr++ << 22;
  values[0] |= *ptr++ << 14;
  values[0] |= *ptr++ << 6;
  values[0] |= *ptr >> 2;
  values[1] = static_cast<uint64_t>(*ptr++ & 3) << 36;
  values[1] |= static_cast<uint64_t>(*ptr++) << 28;
  values[1] |= *ptr++ << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 34;
  values[2] |= static_cast<uint64_t>(*ptr++) << 26;
  values[2] |= *ptr++ << 18;
  values[2] |= *ptr++ << 10;
  values[2] |= *ptr++ << 2;
  values[2] |= *ptr >> 6;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 30;
  values[4] |= *ptr++ << 22;
  values[4] |= *ptr++ << 14;
  values[4] |= *ptr++ << 6;
  values[4] |= *ptr >> 2;
  values[5] = static_cast<uint64_t>(*ptr++ & 3) << 36;
  values[5] |= static_cast<uint64_t>(*ptr++) << 28;
  values[5] |= *ptr++ << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 34;
  values[6] |= static_cast<uint64_t>(*ptr++) << 26;
  values[6] |= *ptr++ << 18;
  values[6] |= *ptr++ << 10;
  values[6] |= *ptr++ << 2;
  values[6] |= *ptr >> 6;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_39(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 31;
  values[0] |= *ptr++ << 23;
  values[0] |= *ptr++ << 15;
  values[0] |= *ptr++ << 7;
  values[0] |= *ptr >> 1;
  values[1] = static_cast<uint64_t>(*ptr++ & 1) << 38;
  values[1] |= static_cast<uint64_t>(*ptr++) << 30;
  values[1] |= *ptr++ << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 3) << 37;
  values[2] |= static_cast<uint64_t>(*ptr++) << 29;
  values[2] |= *ptr++ << 21;
  values[2] |= *ptr++ << 13;
  values[2] |= *ptr++ << 5;
  values[2] |= *ptr >> 3;
  values[3] = static_cast<uint64_t>(*ptr++ & 7) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 35;
  values[4] |= static_cast<uint64_t>(*ptr++) << 27;
  values[4] |= *ptr++ << 19;
  values[4] |= *ptr++ << 11;
  values[4] |= *ptr++ << 3;
  values[4] |= *ptr >> 5;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 34;
  values[5] |= static_cast<uint64_t>(*ptr++) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 33;
  values[6] |= static_cast<uint64_t>(*ptr++) << 25;
  values[6] |= *ptr++ << 17;
  values[6] |= *ptr++ << 9;
  values[6] |= *ptr++ << 1;
  values[6] |= *ptr >> 7;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_40(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 32;
  values[0] |= static_cast<uint64_t>(*ptr++) << 24;
  values[0] |= *ptr++ << 16;
  values[0] |= *ptr++ << 8;
  values[0] |= *ptr++;
  values[1] = static_cast<uint64_t>(*ptr++) << 32;
  values[1] |= static_cast<uint64_t>(*ptr++) << 24;
  values[1] |= *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = static_cast<uint64_t>(*ptr++) << 32;
  values[2] |= static_cast<uint64_t>(*ptr++) << 24;
  values[2] |= *ptr++ << 16;
  values[2] |= *ptr++ << 8;
  values[2] |= *ptr++;
  values[3] = static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 32;
  values[4] |= static_cast<uint64_t>(*ptr++) << 24;
  values[4] |= *ptr++ << 16;
  values[4] |= *ptr++ << 8;
  values[4] |= *ptr++;
  values[5] = static_cast<uint64_t>(*ptr++) << 32;
  values[5] |= static_cast<uint64_t>(*ptr++) << 24;
  values[5] |= *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = static_cast<uint64_t>(*ptr++) << 32;
  values[6] |= static_cast<uint64_t>(*ptr++) << 24;
  values[6] |= *ptr++ << 16;
  values[6] |= *ptr++ << 8;
  values[6] |= *ptr++;
  values[7] = static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_41(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 33;
  values[0] |= static_cast<uint64_t>(*ptr++) << 25;
  values[0] |= *ptr++ << 17;
  values[0] |= *ptr++ << 9;
  values[0] |= *ptr++ << 1;
  values[0] |= *ptr >> 7;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x7f) << 34;
  values[1] |= static_cast<uint64_t>(*ptr++) << 26;
  values[1] |= *ptr++ << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 35;
  values[2] |= static_cast<uint64_t>(*ptr++) << 27;
  values[2] |= *ptr++ << 19;
  values[2] |= *ptr++ << 11;
  values[2] |= *ptr++ << 3;
  values[2] |= *ptr >> 5;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x1f) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 37;
  values[4] |= static_cast<uint64_t>(*ptr++) << 29;
  values[4] |= *ptr++ << 21;
  values[4] |= *ptr++ << 13;
  values[4] |= *ptr++ << 5;
  values[4] |= *ptr >> 3;
  values[5] = static_cast<uint64_t>(*ptr++ & 7) << 38;
  values[5] |= static_cast<uint64_t>(*ptr++) << 30;
  values[5] |= *ptr++ << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = static_cast<uint64_t>(*ptr++ & 3) << 39;
  values[6] |= static_cast<uint64_t>(*ptr++) << 31;
  values[6] |= *ptr++ << 23;
  values[6] |= *ptr++ << 15;
  values[6] |= *ptr++ << 7;
  values[6] |= *ptr >> 1;
  values[7] = static_cast<uint64_t>(*ptr++ & 1) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_42(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 34;
  values[0] |= static_cast<uint64_t>(*ptr++) << 26;
  values[0] |= *ptr++ << 18;
  values[0] |= *ptr++ << 10;
  values[0] |= *ptr++ << 2;
  values[0] |= *ptr >> 6;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x3f) << 36;
  values[1] |= static_cast<uint64_t>(*ptr++) << 28;
  values[1] |= *ptr++ << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 38;
  values[2] |= static_cast<uint64_t>(*ptr++) << 30;
  values[2] |= *ptr++ << 22;
  values[2] |= *ptr++ << 14;
  values[2] |= *ptr++ << 6;
  values[2] |= *ptr >> 2;
  values[3] = static_cast<uint64_t>(*ptr++ & 3) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 34;
  values[4] |= static_cast<uint64_t>(*ptr++) << 26;
  values[4] |= *ptr++ << 18;
  values[4] |= *ptr++ << 10;
  values[4] |= *ptr++ << 2;
  values[4] |= *ptr >> 6;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x3f) << 36;
  values[5] |= static_cast<uint64_t>(*ptr++) << 28;
  values[5] |= *ptr++ << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 38;
  values[6] |= static_cast<uint64_t>(*ptr++) << 30;
  values[6] |= *ptr++ << 22;
  values[6] |= *ptr++ << 14;
  values[6] |= *ptr++ << 6;
  values[6] |= *ptr >> 2;
  values[7] = static_cast<uint64_t>(*ptr++ & 3) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_43(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 35;
  values[0] |= static_cast<uint64_t>(*ptr++) << 27;
  values[0] |= *ptr++ << 19;
  values[0] |= *ptr++ << 11;
  values[0] |= *ptr++ << 3;
  values[0] |= *ptr >> 5;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x1f) << 38;
  values[1] |= static_cast<uint64_t>(*ptr++) << 30;
  values[1] |= *ptr++ << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 3) << 41;
  values[2] |= static_cast<uint64_t>(*ptr++) << 33;
  values[2] |= static_cast<uint64_t>(*ptr++) << 25;
  values[2] |= *ptr++ << 17;
  values[2] |= *ptr++ << 9;
  values[2] |= *ptr++ << 1;
  values[2] |= *ptr >> 7;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x7f) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 39;
  values[4] |= static_cast<uint64_t>(*ptr++) << 31;
  values[4] |= *ptr++ << 23;
  values[4] |= *ptr++ << 15;
  values[4] |= *ptr++ << 7;
  values[4] |= *ptr >> 1;
  values[5] = static_cast<uint64_t>(*ptr++ & 1) << 42;
  values[5] |= static_cast<uint64_t>(*ptr++) << 34;
  values[5] |= static_cast<uint64_t>(*ptr++) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 37;
  values[6] |= static_cast<uint64_t>(*ptr++) << 29;
  values[6] |= *ptr++ << 21;
  values[6] |= *ptr++ << 13;
  values[6] |= *ptr++ << 5;
  values[6] |= *ptr >> 3;
  values[7] = static_cast<uint64_t>(*ptr++ & 7) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_44(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 36;
  values[0] |= static_cast<uint64_t>(*ptr++) << 28;
  values[0] |= *ptr++ << 20;
  values[0] |= *ptr++ << 12;
  values[0] |= *ptr++ << 4;
  values[0] |= *ptr >> 4;
  values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 40;
  values[1] |= static_cast<uint64_t>(*ptr++) << 32;
  values[1] |= static_cast<uint64_t>(*ptr++) << 24;
  values[1] |= *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = static_cast<uint64_t>(*ptr++) << 36;
  values[2] |= static_cast<uint64_t>(*ptr++) << 28;
  values[2] |= *ptr++ << 20;
  values[2] |= *ptr++ << 12;
  values[2] |= *ptr++ << 4;
  values[2] |= *ptr >> 4;
  values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 36;
  values[4] |= static_cast<uint64_t>(*ptr++) << 28;
  values[4] |= *ptr++ << 20;
  values[4] |= *ptr++ << 12;
  values[4] |= *ptr++ << 4;
  values[4] |= *ptr >> 4;
  values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 40;
  values[5] |= static_cast<uint64_t>(*ptr++) << 32;
  values[5] |= static_cast<uint64_t>(*ptr++) << 24;
  values[5] |= *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = static_cast<uint64_t>(*ptr++) << 36;
  values[6] |= static_cast<uint64_t>(*ptr++) << 28;
  values[6] |= *ptr++ << 20;
  values[6] |= *ptr++ << 12;
  values[6] |= *ptr++ << 4;
  values[6] |= *ptr >> 4;
  values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_45(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 37;
  values[0] |= static_cast<uint64_t>(*ptr++) << 29;
  values[0] |= *ptr++ << 21;
  values[0] |= *ptr++ << 13;
  values[0] |= *ptr++ << 5;
  values[0] |= *ptr >> 3;
  values[1] = static_cast<uint64_t>(*ptr++ & 7) << 42;
  values[1] |= static_cast<uint64_t>(*ptr++) << 34;
  values[1] |= static_cast<uint64_t>(*ptr++) << 26;
  values[1] |= *ptr++ << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 39;
  values[2] |= static_cast<uint64_t>(*ptr++) << 31;
  values[2] |= static_cast<uint64_t>(*ptr++) << 23;
  values[2] |= *ptr++ << 15;
  values[2] |= *ptr++ << 7;
  values[2] |= *ptr >> 1;
  values[3] = static_cast<uint64_t>(*ptr++ & 1) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 41;
  values[4] |= static_cast<uint64_t>(*ptr++) << 33;
  values[4] |= static_cast<uint64_t>(*ptr++) << 25;
  values[4] |= *ptr++ << 17;
  values[4] |= *ptr++ << 9;
  values[4] |= *ptr++ << 1;
  values[4] |= *ptr >> 7;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x7f) << 38;
  values[5] |= static_cast<uint64_t>(*ptr++) << 30;
  values[5] |= static_cast<uint64_t>(*ptr++) << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = static_cast<uint64_t>(*ptr++ & 3) << 43;
  values[6] |= static_cast<uint64_t>(*ptr++) << 35;
  values[6] |= static_cast<uint64_t>(*ptr++) << 27;
  values[6] |= *ptr++ << 19;
  values[6] |= *ptr++ << 11;
  values[6] |= *ptr++ << 3;
  values[6] |= *ptr >> 5;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_46(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 38;
  values[0] |= static_cast<uint64_t>(*ptr++) << 30;
  values[0] |= *ptr++ << 22;
  values[0] |= *ptr++ << 14;
  values[0] |= *ptr++ << 6;
  values[0] |= *ptr >> 2;
  values[1] = static_cast<uint64_t>(*ptr++ & 3) << 44;
  values[1] |= static_cast<uint64_t>(*ptr++) << 36;
  values[1] |= static_cast<uint64_t>(*ptr++) << 28;
  values[1] |= *ptr++ << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 42;
  values[2] |= static_cast<uint64_t>(*ptr++) << 34;
  values[2] |= static_cast<uint64_t>(*ptr++) << 26;
  values[2] |= *ptr++ << 18;
  values[2] |= *ptr++ << 10;
  values[2] |= *ptr++ << 2;
  values[2] |= *ptr >> 6;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 38;
  values[4] |= static_cast<uint64_t>(*ptr++) << 30;
  values[4] |= *ptr++ << 22;
  values[4] |= *ptr++ << 14;
  values[4] |= *ptr++ << 6;
  values[4] |= *ptr >> 2;
  values[5] = static_cast<uint64_t>(*ptr++ & 3) << 44;
  values[5] |= static_cast<uint64_t>(*ptr++) << 36;
  values[5] |= static_cast<uint64_t>(*ptr++) << 28;
  values[5] |= *ptr++ << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 42;
  values[6] |= static_cast<uint64_t>(*ptr++) << 34;
  values[6] |= static_cast<uint64_t>(*ptr++) << 26;
  values[6] |= *ptr++ << 18;
  values[6] |= *ptr++ << 10;
  values[6] |= *ptr++ << 2;
  values[6] |= *ptr >> 6;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_47(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 39;
  values[0] |= static_cast<uint64_t>(*ptr++) << 31;
  values[0] |= *ptr++ << 23;
  values[0] |= *ptr++ << 15;
  values[0] |= *ptr++ << 7;
  values[0] |= *ptr >> 1;
  values[1] = static_cast<uint64_t>(*ptr++ & 1) << 46;
  values[1] |= static_cast<uint64_t>(*ptr++) << 38;
  values[1] |= static_cast<uint64_t>(*ptr++) << 30;
  values[1] |= *ptr++ << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 3) << 45;
  values[2] |= static_cast<uint64_t>(*ptr++) << 37;
  values[2] |= static_cast<uint64_t>(*ptr++) << 29;
  values[2] |= *ptr++ << 21;
  values[2] |= *ptr++ << 13;
  values[2] |= *ptr++ << 5;
  values[2] |= *ptr >> 3;
  values[3] = static_cast<uint64_t>(*ptr++ & 7) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 43;
  values[4] |= static_cast<uint64_t>(*ptr++) << 35;
  values[4] |= static_cast<uint64_t>(*ptr++) << 27;
  values[4] |= *ptr++ << 19;
  values[4] |= *ptr++ << 11;
  values[4] |= *ptr++ << 3;
  values[4] |= *ptr >> 5;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 42;
  values[5] |= static_cast<uint64_t>(*ptr++) << 34;
  values[5] |= static_cast<uint64_t>(*ptr++) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 41;
  values[6] |= static_cast<uint64_t>(*ptr++) << 33;
  values[6] |= static_cast<uint64_t>(*ptr++) << 25;
  values[6] |= *ptr++ << 17;
  values[6] |= *ptr++ << 9;
  values[6] |= *ptr++ << 1;
  values[6] |= *ptr >> 7;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_48(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 40;
  values[0] |= static_cast<uint64_t>(*ptr++) << 32;
  values[0] |= static_cast<uint64_t>(*ptr++) << 24;
  values[0] |= *ptr++ << 16;
  values[0] |= *ptr++ << 8;
  values[0] |= *ptr++;
  values[1] = static_cast<uint64_t>(*ptr++) << 40;
  values[1] |= static_cast<uint64_t>(*ptr++) << 32;
  values[1] |= static_cast<uint64_t>(*ptr++) << 24;
  values[1] |= *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = static_cast<uint64_t>(*ptr++) << 40;
  values[2] |= static_cast<uint64_t>(*ptr++) << 32;
  values[2] |= static_cast<uint64_t>(*ptr++) << 24;
  values[2] |= *ptr++ << 16;
  values[2] |= *ptr++ << 8;
  values[2] |= *ptr++;
  values[3] = static_cast<uint64_t>(*ptr++) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 40;
  values[4] |= static_cast<uint64_t>(*ptr++) << 32;
  values[4] |= static_cast<uint64_t>(*ptr++) << 24;
  values[4] |= *ptr++ << 16;
  values[4] |= *ptr++ << 8;
  values[4] |= *ptr++;
  values[5] = static_cast<uint64_t>(*ptr++) << 40;
  values[5] |= static_cast<uint64_t>(*ptr++) << 32;
  values[5] |= static_cast<uint64_t>(*ptr++) << 24;
  values[5] |= *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = static_cast<uint64_t>(*ptr++) << 40;
  values[6] |= static_cast<uint64_t>(*ptr++) << 32;
  values[6] |= static_cast<uint64_t>(*ptr++) << 24;
  values[6] |= *ptr++ << 16;
  values[6] |= *ptr++ << 8;
  values[6] |= *ptr++;
  values[7] = static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_49(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 41;
  values[0] |= static_cast<uint64_t>(*ptr++) << 33;
  values[0] |= static_cast<uint64_t>(*ptr++) << 25;
  values[0] |= *ptr++ << 17;
  values[0] |= *ptr++ << 9;
  values[0] |= *ptr++ << 1;
  values[0] |= *ptr >> 7;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x7f) << 42;
  values[1] |= static_cast<uint64_t>(*ptr++) << 34;
  values[1] |= static_cast<uint64_t>(*ptr++) << 26;
  values[1] |= *ptr++ << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 43;
  values[2] |= static_cast<uint64_t>(*ptr++) << 35;
  values[2] |= static_cast<uint64_t>(*ptr++) << 27;
  values[2] |= *ptr++ << 19;
  values[2] |= *ptr++ << 11;
  values[2] |= *ptr++ << 3;
  values[2] |= *ptr >> 5;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x1f) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 45;
  values[4] |= static_cast<uint64_t>(*ptr++) << 37;
  values[4] |= static_cast<uint64_t>(*ptr++) << 29;
  values[4] |= *ptr++ << 21;
  values[4] |= *ptr++ << 13;
  values[4] |= *ptr++ << 5;
  values[4] |= *ptr >> 3;
  values[5] = static_cast<uint64_t>(*ptr++ & 7) << 46;
  values[5] |= static_cast<uint64_t>(*ptr++) << 38;
  values[5] |= static_cast<uint64_t>(*ptr++) << 30;
  values[5] |= *ptr++ << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = static_cast<uint64_t>(*ptr++ & 3) << 47;
  values[6] |= static_cast<uint64_t>(*ptr++) << 39;
  values[6] |= static_cast<uint64_t>(*ptr++) << 31;
  values[6] |= *ptr++ << 23;
  values[6] |= *ptr++ << 15;
  values[6] |= *ptr++ << 7;
  values[6] |= *ptr >> 1;
  values[7] = static_cast<uint64_t>(*ptr++ & 1) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_50(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 42;
  values[0] |= static_cast<uint64_t>(*ptr++) << 34;
  values[0] |= static_cast<uint64_t>(*ptr++) << 26;
  values[0] |= *ptr++ << 18;
  values[0] |= *ptr++ << 10;
  values[0] |= *ptr++ << 2;
  values[0] |= *ptr >> 6;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x3f) << 44;
  values[1] |= static_cast<uint64_t>(*ptr++) << 36;
  values[1] |= static_cast<uint64_t>(*ptr++) << 28;
  values[1] |= *ptr++ << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 46;
  values[2] |= static_cast<uint64_t>(*ptr++) << 38;
  values[2] |= static_cast<uint64_t>(*ptr++) << 30;
  values[2] |= *ptr++ << 22;
  values[2] |= *ptr++ << 14;
  values[2] |= *ptr++ << 6;
  values[2] |= *ptr >> 2;
  values[3] = static_cast<uint64_t>(*ptr++ & 3) << 48;
  values[3] |= static_cast<uint64_t>(*ptr++) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 42;
  values[4] |= static_cast<uint64_t>(*ptr++) << 34;
  values[4] |= static_cast<uint64_t>(*ptr++) << 26;
  values[4] |= *ptr++ << 18;
  values[4] |= *ptr++ << 10;
  values[4] |= *ptr++ << 2;
  values[4] |= *ptr >> 6;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x3f) << 44;
  values[5] |= static_cast<uint64_t>(*ptr++) << 36;
  values[5] |= static_cast<uint64_t>(*ptr++) << 28;
  values[5] |= *ptr++ << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 46;
  values[6] |= static_cast<uint64_t>(*ptr++) << 38;
  values[6] |= static_cast<uint64_t>(*ptr++) << 30;
  values[6] |= *ptr++ << 22;
  values[6] |= *ptr++ << 14;
  values[6] |= *ptr++ << 6;
  values[6] |= *ptr >> 2;
  values[7] = static_cast<uint64_t>(*ptr++ & 3) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_51(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 43;
  values[0] |= static_cast<uint64_t>(*ptr++) << 35;
  values[0] |= static_cast<uint64_t>(*ptr++) << 27;
  values[0] |= *ptr++ << 19;
  values[0] |= *ptr++ << 11;
  values[0] |= *ptr++ << 3;
  values[0] |= *ptr >> 5;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x1f) << 46;
  values[1] |= static_cast<uint64_t>(*ptr++) << 38;
  values[1] |= static_cast<uint64_t>(*ptr++) << 30;
  values[1] |= *ptr++ << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 3) << 49;
  values[2] |= static_cast<uint64_t>(*ptr++) << 41;
  values[2] |= static_cast<uint64_t>(*ptr++) << 33;
  values[2] |= static_cast<uint64_t>(*ptr++) << 25;
  values[2] |= *ptr++ << 17;
  values[2] |= *ptr++ << 9;
  values[2] |= *ptr++ << 1;
  values[2] |= *ptr >> 7;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x7f) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 47;
  values[4] |= static_cast<uint64_t>(*ptr++) << 39;
  values[4] |= static_cast<uint64_t>(*ptr++) << 31;
  values[4] |= *ptr++ << 23;
  values[4] |= *ptr++ << 15;
  values[4] |= *ptr++ << 7;
  values[4] |= *ptr >> 1;
  values[5] = static_cast<uint64_t>(*ptr++ & 1) << 50;
  values[5] |= static_cast<uint64_t>(*ptr++) << 42;
  values[5] |= static_cast<uint64_t>(*ptr++) << 34;
  values[5] |= static_cast<uint64_t>(*ptr++) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 45;
  values[6] |= static_cast<uint64_t>(*ptr++) << 37;
  values[6] |= static_cast<uint64_t>(*ptr++) << 29;
  values[6] |= *ptr++ << 21;
  values[6] |= *ptr++ << 13;
  values[6] |= *ptr++ << 5;
  values[6] |= *ptr >> 3;
  values[7] = static_cast<uint64_t>(*ptr++ & 7) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_52(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 44;
  values[0] |= static_cast<uint64_t>(*ptr++) << 36;
  values[0] |= static_cast<uint64_t>(*ptr++) << 28;
  values[0] |= *ptr++ << 20;
  values[0] |= *ptr++ << 12;
  values[0] |= *ptr++ << 4;
  values[0] |= *ptr >> 4;
  values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 48;
  values[1] |= static_cast<uint64_t>(*ptr++) << 40;
  values[1] |= static_cast<uint64_t>(*ptr++) << 32;
  values[1] |= static_cast<uint64_t>(*ptr++) << 24;
  values[1] |= *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = static_cast<uint64_t>(*ptr++) << 44;
  values[2] |= static_cast<uint64_t>(*ptr++) << 36;
  values[2] |= static_cast<uint64_t>(*ptr++) << 28;
  values[2] |= *ptr++ << 20;
  values[2] |= *ptr++ << 12;
  values[2] |= *ptr++ << 4;
  values[2] |= *ptr >> 4;
  values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 48;
  values[3] |= static_cast<uint64_t>(*ptr++) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 44;
  values[4] |= static_cast<uint64_t>(*ptr++) << 36;
  values[4] |= static_cast<uint64_t>(*ptr++) << 28;
  values[4] |= *ptr++ << 20;
  values[4] |= *ptr++ << 12;
  values[4] |= *ptr++ << 4;
  values[4] |= *ptr >> 4;
  values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 48;
  values[5] |= static_cast<uint64_t>(*ptr++) << 40;
  values[5] |= static_cast<uint64_t>(*ptr++) << 32;
  values[5] |= static_cast<uint64_t>(*ptr++) << 24;
  values[5] |= *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = static_cast<uint64_t>(*ptr++) << 44;
  values[6] |= static_cast<uint64_t>(*ptr++) << 36;
  values[6] |= static_cast<uint64_t>(*ptr++) << 28;
  values[6] |= *ptr++ << 20;
  values[6] |= *ptr++ << 12;
  values[6] |= *ptr++ << 4;
  values[6] |= *ptr >> 4;
  values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_53(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 45;
  values[0] |= static_cast<uint64_t>(*ptr++) << 37;
  values[0] |= static_cast<uint64_t>(*ptr++) << 29;
  values[0] |= *ptr++ << 21;
  values[0] |= *ptr++ << 13;
  values[0] |= *ptr++ << 5;
  values[0] |= *ptr >> 3;
  values[1] = static_cast<uint64_t>(*ptr++ & 7) << 50;
  values[1] |= static_cast<uint64_t>(*ptr++) << 42;
  values[1] |= static_cast<uint64_t>(*ptr++) << 34;
  values[1] |= static_cast<uint64_t>(*ptr++) << 26;
  values[1] |= *ptr++ << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 47;
  values[2] |= static_cast<uint64_t>(*ptr++) << 39;
  values[2] |= static_cast<uint64_t>(*ptr++) << 31;
  values[2] |= static_cast<uint64_t>(*ptr++) << 23;
  values[2] |= *ptr++ << 15;
  values[2] |= *ptr++ << 7;
  values[2] |= *ptr >> 1;
  values[3] = static_cast<uint64_t>(*ptr++ & 1) << 52;
  values[3] |= static_cast<uint64_t>(*ptr++) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 49;
  values[4] |= static_cast<uint64_t>(*ptr++) << 41;
  values[4] |= static_cast<uint64_t>(*ptr++) << 33;
  values[4] |= static_cast<uint64_t>(*ptr++) << 25;
  values[4] |= *ptr++ << 17;
  values[4] |= *ptr++ << 9;
  values[4] |= *ptr++ << 1;
  values[4] |= *ptr >> 7;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x7f) << 46;
  values[5] |= static_cast<uint64_t>(*ptr++) << 38;
  values[5] |= static_cast<uint64_t>(*ptr++) << 30;
  values[5] |= *ptr++ << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = static_cast<uint64_t>(*ptr++ & 3) << 51;
  values[6] |= static_cast<uint64_t>(*ptr++) << 43;
  values[6] |= static_cast<uint64_t>(*ptr++) << 35;
  values[6] |= static_cast<uint64_t>(*ptr++) << 27;
  values[6] |= *ptr++ << 19;
  values[6] |= *ptr++ << 11;
  values[6] |= *ptr++ << 3;
  values[6] |= *ptr >> 5;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_54(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 46;
  values[0] |= static_cast<uint64_t>(*ptr++) << 38;
  values[0] |= static_cast<uint64_t>(*ptr++) << 30;
  values[0] |= *ptr++ << 22;
  values[0] |= *ptr++ << 14;
  values[0] |= *ptr++ << 6;
  values[0] |= *ptr >> 2;
  values[1] = static_cast<uint64_t>(*ptr++ & 3) << 52;
  values[1] |= static_cast<uint64_t>(*ptr++) << 44;
  values[1] |= static_cast<uint64_t>(*ptr++) << 36;
  values[1] |= static_cast<uint64_t>(*ptr++) << 28;
  values[1] |= *ptr++ << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 50;
  values[2] |= static_cast<uint64_t>(*ptr++) << 42;
  values[2] |= static_cast<uint64_t>(*ptr++) << 34;
  values[2] |= static_cast<uint64_t>(*ptr++) << 26;
  values[2] |= *ptr++ << 18;
  values[2] |= *ptr++ << 10;
  values[2] |= *ptr++ << 2;
  values[2] |= *ptr >> 6;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 48;
  values[3] |= static_cast<uint64_t>(*ptr++) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 46;
  values[4] |= static_cast<uint64_t>(*ptr++) << 38;
  values[4] |= static_cast<uint64_t>(*ptr++) << 30;
  values[4] |= *ptr++ << 22;
  values[4] |= *ptr++ << 14;
  values[4] |= *ptr++ << 6;
  values[4] |= *ptr >> 2;
  values[5] = static_cast<uint64_t>(*ptr++ & 3) << 52;
  values[5] |= static_cast<uint64_t>(*ptr++) << 44;
  values[5] |= static_cast<uint64_t>(*ptr++) << 36;
  values[5] |= static_cast<uint64_t>(*ptr++) << 28;
  values[5] |= *ptr++ << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 50;
  values[6] |= static_cast<uint64_t>(*ptr++) << 42;
  values[6] |= static_cast<uint64_t>(*ptr++) << 34;
  values[6] |= static_cast<uint64_t>(*ptr++) << 26;
  values[6] |= *ptr++ << 18;
  values[6] |= *ptr++ << 10;
  values[6] |= *ptr++ << 2;
  values[6] |= *ptr >> 6;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr++;
}
static inline void unpack_bits_55(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 47;
  values[0] |= static_cast<uint64_t>(*ptr++) << 39;
  values[0] |= static_cast<uint64_t>(*ptr++) << 31;
  values[0] |= *ptr++ << 23;
  values[0] |= *ptr++ << 15;
  values[0] |= *ptr++ << 7;
  values[0] |= *ptr >> 1;
  values[1] = static_cast<uint64_t>(*ptr++ & 1) << 54;
  values[1] |= static_cast<uint64_t>(*ptr++) << 46;
  values[1] |= static_cast<uint64_t>(*ptr++) << 38;
  values[1] |= static_cast<uint64_t>(*ptr++) << 30;
  values[1] |= *ptr++ << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 3) << 53;
  values[2] |= static_cast<uint64_t>(*ptr++) << 45;
  values[2] |= static_cast<uint64_t>(*ptr++) << 37;
  values[2] |= static_cast<uint64_t>(*ptr++) << 29;
  values[2] |= *ptr++ << 21;
  values[2] |= *ptr++ << 13;
  values[2] |= *ptr++ << 5;
  values[2] |= *ptr >> 3;
  values[3] = static_cast<uint64_t>(*ptr++ & 7) << 52;
  values[3] |= static_cast<uint64_t>(*ptr++) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 51;
  values[4] |= static_cast<uint64_t>(*ptr++) << 43;
  values[4] |= static_cast<uint64_t>(*ptr++) << 35;
  values[4] |= static_cast<uint64_t>(*ptr++) << 27;
  values[4] |= *ptr++ << 19;
  values[4] |= *ptr++ << 11;
  values[4] |= *ptr++ << 3;
  values[4] |= *ptr >> 5;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 50;
  values[5] |= static_cast<uint64_t>(*ptr++) << 42;
  values[5] |= static_cast<uint64_t>(*ptr++) << 34;
  values[5] |= static_cast<uint64_t>(*ptr++) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 49;
  values[6] |= static_cast<uint64_t>(*ptr++) << 41;
  values[6] |= static_cast<uint64_t>(*ptr++) << 33;
  values[6] |= static_cast<uint64_t>(*ptr++) << 25;
  values[6] |= *ptr++ << 17;
  values[6] |= *ptr++ << 9;
  values[6] |= *ptr++ << 1;
  values[6] |= *ptr >> 7;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_56(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 48;
  values[0] |= static_cast<uint64_t>(*ptr++) << 40;
  values[0] |= static_cast<uint64_t>(*ptr++) << 32;
  values[0] |= static_cast<uint64_t>(*ptr++) << 24;
  values[0] |= *ptr++ << 16;
  values[0] |= *ptr++ << 8;
  values[0] |= *ptr++;
  values[1] = static_cast<uint64_t>(*ptr++) << 48;
  values[1] |= static_cast<uint64_t>(*ptr++) << 40;
  values[1] |= static_cast<uint64_t>(*ptr++) << 32;
  values[1] |= static_cast<uint64_t>(*ptr++) << 24;
  values[1] |= *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = static_cast<uint64_t>(*ptr++) << 48;
  values[2] |= static_cast<uint64_t>(*ptr++) << 40;
  values[2] |= static_cast<uint64_t>(*ptr++) << 32;
  values[2] |= static_cast<uint64_t>(*ptr++) << 24;
  values[2] |= *ptr++ << 16;
  values[2] |= *ptr++ << 8;
  values[2] |= *ptr++;
  values[3] = static_cast<uint64_t>(*ptr++) << 48;
  values[3] |= static_cast<uint64_t>(*ptr++) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 48;
  values[4] |= static_cast<uint64_t>(*ptr++) << 40;
  values[4] |= static_cast<uint64_t>(*ptr++) << 32;
  values[4] |= static_cast<uint64_t>(*ptr++) << 24;
  values[4] |= *ptr++ << 16;
  values[4] |= *ptr++ << 8;
  values[4] |= *ptr++;
  values[5] = static_cast<uint64_t>(*ptr++) << 48;
  values[5] |= static_cast<uint64_t>(*ptr++) << 40;
  values[5] |= static_cast<uint64_t>(*ptr++) << 32;
  values[5] |= static_cast<uint64_t>(*ptr++) << 24;
  values[5] |= *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = static_cast<uint64_t>(*ptr++) << 48;
  values[6] |= static_cast<uint64_t>(*ptr++) << 40;
  values[6] |= static_cast<uint64_t>(*ptr++) << 32;
  values[6] |= static_cast<uint64_t>(*ptr++) << 24;
  values[6] |= *ptr++ << 16;
  values[6] |= *ptr++ << 8;
  values[6] |= *ptr++;
  values[7] = static_cast<uint64_t>(*ptr++) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_57(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 49;
  values[0] |= static_cast<uint64_t>(*ptr++) << 41;
  values[0] |= static_cast<uint64_t>(*ptr++) << 33;
  values[0] |= static_cast<uint64_t>(*ptr++) << 25;
  values[0] |= *ptr++ << 17;
  values[0] |= *ptr++ << 9;
  values[0] |= *ptr++ << 1;
  values[0] |= *ptr >> 7;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x7f) << 50;
  values[1] |= static_cast<uint64_t>(*ptr++) << 42;
  values[1] |= static_cast<uint64_t>(*ptr++) << 34;
  values[1] |= static_cast<uint64_t>(*ptr++) << 26;
  values[1] |= *ptr++ << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 51;
  values[2] |= static_cast<uint64_t>(*ptr++) << 43;
  values[2] |= static_cast<uint64_t>(*ptr++) << 35;
  values[2] |= static_cast<uint64_t>(*ptr++) << 27;
  values[2] |= *ptr++ << 19;
  values[2] |= *ptr++ << 11;
  values[2] |= *ptr++ << 3;
  values[2] |= *ptr >> 5;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x1f) << 52;
  values[3] |= static_cast<uint64_t>(*ptr++) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 53;
  values[4] |= static_cast<uint64_t>(*ptr++) << 45;
  values[4] |= static_cast<uint64_t>(*ptr++) << 37;
  values[4] |= static_cast<uint64_t>(*ptr++) << 29;
  values[4] |= *ptr++ << 21;
  values[4] |= *ptr++ << 13;
  values[4] |= *ptr++ << 5;
  values[4] |= *ptr >> 3;
  values[5] = static_cast<uint64_t>(*ptr++ & 7) << 54;
  values[5] |= static_cast<uint64_t>(*ptr++) << 46;
  values[5] |= static_cast<uint64_t>(*ptr++) << 38;
  values[5] |= static_cast<uint64_t>(*ptr++) << 30;
  values[5] |= *ptr++ << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = static_cast<uint64_t>(*ptr++ & 3) << 55;
  values[6] |= static_cast<uint64_t>(*ptr++) << 47;
  values[6] |= static_cast<uint64_t>(*ptr++) << 39;
  values[6] |= static_cast<uint64_t>(*ptr++) << 31;
  values[6] |= *ptr++ << 23;
  values[6] |= *ptr++ << 15;
  values[6] |= *ptr++ << 7;
  values[6] |= *ptr >> 1;
  values[7] = static_cast<uint64_t>(*ptr++ & 1) << 56;
  values[7] |= static_cast<uint64_t>(*ptr++) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_58(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 50;
  values[0] |= static_cast<uint64_t>(*ptr++) << 42;
  values[0] |= static_cast<uint64_t>(*ptr++) << 34;
  values[0] |= static_cast<uint64_t>(*ptr++) << 26;
  values[0] |= *ptr++ << 18;
  values[0] |= *ptr++ << 10;
  values[0] |= *ptr++ << 2;
  values[0] |= *ptr >> 6;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x3f) << 52;
  values[1] |= static_cast<uint64_t>(*ptr++) << 44;
  values[1] |= static_cast<uint64_t>(*ptr++) << 36;
  values[1] |= static_cast<uint64_t>(*ptr++) << 28;
  values[1] |= *ptr++ << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 54;
  values[2] |= static_cast<uint64_t>(*ptr++) << 46;
  values[2] |= static_cast<uint64_t>(*ptr++) << 38;
  values[2] |= static_cast<uint64_t>(*ptr++) << 30;
  values[2] |= *ptr++ << 22;
  values[2] |= *ptr++ << 14;
  values[2] |= *ptr++ << 6;
  values[2] |= *ptr >> 2;
  values[3] = static_cast<uint64_t>(*ptr++ & 3) << 56;
  values[3] |= static_cast<uint64_t>(*ptr++) << 48;
  values[3] |= static_cast<uint64_t>(*ptr++) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 50;
  values[4] |= static_cast<uint64_t>(*ptr++) << 42;
  values[4] |= static_cast<uint64_t>(*ptr++) << 34;
  values[4] |= static_cast<uint64_t>(*ptr++) << 26;
  values[4] |= *ptr++ << 18;
  values[4] |= *ptr++ << 10;
  values[4] |= *ptr++ << 2;
  values[4] |= *ptr >> 6;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x3f) << 52;
  values[5] |= static_cast<uint64_t>(*ptr++) << 44;
  values[5] |= static_cast<uint64_t>(*ptr++) << 36;
  values[5] |= static_cast<uint64_t>(*ptr++) << 28;
  values[5] |= *ptr++ << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 54;
  values[6] |= static_cast<uint64_t>(*ptr++) << 46;
  values[6] |= static_cast<uint64_t>(*ptr++) << 38;
  values[6] |= static_cast<uint64_t>(*ptr++) << 30;
  values[6] |= *ptr++ << 22;
  values[6] |= *ptr++ << 14;
  values[6] |= *ptr++ << 6;
  values[6] |= *ptr >> 2;
  values[7] = static_cast<uint64_t>(*ptr++ & 3) << 56;
  values[7] |= static_cast<uint64_t>(*ptr++) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr++;
}
static inline void unpack_bits_59(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 51;
  values[0] |= static_cast<uint64_t>(*ptr++) << 43;
  values[0] |= static_cast<uint64_t>(*ptr++) << 35;
  values[0] |= static_cast<uint64_t>(*ptr++) << 27;
  values[0] |= *ptr++ << 19;
  values[0] |= *ptr++ << 11;
  values[0] |= *ptr++ << 3;
  values[0] |= *ptr >> 5;
  values[1] = static_cast<uint64_t>(*ptr++ & 0x1f) << 54;
  values[1] |= static_cast<uint64_t>(*ptr++) << 46;
  values[1] |= static_cast<uint64_t>(*ptr++) << 38;
  values[1] |= static_cast<uint64_t>(*ptr++) << 30;
  values[1] |= *ptr++ << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 3) << 57;
  values[2] |= static_cast<uint64_t>(*ptr++) << 49;
  values[2] |= static_cast<uint64_t>(*ptr++) << 41;
  values[2] |= static_cast<uint64_t>(*ptr++) << 33;
  values[2] |= static_cast<uint64_t>(*ptr++) << 25;
  values[2] |= *ptr++ << 17;
  values[2] |= *ptr++ << 9;
  values[2] |= *ptr++ << 1;
  values[2] |= *ptr >> 7;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x7f) << 52;
  values[3] |= static_cast<uint64_t>(*ptr++) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 55;
  values[4] |= static_cast<uint64_t>(*ptr++) << 47;
  values[4] |= static_cast<uint64_t>(*ptr++) << 39;
  values[4] |= static_cast<uint64_t>(*ptr++) << 31;
  values[4] |= *ptr++ << 23;
  values[4] |= *ptr++ << 15;
  values[4] |= *ptr++ << 7;
  values[4] |= *ptr >> 1;
  values[5] = static_cast<uint64_t>(*ptr++ & 1) << 58;
  values[5] |= static_cast<uint64_t>(*ptr++) << 50;
  values[5] |= static_cast<uint64_t>(*ptr++) << 42;
  values[5] |= static_cast<uint64_t>(*ptr++) << 34;
  values[5] |= static_cast<uint64_t>(*ptr++) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 53;
  values[6] |= static_cast<uint64_t>(*ptr++) << 45;
  values[6] |= static_cast<uint64_t>(*ptr++) << 37;
  values[6] |= static_cast<uint64_t>(*ptr++) << 29;
  values[6] |= *ptr++ << 21;
  values[6] |= *ptr++ << 13;
  values[6] |= *ptr++ << 5;
  values[6] |= *ptr >> 3;
  values[7] = static_cast<uint64_t>(*ptr++ & 7) << 56;
  values[7] |= static_cast<uint64_t>(*ptr++) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_60(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 52;
  values[0] |= static_cast<uint64_t>(*ptr++) << 44;
  values[0] |= static_cast<uint64_t>(*ptr++) << 36;
  values[0] |= static_cast<uint64_t>(*ptr++) << 28;
  values[0] |= *ptr++ << 20;
  values[0] |= *ptr++ << 12;
  values[0] |= *ptr++ << 4;
  values[0] |= *ptr >> 4;
  values[1] = static_cast<uint64_t>(*ptr++ & 0xf) << 56;
  values[1] |= static_cast<uint64_t>(*ptr++) << 48;
  values[1] |= static_cast<uint64_t>(*ptr++) << 40;
  values[1] |= static_cast<uint64_t>(*ptr++) << 32;
  values[1] |= static_cast<uint64_t>(*ptr++) << 24;
  values[1] |= *ptr++ << 16;
  values[1] |= *ptr++ << 8;
  values[1] |= *ptr++;
  values[2] = static_cast<uint64_t>(*ptr++) << 52;
  values[2] |= static_cast<uint64_t>(*ptr++) << 44;
  values[2] |= static_cast<uint64_t>(*ptr++) << 36;
  values[2] |= static_cast<uint64_t>(*ptr++) << 28;
  values[2] |= *ptr++ << 20;
  values[2] |= *ptr++ << 12;
  values[2] |= *ptr++ << 4;
  values[2] |= *ptr >> 4;
  values[3] = static_cast<uint64_t>(*ptr++ & 0xf) << 56;
  values[3] |= static_cast<uint64_t>(*ptr++) << 48;
  values[3] |= static_cast<uint64_t>(*ptr++) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 52;
  values[4] |= static_cast<uint64_t>(*ptr++) << 44;
  values[4] |= static_cast<uint64_t>(*ptr++) << 36;
  values[4] |= static_cast<uint64_t>(*ptr++) << 28;
  values[4] |= *ptr++ << 20;
  values[4] |= *ptr++ << 12;
  values[4] |= *ptr++ << 4;
  values[4] |= *ptr >> 4;
  values[5] = static_cast<uint64_t>(*ptr++ & 0xf) << 56;
  values[5] |= static_cast<uint64_t>(*ptr++) << 48;
  values[5] |= static_cast<uint64_t>(*ptr++) << 40;
  values[5] |= static_cast<uint64_t>(*ptr++) << 32;
  values[5] |= static_cast<uint64_t>(*ptr++) << 24;
  values[5] |= *ptr++ << 16;
  values[5] |= *ptr++ << 8;
  values[5] |= *ptr++;
  values[6] = static_cast<uint64_t>(*ptr++) << 52;
  values[6] |= static_cast<uint64_t>(*ptr++) << 44;
  values[6] |= static_cast<uint64_t>(*ptr++) << 36;
  values[6] |= static_cast<uint64_t>(*ptr++) << 28;
  values[6] |= *ptr++ << 20;
  values[6] |= *ptr++ << 12;
  values[6] |= *ptr++ << 4;
  values[6] |= *ptr >> 4;
  values[7] = static_cast<uint64_t>(*ptr++ & 0xf) << 56;
  values[7] |= static_cast<uint64_t>(*ptr++) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_61(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 53;
  values[0] |= static_cast<uint64_t>(*ptr++) << 45;
  values[0] |= static_cast<uint64_t>(*ptr++) << 37;
  values[0] |= static_cast<uint64_t>(*ptr++) << 29;
  values[0] |= *ptr++ << 21;
  values[0] |= *ptr++ << 13;
  values[0] |= *ptr++ << 5;
  values[0] |= *ptr >> 3;
  values[1] = static_cast<uint64_t>(*ptr++ & 7) << 58;
  values[1] |= static_cast<uint64_t>(*ptr++) << 50;
  values[1] |= static_cast<uint64_t>(*ptr++) << 42;
  values[1] |= static_cast<uint64_t>(*ptr++) << 34;
  values[1] |= static_cast<uint64_t>(*ptr++) << 26;
  values[1] |= *ptr++ << 18;
  values[1] |= *ptr++ << 10;
  values[1] |= *ptr++ << 2;
  values[1] |= *ptr >> 6;
  values[2] = static_cast<uint64_t>(*ptr++ & 0x3f) << 55;
  values[2] |= static_cast<uint64_t>(*ptr++) << 47;
  values[2] |= static_cast<uint64_t>(*ptr++) << 39;
  values[2] |= static_cast<uint64_t>(*ptr++) << 31;
  values[2] |= *ptr++ << 23;
  values[2] |= *ptr++ << 15;
  values[2] |= *ptr++ << 7;
  values[2] |= *ptr >> 1;
  values[3] = static_cast<uint64_t>(*ptr++ & 1) << 60;
  values[3] |= static_cast<uint64_t>(*ptr++) << 52;
  values[3] |= static_cast<uint64_t>(*ptr++) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 57;
  values[4] |= static_cast<uint64_t>(*ptr++) << 49;
  values[4] |= static_cast<uint64_t>(*ptr++) << 41;
  values[4] |= static_cast<uint64_t>(*ptr++) << 33;
  values[4] |= static_cast<uint64_t>(*ptr++) << 25;
  values[4] |= *ptr++ << 17;
  values[4] |= *ptr++ << 9;
  values[4] |= *ptr++ << 1;
  values[4] |= *ptr >> 7;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x7f) << 54;
  values[5] |= static_cast<uint64_t>(*ptr++) << 46;
  values[5] |= static_cast<uint64_t>(*ptr++) << 38;
  values[5] |= static_cast<uint64_t>(*ptr++) << 30;
  values[5] |= *ptr++ << 22;
  values[5] |= *ptr++ << 14;
  values[5] |= *ptr++ << 6;
  values[5] |= *ptr >> 2;
  values[6] = static_cast<uint64_t>(*ptr++ & 3) << 59;
  values[6] |= static_cast<uint64_t>(*ptr++) << 51;
  values[6] |= static_cast<uint64_t>(*ptr++) << 43;
  values[6] |= static_cast<uint64_t>(*ptr++) << 35;
  values[6] |= static_cast<uint64_t>(*ptr++) << 27;
  values[6] |= *ptr++ << 19;
  values[6] |= *ptr++ << 11;
  values[6] |= *ptr++ << 3;
  values[6] |= *ptr >> 5;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x1f) << 56;
  values[7] |= static_cast<uint64_t>(*ptr++) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_62(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 54;
  values[0] |= static_cast<uint64_t>(*ptr++) << 46;
  values[0] |= static_cast<uint64_t>(*ptr++) << 38;
  values[0] |= static_cast<uint64_t>(*ptr++) << 30;
  values[0] |= *ptr++ << 22;
  values[0] |= *ptr++ << 14;
  values[0] |= *ptr++ << 6;
  values[0] |= *ptr >> 2;
  values[1] = static_cast<uint64_t>(*ptr++ & 3) << 60;
  values[1] |= static_cast<uint64_t>(*ptr++) << 52;
  values[1] |= static_cast<uint64_t>(*ptr++) << 44;
  values[1] |= static_cast<uint64_t>(*ptr++) << 36;
  values[1] |= static_cast<uint64_t>(*ptr++) << 28;
  values[1] |= *ptr++ << 20;
  values[1] |= *ptr++ << 12;
  values[1] |= *ptr++ << 4;
  values[1] |= *ptr >> 4;
  values[2] = static_cast<uint64_t>(*ptr++ & 0xf) << 58;
  values[2] |= static_cast<uint64_t>(*ptr++) << 50;
  values[2] |= static_cast<uint64_t>(*ptr++) << 42;
  values[2] |= static_cast<uint64_t>(*ptr++) << 34;
  values[2] |= static_cast<uint64_t>(*ptr++) << 26;
  values[2] |= *ptr++ << 18;
  values[2] |= *ptr++ << 10;
  values[2] |= *ptr++ << 2;
  values[2] |= *ptr >> 6;
  values[3] = static_cast<uint64_t>(*ptr++ & 0x3f) << 56;
  values[3] |= static_cast<uint64_t>(*ptr++) << 48;
  values[3] |= static_cast<uint64_t>(*ptr++) << 40;
  values[3] |= static_cast<uint64_t>(*ptr++) << 32;
  values[3] |= static_cast<uint64_t>(*ptr++) << 24;
  values[3] |= *ptr++ << 16;
  values[3] |= *ptr++ << 8;
  values[3] |= *ptr++;
  values[4] = static_cast<uint64_t>(*ptr++) << 54;
  values[4] |= static_cast<uint64_t>(*ptr++) << 46;
  values[4] |= static_cast<uint64_t>(*ptr++) << 38;
  values[4] |= static_cast<uint64_t>(*ptr++) << 30;
  values[4] |= *ptr++ << 22;
  values[4] |= *ptr++ << 14;
  values[4] |= *ptr++ << 6;
  values[4] |= *ptr >> 2;
  values[5] = static_cast<uint64_t>(*ptr++ & 3) << 60;
  values[5] |= static_cast<uint64_t>(*ptr++) << 52;
  values[5] |= static_cast<uint64_t>(*ptr++) << 44;
  values[5] |= static_cast<uint64_t>(*ptr++) << 36;
  values[5] |= static_cast<uint64_t>(*ptr++) << 28;
  values[5] |= *ptr++ << 20;
  values[5] |= *ptr++ << 12;
  values[5] |= *ptr++ << 4;
  values[5] |= *ptr >> 4;
  values[6] = static_cast<uint64_t>(*ptr++ & 0xf) << 58;
  values[6] |= static_cast<uint64_t>(*ptr++) << 50;
  values[6] |= static_cast<uint64_t>(*ptr++) << 42;
  values[6] |= static_cast<uint64_t>(*ptr++) << 34;
  values[6] |= static_cast<uint64_t>(*ptr++) << 26;
  values[6] |= *ptr++ << 18;
  values[6] |= *ptr++ << 10;
  values[6] |= *ptr++ << 2;
  values[6] |= *ptr >> 6;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x3f) << 56;
  values[7] |= static_cast<uint64_t>(*ptr++) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void unpack_bits_63(uint64_t* values, const uint8_t* ptr) {
  values[0] = static_cast<uint64_t>(*ptr++) << 55;
  values[0] |= static_cast<uint64_t>(*ptr++) << 47;
  values[0] |= static_cast<uint64_t>(*ptr++) << 39;
  values[0] |= static_cast<uint64_t>(*ptr++) << 31;
  values[0] |= *ptr++ << 23;
  values[0] |= *ptr++ << 15;
  values[0] |= *ptr++ << 7;
  values[0] |= *ptr >> 1;
  values[1] = static_cast<uint64_t>(*ptr++ & 1) << 62;
  values[1] |= static_cast<uint64_t>(*ptr++) << 54;
  values[1] |= static_cast<uint64_t>(*ptr++) << 46;
  values[1] |= static_cast<uint64_t>(*ptr++) << 38;
  values[1] |= static_cast<uint64_t>(*ptr++) << 30;
  values[1] |= *ptr++ << 22;
  values[1] |= *ptr++ << 14;
  values[1] |= *ptr++ << 6;
  values[1] |= *ptr >> 2;
  values[2] = static_cast<uint64_t>(*ptr++ & 3) << 61;
  values[2] |= static_cast<uint64_t>(*ptr++) << 53;
  values[2] |= static_cast<uint64_t>(*ptr++) << 45;
  values[2] |= static_cast<uint64_t>(*ptr++) << 37;
  values[2] |= static_cast<uint64_t>(*ptr++) << 29;
  values[2] |= *ptr++ << 21;
  values[2] |= *ptr++ << 13;
  values[2] |= *ptr++ << 5;
  values[2] |= *ptr >> 3;
  values[3] = static_cast<uint64_t>(*ptr++ & 7) << 60;
  values[3] |= static_cast<uint64_t>(*ptr++) << 52;
  values[3] |= static_cast<uint64_t>(*ptr++) << 44;
  values[3] |= static_cast<uint64_t>(*ptr++) << 36;
  values[3] |= static_cast<uint64_t>(*ptr++) << 28;
  values[3] |= *ptr++ << 20;
  values[3] |= *ptr++ << 12;
  values[3] |= *ptr++ << 4;
  values[3] |= *ptr >> 4;
  values[4] = static_cast<uint64_t>(*ptr++ & 0xf) << 59;
  values[4] |= static_cast<uint64_t>(*ptr++) << 51;
  values[4] |= static_cast<uint64_t>(*ptr++) << 43;
  values[4] |= static_cast<uint64_t>(*ptr++) << 35;
  values[4] |= static_cast<uint64_t>(*ptr++) << 27;
  values[4] |= *ptr++ << 19;
  values[4] |= *ptr++ << 11;
  values[4] |= *ptr++ << 3;
  values[4] |= *ptr >> 5;
  values[5] = static_cast<uint64_t>(*ptr++ & 0x1f) << 58;
  values[5] |= static_cast<uint64_t>(*ptr++) << 50;
  values[5] |= static_cast<uint64_t>(*ptr++) << 42;
  values[5] |= static_cast<uint64_t>(*ptr++) << 34;
  values[5] |= static_cast<uint64_t>(*ptr++) << 26;
  values[5] |= *ptr++ << 18;
  values[5] |= *ptr++ << 10;
  values[5] |= *ptr++ << 2;
  values[5] |= *ptr >> 6;
  values[6] = static_cast<uint64_t>(*ptr++ & 0x3f) << 57;
  values[6] |= static_cast<uint64_t>(*ptr++) << 49;
  values[6] |= static_cast<uint64_t>(*ptr++) << 41;
  values[6] |= static_cast<uint64_t>(*ptr++) << 33;
  values[6] |= static_cast<uint64_t>(*ptr++) << 25;
  values[6] |= *ptr++ << 17;
  values[6] |= *ptr++ << 9;
  values[6] |= *ptr++ << 1;
  values[6] |= *ptr >> 7;
  values[7] = static_cast<uint64_t>(*ptr++ & 0x7f) << 56;
  values[7] |= static_cast<uint64_t>(*ptr++) << 48;
  values[7] |= static_cast<uint64_t>(*ptr++) << 40;
  values[7] |= static_cast<uint64_t>(*ptr++) << 32;
  values[7] |= static_cast<uint64_t>(*ptr++) << 24;
  values[7] |= *ptr++ << 16;
  values[7] |= *ptr++ << 8;
  values[7] |= *ptr;
}
static inline void pack_bits_block8(const uint64_t* values, uint8_t* ptr, uint8_t bits) {
  switch (bits) {
    case 1: pack_bits_1(values, ptr); break;
    case 2: pack_bits_2(values, ptr); break;
    case 3: pack_bits_3(values, ptr); break;
    case 4: pack_bits_4(values, ptr); break;
    case 5: pack_bits_5(values, ptr); break;
    case 6: pack_bits_6(values, ptr); break;
    case 7: pack_bits_7(values, ptr); break;
    case 8: pack_bits_8(values, ptr); break;
    case 9: pack_bits_9(values, ptr); break;
    case 10: pack_bits_10(values, ptr); break;
    case 11: pack_bits_11(values, ptr); break;
    case 12: pack_bits_12(values, ptr); break;
    case 13: pack_bits_13(values, ptr); break;
    case 14: pack_bits_14(values, ptr); break;
    case 15: pack_bits_15(values, ptr); break;
    case 16: pack_bits_16(values, ptr); break;
    case 17: pack_bits_17(values, ptr); break;
    case 18: pack_bits_18(values, ptr); break;
    case 19: pack_bits_19(values, ptr); break;
    case 20: pack_bits_20(values, ptr); break;
    case 21: pack_bits_21(values, ptr); break;
    case 22: pack_bits_22(values, ptr); break;
    case 23: pack_bits_23(values, ptr); break;
    case 24: pack_bits_24(values, ptr); break;
    case 25: pack_bits_25(values, ptr); break;
    case 26: pack_bits_26(values, ptr); break;
    case 27: pack_bits_27(values, ptr); break;
    case 28: pack_bits_28(values, ptr); break;
    case 29: pack_bits_29(values, ptr); break;
    case 30: pack_bits_30(values, ptr); break;
    case 31: pack_bits_31(values, ptr); break;
    case 32: pack_bits_32(values, ptr); break;
    case 33: pack_bits_33(values, ptr); break;
    case 34: pack_bits_34(values, ptr); break;
    case 35: pack_bits_35(values, ptr); break;
    case 36: pack_bits_36(values, ptr); break;
    case 37: pack_bits_37(values, ptr); break;
    case 38: pack_bits_38(values, ptr); break;
    case 39: pack_bits_39(values, ptr); break;
    case 40: pack_bits_40(values, ptr); break;
    case 41: pack_bits_41(values, ptr); break;
    case 42: pack_bits_42(values, ptr); break;
    case 43: pack_bits_43(values, ptr); break;
    case 44: pack_bits_44(values, ptr); break;
    case 45: pack_bits_45(values, ptr); break;
    case 46: pack_bits_46(values, ptr); break;
    case 47: pack_bits_47(values, ptr); break;
    case 48: pack_bits_48(values, ptr); break;
    case 49: pack_bits_49(values, ptr); break;
    case 50: pack_bits_50(values, ptr); break;
    case 51: pack_bits_51(values, ptr); break;
    case 52: pack_bits_52(values, ptr); break;
    case 53: pack_bits_53(values, ptr); break;
    case 54: pack_bits_54(values, ptr); break;
    case 55: pack_bits_55(values, ptr); break;
    case 56: pack_bits_56(values, ptr); break;
    case 57: pack_bits_57(values, ptr); break;
    case 58: pack_bits_58(values, ptr); break;
    case 59: pack_bits_59(values, ptr); break;
    case 60: pack_bits_60(values, ptr); break;
    case 61: pack_bits_61(values, ptr); break;
    case 62: pack_bits_62(values, ptr); break;
    case 63: pack_bits_63(values, ptr); break;
    default: throw std::logic_error("wrong number of bits " + std::to_string(bits));
  }
}
static inline void unpack_bits_block8(uint64_t* values, const uint8_t* ptr, uint8_t bits) {
  switch (bits) {
    case 1: unpack_bits_1(values, ptr); break;
    case 2: unpack_bits_2(values, ptr); break;
    case 3: unpack_bits_3(values, ptr); break;
    case 4: unpack_bits_4(values, ptr); break;
    case 5: unpack_bits_5(values, ptr); break;
    case 6: unpack_bits_6(values, ptr); break;
    case 7: unpack_bits_7(values, ptr); break;
    case 8: unpack_bits_8(values, ptr); break;
    case 9: unpack_bits_9(values, ptr); break;
    case 10: unpack_bits_10(values, ptr); break;
    case 11: unpack_bits_11(values, ptr); break;
    case 12: unpack_bits_12(values, ptr); break;
    case 13: unpack_bits_13(values, ptr); break;
    case 14: unpack_bits_14(values, ptr); break;
    case 15: unpack_bits_15(values, ptr); break;
    case 16: unpack_bits_16(values, ptr); break;
    case 17: unpack_bits_17(values, ptr); break;
    case 18: unpack_bits_18(values, ptr); break;
    case 19: unpack_bits_19(values, ptr); break;
    case 20: unpack_bits_20(values, ptr); break;
    case 21: unpack_bits_21(values, ptr); break;
    case 22: unpack_bits_22(values, ptr); break;
    case 23: unpack_bits_23(values, ptr); break;
    case 24: unpack_bits_24(values, ptr); break;
    case 25: unpack_bits_25(values, ptr); break;
    case 26: unpack_bits_26(values, ptr); break;
    case 27: unpack_bits_27(values, ptr); break;
    case 28: unpack_bits_28(values, ptr); break;
    case 29: unpack_bits_29(values, ptr); break;
    case 30: unpack_bits_30(values, ptr); break;
    case 31: unpack_bits_31(values, ptr); break;
    case 32: unpack_bits_32(values, ptr); break;
    case 33: unpack_bits_33(values, ptr); break;
    case 34: unpack_bits_34(values, ptr); break;
    case 35: unpack_bits_35(values, ptr); break;
    case 36: unpack_bits_36(values, ptr); break;
    case 37: unpack_bits_37(values, ptr); break;
    case 38: unpack_bits_38(values, ptr); break;
    case 39: unpack_bits_39(values, ptr); break;
    case 40: unpack_bits_40(values, ptr); break;
    case 41: unpack_bits_41(values, ptr); break;
    case 42: unpack_bits_42(values, ptr); break;
    case 43: unpack_bits_43(values, ptr); break;
    case 44: unpack_bits_44(values, ptr); break;
    case 45: unpack_bits_45(values, ptr); break;
    case 46: unpack_bits_46(values, ptr); break;
    case 47: unpack_bits_47(values, ptr); break;
    case 48: unpack_bits_48(values, ptr); break;
    case 49: unpack_bits_49(values, ptr); break;
    case 50: unpack_bits_50(values, ptr); break;
    case 51: unpack_bits_51(values, ptr); break;
    case 52: unpack_bits_52(values, ptr); break;
    case 53: unpack_bits_53(values, ptr); break;
    case 54: unpack_bits_54(values, ptr); break;
    case 55: unpack_bits_55(values, ptr); break;
    case 56: unpack_bits_56(values, ptr); break;
    case 57: unpack_bits_57(values, ptr); break;
    case 58: unpack_bits_58(values, ptr); break;
    case 59: unpack_bits_59(values, ptr); break;
    case 60: unpack_bits_60(values, ptr); break;
    case 61: unpack_bits_61(values, ptr); break;
    case 62: unpack_bits_62(values, ptr); break;
    case 63: unpack_bits_63(values, ptr); break;
    default: throw std::logic_error("wrong number of bits " + std::to_string(bits));
  }
}
} // namespace
#endif // BIT_PACKING_HPP_