user: What is the c source code of the assembly code below?

```asm
<translate_lujvo>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x68,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x58(%rsp)
  xor    %eax,%eax
  movl   $0x0,0xc(%rsp)
  movb   $0x0,D197(%rip)
  mov    $0x1,%ebp
  lea    D212(%rip),%r13
  lea    D135(%rip),%r12
  lea    D19(%rip),%r15
  jmp    L89
L39:
  lea    0xc(%rsp),%rsi
  mov    %rbx,%rdi
  call   <translate_comp@plt>
  mov    %rax,%rdi
  mov    %ebp,%edx
  lea    D197(%rip),%rsi
  call   <append_trans@plt>
L380:
  mov    0x58(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L131
  lea    D197(%rip),%rax
  add    $0x68,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L234:
  lea    0x10(%rsp),%r12
  lea    D152(%rip),%rsi
  mov    %r12,%rdi
  call   <strcpy@plt>
  mov    %rbx,%rsi
  mov    %r12,%rdi
  call   <strcat@plt>
  lea    0xc(%rsp),%rsi
  mov    %r12,%rdi
  call   <translate_comp@plt>
  mov    %rax,%rbx
  test   %rax,%rax
  je     L340
  test   %ebp,%ebp
  je     L378
L132:
  mov    %rbx,%rsi
  lea    D197(%rip),%rdi
  call   <strcat@plt>
  jmp    L380
L378:
  lea    D32(%rip),%rsi
  lea    D197(%rip),%rdi
  call   <strcat@plt>
  jmp    L132
L340:
  test   %ebp,%ebp
  je     L488
L133:
  lea    D155(%rip),%rsi
  lea    D197(%rip),%rdi
  call   <strcat@plt>
  jmp    L380
L488:
  lea    D32(%rip),%rsi
  lea    D197(%rip),%rdi
  call   <strcat@plt>
  jmp    L133
L262:
  mov    $0x3,%edx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L357
  movl   $0x2,0xc(%rsp)
L322:
  add    $0x4,%rbx
L0:
  mov    $0x0,%ebp
  cmpb   $0x0,(%rbx)
  je     L380
L89:
  mov    %rbx,%rdi
  call   <strlen@plt>
  cmp    $0x5,%eax
  je     L39
  mov    %rbx,%rdi
  call   <strlen@plt>
  cmp    $0x4,%eax
  jle    L234
  mov    $0x79,%esi
  mov    %rbx,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L271
  sub    %rbx,%rax
  cmp    $0x3,%eax
  je     L262
  cmp    $0x4,%eax
  jne    L271
  movb   $0x25,0x10(%rsp)
  lea    0x10(%rsp),%r14
  lea    0x11(%rsp),%rdi
  mov    $0x4,%edx
  mov    %rbx,%rsi
  call   <strncpy@plt>
  movb   $0x0,0x15(%rsp)
  lea    0xc(%rsp),%rsi
  mov    %r14,%rdi
  call   <translate_comp@plt>
  mov    %rax,%rdi
  mov    %ebp,%edx
  lea    D197(%rip),%rsi
  call   <append_trans@plt>
  add    $0x5,%rbx
  jmp    L0
L357:
  mov    $0x3,%edx
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L283
  movl   $0x3,0xc(%rsp)
  jmp    L322
L283:
  mov    $0x3,%edx
  lea    D50(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L117
  movl   $0x4,0xc(%rsp)
  jmp    L322
L117:
  mov    $0x3,%edx
  lea    D4(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L497
  movl   $0x5,0xc(%rsp)
  jmp    L322
L497:
  movb   $0x25,0x10(%rsp)
  lea    0x10(%rsp),%r14
  lea    0x11(%rsp),%rdi
  mov    $0x3,%edx
  mov    %rbx,%rsi
  call   <strncpy@plt>
  movb   $0x0,0x14(%rsp)
  lea    0xc(%rsp),%rsi
  mov    %r14,%rdi
  call   <translate_comp@plt>
  mov    %rax,%rdi
  mov    %ebp,%edx
  lea    D197(%rip),%rsi
  call   <append_trans@plt>
  jmp    L322
L271:
  movb   $0x25,0x10(%rsp)
  cmpb   $0x27,0x2(%rbx)
  je     L74
  mov    $0x3,%edx
  mov    %r13,%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L70
  movl   $0x2,0xc(%rsp)
L325:
  movsbl 0x1(%rbx),%esi
  mov    %r12,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L244
  movsbl 0x2(%rbx),%esi
  mov    %r12,%rdi
  call   <strchr@plt>
  test   %ebp,%ebp
  je     L244
  test   %rax,%rax
  je     L244
  movzbl 0x3(%rbx),%eax
  test   %al,%al
  je     L244
  cmp    $0x72,%al
  je     L439
  cmp    $0x6e,%al
  je     L195
L244:
  add    $0x3,%rbx
  jmp    L0
L74:
  lea    0x10(%rsp),%r14
  lea    0x11(%rsp),%rdi
  mov    $0x4,%edx
  mov    %rbx,%rsi
  call   <strncpy@plt>
  movb   $0x0,0x15(%rsp)
  lea    0xc(%rsp),%rsi
  mov    %r14,%rdi
  call   <translate_comp@plt>
  mov    %rax,%rdi
  mov    %ebp,%edx
  lea    D197(%rip),%rsi
  call   <append_trans@plt>
  movsbl 0x1(%rbx),%esi
  mov    %r12,%rdi
  call   <strchr@plt>
  test   %rax,%rax
  je     L137
  movsbl 0x3(%rbx),%esi
  mov    %r12,%rdi
  call   <strchr@plt>
  test   %ebp,%ebp
  je     L137
  test   %rax,%rax
  je     L137
  movzbl 0x4(%rbx),%eax
  test   %al,%al
  je     L137
  cmp    $0x72,%al
  je     L47
  cmp    $0x6e,%al
  je     L246
L137:
  add    $0x4,%rbx
  jmp    L0
L246:
  cmpb   $0x72,0x5(%rbx)
  jne    L137
L47:
  add    $0x5,%rbx
  jmp    L0
L70:
  mov    $0x3,%edx
  mov    %r15,%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L287
  movl   $0x3,0xc(%rsp)
  jmp    L325
L287:
  mov    $0x3,%edx
  lea    D50(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L80
  movl   $0x4,0xc(%rsp)
  jmp    L325
L80:
  mov    $0x3,%edx
  lea    D4(%rip),%rsi
  mov    %rbx,%rdi
  call   <strncmp@plt>
  test   %eax,%eax
  jne    L267
  movl   $0x5,0xc(%rsp)
  jmp    L325
L267:
  lea    0x10(%rsp),%r14
  lea    0x11(%rsp),%rdi
  mov    $0x3,%edx
  mov    %rbx,%rsi
  call   <strncpy@plt>
  movb   $0x0,0x14(%rsp)
  lea    0xc(%rsp),%rsi
  mov    %r14,%rdi
  call   <translate_comp@plt>
  mov    %rax,%rdi
  mov    %ebp,%edx
  lea    D197(%rip),%rsi
  call   <append_trans@plt>
  jmp    L325
L195:
  cmpb   $0x72,0x4(%rbx)
  jne    L244
L439:
  add    $0x4,%rbx
  jmp    L0
L131:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D212
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D135
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D19
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D152
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D32
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D155
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D50
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D4
type_guessed: string

tool: D212: sel

tool: D135: aeiou

tool: D19: ter

tool: D152: %

tool: D32: -

tool: D155: ?

tool: D50: vel

tool: D4: xel

assistant: ```c
char *translate_lujvo(char *word) {
  static char result[4096];
  char buf[64];
  char *w, *trans;
  int initial;
  char *yy;
  int ypos = 0;
  int conversion = 0;
  w = word;
  result[0] = 0;
  initial = 1;
  do {
    if (strlen(w) == 5) {
      trans = translate_comp(w, &conversion);
      append_trans(trans, result, initial);
      break;
    } else {
      if (strlen(w) < 5) {
        strcpy(buf, "%");
        strcat(buf, w);
        trans = translate_comp(buf, &conversion);
        if (trans) {
          if (!initial) {
            strcat(result, "-");
          }
          strcat(result, trans);
        } else {
          if (!initial) {
            strcat(result, "-");
          }
          strcat(result, "?");
        }
        break;
      } else {
        yy = strchr(w, 'y');
        if (yy) {
          ypos = yy - w;
        }
        if (yy && ypos == 3) {
          if (!strncmp(w, "sel", 3)) {
            conversion = 2;
          } else if (!strncmp(w, "ter", 3)) {
            conversion = 3;
          } else if (!strncmp(w, "vel", 3)) {
            conversion = 4;
          } else if (!strncmp(w, "xel", 3)) {
            conversion = 5;
          } else {
            buf[0] = '%';
            strncpy(buf + 1, w, 3);
            buf[4] = 0;
            trans = translate_comp(buf, &conversion);
            append_trans(trans, result, initial);
          }
          w += 4;
        } else if (yy && ypos == 4) {
          buf[0] = '%';
          strncpy(buf + 1, w, 4);
          buf[5] = 0;
          trans = translate_comp(buf, &conversion);
          append_trans(trans, result, initial);
          w += 5;
        } else {
          buf[0] = '%';
          if (w[2] == '\'') {
            strncpy(buf + 1, w, 4);
            buf[5] = 0;
            trans = translate_comp(buf, &conversion);
            append_trans(trans, result, initial);
            if (strchr("aeiou", w[1]) && strchr("aeiou", w[3]) && initial && w[4] && (w[4] == 'r' || (w[4] == 'n' && w[5] == 'r'))) {
              w += 5;
            } else {
              w += 4;
            }
          } else {
            if (!strncmp(w, "sel", 3)) {
              conversion = 2;
            } else if (!strncmp(w, "ter", 3)) {
              conversion = 3;
            } else if (!strncmp(w, "vel", 3)) {
              conversion = 4;
            } else if (!strncmp(w, "xel", 3)) {
              conversion = 5;
            } else {
              strncpy(buf + 1, w, 3);
              buf[4] = 0;
              trans = translate_comp(buf, &conversion);
              append_trans(trans, result, initial);
            }
            if (strchr("aeiou", w[1]) && strchr("aeiou", w[2]) && initial && w[3] && (w[3] == 'r' || (w[3] == 'n' && w[4] == 'r'))) {
              w += 4;
            } else {
              w += 3;
            }
          }
        }
      }
    }
    initial = 0;
  } while (*w);
  return result;
}
```