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

```asm
<main>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  lea    D252(%rip),%rdi
  call   <puts@plt>
  mov    $0x0,%ebx
  lea    D21(%rip),%rbp
L119:
  mov    %ebx,%ecx
  mov    %ebx,%edx
  mov    %ebx,%esi
  mov    %rbp,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%ebx
  cmp    $0x9,%ebx
  jne    L119
  lea    D242(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%ebp
  lea    D320(%rip),%r15
  lea    D233(%rip),%r13
  lea    D136(%rip),%r14
L95:
  mov    %ebp,%esi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %ebp,%r12d
  shr    $0x1f,%r12d
  add    %ebp,%r12d
  sar    %r12d
  cmp    %ebp,%r12d
  jge    L115
  mov    %ebp,%ebx
L199:
  mov    %ebp,%edx
  sub    %ebx,%edx
  mov    %ebx,%r8d
  mov    %edx,%ecx
  mov    %ebx,%esi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  sub    $0x1,%ebx
  cmp    %r12d,%ebx
  jne    L199
L115:
  mov    %ebp,%esi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%ebp
  cmp    $0x9,%ebp
  jne    L95
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D151(%rip),%r15
  lea    D233(%rip),%r14
L6:
  mov    %ebp,%r13d
  lea    -0x9(%rbp),%esi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %ebp,%r12d
  shr    $0x1f,%r12d
  add    %ebp,%r12d
  sar    %r12d
  cmp    $0xf,%ebp
  jg     L222
  mov    $0x8,%ebx
L157:
  mov    %r13d,%edx
  sub    %ebx,%edx
  mov    %ebx,%r8d
  mov    %edx,%ecx
  mov    %ebx,%esi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  sub    $0x1,%ebx
  cmp    %r12d,%ebx
  jg     L157
  mov    %ebp,%esi
  lea    D136(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%ebp
  jmp    L6
L222:
  mov    %ebp,%esi
  lea    D136(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%ebp
  cmp    $0x11,%ebp
  jne    L6
  mov    $0x11,%esi
  lea    D54(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D193(%rip),%rdi
  call   <puts@plt>
  lea    D341(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%ebp
  lea    D304(%rip),%r15
  lea    D70(%rip),%r13
  lea    D212(%rip),%r14
  jmp    L0
L142:
  mov    %ebp,%esi
  lea    D26(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%ebp
  cmp    $0x9,%ebp
  je     L152
L0:
  mov    %ebp,%esi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %ebp,%r12d
  shr    $0x1f,%r12d
  add    %ebp,%r12d
  sar    %r12d
  cmp    %ebp,%r12d
  jge    L230
  mov    %ebp,%ebx
L104:
  mov    %ebp,%edx
  sub    %ebx,%edx
  mov    %ebx,%esi
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  sub    $0x1,%ebx
  cmp    %r12d,%ebx
  jne    L104
L230:
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  test   $0x1,%bpl
  jne    L142
  mov    %r12d,%edx
  mov    %r12d,%esi
  lea    D318(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L142
L152:
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    %ebp,%r14d
  lea    D70(%rip),%r15
  jmp    L48
L94:
  mov    %r14d,%esi
  lea    D26(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%r14d
  cmp    $0x10,%r14d
  je     L70
L48:
  mov    %r14d,%r13d
  lea    -0x9(%r14),%esi
  lea    D304(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r14d,%r12d
  shr    $0x1f,%r12d
  add    %r14d,%r12d
  sar    %r12d
  cmp    $0xf,%r14d
  jg     L279
  mov    $0x8,%ebx
L8:
  mov    %r13d,%edx
  sub    %ebx,%edx
  mov    %ebx,%esi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  sub    $0x1,%ebx
  cmp    %r12d,%ebx
  jg     L8
L279:
  lea    D212(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  test   $0x1,%r13b
  jne    L94
  mov    %r12d,%edx
  mov    %r12d,%esi
  lea    D318(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  jmp    L94
L70:
  mov    $0x10,%ecx
  mov    $0x8,%edx
  mov    $0x8,%esi
  lea    D75(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x11,%esi
  lea    D54(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    D79(%rip),%rdi
  call   <puts@plt>
  lea    D339(%rip),%rdi
  call   <puts@plt>
  mov    $0x1,%edx
  mov    $0x1,%esi
  lea    D199(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%r14d
  lea    D330(%rip),%r15
  jmp    L22
L108:
  mov    %r12d,%edx
  mov    %r12d,%esi
  lea    D199(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r12d,%r13d
  shr    $0x1f,%r13d
  add    %r12d,%r13d
  sar    %r13d
  cmp    %r13d,%r14d
  jle    L125
L214:
  mov    %r12d,%esi
  sub    %ebx,%esi
  mov    %esi,%r8d
  mov    %ebx,%ecx
  mov    %ebx,%edx
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  sub    $0x1,%ebx
  cmp    %r13d,%ebx
  jne    L214
L125:
  mov    %r12d,%r14d
L22:
  mov    %r14d,%ebx
  mov    %r14d,%edx
  mov    %r14d,%esi
  lea    D36(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %r14d,%r8d
  mov    %r14d,%ecx
  mov    %r14d,%edx
  mov    %r14d,%esi
  lea    D247(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  lea    0x1(%r14),%r12d
  cmp    $0x8,%r14d
  jne    L108
  mov    $0xa,%edi
  call   <putchar@plt>
  lea    D253(%rip),%r14
  lea    D170(%rip),%r15
  lea    D330(%rip),%r13
L84:
  mov    %ebp,%esi
  mov    %r14,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    %ebp,%r12d
  shr    $0x1f,%r12d
  add    %ebp,%r12d
  sar    %r12d
  cmp    $0xf,%ebp
  jg     L258
  mov    $0x8,%ebx
L162:
  mov    %ebp,%esi
  sub    %ebx,%esi
  mov    %esi,%r8d
  mov    %ebx,%ecx
  mov    %ebx,%edx
  mov    %r13,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  sub    $0x1,%ebx
  cmp    %r12d,%ebx
  jg     L162
  lea    -0x8(%rbp),%edx
  lea    -0x9(%rbp),%esi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%ebp
  jmp    L84
L258:
  lea    -0x8(%rbp),%edx
  lea    -0x9(%rbp),%esi
  mov    %r15,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  add    $0x1,%ebp
  cmp    $0x11,%ebp
  jne    L84
  mov    $0x11,%edx
  mov    $0x8,%esi
  lea    D168(%rip),%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x0,%eax
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
```

