user: 这段汇编代码用C语言表示是什么样的：

```asm
<_lws_b64_encode_string>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x40,%rsp
  mov    %rdi,-0x28(%rbp)
  mov    %rsi,-0x30(%rbp)
  mov    %edx,-0x34(%rbp)
  mov    %rcx,-0x40(%rbp)
  mov    %r8d,-0x38(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x0,-0x14(%rbp)
  movl   $0x0,-0x10(%rbp)
  jmp    L101
L119:
  movl   $0x0,-0x18(%rbp)
  movl   $0x0,-0x1c(%rbp)
  jmp    L128
L46:
  cmpl   $0x0,-0x34(%rbp)
  je     L110
  mov    -0x30(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x30(%rbp)
  movzbl (%rax),%eax
  mov    %eax,%edx
  mov    -0x1c(%rbp),%eax
  cltq
  mov    %dl,-0xb(%rbp,%rax,1)
  addl   $0x1,-0x18(%rbp)
  subl   $0x1,-0x34(%rbp)
  jmp    L124
L110:
  mov    -0x1c(%rbp),%eax
  cltq
  movb   $0x0,-0xb(%rbp,%rax,1)
L124:
  addl   $0x1,-0x1c(%rbp)
L128:
  cmpl   $0x2,-0x1c(%rbp)
  jle    L46
  mov    -0x10(%rbp),%eax
  add    $0x4,%eax
  cmp    %eax,-0x38(%rbp)
  jg     L115
  mov    $0xffffffff,%eax
  jmp    L15
L115:
  movzbl -0xb(%rbp),%eax
  shr    $0x2,%al
  movzbl %al,%edx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  movzbl (%rcx),%edx
  mov    %dl,(%rax)
  movzbl -0xb(%rbp),%eax
  movzbl %al,%eax
  shl    $0x4,%eax
  and    $0x30,%eax
  mov    %eax,%edx
  movzbl -0xa(%rbp),%eax
  shr    $0x4,%al
  movzbl %al,%eax
  or     %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  lea    (%rdx,%rax,1),%rcx
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  movzbl (%rcx),%edx
  mov    %dl,(%rax)
  cmpl   $0x1,-0x18(%rbp)
  jle    L108
  movzbl -0xa(%rbp),%eax
  movzbl %al,%eax
  shl    $0x2,%eax
  and    $0x3c,%eax
  mov    %eax,%edx
  movzbl -0x9(%rbp),%eax
  shr    $0x6,%al
  movzbl %al,%eax
  or     %edx,%eax
  movslq %eax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  jmp    L112
L108:
  mov    $0x3d,%edx
L112:
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x40(%rbp)
  mov    %dl,(%rax)
  cmpl   $0x2,-0x18(%rbp)
  jle    L107
  movzbl -0x9(%rbp),%eax
  movzbl %al,%eax
  and    $0x3f,%eax
  mov    %rax,%rdx
  mov    -0x28(%rbp),%rax
  add    %rdx,%rax
  movzbl (%rax),%edx
  jmp    L83
L107:
  mov    $0x3d,%edx
L83:
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rcx
  mov    %rcx,-0x40(%rbp)
  mov    %dl,(%rax)
  addl   $0x4,-0x10(%rbp)
  addl   $0x4,-0x14(%rbp)
L101:
  cmpl   $0x0,-0x34(%rbp)
  jne    L119
  mov    -0x10(%rbp),%eax
  add    $0x1,%eax
  cmp    %eax,-0x38(%rbp)
  jg     L131
  mov    $0xffffffff,%eax
  jmp    L15
L131:
  mov    -0x40(%rbp),%rax
  lea    0x1(%rax),%rdx
  mov    %rdx,-0x40(%rbp)
  movb   $0x0,(%rax)
  mov    -0x10(%rbp),%eax
L15:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L139
  call   <__stack_chk_fail@plt>
L139:
  leave
  ret
```

assistant: ```c
int _lws_b64_encode_string(const char *encode, const char *in, int in_len, char *out, int out_size) {
  unsigned char triple[3];
  int i;
  int len;
  int line = 0;
  int done = 0;
  while (in_len) {
    len = 0;
    for (i = 0; i < 3; i++) {
      if (in_len) {
        triple[i] = *in++;
        len++;
        in_len--;
      } else
        triple[i] = 0;
    }
    if (done + 4 >= out_size)
      return -1;
    *out++ = encode[triple[0] >> 2];
    *out++ = encode[((triple[0] & 0x03) << 4) | ((triple[1] & 0xf0) >> 4)];
    *out++ = (len > 1 ? encode[((triple[1] & 0x0f) << 2) | ((triple[2] & 0xc0) >> 6)] : '=');
    *out++ = (len > 2 ? encode[triple[2] & 0x3f] : '=');
    done += 4;
    line += 4;
  }
  if (done + 1 >= out_size)
    return -1;
  *out++ = '\0';
  return done;
}
```