user: Please show me the C implementation that matches the assembly code listed below:

```asm
<main>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xb0,%rsp
  mov    %edi,-0xa4(%rbp)
  mov    %rsi,-0xb0(%rbp)
  cmpl   $0x1,-0xa4(%rbp)
  jne    L27
  mov    -0xb0(%rbp),%rax
  mov    (%rax),%rax
  mov    %rax,%rsi
  lea    D30(%rip),%rax
  mov    %rax,%rdi
  mov    $0x0,%eax
  call   <printf@plt>
  mov    $0x1,%eax
  jmp    L4
L27:
  movl   $0x0,-0x9c(%rbp)
  mov    -0xb0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <get_h_size@plt>
  mov    %eax,-0x94(%rbp)
  mov    -0xb0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <get_v_size@plt>
  mov    %eax,-0x90(%rbp)
  mov    -0xb0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rax
  mov    %rax,%rdi
  call   <get_l_size@plt>
  mov    %eax,-0x8c(%rbp)
  mov    -0xb0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x94(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <load_H@plt>
  mov    %rax,-0x70(%rbp)
  mov    -0xb0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x90(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <load_V@plt>
  mov    %rax,-0x68(%rbp)
  mov    -0xb0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x90(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <load_T@plt>
  mov    %rax,-0x60(%rbp)
  mov    -0xb0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x8c(%rbp),%ecx
  mov    -0x94(%rbp),%eax
  mov    %ecx,%esi
  mov    %eax,%edi
  call   <load_G@plt>
  mov    %rax,-0x58(%rbp)
  mov    -0xb0(%rbp),%rax
  add    $0x8,%rax
  mov    (%rax),%rdx
  mov    -0x8c(%rbp),%eax
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <load_K@plt>
  mov    %rax,-0x50(%rbp)
  mov    $0x0,%edi
  call   <time@plt>
  mov    %eax,%edi
  call   <srand@plt>
  mov    $0x0,%edi
  call   <time@plt>
  mov    %rax,%rdi
  call   <srand48@plt>
  mov    $0x0,%eax
  call   <check_instance@plt>
  test   %rax,%rax
  je     L71
  lea    D11(%rip),%rax
  mov    %rax,%rdi
  call   <puts@plt>
  mov    $0x1,%eax
  jmp    L4
L71:
  mov    -0x68(%rbp),%rcx
  mov    -0x90(%rbp),%edx
  mov    -0x94(%rbp),%eax
  mov    $0x1,%r8d
  mov    %eax,%esi
  mov    $0x64,%edi
  call   <initialization@plt>
  mov    %rax,-0x80(%rbp)
  mov    -0x90(%rbp),%edi
  mov    -0x94(%rbp),%ecx
  mov    -0x68(%rbp),%rdx
  mov    -0x70(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  mov    %edi,%r9d
  mov    %ecx,%r8d
  mov    $0x64,%ecx
  mov    %rax,%rdi
  call   <load_utilization@plt>
  mov    %rax,-0x48(%rbp)
  mov    -0x90(%rbp),%edi
  mov    -0x8c(%rbp),%ecx
  mov    -0x60(%rbp),%rdx
  mov    -0x58(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  mov    %edi,%r9d
  mov    %ecx,%r8d
  mov    $0x64,%ecx
  mov    %rax,%rdi
  call   <load_network_utilization@plt>
  mov    %rax,-0x40(%rbp)
  mov    -0x94(%rbp),%r8d
  mov    -0x68(%rbp),%rcx
  mov    -0x70(%rbp),%rdx
  mov    -0x48(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  sub    $0x8,%rsp
  push   -0x60(%rbp)
  push   -0x58(%rbp)
  mov    -0x8c(%rbp),%edi
  push   %rdi
  push   -0x40(%rbp)
  push   -0x50(%rbp)
  push   $0x1
  mov    -0x90(%rbp),%edi
  push   %rdi
  mov    %r8d,%r9d
  mov    $0x64,%r8d
  mov    %rax,%rdi
  call   <reparation@plt>
  add    $0x40,%rsp
  mov    %rax,-0x80(%rbp)
  mov    -0x60(%rbp),%r8
  mov    -0x68(%rbp),%rcx
  mov    -0x70(%rbp),%rdx
  mov    -0x48(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x8c(%rbp),%edi
  push   %rdi
  push   -0x40(%rbp)
  push   -0x50(%rbp)
  mov    -0x90(%rbp),%edi
  push   %rdi
  mov    -0x94(%rbp),%edi
  push   %rdi
  mov    $0x64,%r9d
  mov    %rax,%rdi
  call   <load_objectives@plt>
  add    $0x30,%rsp
  mov    %rax,-0x38(%rbp)
  mov    -0x38(%rbp),%rax
  mov    $0x64,%esi
  mov    %rax,%rdi
  call   <non_dominated_sorting@plt>
  mov    %rax,-0x30(%rbp)
  movq   $0x0,-0x78(%rbp)
  movl   $0x0,-0x98(%rbp)
  jmp    L30
L62:
  mov    -0x98(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x30(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  jne    L113
  mov    -0x98(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rcx
  mov    -0x98(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x80(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x90(%rbp),%esi
  mov    -0x78(%rbp),%rax
  mov    %rax,%rdi
  call   <pareto_insert@plt>
  mov    %rax,-0x78(%rbp)
L113:
  addl   $0x1,-0x98(%rbp)
L30:
  cmpl   $0x63,-0x98(%rbp)
  jle    L62
  jmp    L107
L97:
  addl   $0x1,-0x9c(%rbp)
  mov    -0x68(%rbp),%rcx
  mov    -0x90(%rbp),%edx
  mov    -0x94(%rbp),%eax
  mov    $0x1,%r8d
  mov    %eax,%esi
  mov    $0x64,%edi
  call   <initialization@plt>
  mov    %rax,-0x28(%rbp)
  mov    D5(%rip),%rdx
  mov    -0x30(%rbp),%rax
  movq   %rdx,%xmm0
  mov    $0x64,%esi
  mov    %rax,%rdi
  call   <selection@plt>
  mov    %eax,-0x88(%rbp)
  mov    D5(%rip),%rdx
  mov    -0x30(%rbp),%rax
  movq   %rdx,%xmm0
  mov    $0x64,%esi
  mov    %rax,%rdi
  call   <selection@plt>
  mov    %eax,-0x84(%rbp)
  mov    -0x90(%rbp),%ecx
  mov    -0x84(%rbp),%edx
  mov    -0x88(%rbp),%esi
  mov    -0x28(%rbp),%rax
  mov    %rax,%rdi
  call   <crossover@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x90(%rbp),%ecx
  mov    -0x94(%rbp),%edx
  mov    -0x68(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  mov    %ecx,%r8d
  mov    %edx,%ecx
  mov    $0x64,%edx
  mov    %rax,%rdi
  call   <mutation@plt>
  mov    %rax,-0x28(%rbp)
  mov    -0x90(%rbp),%edi
  mov    -0x94(%rbp),%ecx
  mov    -0x68(%rbp),%rdx
  mov    -0x70(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  mov    %edi,%r9d
  mov    %ecx,%r8d
  mov    $0x64,%ecx
  mov    %rax,%rdi
  call   <load_utilization@plt>
  mov    %rax,-0x20(%rbp)
  mov    -0x90(%rbp),%edi
  mov    -0x8c(%rbp),%ecx
  mov    -0x60(%rbp),%rdx
  mov    -0x58(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  mov    %edi,%r9d
  mov    %ecx,%r8d
  mov    $0x64,%ecx
  mov    %rax,%rdi
  call   <load_network_utilization@plt>
  mov    %rax,-0x18(%rbp)
  mov    -0x94(%rbp),%r8d
  mov    -0x68(%rbp),%rcx
  mov    -0x70(%rbp),%rdx
  mov    -0x20(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  push   -0x60(%rbp)
  push   -0x58(%rbp)
  mov    -0x8c(%rbp),%edi
  push   %rdi
  push   -0x18(%rbp)
  push   -0x50(%rbp)
  push   $0x1
  mov    -0x90(%rbp),%edi
  push   %rdi
  mov    %r8d,%r9d
  mov    $0x64,%r8d
  mov    %rax,%rdi
  call   <reparation@plt>
  add    $0x40,%rsp
  mov    %rax,-0x28(%rbp)
  mov    -0x60(%rbp),%r8
  mov    -0x68(%rbp),%rcx
  mov    -0x70(%rbp),%rdx
  mov    -0x20(%rbp),%rsi
  mov    -0x28(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x8c(%rbp),%edi
  push   %rdi
  push   -0x18(%rbp)
  push   -0x50(%rbp)
  mov    -0x90(%rbp),%edi
  push   %rdi
  mov    -0x94(%rbp),%edi
  push   %rdi
  mov    $0x64,%r9d
  mov    %rax,%rdi
  call   <load_objectives@plt>
  add    $0x30,%rsp
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  mov    $0x64,%esi
  mov    %rax,%rdi
  call   <non_dominated_sorting@plt>
  mov    %rax,-0x8(%rbp)
  movl   $0x0,-0x98(%rbp)
  jmp    L44
L46:
  mov    -0x98(%rbp),%eax
  cltq
  lea    0x0(,%rax,4),%rdx
  mov    -0x8(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%eax
  cmp    $0x1,%eax
  jne    L115
  mov    -0x98(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x10(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rcx
  mov    -0x98(%rbp),%eax
  cltq
  lea    0x0(,%rax,8),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  mov    (%rax),%rdx
  mov    -0x90(%rbp),%esi
  mov    -0x78(%rbp),%rax
  mov    %rax,%rdi
  call   <pareto_insert@plt>
  mov    %rax,-0x78(%rbp)
L115:
  addl   $0x1,-0x98(%rbp)
L44:
  cmpl   $0x63,-0x98(%rbp)
  jle    L46
  mov    -0x30(%rbp),%r8
  mov    -0x10(%rbp),%rcx
  mov    -0x38(%rbp),%rdx
  mov    -0x28(%rbp),%rsi
  mov    -0x80(%rbp),%rax
  sub    $0x8,%rsp
  mov    -0x90(%rbp),%edi
  push   %rdi
  mov    $0x64,%r9d
  mov    %rax,%rdi
  call   <population_evolution@plt>
  add    $0x10,%rsp
  mov    %rax,-0x80(%rbp)
L107:
  cmpl   $0x0,-0x9c(%rbp)
  jle    L97
  mov    -0x90(%rbp),%r9d
  mov    -0x68(%rbp),%r8
  mov    -0x70(%rbp),%rcx
  mov    -0x60(%rbp),%rdx
  mov    -0x58(%rbp),%rsi
  mov    -0x78(%rbp),%rax
  mov    -0x8c(%rbp),%edi
  push   %rdi
  mov    -0x94(%rbp),%edi
  push   %rdi
  mov    %rax,%rdi
  call   <report_best_population@plt>
  add    $0x10,%rsp
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    $0x0,%eax
L4:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D30
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D11
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D5
type_guessed: f64

tool: D30: [ERROR] usage: %s datacenter_file


tool: D11: 
The problem has no solution, call Amazon EC2

tool: D5: 0.5

assistant: ```c
int main(int argc, char *argv[]) {
  if (argc == 1) {
    printf("[ERROR] usage: %s datacenter_file\n", argv[0]);
    return 1;
  } else {
    int generation = 0;
    int h_size = get_h_size(argv[1]);
    int v_size = get_v_size(argv[1]);
    int l_size = get_l_size(argv[1]);
    int **H = load_H(h_size, argv[1]);
    int **V = load_V(v_size, argv[1]);
    int **T = load_T(v_size, argv[1]);
    int **G = load_G(h_size, l_size, argv[1]);
    int *K = load_K(l_size, argv[1]);
    srand((unsigned int)time(NULL));
    srand48(time(NULL));
    if (check_instance() != 0) {
      printf("\nThe problem has no solution, call Amazon EC2\n");
      return 1;
    }
    int **P = initialization(100, h_size, v_size, V, 1);
    int ***utilization_P = load_utilization(P, H, V, 100, h_size, v_size);
    int **network_utilization_P = load_network_utilization(P, G, T, 100, l_size, v_size);
    P = reparation(P, utilization_P, H, V, 100, h_size, v_size, 1, K, network_utilization_P, l_size, G, T);
    float **objectives_functions_P = load_objectives(P, utilization_P, H, V, T, 100, h_size, v_size, K, network_utilization_P, l_size);
    int *fronts_P = non_dominated_sorting(objectives_functions_P, 100);
    struct pareto_element *pareto_head = NULL;
    int iterator_individual;
    for (iterator_individual = 0; iterator_individual < 100; iterator_individual++) {
      if (fronts_P[iterator_individual] == 1) {
        pareto_head = (struct pareto_element *)pareto_insert(pareto_head, v_size, P[iterator_individual], objectives_functions_P[iterator_individual]);
      }
    }
    int father, mother;
    int **Q;
    int ***utilization_Q;
    int **network_utilization_Q;
    float **objectives_functions_Q;
    int *fronts_Q;
    while (generation < 1) {
      generation++;
      Q = initialization(100, h_size, v_size, V, 1);
      father = selection(fronts_P, 100, 0.5);
      mother = selection(fronts_P, 100, 0.5);
      Q = crossover(Q, father, mother, v_size);
      Q = mutation(Q, V, 100, h_size, v_size);
      utilization_Q = load_utilization(Q, H, V, 100, h_size, v_size);
      network_utilization_Q = load_network_utilization(Q, G, T, 100, l_size, v_size);
      Q = reparation(Q, utilization_Q, H, V, 100, h_size, v_size, 1, K, network_utilization_Q, l_size, G, T);
      objectives_functions_Q = load_objectives(Q, utilization_Q, H, V, T, 100, h_size, v_size, K, network_utilization_Q, l_size);
      fronts_Q = non_dominated_sorting(objectives_functions_Q, 100);
      for (iterator_individual = 0; iterator_individual < 100; iterator_individual++) {
        if (fronts_Q[iterator_individual] == 1) {
          pareto_head = (struct pareto_element *)pareto_insert(pareto_head, v_size, Q[iterator_individual], objectives_functions_Q[iterator_individual]);
        }
      }
      P = population_evolution(P, Q, objectives_functions_P, objectives_functions_Q, fronts_P, 100, v_size);
    }
    report_best_population(pareto_head, G, T, H, V, v_size, h_size, l_size);
    printf("\n");
    return 0;
  }
}
```