tool_calls: name: retrieve_data
arguments: label: D252
data_type: string
name: retrieve_data
arguments: label: D21
data_type: string
name: retrieve_data
arguments: label: D242
data_type: string
name: retrieve_data
arguments: label: D320
data_type: string
name: retrieve_data
arguments: label: D233
data_type: string
name: retrieve_data
arguments: label: D136
data_type: string
name: retrieve_data
arguments: label: D151
data_type: string
name: retrieve_data
arguments: label: D54
data_type: string
name: retrieve_data
arguments: label: D193
data_type: string
name: retrieve_data
arguments: label: D341
data_type: string
name: retrieve_data
arguments: label: D304
data_type: string
name: retrieve_data
arguments: label: D70
data_type: string
name: retrieve_data
arguments: label: D212
data_type: string
name: retrieve_data
arguments: label: D26
data_type: string
name: retrieve_data
arguments: label: D318
data_type: string
name: retrieve_data
arguments: label: D75
data_type: string
name: retrieve_data
arguments: label: D79
data_type: string
name: retrieve_data
arguments: label: D339
data_type: string
name: retrieve_data
arguments: label: D199
data_type: string
name: retrieve_data
arguments: label: D330
data_type: string
name: retrieve_data
arguments: label: D36
data_type: string
name: retrieve_data
arguments: label: D247
data_type: string
name: retrieve_data
arguments: label: D253
data_type: string
name: retrieve_data
arguments: label: D170
data_type: string
name: retrieve_data
arguments: label: D168
data_type: string

tool: D252: Insert this code in BIG_mul() in file big.c between #define UNWOUND and #else 


tool: D21: 	d[%d]=(dchunk)a[%d]*b[%d];


tool: D242: 
	s=d[0];
	t = s; c[0]=(chunk)t&BMASK; co=t>>BASEBITS;

tool: D320: 	s+=d[%d]; t=co+s 

tool: D233: +(dchunk)(a[%d]-a[%d])*(b[%d]-b[%d])

tool: D136: ; c[%d]=(chunk)t&BMASK; co=t>>BASEBITS; 


tool: D151: 	s-=d[%d]; t=co+s 

tool: D54: 	c[%d]=(chunk)co;


tool: D193: 
Insert this code in BIG_sqr() in file big.c between #define UNWOUND and #else 


tool: D341: 
	t=(dchunk)a[0]*a[0]; c[0]=(chunk)t&BMASK; co=t>>BASEBITS;

tool: D304: 	t= 

tool: D70: +(dchunk)a[%d]*a[%d]

tool: D212: ; t+=t; t+=co;

tool: D26:  c[%d]=(chunk)t&BMASK; co=t>>BASEBITS; 


tool: D318:  t+=(dchunk)a[%d]*a[%d];

tool: D75: 	t=co; t+=(dchunk)a[%d]*a[%d]; c[%d]=(chunk)t&BMASK; co=t>>BASEBITS; 
 

tool: D79: 
Insert this code in BIG_monty() in file big.c between #define UNWOUND and #else 


tool: D339: 	t=d[0]; v[0]=((chunk)t*MC)&BMASK; t+=(dchunk)v[0]*md[0];  s=0; c=(t>>BASEBITS);


tool: D199: 	t=d[%d]+c+s+(dchunk)v[0]*md[%d]

tool: D330: +(dchunk)(v[%d]-v[%d])*(md[%d]-md[%d])

