user: What is the c source code of the assembly code below:

```asm
<ddump>:
  endbr64
  push   %r15
  xor    %eax,%eax
  push   %r14
  mov    %esi,%r14d
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbx
  lea    D78(%rip),%rdi
  sub    $0x18,%rsp
  mov    %esi,0x8(%rsp)
  call   <dprintf@plt>
  test   %r14d,%r14d
  jle    L19
  mov    %r14d,%eax
  movl   $0x0,(%rsp)
  sub    $0x1,%eax
  mov    %r14d,0x4(%rsp)
  lea    D3(%rip),%r14
  and    $0xfffffff0,%eax
  add    $0x10,%eax
  mov    %eax,0xc(%rsp)
  cs nopw 0x0(%rax,%rax,1)
L77:
  mov    %ebx,%esi
  lea    D9(%rip),%rdi
  xor    %eax,%eax
  xor    %r12d,%r12d
  call   <dprintf@plt>
  mov    $0x10,%ebp
  addl   $0x10,(%rsp)
  mov    (%rsp),%eax
  cmp    0x8(%rsp),%eax
  jge    L128
L61:
  xor    %r15d,%r15d
  lea    D35(%rip),%r13
  nopl   0x0(%rax,%rax,1)
L23:
  movzbl (%rbx,%r15,1),%esi
  mov    %r13,%rdi
  xor    %eax,%eax
  add    $0x1,%r15
  call   <dprintf@plt>
  cmp    %r15d,%ebp
  jg     L23
  test   %r12d,%r12d
  jle    L14
L146:
  xor    %r13d,%r13d
  nopl   0x0(%rax)
L82:
  mov    %r14,%rdi
  xor    %eax,%eax
  add    $0x1,%r13d
  call   <dprintf@plt>
  cmp    %r13d,%r12d
  jg     L82
  xor    %eax,%eax
  lea    D88(%rip),%rdi
  call   <dprintf@plt>
  test   %ebp,%ebp
  jle    L105
L78:
  lea    -0x1(%rbp),%eax
  mov    %rbx,%r12
  lea    0x1(%rbx,%rax,1),%rbp
  jmp    L66
  nopw   0x0(%rax,%rax,1)
L86:
  lea    D42(%rip),%rdi
  xor    %eax,%eax
  add    $0x1,%r12
  call   <dprintf@plt>
  cmp    %r12,%rbp
  je     L105
L66:
  movzbl (%r12),%esi
  lea    -0x20(%rsi),%eax
  cmp    $0x5e,%al
  jbe    L86
  lea    D23(%rip),%rdi
  xor    %eax,%eax
  add    $0x1,%r12
  call   <dprintf@plt>
  cmp    %r12,%rbp
  jne    L66
L105:
  lea    D84(%rip),%rdi
  xor    %eax,%eax
  add    $0x10,%rbx
  call   <dprintf@plt>
  subl   $0x10,0x4(%rsp)
  mov    0xc(%rsp),%ecx
  cmp    %ecx,(%rsp)
  jne    L77
L19:
  add    $0x18,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   (%rax)
L128:
  mov    0x4(%rsp),%eax
  mov    $0x10,%r12d
  mov    %eax,%ebp
  sub    %eax,%r12d
  test   %eax,%eax
  jg     L61
  test   %r12d,%r12d
  jg     L146
  lea    D88(%rip),%rdi
  xor    %eax,%eax
  call   <dprintf@plt>
  jmp    L105
  nopl   0x0(%rax,%rax,1)
L14:
  lea    D88(%rip),%rdi
  xor    %eax,%eax
  call   <dprintf@plt>
  jmp    L78
```

tool_calls: name: extract_symbolic_data
arguments: label: D78
type: string
name: extract_symbolic_data
arguments: label: D3
type: string
name: extract_symbolic_data
arguments: label: D9
type: string
name: extract_symbolic_data
arguments: label: D35
type: string
name: extract_symbolic_data
arguments: label: D88
type: string
name: extract_symbolic_data
arguments: label: D42
type: string
name: extract_symbolic_data
arguments: label: D23
type: string
name: extract_symbolic_data
arguments: label: D84
type: string

tool: D78:  [Addr]   .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F


tool: D3:    

tool: D9: %08X: 

tool: D35: %02x 

tool: D88:     

tool: D42: %c

tool: D23: .

tool: D84: 


assistant: ```c
void ddump(unsigned char *pData, int len) {
  unsigned char *sbuf = pData;
  int length = len;
  int i = 0, j, offset;
  dprintf(" [Addr]   .0 .1 .2 .3 .4 .5 .6 .7 .8 .9 .A .B .C .D .E .F\r\n");
  while (i < length) {
    dprintf("%08X: ", (int)(sbuf + i));
    if (i + 16 < length)
      offset = 16;
    else
      offset = length - i;
    for (j = 0; j < offset; j++)
      dprintf("%02x ", sbuf[i + j]);
    for (j = 0; j < 16 - offset; j++)
      dprintf("   ");
    dprintf("    ");
    for (j = 0; j < offset; j++) {
      if (' ' <= sbuf[i + j] && sbuf[i + j] <= '~')
        dprintf("%c", sbuf[i + j]);
      else
        dprintf(".");
    }
    dprintf("\n\r");
    i += 16;
  }
}
```