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

```asm
<fourSum>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  xor    %r13d,%r13d
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x18,%rsp
  mov    %esi,(%rsp)
  cmp    $0x3,%esi
  jle    L309
  mov    %rdi,%rbx
  mov    $0x200,%edi
  mov    %edx,%ebp
  mov    %rcx,%r12
  call   <malloc@plt>
  mov    %rax,%r13
  mov    %rax,%r14
  lea    0x200(%rax),%r15
L96:
  mov    $0x10,%edi
  add    $0x8,%r14
  call   <malloc@plt>
  mov    %rax,-0x8(%r14)
  cmp    %r15,%r14
  jne    L96
  mov    (%rsp),%r14d
  xor    %esi,%esi
  mov    %rbx,%rdi
  lea    -0x1(%r14),%r15d
  mov    %r15d,%edx
  call   <quick_sort@plt>
  mov    %r14d,%eax
  lea    -0x3(%r14),%esi
  lea    0x4(%rbx),%r8
  sub    $0x2,%eax
  mov    %esi,0xc(%rsp)
  movl   $0x0,0x8(%rsp)
  mov    %eax,(%rsp)
  nopl   0x0(%rax)
L52:
  addl   $0x1,0x8(%rsp)
  mov    0x8(%rsp),%eax
  cmp    $0x1,%eax
  je     L150
  movslq (%r12),%rax
  test   %eax,%eax
  jle    L243
  mov    -0x8(%r13,%rax,8),%rax
  mov    (%rax),%eax
  cmp    %eax,-0x4(%r8)
  je     L203
L243:
  mov    0x8(%rsp),%esi
  cmp    %esi,(%rsp)
  jle    L203
L150:
  mov    0xc(%rsp),%esi
  mov    0x8(%rsp),%r11d
  mov    %r8,%r14
  cmp    %r11d,%esi
  mov    %r11d,%eax
  cmovle %esi,%eax
  mov    %eax,0x4(%rsp)
  nopl   (%rax)
L230:
  add    $0x1,%r11d
  mov    %r15d,%esi
  mov    %r11d,%eax
  cmp    %r11d,%r15d
  jg     L234
  jmp    L171
  nopl   0x0(%rax)
L39:
  add    $0x1,%eax
L252:
  cmp    %eax,%esi
  jle    L171
L234:
  movslq %esi,%rdx
  movslq %eax,%rcx
  mov    -0x4(%r8),%r10d
  lea    (%rbx,%rdx,4),%r9
  shl    $0x2,%rcx
  mov    (%r14),%edx
  lea    (%rbx,%rcx,1),%rdi
  add    %r10d,%edx
  add    (%rdi),%edx
  add    (%r9),%edx
  cmp    %ebp,%edx
  jl     L39
  jle    L270
  sub    $0x1,%esi
  cmp    %eax,%esi
  jg     L234
L171:
  add    $0x4,%r14
  cmp    %r11d,0x4(%rsp)
  jge    L230
  cmp    %r11d,(%rsp)
  jle    L203
  movslq %r11d,%rax
  lea    (%rbx,%rax,4),%r14
  nopl   (%rax)
L228:
  movslq (%r12),%rax
  add    $0x1,%r11d
  test   %eax,%eax
  jle    L318
  mov    -0x8(%r13,%rax,8),%rax
  mov    -0x4(%r8),%esi
  cmp    %esi,(%rax)
  jne    L318
  mov    (%r14),%esi
  cmp    %esi,0x4(%rax)
  je     L221
L318:
  cmp    %r11d,%r15d
  jle    L221
  mov    %r15d,%esi
  mov    %r11d,%eax
  jmp    L116
  xchg   %ax,%ax
L25:
  add    $0x1,%eax
L23:
  cmp    %eax,%esi
  jle    L221
L116:
  movslq %esi,%rdx
  movslq %eax,%rcx
  mov    -0x4(%r8),%r10d
  lea    (%rbx,%rdx,4),%r9
  shl    $0x2,%rcx
  mov    (%r14),%edx
  lea    (%rbx,%rcx,1),%rdi
  add    %r10d,%edx
  add    (%rdi),%edx
  add    (%r9),%edx
  cmp    %edx,%ebp
  jg     L25
  jge    L311
  sub    $0x1,%esi
  cmp    %eax,%esi
  jg     L116
L221:
  add    $0x4,%r14
  cmp    %r11d,(%rsp)
  jne    L228
L203:
  mov    0x8(%rsp),%esi
  add    $0x4,%r8
  cmp    %esi,0xc(%rsp)
  jne    L52
L309:
  add    $0x18,%rsp
  mov    %r13,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopw   0x0(%rax,%rax,1)
L270:
  movslq (%r12),%rdx
  mov    0x0(%r13,%rdx,8),%rdx
  mov    %r10d,(%rdx)
  movslq (%r12),%rdx
  mov    (%r14),%r10d
  mov    0x0(%r13,%rdx,8),%rdx
  mov    %r10d,0x4(%rdx)
  movslq (%r12),%rdx
  mov    (%rdi),%r10d
  mov    0x0(%r13,%rdx,8),%rdx
  mov    %r10d,0x8(%rdx)
  movslq (%r12),%rdx
  mov    (%r9),%r9d
  mov    0x0(%r13,%rdx,8),%rdx
  mov    %r9d,0xc(%rdx)
  lea    0x1(%rax),%edx
  addl   $0x1,(%r12)
  mov    (%rdi),%r10d
  cmp    %r10d,0x4(%rbx,%rcx,1)
  jne    L326
  cmp    %esi,%edx
  jge    L326
  add    $0x2,%eax
  mov    0x4(%rdi),%ecx
  movslq %eax,%rdx
  nopl   0x0(%rax,%rax,1)
L164:
  mov    %ecx,%edi
  mov    (%rbx,%rdx,4),%ecx
  mov    %edx,%eax
  cmp    %ecx,%edi
  sete   %r9b
  cmp    %edx,%esi
  setg   %dil
  add    $0x1,%rdx
  test   %dil,%r9b
  jne    L164
  jmp    L252
  nopl   0x0(%rax)
L311:
  movslq (%r12),%rdx
  mov    0x0(%r13,%rdx,8),%rdx
  mov    %r10d,(%rdx)
  movslq (%r12),%rdx
  mov    (%r14),%r10d
  mov    0x0(%r13,%rdx,8),%rdx
  mov    %r10d,0x4(%rdx)
  movslq (%r12),%rdx
  mov    (%rdi),%r10d
  mov    0x0(%r13,%rdx,8),%rdx
  mov    %r10d,0x8(%rdx)
  movslq (%r12),%rdx
  mov    (%r9),%r9d
  mov    0x0(%r13,%rdx,8),%rdx
  mov    %r9d,0xc(%rdx)
  lea    0x1(%rax),%edx
  addl   $0x1,(%r12)
  mov    (%rdi),%r10d
  cmp    %r10d,0x4(%rbx,%rcx,1)
  jne    L312
  cmp    %esi,%edx
  jge    L312
  add    $0x2,%eax
  mov    0x4(%rdi),%ecx
  movslq %eax,%rdx
  nopl   0x0(%rax,%rax,1)
L26:
  mov    %ecx,%edi
  mov    (%rbx,%rdx,4),%ecx
  mov    %edx,%eax
  cmp    %ecx,%edi
  sete   %r9b
  cmp    %edx,%esi
  setg   %dil
  add    $0x1,%rdx
  test   %dil,%r9b
  jne    L26
  jmp    L23
  nopl   0x0(%rax)
L326:
  mov    %edx,%eax
  jmp    L252
  nop
L312:
  mov    %edx,%eax
  jmp    L23
```

