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

```asm
<GetConsensusDetailed>:
  endbr64
  push   %r15
  mov    %esi,%r10d
  mov    %edx,%esi
  mov    %r9d,%eax
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    0xa8(%rsp),%rdx
  mov    0x58(%rsp),%r11
  mov    0x90(%rsp),%r12
  mov    0x98(%rsp),%rbx
  mov    0x68(%rsp),%rbp
  movb   $0x4e,(%r11)
  mov    0x60(%rsp),%r9
  movl   $0x0,(%rdx)
  mov    0xa0(%rsp),%rdx
  movl   $0x0,(%rdx)
  mov    0x88(%rsp),%rdx
  movl   $0x0,(%rbx)
  movl   $0x0,(%r12)
  movl   $0x0,(%rdx)
  mov    0x80(%rsp),%rdx
  movl   $0x0,(%rdx)
  mov    0x78(%rsp),%rdx
  movl   $0x0,(%rdx)
  mov    0x70(%rsp),%rdx
  movl   $0x0,(%rdx)
  lea    (%rdi,%r10,1),%edx
  add    %esi,%edx
  movl   $0x0,0x0(%rbp)
  add    %ecx,%edx
  cmp    0x50(%rsp),%edx
  jl     L213
  cmp    %ecx,%esi
  mov    %ecx,%r13d
  mov    %edi,%r14d
  cmovge %esi,%r13d
  cmp    %r10d,%r13d
  cmovl  %r10d,%r13d
  cmp    %edi,%r13d
  cmovge %r13d,%r14d
  jle    L129
  movzbl (%r11),%r15d
  xor    %r13d,%r13d
L197:
  mov    %r15b,(%r11)
  cmp    0x38(%rsp),%r13d
  jge    L223
  cmp    %r14d,%r10d
  je     L67
L223:
  cmp    %r14d,%esi
  jne    L125
  cmp    0x40(%rsp),%r13d
  jl     L94
L125:
  cmp    0x48(%rsp),%r13d
  jge    L213
  cmp    %r14d,%ecx
  je     L177
L213:
  mov    %edx,(%r9)
  test   %edx,%edx
  jle    L167
  cmpl   $0x1,0xb0(%rsp)
  je     L189
  test   %edi,%edi
  jle    L4
  cltd
  pxor   %xmm0,%xmm0
  idiv   %edi
  cvtsi2ss %edi,%xmm0
  sub    $0x21,%eax
  mov    %eax,(%r12)
  movss  %xmm0,0x0(%rbp)
L4:
  test   %r10d,%r10d
  jle    L214
  mov    0x38(%rsp),%eax
  pxor   %xmm0,%xmm0
  cvtsi2ss %r10d,%xmm0
  cltd
  idiv   %r10d
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  mov    0x70(%rsp),%rax
  movss  %xmm0,(%rax)
L214:
  test   %esi,%esi
  jle    L199
  mov    0x40(%rsp),%eax
  pxor   %xmm0,%xmm0
  mov    0xa0(%rsp),%rbx
  cvtsi2ss %esi,%xmm0
  cltd
  idiv   %esi
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  mov    0x78(%rsp),%rax
  movss  %xmm0,(%rax)
L199:
  test   %ecx,%ecx
  jle    L156
  mov    0x48(%rsp),%eax
  pxor   %xmm0,%xmm0
  mov    0xa8(%rsp),%rbx
  cvtsi2ss %ecx,%xmm0
  cltd
  idiv   %ecx
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  mov    0x80(%rsp),%rax
  movss  %xmm0,(%rax)
L156:
  test   %r8d,%r8d
  jle    L167
  pxor   %xmm0,%xmm0
  mov    0x88(%rsp),%rax
  cvtsi2ss %r8d,%xmm0
  movss  %xmm0,(%rax)
L167:
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  cs nopw 0x0(%rax,%rax,1)
L189:
  test   %edi,%edi
  jle    L110
  cltd
  pxor   %xmm0,%xmm0
  idiv   %edi
  sub    $0x21,%eax
  mov    %eax,(%r12)
  imul   $0x64,%edi,%eax
  cltd
  idivl  (%r9)
  cvtsi2ss %eax,%xmm0
  movss  %xmm0,0x0(%rbp)
L110:
  test   %r10d,%r10d
  jle    L188
  mov    0x38(%rsp),%eax
  pxor   %xmm0,%xmm0
  cltd
  idiv   %r10d
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  imul   $0x64,%r10d,%eax
  cltd
  idivl  (%r9)
  cvtsi2ss %eax,%xmm0
  mov    0x70(%rsp),%rax
  movss  %xmm0,(%rax)
L188:
  test   %esi,%esi
  jle    L132
  mov    0x40(%rsp),%eax
  mov    0xa0(%rsp),%rbx
  pxor   %xmm0,%xmm0
  cltd
  idiv   %esi
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  imul   $0x64,%esi,%eax
  cltd
  idivl  (%r9)
  cvtsi2ss %eax,%xmm0
  mov    0x78(%rsp),%rax
  movss  %xmm0,(%rax)
L132:
  test   %ecx,%ecx
  jle    L30
  mov    0x48(%rsp),%eax
  mov    0xa8(%rsp),%rbx
  pxor   %xmm0,%xmm0
  cltd
  idiv   %ecx
  sub    $0x21,%eax
  mov    %eax,(%rbx)
  imul   $0x64,%ecx,%eax
  cltd
  idivl  (%r9)
  cvtsi2ss %eax,%xmm0
  mov    0x80(%rsp),%rax
  movss  %xmm0,(%rax)
L30:
  test   %r8d,%r8d
  jle    L167
  imul   $0x64,%r8d,%eax
  pxor   %xmm0,%xmm0
  cltd
  idivl  (%r9)
  cvtsi2ss %eax,%xmm0
  mov    0x88(%rsp),%rax
  movss  %xmm0,(%rax)
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L129:
  mov    %eax,%r13d
  mov    $0x41,%r15d
  jmp    L197
  xchg   %ax,%ax
L177:
  movb   $0x43,(%r11)
  jmp    L213
  nopl   0x0(%rax)
L94:
  movb   $0x47,(%r11)
  mov    0x40(%rsp),%r13d
  jmp    L125
  xchg   %ax,%ax
L67:
  movb   $0x54,(%r11)
  mov    0x38(%rsp),%r13d
  jmp    L223
```

