user: Converte this assembly snippet into its equivalent C code:

```asm
<rys_coulomb_repulsion>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbx
  sub    $0x168,%rsp
  movsd  %xmm0,-0xf8(%rbp)
  movsd  %xmm1,-0x100(%rbp)
  movsd  %xmm2,-0x108(%rbp)
  movsd  %xmm3,-0x110(%rbp)
  mov    %edi,-0x114(%rbp)
  mov    %esi,-0x118(%rbp)
  mov    %edx,-0x11c(%rbp)
  movsd  %xmm4,-0x128(%rbp)
  movsd  %xmm5,-0x130(%rbp)
  movsd  %xmm6,-0x138(%rbp)
  movsd  %xmm7,-0x140(%rbp)
  mov    %ecx,-0x120(%rbp)
  mov    %r8d,-0x144(%rbp)
  mov    %r9d,-0x148(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x38(%rbp)
  xor    %eax,%eax
  mov    %rsp,%rax
  mov    %rax,%rbx
  mov    -0x114(%rbp),%edx
  mov    -0x118(%rbp),%eax
  add    %eax,%edx
  mov    -0x11c(%rbp),%eax
  add    %eax,%edx
  mov    -0x120(%rbp),%eax
  add    %eax,%edx
  mov    -0x148(%rbp),%eax
  add    %eax,%edx
  mov    -0x144(%rbp),%eax
  add    %eax,%edx
  mov    0x40(%rbp),%eax
  add    %eax,%edx
  mov    0x48(%rbp),%eax
  add    %eax,%edx
  mov    0x50(%rbp),%eax
  add    %eax,%edx
  mov    0x80(%rbp),%eax
  add    %eax,%edx
  mov    0x88(%rbp),%eax
  add    %eax,%edx
  mov    0x90(%rbp),%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  add    $0x1,%eax
  mov    %eax,-0xec(%rbp)
  movsd  -0x128(%rbp),%xmm0
  addsd  0x18(%rbp),%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  movsd  0x58(%rbp),%xmm0
  addsd  0x98(%rbp),%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0xe0(%rbp),%xmm0
  mulsd  -0xd8(%rbp),%xmm0
  movsd  -0xe0(%rbp),%xmm1
  addsd  -0xd8(%rbp),%xmm1
  divsd  %xmm1,%xmm0
  movsd  %xmm0,-0xd0(%rbp)
  movsd  -0x130(%rbp),%xmm2
  movsd  0x18(%rbp),%xmm1
  movsd  -0xf8(%rbp),%xmm0
  mov    -0x128(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <product_center_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0xc8(%rbp)
  movsd  -0x138(%rbp),%xmm2
  movsd  0x18(%rbp),%xmm1
  movsd  -0x100(%rbp),%xmm0
  mov    -0x128(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <product_center_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0xc0(%rbp)
  movsd  -0x140(%rbp),%xmm2
  movsd  0x18(%rbp),%xmm1
  movsd  -0x108(%rbp),%xmm0
  mov    -0x128(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <product_center_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0xb8(%rbp)
  movsd  0x60(%rbp),%xmm2
  movsd  0x98(%rbp),%xmm1
  movsd  0x20(%rbp),%xmm0
  mov    0x58(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <product_center_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0xb0(%rbp)
  movsd  0x68(%rbp),%xmm2
  movsd  0x98(%rbp),%xmm1
  movsd  0x28(%rbp),%xmm0
  mov    0x58(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <product_center_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0xa8(%rbp)
  movsd  0x70(%rbp),%xmm2
  movsd  0x98(%rbp),%xmm1
  movsd  0x30(%rbp),%xmm0
  mov    0x58(%rbp),%rax
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <product_center_1D@plt>
  movq   %xmm0,%rax
  mov    %rax,-0xa0(%rbp)
  movsd  -0xa0(%rbp),%xmm4
  movsd  -0xa8(%rbp),%xmm3
  movsd  -0xb0(%rbp),%xmm2
  movsd  -0xb8(%rbp),%xmm1
  movsd  -0xc0(%rbp),%xmm0
  mov    -0xc8(%rbp),%rax
  movapd %xmm4,%xmm5
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <dist2@plt>
  movq   %xmm0,%rax
  mov    %rax,-0x98(%rbp)
  movsd  -0x98(%rbp),%xmm0
  mulsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  mov    -0xec(%rbp),%edx
  movslq %edx,%rax
  sub    $0x1,%rax
  mov    %rax,-0x88(%rbp)
  movslq %edx,%rax
  mov    %rax,-0x160(%rbp)
  movq   $0x0,-0x158(%rbp)
  movslq %edx,%rax
  mov    %rax,-0x170(%rbp)
  movq   $0x0,-0x168(%rbp)
  movslq %edx,%rax
  lea    0x0(,%rax,8),%rdx
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%edi
  mov    $0x0,%edx
  div    %rdi
  imul   $0x10,%rax,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L20:
  cmp    %rdx,%rsp
  je     L117
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L20
L117:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L11
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L11:
  mov    %rsp,%rax
  add    $0x7,%rax
  shr    $0x3,%rax
  shl    $0x3,%rax
  mov    %rax,-0x80(%rbp)
  mov    -0xec(%rbp),%eax
  movslq %eax,%rdx
  sub    $0x1,%rdx
  mov    %rdx,-0x78(%rbp)
  movslq %eax,%rdx
  mov    %rdx,-0x180(%rbp)
  movq   $0x0,-0x178(%rbp)
  movslq %eax,%rdx
  mov    %rdx,-0x190(%rbp)
  movq   $0x0,-0x188(%rbp)
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%edi
  mov    $0x0,%edx
  div    %rdi
  imul   $0x10,%rax,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L25:
  cmp    %rdx,%rsp
  je     L23
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L25
L23:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L85
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L85:
  mov    %rsp,%rax
  add    $0x7,%rax
  shr    $0x3,%rax
  shl    $0x3,%rax
  mov    %rax,-0x70(%rbp)
  mov    -0x114(%rbp),%edx
  mov    -0x120(%rbp),%eax
  add    %eax,%edx
  mov    -0x118(%rbp),%eax
  add    %eax,%edx
  mov    -0x144(%rbp),%eax
  add    %eax,%edx
  mov    -0x11c(%rbp),%eax
  add    %eax,%edx
  mov    -0x148(%rbp),%eax
  add    %edx,%eax
  lea    0x1(%rax),%ecx
  movslq %ecx,%rax
  sub    $0x1,%rax
  mov    %rax,-0x68(%rbp)
  movslq %ecx,%rax
  mov    %rax,%r14
  mov    $0x0,%r15d
  imul   $0x1c0,%r15,%rdx
  imul   $0x0,%r14,%rax
  lea    (%rdx,%rax,1),%rsi
  mov    $0x1c0,%eax
  mul    %r14
  add    %rdx,%rsi
  mov    %rsi,%rdx
  movslq %ecx,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  shl    $0x3,%rax
  movslq %ecx,%rax
  mov    %rax,%r12
  mov    $0x0,%r13d
  imul   $0x1c0,%r13,%rdx
  imul   $0x0,%r12,%rax
  lea    (%rdx,%rax,1),%rsi
  mov    $0x1c0,%eax
  mul    %r12
  add    %rdx,%rsi
  mov    %rsi,%rdx
  movslq %ecx,%rdx
  mov    %rdx,%rax
  shl    $0x3,%rax
  sub    %rdx,%rax
  shl    $0x3,%rax
  mov    %rax,%rdx
  mov    $0x10,%eax
  sub    $0x1,%rax
  add    %rdx,%rax
  mov    $0x10,%edi
  mov    $0x0,%edx
  div    %rdi
  imul   $0x10,%rax,%rax
  mov    %rax,%rcx
  and    $0xfffffffffffff000,%rcx
  mov    %rsp,%rdx
  sub    %rcx,%rdx
L66:
  cmp    %rdx,%rsp
  je     L84
  sub    $0x1000,%rsp
  orq    $0x0,0xff8(%rsp)
  jmp    L66
L84:
  mov    %rax,%rdx
  and    $0xfff,%edx
  sub    %rdx,%rsp
  mov    %rax,%rdx
  and    $0xfff,%edx
  test   %rdx,%rdx
  je     L96
  and    $0xfff,%eax
  sub    $0x8,%rax
  add    %rsp,%rax
  orq    $0x0,(%rax)
L96:
  mov    %rsp,%rax
  add    $0x7,%rax
  shr    $0x3,%rax
  shl    $0x3,%rax
  mov    %rax,-0x60(%rbp)
  mov    -0x70(%rbp),%rdx
  mov    -0x80(%rbp),%rsi
  mov    -0x90(%rbp),%rcx
  mov    -0xec(%rbp),%eax
  movq   %rcx,%xmm0
  mov    %eax,%edi
  call   <Roots@plt>
  pxor   %xmm0,%xmm0
  movsd  %xmm0,-0xe8(%rbp)
  movl   $0x0,-0xf0(%rbp)
  jmp    L24
L18:
  mov    -0x80(%rbp),%rax
  mov    -0xf0(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rax,%rdx,8),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  mov    -0x60(%rbp),%r8
  movsd  0x58(%rbp),%xmm6
  movsd  0x18(%rbp),%xmm5
  movsd  -0x128(%rbp),%xmm4
  movsd  0x60(%rbp),%xmm3
  movsd  0x20(%rbp),%xmm2
  movsd  -0x130(%rbp),%xmm1
  movsd  -0xf8(%rbp),%xmm0
  mov    0x80(%rbp),%ecx
  mov    0x40(%rbp),%edx
  mov    -0x120(%rbp),%esi
  mov    -0x114(%rbp),%edi
  mov    -0x58(%rbp),%rax
  sub    $0x8,%rsp
  push   0x98(%rbp)
  movapd %xmm6,%xmm7
  movapd %xmm5,%xmm6
  movapd %xmm4,%xmm5
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <Int1d@plt>
  add    $0x10,%rsp
  movq   %xmm0,%rax
  mov    %rax,-0x50(%rbp)
  mov    -0x60(%rbp),%r8
  movsd  0x58(%rbp),%xmm6
  movsd  0x18(%rbp),%xmm5
  movsd  -0x128(%rbp),%xmm4
  movsd  0x68(%rbp),%xmm3
  movsd  0x28(%rbp),%xmm2
  movsd  -0x138(%rbp),%xmm1
  movsd  -0x100(%rbp),%xmm0
  mov    0x88(%rbp),%ecx
  mov    0x48(%rbp),%edx
  mov    -0x144(%rbp),%esi
  mov    -0x118(%rbp),%edi
  mov    -0x58(%rbp),%rax
  sub    $0x8,%rsp
  push   0x98(%rbp)
  movapd %xmm6,%xmm7
  movapd %xmm5,%xmm6
  movapd %xmm4,%xmm5
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <Int1d@plt>
  add    $0x10,%rsp
  movq   %xmm0,%rax
  mov    %rax,-0x48(%rbp)
  mov    -0x60(%rbp),%r8
  movsd  0x58(%rbp),%xmm6
  movsd  0x18(%rbp),%xmm5
  movsd  -0x128(%rbp),%xmm4
  movsd  0x70(%rbp),%xmm3
  movsd  0x30(%rbp),%xmm2
  movsd  -0x140(%rbp),%xmm1
  movsd  -0x108(%rbp),%xmm0
  mov    0x90(%rbp),%ecx
  mov    0x50(%rbp),%edx
  mov    -0x148(%rbp),%esi
  mov    -0x11c(%rbp),%edi
  mov    -0x58(%rbp),%rax
  sub    $0x8,%rsp
  push   0x98(%rbp)
  movapd %xmm6,%xmm7
  movapd %xmm5,%xmm6
  movapd %xmm4,%xmm5
  movapd %xmm3,%xmm4
  movapd %xmm2,%xmm3
  movapd %xmm1,%xmm2
  movapd %xmm0,%xmm1
  movq   %rax,%xmm0
  call   <Int1d@plt>
  add    $0x10,%rsp
  movq   %xmm0,%rax
  mov    %rax,-0x40(%rbp)
  movsd  -0x50(%rbp),%xmm0
  mulsd  -0x48(%rbp),%xmm0
  movapd %xmm0,%xmm1
  mulsd  -0x40(%rbp),%xmm1
  mov    -0x70(%rbp),%rax
  mov    -0xf0(%rbp),%edx
  movslq %edx,%rdx
  movsd  (%rax,%rdx,8),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  -0xe8(%rbp),%xmm1
  addsd  %xmm1,%xmm0
  movsd  %xmm0,-0xe8(%rbp)
  addl   $0x1,-0xf0(%rbp)
L24:
  mov    -0xf0(%rbp),%eax
  cmp    -0xec(%rbp),%eax
  jl     L18
  movsd  -0xd0(%rbp),%xmm0
  movsd  D3(%rip),%xmm1
  divsd  %xmm1,%xmm0
  movq   %xmm0,%rax
  movq   %rax,%xmm0
  call   <sqrt@plt>
  add    %eax,%eax
  pxor   %xmm0,%xmm0
  cvtsi2sd %eax,%xmm0
  mulsd  -0x110(%rbp),%xmm0
  mulsd  0x10(%rbp),%xmm0
  mulsd  0x38(%rbp),%xmm0
  mulsd  0x78(%rbp),%xmm0
  mulsd  -0xe8(%rbp),%xmm0
  mov    %rbx,%rsp
  movq   %xmm0,%rax
  mov    -0x38(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L44
  call   <__stack_chk_fail@plt>
L44:
  movq   %rax,%xmm0
  lea    -0x28(%rbp),%rsp
  pop    %rbx
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  pop    %rbp
  ret
```

