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

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  movsd  D192(%rip),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  D173(%rip),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  D241(%rip),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x70(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  D192(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movl   $0x0,-0x80(%rbp)
  movl   $0x0,-0x7c(%rbp)
  movl   $0x0,-0x78(%rbp)
  movl   $0x0,-0x74(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x58(%rbp)
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  jmp    L77
L26:
  movsd  -0x60(%rbp),%xmm0
  comisd -0x68(%rbp),%xmm0
  jbe    L21
  movsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  test   %rax,%rax
  js     L105
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L35
L105:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L35:
  movsd  -0x70(%rbp),%xmm1
  subsd  -0x48(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  -0x50(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  addl   $0x1,-0x80(%rbp)
  addl   $0x1,-0x7c(%rbp)
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x70(%rbp),%rcx
  mov    -0x7c(%rbp),%eax
  movq   %rcx,%xmm0
  mov    %eax,%esi
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x30(%rbp),%rax
  movq   %rax,%xmm0
  call   <expVA@plt>
  movsd  -0x70(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x68(%rbp)
  cmpl   $0x1,-0x80(%rbp)
  jne    L77
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <expVA@plt>
  movsd  -0x70(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  jmp    L77
L21:
  movsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  mov    -0x80(%rbp),%eax
  test   %rax,%rax
  js     L69
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L111
L69:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L111:
  movsd  -0x70(%rbp),%xmm1
  subsd  -0x48(%rbp),%xmm1
  mulsd  %xmm1,%xmm0
  movsd  -0x50(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x50(%rbp)
  subl   $0x1,-0x80(%rbp)
  movsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  addl   $0x1,-0x78(%rbp)
  mov    -0x80(%rbp),%edx
  mov    -0x70(%rbp),%rcx
  mov    -0x78(%rbp),%eax
  movq   %rcx,%xmm0
  mov    %eax,%esi
  lea    D3(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  addl   $0x1,-0x74(%rbp)
  cmpl   $0x0,-0x80(%rbp)
  je     L96
  mov    -0x28(%rbp),%rax
  movq   %rax,%xmm0
  call   <expVA@plt>
  movsd  -0x70(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0x60(%rbp)
  jmp    L77
L96:
  movsd  D192(%rip),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x58(%rbp),%xmm0
  addsd  -0x70(%rbp),%xmm0
  subsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
L77:
  movsd  -0x38(%rbp),%xmm0
  comisd -0x70(%rbp),%xmm0
  ja     L26
  mov    -0x74(%rbp),%eax
  test   %rax,%rax
  js     L17
  pxor   %xmm0,%xmm0
  cvtsi2sd %rax,%xmm0
  jmp    L116
L17:
  mov    %rax,%rdx
  shr    %rdx
  and    $0x1,%eax
  or     %rax,%rdx
  pxor   %xmm0,%xmm0
  cvtsi2sd %rdx,%xmm0
  addsd  %xmm0,%xmm0
L116:
  divsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x58(%rbp),%xmm0
  divsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x50(%rbp),%xmm0
  divsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x10(%rbp),%xmm0
  divsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  lea    D115(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D128(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D115(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x38(%rbp),%rax
  movq   %rax,%xmm0
  lea    D164(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D115(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D233(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  movsd  D178(%rip),%xmm0
  divsd  -0x30(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  lea    D176(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  D178(%rip),%xmm0
  divsd  -0x28(%rbp),%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  lea    D204(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D115(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  lea    D93(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    -0x74(%rbp),%eax
  mov    %eax,%esi
  lea    D38(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    -0x20(%rbp),%rax
  movq   %rax,%xmm0
  lea    D223(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  movsd  -0x18(%rbp),%xmm1
  movsd  D114(%rip),%xmm0
  mulsd  %xmm0,%xmm1
  movq   %xmm1,%rax
  movq   %rax,%xmm0
  lea    D63(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x10(%rbp),%rax
  movq   %rax,%xmm0
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  mov    -0x8(%rbp),%rax
  movq   %rax,%xmm0
  lea    D72(%rip),%rax
  mov    %rax,%rdi
  mov    $0x1,%eax
  call   <printf@plt>
  lea    D115(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x0,%eax
  leave
  ret
```

tool_calls: name: retrieve_data
arguments: label: D192
type_infered: f64
name: retrieve_data
arguments: label: D173
type_infered: byte[8]
name: retrieve_data
arguments: label: D241
type_infered: f32[2]
name: retrieve_data
arguments: label: D37
type_infered: string
name: retrieve_data
arguments: label: D3
type_infered: string
name: retrieve_data
arguments: label: D115
type_infered: string
name: retrieve_data
arguments: label: D128
type_infered: string
name: retrieve_data
arguments: label: D164
type_infered: string
name: retrieve_data
arguments: label: D233
type_infered: string
name: retrieve_data
arguments: label: D178
type_infered: f64
name: retrieve_data
arguments: label: D176
type_infered: string
name: retrieve_data
arguments: label: D204
type_infered: string
name: retrieve_data
arguments: label: D93
type_infered: string
name: retrieve_data
arguments: label: D38
type_infered: string
name: retrieve_data
arguments: label: D223
type_infered: string
name: retrieve_data
arguments: label: D114
type_infered: f64
name: retrieve_data
arguments: label: D63
type_infered: string
name: retrieve_data
arguments: label: D50
type_infered: string
name: retrieve_data
arguments: label: D72
type_infered: string

tool: D192: 1000

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

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

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


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


tool: D115: =============================================================== 

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

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


tool: D233: =  Parametros de sistema:                                       

tool: D178: 1

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


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


tool: D93: =  Resultados:                                                  

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


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


tool: D114: 100

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


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


tool: D72: =    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");
}
```