user: Converte this assembly snippet into its equivalent C code:

```asm
<main>:
  endbr64
  push   %r12
  lea    D19(%rip),%rdi
  lea    D110(%rip),%r12
  push   %rbp
  push   %rbx
  sub    $0x110,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,0x108(%rsp)
  xor    %eax,%eax
  call   <puts@plt>
  lea    0xc(%rsp),%rsi
  mov    %r12,%rdi
  call   <scanf@plt>
  mov    0xc(%rsp),%esi
  test   %esi,%esi
  jle    L22
  lea    -0x1(%rsi),%eax
  cmp    $0x4,%eax
  jbe    L62
  lea    0x10(%rsp),%rdx
  movdqa D119(%rip),%xmm1
  mov    %esi,%eax
  movq   %rdx,%xmm0
  shr    $0x2,%eax
  punpcklqdq %xmm0,%xmm0
  paddq  %xmm0,%xmm1
  movaps %xmm1,0x60(%rsp)
  movdqa D106(%rip),%xmm1
  paddq  %xmm0,%xmm1
  movaps %xmm1,0x70(%rsp)
  cmp    $0x1,%eax
  je     L19
  movdqa D16(%rip),%xmm1
  paddq  %xmm0,%xmm1
  movaps %xmm1,0x80(%rsp)
  movdqa D129(%rip),%xmm1
  paddq  %xmm0,%xmm1
  movaps %xmm1,0x90(%rsp)
  cmp    $0x2,%eax
  je     L19
  movdqa D8(%rip),%xmm1
  paddq  %xmm0,%xmm1
  movaps %xmm1,0xa0(%rsp)
  movdqa D114(%rip),%xmm1
  paddq  %xmm0,%xmm1
  movaps %xmm1,0xb0(%rsp)
  cmp    $0x3,%eax
  je     L19
  movdqa D53(%rip),%xmm1
  paddq  %xmm0,%xmm1
  movaps %xmm1,0xc0(%rsp)
  movdqa D120(%rip),%xmm1
  paddq  %xmm0,%xmm1
  movaps %xmm1,0xd0(%rsp)
  cmp    $0x4,%eax
  je     L19
  movdqa D44(%rip),%xmm1
  paddq  %xmm0,%xmm1
  paddq  D139(%rip),%xmm0
  movaps %xmm1,0xe0(%rsp)
  movaps %xmm0,0xf0(%rsp)
L19:
  mov    %esi,%eax
  and    $0xfffffffc,%eax
  test   $0x3,%sil
  je     L22
L150:
  movslq %eax,%rdi
  lea    0x0(,%rdi,4),%rcx
  lea    (%rdx,%rcx,1),%r8
  mov    %r8,0x60(%rsp,%rdi,8)
  lea    0x1(%rax),%edi
  cmp    %esi,%edi
  jge    L22
  movslq %edi,%rdi
  lea    0x4(%rdx,%rcx,1),%r8
  mov    %r8,0x60(%rsp,%rdi,8)
  lea    0x2(%rax),%edi
  cmp    %edi,%esi
  jle    L22
  movslq %edi,%rdi
  lea    0x8(%rdx,%rcx,1),%r8
  mov    %r8,0x60(%rsp,%rdi,8)
  lea    0x3(%rax),%edi
  cmp    %edi,%esi
  jle    L22
  movslq %edi,%rdi
  lea    0xc(%rdx,%rcx,1),%r8
  add    $0x4,%eax
  mov    %r8,0x60(%rsp,%rdi,8)
  cmp    %eax,%esi
  jle    L22
  cltq
  lea    0x10(%rdx,%rcx,1),%rdx
  mov    %rdx,0x60(%rsp,%rax,8)
L22:
  lea    D102(%rip),%rdi
  xor    %eax,%eax
  lea    0x60(%rsp),%rbp
  call   <printf@plt>
  mov    0xc(%rsp),%esi
  test   %esi,%esi
  jle    L55
  xor    %ebx,%ebx
  lea    0x60(%rsp),%rbp
  nopl   0x0(%rax,%rax,1)
L144:
  mov    0x0(%rbp,%rbx,8),%rsi
  mov    %r12,%rdi
  add    $0x1,%rbx
  call   <scanf@plt>
  mov    0xc(%rsp),%esi
  cmp    %ebx,%esi
  jg     L144
L55:
  mov    %rbp,%rdi
  call   <sort@plt>
  lea    D23(%rip),%rdi
  call   <puts@plt>
  mov    0xc(%rsp),%eax
  test   %eax,%eax
  jle    L122
  xor    %ebx,%ebx
  lea    D66(%rip),%r12
  cs nopw 0x0(%rax,%rax,1)
L108:
  mov    0x0(%rbp,%rbx,8),%rax
  mov    %r12,%rdi
  add    $0x1,%rbx
  mov    (%rax),%esi
  xor    %eax,%eax
  call   <printf@plt>
  cmp    %ebx,0xc(%rsp)
  jg     L108
L122:
  mov    $0xa,%edi
  call   <putchar@plt>
  mov    0x108(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L28
  add    $0x110,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  ret
L62:
  xor    %eax,%eax
  lea    0x10(%rsp),%rdx
  jmp    L150
L28:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: parse_data
arguments: data_tag: D19
type: string
name: parse_data
arguments: data_tag: D110
type: string
name: parse_data
arguments: data_tag: D119
type: byte[16]
name: parse_data
arguments: data_tag: D106
type: byte[16]
name: parse_data
arguments: data_tag: D16
type: byte[16]
name: parse_data
arguments: data_tag: D129
type: byte[16]
name: parse_data
arguments: data_tag: D8
type: byte[16]
name: parse_data
arguments: data_tag: D114
type: byte[16]
name: parse_data
arguments: data_tag: D53
type: byte[16]
name: parse_data
arguments: data_tag: D120
type: byte[16]
name: parse_data
arguments: data_tag: D44
type: byte[16]
name: parse_data
arguments: data_tag: D139
type: byte[16]
name: parse_data
arguments: data_tag: D102
type: string
name: parse_data
arguments: data_tag: D23
type: string
name: parse_data
arguments: data_tag: D66
type: string

tool: D19: input n:

tool: D110: %d

tool: {"D119": [0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D106": [0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D16": [0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D129": [0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D8": [0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D114": [0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D53": [0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x34,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D120": [0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D44": [0x40,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x44,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: {"D139": [0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00]}

tool: D102: input %d integer numbers:

tool: D23: Now,the sequence is:

tool: D66: %d  

assistant: ```c
int main() {
  void sort(int **p, int n);
  int i, n;
  int data[20], *pstr[20], **p;
  printf("input n:\n");
  scanf("%d", &n);
  for (i = 0; i < n; i++)
    pstr[i] = &data[i];
  printf("input %d integer numbers:", n);
  for (i = 0; i < n; i++)
    scanf("%d", pstr[i]);
  p = pstr;
  sort(p, n);
  printf("Now,the sequence is:\n");
  for (i = 0; i < n; i++)
    printf("%d  ", *pstr[i]);
  printf("\n");
  return 0;
}
```