user: 提供的汇编代码用C语言表示会是什么样子:

```asm
<ybase64_decode>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  add    $0xffffffffffffff80,%rsp
  mov    %rdi,-0x68(%rbp)
  mov    %rsi,-0x70(%rbp)
  mov    %rdx,-0x78(%rbp)
  mov    %rcx,-0x80(%rbp)
  cmpq   $0x0,-0x70(%rbp)
  je     L417
  cmpq   $0x1,-0x70(%rbp)
  jne    L190
L417:
  mov    $0x0,%eax
  jmp    L171
L190:
  mov    -0x68(%rbp),%rax
  mov    %rax,-0x28(%rbp)
  mov    -0x78(%rbp),%rax
  mov    %rax,-0x20(%rbp)
  mov    -0x70(%rbp),%rax
  sub    $0x1,%rax
  mov    %rax,-0x50(%rbp)
  jmp    L241
L200:
  mov    -0x28(%rbp),%rdx
  mov    -0x50(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  cmp    $0x3d,%al
  jne    L434
  subq   $0x1,-0x50(%rbp)
L241:
  cmpq   $0x0,-0x50(%rbp)
  jne    L200
  jmp    L132
L434:
  nop
L132:
  cmpq   $0x0,-0x50(%rbp)
  jne    L17
  mov    $0x0,%eax
  jmp    L171
L17:
  mov    -0x70(%rbp),%rax
  sub    -0x50(%rbp),%rax
  sub    $0x1,%rax
  mov    %rax,-0x18(%rbp)
  cmpq   $0x2,-0x18(%rbp)
  jbe    L22
  mov    $0x0,%eax
  jmp    L171
L22:
  movq   $0x0,-0x40(%rbp)
  cmpq   $0x2,-0x18(%rbp)
  jne    L29
  mov    -0x50(%rbp),%rax
  sub    $0x1,%rax
  mov    %rax,-0x48(%rbp)
  movq   $0x1,-0x40(%rbp)
  jmp    L94
L29:
  cmpq   $0x1,-0x18(%rbp)
  jne    L396
  mov    -0x50(%rbp),%rax
  sub    $0x2,%rax
  mov    %rax,-0x48(%rbp)
  movq   $0x2,-0x40(%rbp)
  jmp    L94
L396:
  mov    -0x50(%rbp),%rax
  add    $0x1,%rax
  mov    %rax,-0x48(%rbp)
L94:
  mov    -0x48(%rbp),%rax
  and    $0x3,%eax
  test   %rax,%rax
  je     L1
  mov    $0x0,%eax
  jmp    L171
L1:
  mov    -0x48(%rbp),%rax
  mov    %rax,-0x10(%rbp)
  mov    -0x10(%rbp),%rax
  shr    $0x2,%rax
  mov    %rax,%rdx
  mov    %rdx,%rax
  add    %rax,%rax
  add    %rax,%rdx
  mov    -0x40(%rbp),%rax
  add    %rdx,%rax
  mov    %rax,-0x8(%rbp)
  cmpq   $0x0,-0x20(%rbp)
  jne    L108
  mov    -0x8(%rbp),%rax
  jmp    L171
L108:
  mov    -0x80(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  jae    L412
  mov    $0x0,%eax
  jmp    L171
L412:
  movq   $0x0,-0x38(%rbp)
  movq   $0x0,-0x30(%rbp)
  jmp    L217
L467:
  mov    -0x28(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x5f(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x5e(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x2(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x5a(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x3(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x57(%rbp)
  addq   $0x4,-0x38(%rbp)
  movzbl -0x5f(%rbp),%eax
  cltq
  lea    D13(%rip),%rdx
  movzbl (%rax,%rdx,1),%eax
  and    $0x3f,%eax
  mov    %al,-0x5d(%rbp)
  movzbl -0x5e(%rbp),%eax
  cltq
  lea    D13(%rip),%rdx
  movzbl (%rax,%rdx,1),%eax
  and    $0x3f,%eax
  mov    %al,-0x5c(%rbp)
  movzbl -0x5a(%rbp),%eax
  cltq
  lea    D13(%rip),%rdx
  movzbl (%rax,%rdx,1),%eax
  and    $0x3f,%eax
  mov    %al,-0x59(%rbp)
  movzbl -0x57(%rbp),%eax
  cltq
  lea    D13(%rip),%rdx
  movzbl (%rax,%rdx,1),%eax
  and    $0x3f,%eax
  mov    %al,-0x56(%rbp)
  cmpb   $0xff,-0x5d(%rbp)
  je     L199
  cmpb   $0xff,-0x5c(%rbp)
  je     L199
  cmpb   $0xff,-0x59(%rbp)
  je     L199
  cmpb   $0xff,-0x56(%rbp)
  jne    L475
L199:
  mov    -0x30(%rbp),%rax
  jmp    L171
L475:
  movzbl -0x5d(%rbp),%eax
  shl    $0x12,%eax
  mov    %eax,%edx
  movzbl -0x5c(%rbp),%eax
  shl    $0xc,%eax
  or     %eax,%edx
  movzbl -0x59(%rbp),%eax
  shl    $0x6,%eax
  or     %eax,%edx
  movzbl -0x56(%rbp),%eax
  or     %edx,%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  shr    $0x10,%eax
  mov    %al,-0x5b(%rbp)
  mov    -0x54(%rbp),%eax
  shr    $0x8,%eax
  mov    %al,-0x58(%rbp)
  mov    -0x54(%rbp),%eax
  mov    %al,-0x55(%rbp)
  cmpq   $0x0,-0x20(%rbp)
  je     L344
  mov    -0x20(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x5b(%rbp),%eax
  mov    %al,(%rdx)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x58(%rbp),%eax
  mov    %al,(%rdx)
  mov    -0x30(%rbp),%rax
  lea    0x2(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x55(%rbp),%eax
  mov    %al,(%rdx)
L344:
  addq   $0x3,-0x30(%rbp)
L217:
  mov    -0x38(%rbp),%rax
  cmp    -0x10(%rbp),%rax
  jb     L467
  cmpq   $0x2,-0x18(%rbp)
  je     L143
  cmpq   $0x2,-0x18(%rbp)
  ja     L377
  cmpq   $0x0,-0x18(%rbp)
  je     L351
  cmpq   $0x1,-0x18(%rbp)
  je     L427
  jmp    L377
L427:
  mov    -0x28(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x5f(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x5e(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x2(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x5a(%rbp)
  movzbl -0x5f(%rbp),%eax
  cltq
  lea    D13(%rip),%rdx
  movzbl (%rax,%rdx,1),%eax
  mov    %al,-0x5d(%rbp)
  movzbl -0x5e(%rbp),%eax
  cltq
  lea    D13(%rip),%rdx
  movzbl (%rax,%rdx,1),%eax
  mov    %al,-0x5c(%rbp)
  movzbl -0x5a(%rbp),%eax
  cltq
  lea    D13(%rip),%rdx
  movzbl (%rax,%rdx,1),%eax
  mov    %al,-0x59(%rbp)
  cmpb   $0xff,-0x5d(%rbp)
  je     L127
  cmpb   $0xff,-0x5c(%rbp)
  je     L127
  cmpb   $0xff,-0x59(%rbp)
  je     L127
  movzbl -0x59(%rbp),%eax
  and    $0x3,%eax
  test   %eax,%eax
  je     L368
L127:
  mov    -0x30(%rbp),%rax
  jmp    L171
L368:
  movzbl -0x5d(%rbp),%eax
  shl    $0x12,%eax
  mov    %eax,%edx
  movzbl -0x5c(%rbp),%eax
  shl    $0xc,%eax
  or     %eax,%edx
  movzbl -0x59(%rbp),%eax
  shl    $0x6,%eax
  or     %edx,%eax
  mov    %eax,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  shr    $0x10,%eax
  mov    %al,-0x5b(%rbp)
  mov    -0x54(%rbp),%eax
  shr    $0x8,%eax
  mov    %al,-0x58(%rbp)
  cmpq   $0x0,-0x20(%rbp)
  je     L473
  mov    -0x20(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x5b(%rbp),%eax
  mov    %al,(%rdx)
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x20(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x58(%rbp),%eax
  mov    %al,(%rdx)
L473:
  addq   $0x2,-0x30(%rbp)
  jmp    L141
L143:
  mov    -0x28(%rbp),%rdx
  mov    -0x38(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x5f(%rbp)
  mov    -0x38(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%eax
  mov    %al,-0x5e(%rbp)
  movzbl -0x5f(%rbp),%eax
  cltq
  lea    D13(%rip),%rdx
  movzbl (%rax,%rdx,1),%eax
  mov    %al,-0x5d(%rbp)
  movzbl -0x5e(%rbp),%eax
  cltq
  lea    D13(%rip),%rdx
  movzbl (%rax,%rdx,1),%eax
  mov    %al,-0x5c(%rbp)
  cmpb   $0xff,-0x5d(%rbp)
  je     L414
  cmpb   $0xff,-0x5c(%rbp)
  je     L414
  movzbl -0x5c(%rbp),%eax
  and    $0xf,%eax
  test   %eax,%eax
  je     L358
L414:
  mov    -0x30(%rbp),%rax
  jmp    L171
L358:
  movzbl -0x5d(%rbp),%eax
  shl    $0x2,%eax
  mov    %eax,%edx
  movzbl -0x5c(%rbp),%eax
  shr    $0x4,%al
  or     %edx,%eax
  mov    %al,-0x5b(%rbp)
  cmpq   $0x0,-0x20(%rbp)
  je     L26
  mov    -0x20(%rbp),%rdx
  mov    -0x30(%rbp),%rax
  add    %rax,%rdx
  movzbl -0x5b(%rbp),%eax
  mov    %al,(%rdx)
L26:
  addq   $0x1,-0x30(%rbp)
  jmp    L141
L377:
  nop
  jmp    L141
L351:
  nop
L141:
  mov    -0x30(%rbp),%rax
  cmp    -0x8(%rbp),%rax
  sete   %al
  movzbl %al,%eax
  mov    %eax,%edi
  call   <assert@plt>
  mov    -0x30(%rbp),%rax
L171:
  leave
  ret
```

