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

```asm
<matrix_ij_G>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xe0,%rsp
  mov    %edi,-0x124(%rbp)
  mov    %rsi,-0x130(%rbp)
  movsd  %xmm0,-0x138(%rbp)
  movsd  %xmm1,-0x140(%rbp)
  movsd  %xmm2,-0x148(%rbp)
  movsd  %xmm3,-0x150(%rbp)
  movsd  %xmm4,-0x158(%rbp)
  movsd  -0x150(%rbp),%xmm1
  movsd  D8(%rip),%xmm0
  mulsd  %xmm1,%xmm0
  movsd  %xmm0,-0x118(%rbp)
  movsd  -0x158(%rbp),%xmm0
  movsd  %xmm0,-0x110(%rbp)
  movsd  -0x158(%rbp),%xmm0
  movapd %xmm0,%xmm1
  addsd  %xmm0,%xmm1
  movsd  -0x150(%rbp),%xmm0
  subsd  %xmm1,%xmm0
  movsd  %xmm0,-0x108(%rbp)
  movsd  -0x138(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0x100(%rbp)
  movsd  -0x140(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0xf8(%rbp)
  movsd  -0x148(%rbp),%xmm0
  mulsd  %xmm0,%xmm0
  movsd  %xmm0,-0xf0(%rbp)
  movsd  -0x138(%rbp),%xmm0
  mulsd  -0x140(%rbp),%xmm0
  movsd  %xmm0,-0xe8(%rbp)
  movsd  -0x140(%rbp),%xmm0
  mulsd  -0x148(%rbp),%xmm0
  movsd  %xmm0,-0xe0(%rbp)
  movsd  -0x148(%rbp),%xmm0
  mulsd  -0x138(%rbp),%xmm0
  movsd  %xmm0,-0xd8(%rbp)
  movsd  -0x100(%rbp),%xmm0
  mulsd  -0x138(%rbp),%xmm0
  movsd  %xmm0,-0xd0(%rbp)
  movsd  -0x100(%rbp),%xmm0
  mulsd  -0x140(%rbp),%xmm0
  movsd  %xmm0,-0xc8(%rbp)
  movsd  -0x100(%rbp),%xmm0
  mulsd  -0x148(%rbp),%xmm0
  movsd  %xmm0,-0xc0(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  mulsd  -0x140(%rbp),%xmm0
  movsd  %xmm0,-0xb8(%rbp)
  movsd  -0xe8(%rbp),%xmm0
  mulsd  -0x148(%rbp),%xmm0
  movsd  %xmm0,-0xb0(%rbp)
  movsd  -0xd8(%rbp),%xmm0
  mulsd  -0x148(%rbp),%xmm0
  movsd  %xmm0,-0xa8(%rbp)
  movsd  -0xf8(%rbp),%xmm0
  mulsd  -0x140(%rbp),%xmm0
  movsd  %xmm0,-0xa0(%rbp)
  movsd  -0xf8(%rbp),%xmm0
  mulsd  -0x148(%rbp),%xmm0
  movsd  %xmm0,-0x98(%rbp)
  movsd  -0xe0(%rbp),%xmm0
  mulsd  -0x148(%rbp),%xmm0
  movsd  %xmm0,-0x90(%rbp)
  movsd  -0xf0(%rbp),%xmm0
  mulsd  -0x148(%rbp),%xmm0
  movsd  %xmm0,-0x88(%rbp)
  movsd  -0x118(%rbp),%xmm0
  mulsd  -0x138(%rbp),%xmm0
  movsd  %xmm0,-0x80(%rbp)
  movsd  -0x118(%rbp),%xmm0
  mulsd  -0x140(%rbp),%xmm0
  movsd  %xmm0,-0x78(%rbp)
  movsd  -0x118(%rbp),%xmm0
  mulsd  -0x148(%rbp),%xmm0
  movsd  %xmm0,-0x70(%rbp)
  movsd  -0x110(%rbp),%xmm0
  mulsd  -0x138(%rbp),%xmm0
  movsd  %xmm0,-0x68(%rbp)
  movsd  -0x110(%rbp),%xmm0
  mulsd  -0x140(%rbp),%xmm0
  movsd  %xmm0,-0x60(%rbp)
  movsd  -0x110(%rbp),%xmm0
  mulsd  -0x148(%rbp),%xmm0
  movsd  %xmm0,-0x58(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0xd0(%rbp),%xmm0
  movsd  %xmm0,-0x50(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0xc8(%rbp),%xmm0
  movsd  %xmm0,-0x48(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0xc0(%rbp),%xmm0
  movsd  %xmm0,-0x40(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0xb8(%rbp),%xmm0
  movsd  %xmm0,-0x38(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0xb0(%rbp),%xmm0
  movsd  %xmm0,-0x30(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0xa8(%rbp),%xmm0
  movsd  %xmm0,-0x28(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0xa0(%rbp),%xmm0
  movsd  %xmm0,-0x20(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0x98(%rbp),%xmm0
  movsd  %xmm0,-0x18(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0x90(%rbp),%xmm0
  movsd  %xmm0,-0x10(%rbp)
  movsd  -0x108(%rbp),%xmm0
  mulsd  -0x88(%rbp),%xmm0
  movsd  %xmm0,-0x8(%rbp)
  mov    -0x130(%rbp),%rax
  movsd  (%rax),%xmm0
  addsd  -0x80(%rbp),%xmm0
  mov    -0x130(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x130(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x130(%rbp),%rax
  add    $0x8,%rax
  addsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x130(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x130(%rbp),%rax
  add    $0x10,%rax
  addsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x80(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x78(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x70(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x130(%rbp),%rax
  movsd  (%rax),%xmm1
  movsd  -0x68(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  addsd  %xmm1,%xmm0
  mov    -0x130(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x68(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x58(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x60(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm1
  movsd  -0x60(%rbp),%xmm0
  addsd  %xmm0,%xmm0
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  %xmm1,%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x130(%rbp),%rax
  movsd  (%rax),%xmm0
  addsd  -0x50(%rbp),%xmm0
  mov    -0x130(%rbp),%rax
  movsd  %xmm0,(%rax)
  mov    -0x130(%rbp),%rax
  add    $0x8,%rax
  movsd  (%rax),%xmm0
  mov    -0x130(%rbp),%rax
  add    $0x8,%rax
  addsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x130(%rbp),%rax
  add    $0x10,%rax
  movsd  (%rax),%xmm0
  mov    -0x130(%rbp),%rax
  add    $0x10,%rax
  addsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x48(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x40(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  add    %eax,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x28(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x30(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%edx
  mov    %edx,%eax
  add    %eax,%eax
  add    %edx,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x10(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x38(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x1,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x20(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  movsd  (%rax),%xmm0
  mov    -0x124(%rbp),%eax
  shl    $0x2,%eax
  cltq
  add    $0x2,%rax
  lea    0x0(,%rax,8),%rdx
  mov    -0x130(%rbp),%rax
  add    %rdx,%rax
  addsd  -0x18(%rbp),%xmm0
  movsd  %xmm0,(%rax)
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D8
type: byte[8]

tool: {"D8": [0x55,0x55,0x55,0x55,0x55,0x55,0xd5,0xbf]}

assistant: ```c
void matrix_ij_G(int n, double *mat, double ex, double ey, double ez, double xg, double yg) {
  double g1, g2, g3;
  double g1x, g1y, g1z;
  double g2x, g2y, g2z;
  double g3xxx, g3xxy, g3xxz, g3xyy, g3xyz, g3yyy, g3yyz, g3yzz, g3xzz, g3zzz;
  double exx, eyy, ezz, exy, eyz, exz;
  double exxx, exxy, exxz, exyy, exyz, exzz, eyyy, eyyz, eyzz, ezzz;
  g1 = -1.0 / 3.0 * xg;
  g2 = yg;
  g3 = xg - 2.0 * yg;
  exx = ex * ex;
  eyy = ey * ey;
  ezz = ez * ez;
  exy = ex * ey;
  eyz = ey * ez;
  exz = ez * ex;
  exxx = exx * ex;
  exxy = exx * ey;
  exxz = exx * ez;
  exyy = exy * ey;
  exyz = exy * ez;
  exzz = exz * ez;
  eyyy = eyy * ey;
  eyyz = eyy * ez;
  eyzz = eyz * ez;
  ezzz = ezz * ez;
  g1x = g1 * ex;
  g1y = g1 * ey;
  g1z = g1 * ez;
  g2x = g2 * ex;
  g2y = g2 * ey;
  g2z = g2 * ez;
  g3xxx = g3 * exxx;
  g3xxy = g3 * exxy;
  g3xxz = g3 * exxz;
  g3xyy = g3 * exyy;
  g3xyz = g3 * exyz;
  g3xzz = g3 * exzz;
  g3yyy = g3 * eyyy;
  g3yyz = g3 * eyyz;
  g3yzz = g3 * eyzz;
  g3zzz = g3 * ezzz;
  mat[0 * n + 0] += g1x;
  mat[0 * n + 1] += g1y;
  mat[0 * n + 2] += g1z;
  mat[4 * n + 0] += g1x;
  mat[4 * n + 1] += g1y;
  mat[4 * n + 2] += g1z;
  mat[0 * n + 0] += 2.0 * g2x;
  mat[1 * n + 0] += g2y;
  mat[1 * n + 1] += g2x;
  mat[2 * n + 0] += g2z;
  mat[2 * n + 2] += g2x;
  mat[3 * n + 1] += g2z;
  mat[3 * n + 2] += g2y;
  mat[4 * n + 1] += 2.0 * g2y;
  mat[0 * n + 0] += g3xxx;
  mat[0 * n + 1] += g3xxy;
  mat[0 * n + 2] += g3xxz;
  mat[1 * n + 0] += g3xxy;
  mat[1 * n + 1] += g3xyy;
  mat[1 * n + 2] += g3xyz;
  mat[2 * n + 0] += g3xxz;
  mat[2 * n + 1] += g3xyz;
  mat[2 * n + 2] += g3xzz;
  mat[3 * n + 0] += g3xyz;
  mat[3 * n + 1] += g3yyz;
  mat[3 * n + 2] += g3yzz;
  mat[4 * n + 0] += g3xyy;
  mat[4 * n + 1] += g3yyy;
  mat[4 * n + 2] += g3yyz;
}
```