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

```asm
<analyse_param>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %edi,-0x14(%rbp)
  mov    %rsi,-0x20(%rbp)
  mov    %rdx,-0x28(%rbp)
  mov    %rcx,-0x30(%rbp)
  mov    %r8,-0x38(%rbp)
  mov    %r9,-0x40(%rbp)
  movl   $0x0,-0x8(%rbp)
  movl   $0x0,-0x4(%rbp)
  movl   $0x1,-0xc(%rbp)
  jmp    L393
L19:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L306
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  sub    $0x43,%eax
  cmp    $0x33,%eax
  ja     L345
  mov    %eax,%eax
  lea    0x0(,%rax,4),%rdx
  lea    D251(%rip),%rax
  mov    (%rdx,%rax,1),%eax
  cltq
  lea    D251(%rip),%rdx
  add    %rdx,%rax
  notrack jmp *%rax
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L37
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L7
L37:
  mov    $0x0,%edx
  lea    D262(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L7:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x28(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L280
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L158
L280:
  mov    $0x0,%edx
  lea    D82(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L158:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x30(%rbp),%rdx
  mov    %eax,(%rdx)
  movl   $0x1,-0x4(%rbp)
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L215
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L249
L215:
  mov    $0x0,%edx
  lea    D261(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L249:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x38(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L378
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L546
L378:
  mov    $0x0,%edx
  lea    D252(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L546:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    -0x40(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L316
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L260
L316:
  mov    $0x0,%edx
  lea    D363(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L260:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    0x10(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L490
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L101
L490:
  mov    $0x0,%edx
  lea    D336(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L101:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    0x18(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L82
  mov    0x28(%rbp),%rax
  movl   $0x1,(%rax)
  jmp    L82
  mov    $0x0,%eax
  call   <print_help@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L82
  mov    $0x0,%eax
  call   <print_licence@plt>
  mov    $0x1,%edi
  call   <exit@plt>
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L119
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L179
L119:
  mov    $0x0,%edx
  lea    D29(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L179:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    0x20(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L120
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L472
L120:
  mov    $0x0,%edx
  lea    D248(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L472:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <atoi@plt>
  mov    0x60(%rbp),%rdx
  mov    %eax,(%rdx)
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L1
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L47
L1:
  mov    $0x0,%edx
  lea    D220(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L47:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x30(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  movl   $0x1,-0x8(%rbp)
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L194
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L175
L194:
  mov    $0x0,%edx
  lea    D84(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L175:
  mov    0x50(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x38(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L4
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L78
L4:
  mov    $0x0,%edx
  lea    D241(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L78:
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x48(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L82
  addl   $0x1,-0xc(%rbp)
  mov    -0x14(%rbp),%eax
  cmp    -0xc(%rbp),%eax
  je     L241
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rax
  movzbl (%rax),%eax
  cmp    $0x2d,%al
  jne    L195
L241:
  mov    $0x0,%edx
  lea    D381(%rip),%rax
  mov    %rax,%rsi
  lea    D333(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L195:
  mov    0x58(%rbp),%rax
  movl   $0x0,(%rax)
  mov    -0xc(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x20(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    0x40(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  jmp    L82
L345:
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
  jmp    L82
L306:
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D50(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L82:
  addl   $0x1,-0xc(%rbp)
L393:
  mov    -0xc(%rbp),%eax
  cmp    -0x14(%rbp),%eax
  jl     L19
  mov    0x50(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0xffffffff,%eax
  jne    L46
  mov    $0x0,%edx
  lea    D92(%rip),%rax
  mov    %rax,%rsi
  lea    D236(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L46:
  mov    0x58(%rbp),%rax
  mov    (%rax),%eax
  cmp    $0xffffffff,%eax
  jne    L170
  mov    $0x0,%edx
  lea    D237(%rip),%rax
  mov    %rax,%rsi
  lea    D236(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L170:
  cmpl   $0x0,-0x8(%rbp)
  jne    L457
  mov    $0x0,%edx
  lea    D24(%rip),%rax
  mov    %rax,%rsi
  lea    D236(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L457:
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L317
  mov    0x10(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L317
  mov    -0x40(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L317
  mov    -0x38(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L317
  mov    0x20(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  je     L317
  mov    0x18(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jne    L518
L317:
  mov    $0x0,%edx
  mov    $0x0,%esi
  lea    D127(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L518:
  cmpl   $0x0,-0x4(%rbp)
  je     L328
  mov    -0x30(%rbp),%rax
  mov    (%rax),%eax
  test   %eax,%eax
  jle    L164
  mov    -0x30(%rbp),%rax
  mov    (%rax),%edx
  mov    -0x28(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jle    L328
L164:
  mov    $0x0,%edx
  lea    D321(%rip),%rax
  mov    %rax,%rsi
  lea    D160(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L328:
  mov    0x20(%rbp),%rax
  mov    (%rax),%edx
  mov    0x18(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jl     L144
  mov    $0x0,%edx
  lea    D104(%rip),%rax
  mov    %rax,%rsi
  lea    D160(%rip),%rax
  mov    %rax,%rdi
  call   <print_error_lfmm@plt>
L144:
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D262
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D333
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D82
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D261
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D252
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D363
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D336
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D29
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D248
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D220
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D84
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D241
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D381
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D50
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D92
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D236
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D237
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D24
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D127
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D321
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D160
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D104
type_guessed: string

tool: D262: D (number of covariables)

tool: D333: cmd

tool: D82: d (numerous of the covariable)

tool: D261: n (number of individuals)

tool: D252: L (number of SNPs)

tool: D363: K (number of latent factors)

tool: D336: i (number of iterations in the GS)

tool: D29: b (burn parameter in the GS)

tool: D248: p (number of processes used)

tool: D220: o (output file with z-scores)

tool: D84: g (genotype file)

tool: D241: C (DIC file)

tool: D381: v (variable file)

tool: D50: basic

tool: D92: -g genotype_file

tool: D236: option

tool: D237: -v variable_file

tool: D24: -o output_file

tool: D127: missing

tool: D321: (-d option). d should be between 1 and D

tool: D160: specific

tool: D104: the number of iterations for burnin (b) is greater than the number total of iterations (i)

assistant: ```c
void analyse_param(int argc, char *argv[], int *D, int *d, int *N, int *M, int *K, int *Niter, int *burn, int *m, char *output, char *input, char *cov_file, char *dev_file, int *g_data, int *g_cov, int *num_thrd) {
  int i;
  int out = 0;
  int dOk = 0;
  for (i = 1; i < argc; i++) {
    if (argv[i][0] == '-') {
      switch (argv[i][1]) {
      case 'D':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "D (number of covariables)", 0);
        *D = atoi(argv[i]);
        break;
      case 'd':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "d (numerous of the covariable)", 0);
        *d = atoi(argv[i]);
        dOk = 1;
        break;
      case 'n':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "n (number of individuals)", 0);
        *N = atoi(argv[i]);
        break;
      case 'L':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "L (number of SNPs)", 0);
        *M = atoi(argv[i]);
        break;
      case 'K':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "K (number of latent factors)", 0);
        *K = atoi(argv[i]);
        break;
      case 'i':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "i (number of iterations in the GS)", 0);
        *Niter = atoi(argv[i]);
        break;
      case 'm':
        *m = 1;
        break;
      case 'h':
        print_help();
        exit(1);
        break;
      case 'l':
        print_licence();
        exit(1);
        break;
      case 'b':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "b (burn parameter in the GS)", 0);
        *burn = atoi(argv[i]);
        break;
      case 'p':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "p (number of processes used)", 0);
        *num_thrd = atoi(argv[i]);
        break;
      case 'o':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "o (output file with z-scores)", 0);
        strcpy(output, argv[i]);
        out = 1;
        break;
      case 'g':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "g (genotype file)", 0);
        *g_data = 0;
        strcpy(input, argv[i]);
        break;
      case 'C':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "C (DIC file)", 0);
        strcpy(dev_file, argv[i]);
        break;
      case 'v':
        i++;
        if (argc == i || argv[i][0] == '-')
          print_error_lfmm("cmd", "v (variable file)", 0);
        *g_cov = 0;
        strcpy(cov_file, argv[i]);
        break;
      default:
        print_error_lfmm("basic", NULL, 0);
      }
    } else {
      print_error_lfmm("basic", NULL, 0);
    }
  }
  if (*g_data == -1)
    print_error_lfmm("option", "-g genotype_file", 0);
  if (*g_cov == -1)
    print_error_lfmm("option", "-v variable_file", 0);
  if (!out)
    print_error_lfmm("option", "-o output_file", 0);
  if (*D == 0 || *K == 0 || *M == 0 || *N == 0 || *burn == 0 || *Niter == 0)
    print_error_lfmm("missing", NULL, 0);
  if (dOk && (*d < 1 || *d > *D)) {
    print_error_lfmm("specific", "(-d option). d should be between 1 and D", 0);
  }
  if (*burn >= *Niter) {
    print_error_lfmm("specific",
                     "the number of iterations for burnin "
                     "(b) is greater than the number total of iterations (i)",
                     0);
  }
}
```