avoid warnings
diff --git a/common/include/quantiles_sorted_view_impl.hpp b/common/include/quantiles_sorted_view_impl.hpp
index 326301e..d57cd53 100755
--- a/common/include/quantiles_sorted_view_impl.hpp
+++ b/common/include/quantiles_sorted_view_impl.hpp
@@ -75,7 +75,7 @@
 template<typename T, typename C, typename A>
 auto quantiles_sorted_view<T, C, A>::get_quantile(double rank, bool inclusive) const -> quantile_return_type {
   if (entries_.empty()) throw std::runtime_error("operation is undefined for an empty sketch");
-  uint64_t weight = inclusive ? std::ceil(rank * total_weight_) : rank * total_weight_;
+  uint64_t weight = static_cast<uint64_t>(inclusive ? std::ceil(rank * total_weight_) : rank * total_weight_);
   auto it = inclusive ?
       std::lower_bound(entries_.begin(), entries_.end(), make_dummy_entry<T>(weight), compare_pairs_by_second())
     : std::upper_bound(entries_.begin(), entries_.end(), make_dummy_entry<T>(weight), compare_pairs_by_second());
diff --git a/kll/include/kll_sketch_impl.hpp b/kll/include/kll_sketch_impl.hpp
index cced0ca..156058d 100644
--- a/kll/include/kll_sketch_impl.hpp
+++ b/kll/include/kll_sketch_impl.hpp
@@ -192,7 +192,7 @@
 template<typename FwdT>
 void kll_sketch<T, C, A>::update(FwdT&& item) {
   if (!check_update_item(item)) { return; }
-  update_min_max(item);
+  update_min_max(static_cast<const T&>(item)); // min and max are always copies
   const uint32_t index = internal_update();
   new (&items_[index]) T(std::forward<FwdT>(item));
   reset_sorted_view();
@@ -820,7 +820,7 @@
   for (uint8_t level = 0; level < num_levels_; ++level) {
     const auto from = items_ + levels_[level];
     const auto to = items_ + levels_[level + 1]; // exclusive
-    view.add(from, to, 1 << level);
+    view.add(from, to, 1ULL << level);
   }
   view.convert_to_cummulative();
   return view;
diff --git a/theta/include/bit_packing.hpp b/theta/include/bit_packing.hpp
index d9ad42c..8515788 100644
--- a/theta/include/bit_packing.hpp
+++ b/theta/include/bit_packing.hpp
@@ -36,11 +36,11 @@
     bits -= chunk_bits;
   }
   while (bits >= 8) {
-    *ptr++ = value >> (bits - 8);
+    *ptr++ = static_cast<uint8_t>(value >> (bits - 8));
     bits -= 8;
   }
   if (bits > 0) {
-    *ptr = value << (8 - bits);
+    *ptr = static_cast<uint8_t>(value << (8 - bits));
     return bits;
   }
   return 0;
@@ -73,3146 +73,3146 @@
 // this assumption allows to avoid masking operations
 
 static inline void pack_bits_1(const uint64_t* values, uint8_t* ptr) {
-  *ptr = values[0] << 7;
-  *ptr |= values[1] << 6;
-  *ptr |= values[2] << 5;
-  *ptr |= values[3] << 4;
-  *ptr |= values[4] << 3;
-  *ptr |= values[5] << 2;
-  *ptr |= values[6] << 1;
-  *ptr |= values[7];
+  *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 = values[0] << 6;
-  *ptr |= values[1] << 4;
-  *ptr |= values[2] << 2;
-  *ptr++ |= values[3];
+  *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 = values[4] << 6;
-  *ptr |= values[5] << 4;
-  *ptr |= values[6] << 2;
-  *ptr |= values[7];
+  *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 = values[0] << 5;
-  *ptr |= values[1] << 2;
-  *ptr++ |= values[2] >> 1;
+  *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 = values[2] << 7;
-  *ptr |= values[3] << 4;
-  *ptr |= values[4] << 1;
-  *ptr++ |= values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr |= values[6] << 3;
-  *ptr |= values[7];
+  *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 = values[0] << 4;
-  *ptr++ |= values[1];
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1]);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3]);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5];
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5]);
 
-  *ptr = values[6] << 4;
-  *ptr |= values[7];
+  *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 = values[0] << 3;
-  *ptr++ |= values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr |= values[2] << 1;
-  *ptr++ |= values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 1;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr |= values[5] << 2;
-  *ptr++ |= values[6] >> 3;
+  *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 = values[6] << 5;
-  *ptr |= values[7];
+  *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 = values[0] << 2;
-  *ptr++ |= values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 2;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3];
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3]);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 2;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr |= values[7];
+  *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 = values[0] << 1;
-  *ptr++ |= values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 5;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 3;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 2;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 1;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr |= values[7];
+  *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++ = 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_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++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 2;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 3;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 5;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 7;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_10(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 4;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 6;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 8;
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 4;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 6;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_11(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 6;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 9;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 9);
 
-  *ptr++ = values[2] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 4;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 7;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 10;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 5;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_12(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
 
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 8;
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 8);
 
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 8;
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 8;
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 8);
 
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
 
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_13(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 10;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 7;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 12;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] >> 4;
-  *ptr++ |= values[4] >> 9;
+  *ptr = static_cast<uint8_t>(values[3] >> 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 9);
 
-  *ptr++ = values[4] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 6;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 11;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 11);
 
-  *ptr++ = values[6] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_14(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
 
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 12;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 12);
 
-  *ptr++ = values[1] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 10;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 10);
 
-  *ptr++ = values[2] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3] >> 8;
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 12;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 12);
 
-  *ptr++ = values[5] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 10;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 10);
 
-  *ptr++ = values[6] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_15(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
 
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 14;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 14);
 
-  *ptr++ = values[1] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 13;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 13);
 
-  *ptr++ = values[2] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 12;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 11;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 11);
 
-  *ptr++ = values[4] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 10;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 9;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 9);
 
-  *ptr++ = values[6] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr++ |= values[7] >> 8;
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_16(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[0]);
 
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[2]);
 
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[4]);
 
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[6]);
 
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
 
-  *ptr++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 10;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 11;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 11);
 
-  *ptr++ = values[2] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 12;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 13;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 13);
 
-  *ptr++ = values[4] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 14;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 14);
 
-  *ptr++ = values[5] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 15;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 15);
 
-  *ptr++ = values[6] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_18(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
 
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 12;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 12);
 
-  *ptr++ = values[1] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 14;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 14);
 
-  *ptr++ = values[2] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 16;
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 16);
 
-  *ptr++ = values[3] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
 
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 12;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 12);
 
-  *ptr++ = values[5] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 14;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 14);
 
-  *ptr++ = values[6] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_19(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
 
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 14;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 14);
 
-  *ptr++ = values[1] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 17;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 17);
 
-  *ptr++ = values[2] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
 
-  *ptr++ = values[2] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 12;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 15;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 15);
 
-  *ptr++ |= values[4] >> 7;
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 18;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 18);
 
-  *ptr++ = values[5] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 13;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 13);
 
-  *ptr++ = values[6] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_20(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 12);
 
-  *ptr++ = values[0] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 4);
 
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 16;
+  *ptr = static_cast<uint8_t>(values[0] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 16);
 
-  *ptr++ = values[1] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
 
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 12);
 
-  *ptr++ = values[2] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 4);
 
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 16;
+  *ptr = static_cast<uint8_t>(values[2] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 16);
 
-  *ptr++ = values[3] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 12);
 
