user: 请从给定的汇编指令推导出C源代码:

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0x14000(%rsp),%r11
L18:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L18
  sub    $0xd58,%rsp
  mov    %edi,%ebx
  mov    %rsi,%r12
  mov    %fs:0x28,%rax
  mov    %rax,0x14d48(%rsp)
  xor    %eax,%eax
  movabs $0x425f6c6c65437325,%rax
  movabs $0x6e5f363530315f4e,%rdx
  mov    %rax,0x13d10(%rsp)
  mov    %rdx,0x13d18(%rsp)
  movabs $0x61705f642565646f,%rax
  movabs $0x6377732e64257472,%rdx
  mov    %rax,0x13d20(%rsp)
  mov    %rdx,0x13d28(%rsp)
  movb   $0x0,0x13d30(%rsp)
  movabs $0x5f74696c70732f2e,%rax
  mov    $0x2f637773,%edx
  mov    %rax,0x14540(%rsp)
  mov    %rdx,0x14548(%rsp)
  lea    0x14550(%rsp),%rdi
  mov    $0x7e,%ecx
  mov    $0x0,%eax
  rep stos %rax,%es:(%rdi)
  movabs $0x5f4e425f6c6c6543,%rax
  movabs $0x2e5d305b36353031,%rdx
  mov    %rax,0x13cf0(%rsp)
  mov    %rdx,0x13cf8(%rsp)
  movabs $0x5d64255b646e6564,%rax
  mov    %rax,0x13d00(%rsp)
  movb   $0x0,0x13d08(%rsp)
  movabs $0x7325732573257325,%rax
  mov    %rax,0x13cc2(%rsp)
  movl   $0x73257325,0x13cca(%rsp)
  movw   $0xa,0x13cce(%rsp)
  movabs $0x435753203a206425,%rax
  mov    %rax,0x13cb8(%rsp)
  movw   $0x28,0x13cc0(%rsp)
  movl   $0x203a2029,0x13cb3(%rsp)
  movb   $0x0,0x13cb7(%rsp)
  movabs $0x666c2520666c2520,%rax
  movabs $0x666c2520666c2520,%rdx
  mov    %rax,0x13cd0(%rsp)
  mov    %rdx,0x13cd8(%rsp)
  movw   $0x20,0x13ce0(%rsp)
  mov    $0x0,%eax
L189:
  movl   $0x0,0x30(%rsp,%rax,1)
  movl   $0x0,0x230(%rsp,%rax,1)
  add    $0x4,%rax
  cmp    $0x200,%rax
  jne    L189
  lea    0x13cf0(%rsp),%rbp
  lea    0x13cb8(%rsp),%rdx
  lea    0x13cc2(%rsp),%rsi
  lea    0x14940(%rsp),%rdi
  push   %rbp
  lea    0x13cd8(%rsp),%rax
  push   %rax
  mov    %rbp,%r9
  lea    0x13cc3(%rsp),%r8
  mov    %rbp,%rcx
  mov    $0x0,%eax
  call   <sprintf@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  add    $0x10,%rsp
  cmp    $0x1,%ebx
  je     L110
  cmp    $0x3,%ebx
  je     L186
L197:
  mov    0x8(%r12),%rdi
  lea    D32(%rip),%rsi
  call   <fopen@plt>
  mov    %rax,%r14
  mov    $0x0,%r13d
  mov    $0x80,%ebx
  mov    $0x0,%ebp
  lea    0x13d40(%rsp),%r12
  lea    D76(%rip),%r15
  jmp    L207
L110:
  lea    D41(%rip),%rdi
  call   <puts@plt>
  mov    $0xffffffff,%eax
  jmp    L191
L186:
  lea    0x14540(%rsp),%rsi
  mov    0x10(%r12),%rdi
  call   <strcpy@plt>
  jmp    L197
L151:
  mov    $0x1,%r8d
  jmp    L147
