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

```asm
<codegen>:
  endbr64
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  sub    $0xf8,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x20e8(%rsp)
  xor    %eax,%eax
  movl   $0x5,0x60(%rsp)
  movl   $0x6,0x64(%rsp)
  movl   $0x7,0x68(%rsp)
  movl   $0x8,0x6c(%rsp)
  movl   $0x11,0x70(%rsp)
  movl   $0x12,0x74(%rsp)
  movl   $0x8b,0x78(%rsp)
  movl   $0x8c,0x7c(%rsp)
  movl   $0x8d,0x80(%rsp)
  movl   $0xfb,0x84(%rsp)
  movl   $0xfc,0x88(%rsp)
  movl   $0xfe,0x8c(%rsp)
  movl   $0xff,0x90(%rsp)
  movl   $0x100,0x94(%rsp)
  movl   $0x101,0x98(%rsp)
  movl   $0x102,0x9c(%rsp)
  movl   $0x1d5,0xa0(%rsp)
  movl   $0x1d6,0xa4(%rsp)
  movl   $0x1d7,0xa8(%rsp)
  movl   $0x1d8,0xac(%rsp)
  movl   $0x1d9,0xb0(%rsp)
  movl   $0x1da,0xb4(%rsp)
  movl   $0x1fd,0xb8(%rsp)
  movl   $0x200,0xbc(%rsp)
  movl   $0x201,0xc0(%rsp)
  movl   $0x202,0xc4(%rsp)
  movl   $0x203,0xc8(%rsp)
  movl   $0x204,0xcc(%rsp)
  movl   $0x35b,0xd0(%rsp)
  movl   $0x35c,0xd4(%rsp)
  movl   $0x35d,0xd8(%rsp)
  movl   $0x35e,0xdc(%rsp)
  lea    -0x1(%rsi),%eax
  cmp    $0x1f,%eax
  ja     L39
  mov    %esi,%r11d
  mov    $0x0,%eax
L37:
  movl   $0xffffffff,0x30(%rsp,%rax,1)
  movl   $0xffffffff,(%rsp,%rax,1)
  add    $0x4,%rax
  cmp    $0x28,%rax
  jne    L37
  mov    $0x0,%r9d
  mov    %rsp,%r8
  jmp    L62
L57:
  mov    %r10d,(%rsp)
  mov    %esi,0x30(%rsp)
  add    $0x4,%r9
  cmp    $0xffc,%r9
  je     L71
L62:
  mov    0x24(%rsp),%r10d
  mov    %r10d,0xe0(%rsp,%r9,1)
  mov    0x54(%rsp),%eax
  mov    %eax,0x10e0(%rsp,%r9,1)
  imul   0x8(%rsp),%r10d
  mov    0x34(%rsp),%esi
  imul   0x38(%rsp),%esi
  imul   0x44(%rsp),%esi
  imul   0x4c(%rsp),%esi
  imul   0x50(%rsp),%esi
  imul   %eax,%esi
  lea    0x24(%rsp),%rax
  lea    0x54(%rsp),%rdx
L5:
  mov    -0x4(%rax),%ecx
  mov    %ecx,(%rax)
  mov    -0x4(%rdx),%ecx
  mov    %ecx,(%rdx)
  sub    $0x4,%rax
  sub    $0x4,%rdx
  cmp    %r8,%rax
  jne    L5
  jmp    L57
L71:
  lea    -0x1(%r11),%eax
  cltq
  mov    $0x3ff,%esi
  sub    0x60(%rsp,%rax,4),%esi
  mov    $0x0,%ecx
  lea    0xe0(%rsp),%r9
  mov    $0x1,%r8d
L65:
  lea    (%rsi,%rcx,1),%edx
  movslq %edx,%rax
  imul   $0xffffffff80200803,%rax,%rax
  shr    $0x20,%rax
  add    %edx,%eax
  sar    $0x9,%eax
  mov    %edx,%r10d
  sar    $0x1f,%r10d
  sub    %r10d,%eax
  mov    %eax,%r10d
  shl    $0xa,%r10d
  sub    %eax,%r10d
  sub    %r10d,%edx
  movslq %edx,%rdx
  mov    0x10e0(%rsp,%rdx,4),%eax
  imul   (%r9,%rcx,4),%eax
  mov    %r8d,%edx
  sub    %eax,%edx
  mov    %edx,%eax
  shr    $0x1f,%eax
  add    %edx,%eax
  sar    %eax
  mov    %eax,(%rdi,%rcx,4)
  add    $0x1,%rcx
  cmp    $0x3ff,%rcx
  jne    L65
L39:
  mov    0x20e8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L33
  add    $0x20f8,%rsp
  ret
L33:
  call   <__stack_chk_fail@plt>
```

assistant: ```c
void codegen(int *ca, int prn) {
  int delay[] = {5, 6, 7, 8, 17, 18, 139, 140, 141, 251, 252, 254, 255, 256, 257, 258, 469, 470, 471, 472, 473, 474, 509, 512, 513, 514, 515, 516, 859, 860, 861, 862};
  int g1[1023], g2[1023], r1[10], r2[10], c1, c2;
  int i, j;
  if (prn < 1 || prn > 32)
    return;
  for (i = 0; i < 10; i++)
    r1[i] = r2[i] = -1;
  for (i = 0; i < 1023; i++) {
    g1[i] = r1[9];
    g2[i] = r2[9];
    c1 = r1[2] * r1[9];
    c2 = r2[1] * r2[2] * r2[5] * r2[7] * r2[8] * r2[9];
    for (j = 9; j > 0; j--) {
      r1[j] = r1[j - 1];
      r2[j] = r2[j - 1];
    }
    r1[0] = c1;
    r2[0] = c2;
  }
  for (i = 0, j = 1023 - delay[prn - 1]; i < 1023; i++, j++)
    ca[i] = (1 - g1[i] * g2[j % 1023]) / 2;
  return;
}
```