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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x48,%rsp
  pxor   %xmm5,%xmm5
  movsd  %xmm5,0x20(%rsp)
  movsd  %xmm5,0x30(%rsp)
  mov    $0x0,%r14d
  mov    $0x0,%r13d
  mov    $0x0,%r12d
  mov    $0x0,%ebx
  movsd  D224(%rip),%xmm3
  movsd  %xmm3,0x18(%rsp)
  movsd  %xmm5,0x10(%rsp)
  movsd  %xmm5,0x8(%rsp)
  lea    D203(%rip),%r15
  lea    D118(%rip),%rbp
  jmp    L23
L79:
  movsd  D191(%rip),%xmm0
  call   <expVA@plt>
  movsd  0x10(%rsp),%xmm7
  addsd  %xmm7,%xmm0
  movsd  %xmm0,0x18(%rsp)
  movsd  %xmm7,0x38(%rsp)
  movsd  %xmm7,0x8(%rsp)
  movsd  0x28(%rsp),%xmm4
  movsd  %xmm4,0x10(%rsp)
  jmp    L22
L16:
  mov    %ebx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  movsd  0x18(%rsp),%xmm4
  movapd %xmm4,%xmm1
  subsd  0x8(%rsp),%xmm1
  mulsd  %xmm1,%xmm0
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,0x20(%rsp)
  sub    $0x1,%ebx
  add    $0x1,%r13d
  mov    %ebx,%edx
  movapd %xmm4,%xmm0
  mov    %r13d,%esi
  mov    %r15,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  add    $0x1,%r14d
  test   %ebx,%ebx
  jne    L25
  movsd  0x30(%rsp),%xmm0
  movsd  0x18(%rsp),%xmm7
  addsd  %xmm7,%xmm0
  subsd  0x38(%rsp),%xmm0
  movsd  %xmm0,0x30(%rsp)
  movsd  %xmm7,0x8(%rsp)
  movsd  D224(%rip),%xmm3
  movsd  %xmm3,0x18(%rsp)
L22:
  movsd  D224(%rip),%xmm0
  comisd 0x8(%rsp),%xmm0
  jbe    L15
L23:
  movsd  0x18(%rsp),%xmm3
  movsd  0x10(%rsp),%xmm2
  comisd %xmm2,%xmm3
  jbe    L16
  mov    %ebx,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  movapd %xmm2,%xmm1
  subsd  0x8(%rsp),%xmm1
  mulsd  %xmm1,%xmm0
  addsd  0x20(%rsp),%xmm0
  movsd  %xmm0,0x20(%rsp)
  add    $0x1,%ebx
  add    $0x1,%r12d
  mov    %ebx,%edx
  movapd %xmm2,%xmm0
  mov    %r12d,%esi
  mov    %rbp,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  D122(%rip),%xmm0
  call   <expVA@plt>
  movapd %xmm0,%xmm6
  addsd  0x10(%rsp),%xmm6
  movsd  %xmm6,0x28(%rsp)
  cmp    $0x1,%ebx
  je     L79
  movsd  0x10(%rsp),%xmm7
  movsd  %xmm7,0x8(%rsp)
  movsd  0x28(%rsp),%xmm4
  movsd  %xmm4,0x10(%rsp)
  jmp    L22
L25:
  movsd  D191(%rip),%xmm0
  call   <expVA@plt>
  movsd  0x18(%rsp),%xmm4
  movsd  %xmm4,0x8(%rsp)
  addsd  %xmm4,%xmm0
  movsd  %xmm0,0x18(%rsp)
  jmp    L22
