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

```asm
<daub4>:
  endbr64
  push   %r12
  push   %rbp
  push   %rbx
  lea    -0x4000(%rsp),%r11
L183:
  sub    $0x1000,%rsp
  orq    $0x0,(%rsp)
  cmp    %r11,%rsp
  jne    L183
  sub    $0x90,%rsp
  mov    %edx,%eax
  mov    %fs:0x28,%rdx
  mov    %rdx,0x4088(%rsp)
  xor    %edx,%edx
  cmp    $0x3,%rsi
  jbe    L58
  pxor   %xmm4,%xmm4
  pxor   %xmm3,%xmm3
  lea    -0x4(%rdi),%r8
  mov    %rsi,%rcx
  movsd  D257(%rip),%xmm5
  cvtss2sd -0x4(%rdi,%rsi,4),%xmm4
  cvtss2sd (%rdi),%xmm3
  movsd  %xmm4,0x60(%rsp)
  shr    %rcx
  lea    0x0(,%rsi,4),%rdx
  movsd  %xmm3,0x78(%rsp)
  movapd %xmm3,%xmm0
  mulsd  %xmm4,%xmm5
  movsd  D257(%rip),%xmm4
  mulsd  %xmm3,%xmm4
  movsd  %xmm5,0x68(%rsp)
  movsd  %xmm4,0x70(%rsp)
  test   %eax,%eax
  js     L128
  lea    -0x1(%rcx),%rax
  lea    -0x3(%rsi),%r9
  sub    $0x4,%rsi
  cmp    $0x2,%rax
  jbe    L160
  cmp    $0x5,%rsi
  jbe    L160
  mov    %rsi,%r12
  movapd D257(%rip),%xmm6
  movapd D153(%rip),%xmm5
  lea    0x84(%rsp,%rcx,4),%rbx
  shr    %r12
  movapd D301(%rip),%xmm4
  xor    %eax,%eax
  movapd D148(%rip),%xmm3
  add    $0x1,%r12
  lea    0x84(%rsp),%r10
  mov    %r12,%r11
  shr    $0x2,%r11
  shl    $0x4,%r11
  xchg   %ax,%ax
L65:
  movups 0x10(%rdi,%rax,2),%xmm0
  movups (%rdi,%rax,2),%xmm2
  movups 0x18(%rdi,%rax,2),%xmm9
  movaps %xmm2,%xmm1
  shufps $0xdd,%xmm0,%xmm2
  cvtps2pd %xmm2,%xmm14
  movhlps %xmm2,%xmm11
  movups 0x8(%rdi,%rax,2),%xmm2
  shufps $0x88,%xmm0,%xmm1
  cvtps2pd %xmm1,%xmm0
  cvtps2pd %xmm11,%xmm10
  movhps %xmm1,(%rsp)
  movapd %xmm10,%xmm15
  cvtps2pd (%rsp),%xmm1
  mulpd  %xmm6,%xmm15
  movaps %xmm2,%xmm7
  shufps $0xdd,%xmm9,%xmm2
  cvtps2pd %xmm2,%xmm12
  shufps $0x88,%xmm9,%xmm7
  movhps %xmm2,0x20(%rsp)
  cvtps2pd %xmm7,%xmm13
  movapd %xmm14,%xmm2
  movhps %xmm7,0x10(%rsp)
  movapd %xmm0,%xmm7
  cvtps2pd 0x10(%rsp),%xmm9
  cvtps2pd 0x20(%rsp),%xmm8
  mulpd  %xmm6,%xmm2
  mulpd  %xmm5,%xmm7
  mulpd  %xmm3,%xmm0
  mulpd  %xmm4,%xmm14
  mulpd  %xmm4,%xmm10
  addpd  %xmm2,%xmm7
  movapd %xmm13,%xmm2
  mulpd  %xmm4,%xmm2
  mulpd  %xmm6,%xmm13
  subpd  %xmm14,%xmm0
  addpd  %xmm7,%xmm2
  movapd %xmm12,%xmm7
  mulpd  %xmm3,%xmm7
  addpd  %xmm13,%xmm0
  mulpd  %xmm5,%xmm12
  addpd  %xmm7,%xmm2
  movapd %xmm1,%xmm7
  mulpd  %xmm5,%xmm7
  subpd  %xmm12,%xmm0
  mulpd  %xmm3,%xmm1
  cvtpd2ps %xmm2,%xmm2
  movapd %xmm0,%xmm13
  cvtpd2ps %xmm13,%xmm13
  addpd  %xmm15,%xmm7
  movapd %xmm9,%xmm15
  mulpd  %xmm4,%xmm15
  movapd %xmm1,%xmm0
  mulpd  %xmm6,%xmm9
  subpd  %xmm10,%xmm0
  addpd  %xmm7,%xmm15
  movapd %xmm8,%xmm7
  mulpd  %xmm3,%xmm7
  addpd  %xmm9,%xmm0
  mulpd  %xmm5,%xmm8
  addpd  %xmm15,%xmm7
  subpd  %xmm8,%xmm0
  cvtpd2ps %xmm7,%xmm7
  movlhps %xmm7,%xmm2
  cvtpd2ps %xmm0,%xmm0
  movlhps %xmm0,%xmm13
  movups %xmm2,(%r10,%rax,1)
  movups %xmm13,(%rbx,%rax,1)
  add    $0x10,%rax
  cmp    %rax,%r11
  jne    L65
  mov    %r12,%rax
  and    $0xfffffffffffffffc,%rax
  lea    0x1(%rax),%rbp
  lea    (%rax,%rax,1),%r11
  cmp    %r12,%rax
  je     L97
  lea    (%rdi,%rax,8),%r12
  movsd  D153(%rip),%xmm3
  pxor   %xmm1,%xmm1
  pxor   %xmm7,%xmm7
  movsd  D257(%rip),%xmm5
  cvtss2sd (%r12),%xmm1
  movapd %xmm1,%xmm2
  pxor   %xmm0,%xmm0
  cvtss2sd 0x4(%r12),%xmm7
  mulsd  %xmm3,%xmm2
  pxor   %xmm6,%xmm6
  cvtss2sd (%rdi,%rbp,8),%xmm0
  mulsd  %xmm7,%xmm5
  movapd %xmm0,%xmm4
  lea    0x3(%r11),%r12
  cvtss2sd 0x8(%r8,%rbp,8),%xmm6
  movapd %xmm6,%xmm8
  lea    0x0(,%rbp,8),%rbx
  addsd  %xmm2,%xmm5
  movsd  D301(%rip),%xmm2
  mulsd  %xmm2,%xmm4
  mulsd  %xmm2,%xmm7
  addsd  %xmm4,%xmm5
  movsd  D148(%rip),%xmm4
  mulsd  %xmm4,%xmm8
  mulsd  %xmm4,%xmm1
  addsd  %xmm8,%xmm5
  subsd  %xmm7,%xmm1
  cvtsd2ss %xmm5,%xmm5
  movss  %xmm5,0x80(%rsp,%rbp,4)
  movsd  D257(%rip),%xmm5
  add    %rcx,%rbp
  mulsd  %xmm0,%xmm5
  addsd  %xmm5,%xmm1
  movapd %xmm6,%xmm5
  mulsd  %xmm3,%xmm5
  subsd  %xmm5,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,0x80(%rsp,%rbp,4)
  lea    0x2(%rax),%rbp
  cmp    %r9,%r12
  ja     L54
  movapd %xmm0,%xmm7
  pxor   %xmm1,%xmm1
  pxor   %xmm5,%xmm5
  add    $0x5,%r11
  mulsd  %xmm3,%xmm7
  cvtss2sd 0xc(%r8,%rbx,1),%xmm1
  add    $0x3,%rax
  movsd  D257(%rip),%xmm8
  mulsd  %xmm4,%xmm0
  cvtss2sd 0x10(%r8,%rbx,1),%xmm5
  mulsd  %xmm6,%xmm8
  mulsd  %xmm2,%xmm6
  addsd  %xmm8,%xmm7
  movapd %xmm1,%xmm8
  subsd  %xmm6,%xmm0
  movsd  D257(%rip),%xmm6
  mulsd  %xmm2,%xmm8
  mulsd  %xmm1,%xmm6
  addsd  %xmm8,%xmm7
  movapd %xmm5,%xmm8
  mulsd  %xmm4,%xmm8
  addsd  %xmm6,%xmm0
  movapd %xmm5,%xmm6
  mulsd  %xmm3,%xmm6
  addsd  %xmm8,%xmm7
  subsd  %xmm6,%xmm0
  cvtsd2ss %xmm7,%xmm7
  movss  %xmm7,0x80(%rsp,%rbp,4)
  add    %rcx,%rbp
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x80(%rsp,%rbp,4)
  cmp    %r11,%r9
  jb     L54
  movsd  D257(%rip),%xmm0
  movapd %xmm1,%xmm8
  pxor   %xmm7,%xmm7
  pxor   %xmm6,%xmm6
  mulsd  %xmm3,%xmm8
  cvtss2sd 0x14(%r8,%rbx,1),%xmm7
  cvtss2sd 0x18(%r8,%rbx,1),%xmm6
  mulsd  %xmm5,%xmm0
  mulsd  %xmm4,%xmm1
  mulsd  %xmm2,%xmm5
  addsd  %xmm8,%xmm0
  movapd %xmm7,%xmm8
  mulsd  %xmm2,%xmm8
  mulsd  D257(%rip),%xmm7
  subsd  %xmm5,%xmm1
  addsd  %xmm8,%xmm0
  movapd %xmm6,%xmm8
  mulsd  %xmm4,%xmm8
  addsd  %xmm7,%xmm1
  mulsd  %xmm3,%xmm6
  addsd  %xmm8,%xmm0
  subsd  %xmm6,%xmm1
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x80(%rsp,%rax,4)
  add    %rcx,%rax
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,0x80(%rsp,%rax,4)
L54:
  movsd  0x78(%rsp),%xmm6
  pxor   %xmm0,%xmm0
  pxor   %xmm5,%xmm5
  shr    %rsi
  cvtss2sd -0x4(%r8,%rdx,1),%xmm0
  movapd %xmm0,%xmm1
  cvtss2sd 0x4(%rdi),%xmm5
  add    $0x2,%rsi
  mulsd  %xmm2,%xmm6
  mulsd  %xmm3,%xmm1
  addsd  0x68(%rsp),%xmm1
  mulsd  %xmm4,%xmm0
  mulsd  0x60(%rsp),%xmm2
  addsd  %xmm6,%xmm1
  movapd %xmm5,%xmm6
  mulsd  %xmm4,%xmm6
  mulsd  %xmm3,%xmm5
  subsd  %xmm2,%xmm0
  addsd  0x70(%rsp),%xmm0
  addsd  %xmm6,%xmm1
  subsd  %xmm5,%xmm0
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,0x80(%rsp,%rsi,4)
  add    %rcx,%rsi
  cvtsd2ss %xmm0,%xmm0
  movss  %xmm0,0x80(%rsp,%rsi,4)
L76:
  mov    %r10,%rsi
  call   <memcpy@plt>
L58:
  mov    0x4088(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L152
  add    $0x4090,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
  cs nopw 0x0(%rax,%rax,1)
L128:
  movsd  D153(%rip),%xmm4
  pxor   %xmm1,%xmm1
  pxor   %xmm2,%xmm2
  lea    -0x2(%rcx),%rax
  movsd  0x60(%rsp),%xmm3
  lea    0x1(%rcx),%r9
  lea    -0x1(%rcx),%rbp
  cvtss2sd (%r8,%rcx,4),%xmm1
  mulsd  %xmm4,%xmm0
  unpcklpd %xmm1,%xmm1
  cvtss2sd (%rdi,%rcx,4),%xmm2
  unpcklpd %xmm2,%xmm2
  mulpd  D313(%rip),%xmm1
  lea    0x0(,%rcx,4),%rsi
  mulsd  %xmm4,%xmm3
  lea    0x4(%rsi),%r11
  mulpd  D60(%rip),%xmm2
  movhpd 0x70(%rsp),%xmm0
  unpcklpd %xmm3,%xmm5
  movapd %xmm1,%xmm3
  addpd  %xmm5,%xmm3
  subpd  %xmm5,%xmm1
  movsd  %xmm3,%xmm1
  addpd  %xmm1,%xmm0
  movapd %xmm0,%xmm1
  subpd  %xmm2,%xmm0
  addpd  %xmm2,%xmm1
  movsd  %xmm1,%xmm0
  cvtpd2ps %xmm0,%xmm0
  movlps %xmm0,0x84(%rsp)
  cmp    $0x2,%rax
  jbe    L131
  mov    %rbp,%rbx
  movapd D257(%rip),%xmm6
  add    %rdi,%rsi
  xor    %eax,%eax
  shr    $0x2,%rbx
  movapd D153(%rip),%xmm5
  add    %rdi,%r11
  movapd D301(%rip),%xmm4
  movapd D148(%rip),%xmm3
  shl    $0x4,%rbx
  lea    0x80(%rsp),%r10
  nopl   0x0(%rax,%rax,1)
L82:
  movups (%rdi,%rax,1),%xmm1
  cvtps2pd (%rdi,%rax,1),%xmm0
  cvtps2pd (%rsi,%rax,1),%xmm13
  movhps %xmm1,0x30(%rsp)
  movapd %xmm13,%xmm7
  movups (%rsi,%rax,1),%xmm1
  movhps %xmm1,0x40(%rsp)
  movups 0x4(%rdi,%rax,1),%xmm1
  movhps %xmm1,0x50(%rsp)
  movapd %xmm0,%xmm1
  cvtps2pd 0x4(%rdi,%rax,1),%xmm12
  cvtps2pd (%r11,%rax,1),%xmm11
  mulpd  %xmm4,%xmm1
  cvtps2pd 0x30(%rsp),%xmm2
  movapd %xmm2,%xmm14
  cvtps2pd 0x40(%rsp),%xmm10
  mulpd  %xmm6,%xmm7
  cvtps2pd 0x50(%rsp),%xmm9
  movlps 0x8(%r11,%rax,1),%xmm15
  mulpd  %xmm4,%xmm14
  cvtps2pd %xmm15,%xmm8
  mulpd  %xmm3,%xmm0
  mulpd  %xmm5,%xmm13
  mulpd  %xmm3,%xmm2
  addpd  %xmm1,%xmm7
  movapd %xmm12,%xmm1
  mulpd  %xmm5,%xmm1
  mulpd  %xmm6,%xmm12
  subpd  %xmm13,%xmm0
  addpd  %xmm7,%xmm1
  movapd %xmm11,%xmm7
  mulpd  %xmm3,%xmm7
  addpd  %xmm12,%xmm0
  mulpd  %xmm4,%xmm11
  addpd  %xmm7,%xmm1
  movapd %xmm10,%xmm7
  mulpd  %xmm6,%xmm7
  subpd  %xmm11,%xmm0
  mulpd  %xmm5,%xmm10
  cvtpd2ps %xmm1,%xmm1
  cvtpd2ps %xmm0,%xmm0
  addpd  %xmm14,%xmm7
  movapd %xmm9,%xmm14
  mulpd  %xmm5,%xmm14
  subpd  %xmm10,%xmm2
  mulpd  %xmm6,%xmm9
  addpd  %xmm7,%xmm14
  movapd %xmm8,%xmm7
  mulpd  %xmm3,%xmm7
  addpd  %xmm9,%xmm2
  mulpd  %xmm4,%xmm8
  addpd  %xmm14,%xmm7
  subpd  %xmm8,%xmm2
  cvtpd2ps %xmm7,%xmm7
  movlhps %xmm7,%xmm1
  cvtpd2ps %xmm2,%xmm2
  movlhps %xmm2,%xmm0
  movaps %xmm1,%xmm2
  unpcklps %xmm0,%xmm2
  unpckhps %xmm0,%xmm1
  movups %xmm2,0xc(%r10,%rax,2)
  movups %xmm1,0x1c(%r10,%rax,2)
  add    $0x10,%rax
  cmp    %rax,%rbx
  jne    L82
  mov    %rbp,%r11
  lea    0x84(%rsp),%r10
  and    $0xfffffffffffffffc,%r11
  lea    0x1(%r11),%rax
  lea    0x3(%r11,%r11,1),%rsi
  cmp    %r11,%rbp
  je     L76
L119:
  lea    0x0(,%rax,4),%r10
  lea    (%rcx,%rax,1),%r11
  movapd D199(%rip),%xmm2
  pxor   %xmm0,%xmm0
  lea    (%rdi,%r10,1),%rbx
  pxor   %xmm3,%xmm3
  pxor   %xmm1,%xmm1
  movapd D60(%rip),%xmm5
  cvtss2sd -0x4(%rbx),%xmm0
  cvtss2sd -0x4(%rdi,%r11,4),%xmm3
  unpcklpd %xmm0,%xmm0
  unpcklpd %xmm3,%xmm3
  mulpd  D313(%rip),%xmm0
  cvtss2sd (%rbx),%xmm1
  unpcklpd %xmm1,%xmm1
  lea    (%r9,%rax,1),%rbx
  mulpd  %xmm2,%xmm3
  lea    0x1(%rax),%r11
  movapd %xmm0,%xmm4
  addpd  %xmm3,%xmm4
  subpd  %xmm3,%xmm0
  movapd D45(%rip),%xmm3
  movsd  %xmm4,%xmm0
  movapd %xmm1,%xmm4
  mulpd  %xmm3,%xmm4
  addpd  %xmm4,%xmm0
  pxor   %xmm4,%xmm4
  cvtss2sd (%r8,%rbx,4),%xmm4
  unpcklpd %xmm4,%xmm4
  lea    0x2(%rsi),%rbx
  mulpd  %xmm4,%xmm5
  movapd %xmm5,%xmm6
  addpd  %xmm0,%xmm6
  subpd  %xmm5,%xmm0
  movsd  %xmm6,%xmm0
  cvtpd2ps %xmm0,%xmm0
  movlps %xmm0,0x80(%rsp,%rsi,4)
  cmp    %r11,%rcx
  jbe    L192
  mulpd  %xmm2,%xmm4
  add    %r9,%r11
  add    $0x2,%rax
  add    $0x4,%rsi
  mulpd  D313(%rip),%xmm1
  movapd %xmm4,%xmm0
  pxor   %xmm4,%xmm4
  movapd %xmm1,%xmm5
  subpd  %xmm0,%xmm1
  cvtss2sd 0x8(%r8,%r10,1),%xmm4
  unpcklpd %xmm4,%xmm4
  addpd  %xmm0,%xmm5
  movapd %xmm1,%xmm0
  movapd %xmm4,%xmm1
  mulpd  %xmm3,%xmm1
  movsd  %xmm5,%xmm0
  movapd D60(%rip),%xmm5
  addpd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%r8,%r11,4),%xmm1
  unpcklpd %xmm1,%xmm1
  mulpd  %xmm1,%xmm5
  movapd %xmm5,%xmm6
  addpd  %xmm0,%xmm6
  subpd  %xmm5,%xmm0
  movsd  %xmm6,%xmm0
  cvtpd2ps %xmm0,%xmm0
  movlps %xmm0,0x80(%rsp,%rbx,4)
  cmp    %rax,%rcx
  jbe    L192
  mulpd  D313(%rip),%xmm4
  add    %rax,%r9
  mulpd  %xmm2,%xmm1
  pxor   %xmm2,%xmm2
  cvtss2sd 0xc(%r8,%r10,1),%xmm2
  movapd %xmm4,%xmm0
  addpd  %xmm1,%xmm0
  subpd  %xmm1,%xmm4
  movapd %xmm2,%xmm1
  unpcklpd %xmm1,%xmm1
  mulpd  %xmm3,%xmm1
  shufpd $0x2,%xmm4,%xmm0
  addpd  %xmm1,%xmm0
  pxor   %xmm1,%xmm1
  cvtss2sd (%r8,%r9,4),%xmm1
  unpcklpd %xmm1,%xmm1
  mulpd  D60(%rip),%xmm1
  movapd %xmm0,%xmm2
  addpd  %xmm1,%xmm2
  subpd  %xmm1,%xmm0
  movsd  %xmm2,%xmm0
  cvtpd2ps %xmm0,%xmm0
  movlps %xmm0,0x80(%rsp,%rsi,4)
L192:
  lea    0x84(%rsp),%r10
  mov    %r10,%rsi
  call   <memcpy@plt>
  jmp    L58
  xchg   %ax,%ax
L97:
  movsd  D153(%rip),%xmm3
  movsd  D301(%rip),%xmm2
  movsd  D148(%rip),%xmm4
  jmp    L54
  nopl   (%rax)
L160:
  lea    0x80(%rsp),%r10
  movsd  D153(%rip),%xmm3
  pxor   %xmm5,%xmm5
  movsd  D301(%rip),%xmm2
  lea    (%r10,%rcx,4),%r11
  mov    $0x1,%eax
  cvtss2sd 0x4(%rdi),%xmm5
  movsd  D148(%rip),%xmm4
  nopw   0x0(%rax,%rax,1)
L178:
  movapd %xmm0,%xmm1
  movapd %xmm5,%xmm7
  pxor   %xmm0,%xmm0
  add    $0x2,%rax
  movapd %xmm1,%xmm8
  movsd  D257(%rip),%xmm6
  cvtss2sd -0x4(%rdi,%rax,4),%xmm0
  pxor   %xmm5,%xmm5
  mulsd  %xmm3,%xmm8
  cvtss2sd (%rdi,%rax,4),%xmm5
  mulsd  %xmm7,%xmm6
  mulsd  %xmm4,%xmm1
  mulsd  %xmm2,%xmm7
  addsd  %xmm8,%xmm6
  movapd %xmm0,%xmm8
  mulsd  %xmm2,%xmm8
  subsd  %xmm7,%xmm1
  addsd  %xmm8,%xmm6
  movapd %xmm5,%xmm8
  mulsd  %xmm4,%xmm8
  addsd  %xmm8,%xmm6
  cvtsd2ss %xmm6,%xmm6
  movss  %xmm6,-0x2(%r10,%rax,2)
  movsd  D257(%rip),%xmm6
  mulsd  %xmm0,%xmm6
  addsd  %xmm6,%xmm1
  movapd %xmm5,%xmm6
  mulsd  %xmm3,%xmm6
  subsd  %xmm6,%xmm1
  cvtsd2ss %xmm1,%xmm1
  movss  %xmm1,-0x2(%r11,%rax,2)
  cmp    %rax,%r9
  jae    L178
  lea    0x84(%rsp),%r10
  jmp    L54
L131:
  mov    $0x3,%esi
  mov    $0x1,%eax
  jmp    L119
L152:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: retrieve_data
arguments: data_tag: D257
data_type: f64[2]
name: retrieve_data
arguments: data_tag: D153
data_type: f64[2]
name: retrieve_data
arguments: data_tag: D301
data_type: f64[2]
name: retrieve_data
arguments: data_tag: D148
data_type: byte[16]
name: retrieve_data
arguments: data_tag: D313
data_type: f64[2]
name: retrieve_data
arguments: data_tag: D60
data_type: byte[16]
name: retrieve_data
arguments: data_tag: D199
data_type: f64[2]
name: retrieve_data
arguments: data_tag: D45
data_type: f64[2]

tool: {"D257": [0.8365163037378079,0.8365163037378079]}

tool: {"D153": [0.4829629131445341,0.4829629131445341]}

tool: {"D301": [0.2241438680420134,0.2241438680420134]}

tool: {"D148": [0x91,0x06,0x93,0xc1,0x7d,0x90,0xc0,0xbf,0x91,0x06,0x93,0xc1,0x7d,0x90,0xc0,0xbf]}

tool: {"D313": [0.2241438680420134,-0.1294095225512604]}

tool: {"D60": [0x91,0x06,0x93,0xc1,0x7d,0x90,0xc0,0xbf,0x09,0x71,0x6b,0x0b,0xbf,0xb0,0xcc,0x3f]}

tool: {"D199": [0.8365163037378079,0.4829629131445341]}

tool: {"D45": [0.4829629131445341,0.8365163037378079]}

assistant: ```c
void daub4(float b[], unsigned long n, int isign) {
  float wksp[4097];
  float *a = b - 1;
  unsigned long nh, nh1, i, j;
  if (n < 4)
    return;
  nh1 = (nh = n >> 1) + 1;
  if (isign >= 0) {
    for (i = 1, j = 1; j <= n - 3; j += 2, i++) {
      wksp[i] = 0.4829629131445341 * a[j] + 0.8365163037378079 * a[j + 1] + 0.2241438680420134 * a[j + 2] + -0.1294095225512604 * a[j + 3];
      wksp[i + nh] = -0.1294095225512604 * a[j] - 0.2241438680420134 * a[j + 1] + 0.8365163037378079 * a[j + 2] - 0.4829629131445341 * a[j + 3];
    }
    wksp[i] = 0.4829629131445341 * a[n - 1] + 0.8365163037378079 * a[n] + 0.2241438680420134 * a[1] + -0.1294095225512604 * a[2];
    wksp[i + nh] = -0.1294095225512604 * a[n - 1] - 0.2241438680420134 * a[n] + 0.8365163037378079 * a[1] - 0.4829629131445341 * a[2];
  } else {
    wksp[1] = 0.2241438680420134 * a[nh] + 0.8365163037378079 * a[n] + 0.4829629131445341 * a[1] + -0.1294095225512604 * a[nh1];
    wksp[2] = -0.1294095225512604 * a[nh] - 0.4829629131445341 * a[n] + 0.8365163037378079 * a[1] - 0.2241438680420134 * a[nh1];
    for (i = 1, j = 3; i < nh; i++) {
      wksp[j++] = 0.2241438680420134 * a[i] + 0.8365163037378079 * a[i + nh] + 0.4829629131445341 * a[i + 1] + -0.1294095225512604 * a[i + nh1];
      wksp[j++] = -0.1294095225512604 * a[i] - 0.4829629131445341 * a[i + nh] + 0.8365163037378079 * a[i + 1] - 0.2241438680420134 * a[i + nh1];
    }
  }
  for (i = 1; i <= n; i++) {
    a[i] = wksp[i];
  }
}
```