user: Please show me the C implementation that matches the assembly code listed below:

```asm
<nsvg__parseNumber>:
  endbr64
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  mov    %rdi,%rbp
  mov    %rsi,%r13
  lea    -0x1(%rdx),%r12d
  movzbl (%rdi),%eax
  lea    -0x2b(%rax),%edx
  mov    $0x0,%ebx
  test   $0xfd,%dl
  jne    L14
  test   %r12d,%r12d
  jle    L226
  mov    %al,(%rsi)
  mov    $0x1,%ebx
L226:
  add    $0x1,%rbp
L14:
  movzbl 0x0(%rbp),%edi
  mov    %rbp,%r14
  test   %dil,%dil
  jne    L20
L166:
  movslq %ebx,%rbx
  movb   $0x0,0x0(%r13,%rbx,1)
  mov    %r14,%rax
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  ret
L318:
  add    $0x1,%rbp
  movzbl 0x0(%rbp),%edi
  test   %dil,%dil
  je     L84
L20:
  movsbl %dil,%edi
  call   <nsvg__isdigit@plt>
  test   %rax,%rax
  je     L300
  cmp    %ebx,%r12d
  jle    L318
  movzbl 0x0(%rbp),%edx
  movslq %ebx,%rax
  mov    %dl,0x0(%r13,%rax,1)
  lea    0x1(%rbx),%ebx
  jmp    L318
L300:
  cmpb   $0x2e,0x0(%rbp)
  jne    L288
  cmp    %ebx,%r12d
  jle    L18
  movslq %ebx,%rax
  movb   $0x2e,0x0(%r13,%rax,1)
  lea    0x1(%rbx),%ebx
L18:
  lea    0x1(%rbp),%r14
  movzbl 0x1(%rbp),%edi
  test   %dil,%dil
  jne    L200
  jmp    L166
L159:
  add    $0x1,%r14
  movzbl (%r14),%edi
  test   %dil,%dil
  je     L166
L200:
  movsbl %dil,%edi
  call   <nsvg__isdigit@plt>
  test   %rax,%rax
  je     L95
  cmp    %ebx,%r12d
  jle    L159
  movzbl (%r14),%edx
  movslq %ebx,%rax
  mov    %dl,0x0(%r13,%rax,1)
  lea    0x1(%rbx),%ebx
  jmp    L159
L84:
  mov    %rbp,%r14
L95:
  movzbl (%r14),%edx
  mov    %edx,%eax
  and    $0xffffffdf,%eax
  cmp    $0x45,%al
  jne    L166
  movzbl 0x1(%r14),%eax
  cmp    $0x6d,%al
  je     L166
  cmp    $0x78,%al
  je     L166
  cmp    %r12d,%ebx
  jge    L289
  lea    0x1(%rbx),%eax
  movslq %ebx,%rcx
  mov    %dl,0x0(%r13,%rcx,1)
  movzbl 0x1(%r14),%edx
  lea    -0x2b(%rdx),%ecx
  test   $0xfd,%cl
  jne    L261
  cmp    %eax,%r12d
  jle    L54
  add    $0x2,%ebx
  cltq
  mov    %dl,0x0(%r13,%rax,1)
L34:
  add    $0x2,%r14
L68:
  movzbl (%r14),%edi
  test   %dil,%dil
  jne    L53
  jmp    L166
L288:
  mov    %rbp,%r14
  jmp    L95
L261:
  add    $0x1,%r14
  mov    %eax,%ebx
  jmp    L68
L54:
  mov    %eax,%ebx
  jmp    L34
L91:
  add    $0x1,%r14
  movzbl (%r14),%edi
  test   %dil,%dil
  je     L166
L53:
  movsbl %dil,%edi
  call   <nsvg__isdigit@plt>
  test   %rax,%rax
  je     L166
  cmp    %ebx,%r12d
  jle    L91
  movzbl (%r14),%edx
  movslq %ebx,%rax
  mov    %dl,0x0(%r13,%rax,1)
  lea    0x1(%rbx),%ebx
  jmp    L91
L289:
  sub    $0x2b,%eax
  test   $0xfd,%al
  je     L34
  add    $0x1,%r14
  jmp    L68
```

assistant: ```c
const char *nsvg__parseNumber(const char *s, char *it, const int size) {
  const int last = size - 1;
  int i = 0;
  if (*s == '-' || *s == '+') {
    if (i < last)
      it[i++] = *s;
    s++;
  }
  while (*s && nsvg__isdigit(*s)) {
    if (i < last)
      it[i++] = *s;
    s++;
  }
  if (*s == '.') {
    if (i < last)
      it[i++] = *s;
    s++;
    while (*s && nsvg__isdigit(*s)) {
      if (i < last)
        it[i++] = *s;
      s++;
    }
  }
  if ((*s == 'e' || *s == 'E') && (s[1] != 'm' && s[1] != 'x')) {
    if (i < last)
      it[i++] = *s;
    s++;
    if (*s == '-' || *s == '+') {
      if (i < last)
        it[i++] = *s;
      s++;
    }
    while (*s && nsvg__isdigit(*s)) {
      if (i < last)
        it[i++] = *s;
      s++;
    }
  }
  it[i] = '\0';
  return s;
}
```