-  *ptr++ = values[4] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 4);
 
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 16;
+  *ptr = static_cast<uint8_t>(values[4] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 16);
 
-  *ptr++ = values[5] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
 
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 12);
 
-  *ptr++ = values[6] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 4);
 
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_21(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
 
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 18;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 18);
 
-  *ptr++ = values[1] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 15;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 15);
 
-  *ptr++ = values[2] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 20;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 17;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 17);
 
-  *ptr++ = values[4] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
 
-  *ptr++ = values[4] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 14;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 14);
 
-  *ptr++ = values[5] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 19;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 19);
 
-  *ptr++ = values[6] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
 
-  *ptr++ = values[6] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_22(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 14);
 
-  *ptr++ = values[0] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 6);
 
-  *ptr = values[0] << 2;
-  *ptr++ |= values[1] >> 20;
+  *ptr = static_cast<uint8_t>(values[0] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 20);
 
-  *ptr++ = values[1] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
 
-  *ptr++ = values[1] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 18;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 18);
 
-  *ptr++ = values[2] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 10);
 
-  *ptr++ = values[2] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 2);
 
-  *ptr = values[2] << 6;
-  *ptr++ |= values[3] >> 16;
+  *ptr = static_cast<uint8_t>(values[2] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 16);
 
-  *ptr++ = values[3] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 14);
 
-  *ptr++ = values[4] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 6);
 
-  *ptr = values[4] << 2;
-  *ptr++ |= values[5] >> 20;
+  *ptr = static_cast<uint8_t>(values[4] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 20);
 
-  *ptr++ = values[5] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
 
-  *ptr++ = values[5] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 18;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 18);
 
-  *ptr++ = values[6] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 10);
 
-  *ptr++ = values[6] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 2);
 
-  *ptr = values[6] << 6;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_23(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 15;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 15);
 
-  *ptr++ = values[0] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 7);
 
-  *ptr = values[0] << 1;
-  *ptr++ |= values[1] >> 22;
+  *ptr = static_cast<uint8_t>(values[0] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 22);
 
-  *ptr++ = values[1] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
 
-  *ptr++ = values[1] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 21;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 21);
 
-  *ptr++ = values[2] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 13);
 
-  *ptr++ = values[2] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 5);
 
-  *ptr = values[2] << 3;
-  *ptr++ |= values[3] >> 20;
+  *ptr = static_cast<uint8_t>(values[2] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 19;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 19);
 
-  *ptr++ = values[4] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 11);
 
-  *ptr++ = values[4] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 3);
 
-  *ptr = values[4] << 5;
-  *ptr++ |= values[5] >> 18;
+  *ptr = static_cast<uint8_t>(values[4] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 18);
 
-  *ptr++ = values[5] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 17;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 17);
 
-  *ptr++ = values[6] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 9);
 
-  *ptr++ = values[6] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 1);
 
-  *ptr = values[6] << 7;
-  *ptr++ |= values[7] >> 16;
+  *ptr = static_cast<uint8_t>(values[6] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_24(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *ptr++ = static_cast<uint8_t>(values[0] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[0] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[0]);
 
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *ptr++ = static_cast<uint8_t>(values[1] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[1] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[1]);
 
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *ptr++ = static_cast<uint8_t>(values[2] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[2] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[2]);
 
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *ptr++ = static_cast<uint8_t>(values[4] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[4] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[4]);
 
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *ptr++ = static_cast<uint8_t>(values[5] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[5] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[5]);
 
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *ptr++ = static_cast<uint8_t>(values[6] >> 16);
+  *ptr++ = static_cast<uint8_t>(values[6] >> 8);
+  *ptr++ = static_cast<uint8_t>(values[6]);
 
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[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_25(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 17;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 17);
 
-  *ptr++ = values[0] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 9);
 
-  *ptr++ = values[0] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 1);
 
-  *ptr = values[0] << 7;
-  *ptr++ |= values[1] >> 18;
+  *ptr = static_cast<uint8_t>(values[0] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 18);
 
-  *ptr++ = values[1] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 19;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 19);
 
-  *ptr++ = values[2] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 11);
 
-  *ptr++ = values[2] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 3);
 
-  *ptr = values[2] << 5;
-  *ptr++ |= values[3] >> 20;
+  *ptr = static_cast<uint8_t>(values[2] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 21;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 21);
 
-  *ptr++ = values[4] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 13);
 
-  *ptr++ = values[4] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 5);
 
-  *ptr = values[4] << 3;
-  *ptr++ |= values[5] >> 22;
+  *ptr = static_cast<uint8_t>(values[4] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 22);
 
-  *ptr++ = values[5] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
 
-  *ptr++ = values[5] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 23;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 23);
 
-  *ptr++ = values[6] >> 15;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 15);
 
-  *ptr++ = values[6] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 7);
 
-  *ptr = values[6] << 1;
-  *ptr++ |= values[7] >> 24;
+  *ptr = static_cast<uint8_t>(values[6] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
 
-  *ptr++ = values[7] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_26(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 18;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 18);
 
-  *ptr++ = values[0] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 10);
 
-  *ptr++ = values[0] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 2);
 
-  *ptr = values[0] << 6;
-  *ptr++ |= values[1] >> 20;
+  *ptr = static_cast<uint8_t>(values[0] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 20);
 
-  *ptr++ = values[1] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 12);
 
-  *ptr++ = values[1] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 4);
 
-  *ptr = values[1] << 4;
-  *ptr++ |= values[2] >> 22;
+  *ptr = static_cast<uint8_t>(values[1] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 22);
 
-  *ptr++ = values[2] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 14);
 
-  *ptr++ = values[2] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 6);
 
-  *ptr = values[2] << 2;
-  *ptr++ |= values[3] >> 24;
+  *ptr = static_cast<uint8_t>(values[2] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 24);
 
-  *ptr++ = values[3] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 16);
 
-  *ptr++ = values[3] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 8);
 
-  *ptr++ = values[3];
+  *ptr++ = static_cast<uint8_t>(values[3]);
 
-  *ptr++ = values[4] >> 18;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 18);
 
-  *ptr++ = values[4] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 10);
 
-  *ptr++ = values[4] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 2);
 
-  *ptr = values[4] << 6;
-  *ptr++ |= values[5] >> 20;
+  *ptr = static_cast<uint8_t>(values[4] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 20);
 
-  *ptr++ = values[5] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 12);
 
-  *ptr++ = values[5] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 4);
 
-  *ptr = values[5] << 4;
-  *ptr++ |= values[6] >> 22;
+  *ptr = static_cast<uint8_t>(values[5] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 22);
 
-  *ptr++ = values[6] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 14);
 
-  *ptr++ = values[6] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 6);
 
-  *ptr = values[6] << 2;
-  *ptr++ |= values[7] >> 24;
+  *ptr = static_cast<uint8_t>(values[6] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
 
-  *ptr++ = values[7] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_27(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 19;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 19);
 
-  *ptr++ = values[0] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 11);
 
-  *ptr++ = values[0] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 3);
 
-  *ptr = values[0] << 5;
-  *ptr++ |= values[1] >> 22;
+  *ptr = static_cast<uint8_t>(values[0] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 22);
 
-  *ptr++ = values[1] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 14);
 
-  *ptr++ = values[1] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 6);
 
-  *ptr = values[1] << 2;
-  *ptr++ |= values[2] >> 25;
+  *ptr = static_cast<uint8_t>(values[1] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 25);
 
-  *ptr++ = values[2] >> 17;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 17);
 
-  *ptr++ = values[2] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 9);
 
-  *ptr++ = values[2] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 1);
 