L188:
  mov    0xc(%rsp),%ecx
  movslq %ecx,%rax
  lea    0x14540(%rsp),%rdx
  lea    0x13d10(%rsp),%rsi
  lea    0x14140(%rsp),%rdi
  mov    0x230(%rsp,%rax,4),%r8d
  mov    $0x0,%eax
  call   <sprintf@plt>
  test   %rbp,%rbp
  je     L2
  mov    %rbp,%rdi
  call   <fclose@plt>
L2:
  lea    0x14140(%rsp),%rdi
  lea    D77(%rip),%rsi
  call   <fopen@plt>
  mov    %rax,%rbp
  mov    %rax,%rdi
  call   <printHeader@plt>
  lea    0x430(%rsp),%rax
  lea    0x13cb0(%rsp),%rdx
L169:
  movl   $0xffffffff,(%rax)
  add    $0x4,%rax
  cmp    %rdx,%rax
  jne    L169
  mov    $0xffffffff,%r8d
  movsd  0x28(%rsp),%xmm3
  movsd  0x20(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm0
  mov    0xc(%rsp),%ecx
  mov    $0x1,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  mov    0x8(%rsp),%edx
  mov    %edx,0x434(%rsp)
  mov    0xc(%rsp),%esi
  lea    D61(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movslq 0xc(%rsp),%rax
  addl   $0x1,0x230(%rsp,%rax,4)
  mov    $0x1,%ebx
  jmp    L146
L29:
  add    $0x1,%rbx
  cmp    $0x80,%rbx
  je     L171
L40:
  mov    %ebx,%esi
  mov    0x30(%rsp,%rbx,4),%edx
  test   %edx,%edx
  je     L29
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L29
L171:
  mov    $0x0,%eax
L191:
  mov    0x14d48(%rsp),%rdx
  sub    %fs:0x28,%rdx
  jne    L32
  add    $0x14d58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L163:
  movsd  0x28(%rsp),%xmm3
  movsd  0x20(%rsp),%xmm2
  movsd  0x18(%rsp),%xmm1
  movsd  0x10(%rsp),%xmm0
  mov    0xc(%rsp),%ecx
  mov    %ebx,%edx
  mov    %r15,%rsi
  mov    %rbp,%rdi
  call   <fprintf@plt>
  movslq %ebx,%rax
  mov    (%rsp),%edx
  mov    %edx,0x430(%rsp,%rax,4)
  add    $0x1,%r13d
  movslq 0xc(%rsp),%rax
  addl   $0x1,0x30(%rsp,%rax,4)
L146:
  add    $0x1,%ebx
L207:
  mov    %r14,%rdx
  mov    $0x400,%esi
  mov    %r12,%rdi
  call   <fgets@plt>
  test   %rax,%rax
  je     L194
  lea    0x8(%rsp),%rcx
  lea    0xc(%rsp),%rdx
  lea    0x14940(%rsp),%rsi
  lea    0x4(%rsp),%rax
  push   %rax
  lea    0x30(%rsp),%rax
  push   %rax
  lea    0x30(%rsp),%rax
  push   %rax
  lea    0x30(%rsp),%rax
  push   %rax
  lea    0x30(%rsp),%r9
  lea    0x20(%rsp),%r8
  mov    %r12,%rdi
  call   <sscanf@plt>
  mov    0x24(%rsp),%edx
  add    $0x20,%rsp
  cmp    $0xffffffff,%edx
  je     L188
  mov    0x434(%rsp),%eax
  cmp    $0xffffffff,%eax
  je     L151
  lea    0x438(%rsp),%rcx
  mov    $0x1,%r8d
L175:
  cmp    %eax,%edx
  je     L163
  add    $0x1,%r8d
  add    $0x4,%rcx
  mov    -0x4(%rcx),%eax
  cmp    $0xffffffff,%eax
  jne    L175
L147:
  mov    %r8d,%edx
  mov    %ebx,%esi
  lea    D14(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
L194:
  mov    %rbp,%rdi
  call   <fclose@plt>
  mov    %r14,%rdi
  call   <fclose@plt>
  mov    %r13d,%esi
  lea    D50(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%ebx
  lea    D11(%rip),%rbp
  jmp    L40
L32:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: data_label: D32
datatype: string
name: disassemble_data
arguments: data_label: D76
datatype: string
name: disassemble_data
arguments: data_label: D41
datatype: string
name: disassemble_data
arguments: data_label: D77
datatype: string
name: disassemble_data
arguments: data_label: D61
datatype: string
name: disassemble_data
arguments: data_label: D14
datatype: string
name: disassemble_data
arguments: data_label: D50
datatype: string
name: disassemble_data
arguments: data_label: D11
datatype: string

tool: D32: r

tool: D76: %d %d %f %f %f %f %d


tool: D41: USEAGE : 

tool: D77: w

tool: D61: node = %d, root = %d


tool: D14: error i=%d j=%d


tool: D50: Total Compartments : %d


tool: D11:  NODE%d : %d comp


assistant: ```c
int main(int argc, char **argv) {
  FILE *fp;
  FILE *output_fp = NULL;
  char buf[1024];
  int table[20000];
  int id, parent, root;
  double x, y, z, diam;
  int i, j, hit;
  int node;
  char filename_template[] = "%sCell_BN_1056_node%d_part%d.swc";
  char filename[1024];
  char dirname[1024] = "./split_swc/";
  char cell_name[] = "Cell_BN_1056[0].dend[%d]";
  char scanf_template[] = "%s%s%s%s%s%s\n";
  char scanf_template1[] = "%d : SWC(";
  char scanf_template2[] = ") : ";
  char scanf_template3[] = " %lf %lf %lf %lf ";
  char scanf_format[1024];
  int comp_counter = 0;
  int comp_counter_node[128];
  int part_node[128];
  for (i = 0; i < 128; i++) {
    comp_counter_node[i] = 0;
    part_node[i] = 0;
  }
  sprintf(scanf_format, scanf_template, scanf_template1, cell_name, scanf_template2, cell_name, scanf_template3, cell_name);
  printf("%s\n", cell_name);
  if (argc == 1) {
    printf("USEAGE : \n");
    return (-1);
  } else if (argc == 3) {
    strcpy(argv[2], dirname);
  }
  fp = fopen(argv[1], "r");
  while (1) {
    if (fgets(buf, 1024, fp) == NULL) {
      break;
    }
    sscanf(buf, scanf_format, &node, &root, &id, &x, &y, &z, &diam, &parent);
    if (parent == -1) {
      sprintf(filename, filename_template, dirname, node, part_node[node]);
      if (output_fp != NULL) {
        fclose(output_fp);
      }
      output_fp = fopen(filename, "w");
      printHeader(output_fp);
      for (i = 0; i < 20000; i++) {
        table[i] = -1;
      }
      fprintf(output_fp, "%d %d %f %f %f %f %d\n", 1, node, x, y, z, diam, -1);
      table[1] = root;
      printf("node = %d, root = %d\n", node, root);
      part_node[node]++;
      i = 1;
    } else {
      j = 1;
      hit = 0;
      while (table[j] != -1) {
        if (table[j] == parent) {
          hit = 1;
          break;
        }
        j++;
      }
      if (hit == 0) {
        printf("error i=%d j=%d\n", i, j);
        break;
      }
      fprintf(output_fp, "%d %d %f %f %f %f %d\n", i, node, x, y, z, diam, j);
      table[i] = id;
      comp_counter++;
      comp_counter_node[node]++;
    }
    i++;
  }
  fclose(output_fp);
  fclose(fp);
  printf("Total Compartments : %d\n", comp_counter);
  for (i = 0; i < 128; i++) {
    if (comp_counter_node[i] != 0) {
      printf(" NODE%d : %d comp\n", i, comp_counter_node[i]);
    }
  }
  return (0);
}
```