    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, str.c_str(), str.size());
    SHA256_Final(hash, &sha256);
    std::stringstream ss;
    for (int i = 0; i < SHA256_DIGEST_LENGTH; i++) {
      ss << std::hex << std::setw(2) << std::setfill('0') << (int)hash[i];
    }
    return ss.str();
  }
 
</s> remove std::string tohex(const uint8_t *buf, size_t buf_size) {
  std::unique_ptr<char[]> hexbuf(new char[buf_size * 2 + 1]);
  for (size_t i = 0; i < buf_size; i++) {
    sprintf(&hexbuf[i * 2], "%02x", buf[i]);
 </s> add std::string hexdump(const uint8_t* in, const size_t size) {
  std::stringstream ss;
  ss << std::hex << std::setfill('0');
  for (size_t i = 0; i < size; i++) {
    ss << std::setw(2) << static_cast<unsigned int>(in[i]); </s> remove   for (int i = 0; i < len/4; i++) {
    if (i != 0 && (i%0x10) == 0) printf("\n");
    printf("%8x ", d[i]);
  }
  printf("\n");
 </s> add   printf("%s\n", util::hexdump(d, len).c_str()); </s> remove void hexdump(uint32_t *d, int len) {
 </s> add void hexdump(uint8_t *d, int len) { </s> remove             hexdump((uint32_t *)constraint->data, constraint->size);
 </s> add             hexdump((uint8_t *)constraint->data, constraint->size); </s> remove           hexdump((uint32_t *)prop->value, prop->sizebytes);
 </s> add           hexdump((uint8_t *)prop->value, prop->sizebytes);
  return util::hexdump(hash, SHA256_DIGEST_LENGTH);
    SHA256_CTX sha256;
    SHA256_Init(&sha256);
    SHA256_Update(&sha256, str.c_str(), str.size());
    SHA256_Final(hash, &sha256);
  return util::hexdump(hash, SHA256_DIGEST_LENGTH);
  return util::hexdump(hash, SHA256_DIGEST_LENGTH);
  return util::hexdump(hash, SHA256_DIGEST_LENGTH);
  return util::hexdump(hash, SHA256_DIGEST_LENGTH);
  return util::hexdump(hash, SHA256_DIGEST_LENGTH);
  }
keep keep keep keep replace replace replace replace replace keep
 util: remove function to_hex (#22792) 
selfdrive/ui/replay/util.cc