-  *ptr = values[2] << 7;
-  *ptr++ |= values[3] >> 20;
+  *ptr = static_cast<uint8_t>(values[2] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 23;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 23);
 
-  *ptr++ = values[4] >> 15;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 15);
 
-  *ptr++ = values[4] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 7);
 
-  *ptr = values[4] << 1;
-  *ptr++ |= values[5] >> 26;
+  *ptr = static_cast<uint8_t>(values[4] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 26);
 
-  *ptr++ = values[5] >> 18;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 18);
 
-  *ptr++ = values[5] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 10);
 
-  *ptr++ = values[5] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 2);
 
-  *ptr = values[5] << 6;
-  *ptr++ |= values[6] >> 21;
+  *ptr = static_cast<uint8_t>(values[5] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 21);
 
-  *ptr++ = values[6] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 13);
 
-  *ptr++ = values[6] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 5);
 
-  *ptr = values[6] << 3;
-  *ptr++ |= values[7] >> 24;
+  *ptr = static_cast<uint8_t>(values[6] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
 
-  *ptr++ = values[7] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_28(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
-  *ptr = values[0] << 4;
-  *ptr++ |= values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
-  *ptr = values[2] << 4;
-  *ptr++ |= values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
-  *ptr = values[4] << 4;
-  *ptr++ |= values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
-  *ptr = values[6] << 4;
-  *ptr++ |= values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 21;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 21);
 
-  *ptr++ = values[0] >> 13;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 13);
 
-  *ptr++ = values[0] >> 5;
+  *ptr++ = static_cast<uint8_t>(values[0] >> 5);
 
-  *ptr = values[0] << 3;
-  *ptr++ |= values[1] >> 26;
+  *ptr = static_cast<uint8_t>(values[0] << 3);
+  *ptr++ |= static_cast<uint8_t>(values[1] >> 26);
 
-  *ptr++ = values[1] >> 18;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 18);
 
-  *ptr++ = values[1] >> 10;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 10);
 
-  *ptr++ = values[1] >> 2;
+  *ptr++ = static_cast<uint8_t>(values[1] >> 2);
 
-  *ptr = values[1] << 6;
-  *ptr++ |= values[2] >> 23;
+  *ptr = static_cast<uint8_t>(values[1] << 6);
+  *ptr++ |= static_cast<uint8_t>(values[2] >> 23);
 
-  *ptr++ = values[2] >> 15;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 15);
 
-  *ptr++ = values[2] >> 7;
+  *ptr++ = static_cast<uint8_t>(values[2] >> 7);
 
-  *ptr = values[2] << 1;
-  *ptr++ |= values[3] >> 28;
+  *ptr = static_cast<uint8_t>(values[2] << 1);
+  *ptr++ |= static_cast<uint8_t>(values[3] >> 28);
 
-  *ptr++ = values[3] >> 20;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 20);
 
-  *ptr++ = values[3] >> 12;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 12);
 
-  *ptr++ = values[3] >> 4;
+  *ptr++ = static_cast<uint8_t>(values[3] >> 4);
 
-  *ptr = values[3] << 4;
-  *ptr++ |= values[4] >> 25;
+  *ptr = static_cast<uint8_t>(values[3] << 4);
+  *ptr++ |= static_cast<uint8_t>(values[4] >> 25);
 
-  *ptr++ = values[4] >> 17;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 17);
 
-  *ptr++ = values[4] >> 9;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 9);
 
-  *ptr++ = values[4] >> 1;
+  *ptr++ = static_cast<uint8_t>(values[4] >> 1);
 
-  *ptr = values[4] << 7;
-  *ptr++ |= values[5] >> 22;
+  *ptr = static_cast<uint8_t>(values[4] << 7);
+  *ptr++ |= static_cast<uint8_t>(values[5] >> 22);
 
-  *ptr++ = values[5] >> 14;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 14);
 
-  *ptr++ = values[5] >> 6;
+  *ptr++ = static_cast<uint8_t>(values[5] >> 6);
 
-  *ptr = values[5] << 2;
-  *ptr++ |= values[6] >> 27;
+  *ptr = static_cast<uint8_t>(values[5] << 2);
+  *ptr++ |= static_cast<uint8_t>(values[6] >> 27);
 
-  *ptr++ = values[6] >> 19;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 19);
 
-  *ptr++ = values[6] >> 11;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 11);
 
-  *ptr++ = values[6] >> 3;
+  *ptr++ = static_cast<uint8_t>(values[6] >> 3);
 
-  *ptr = values[6] << 5;
-  *ptr++ |= values[7] >> 24;
+  *ptr = static_cast<uint8_t>(values[6] << 5);
+  *ptr++ |= static_cast<uint8_t>(values[7] >> 24);
 
-  *ptr++ = values[7] >> 16;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 16);
 
-  *ptr++ = values[7] >> 8;
+  *ptr++ = static_cast<uint8_t>(values[7] >> 8);
 
