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

```asm
<run_test>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x20(%rbp),%rax
  mov    $0x1000,%edx
  mov    $0x40,%esi
  mov    %rax,%rdi
  call   <posix_memalign@plt>
  test   %rax,%rax
  jne    L181
  lea    -0x18(%rbp),%rax
  mov    $0x1000,%edx
  mov    $0x40,%esi
  mov    %rax,%rdi
  call   <posix_memalign@plt>
  test   %rax,%rax
  jne    L64
  lea    -0x10(%rbp),%rax
  mov    $0x1000,%edx
  mov    $0x40,%esi
  mov    %rax,%rdi
  call   <posix_memalign@plt>
  test   %rax,%rax
  jne    L80
  mov    -0x10(%rbp),%rdx
  mov    -0x18(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x3ff,%ecx
  mov    %rax,%rdi
  call   <init_data@plt>
  mov    -0x10(%rbp),%rdx
  mov    -0x18(%rbp),%rcx
  mov    -0x20(%rbp),%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <test_citer@plt>
  movl   $0x0,-0x24(%rbp)
  jmp    L77
L98:
  mov    -0x10(%rbp),%rdx
  mov    -0x24(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x20(%rbp),%rcx
  mov    -0x24(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  mov    (%rdx),%ecx
  mov    -0x18(%rbp),%rsi
  mov    -0x24(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rsi,%rdx
  mov    (%rdx),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  je     L121
  mov    $0x0,%eax
  call   <__builtin_abort@plt>
L121:
  addl   $0x1,-0x24(%rbp)
L77:
  cmpl   $0x3fe,-0x24(%rbp)
  jle    L98
  mov    -0x20(%rbp),%rax
  add    $0xffc,%rax
  mov    (%rax),%eax
  cmp    $0x3ff,%eax
  jne    L144
  mov    -0x18(%rbp),%rax
  add    $0xffc,%rax
  mov    (%rax),%eax
  cmp    $0x3ff,%eax
  jne    L144
  mov    -0x10(%rbp),%rax
  add    $0xffc,%rax
  mov    (%rax),%eax
  cmp    $0x3ff,%eax
  je     L110
L144:
  mov    $0x0,%eax
  call   <__builtin_abort@plt>
L110:
  mov    -0x10(%rbp),%rdx
  mov    -0x18(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x3ff,%ecx
  mov    %rax,%rdi
  call   <init_data@plt>
  mov    -0x10(%rbp),%rdx
  mov    -0x18(%rbp),%rsi
  mov    -0x20(%rbp),%rax
  mov    $0x3ff,%ecx
  mov    %rax,%rdi
  call   <test_viter@plt>
  movl   $0x0,-0x24(%rbp)
  jmp    L76
L123:
  mov    -0x10(%rbp),%rdx
  mov    -0x24(%rbp),%eax
  cltq
  shl    $0x2,%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  mov    -0x20(%rbp),%rcx
  mov    -0x24(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rcx,%rdx
  mov    (%rdx),%ecx
  mov    -0x18(%rbp),%rsi
  mov    -0x24(%rbp),%edx
  movslq %edx,%rdx
  shl    $0x2,%rdx
  add    %rsi,%rdx
  mov    (%rdx),%edx
  add    %ecx,%edx
  cmp    %edx,%eax
  je     L129
  mov    $0x0,%eax
  call   <__builtin_abort@plt>
L129:
  addl   $0x1,-0x24(%rbp)
L76:
  cmpl   $0x3fe,-0x24(%rbp)
  jle    L123
  mov    -0x20(%rbp),%rax
  add    $0xffc,%rax
  mov    (%rax),%eax
  cmp    $0x3ff,%eax
  jne    L108
  mov    -0x18(%rbp),%rax
  add    $0xffc,%rax
  mov    (%rax),%eax
  cmp    $0x3ff,%eax
  jne    L108
  mov    -0x10(%rbp),%rax
  add    $0xffc,%rax
  mov    (%rax),%eax
  cmp    $0x3ff,%eax
  je     L100
L108:
  mov    $0x0,%eax
  call   <__builtin_abort@plt>
L100:
  mov    -0x20(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x18(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <free@plt>
  jmp    L35
L181:
  nop
  jmp    L35
L64:
  nop
  jmp    L35
L80:
  nop
L35:
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L26
  call   <__stack_chk_fail@plt>
L26:
  leave
  ret
```

assistant: ```c
void __attribute__((no)) run_test() {
  int *a;
  int *b;
  int *c;
  int i;
  if (posix_memalign((void **)&a, 64, (1023 + 1) * sizeof(int)) != 0)
    return;
  if (posix_memalign((void **)&b, 64, (1023 + 1) * sizeof(int)) != 0)
    return;
  if (posix_memalign((void **)&c, 64, (1023 + 1) * sizeof(int)) != 0)
    return;
  init_data(a, b, c, 1023);
  test_citer(a, b, c);
  for (i = 0; i < 1023; i++)
    if (c[i] != a[i] + b[i])
      __builtin_abort();
  if (a[1023] != 1023 || b[1023] != 1023 || c[1023] != 1023)
    __builtin_abort();
  init_data(a, b, c, 1023);
  test_viter(a, b, c, 1023);
  for (i = 0; i < 1023; i++)
    if (c[i] != a[i] + b[i])
      __builtin_abort();
  if (a[1023] != 1023 || b[1023] != 1023 || c[1023] != 1023)
    __builtin_abort();
  free(a);
  free(b);
  free(c);
}
```