user: What would the C source look like for the assembly code provided here:

```asm
<numstrcmp>:
  endbr64
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x8,%rsp
  mov    %rdi,%r12
  mov    %rsi,%r13
  jmp    L102
L329:
  mov    %r12,%rbx
  jmp    L216
L168:
  lea    0x1(%rbx),%r12
  jmp    L356
L378:
  add    $0x1,%r12
L356:
  movsbl (%r12),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L378
  jmp    L230
L292:
  mov    %r13,%rbp
  jmp    L243
L143:
  lea    0x1(%rbp),%r13
  jmp    L275
L121:
  add    $0x1,%r13
L275:
  movsbl 0x0(%r13),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L121
  jmp    L48
L385:
  movsbl 0x0(%rbp),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L60
  cmpb   $0x30,(%rbx)
  jne    L277
L13:
  add    $0x1,%rbx
  cmpb   $0x30,(%rbx)
  je     L13
L277:
  cmpb   $0x30,0x0(%rbp)
  jne    L163
L377:
  add    $0x1,%rbp
  cmpb   $0x30,0x0(%rbp)
  je     L377
L163:
  mov    %r12,%rdx
  sub    %rbx,%rdx
  mov    %r13,%rax
  sub    %rbp,%rax
  cmp    %rax,%rdx
  jl     L111
  jg     L202
  cmp    %rbx,%r12
  jbe    L102
L128:
  movzbl 0x0(%rbp),%eax
  cmp    %al,(%rbx)
  jne    L370
  add    $0x1,%rbx
  add    $0x1,%rbp
  cmp    %rbx,%r12
  jne    L128
  jmp    L102
L370:
  cmp    %rbx,%r12
  ja     L78
L102:
  movzbl (%r12),%edi
  cmp    $0x20,%dil
  jne    L329
  mov    %r12,%rbx
L271:
  add    $0x1,%rbx
  movzbl (%rbx),%edi
  cmp    $0x20,%dil
  je     L271
L216:
  movsbl %dil,%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L168
  mov    %r12,%rbx
  lea    0x1(%r12),%r12
L230:
  movzbl 0x0(%r13),%edi
  cmp    $0x20,%dil
  jne    L292
  mov    %r13,%rbp
L350:
  add    $0x1,%rbp
  movzbl 0x0(%rbp),%edi
  cmp    $0x20,%dil
  je     L350
L243:
  movsbl %dil,%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L143
  mov    %r13,%rbp
  lea    0x1(%r13),%r13
L48:
  movsbl (%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L385
  movsbl 0x0(%rbp),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L139
  movzbl (%rbx),%eax
  movzbl 0x0(%rbp),%edx
  cmp    %dl,%al
  jl     L179
  jg     L363
  test   %al,%al
  jne    L102
  mov    $0x0,%eax
  jmp    L297
L78:
  cmp    %al,(%rbx)
  setge  %al
  movzbl %al,%eax
  lea    -0x1(%rax,%rax,1),%eax
  jmp    L297
L139:
  mov    $0x1,%eax
L297:
  add    $0x8,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  ret
L179:
  mov    $0xffffffff,%eax
  jmp    L297
L363:
  mov    $0x1,%eax
  jmp    L297
L60:
  mov    $0xffffffff,%eax
  jmp    L297
L111:
  mov    $0xffffffff,%eax
  jmp    L297
L202:
  mov    $0x1,%eax
  jmp    L297
```

assistant: ```c
int numstrcmp(char *s1, char *s2) {
  char *a1, *a2;
  while (1) {
    for (a1 = s1; *a1 == ' '; ++a1) {
    }
    if (isdigit(*a1)) {
      for (s1 = a1 + 1; isdigit(*s1); ++s1) {
      }
    } else {
      a1 = s1;
      ++s1;
    }
    for (a2 = s2; *a2 == ' '; ++a2) {
    }
    if (isdigit(*a2)) {
      for (s2 = a2 + 1; isdigit(*s2); ++s2) {
      }
    } else {
      a2 = s2;
      ++s2;
    }
    if (!isdigit(*a1)) {
      if (!isdigit(*a2)) {
        if (*a1 < *a2)
          return -1;
        if (*a1 > *a2)
          return 1;
        if (*a1 == '\0')
          return 0;
      } else
        return 1;
    } else {
      if (!isdigit(*a2))
        return -1;
      else {
        for (; *a1 == '0'; ++a1) {
        }
        for (; *a2 == '0'; ++a2) {
        }
        if (s1 - a1 < s2 - a2)
          return -1;
        if (s1 - a1 > s2 - a2)
          return 1;
        for (; a1 < s1 && *a1 == *a2; ++a1, ++a2) {
        }
        if (a1 < s1) {
          if (*a1 < *a2)
            return -1;
          else
            return 1;
        }
      }
    }
  }
}
```