tool: D36: ; v[%d]=((chunk)t*MC)&BMASK; t+=(dchunk)v[%d]*md[0]; 

tool: D247:  dd[%d]=(dchunk)v[%d]*md[%d]; s+=dd[%d]; c=(t>>BASEBITS); 


tool: D253: 	t=d[%d]+c+s

tool: D170: ; a[%d]=(chunk)t&BMASK;  s-=dd[%d]; c=(t>>BASEBITS); 


tool: D168: 	a[%d]=d[%d]+(chunk)c&BMASK;


assistant: ```c
int main() {
  int i, j, k, N;
  N = (1 + ((254 - 1) / 29));
  printf("Insert this code in BIG_mul() in file big.c between #define UNWOUND and #else \n\n");
  for (i = 0; i < N; i++)
    printf("\td[%d]=(dchunk)a[%d]*b[%d];\n", i, i, i);
  printf("\n\ts=d[0];\n\tt = s; c[0]=(chunk)t&BMASK; co=t>>BASEBITS;\n");
  for (k = 1; k < N; k++) {
    printf("\ts+=d[%d]; t=co+s ", k);
    for (i = k; i >= 1 + k / 2; i--)
      printf("+(dchunk)(a[%d]-a[%d])*(b[%d]-b[%d])", i, k - i, k - i, i);
    printf("; c[%d]=(chunk)t&BMASK; co=t>>BASEBITS; \n", k);
  }
  printf("\n");
  for (k = N; k < 2 * N - 1; k++) {
    printf("\ts-=d[%d]; t=co+s ", k - N);
    for (i = N - 1; i >= 1 + k / 2; i--)
      printf("+(dchunk)(a[%d]-a[%d])*(b[%d]-b[%d])", i, k - i, k - i, i);
    printf("; c[%d]=(chunk)t&BMASK; co=t>>BASEBITS; \n", k);
  }
  printf("\tc[%d]=(chunk)co;\n", 2 * N - 1);
  printf("\nInsert this code in BIG_sqr() in file big.c between #define UNWOUND and #else \n\n");
  printf("\n\tt=(dchunk)a[0]*a[0]; c[0]=(chunk)t&BMASK; co=t>>BASEBITS;\n");
  for (k = 1; k < N; k++) {
    printf("\tt= ", k);
    for (i = k; i >= 1 + k / 2; i--)
      printf("+(dchunk)a[%d]*a[%d]", i, k - i);
    printf("; t+=t; t+=co;");
    if (k % 2 == 0)
      printf(" t+=(dchunk)a[%d]*a[%d];", k / 2, k / 2);
    printf(" c[%d]=(chunk)t&BMASK; co=t>>BASEBITS; \n", k);
  }
  printf("\n");
  for (k = N; k < 2 * N - 2; k++) {
    printf("\tt= ", k - N);
    for (i = N - 1; i >= 1 + k / 2; i--)
      printf("+(dchunk)a[%d]*a[%d]", i, k - i);
    printf("; t+=t; t+=co;");
    if (k % 2 == 0)
      printf(" t+=(dchunk)a[%d]*a[%d];", k / 2, k / 2);
    printf(" c[%d]=(chunk)t&BMASK; co=t>>BASEBITS; \n", k);
  }
  printf("\tt=co; t+=(dchunk)a[%d]*a[%d]; c[%d]=(chunk)t&BMASK; co=t>>BASEBITS; \n ", N - 1, N - 1, 2 * N - 2);
  printf("\tc[%d]=(chunk)co;\n", 2 * N - 1);
  printf("\nInsert this code in BIG_monty() in file big.c between #define UNWOUND and #else \n\n");
  printf("\tt=d[0]; v[0]=((chunk)t*MC)&BMASK; t+=(dchunk)v[0]*md[0];  s=0; c=(t>>BASEBITS);\n\n");
  for (k = 1; k < N; k++) {
    printf("\tt=d[%d]+c+s+(dchunk)v[0]*md[%d]", k, k);
    for (i = k - 1; i > k / 2; i--)
      printf("+(dchunk)(v[%d]-v[%d])*(md[%d]-md[%d])", k - i, i, i, k - i);
    printf("; v[%d]=((chunk)t*MC)&BMASK; t+=(dchunk)v[%d]*md[0]; ", k, k);
    printf(" dd[%d]=(dchunk)v[%d]*md[%d]; s+=dd[%d]; c=(t>>BASEBITS); \n", k, k, k, k);
  }
  printf("\n");
  for (k = N; k < 2 * N - 1; k++) {
    printf("\tt=d[%d]+c+s", k);
    for (i = N - 1; i >= 1 + k / 2; i--)
      printf("+(dchunk)(v[%d]-v[%d])*(md[%d]-md[%d])", k - i, i, i, k - i);
    printf("; a[%d]=(chunk)t&BMASK;  s-=dd[%d]; c=(t>>BASEBITS); \n", k - N, k - N + 1);
  }
  printf("\ta[%d]=d[%d]+(chunk)c&BMASK;\n", N - 1, 2 * N - 1);
}
```