user: Demonstrate the C code that generates the assembly output below:

```asm
<main>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  mov    %rsi,%rbp
  sub    $0x10,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x8(%rsp)
  xor    %eax,%eax
  cmp    $0x3,%edi
  je     L145
  xor    %edi,%edi
  call   <usage@plt>
L145:
  mov    %rsp,%r12
  lea    D47(%rip),%r13
  mov    0x8(%rbp),%rdi
  mov    %r12,%rdx
  mov    %r13,%rsi
  call   <sscanf@plt>
  test   %rax,%rax
  je     L90
  mov    (%rsp),%eax
  test   %eax,%eax
  jle    L90
L75:
  mov    0x10(%rbp),%rdi
  lea    0x4(%rsp),%rdx
  mov    %r13,%rsi
  call   <sscanf@plt>
  test   %rax,%rax
  je     L31
  mov    0x4(%rsp),%edx
  lea    -0x1(%rdx),%eax
  cmp    $0x1f,%eax
  jbe    L139
L31:
  lea    D35(%rip),%rdi
  call   <usage@plt>
  mov    0x4(%rsp),%edx
L139:
  cmp    $0x1d,%edx
  jg     L118
  mov    $0x1,%eax
  mov    %edx,%ecx
  shl    %cl,%eax
  cmp    (%rsp),%eax
  jle    L91
L118:
  mov    %r12,%rcx
  mov    $0x1,%esi
  mov    $0x1,%edi
  call   <jerasure_matrix_to_bitmatrix@plt>
  mov    0x4(%rsp),%esi
  mov    %rax,%r12
  mov    %esi,%ecx
  imul   %esi,%ecx
  test   %ecx,%ecx
  je     L81
  lea    -0x1(%rcx),%eax
  cmp    $0x2,%eax
  jbe    L108
  mov    %ecx,%edx
  mov    %r12,%rax
  pxor   %xmm0,%xmm0
  shr    $0x2,%edx
  shl    $0x4,%rdx
  add    %r12,%rdx
  nopw   0x0(%rax,%rax,1)
L142:
  movdqu (%rax),%xmm2
  add    $0x10,%rax
  paddd  %xmm2,%xmm0
  cmp    %rdx,%rax
  jne    L142
  movdqa %xmm0,%xmm1
  mov    %ecx,%eax
  psrldq $0x8,%xmm1
  and    $0xfffffffc,%eax
  paddd  %xmm1,%xmm0
  movdqa %xmm0,%xmm1
  psrldq $0x4,%xmm1
  paddd  %xmm1,%xmm0
  movd   %xmm0,%ebp
  test   $0x3,%cl
  je     L153
L77:
  movslq %eax,%rdx
  lea    0x0(,%rdx,4),%rdi
  add    (%r12,%rdx,4),%ebp
  lea    0x1(%rax),%edx
  cmp    %ecx,%edx
  jge    L153
  add    $0x2,%eax
  add    0x4(%r12,%rdi,1),%ebp
  cmp    %eax,%ecx
  jle    L153
  add    0x8(%r12,%rdi,1),%ebp
L153:
  mov    (%rsp),%edi
  call   <cauchy_n_ones@plt>
  lea    D21(%rip),%rdi
  mov    %eax,%esi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    %ebp,%esi
  lea    D15(%rip),%rdi
  xor    %eax,%eax
  call   <printf@plt>
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    0x4(%rsp),%esi
  mov    %r12,%rdi
  mov    %esi,%ecx
  mov    %esi,%edx
  call   <jerasure_print_bitmatrix@plt>
  mov    0x8(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L127
  add    $0x10,%rsp
  xor    %eax,%eax
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L90:
  lea    D31(%rip),%rdi
  call   <usage@plt>
  jmp    L75
L91:
  lea    D54(%rip),%rdi
  call   <usage@plt>
  mov    0x4(%rsp),%edx
  jmp    L118
L81:
  xor    %ebp,%ebp
  jmp    L153
L108:
  xor    %ebp,%ebp
  xor    %eax,%eax
  jmp    L77
L127:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: unpack_data
arguments: tag: D47
datatype: string
name: unpack_data
arguments: tag: D35
datatype: string
name: unpack_data
arguments: tag: D21
datatype: string
name: unpack_data
arguments: tag: D15
datatype: string
name: unpack_data
arguments: tag: D31
datatype: string
name: unpack_data
arguments: tag: D54
datatype: string

tool: D47: %d

tool: D35: Bad w

tool: D21: # Ones: %d


tool: D15: Bitmatrix has %d ones


tool: D31: Bad n

tool: D54: n is too big

assistant: ```c
int main(int argc, char **argv) {
  int n, i, no, w;
  int *bitmatrix;
  if (argc != 3)
    usage(NULL);
  if (sscanf(argv[1], "%d", &n) == 0 || n <= 0)
    usage("Bad n");
  if (sscanf(argv[2], "%d", &w) == 0 || w <= 0 || w > 32)
    usage("Bad w");
  if (w < 30 && n >= (1 << w))
    usage("n is too big");
  bitmatrix = jerasure_matrix_to_bitmatrix(1, 1, w, &n);
  no = 0;
  for (i = 0; i < w * w; i++)
    no += bitmatrix[i];
  printf("# Ones: %d\n", cauchy_n_ones(n, w));
  printf("\n");
  printf("Bitmatrix has %d ones\n", no);
  printf("\n");
  jerasure_print_bitmatrix(bitmatrix, w, w, w);
  return 0;
}
```