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

```asm
<getLettersWithHighestFreq>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x440,%rsp
  mov    %rdi,-0x428(%rbp)
  mov    %rsi,-0x430(%rbp)
  mov    %rdx,-0x438(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  lea    -0x410(%rbp),%rdx
  mov    $0x0,%eax
  mov    $0x80,%ecx
  mov    %rdx,%rdi
  rep stos %rax,%es:(%rdi)
  mov    %rdi,%rdx
  mov    %eax,(%rdx)
  add    $0x4,%rdx
  movl   $0x0,-0x418(%rbp)
  jmp    L45
L118:
  mov    -0x418(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x428(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  mov    %eax,%edi
  call   <isalpha@plt>
  test   %rax,%rax
  je     L82
  mov    -0x418(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x428(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  movslq %eax,%rdx
  mov    -0x410(%rbp,%rdx,4),%edx
  add    $0x1,%edx
  cltq
  mov    %edx,-0x410(%rbp,%rax,4)
L82:
  addl   $0x1,-0x418(%rbp)
L45:
  mov    -0x418(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x428(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L118
  mov    -0x30c(%rbp),%edx
  mov    -0x438(%rbp),%rax
  mov    %edx,(%rax)
  movl   $0x42,-0x418(%rbp)
  jmp    L131
L70:
  mov    -0x418(%rbp),%eax
  cltq
  mov    -0x410(%rbp,%rax,4),%edx
  mov    -0x438(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jle    L132
  mov    -0x418(%rbp),%eax
  cltq
  mov    -0x410(%rbp,%rax,4),%edx
  mov    -0x438(%rbp),%rax
  mov    %edx,(%rax)
L132:
  cmpl   $0x5a,-0x418(%rbp)
  jne    L130
  movl   $0x61,-0x418(%rbp)
  jmp    L131
L130:
  addl   $0x1,-0x418(%rbp)
L131:
  cmpl   $0x7a,-0x418(%rbp)
  jle    L70
  movl   $0x0,-0x414(%rbp)
  movl   $0x41,-0x418(%rbp)
  jmp    L99
L16:
  mov    -0x418(%rbp),%eax
  cltq
  mov    -0x410(%rbp,%rax,4),%edx
  mov    -0x438(%rbp),%rax
  mov    (%rax),%eax
  cmp    %eax,%edx
  jne    L26
  mov    -0x414(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x430(%rbp),%rax
  add    %rdx,%rax
  mov    -0x418(%rbp),%edx
  mov    %dl,(%rax)
  addl   $0x1,-0x414(%rbp)
L26:
  cmpl   $0x5a,-0x418(%rbp)
  jne    L94
  movl   $0x61,-0x418(%rbp)
  jmp    L99
L94:
  addl   $0x1,-0x418(%rbp)
L99:
  cmpl   $0x7a,-0x418(%rbp)
  jle    L16
  mov    -0x414(%rbp),%eax
  movslq %eax,%rdx
  mov    -0x430(%rbp),%rax
  add    %rdx,%rax
  movb   $0x0,(%rax)
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L20
  call   <__stack_chk_fail@plt>
L20:
  leave
  ret
```

assistant: ```c
void getLettersWithHighestFreq(char line[], char output[], int *maxFreq) {
  int freqSieve[256 + 1] = {0};
  int ind, indOut;
  for (ind = 0; line[ind] != '\0'; ind++)
    if (isalpha(line[ind])) {
      freqSieve[(int)line[ind]]++;
    }
  *maxFreq = freqSieve[(int)'A'];
  for (ind = 'B'; ind <= 'z';) {
    if (freqSieve[ind] > *maxFreq)
      *maxFreq = freqSieve[ind];
    if (ind == 'Z')
      ind = 'a';
    else
      ind++;
  }
  indOut = 0;
  for (ind = 'A'; ind <= 'z';) {
    if (freqSieve[ind] == *maxFreq) {
      output[indOut] = (char)ind;
      indOut++;
    }
    if (ind == 'Z')
      ind = 'a';
    else
      ind++;
  }
  output[indOut] = '\0';
}
```