user: What would the C source look like for the assembly code provided here:

```asm
<map20indexto34>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  mov    %rdi,-0x8(%rbp)
  mov    %esi,%eax
  mov    %al,-0xc(%rbp)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%edx
  mov    -0x8(%rbp),%rax
  mov    %dl,(%rax)
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  mov    %dl,(%rax)
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x1(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x3(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x2(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  movsbl %al,%edx
  mov    -0x8(%rbp),%rax
  add    $0x3,%rax
  movzbl (%rax),%eax
  movsbl %al,%eax
  add    %edx,%eax
  mov    %eax,%edx
  shr    $0x1f,%edx
  add    %edx,%eax
  sar    %eax
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  mov    %dl,(%rax)
  mov    -0x8(%rbp),%rax
  lea    0x5(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x3(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x6(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x4(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x7(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x4(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x8(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x5(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x9(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x5(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0xa(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x6(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0xb(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x7(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0xc(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x8(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0xd(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x8(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0xe(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x9(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0xf(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x9(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x10(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0xa(%rax),%eax
  mov    %al,(%rdx)
  cmpb   $0x22,-0xc(%rbp)
  jne    L0
  mov    -0x8(%rbp),%rax
  lea    0x11(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0xb(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x12(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0xc(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x13(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0xd(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x14(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0xe(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x15(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0xe(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x16(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0xf(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x17(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0xf(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x18(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x10(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x19(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x10(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x1a(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x11(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x1b(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x11(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x1c(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x12(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x1d(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x12(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x1e(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x12(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x1f(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x12(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x20(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x13(%rax),%eax
  mov    %al,(%rdx)
  mov    -0x8(%rbp),%rax
  lea    0x21(%rax),%rdx
  mov    -0x8(%rbp),%rax
  movzbl 0x13(%rax),%eax
  mov    %al,(%rdx)
L0:
  nop
  pop    %rbp
  ret
```

assistant: ```c
void map20indexto34(signed char *index, unsigned char bins) {
  index[0] = index[0];
  index[1] = (index[0] + index[1]) / 2;
  index[2] = index[1];
  index[3] = index[2];
  index[4] = (index[2] + index[3]) / 2;
  index[5] = index[3];
  index[6] = index[4];
  index[7] = index[4];
  index[8] = index[5];
  index[9] = index[5];
  index[10] = index[6];
  index[11] = index[7];
  index[12] = index[8];
  index[13] = index[8];
  index[14] = index[9];
  index[15] = index[9];
  index[16] = index[10];
  if (bins == 34) {
    index[17] = index[11];
    index[18] = index[12];
    index[19] = index[13];
    index[20] = index[14];
    index[21] = index[14];
    index[22] = index[15];
    index[23] = index[15];
    index[24] = index[16];
    index[25] = index[16];
    index[26] = index[17];
    index[27] = index[17];
    index[28] = index[18];
    index[29] = index[18];
    index[30] = index[18];
    index[31] = index[18];
    index[32] = index[19];
    index[33] = index[19];
  }
}
```