user: 请从给定的汇编指令推导出C源代码：

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x1b0,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x10,-0x1a0(%rbp)
  movl   $0x8,-0x19c(%rbp)
  movl   $0xc,-0x198(%rbp)
  movl   $0x10,-0x194(%rbp)
  movl   $0x12,-0x190(%rbp)
  movl   $0xe,-0x18c(%rbp)
  movl   $0x4,-0x188(%rbp)
  movl   $0x8,-0x184(%rbp)
  movl   $0x3,-0x1a8(%rbp)
  movl   $0x5,-0x1a4(%rbp)
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D106(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D349(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D206(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L160
L212:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x1a0(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L160:
  cmpl   $0x7,-0x1ac(%rbp)
  jle    L212
  lea    -0x1a0(%rbp),%rdx
  lea    -0x180(%rbp),%rax
  lea    0x10(%rax),%rsi
  lea    -0x180(%rbp),%rax
  mov    $0x8,%ecx
  mov    %rax,%rdi
  call   <fn_dirFHaarWT2p2oneStage_NoaK@plt>
  lea    D469(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L285
L157:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x180(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L285:
  cmpl   $0x7,-0x1ac(%rbp)
  jle    L157
  lea    -0x180(%rbp),%rax
  lea    0x10(%rax),%rdx
  lea    -0x180(%rbp),%rsi
  lea    -0x1a0(%rbp),%rax
  mov    $0x8,%ecx
  mov    %rax,%rdi
  call   <fn_invFHaarWT2p2oneStage_NoaK@plt>
  lea    D264(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L315
L61:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x1a0(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L315:
  cmpl   $0x7,-0x1ac(%rbp)
  jle    L61
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D473(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D206(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L89
L60:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x1a0(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L89:
  cmpl   $0x7,-0x1ac(%rbp)
  jle    L60
  lea    -0x160(%rbp),%rdx
  lea    -0x180(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0x8,%edx
  mov    $0x1,%esi
  mov    %rax,%rdi
  call   <ifn_array2wk@plt>
  lea    -0x1a0(%rbp),%rsi
  lea    -0x160(%rbp),%rax
  mov    $0x1,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  call   <fn_dirFHaarWT2p2_NoaK@plt>
  lea    D469(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L211
L279:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x180(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L211:
  cmpl   $0x7,-0x1ac(%rbp)
  jle    L279
  lea    -0x160(%rbp),%rsi
  lea    -0x1a0(%rbp),%rax
  mov    $0x1,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  call   <fn_invFHaarWT2p2_NoaK@plt>
  lea    D264(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L115
L126:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x1a0(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L115:
  cmpl   $0x7,-0x1ac(%rbp)
  jle    L126
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D364(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D206(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L73
L244:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x1a0(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L73:
  cmpl   $0x7,-0x1ac(%rbp)
  jle    L244
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    -0x1a8(%rbp),%eax
  mov    %eax,%esi
  lea    D422(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    -0x1a8(%rbp),%esi
  lea    -0x160(%rbp),%rdx
  lea    -0x180(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0x8,%edx
  mov    %rax,%rdi
  call   <ifn_array2wk@plt>
  mov    -0x1a8(%rbp),%edx
  lea    -0x1a0(%rbp),%rsi
  lea    -0x160(%rbp),%rax
  mov    %edx,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  call   <fn_dirFHaarWT2p2_NoaK@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L118
L77:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x180(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D299(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L118:
  cmpl   $0x3,-0x1ac(%rbp)
  jle    L77
  movl   $0x4,-0x1ac(%rbp)
  jmp    L31
L295:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x180(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D309(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L31:
  cmpl   $0x5,-0x1ac(%rbp)
  jle    L295
  mov    -0x168(%rbp),%eax
  mov    %eax,%esi
  lea    D328(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    -0x164(%rbp),%eax
  mov    %eax,%esi
  lea    D217(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    -0x1a8(%rbp),%edx
  lea    -0x160(%rbp),%rsi
  lea    -0x1a0(%rbp),%rax
  mov    %edx,%ecx
  mov    $0x8,%edx
  mov    %rax,%rdi
  call   <fn_invFHaarWT2p2_NoaK@plt>
  lea    D264(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L264
L234:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x1a0(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L264:
  cmpl   $0x7,-0x1ac(%rbp)
  jle    L234
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D98(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D476(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L79
L149:
  mov    $0x0,%eax
  call   <rand@plt>
  cltd
  shr    $0x1b,%edx
  add    %edx,%eax
  and    $0x1f,%eax
  sub    %edx,%eax
  lea    0x1(%rax),%edx
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    %edx,-0x110(%rbp,%rax,4)
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L79:
  cmpl   $0x1f,-0x1ac(%rbp)
  jle    L149
  mov    -0x1a4(%rbp),%esi
  lea    -0x140(%rbp),%rdx
  lea    -0x90(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0x20,%edx
  mov    %rax,%rdi
  call   <ifn_array2wk@plt>
  mov    -0x1a4(%rbp),%edx
  lea    -0x110(%rbp),%rsi
  lea    -0x140(%rbp),%rax
  mov    %edx,%ecx
  mov    $0x20,%edx
  mov    %rax,%rdi
  call   <fn_dirFHaarWT2p2_NoaK@plt>
  lea    D390(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L312
L104:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L312:
  cmpl   $0x1f,-0x1ac(%rbp)
  jle    L104
  mov    -0x1a4(%rbp),%edx
  lea    -0x140(%rbp),%rsi
  lea    -0x110(%rbp),%rax
  mov    %edx,%ecx
  mov    $0x20,%edx
  mov    %rax,%rdi
  call   <fn_invFHaarWT2p2_NoaK@plt>
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L5
L80:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L5:
  cmpl   $0x1f,-0x1ac(%rbp)
  jle    L80
  lea    D502(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D279(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D130(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D476(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L220
L141:
  mov    $0x0,%eax
  call   <rand@plt>
  cltd
  shr    $0x1b,%edx
  add    %edx,%eax
  and    $0x1f,%eax
  sub    %edx,%eax
  lea    0x1(%rax),%edx
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    %edx,-0x110(%rbp,%rax,4)
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L220:
  cmpl   $0x1f,-0x1ac(%rbp)
  jle    L141
  lea    -0x140(%rbp),%rdx
  lea    -0x90(%rbp),%rax
  mov    %rdx,%rcx
  mov    $0x20,%edx
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <ifn_array2wk@plt>
  lea    -0x110(%rbp),%rsi
  lea    -0x140(%rbp),%rax
  mov    $0x3,%ecx
  mov    $0x20,%edx
  mov    %rax,%rdi
  call   <fn_dirFHaarWT2p2_NoaK@plt>
  lea    D390(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L271
L189:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x90(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L271:
  cmpl   $0x1f,-0x1ac(%rbp)
  jle    L189
  lea    -0x140(%rbp),%rsi
  lea    -0x110(%rbp),%rax
  mov    $0x3,%ecx
  mov    $0x20,%edx
  mov    %rax,%rdi
  call   <fn_invFHaarWT2p2_NoaK@plt>
  lea    D37(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  movl   $0x0,-0x1ac(%rbp)
  jmp    L316
L97:
  mov    -0x1ac(%rbp),%eax
  cltq
  mov    -0x110(%rbp,%rax,4),%eax
  mov    %eax,%esi
  lea    D372(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  addl   $0x1,-0x1ac(%rbp)
L316:
  cmpl   $0x1f,-0x1ac(%rbp)
  jle    L97
  lea    D40(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L288
  call   <__stack_chk_fail@plt>
L288:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_tag: D130
datatype: string
name: parse_data
arguments: data_tag: D106
datatype: string
name: parse_data
arguments: data_tag: D349
datatype: string
name: parse_data
arguments: data_tag: D206
datatype: string
name: parse_data
arguments: data_tag: D372
datatype: string
name: parse_data
arguments: data_tag: D469
datatype: string
name: parse_data
arguments: data_tag: D264
datatype: string
name: parse_data
arguments: data_tag: D473
datatype: string
name: parse_data
arguments: data_tag: D364
datatype: string
name: parse_data
arguments: data_tag: D422
datatype: string
name: parse_data
arguments: data_tag: D299
datatype: string
name: parse_data
arguments: data_tag: D309
datatype: string
name: parse_data
arguments: data_tag: D328
datatype: string
name: parse_data
arguments: data_tag: D217
datatype: string
name: parse_data
arguments: data_tag: D98
datatype: string
name: parse_data
arguments: data_tag: D476
datatype: string
name: parse_data
arguments: data_tag: D390
datatype: string
name: parse_data
arguments: data_tag: D37
datatype: string
name: parse_data
arguments: data_tag: D502
datatype: string
name: parse_data
arguments: data_tag: D279
datatype: string
name: parse_data
arguments: data_tag: D40
datatype: string

tool: D130: -----------------------------------------------------------------

tool: D106:  determining test 

tool: D349:  one stage 

tool: D206:  input: 

tool: D372: %d 

tool: D469:  output: 

tool: D264:  input, again: 

tool: D473:  one level 

tool: D364:  full level 

tool: D422: i_step = %d 

tool: D299:  W3: %d 

tool: D309:  W2: %d 

tool: D328:  W1: %d 

tool: D217:  W0: %d 

tool: D98:  random test 

tool: D476:  input random: 

tool: D390:  output random: 

tool: D37:  input random, again: 

tool: D502:  Well? Almost (!) The same? ))) 

tool: D279:  random semi-full test 

tool: D40:  Well? Seems to be true? ))) 

assistant: ```c
int main() {
  int i;
  int ai_data[8] = {16, 8, 12, 16, 18, 14, 4, 8};
  int ai_k[8];
  int *a4p2wki[4];
  unsigned int i_step = 3;
  int ai_Rdata[32];
  int ai_Rk[32];
  int *a4p2wkiR[6];
  unsigned int i_Rstep = 5;
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" determining test ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" one stage ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  fn_dirFHaarWT2p2oneStage_NoaK(ai_k, &ai_k[4], ai_data, 8);
  printf(" output: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_k[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2oneStage_NoaK(ai_data, ai_k, &ai_k[4], 8);
  printf(" input, again: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" one level ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  ifn_array2wk(ai_k, 1, 8, a4p2wki);
  fn_dirFHaarWT2p2_NoaK(a4p2wki, ai_data, 8, 1);
  printf(" output: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_k[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2_NoaK(ai_data, a4p2wki, 8, 1);
  printf(" input, again: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" full level ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  printf("\n");
  printf("i_step = %d ", i_step);
  printf("\n");
  printf("\n");
  ifn_array2wk(ai_k, i_step, 8, a4p2wki);
  fn_dirFHaarWT2p2_NoaK(a4p2wki, ai_data, 8, i_step);
  for (i = 0; i < 4; i++) {
    printf(" W3: %d ", ai_k[i]);
    printf("\n");
  }
  for (i = 4; i < 6; i++) {
    printf(" W2: %d ", ai_k[i]);
    printf("\n");
  }
  printf(" W1: %d ", ai_k[6]);
  printf("\n");
  printf(" W0: %d ", ai_k[7]);
  printf("\n");
  fn_invFHaarWT2p2_NoaK(ai_data, a4p2wki, 8, i_step);
  printf(" input, again: ");
  printf("\n");
  for (i = 0; i < 8; i++) {
    printf("%d ", ai_data[i]);
    printf("\n");
  }
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" random test ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input random: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    ai_Rdata[i] = (rand() % 32) + 1;
    printf("%d ", ai_Rdata[i]);
    printf("\n");
  }
  ifn_array2wk(ai_Rk, i_Rstep, 32, a4p2wkiR);
  fn_dirFHaarWT2p2_NoaK(a4p2wkiR, ai_Rdata, 32, i_Rstep);
  printf(" output random: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rk[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2_NoaK(ai_Rdata, a4p2wkiR, 32, i_Rstep);
  printf(" input random, again: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rdata[i]);
    printf("\n");
  }
  printf(" Well? Almost (!) The same? ))) ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" random semi-full test ");
  printf("\n");
  printf("-----------------------------------------------------------------");
  printf("\n");
  printf(" input random: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    ai_Rdata[i] = (rand() % 32) + 1;
    printf("%d ", ai_Rdata[i]);
    printf("\n");
  }
  ifn_array2wk(ai_Rk, 3, 32, a4p2wkiR);
  fn_dirFHaarWT2p2_NoaK(a4p2wkiR, ai_Rdata, 32, 3);
  printf(" output random: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rk[i]);
    printf("\n");
  }
  fn_invFHaarWT2p2_NoaK(ai_Rdata, a4p2wkiR, 32, 3);
  printf(" input random, again: ");
  printf("\n");
  for (i = 0; i < 32; i++) {
    printf("%d ", ai_Rdata[i]);
    printf("\n");
  }
  printf(" Well? Seems to be true? ))) ");
  printf("\n");
  return 0;
}
```