tool_calls: name: parse_data
arguments: label: D3
type: f64

tool: D3: 3.141592653589793

assistant: ```c
double rys_coulomb_repulsion(double xa, double ya, double za, double norma, int la, int ma, int na, double alphaa, double xb, double yb, double zb, double normb, int lb, int mb, int nb, double alphab, double xc, double yc, double zc, double normc, int lc, int mc, int nc, double alphac, double xd, double yd, double zd, double normd, int ld, int md, int nd, double alphad) {
  int norder, i;
  double A, B, xp, yp, zp, xq, yq, zq, rpq2, X, rho, sum, t, Ix, Iy, Iz;
  norder = (la + ma + na + lb + nb + mb + lc + mc + nc + ld + md + nd) / 2 + 1;
  A = alphaa + alphab;
  B = alphac + alphad;
  rho = A * B / (A + B);
  xp = product_center_1D(alphaa, xa, alphab, xb);
  yp = product_center_1D(alphaa, ya, alphab, yb);
  zp = product_center_1D(alphaa, za, alphab, zb);
  xq = product_center_1D(alphac, xc, alphad, xd);
  yq = product_center_1D(alphac, yc, alphad, yd);
  zq = product_center_1D(alphac, zc, alphad, zd);
  rpq2 = dist2(xp, yp, zp, xq, yq, zq);
  X = rpq2 * rho;
  double roots[norder], weights[norder];
  double G[la + lb + ma + mb + na + nb + 1][7];
  Roots(norder, X, roots, weights);
  sum = 0.;
  for (i = 0; i < norder; i++) {
    t = roots[i];
    Ix = Int1d(t, la, lb, lc, ld, xa, xb, xc, xd, alphaa, alphab, alphac, alphad, G);
    Iy = Int1d(t, ma, mb, mc, md, ya, yb, yc, yd, alphaa, alphab, alphac, alphad, G);
    Iz = Int1d(t, na, nb, nc, nd, za, zb, zc, zd, alphaa, alphab, alphac, alphad, G);
    sum = sum + Ix * Iy * Iz * weights[i];
  }
  return 2 * sqrt(rho / 3.14159265358979323846) * norma * normb * normc * normd * sum;
}
```