assistant: ```c
size_t ybase64_decode(const char *from, const size_t strlen, void *to, const size_t to_len) {
  static char base64_decoding_map[256] = {
      0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 62, 0xff, 0xff, 0xff, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
  };
  if (0 == strlen || 1 == strlen) {
    return 0;
  }
  const unsigned char *p_from = (const unsigned char *)from;
  unsigned char *p_to = (unsigned char *)to;
  size_t last_index = strlen - 1;
  while (last_index > 0) {
    if (*(p_from + last_index) != '=') {
      break;
    }
    last_index--;
  }
  if (0 == last_index) {
    return 0;
  }
  const size_t padding = strlen - 1 - last_index;
  if (padding > 2) {
    return 0;
  }
  size_t tmp_len, padding_bytes_len = 0;
  if (2 == padding) {
    tmp_len = last_index + 1 - 2;
    padding_bytes_len = 1;
  } else if (1 == padding) {
    tmp_len = last_index + 1 - 3;
    padding_bytes_len = 2;
  } else {
    tmp_len = last_index + 1;
  }
  if (tmp_len & 0x3)
    return 0;
  const size_t aligned_len = tmp_len;
  const size_t need_len = (aligned_len >> 2) * 3 + padding_bytes_len;
  if (NULL == p_to) {
    return need_len;
  }
  if (to_len < need_len) {
    return 0;
  }
  unsigned char c1, c2, c3, c4;
  unsigned char b1, b2, b3;
  unsigned char d1, d2, d3, d4;
  unsigned int d;
  size_t i = 0, j = 0;
  for (; i < aligned_len;) {
    c1 = *(p_from + i);
    c2 = *(p_from + i + 1);
    c3 = *(p_from + i + 2);
    c4 = *(p_from + i + 3);
    i += 4;
    d1 = base64_decoding_map[c1] & 0x3f;
    d2 = base64_decoding_map[c2] & 0x3f;
    d3 = base64_decoding_map[c3] & 0x3f;
    d4 = base64_decoding_map[c4] & 0x3f;
    if (0xff == d1 || 0xff == d2 || 0xff == d3 || 0xff == d4) {
      return j;
    }
    d = (d1 << 18) | (d2 << 12) | (d3 << 6) | (d4);
    b1 = (d & 0xff0000) >> 16;
    b2 = (d & 0xff00) >> 8;
    b3 = (d & 0xff);
    if (p_to) {
      *(p_to + j) = b1;
      *(p_to + j + 1) = b2;
      *(p_to + j + 2) = b3;
    }
    j += 3;
  }
  switch (padding) {
  case 0:
    break;
  case 1: {
    c1 = *(p_from + i);
    c2 = *(p_from + i + 1);
    c3 = *(p_from + i + 2);
    d1 = base64_decoding_map[c1];
    d2 = base64_decoding_map[c2];
    d3 = base64_decoding_map[c3];
    if (0xff == d1 || 0xff == d2 || 0xff == d3 || (d3 & 0x3)) {
      return j;
    }
    d = (d1 << 18) | (d2 << 12) | (d3 << 6);
    b1 = (d & 0xff0000) >> 16;
    b2 = (d & 0xff00) >> 8;
    if (p_to) {
      *(p_to + j) = b1;
      *(p_to + j + 1) = b2;
    }
    j += 2;
  } break;
  case 2: {
    c1 = *(p_from + i);
    c2 = *(p_from + i + 1);
    d1 = base64_decoding_map[c1];
    d2 = base64_decoding_map[c2];
    if (0xff == d1 || 0xff == d2 || d2 & 0xf) {
      return j;
    }
    b1 = (d1 << 2) | (d2 >> 4);
    if (p_to) {
      *(p_to + j) = b1;
    }
    j += 1;
  } break;
  default:
    break;
  }
  assert(j == need_len);
  return j;
}
```