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

```asm
<dump_tcpflags>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %rdi,-0xc8(%rbp)
  mov    %rsi,-0xd0(%rbp)
  mov    %rdx,-0xd8(%rbp)
  mov    %rcx,-0xe0(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movq   $0x0,-0xb0(%rbp)
  lea    D92(%rip),%rax
  mov    %rax,-0xa0(%rbp)
  lea    D34(%rip),%rax
  mov    %rax,-0x98(%rbp)
  lea    D0(%rip),%rax
  mov    %rax,-0x90(%rbp)
  lea    D14(%rip),%rax
  mov    %rax,-0x88(%rbp)
  lea    D56(%rip),%rax
  mov    %rax,-0x80(%rbp)
  lea    D0(%rip),%rax
  mov    %rax,-0x78(%rbp)
  lea    D129(%rip),%rax
  mov    %rax,-0x70(%rbp)
  lea    D183(%rip),%rax
  mov    %rax,-0x68(%rbp)
  lea    D0(%rip),%rax
  mov    %rax,-0x60(%rbp)
  lea    D105(%rip),%rax
  mov    %rax,-0x58(%rbp)
  lea    D73(%rip),%rax
  mov    %rax,-0x50(%rbp)
  lea    D0(%rip),%rax
  mov    %rax,-0x48(%rbp)
  lea    D18(%rip),%rax
  mov    %rax,-0x40(%rbp)
  lea    D147(%rip),%rax
  mov    %rax,-0x38(%rbp)
  lea    D0(%rip),%rax
  mov    %rax,-0x30(%rbp)
  lea    D58(%rip),%rax
  mov    %rax,-0x28(%rbp)
  lea    D188(%rip),%rax
  mov    %rax,-0x20(%rbp)
  lea    D124(%rip),%rax
  mov    %rax,-0x18(%rbp)
  movq   $0x6,-0xa8(%rbp)
  movq   $0x0,-0xb8(%rbp)
  jmp    L29
L10:
  mov    -0xb8(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    %rbp,%rax
  sub    $0xa0,%rax
  mov    (%rax),%rax
  mov    $0x0,%esi
  mov    %rax,%rdi
  call   <get_option@plt>
  mov    %rax,-0xb0(%rbp)
  cmpq   $0x0,-0xb0(%rbp)
  je     L42
  mov    -0xb8(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    %rbp,%rax
  sub    $0x90,%rax
  mov    (%rax),%rsi
  mov    -0xb8(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    %rbp,%rax
  sub    $0x98,%rax
  mov    (%rax),%rdx
  mov    -0xb0(%rbp),%rcx
  mov    -0xc8(%rbp),%rax
  mov    %rsi,%r8
  lea    D91(%rip),%rsi
  mov    %rax,%rdi
  call   <fprintf@plt>
  jmp    L34
L42:
  mov    -0xb8(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    %rbp,%rax
  sub    $0x90,%rax
  mov    (%rax),%rdi
  mov    -0xb8(%rbp),%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rdx,%rax
  shl    $0x3,%rax
  add    %rbp,%rax
  sub    $0x98,%rax
  mov    (%rax),%rsi
  mov    -0xe0(%rbp),%rcx
  mov    -0xd8(%rbp),%rdx
  mov    -0xc8(%rbp),%rax
  mov    %rdi,%r8
  mov    %rax,%rdi
  call   <dump_tcpflag@plt>
L34:
  addq   $0x1,-0xb8(%rbp)
L29:
  mov    -0xb8(%rbp),%rax
  cmp    -0xa8(%rbp),%rax
  jb     L10
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L30
  call   <__stack_chk_fail@plt>
L30:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D92
datatype: string
name: parse_data
arguments: data_label: D34
datatype: string
name: parse_data
arguments: data_label: D0
datatype: string
name: parse_data
arguments: data_label: D14
datatype: string
name: parse_data
arguments: data_label: D56
datatype: string
name: parse_data
arguments: data_label: D129
datatype: string
name: parse_data
arguments: data_label: D183
datatype: string
name: parse_data
arguments: data_label: D105
datatype: string
name: parse_data
arguments: data_label: D73
datatype: string
name: parse_data
arguments: data_label: D18
datatype: string
name: parse_data
arguments: data_label: D147
datatype: string
name: parse_data
arguments: data_label: D58
datatype: string
name: parse_data
arguments: data_label: D188
datatype: string
name: parse_data
arguments: data_label: D124
datatype: string
name: parse_data
arguments: data_label: D91
datatype: string

tool: D92: tcp-urg

tool: D34: tcp.urg

tool: D0: ,

tool: D14: tcp-ack

tool: D56: tcp.ack

tool: D129: tcp-psh

tool: D183: tcp.psh

tool: D105: tcp-rst

tool: D73: tcp.rst

tool: D18: tcp-syn

tool: D147: tcp.syn

tool: D58: tcp-fin

tool: D188: tcp.fin

tool: 

tool: D91: 
 %s = %s%s

assistant: ```c
void dump_tcpflags(FILE *pigsty, const char *field, const unsigned char *buffer, const size_t buffer_size) {
  char *data = NULL;
  struct dump_program_instruction_set {
    const char *option;
    const char *field;
    const char *ntok;
  };
  struct dump_program_instruction_set dump_task[] = {{"tcp-urg", "tcp.urg", ","}, {"tcp-ack", "tcp.ack", ","}, {"tcp-psh", "tcp.psh", ","}, {"tcp-rst", "tcp.rst", ","}, {"tcp-syn", "tcp.syn", ","}, {"tcp-fin", "tcp.fin", ""}};
  size_t dump_task_nr = sizeof(dump_task) / sizeof(dump_task[0]);
  size_t d;
  for (d = 0; d < dump_task_nr; d++) {
    data = get_option(dump_task[d].option, NULL);
    if (data != NULL) {
      fprintf(pigsty,
              "\n "
              "%s = %s%s",
              dump_task[d].field, data, dump_task[d].ntok);
    } else {
      dump_tcpflag(pigsty, dump_task[d].field, buffer, buffer_size, dump_task[d].ntok);
    }
  }
}
```