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

```asm
<make_binary>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  xor    %r13d,%r13d
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  cmp    %rdx,%rsi
  jae    L152
  mov    %rsi,%rbx
  mov    %rdx,%rbp
  test   %ecx,%ecx
  je     L205
  mov    %rdi,%r15
  mov    %rsi,%r13
  xor    %r14d,%r14d
  xor    %r12d,%r12d
  nopl   0x0(%rax)
L55:
  movzbl 0x0(%r13),%eax
  cmp    $0x2c,%al
  je     L117
  cmp    $0x28,%al
  je     L4
L180:
  add    $0x1,%r13
  cmp    %r13,%rbp
  ja     L55
  xor    %r13d,%r13d
  cmp    $0x1,%r12d
  jg     L162
L113:
  add    %r14d,%r13d
L152:
  add    $0x18,%rsp
  mov    %r13d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L185:
  mov    %rdi,%r15
  nopl   0x0(%rax,%rax,1)
L204:
  mov    %r15,%rdi
  add    $0x4,%rbp
  lea    0x4(%r14,%r13,1),%r13d
  call   <strlen@plt>
  lea    0x4(%r15),%rdi
  mov    %r15,%rsi
  lea    0x1(%rax),%edx
  call   <memmove@plt>
  mov    %r15d,%edx
  lea    0x1(%rbx),%rdi
  mov    %rbx,%rsi
  sub    %ebx,%edx
  call   <memmove@plt>
  movb   $0x28,(%rbx)
  lea    0x1(%r15),%rdi
  mov    $0x3,%edx
  lea    D8(%rip),%rsi
  call   <memcpy@plt>
  cmp    $0x2,%r12d
  je     L152
  cmp    %rbp,%rbx
  jae    L152
L205:
  mov    %rbx,%rdi
  xor    %r12d,%r12d
L62:
  movzbl (%rdi),%eax
  cmp    $0x2c,%al
  je     L122
  cmp    $0x28,%al
  je     L107
L168:
  add    $0x1,%rdi
  cmp    %rbp,%rdi
  jb     L62
  xor    %r14d,%r14d
  cmp    $0x1,%r12d
  jle    L113
L162:
  mov    %rbp,%rdx
  mov    $0x3a,%esi
  mov    %rbx,%rdi
  sub    %rbx,%rdx
  add    $0x1,%edx
  call   <memchr@plt>
  test   %rax,%rax
  je     L161
L179:
  mov    %rbx,%rdi
  xor    %r15d,%r15d
  jmp    L25
  nopw   0x0(%rax,%rax,1)
L137:
  cmp    $0x28,%al
  je     L58
L139:
  add    $0x1,%rdi
L25:
  movzbl (%rdi),%eax
  cmp    $0x2c,%al
  jne    L137
  cmp    $0x1,%r15d
  je     L185
  movzbl 0x1(%rdi),%eax
  lea    0x1(%rdi),%r15
  cmp    $0x2c,%al
  je     L204
  mov    %r15,%rdi
  mov    $0x1,%r15d
  cmp    $0x28,%al
  jne    L139
L58:
  mov    %rdi,%rsi
  call   <nextpar@plt>
  mov    %rax,%rdi
  jmp    L139
  nopl   0x0(%rax,%rax,1)
L122:
  add    $0x1,%r12d
  jmp    L168
  nopl   0x0(%rax)
L117:
  add    $0x1,%r12d
  jmp    L180
  nopl   0x0(%rax)
L107:
  mov    %rdi,%rsi
  call   <nextpar@plt>
  mov    %rax,%rdi
  jmp    L168
L4:
  mov    %r13,%rsi
  mov    %r13,%rdi
  call   <nextpar@plt>
  lea    0x1(%r13),%rsi
  mov    $0x1,%ecx
  mov    %r15,%rdi
  lea    -0x1(%rax),%rdx
  mov    %rax,0x8(%rsp)
  call   <make_binary>
  mov    0x8(%rsp),%r8
  movslq %eax,%r13
  add    %eax,%r14d
  add    %r13,%rbp
  add    %r8,%r13
  jmp    L180
L161:
  lea    D13(%rip),%rdi
  call   <err_message@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L179
```

tool_calls: name: extract_symbolic_data
arguments: label: D8
datatype: string
name: extract_symbolic_data
arguments: label: D13
datatype: string

tool: D8: ):0

tool: D13: Cannot process multibranched tree without branch lengths

assistant: ```c
int make_binary(char *arbre, char *debut, char *fin, int go_down) {
  int virg, l, retval;
  char *p, *q;
  p = debut;
  virg = 0;
  retval = 0;
  while (p < fin) {
    if (*p == ',')
      virg++;
    else if (*p == '(') {
      q = nextpar(p, p);
      if (go_down) {
        l = make_binary(arbre, p + 1, q - 1, (!0));
        fin += l;
        retval += l;
        p = q + l;
      } else
        p = q;
    }
    p++;
  }
  if (virg > 1) {
    if (memchr(debut, ':', fin - debut + 1) == NULL) {
      err_message("Cannot process multibranched tree without branch lengths");
      exit(1);
    }
    p = debut;
    l = 0;
    while ((!0)) {
      if (*p == ',') {
        l++;
        if (l == 2)
          break;
      } else if (*p == '(') {
        p = nextpar(p, p);
      }
      p++;
    }
    l = strlen(p);
    memmove(p + 4, p, l + 1);
    memmove(debut + 1, debut, p - debut);
    *debut = '(';
    memcpy(p + 1, "):0", 3);
    fin += 4;
    retval += 4;
    if (virg > 2)
      retval += make_binary(arbre, debut, fin, 0);
  }
  return retval;
}
```