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

```asm
<get_hash_key>:
  endbr64
  push   %r15
  push   %r14
  mov    %ecx,%r14d
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x28,%rsp
  mov    %rdi,0x8(%rsp)
  test   %esi,%esi
  jle    L91
  movslq %esi,%rax
  mov    %edx,%ebx
  xor    %r15d,%r15d
  xor    %ebp,%ebp
  mov    %rax,0x10(%rsp)
  xor    %r13d,%r13d
  lea    D18(%rip),%r12
  nopl   0x0(%rax,%rax,1)
L234:
  mov    0x8(%rsp),%rax
  mov    %r15d,%r9d
  movsbl (%rax,%r15,1),%esi
  lea    -0x2a(%rsi),%eax
  cmp    $0x30,%al
  ja     L176
  movzbl %al,%eax
  movslq (%r12,%rax,4),%rax
  add    %r12,%rax
  notrack jmp *%rax
  nopl   0x0(%rax)
  mov    $0x1,%r13d
  xchg   %ax,%ax
L176:
  cmp    %ebx,%r13d
  jge    L3
L159:
  test   %r14d,%r14d
  je     L192
  mov    %r9d,%esi
  mov    %ebx,%edi
  add    $0x1,%r15
  call   <pow@plt>
  imul   %r13d,%eax
  add    %eax,%ebp
  cmp    0x10(%rsp),%r15
  jne    L234
L205:
  cmp    $0x1,%r14d
  cmove  %ebp,%r13d
L192:
  add    $0x28,%rsp
  mov    %r13d,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nop
L3:
  lea    D19(%rip),%rdi
  mov    %r9d,0x1c(%rsp)
  xor    %r13d,%r13d
  call   <printf@plt>
  xor    %edi,%edi
  call   <exit@plt>
  mov    0x1c(%rsp),%r9d
  jmp    L159
  nopw   0x0(%rax,%rax,1)
  mov    $0x19,%r13d
  jmp    L176
  mov    $0xf,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x18,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0xe,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0xd,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x17,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x3,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0xc,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0xb,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x16,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x15,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x14,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x4,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0xa,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x10,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x9,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x13,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x8,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x2,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x12,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x11,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x7,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x6,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x5,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  mov    $0x1a,%r13d
  jmp    L176
  nopl   0x0(%rax,%rax,1)
  xor    %r13d,%r13d
  jmp    L176
L91:
  xor    %ebp,%ebp
  xor    %r13d,%r13d
  jmp    L205
```

tool_calls: name: read_data
arguments: data_label: D19
data_type: string

tool: D19: no such symbol (%c)


assistant: ```c
int get_hash_key(char *d, int n, int alphn, int f) {
  int i, j, m = 0, h = 0;
  for (i = 0; i < n; i++) {
    switch (d[i]) {
    case 'A':
      m = 0;
      break;
    case 'C':
      m = 1;
      break;
    case 'G':
      m = 2;
      break;
    case 'T':
      m = 3;
      break;
    case 'N':
      m = 4;
      break;
    case '-':
      m = 5;
      break;
    case 'B':
      m = 6;
      break;
    case 'D':
      m = 7;
      break;
    case 'H':
      m = 8;
      break;
    case 'K':
      m = 9;
      break;
    case 'M':
      m = 10;
      break;
    case 'R':
      m = 11;
      break;
    case 'S':
      m = 12;
      break;
    case 'V':
      m = 13;
      break;
    case 'W':
      m = 14;
      break;
    case 'Y':
      m = 15;
      break;
    case 'L':
      m = 16;
      break;
    case 'E':
      m = 17;
      break;
    case 'F':
      m = 18;
      break;
    case 'I':
      m = 19;
      break;
    case 'O':
      m = 20;
      break;
    case 'P':
      m = 21;
      break;
    case 'Q':
      m = 22;
      break;
    case 'U':
      m = 23;
      break;
    case 'X':
      m = 24;
      break;
    case 'Z':
      m = 25;
      break;
    case '*':
      m = 26;
      break;
    }
    if (m + 1 > alphn) {
      printf("no such symbol (%c)\n", d[i]);
      m = 0;
      exit(0);
    }
    if (f == 0)
      break;
    h += m * pow(alphn, i);
  }
  if (f == 1)
    return h;
  else
    return m;
}
```