-  *ptr = values[7];
+  *ptr = static_cast<uint8_t>(values[7]);
 }
 
 static inline void pack_bits_30(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *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 = values[0] << 2;
-  *ptr++ |= values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *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 = values[1] << 4;
-  *ptr++ |= values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *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 = values[2] << 6;
-  *ptr++ |= values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *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 = values[4] << 2;
-  *ptr++ |= values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *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 = values[5] << 4;
-  *ptr++ |= values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *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 = values[6] << 6;
-  *ptr++ |= values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *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 = values[0] << 1;
-  *ptr++ |= values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *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 = values[1] << 2;
-  *ptr++ |= values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *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 = values[2] << 3;
-  *ptr++ |= values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *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 = values[4] << 5;
-  *ptr++ |= values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr++ |= values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *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 = values[6] << 7;
-  *ptr++ |= values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 24;
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *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++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *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++ = values[2] >> 24;
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *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++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 24;
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *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++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *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++ = values[6] >> 24;
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *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++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[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_33(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 25;
-  *ptr++ = values[0] >> 17;
-  *ptr++ = values[0] >> 9;
-  *ptr++ = values[0] >> 1;
+  *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 = values[0] << 7;
-  *ptr++ |= values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *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 = values[1] << 6;
-  *ptr++ |= values[2] >> 27;
-  *ptr++ = values[2] >> 19;
-  *ptr++ = values[2] >> 11;
-  *ptr++ = values[2] >> 3;
+  *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 = values[2] << 5;
-  *ptr++ |= values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 29;
-  *ptr++ = values[4] >> 21;
-  *ptr++ = values[4] >> 13;
-  *ptr++ = values[4] >> 5;
+  *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 = values[4] << 3;
-  *ptr++ |= values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *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 = values[5] << 2;
-  *ptr++ |= values[6] >> 31;
-  *ptr++ = values[6] >> 23;
-  *ptr++ = values[6] >> 15;
-  *ptr++ = values[6] >> 7;
+  *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 = values[6] << 1;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[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++ = values[0] >> 26;
-  *ptr++ = values[0] >> 18;
-  *ptr++ = values[0] >> 10;
-  *ptr++ = values[0] >> 2;
+  *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 = values[0] << 6;
-  *ptr++ |= values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *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 = values[1] << 4;
-  *ptr++ |= values[2] >> 30;
-  *ptr++ = values[2] >> 22;
-  *ptr++ = values[2] >> 14;
-  *ptr++ = values[2] >> 6;
+  *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 = values[2] << 2;
-  *ptr++ |= values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 26;
-  *ptr++ = values[4] >> 18;
-  *ptr++ = values[4] >> 10;
-  *ptr++ = values[4] >> 2;
+  *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 = values[4] << 6;
-  *ptr++ |= values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *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 = values[5] << 4;
-  *ptr++ |= values[6] >> 30;
-  *ptr++ = values[6] >> 22;
-  *ptr++ = values[6] >> 14;
-  *ptr++ = values[6] >> 6;
+  *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 = values[6] << 2;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 27;
-  *ptr++ = values[0] >> 19;
-  *ptr++ = values[0] >> 11;
-  *ptr++ = values[0] >> 3;
+  *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 = values[0] << 5;
-  *ptr++ |= values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *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 = values[1] << 2;
-  *ptr++ |= values[2] >> 33;
-  *ptr++ = values[2] >> 25;
-  *ptr++ = values[2] >> 17;
-  *ptr++ = values[2] >> 9;
-  *ptr++ = values[2] >> 1;
+  *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 = values[2] << 7;
-  *ptr++ |= values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 31;
-  *ptr++ = values[4] >> 23;
-  *ptr++ = values[4] >> 15;
-  *ptr++ = values[4] >> 7;
+  *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 = values[4] << 1;
-  *ptr++ |= values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr++ |= values[6] >> 29;
-  *ptr++ = values[6] >> 21;
-  *ptr++ = values[6] >> 13;
-  *ptr++ = values[6] >> 5;
+  *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 = values[6] << 3;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 28;
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
+  *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 = values[0] << 4;
-  *ptr++ |= values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *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++ = values[2] >> 28;
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
+  *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 = values[2] << 4;
-  *ptr++ |= values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 28;
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
+  *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 = values[4] << 4;
-  *ptr++ |= values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *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++ = values[6] >> 28;
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
+  *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 = values[6] << 4;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 29;
-  *ptr++ = values[0] >> 21;
-  *ptr++ = values[0] >> 13;
-  *ptr++ = values[0] >> 5;
+  *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 = values[0] << 3;
-  *ptr++ |= values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *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 = values[1] << 6;
-  *ptr++ |= values[2] >> 31;
-  *ptr++ = values[2] >> 23;
-  *ptr++ = values[2] >> 15;
-  *ptr++ = values[2] >> 7;
+  *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 = values[2] << 1;
-  *ptr++ |= values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 33;
-  *ptr++ = values[4] >> 25;
-  *ptr++ = values[4] >> 17;
-  *ptr++ = values[4] >> 9;
-  *ptr++ = values[4] >> 1;
+  *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 = values[4] << 7;
-  *ptr++ |= values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *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 = values[5] << 2;
-  *ptr++ |= values[6] >> 35;
-  *ptr++ = values[6] >> 27;
-  *ptr++ = values[6] >> 19;
-  *ptr++ = values[6] >> 11;
-  *ptr++ = values[6] >> 3;
+  *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 = values[6] << 5;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 30;
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *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 = values[0] << 2;
-  *ptr++ |= values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *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 = values[1] << 4;
-  *ptr++ |= values[2] >> 34;
-  *ptr++ = values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *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 = values[2] << 6;
-  *ptr++ |= values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 30;
-  *ptr++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *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 = values[4] << 2;
-  *ptr++ |= values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *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 = values[5] << 4;
-  *ptr++ |= values[6] >> 34;
-  *ptr++ = values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *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 = values[6] << 6;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 31;
-  *ptr++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *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 = values[0] << 1;
-  *ptr++ |= values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *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 = values[1] << 2;
-  *ptr++ |= values[2] >> 37;
-  *ptr++ = values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *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 = values[2] << 3;
-  *ptr++ |= values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 35;
-  *ptr++ = values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *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 = values[4] << 5;
-  *ptr++ |= values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr++ |= values[6] >> 33;
-  *ptr++ = values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *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 = values[6] << 7;
-  *ptr++ |= values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 32;
-  *ptr++ = values[0] >> 24;
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *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++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *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++ = values[2] >> 32;
-  *ptr++ = values[2] >> 24;
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *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++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 32;
-  *ptr++ = values[4] >> 24;
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *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++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *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++ = values[6] >> 32;
-  *ptr++ = values[6] >> 24;
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *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++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[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_41(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 33;
-  *ptr++ = values[0] >> 25;
-  *ptr++ = values[0] >> 17;
-  *ptr++ = values[0] >> 9;
-  *ptr++ = values[0] >> 1;
+  *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 = values[0] << 7;
-  *ptr++ |= values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *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 = values[1] << 6;
-  *ptr++ |= values[2] >> 35;
-  *ptr++ = values[2] >> 27;
-  *ptr++ = values[2] >> 19;
-  *ptr++ = values[2] >> 11;
-  *ptr++ = values[2] >> 3;
+  *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 = values[2] << 5;
-  *ptr++ |= values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 37;
-  *ptr++ = values[4] >> 29;
-  *ptr++ = values[4] >> 21;
-  *ptr++ = values[4] >> 13;
-  *ptr++ = values[4] >> 5;
+  *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 = values[4] << 3;
-  *ptr++ |= values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *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 = values[5] << 2;
-  *ptr++ |= values[6] >> 39;
-  *ptr++ = values[6] >> 31;
-  *ptr++ = values[6] >> 23;
-  *ptr++ = values[6] >> 15;
-  *ptr++ = values[6] >> 7;
+  *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 = values[6] << 1;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[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++ = values[0] >> 34;
-  *ptr++ = values[0] >> 26;
-  *ptr++ = values[0] >> 18;
-  *ptr++ = values[0] >> 10;
-  *ptr++ = values[0] >> 2;
+  *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 = values[0] << 6;
-  *ptr++ |= values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *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 = values[1] << 4;
-  *ptr++ |= values[2] >> 38;
-  *ptr++ = values[2] >> 30;
-  *ptr++ = values[2] >> 22;
-  *ptr++ = values[2] >> 14;
-  *ptr++ = values[2] >> 6;
+  *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 = values[2] << 2;
-  *ptr++ |= values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 34;
-  *ptr++ = values[4] >> 26;
-  *ptr++ = values[4] >> 18;
-  *ptr++ = values[4] >> 10;
-  *ptr++ = values[4] >> 2;
+  *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 = values[4] << 6;
-  *ptr++ |= values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *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 = values[5] << 4;
-  *ptr++ |= values[6] >> 38;
-  *ptr++ = values[6] >> 30;
-  *ptr++ = values[6] >> 22;
-  *ptr++ = values[6] >> 14;
-  *ptr++ = values[6] >> 6;
+  *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 = values[6] << 2;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 35;
-  *ptr++ = values[0] >> 27;
-  *ptr++ = values[0] >> 19;
-  *ptr++ = values[0] >> 11;
-  *ptr++ = values[0] >> 3;
+  *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 = values[0] << 5;
-  *ptr++ |= values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *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 = values[1] << 2;
-  *ptr++ |= values[2] >> 41;
-  *ptr++ = values[2] >> 33;
-  *ptr++ = values[2] >> 25;
-  *ptr++ = values[2] >> 17;
-  *ptr++ = values[2] >> 9;
-  *ptr++ = values[2] >> 1;
+  *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 = values[2] << 7;
-  *ptr++ |= values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 39;
-  *ptr++ = values[4] >> 31;
-  *ptr++ = values[4] >> 23;
-  *ptr++ = values[4] >> 15;
-  *ptr++ = values[4] >> 7;
+  *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 = values[4] << 1;
-  *ptr++ |= values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr++ |= values[6] >> 37;
-  *ptr++ = values[6] >> 29;
-  *ptr++ = values[6] >> 21;
-  *ptr++ = values[6] >> 13;
-  *ptr++ = values[6] >> 5;
+  *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 = values[6] << 3;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 36;
-  *ptr++ = values[0] >> 28;
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
+  *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 = values[0] << 4;
-  *ptr++ |= values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *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++ = values[2] >> 36;
-  *ptr++ = values[2] >> 28;
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
+  *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 = values[2] << 4;
-  *ptr++ |= values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 36;
-  *ptr++ = values[4] >> 28;
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
+  *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 = values[4] << 4;
-  *ptr++ |= values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *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++ = values[6] >> 36;
-  *ptr++ = values[6] >> 28;
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
+  *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 = values[6] << 4;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 37;
-  *ptr++ = values[0] >> 29;
-  *ptr++ = values[0] >> 21;
-  *ptr++ = values[0] >> 13;
-  *ptr++ = values[0] >> 5;
+  *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 = values[0] << 3;
-  *ptr++ |= values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *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 = values[1] << 6;
-  *ptr++ |= values[2] >> 39;
-  *ptr++ = values[2] >> 31;
-  *ptr++ = values[2] >> 23;
-  *ptr++ = values[2] >> 15;
-  *ptr++ = values[2] >> 7;
+  *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 = values[2] << 1;
-  *ptr++ |= values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 41;
-  *ptr++ = values[4] >> 33;
-  *ptr++ = values[4] >> 25;
-  *ptr++ = values[4] >> 17;
-  *ptr++ = values[4] >> 9;
-  *ptr++ = values[4] >> 1;
+  *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 = values[4] << 7;
-  *ptr++ |= values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *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 = values[5] << 2;
-  *ptr++ |= values[6] >> 43;
-  *ptr++ = values[6] >> 35;
-  *ptr++ = values[6] >> 27;
-  *ptr++ = values[6] >> 19;
-  *ptr++ = values[6] >> 11;
-  *ptr++ = values[6] >> 3;
+  *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 = values[6] << 5;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 38;
-  *ptr++ = values[0] >> 30;
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *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 = values[0] << 2;
-  *ptr++ |= values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *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 = values[1] << 4;
-  *ptr++ |= values[2] >> 42;
-  *ptr++ = values[2] >> 34;
-  *ptr++ = values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *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 = values[2] << 6;
-  *ptr++ |= values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 38;
-  *ptr++ = values[4] >> 30;
-  *ptr++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *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 = values[4] << 2;
-  *ptr++ |= values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *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 = values[5] << 4;
-  *ptr++ |= values[6] >> 42;
-  *ptr++ = values[6] >> 34;
-  *ptr++ = values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *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 = values[6] << 6;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 39;
-  *ptr++ = values[0] >> 31;
-  *ptr++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *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 = values[0] << 1;
-  *ptr++ |= values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *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 = values[1] << 2;
-  *ptr++ |= values[2] >> 45;
-  *ptr++ = values[2] >> 37;
-  *ptr++ = values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *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 = values[2] << 3;
-  *ptr++ |= values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 43;
-  *ptr++ = values[4] >> 35;
-  *ptr++ = values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *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 = values[4] << 5;
-  *ptr++ |= values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr++ |= values[6] >> 41;
-  *ptr++ = values[6] >> 33;
-  *ptr++ = values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *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 = values[6] << 7;
-  *ptr++ |= values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 40;
-  *ptr++ = values[0] >> 32;
-  *ptr++ = values[0] >> 24;
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *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++ = values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *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++ = values[2] >> 40;
-  *ptr++ = values[2] >> 32;
-  *ptr++ = values[2] >> 24;
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *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++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 40;
-  *ptr++ = values[4] >> 32;
-  *ptr++ = values[4] >> 24;
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *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++ = values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *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++ = values[6] >> 40;
-  *ptr++ = values[6] >> 32;
-  *ptr++ = values[6] >> 24;
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *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++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[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_49(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 41;
-  *ptr++ = values[0] >> 33;
-  *ptr++ = values[0] >> 25;
-  *ptr++ = values[0] >> 17;
-  *ptr++ = values[0] >> 9;
-  *ptr++ = values[0] >> 1;
+  *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 = values[0] << 7;
-  *ptr++ |= values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *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 = values[1] << 6;
-  *ptr++ |= values[2] >> 43;
-  *ptr++ = values[2] >> 35;
-  *ptr++ = values[2] >> 27;
-  *ptr++ = values[2] >> 19;
-  *ptr++ = values[2] >> 11;
-  *ptr++ = values[2] >> 3;
+  *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 = values[2] << 5;
-  *ptr++ |= values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 45;
-  *ptr++ = values[4] >> 37;
-  *ptr++ = values[4] >> 29;
-  *ptr++ = values[4] >> 21;
-  *ptr++ = values[4] >> 13;
-  *ptr++ = values[4] >> 5;
+  *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 = values[4] << 3;
-  *ptr++ |= values[5] >> 46;
-  *ptr++ = values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *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 = values[5] << 2;
-  *ptr++ |= values[6] >> 47;
-  *ptr++ = values[6] >> 39;
-  *ptr++ = values[6] >> 31;
-  *ptr++ = values[6] >> 23;
-  *ptr++ = values[6] >> 15;
-  *ptr++ = values[6] >> 7;
+  *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 = values[6] << 1;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[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++ = values[0] >> 42;
-  *ptr++ = values[0] >> 34;
-  *ptr++ = values[0] >> 26;
-  *ptr++ = values[0] >> 18;
-  *ptr++ = values[0] >> 10;
-  *ptr++ = values[0] >> 2;
+  *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 = values[0] << 6;
-  *ptr++ |= values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *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 = values[1] << 4;
-  *ptr++ |= values[2] >> 46;
-  *ptr++ = values[2] >> 38;
-  *ptr++ = values[2] >> 30;
-  *ptr++ = values[2] >> 22;
-  *ptr++ = values[2] >> 14;
-  *ptr++ = values[2] >> 6;
+  *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 = values[2] << 2;
-  *ptr++ |= values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 42;
-  *ptr++ = values[4] >> 34;
-  *ptr++ = values[4] >> 26;
-  *ptr++ = values[4] >> 18;
-  *ptr++ = values[4] >> 10;
-  *ptr++ = values[4] >> 2;
+  *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 = values[4] << 6;
-  *ptr++ |= values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *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 = values[5] << 4;
-  *ptr++ |= values[6] >> 46;
-  *ptr++ = values[6] >> 38;
-  *ptr++ = values[6] >> 30;
-  *ptr++ = values[6] >> 22;
-  *ptr++ = values[6] >> 14;
-  *ptr++ = values[6] >> 6;
+  *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 = values[6] << 2;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 43;
-  *ptr++ = values[0] >> 35;
-  *ptr++ = values[0] >> 27;
-  *ptr++ = values[0] >> 19;
-  *ptr++ = values[0] >> 11;
-  *ptr++ = values[0] >> 3;
+  *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 = values[0] << 5;
-  *ptr++ |= values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *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 = values[1] << 2;
-  *ptr++ |= values[2] >> 49;
-  *ptr++ = values[2] >> 41;
-  *ptr++ = values[2] >> 33;
-  *ptr++ = values[2] >> 25;
-  *ptr++ = values[2] >> 17;
-  *ptr++ = values[2] >> 9;
-  *ptr++ = values[2] >> 1;
+  *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 = values[2] << 7;
-  *ptr++ |= values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 47;
-  *ptr++ = values[4] >> 39;
-  *ptr++ = values[4] >> 31;
-  *ptr++ = values[4] >> 23;
-  *ptr++ = values[4] >> 15;
-  *ptr++ = values[4] >> 7;
+  *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 = values[4] << 1;
-  *ptr++ |= values[5] >> 50;
-  *ptr++ = values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr++ |= values[6] >> 45;
-  *ptr++ = values[6] >> 37;
-  *ptr++ = values[6] >> 29;
-  *ptr++ = values[6] >> 21;
-  *ptr++ = values[6] >> 13;
-  *ptr++ = values[6] >> 5;
+  *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 = values[6] << 3;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 44;
-  *ptr++ = values[0] >> 36;
-  *ptr++ = values[0] >> 28;
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
+  *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 = values[0] << 4;
-  *ptr++ |= values[1] >> 48;
-  *ptr++ = values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *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++ = values[2] >> 44;
-  *ptr++ = values[2] >> 36;
-  *ptr++ = values[2] >> 28;
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
+  *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 = values[2] << 4;
-  *ptr++ |= values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 44;
-  *ptr++ = values[4] >> 36;
-  *ptr++ = values[4] >> 28;
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
+  *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 = values[4] << 4;
-  *ptr++ |= values[5] >> 48;
-  *ptr++ = values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *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++ = values[6] >> 44;
-  *ptr++ = values[6] >> 36;
-  *ptr++ = values[6] >> 28;
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
+  *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 = values[6] << 4;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 45;
-  *ptr++ = values[0] >> 37;
-  *ptr++ = values[0] >> 29;
-  *ptr++ = values[0] >> 21;
-  *ptr++ = values[0] >> 13;
-  *ptr++ = values[0] >> 5;
+  *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 = values[0] << 3;
-  *ptr++ |= values[1] >> 50;
-  *ptr++ = values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *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 = values[1] << 6;
-  *ptr++ |= values[2] >> 47;
-  *ptr++ = values[2] >> 39;
-  *ptr++ = values[2] >> 31;
-  *ptr++ = values[2] >> 23;
-  *ptr++ = values[2] >> 15;
-  *ptr++ = values[2] >> 7;
+  *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 = values[2] << 1;
-  *ptr++ |= values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 49;
-  *ptr++ = values[4] >> 41;
-  *ptr++ = values[4] >> 33;
-  *ptr++ = values[4] >> 25;
-  *ptr++ = values[4] >> 17;
-  *ptr++ = values[4] >> 9;
-  *ptr++ = values[4] >> 1;
+  *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 = values[4] << 7;
-  *ptr++ |= values[5] >> 46;
-  *ptr++ = values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *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 = values[5] << 2;
-  *ptr++ |= values[6] >> 51;
-  *ptr++ = values[6] >> 43;
-  *ptr++ = values[6] >> 35;
-  *ptr++ = values[6] >> 27;
-  *ptr++ = values[6] >> 19;
-  *ptr++ = values[6] >> 11;
-  *ptr++ = values[6] >> 3;
+  *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 = values[6] << 5;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 46;
-  *ptr++ = values[0] >> 38;
-  *ptr++ = values[0] >> 30;
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *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 = values[0] << 2;
-  *ptr++ |= values[1] >> 52;
-  *ptr++ = values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *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 = values[1] << 4;
-  *ptr++ |= values[2] >> 50;
-  *ptr++ = values[2] >> 42;
-  *ptr++ = values[2] >> 34;
-  *ptr++ = values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *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 = values[2] << 6;
-  *ptr++ |= values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 46;
-  *ptr++ = values[4] >> 38;
-  *ptr++ = values[4] >> 30;
-  *ptr++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *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 = values[4] << 2;
-  *ptr++ |= values[5] >> 52;
-  *ptr++ = values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *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 = values[5] << 4;
-  *ptr++ |= values[6] >> 50;
-  *ptr++ = values[6] >> 42;
-  *ptr++ = values[6] >> 34;
-  *ptr++ = values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *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 = values[6] << 6;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 47;
-  *ptr++ = values[0] >> 39;
-  *ptr++ = values[0] >> 31;
-  *ptr++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *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 = values[0] << 1;
-  *ptr++ |= values[1] >> 54;
-  *ptr++ = values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *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 = values[1] << 2;
-  *ptr++ |= values[2] >> 53;
-  *ptr++ = values[2] >> 45;
-  *ptr++ = values[2] >> 37;
-  *ptr++ = values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *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 = values[2] << 3;
-  *ptr++ |= values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 51;
-  *ptr++ = values[4] >> 43;
-  *ptr++ = values[4] >> 35;
-  *ptr++ = values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *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 = values[4] << 5;
-  *ptr++ |= values[5] >> 50;
-  *ptr++ = values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr++ |= values[6] >> 49;
-  *ptr++ = values[6] >> 41;
-  *ptr++ = values[6] >> 33;
-  *ptr++ = values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *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 = values[6] << 7;
-  *ptr++ |= values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 48;
-  *ptr++ = values[0] >> 40;
-  *ptr++ = values[0] >> 32;
-  *ptr++ = values[0] >> 24;
-  *ptr++ = values[0] >> 16;
-  *ptr++ = values[0] >> 8;
-  *ptr++ = values[0];
+  *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++ = values[1] >> 48;
-  *ptr++ = values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *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++ = values[2] >> 48;
-  *ptr++ = values[2] >> 40;
-  *ptr++ = values[2] >> 32;
-  *ptr++ = values[2] >> 24;
-  *ptr++ = values[2] >> 16;
-  *ptr++ = values[2] >> 8;
-  *ptr++ = values[2];
+  *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++ = values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 48;
-  *ptr++ = values[4] >> 40;
-  *ptr++ = values[4] >> 32;
-  *ptr++ = values[4] >> 24;
-  *ptr++ = values[4] >> 16;
-  *ptr++ = values[4] >> 8;
-  *ptr++ = values[4];
+  *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++ = values[5] >> 48;
-  *ptr++ = values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *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++ = values[6] >> 48;
-  *ptr++ = values[6] >> 40;
-  *ptr++ = values[6] >> 32;
-  *ptr++ = values[6] >> 24;
-  *ptr++ = values[6] >> 16;
-  *ptr++ = values[6] >> 8;
-  *ptr++ = values[6];
+  *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++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[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_57(const uint64_t* values, uint8_t* ptr) {
-  *ptr++ = values[0] >> 49;
-  *ptr++ = values[0] >> 41;
-  *ptr++ = values[0] >> 33;
-  *ptr++ = values[0] >> 25;
-  *ptr++ = values[0] >> 17;
-  *ptr++ = values[0] >> 9;
-  *ptr++ = values[0] >> 1;
+  *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 = values[0] << 7;
-  *ptr++ |= values[1] >> 50;
-  *ptr++ = values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *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 = values[1] << 6;
-  *ptr++ |= values[2] >> 51;
-  *ptr++ = values[2] >> 43;
-  *ptr++ = values[2] >> 35;
-  *ptr++ = values[2] >> 27;
-  *ptr++ = values[2] >> 19;
-  *ptr++ = values[2] >> 11;
-  *ptr++ = values[2] >> 3;
+  *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 = values[2] << 5;
-  *ptr++ |= values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 53;
-  *ptr++ = values[4] >> 45;
-  *ptr++ = values[4] >> 37;
-  *ptr++ = values[4] >> 29;
-  *ptr++ = values[4] >> 21;
-  *ptr++ = values[4] >> 13;
-  *ptr++ = values[4] >> 5;
+  *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 = values[4] << 3;
-  *ptr++ |= values[5] >> 54;
-  *ptr++ = values[5] >> 46;
-  *ptr++ = values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *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 = values[5] << 2;
-  *ptr++ |= values[6] >> 55;
-  *ptr++ = values[6] >> 47;
-  *ptr++ = values[6] >> 39;
-  *ptr++ = values[6] >> 31;
-  *ptr++ = values[6] >> 23;
-  *ptr++ = values[6] >> 15;
-  *ptr++ = values[6] >> 7;
+  *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 = values[6] << 1;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[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++ = values[0] >> 50;
-  *ptr++ = values[0] >> 42;
-  *ptr++ = values[0] >> 34;
-  *ptr++ = values[0] >> 26;
-  *ptr++ = values[0] >> 18;
-  *ptr++ = values[0] >> 10;
-  *ptr++ = values[0] >> 2;
+  *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 = values[0] << 6;
-  *ptr++ |= values[1] >> 52;
-  *ptr++ = values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *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 = values[1] << 4;
-  *ptr++ |= values[2] >> 54;
-  *ptr++ = values[2] >> 46;
-  *ptr++ = values[2] >> 38;
-  *ptr++ = values[2] >> 30;
-  *ptr++ = values[2] >> 22;
-  *ptr++ = values[2] >> 14;
-  *ptr++ = values[2] >> 6;
+  *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 = values[2] << 2;
-  *ptr++ |= values[3] >> 56;
-  *ptr++ = values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 50;
-  *ptr++ = values[4] >> 42;
-  *ptr++ = values[4] >> 34;
-  *ptr++ = values[4] >> 26;
-  *ptr++ = values[4] >> 18;
-  *ptr++ = values[4] >> 10;
-  *ptr++ = values[4] >> 2;
+  *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 = values[4] << 6;
-  *ptr++ |= values[5] >> 52;
-  *ptr++ = values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *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 = values[5] << 4;
-  *ptr++ |= values[6] >> 54;
-  *ptr++ = values[6] >> 46;
-  *ptr++ = values[6] >> 38;
-  *ptr++ = values[6] >> 30;
-  *ptr++ = values[6] >> 22;
-  *ptr++ = values[6] >> 14;
-  *ptr++ = values[6] >> 6;
+  *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 = values[6] << 2;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 51;
-  *ptr++ = values[0] >> 43;
-  *ptr++ = values[0] >> 35;
-  *ptr++ = values[0] >> 27;
-  *ptr++ = values[0] >> 19;
-  *ptr++ = values[0] >> 11;
-  *ptr++ = values[0] >> 3;
+  *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 = values[0] << 5;
-  *ptr++ |= values[1] >> 54;
-  *ptr++ = values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *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 = values[1] << 2;
-  *ptr++ |= values[2] >> 57;
-  *ptr++ = values[2] >> 49;
-  *ptr++ = values[2] >> 41;
-  *ptr++ = values[2] >> 33;
-  *ptr++ = values[2] >> 25;
-  *ptr++ = values[2] >> 17;
-  *ptr++ = values[2] >> 9;
-  *ptr++ = values[2] >> 1;
+  *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 = values[2] << 7;
-  *ptr++ |= values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 55;
-  *ptr++ = values[4] >> 47;
-  *ptr++ = values[4] >> 39;
-  *ptr++ = values[4] >> 31;
-  *ptr++ = values[4] >> 23;
-  *ptr++ = values[4] >> 15;
-  *ptr++ = values[4] >> 7;
+  *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 = values[4] << 1;
-  *ptr++ |= values[5] >> 58;
-  *ptr++ = values[5] >> 50;
-  *ptr++ = values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr++ |= values[6] >> 53;
-  *ptr++ = values[6] >> 45;
-  *ptr++ = values[6] >> 37;
-  *ptr++ = values[6] >> 29;
-  *ptr++ = values[6] >> 21;
-  *ptr++ = values[6] >> 13;
-  *ptr++ = values[6] >> 5;
+  *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 = values[6] << 3;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 52;
-  *ptr++ = values[0] >> 44;
-  *ptr++ = values[0] >> 36;
-  *ptr++ = values[0] >> 28;
-  *ptr++ = values[0] >> 20;
-  *ptr++ = values[0] >> 12;
-  *ptr++ = values[0] >> 4;
+  *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 = values[0] << 4;
-  *ptr++ |= values[1] >> 56;
-  *ptr++ = values[1] >> 48;
-  *ptr++ = values[1] >> 40;
-  *ptr++ = values[1] >> 32;
-  *ptr++ = values[1] >> 24;
-  *ptr++ = values[1] >> 16;
-  *ptr++ = values[1] >> 8;
-  *ptr++ = values[1];
+  *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++ = values[2] >> 52;
-  *ptr++ = values[2] >> 44;
-  *ptr++ = values[2] >> 36;
-  *ptr++ = values[2] >> 28;
-  *ptr++ = values[2] >> 20;
-  *ptr++ = values[2] >> 12;
-  *ptr++ = values[2] >> 4;
+  *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 = values[2] << 4;
-  *ptr++ |= values[3] >> 56;
-  *ptr++ = values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 52;
-  *ptr++ = values[4] >> 44;
-  *ptr++ = values[4] >> 36;
-  *ptr++ = values[4] >> 28;
-  *ptr++ = values[4] >> 20;
-  *ptr++ = values[4] >> 12;
-  *ptr++ = values[4] >> 4;
+  *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 = values[4] << 4;
-  *ptr++ |= values[5] >> 56;
-  *ptr++ = values[5] >> 48;
-  *ptr++ = values[5] >> 40;
-  *ptr++ = values[5] >> 32;
-  *ptr++ = values[5] >> 24;
-  *ptr++ = values[5] >> 16;
-  *ptr++ = values[5] >> 8;
-  *ptr++ = values[5];
+  *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++ = values[6] >> 52;
-  *ptr++ = values[6] >> 44;
-  *ptr++ = values[6] >> 36;
-  *ptr++ = values[6] >> 28;
-  *ptr++ = values[6] >> 20;
-  *ptr++ = values[6] >> 12;
-  *ptr++ = values[6] >> 4;
+  *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 = values[6] << 4;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 53;
-  *ptr++ = values[0] >> 45;
-  *ptr++ = values[0] >> 37;
-  *ptr++ = values[0] >> 29;
-  *ptr++ = values[0] >> 21;
-  *ptr++ = values[0] >> 13;
-  *ptr++ = values[0] >> 5;
+  *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 = values[0] << 3;
-  *ptr++ |= values[1] >> 58;
-  *ptr++ = values[1] >> 50;
-  *ptr++ = values[1] >> 42;
-  *ptr++ = values[1] >> 34;
-  *ptr++ = values[1] >> 26;
-  *ptr++ = values[1] >> 18;
-  *ptr++ = values[1] >> 10;
-  *ptr++ = values[1] >> 2;
+  *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 = values[1] << 6;
-  *ptr++ |= values[2] >> 55;
-  *ptr++ = values[2] >> 47;
-  *ptr++ = values[2] >> 39;
-  *ptr++ = values[2] >> 31;
-  *ptr++ = values[2] >> 23;
-  *ptr++ = values[2] >> 15;
-  *ptr++ = values[2] >> 7;
+  *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 = values[2] << 1;
-  *ptr++ |= values[3] >> 60;
-  *ptr++ = values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 57;
-  *ptr++ = values[4] >> 49;
-  *ptr++ = values[4] >> 41;
-  *ptr++ = values[4] >> 33;
-  *ptr++ = values[4] >> 25;
-  *ptr++ = values[4] >> 17;
-  *ptr++ = values[4] >> 9;
-  *ptr++ = values[4] >> 1;
+  *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 = values[4] << 7;
-  *ptr++ |= values[5] >> 54;
-  *ptr++ = values[5] >> 46;
-  *ptr++ = values[5] >> 38;
-  *ptr++ = values[5] >> 30;
-  *ptr++ = values[5] >> 22;
-  *ptr++ = values[5] >> 14;
-  *ptr++ = values[5] >> 6;
+  *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 = values[5] << 2;
-  *ptr++ |= values[6] >> 59;
-  *ptr++ = values[6] >> 51;
-  *ptr++ = values[6] >> 43;
-  *ptr++ = values[6] >> 35;
-  *ptr++ = values[6] >> 27;
-  *ptr++ = values[6] >> 19;
-  *ptr++ = values[6] >> 11;
-  *ptr++ = values[6] >> 3;
+  *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 = values[6] << 5;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 54;
-  *ptr++ = values[0] >> 46;
-  *ptr++ = values[0] >> 38;
-  *ptr++ = values[0] >> 30;
-  *ptr++ = values[0] >> 22;
-  *ptr++ = values[0] >> 14;
-  *ptr++ = values[0] >> 6;
+  *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 = values[0] << 2;
-  *ptr++ |= values[1] >> 60;
-  *ptr++ = values[1] >> 52;
-  *ptr++ = values[1] >> 44;
-  *ptr++ = values[1] >> 36;
-  *ptr++ = values[1] >> 28;
-  *ptr++ = values[1] >> 20;
-  *ptr++ = values[1] >> 12;
-  *ptr++ = values[1] >> 4;
+  *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 = values[1] << 4;
-  *ptr++ |= values[2] >> 58;
-  *ptr++ = values[2] >> 50;
-  *ptr++ = values[2] >> 42;
-  *ptr++ = values[2] >> 34;
-  *ptr++ = values[2] >> 26;
-  *ptr++ = values[2] >> 18;
-  *ptr++ = values[2] >> 10;
-  *ptr++ = values[2] >> 2;
+  *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 = values[2] << 6;
-  *ptr++ |= values[3] >> 56;
-  *ptr++ = values[3] >> 48;
-  *ptr++ = values[3] >> 40;
-  *ptr++ = values[3] >> 32;
-  *ptr++ = values[3] >> 24;
-  *ptr++ = values[3] >> 16;
-  *ptr++ = values[3] >> 8;
-  *ptr++ = values[3];
+  *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++ = values[4] >> 54;
-  *ptr++ = values[4] >> 46;
-  *ptr++ = values[4] >> 38;
-  *ptr++ = values[4] >> 30;
-  *ptr++ = values[4] >> 22;
-  *ptr++ = values[4] >> 14;
-  *ptr++ = values[4] >> 6;
+  *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 = values[4] << 2;
-  *ptr++ |= values[5] >> 60;
-  *ptr++ = values[5] >> 52;
-  *ptr++ = values[5] >> 44;
-  *ptr++ = values[5] >> 36;
-  *ptr++ = values[5] >> 28;
-  *ptr++ = values[5] >> 20;
-  *ptr++ = values[5] >> 12;
-  *ptr++ = values[5] >> 4;
+  *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 = values[5] << 4;
-  *ptr++ |= values[6] >> 58;
-  *ptr++ = values[6] >> 50;
-  *ptr++ = values[6] >> 42;
-  *ptr++ = values[6] >> 34;
-  *ptr++ = values[6] >> 26;
-  *ptr++ = values[6] >> 18;
-  *ptr++ = values[6] >> 10;
-  *ptr++ = values[6] >> 2;
+  *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 = values[6] << 6;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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++ = values[0] >> 55;
-  *ptr++ = values[0] >> 47;
-  *ptr++ = values[0] >> 39;
-  *ptr++ = values[0] >> 31;
-  *ptr++ = values[0] >> 23;
-  *ptr++ = values[0] >> 15;
-  *ptr++ = values[0] >> 7;
+  *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 = values[0] << 1;
-  *ptr++ |= values[1] >> 62;
-  *ptr++ = values[1] >> 54;
-  *ptr++ = values[1] >> 46;
-  *ptr++ = values[1] >> 38;
-  *ptr++ = values[1] >> 30;
-  *ptr++ = values[1] >> 22;
-  *ptr++ = values[1] >> 14;
-  *ptr++ = values[1] >> 6;
+  *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 = values[1] << 2;
-  *ptr++ |= values[2] >> 61;
-  *ptr++ = values[2] >> 53;
-  *ptr++ = values[2] >> 45;
-  *ptr++ = values[2] >> 37;
-  *ptr++ = values[2] >> 29;
-  *ptr++ = values[2] >> 21;
-  *ptr++ = values[2] >> 13;
-  *ptr++ = values[2] >> 5;
+  *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 = values[2] << 3;
-  *ptr++ |= values[3] >> 60;
-  *ptr++ = values[3] >> 52;
-  *ptr++ = values[3] >> 44;
-  *ptr++ = values[3] >> 36;
-  *ptr++ = values[3] >> 28;
-  *ptr++ = values[3] >> 20;
-  *ptr++ = values[3] >> 12;
-  *ptr++ = values[3] >> 4;
+  *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 = values[3] << 4;
-  *ptr++ |= values[4] >> 59;
-  *ptr++ = values[4] >> 51;
-  *ptr++ = values[4] >> 43;
-  *ptr++ = values[4] >> 35;
-  *ptr++ = values[4] >> 27;
-  *ptr++ = values[4] >> 19;
-  *ptr++ = values[4] >> 11;
-  *ptr++ = values[4] >> 3;
+  *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 = values[4] << 5;
-  *ptr++ |= values[5] >> 58;
-  *ptr++ = values[5] >> 50;
-  *ptr++ = values[5] >> 42;
-  *ptr++ = values[5] >> 34;
-  *ptr++ = values[5] >> 26;
-  *ptr++ = values[5] >> 18;
-  *ptr++ = values[5] >> 10;
-  *ptr++ = values[5] >> 2;
+  *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 = values[5] << 6;
-  *ptr++ |= values[6] >> 57;
-  *ptr++ = values[6] >> 49;
-  *ptr++ = values[6] >> 41;
-  *ptr++ = values[6] >> 33;
-  *ptr++ = values[6] >> 25;
-  *ptr++ = values[6] >> 17;
-  *ptr++ = values[6] >> 9;
-  *ptr++ = values[6] >> 1;
+  *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 = values[6] << 7;
-  *ptr++ |= values[7] >> 56;
-  *ptr++ = values[7] >> 48;
-  *ptr++ = values[7] >> 40;
-  *ptr++ = values[7] >> 32;
-  *ptr++ = values[7] >> 24;
-  *ptr++ = values[7] >> 16;
-  *ptr++ = values[7] >> 8;
-  *ptr = values[7];
+  *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) {
diff --git a/theta/include/theta_helpers.hpp b/theta/include/theta_helpers.hpp
index 0b98cab..cbdebb4 100644
--- a/theta/include/theta_helpers.hpp
+++ b/theta/include/theta_helpers.hpp
@@ -57,7 +57,7 @@
   // consistent way of initializing theta from p
   // avoids multiplication if p == 1 since it might not yield MAX_THETA exactly
   static uint64_t starting_theta_from_p(float p) {
-    if (p < 1) return static_cast<float>(theta_constants::MAX_THETA) * p;
+    if (p < 1) return static_cast<uint64_t>(theta_constants::MAX_THETA * p);
     return theta_constants::MAX_THETA;
   }