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

```asm
<parse_msec>:
  endbr64
  movsbl (%rdi),%eax
  mov    %rdi,%r8
  cmp    $0x20,%al
  je     L257
  cmp    $0x9,%al
  jne    L244
L257:
  mov    %r8d,%ecx
  lea    0x1(%r8),%rdx
  neg    %ecx
  nop
L148:
  movsbl (%rdx),%eax
  lea    (%rcx,%rdx,1),%r9d
  mov    %rdx,%rsi
  add    $0x1,%rdx
  cmp    $0x20,%al
  je     L148
  cmp    $0x9,%al
  je     L148
  lea    -0x30(%rax),%edx
  cmp    $0x9,%dl
  ja     L159
L223:
  movslq %r9d,%rdx
  lea    0x1(%r9),%r10d
  xor    %ecx,%ecx
  lea    0x1(%r8,%rdx,1),%rdx
  sub    %edx,%r10d
  nopl   0x0(%rax,%rax,1)
L87:
  lea    (%rcx,%rcx,4),%ecx
  lea    (%r10,%rdx,1),%r9d
  mov    %rdx,%rsi
  add    $0x1,%rdx
  lea    -0x30(%rax,%rcx,2),%ecx
  movsbl -0x1(%rdx),%eax
  lea    -0x30(%rax),%edi
  cmp    $0x9,%dil
  jbe    L87
L23:
  cmp    $0x2e,%al
  je     L48
  movzbl (%rsi),%eax
  xor    %edx,%edx
L135:
  cmp    $0x20,%al
  je     L86
  cmp    $0x9,%al
  jne    L107
L86:
  movslq %r9d,%r9
  lea    0x1(%r8,%r9,1),%rsi
L102:
  movzbl (%rsi),%eax
  add    $0x1,%rsi
  cmp    $0x20,%al
  je     L102
  cmp    $0x9,%al
  je     L102
L107:
  test   %al,%al
  jne    L92
  imul   $0x3e8,%ecx,%eax
  add    %edx,%eax
  ret
L48:
  lea    0x1(%r9),%edx
  movslq %edx,%rax
  movsbl (%r8,%rax,1),%eax
  lea    -0x30(%rax),%esi
  cmp    $0x9,%sil
  ja     L239
  push   %rbx
  lea    0x2(%r9),%esi
  xor    %edx,%edx
  movslq %esi,%rsi
  nopl   0x0(%rax,%rax,1)
L211:
  lea    (%rdx,%rdx,4),%edx
  mov    %esi,%r10d
  mov    %esi,%ebx
  lea    -0x30(%rax,%rdx,2),%edx
  movsbl (%r8,%rsi,1),%eax
  sub    %r9d,%r10d
  add    $0x1,%rsi
  lea    -0x1(%r10),%edi
  lea    -0x30(%rax),%r11d
  cmp    $0x9,%r11b
  jbe    L211
  cmp    $0x3,%edi
  jle    L125
  mov    $0xcccccccd,%esi
  nopl   0x0(%rax,%rax,1)
L163:
  mov    %edx,%edx
  sub    $0x1,%edi
  imul   %rsi,%rdx
  shr    $0x23,%rdx
  cmp    $0x3,%edi
  jne    L163
L114:
  mov    %ebx,%r9d
L185:
  cmp    $0x20,%al
  je     L267
  cmp    $0x9,%al
  jne    L188
L267:
  movslq %r9d,%r9
  lea    0x1(%r8,%r9,1),%rsi
  nopl   (%rax)
L76:
  movzbl (%rsi),%eax
  add    $0x1,%rsi
  cmp    $0x20,%al
  je     L76
  cmp    $0x9,%al
  je     L76
L188:
  test   %al,%al
  jne    L36
  imul   $0x3e8,%ecx,%eax
  pop    %rbx
  add    %edx,%eax
  ret
L125:
  je     L114
  lea    (%rdx,%rdx,4),%esi
  add    %esi,%esi
  cmp    $0x3,%r10d
  je     L35
  imul   $0x64,%edx,%edx
  mov    %ebx,%r9d
  jmp    L185
  nopw   0x0(%rax,%rax,1)
L244:
  lea    -0x30(%rax),%edx
  mov    %rdi,%rsi
  xor    %r9d,%r9d
  cmp    $0x9,%dl
  jbe    L223
  nopw   0x0(%rax,%rax,1)
L159:
  xor    %ecx,%ecx
  jmp    L23
L239:
  mov    %edx,%r9d
  xor    %edx,%edx
  jmp    L135
L36:
  mov    $0xffffffff,%eax
  pop    %rbx
  ret
L35:
  mov    %ebx,%r9d
  mov    %esi,%edx
  jmp    L185
L92:
  mov    $0xffffffff,%eax
  ret
```

assistant: ```c
int parse_msec(const char *string) {
  unsigned int in, fl;
  int i, j;
  in = fl = 0;
  i = 0;
  while (string[i] == ' ' || string[i] == '\t')
    i++;
  while (string[i] >= '0' && string[i] <= '9') {
    in = in * 10 + string[i] - '0';
    i++;
  }
  if (string[i] == '.') {
    i++;
    j = 0;
    while (string[i] >= '0' && string[i] <= '9') {
      fl = fl * 10 + string[i] - '0';
      i++;
      j++;
    }
    while (j > 3) {
      fl /= 10;
      j--;
    }
    while (j < 3) {
      fl *= 10;
      j++;
    }
  }
  while (string[i] == ' ' || string[i] == '\t')
    i++;
  if (string[i] == '\0')
    return in * 1000 + fl;
  return -1;
}
```