assistant: ```c
void GetConsensusDetailed(int A, int T, int G, int C, int N, int Aq, int Tq, int Gq, int Cq, int depth, char *consensus, int *coverage, float *af, float *tf, float *gf, float *cf, float *nf, int *aq, int *tq, int *gq, int *cq, int freq) {
  int max, Qual = 0;
  *consensus = 'N';
  *af = *tf = *gf = *cf = *nf = *aq = *tq = *gq = *cq = 0;
  if (A + T + G + C >= depth) {
    max = ((((A) > (T) ? (A) : (T))) > (((G) > (C) ? (G) : (C))) ? (((A) > (T) ? (A) : (T))) : (((G) > (C) ? (G) : (C))));
    if (max == A) {
      *consensus = 'A';
      Qual = Aq;
    }
    if (max == T) {
      if (Tq > Qual) {
        *consensus = 'T';
        Qual = Tq;
      }
    }
    if (max == G) {
      if (Gq > Qual) {
        *consensus = 'G';
        Qual = Gq;
      }
    }
    if (max == C) {
      if (Cq > Qual) {
        *consensus = 'C';
        Qual = Cq;
      }
    }
  }
  *coverage = A + T + G + C;
  if (*coverage > 0) {
    if (freq == 1) {
      if (A > 0) {
        *aq = Aq / A;
        *aq -= 33;
        *af = A * 100 / *coverage;
      }
      if (T > 0) {
        *tq = Tq / T;
        *tq -= 33;
        *tf = T * 100 / *coverage;
      }
      if (G > 0) {
        *gq = Gq / G;
        *gq -= 33;
        *gf = G * 100 / *coverage;
      }
      if (C > 0) {
        *cq = Cq / C;
        *cq -= 33;
        *cf = C * 100 / *coverage;
      }
      if (N > 0) {
        *nf = N * 100 / *coverage;
      }
    } else {
      if (A > 0) {
        *aq = Aq / A;
        *aq -= 33;
        *af = A;
      }
      if (T > 0) {
        *tq = Tq / T;
        *tq -= 33;
        *tf = T;
      }
      if (G > 0) {
        *gq = Gq / G;
        *gq -= 33;
        *gf = G;
      }
      if (C > 0) {
        *cq = Cq / C;
        *cq -= 33;
        *cf = C;
      }
      if (N > 0) {
        *nf = N;
      }
    }
  }
}
```