user: Translate the below assembly code into C programming language:

```asm
<mn_md5_to_hex>:
  endbr64
  mov    %rsi,%rax
  movzbl (%rdi),%esi
  lea    D7(%rip),%rcx
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,(%rax)
  movzbl (%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x1(%rax)
  movzbl 0x1(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x2(%rax)
  movzbl 0x1(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x3(%rax)
  movzbl 0x2(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x4(%rax)
  movzbl 0x2(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x5(%rax)
  movzbl 0x3(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x6(%rax)
  movzbl 0x3(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x7(%rax)
  movzbl 0x4(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x8(%rax)
  movzbl 0x4(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x9(%rax)
  movzbl 0x5(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0xa(%rax)
  movzbl 0x5(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0xb(%rax)
  movzbl 0x6(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0xc(%rax)
  movzbl 0x6(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0xd(%rax)
  movzbl 0x7(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0xe(%rax)
  movzbl 0x7(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0xf(%rax)
  movzbl 0x8(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x10(%rax)
  movzbl 0x8(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x11(%rax)
  movzbl 0x9(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x12(%rax)
  movzbl 0x9(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x13(%rax)
  movzbl 0xa(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x14(%rax)
  movzbl 0xa(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x15(%rax)
  movzbl 0xb(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x16(%rax)
  movzbl 0xb(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x17(%rax)
  movzbl 0xc(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x18(%rax)
  movzbl 0xc(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x19(%rax)
  movzbl 0xd(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x1a(%rax)
  movzbl 0xd(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x1b(%rax)
  movzbl 0xe(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x1c(%rax)
  movzbl 0xe(%rdi),%esi
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x1d(%rax)
  movzbl 0xf(%rdi),%esi
  shr    $0x4,%sil
  and    $0xf,%esi
  movzbl (%rcx,%rsi,1),%esi
  mov    %sil,0x1e(%rax)
  movzbl 0xf(%rdi),%edx
  movb   $0x0,0x20(%rax)
  and    $0xf,%edx
  movzbl (%rcx,%rdx,1),%edx
  mov    %dl,0x1f(%rax)
  ret
```

tool_calls: name: unpack_data
arguments: data_tag: D7
type: string

tool: D7: 0123456789abcdef

assistant: ```c
void mn_md5_to_hex(const unsigned char resbuf[16], char hexbuf[33]) {
  int i;
  for (i = 0; i < 16; i++) {
    hexbuf[i * 2] = "0123456789abcdef"[resbuf[i] >> 4];
    hexbuf[i * 2 + 1] = "0123456789abcdef"[resbuf[i] & 0xf];
  }
  hexbuf[32] = 0;
}
```