assistant: ```c
int **fourSum(int *nums, int numsSize, int target, int *returnSize) {
  int left = 0;
  int right = 0;
  int **ret = NULL;
  if (numsSize < 4) {
    return NULL;
  }
  ret = (int **)malloc(sizeof(int *) * 64);
  for (int i = 0; i < 64; i++) {
    ret[i] = (int *)malloc(sizeof(int) * 4);
  }
  quick_sort(nums, 0, numsSize - 1);
  for (int i = 0; i < numsSize - 3; i++) {
    if (i > 0 && (*returnSize) > 0 && nums[i] == ret[(*returnSize) - 1][0])
      continue;
    for (int j = i + 1; j < numsSize - 2; j++) {
      if (j > i + 1 && (*returnSize) > 0 && nums[i] == ret[(*returnSize) - 1][0] && nums[j] == ret[(*returnSize) - 1][1])
        continue;
      left = j + 1;
      right = numsSize - 1;
      while (left < right) {
        if (nums[i] + nums[j] + nums[left] + nums[right] < target) {
          left++;
        } else if (nums[i] + nums[j] + nums[left] + nums[right] > target) {
          right--;
        } else {
          ret[*returnSize][0] = nums[i];
          ret[*returnSize][1] = nums[j];
          ret[*returnSize][2] = nums[left];
          ret[*returnSize][3] = nums[right];
          (*returnSize)++;
          left++;
          while (nums[left] == nums[left - 1] && left < right)
            left++;
        }
      }
    }
  }
  return ret;
}
```