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

```asm
<raices_c>:
  endbr64
  push   %r12
  lea    D139(%rip),%rdi
  lea    D5(%rip),%r12
  push   %rbp
  lea    D137(%rip),%rbp
  push   %rbx
  sub    $0x40,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x38(%rsp)
  xor    %eax,%eax
  call   <puts@plt>
  lea    D109(%rip),%rdi
  call   <puts@plt>
  lea    D98(%rip),%rdi
  call   <puts@plt>
  lea    0x34(%rsp),%rsi
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  lea    D22(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x1c(%rsp),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  lea    D127(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x20(%rsp),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  lea    D128(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  lea    0x24(%rsp),%rsi
  mov    %rbp,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  lea    D7(%rip),%rdi
  xor    %eax,%eax
  lea    D92(%rip),%rbp
  call   <printf@plt>
  lea    0x2c(%rsp),%rsi
  mov    %r12,%rdi
  xor    %eax,%eax
  call   <scanf@plt>
  movss  0x1c(%rsp),%xmm3
  mov    %rbp,%rdi
  movss  %xmm3,0xc(%rsp)
  call   <system@plt>
  mov    0x34(%rsp),%eax
  movss  0xc(%rsp),%xmm3
  cmp    $0x1,%eax
  je     L18
  cmp    $0x2,%eax
  je     L28
  mov    %rbp,%rdi
  call   <system@plt>
  lea    D46(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  xor    %eax,%eax
  call   <raices@plt>
L16:
  movd   %ebx,%xmm4
  lea    D13(%rip),%rdi
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  cvtss2sd %xmm4,%xmm0
  call   <printf@plt>
  lea    D117(%rip),%rdi
  pxor   %xmm0,%xmm0
  mov    $0x1,%eax
  cvtss2sd 0x28(%rsp),%xmm0
  call   <printf@plt>
  mov    0x30(%rsp),%esi
  xor    %eax,%eax
  lea    D8(%rip),%rdi
  call   <printf@plt>
  mov    0x38(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L46
  add    $0x40,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  nopl   0x0(%rax,%rax,1)
L18:
  mov    0x2c(%rsp),%edi
  lea    0x28(%rsp),%rdx
  lea    0x30(%rsp),%rsi
  movss  0x24(%rsp),%xmm2
  movss  0x20(%rsp),%xmm1
  movss  0x1c(%rsp),%xmm0
  call   <Bisect@plt>
  movd   %xmm0,%ebx
  jmp    L16
  xchg   %ax,%ax
L28:
  mov    0x2c(%rsp),%edi
  lea    0x28(%rsp),%rdx
  lea    0x30(%rsp),%rsi
  movss  0x24(%rsp),%xmm2
  movss  0x20(%rsp),%xmm1
  movss  0x1c(%rsp),%xmm0
  call   <falsa_posicion@plt>
  movd   %xmm0,%ebx
  jmp    L16
L46:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_label: D139
type_infered: string
name: extract_symbolic_data
arguments: data_label: D5
type_infered: string
name: extract_symbolic_data
arguments: data_label: D137
type_infered: string
name: extract_symbolic_data
arguments: data_label: D109
type_infered: string
name: extract_symbolic_data
arguments: data_label: D98
type_infered: string
name: extract_symbolic_data
arguments: data_label: D22
type_infered: string
name: extract_symbolic_data
arguments: data_label: D127
type_infered: string
name: extract_symbolic_data
arguments: data_label: D128
type_infered: string
name: extract_symbolic_data
arguments: data_label: D7
type_infered: string
name: extract_symbolic_data
arguments: data_label: D92
type_infered: string
name: extract_symbolic_data
arguments: data_label: D46
type_infered: string
name: extract_symbolic_data
arguments: data_label: D13
type_infered: string
name: extract_symbolic_data
arguments: data_label: D117
type_infered: string
name: extract_symbolic_data
arguments: data_label: D8
type_infered: string

tool: D139: Elegir el metodo

tool: D5: %d

tool: D137: %f

tool: D109: 1.- Biseccion

tool: D98: 2.- Falsa posicion

tool: D22: 
Dar el valor inical XL: 

tool: D127: 
Dar el valor inical XU: 

tool: D128: 
Dar el valor maximo del error es: 

tool: D7: 
Dar el numero max de iteraciones imax: 

tool: D92: cls

tool: D46: Opcion incorrecta, introducir una opcion correcta

tool: D13: 
La raiz es: %f

tool: D117: 
El error es: %f

tool: D8: 
En %d iteraciones

assistant: ```c
void raices_c() {
  float xl, xu, es, ea, raiz, xr;
  int imax, iter, metodo;
  printf("Elegir el metodo\n");
  printf("1.- Biseccion\n");
  printf("2.- Falsa posicion\n");
  scanf("%d", &metodo);
  printf("\nDar el valor inical XL: ");
  scanf("%f", &xl);
  printf("\nDar el valor inical XU: ");
  scanf("%f", &xu);
  printf("\nDar el valor maximo del error es: ");
  scanf("%f", &es);
  printf("\nDar el numero max de iteraciones imax: ");
  scanf("%d", &imax);
  xr = xl;
  system("cls");
  switch (metodo) {
  case 1:
    raiz = Bisect(xl, xu, es, imax, xr, &iter, &ea);
    break;
  case 2:
    raiz = falsa_posicion(xl, xu, es, imax, xr, &iter, &ea);
    break;
  default:
    system("cls");
    printf("Opcion incorrecta, introducir una opcion correcta");
    raices();
    break;
  }
  printf("\nLa raiz es: %f", raiz);
  printf("\nEl error es: %f", ea);
  printf("\nEn %d iteraciones", iter);
}
```