user: 请将以下的汇编代码转换成C语言代码:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x30,%rsp
  mov    %edi,-0x24(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  cmpl   $0x4,-0x24(%rbp)
  je     L98
  mov    $0x0,%edi
  call   <usage@plt>
L98:
  mov    -0x30(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  lea    -0x1c(%rbp),%rdx
  lea    D112(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  test   %rax,%rax
  je     L85
  mov    -0x1c(%rbp),%eax
  test   %eax,%eax
  jg     L80
L85:
  lea    D76(%rip),%rax
  mov    %rax,%rdi
  call   <usage@plt>
L80:
  mov    -0x30(%rbp),%rax
  add    $0x10,%rax
  mov    (%rax),%rax
  lea    -0x14(%rbp),%rdx
  lea    D112(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  test   %rax,%rax
  je     L15
  mov    -0x14(%rbp),%eax
  test   %eax,%eax
  jg     L5
L15:
  lea    D67(%rip),%rax
  mov    %rax,%rdi
  call   <usage@plt>
L5:
  mov    -0x30(%rbp),%rax
  add    $0x18,%rax
  mov    (%rax),%rax
  lea    -0x18(%rbp),%rdx
  lea    D112(%rip),%rcx
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <sscanf@plt>
  test   %rax,%rax
  je     L102
  mov    -0x18(%rbp),%eax
  test   %eax,%eax
  jle    L102
  mov    -0x18(%rbp),%eax
  cmp    $0x20,%eax
  jle    L61
L102:
  lea    D2(%rip),%rax
  mov    %rax,%rdi
  call   <usage@plt>
L61:
  mov    -0x18(%rbp),%eax
  cmp    $0x1e,%eax
  jg     L66
  mov    -0x1c(%rbp),%edx
  mov    -0x14(%rbp),%eax
  add    %eax,%edx
  mov    -0x18(%rbp),%eax
  mov    $0x1,%esi
  mov    %eax,%ecx
  shl    %cl,%esi
  mov    %esi,%eax
  cmp    %eax,%edx
  jle    L66
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <usage@plt>
L66:
  mov    -0x18(%rbp),%edx
  mov    -0x1c(%rbp),%eax
  mov    -0x1c(%rbp),%esi
  mov    -0x14(%rbp),%ecx
  add    %esi,%ecx
  mov    %eax,%esi
  mov    %ecx,%edi
  call   <reed_sol_extended_vandermonde_matrix@plt>
  mov    %rax,-0x10(%rbp)
  lea    D74(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x18(%rbp),%ecx
  mov    -0x1c(%rbp),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x14(%rbp),%eax
  add    %eax,%esi
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <jerasure_print_matrix@plt>
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x18(%rbp),%edx
  mov    -0x1c(%rbp),%eax
  mov    -0x1c(%rbp),%esi
  mov    -0x14(%rbp),%ecx
  add    %esi,%ecx
  mov    %eax,%esi
  mov    %ecx,%edi
  call   <reed_sol_big_vandermonde_distribution_matrix@plt>
  mov    %rax,-0x10(%rbp)
  lea    D77(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x18(%rbp),%ecx
  mov    -0x1c(%rbp),%edx
  mov    -0x1c(%rbp),%esi
  mov    -0x14(%rbp),%eax
  add    %eax,%esi
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <jerasure_print_matrix@plt>
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x18(%rbp),%edx
  mov    -0x14(%rbp),%ecx
  mov    -0x1c(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <reed_sol_vandermonde_coding_matrix@plt>
  mov    %rax,-0x10(%rbp)
  lea    D31(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    -0x18(%rbp),%ecx
  mov    -0x1c(%rbp),%edx
  mov    -0x14(%rbp),%esi
  mov    -0x10(%rbp),%rax
  mov    %rax,%rdi
  call   <jerasure_print_matrix@plt>
  lea    D39(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L3
  call   <__stack_chk_fail@plt>
L3:
  leave
  ret
```

tool_calls: name: unpack_data
arguments: label: D112
data_type: string
name: unpack_data
arguments: label: D76
data_type: string
name: unpack_data
arguments: label: D67
data_type: string
name: unpack_data
arguments: label: D2
data_type: string
name: unpack_data
arguments: label: D50
data_type: string
name: unpack_data
arguments: label: D74
data_type: string
name: unpack_data
arguments: label: D39
data_type: string
name: unpack_data
arguments: label: D77
data_type: string
name: unpack_data
arguments: label: D31
data_type: string

tool: D112: %d

tool: D76: Bad k

tool: D67: Bad m

tool: D2: Bad w

tool: D50: k + m is too big

tool: D74: Extended Vandermonde Matrix:



tool: D39: 


tool: D77: Vandermonde Distribution Matrix:



tool: D31: Vandermonde Coding Matrix:



assistant: ```c
int main(int argc, char **argv) {
  int k, w, m;
  int *matrix;
  if (argc != 4)
    usage(NULL);
  if (sscanf(argv[1], "%d", &k) == 0 || k <= 0)
    usage("Bad k");
  if (sscanf(argv[2], "%d", &m) == 0 || m <= 0)
    usage("Bad m");
  if (sscanf(argv[3], "%d", &w) == 0 || w <= 0 || w > 32)
    usage("Bad w");
  if (w <= 30 && k + m > (1 << w))
    usage("k + m is too big");
  matrix = reed_sol_extended_vandermonde_matrix(k + m, k, w);
  printf("Extended Vandermonde Matrix:\n\n");
  jerasure_print_matrix(matrix, k + m, k, w);
  printf("\n");
  matrix = reed_sol_big_vandermonde_distribution_matrix(k + m, k, w);
  printf("Vandermonde Distribution Matrix:\n\n");
  jerasure_print_matrix(matrix, k + m, k, w);
  printf("\n");
  matrix = reed_sol_vandermonde_coding_matrix(k, m, w);
  printf("Vandermonde Coding Matrix:\n\n");
  jerasure_print_matrix(matrix, m, k, w);
  printf("\n");
  return 0;
}
```