user: Translate the below assembly code into C programming language:

```asm
<utf_replace_html>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x10,%rsp
  mov    %rdi,-0x8(%rbp)
  jmp    L10
L405:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xe2,%al
  jne    L307
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x80,%al
  jne    L307
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0x93,%al
  jne    L290
  mov    -0x8(%rbp),%rax
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x3(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x7,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D82(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L71
L290:
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0x94,%al
  jne    L321
  mov    -0x8(%rbp),%rax
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x3(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x7,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D35(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L71
L321:
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0xa6,%al
  jne    L71
  mov    -0x8(%rbp),%rax
  lea    D34(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L71
L307:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xe2,%al
  jne    L292
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x88,%al
  jne    L292
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0x92,%al
  jne    L292
  mov    -0x8(%rbp),%rax
  lea    D115(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  mov    -0x8(%rbp),%rax
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x3(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  jmp    L434
L292:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xe2,%al
  jne    L222
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x89,%al
  jne    L222
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  movzbl (%rax),%eax
  cmp    $0xa4,%al
  jne    L222
  mov    -0x8(%rbp),%rax
  lea    D133(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  mov    -0x8(%rbp),%rax
  mov    $0x3,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x3(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x2,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  jmp    L434
L222:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xce,%al
  jne    L203
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x93,%al
  jne    L203
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x7,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D66(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L434
L203:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xce,%al
  jne    L289
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xb2,%al
  jne    L289
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x6,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D36(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L434
L289:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xce,%al
  jne    L433
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xbb,%al
  jne    L433
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x8,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D137(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L434
L433:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xce,%al
  jne    L415
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xbc,%al
  jne    L415
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D45(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L434
L415:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xcf,%al
  jne    L68
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x80,%al
  jne    L68
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x4,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D91(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L434
L68:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xcf,%al
  jne    L92
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x81,%al
  jne    L92
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D53(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L434
L92:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xcf,%al
  jne    L257
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x83,%al
  jne    L257
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x7,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D58(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L434
L257:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xcf,%al
  jne    L148
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0x89,%al
  jne    L148
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x7,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D107(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L434
L148:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  cmp    $0xc2,%al
  jne    L434
  mov    -0x8(%rbp),%rax
  add    $0x1,%rax
  movzbl (%rax),%eax
  cmp    $0xb0,%al
  jne    L434
  mov    -0x8(%rbp),%rax
  mov    $0x2,%esi
  mov    %rax,%rdi
  call   <mvsize@plt>
  mov    %eax,%edx
  mov    -0x8(%rbp),%rax
  lea    0x2(%rax),%rcx
  mov    -0x8(%rbp),%rax
  add    $0x5,%rax
  mov    %rcx,%rsi
  mov    %rax,%rdi
  call   <memmove@plt>
  mov    -0x8(%rbp),%rax
  lea    D3(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <write_text@plt>
  jmp    L434
L71:
  nop
L434:
  addq   $0x1,-0x8(%rbp)
L10:
  mov    -0x8(%rbp),%rax
  movzbl (%rax),%eax
  test   %al,%al
  jne    L405
  nop
  nop
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: tag: D82
type: string
name: extract_symbolic_data
arguments: tag: D35
type: string
name: extract_symbolic_data
arguments: tag: D34
type: string
name: extract_symbolic_data
arguments: tag: D115
type: string
name: extract_symbolic_data
arguments: tag: D133
type: string
name: extract_symbolic_data
arguments: tag: D66
type: string
name: extract_symbolic_data
arguments: tag: D36
type: string
name: extract_symbolic_data
arguments: tag: D137
type: string
name: extract_symbolic_data
arguments: tag: D45
type: string
name: extract_symbolic_data
arguments: tag: D91
type: string
name: extract_symbolic_data
arguments: tag: D53
type: string
name: extract_symbolic_data
arguments: tag: D58
type: string
name: extract_symbolic_data
arguments: tag: D107
type: string
name: extract_symbolic_data
arguments: tag: D3
type: string

tool: D82: &#8211;

tool: D35: &#8212;

tool: D34: ...

tool: D115: -

tool: D133: <=

tool: D66: &Gamma;

tool: D36: &beta;

tool: D137: &lambda;

tool: D45: &mu;

tool: D91: &pi;

tool: D53: &rho;

tool: D58: &sigma;

tool: D107: &omega;

tool: D3: &deg;

assistant: ```c
void utf_replace_html(unsigned char *s) {
  while (*s) {
    if (s[0] == 0xe2 && s[1] == 0x80) {
      if (s[2] == 0x93) {
        memmove(s + 7, s + 3, mvsize(s, 3));
        write_text(s, "&#8211;");
      } else if (s[2] == 0x94) {
        memmove(s + 7, s + 3, mvsize(s, 3));
        write_text(s, "&#8212;");
      } else if (s[2] == 0xa6) {
        write_text(s, "...");
      }
    } else if (s[0] == 0xe2 && s[1] == 0x88 && s[2] == 0x92) {
      write_text(s, "-");
      memmove(s + 1, s + 3, mvsize(s, 3));
    } else if (s[0] == 0xe2 && s[1] == 0x89 && s[2] == 0xa4) {
      write_text(s, "<=");
      memmove(s + 2, s + 3, mvsize(s, 3));
    } else if (s[0] == 0xce && s[1] == 0x93) {
      memmove(s + 7, s + 2, mvsize(s, 2));
      write_text(s, "&Gamma;");
    } else if (s[0] == 0xce && s[1] == 0xb2) {
      memmove(s + 6, s + 2, mvsize(s, 2));
      write_text(s, "&beta;");
    } else if (s[0] == 0xce && s[1] == 0xbb) {
      memmove(s + 8, s + 2, mvsize(s, 2));
      write_text(s, "&lambda;");
    } else if (s[0] == 0xce && s[1] == 0xbc) {
      memmove(s + 4, s + 2, mvsize(s, 2));
      write_text(s, "&mu;");
    } else if (s[0] == 0xcf && s[1] == 0x80) {
      memmove(s + 4, s + 2, mvsize(s, 2));
      write_text(s, "&pi;");
    } else if (s[0] == 0xcf && s[1] == 0x81) {
      memmove(s + 5, s + 2, mvsize(s, 2));
      write_text(s, "&rho;");
    } else if (s[0] == 0xcf && s[1] == 0x83) {
      memmove(s + 7, s + 2, mvsize(s, 2));
      write_text(s, "&sigma;");
    } else if (s[0] == 0xcf && s[1] == 0x89) {
      memmove(s + 7, s + 2, mvsize(s, 2));
      write_text(s, "&omega;");
    } else if (s[0] == 0xc2 && s[1] == 0xb0) {
      memmove(s + 5, s + 2, mvsize(s, 2));
      write_text(s, "&deg;");
    }
    s++;
  }
}
```