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

```asm
<main>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0xab0,%rsp
  lea    D14(%rip),%rsi
  lea    D2(%rip),%rdi
  xor    %r12d,%r12d
  mov    %fs:0x28,%rax
  mov    %rax,0x3aa8(%rsp)
  xor    %eax,%eax
  lea    0x2720(%rsp),%rbp
  mov    %rsp,%rbx
  lea    0x1390(%rsp),%r14
  call   <fopen@plt>
  mov    %rax,%r13
  jmp    L19
  nopl   0x0(%rax,%rax,1)
L23:
  call   <strlen@plt>
  mov    %rbx,%rsi
  mov    %rbp,%rdi
  sub    $0x1,%eax
  cltq
  movb   $0x20,0x2720(%rsp,%rax,1)
  call   <strcat@plt>
  mov    %rbx,%rdi
  call   <clear_str@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <del_sys_symb@plt>
  mov    %rbp,%rdi
  call   <clear_str@plt>
  mov    %rbp,%rdi
  mov    %rbx,%rsi
  call   <strcpy@plt>
  mov    %rbx,%rdi
  call   <clear_str@plt>
  test   %r12w,%r12w
  je     L55
L45:
  add    $0x1,%r12d
L19:
  mov    %rbx,%rdi
  mov    %r13,%rdx
  mov    $0x320,%esi
  call   <fgets@plt>
  mov    %rbp,%rdi
  test   %rax,%rax
  je     L11
  cmpb   $0x3c,(%rsp)
  jne    L23
  call   <strlen@plt>
  test   %eax,%eax
  jne    L65
L18:
  mov    %r14,%rdi
  call   <clear_str@plt>
  mov    %rbx,%rsi
  mov    %r14,%rdi
  call   <del_sys_symb@plt>
  mov    %rbp,%rdi
  call   <clear_str@plt>
  mov    %r14,%rsi
  mov    %rbp,%rdi
  call   <strcpy@plt>
  mov    %r14,%rdi
  call   <clear_str@plt>
  mov    %rbx,%rdi
  call   <clear_str@plt>
  test   %r12w,%r12w
  jne    L45
L55:
  mov    %rbx,%rdi
  call   <clear_str@plt>
  mov    %rbp,%rsi
  mov    %rbx,%rdi
  call   <clear_first_string@plt>
  mov    %rbp,%rdi
  call   <clear_str@plt>
  mov    %rbp,%rdi
  mov    %rbx,%rsi
  call   <strcpy@plt>
  mov    %rbx,%rdi
  call   <clear_str@plt>
  jmp    L45
  nopl   0x0(%rax,%rax,1)
L11:
  call   <put_str@plt>
  mov    %r13,%rdi
  call   <fclose@plt>
  mov    0x3aa8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L27
  add    $0x3ab0,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
  nopl   0x0(%rax,%rax,1)
L65:
  mov    %rbp,%rdi
  call   <put_str@plt>
  jmp    L18
L27:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D14
type_infered: string
name: retrieve_data
arguments: data_tag: D2
type_infered: string

tool: D14: r

tool: D2: source_file

assistant: ```c
void main() {
  FILE *tmp_file, *source_file;
  char str1[5000];
  char str2[5000];
  char str_tmp[5000];
  int i = 0;
  int j = 0;
  short int str_num = 0;
  short int index_of_symbol = 0;
  short int sc = 0;
  short int prev = 0;
  char concat = 0;
  source_file = fopen("source_file", "r");
  while (fgets(str1, 800, source_file) != 0) {
    if (str1[0] == '<') {
      if (strlen(str_tmp) != 0)
        put_str(str_tmp);
      clear_str(str2);
      del_sys_symb(str2, str1);
      clear_str(str_tmp);
      strcpy(str_tmp, str2);
      clear_str(str2);
      clear_str(str1);
      prev = 1;
      concat = 0;
    } else {
      str_tmp[strlen(str_tmp) - 1] = ' ';
      strcat(str_tmp, str1);
      clear_str(str1);
      del_sys_symb(str1, str_tmp);
      clear_str(str_tmp);
      strcpy(str_tmp, str1);
      clear_str(str1);
      prev = 0;
      concat = 1;
    };
    if (sc == 0) {
      clear_str(str1);
      clear_first_string(str1, str_tmp);
      clear_str(str_tmp);
      strcpy(str_tmp, str1);
      clear_str(str1);
    }
    sc += 1;
  };
  put_str(str_tmp);
  fclose(source_file);
}
```