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

```asm
<entab>:
  endbr64
  push   %r15
  push   %r14
  mov    %edi,%r14d
  push   %r13
  xor    %r13d,%r13d
  push   %r12
  xor    %r12d,%r12d
  push   %rbp
  xor    %ebp,%ebp
  push   %rbx
  sub    $0x18,%rsp
  mov    %esi,0xc(%rsp)
  nopl   0x0(%rax)
L189:
  xor    %eax,%eax
  call   <getchar@plt>
  mov    %eax,%ebx
  mov    D9(%rip),%rax
  cmp    %ebx,(%rax)
  je     L110
  cmp    $0x20,%ebx
  setne  %dl
  cmp    0xc(%rsp),%r13d
  setge  %al
  test   %ebp,%ebp
  jne    L8
  cmp    $0xa,%ebx
  je     L8
  test   %al,%al
  je     L161
  test   %dl,%dl
  je     L161
  movsbl %bl,%edi
  add    $0x1,%r12d
  call   <putchar@plt>
  nopl   0x0(%rax,%rax,1)
L2:
  lea    -0x9(%rbx),%eax
  cmp    $0x1,%eax
  jbe    L3
  cmp    %r12d,%r14d
  jg     L221
L3:
  xor    %eax,%eax
  xor    %r12d,%r12d
  cmp    $0xa,%ebx
  cmove  %eax,%r13d
L221:
  cmp    0xc(%rsp),%r13d
  jge    L189
  movsbl %bl,%edi
  add    $0x1,%r13d
  call   <putchar@plt>
  jmp    L189
  xchg   %ax,%ax
L161:
  cmp    $0x20,%ebx
  jne    L2
  cmp    $0x1,%al
  sbb    $0xffffffff,%ebp
  jmp    L2
  nopl   0x0(%rax)
L8:
  test   %ebp,%ebp
  jle    L161
  test   %dl,%dl
  je     L161
  cmp    %r14d,%ebp
  jl     L66
  test   %al,%al
  jne    L25
  cmp    %r14d,%ebp
  jge    L2
L66:
  test   %al,%al
  je     L2
L155:
  mov    %ebp,%r15d
  nopl   (%rax)
L172:
  mov    $0x20,%edi
  call   <putchar@plt>
  sub    $0x1,%r15d
  jne    L172
  test   %ebp,%ebp
  mov    $0x1,%eax
  movsbl %bl,%edi
  cmovg  %ebp,%eax
  sub    %eax,%ebp
  call   <putchar@plt>
  jmp    L2
  nopl   0x0(%rax)
L25:
  mov    $0x9,%edi
  sub    %r14d,%ebp
  call   <putchar@plt>
  cmp    %ebp,%r14d
  jle    L25
  test   %r12d,%r12d
  jle    L149
  nopw   0x0(%rax,%rax,1)
L21:
  mov    $0x20,%edi
  call   <putchar@plt>
  sub    $0x1,%r12d
  jne    L21
L149:
  test   %ebp,%ebp
  je     L92
  cmp    %ebp,%r14d
  jg     L155
L124:
  lea    -0x9(%rbx),%eax
  cmp    $0x1,%eax
  jbe    L3
  jmp    L189
  nopw   0x0(%rax,%rax,1)
L110:
  mov    $0xa,%edi
  call   <putchar@plt>
  add    $0x18,%rsp
  xor    %eax,%eax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
  nopl   0x0(%rax,%rax,1)
L92:
  movsbl %bl,%edi
  call   <putchar@plt>
  jmp    L124
```

assistant: ```c
int entab(int TABSTOP, int m) {
  int c, spc, column, counter;
  spc = column = counter = 0;
  while ((c = getchar()) != EOF) {
    if (spc == 0 && c != '\n' && c != ' ' && counter >= m) {
      column++;
      putchar(c);
    }
    if (spc > 0 && c != ' ' && spc >= TABSTOP && counter >= m) {
      while (spc >= TABSTOP) {
        putchar('\t');
        spc -= TABSTOP;
      }
      while (column > 0) {
        putchar(' ');
        column--;
      }
      if (spc == 0)
        putchar(c);
    }
    if (spc > 0 && c != ' ' && spc < TABSTOP && counter >= m) {
      while (spc > 0 && spc < TABSTOP) {
        putchar(' ');
        spc--;
      }
      putchar(c);
    }
    if (c == ' ' && counter >= m)
      spc++;
    if (column >= TABSTOP || c == '\n' || c == '\t')
      column = 0;
    if (c == '\n')
      counter = 0;
    if (counter < m) {
      counter++;
      putchar(c);
    }
  }
  putchar('\n');
  return 0;
}
```