L15:
  mov    %r14d,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  movsd  0x8(%rsp),%xmm6
  divsd  %xmm6,%xmm0
  movsd  %xmm0,0x10(%rsp)
  movsd  0x20(%rsp),%xmm3
  divsd  %xmm6,%xmm3
  movq   %xmm3,%rbx
  lea    D19(%rip),%rbp
  mov    %rbp,%rdi
  call   <puts@plt>
  lea    D61(%rip),%rdi
  call   <puts@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  movsd  D224(%rip),%xmm0
  lea    D189(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  lea    D219(%rip),%rdi
  call   <puts@plt>
  movsd  D60(%rip),%xmm0
  lea    D53(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  D66(%rip),%xmm0
  lea    D161(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  lea    D172(%rip),%rdi
  call   <puts@plt>
  mov    %r14d,%esi
  lea    D213(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  movsd  0x10(%rsp),%xmm0
  lea    D16(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  0x30(%rsp),%xmm3
  divsd  0x8(%rsp),%xmm3
  movapd %xmm3,%xmm0
  mulsd  D37(%rip),%xmm0
  lea    D149(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movq   %rbx,%xmm0
  lea    D117(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movq   %rbx,%xmm6
  divsd  0x10(%rsp),%xmm6
  movapd %xmm6,%xmm0
  lea    D215(%rip),%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    %rbp,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  add    $0x48,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: read_data
arguments: data_tag: D224
type_guessed: f64
name: read_data
arguments: data_tag: D203
type_guessed: string
name: read_data
arguments: data_tag: D118
type_guessed: string
name: read_data
arguments: data_tag: D191
type_guessed: f32[2]
name: read_data
arguments: data_tag: D122
type_guessed: byte[8]
name: read_data
arguments: data_tag: D19
type_guessed: string
name: read_data
arguments: data_tag: D61
type_guessed: string
name: read_data
arguments: data_tag: D189
type_guessed: string
name: read_data
arguments: data_tag: D219
type_guessed: string
name: read_data
arguments: data_tag: D60
type_guessed: f64
name: read_data
arguments: data_tag: D53
type_guessed: string
name: read_data
arguments: data_tag: D66
type_guessed: f64
name: read_data
arguments: data_tag: D161
type_guessed: string
name: read_data
arguments: data_tag: D172
type_guessed: string
name: read_data
arguments: data_tag: D213
type_guessed: string
name: read_data
arguments: data_tag: D16
type_guessed: string
name: read_data
arguments: data_tag: D37
type_guessed: f64
name: read_data
arguments: data_tag: D149
type_guessed: string
name: read_data
arguments: data_tag: D117
type_guessed: string
name: read_data
arguments: data_tag: D215
type_guessed: string

tool: D224: 1000

tool: D203: Termina mensaje %u en T= %.3f sec --- Paquetes en Concentrador: %u


tool: D118: Llegada de mensaje %u en T= %.3f sec --- Paquetes en Concentrador: %u


tool: {"D191": [0.0,1.5]}

tool: {"D122": [0x92,0x24,0x49,0x92,0x24,0x49,0xc2,0x3f]}

tool: D19: =============================================================== 

tool: D61: =            *** Resultadso de Simulacion MM1 ***             = 

tool: D189: =  Tiempo total simulado                    = %.2f s  


tool: D219: =  Parametros de sistema:                                       

tool: D60: 7

tool: D53: =    Razon de llegada de paquetes           = %.2f paq/s 


tool: D66: 8

tool: D161: =    Razon de servicio de los paquetes      = %.2f paq/s 


tool: D172: =  Resultados:                                                  

tool: D213: =    Numero de paquetes atendidos           = %d paq         


tool: D16: =    Throughput                             = %.2f paq/s     


tool: D37: 100

tool: D149: =    Utilizacion                            = %.2f %% 


tool: D117: =    Numero promedio de paquetes en sistema = %.2f paq       


tool: D215: =    Tiempo promedio de estancia en sistema = %.2f s         


assistant: ```c
int main(void) {
  double end_time = 1.0e3;
  double Ta = 1.0 / 7;
  double Ts = 1.0 / 8;
  double time = 0.0;
  double tarr = 0.0;
  double tdep = 1.0e3;
  unsigned int n = 0;
  unsigned int id = 0;
  unsigned int id2 = 0;
  unsigned int c = 0;
  double b = 0.0;
  double s = 0.0;
  double tn = time;
  double tb;
  double x;
  double u;
  double l;
  double w;
  while (time < end_time) {
    if (tarr < tdep) {
      time = tarr;
      s = s + n * (time - tn);
      n++;
      id++;
      tn = time;
      printf("Llegada de mensaje %u en T= %.3f sec --- Paquetes en Concentrador: %u\n", id, time, n);
      tarr = time + expVA(Ta);
      if (n == 1) {
        tb = time;
        tdep = time + expVA(Ts);
      }
    } else {
      time = tdep;
      s = s + n * (time - tn);
      n--;
      tn = time;
      id2++;
      printf("Termina mensaje %u en T= %.3f sec --- Paquetes en Concentrador: %u\n", id2, time, n);
      c++;
      if (n > 0)
        tdep = time + expVA(Ts);
      else {
        tdep = 1.0e3;
        b = b + time - tb;
      }
    }
  }
  x = c / time;
  u = b / time;
  l = s / time;
  w = l / x;
  printf("=============================================================== \n");
  printf("=            *** Resultadso de Simulacion MM1 ***             = \n");
  printf("=============================================================== \n");
  printf("=  Tiempo total simulado                    = %.2f s  \n", end_time);
  printf("=============================================================== \n");
  printf("=  Parametros de sistema:                                       \n");
  printf("=    Razon de llegada de paquetes           = %.2f paq/s \n", 1.0 / Ta);
  printf("=    Razon de servicio de los paquetes      = %.2f paq/s \n", 1.0 / Ts);
  printf("=============================================================== \n");
  printf("=  Resultados:                                                  \n");
  printf("=    Numero de paquetes atendidos           = %d paq         \n", c);
  printf("=    Throughput                             = %.2f paq/s     \n", x);
  printf("=    Utilizacion                            = %.2f %% \n", 100.0 * u);
  printf("=    Numero promedio de paquetes en sistema = %.2f paq       \n", l);
  printf("=    Tiempo promedio de estancia en sistema = %.2f s         \n", w);
  printf("=============================================================== \n");
}
```