user: What would the C source look like for the assembly code provided here:

```asm
<parse_1st_msg>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%rbp
  cmpq   $0x0,(%rdi)
  je     L128
L131:
  movq   $0x0,0x30(%rbp)
  movq   $0x0,0x10(%rbp)
  movq   $0x0,0x48(%rbp)
  mov    0x0(%rbp),%rax
  lea    0x10(%rax),%rbx
  mov    0x40(%rbp),%rax
  sub    %rbx,%rax
  test   %rax,%rax
  jle    L93
  lea    D63(%rip),%r12
  lea    D61(%rip),%r13
  lea    D26(%rip),%r15
  lea    D24(%rip),%r14
  jmp    L56
L128:
  lea    D61(%rip),%rsi
  lea    D28(%rip),%rdi
  call   <fatal_error@plt>
  jmp    L131
L61:
  movzbl %sil,%esi
  mov    %r12,%rdi
  call   <fatal_error_i@plt>
  jmp    L123
L84:
  lea    -0x1(%rax),%edx
  cmp    $0xfc,%dl
  jbe    L11
  cmp    $0xfe,%al
  jne    L23
  mov    %r13,%rsi
  mov    %r15,%rdi
  call   <fatal_error@plt>
  jmp    L72
L11:
  mov    %r13,%rsi
  mov    %r14,%rdi
  call   <fatal_error@plt>
L72:
  cmpb   $0x7,0x4(%rbx)
  je     L104
L23:
  mov    %rbx,%rdi
  call   <uint4@plt>
  cltq
  add    %rax,%rbx
  mov    0x40(%rbp),%rax
  sub    %rbx,%rax
  test   %rax,%rax
  jle    L93
L56:
  movzbl 0x4(%rbx),%esi
  cmp    $0x8,%sil
  ja     L61
L123:
  movzbl 0x4(%rbx),%eax
  mov    %rbx,0x0(%rbp,%rax,8)
  cmpb   $0x6,0x4(%rbx)
  jne    L72
  movzbl 0x5(%rbx),%eax
  test   %al,%al
  jne    L84
  mov    %rbx,0x48(%rbp)
  jmp    L72
L93:
  lea    D61(%rip),%rsi
  lea    D57(%rip),%rdi
  call   <fatal_error@plt>
  mov    $0x1,%eax
L38:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L104:
  mov    $0x0,%eax
  jmp    L38
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D63
data_type: string
name: extract_symbolic_data
arguments: data_label: D61
data_type: string
name: extract_symbolic_data
arguments: data_label: D26
data_type: string
name: extract_symbolic_data
arguments: data_label: D24
data_type: string
name: extract_symbolic_data
arguments: data_label: D28
data_type: string
name: extract_symbolic_data
arguments: data_label: D57
data_type: string

tool: D63: parse_1st_msg illegal section %d

tool: 

tool: D26: parse_1st_msg: illegal grib msg, bitmap not defined code, table 6.0=254

tool: D24: parse_1st_msg: predefined bitmaps are not handled

tool: D28: parse_1st_msg .. sec[0] == NULL

tool: D57: parse_1st_msg illegally format grib

assistant: ```c
int parse_1st_msg(unsigned char **sec) {
  unsigned char *p;
  if (sec[0] == NULL)
    fatal_error("parse_1st_msg .. sec[0] == NULL", "");
  sec[2] = sec[6] = NULL;
  sec[9] = NULL;
  p = sec[0] + 16;
  while (sec[8] - p > 0) {
    if (p[4] > 8)
      fatal_error_i("parse_1st_msg illegal section %d", (int)p[4]);
    sec[p[4]] = p;
    if (p[4] == 6) {
      if (p[5] == 0) {
        sec[9] = p;
      } else if (p[5] >= 1 && p[5] <= 253) {
        fatal_error("parse_1st_msg: predefined bitmaps are not handled", "");
      } else if (p[5] == 254) {
        fatal_error("parse_1st_msg: illegal grib msg, bitmap not defined code, table 6.0=254", "");
      }
    }
    if (p[4] == 7) {
      return 0;
    }
    p += uint4(p);
  }
  fatal_error("parse_1st_msg illegally format grib", "");
  return 1;
}
```