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

```asm
<checkDateFormat>:
  endbr64
  push   %r15
  push   %r14
  push   %r13
  push   %r12
  push   %rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    %rdi,%rbx
  mov    %fs:0x28,%rax
  mov    %rax,0x48(%rsp)
  xor    %eax,%eax
  movabs $0x2d30302d30303030,%rax
  movabs $0x30303a30302e3030,%rdx
  mov    %rax,(%rsp)
  mov    %rdx,0x8(%rsp)
  movl   $0x30303a,0x10(%rsp)
  call   <isInteger@plt>
  mov    $0x0,%ebp
  test   %rax,%rax
  je     L178
L164:
  mov    0x48(%rsp),%rax
  sub    %fs:0x28,%rax
  jne    L302
  mov    %ebp,%eax
  add    $0x58,%rsp
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  ret
L178:
  mov    %rbx,%rdi
  call   <strlen@plt>
  mov    %eax,%r13d
  movslq %eax,%rbp
  lea    -0x1(%rbx,%rbp,1),%rdx
  movzbl (%rdx),%eax
  cmp    $0x73,%al
  je     L678
  cmp    $0x6d,%al
  je     L4
  cmp    $0x68,%al
  je     L324
  cmp    $0x64,%al
  je     L216
  cmp    $0x79,%al
  je     L617
  cmp    $0x12,%r13d
  jg     L51
  movsbl (%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  jne    L421
L479:
  sub    $0x1,%r13d
  js     L725
  movslq %r13d,%r15
  add    %rbx,%r15
  mov    $0x0,%r12d
  jmp    L124
L678:
  movb   $0x0,(%rdx)
  mov    %rbx,%rdi
  call   <atoi@plt>
  mov    %eax,%ecx
  lea    D22(%rip),%rdx
  mov    $0x13,%esi
  mov    %rbx,%rdi
  call   <snprintf@plt>
  mov    $0x0,%ebp
  jmp    L164
L4:
  movb   $0x0,(%rdx)
  mov    %rbx,%rdi
  call   <atoi@plt>
  imul   $0x3c,%eax,%ecx
  lea    D22(%rip),%rdx
  mov    $0x13,%esi
  mov    %rbx,%rdi
  call   <snprintf@plt>
  mov    $0x0,%ebp
  jmp    L164
L324:
  movb   $0x0,(%rdx)
  mov    %rbx,%rdi
  call   <atoi@plt>
  imul   $0xe10,%eax,%ecx
  lea    D22(%rip),%rdx
  mov    $0x13,%esi
  mov    %rbx,%rdi
  call   <snprintf@plt>
  mov    $0x0,%ebp
  jmp    L164
L216:
  movb   $0x0,(%rdx)
  mov    %rbx,%rdi
  call   <atoi@plt>
  imul   $0x15180,%eax,%ecx
  lea    D22(%rip),%rdx
  mov    $0x13,%esi
  mov    %rbx,%rdi
  call   <snprintf@plt>
  mov    $0x0,%ebp
  jmp    L164
L617:
  movb   $0x0,(%rdx)
  mov    %rbx,%rdi
  call   <atoi@plt>
  imul   $0x1e13380,%eax,%ecx
  lea    D22(%rip),%rdx
  mov    $0x13,%esi
  mov    %rbx,%rdi
  call   <snprintf@plt>
  mov    $0x0,%ebp
  jmp    L164
L421:
  movsbl 0x1(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L479
  movsbl 0x2(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L479
  movsbl 0x3(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L479
  lea    (%rsp,%rbp,1),%rsi
  mov    %rbx,%rdi
  call   <strcat@plt>
L51:
  movsbl (%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L711
  movsbl 0x1(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L870
  movsbl 0x2(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L95
  movsbl 0x3(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L425
  movsbl 0x5(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L820
  movsbl 0x6(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L767
  movsbl 0x8(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L901
  movsbl 0x9(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L355
  movsbl 0xb(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L305
  movsbl 0xc(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L699
  movsbl 0xe(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L437
  movsbl 0xf(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L799
  movsbl 0x11(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L895
  movsbl 0x12(%rbx),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L194
  cmpb   $0x2d,0x4(%rbx)
  jne    L433
  cmpb   $0x2d,0x7(%rbx)
  jne    L310
  cmpb   $0x2e,0xa(%rbx)
  jne    L238
  cmpb   $0x3a,0xd(%rbx)
  jne    L897
  cmpb   $0x3a,0x10(%rbx)
  jne    L81
  lea    0x20(%rsp),%rsi
  mov    %rbx,%rdi
  call   <localToUnixTime@plt>
  mov    %eax,%ebp
  test   %eax,%eax
  js     L164
  lea    0x20(%rsp),%rsi
  mov    $0x20,%edx
  mov    %rbx,%rdi
  call   <strncpy@plt>
  jmp    L164
L891:
  sub    $0x9,%r14d
  js     L270
  movsbl -0x9(%rbp),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L704
  movsbl -0x9(%rbp),%eax
  sub    $0x30,%eax
  imul   $0x15180,%eax,%eax
  add    %eax,%r12d
  sub    $0xa,%r13d
  js     L270
  movsbl -0xa(%rbp),%edi
  call   <isdigit@plt>
  sub    $0xa,%r15
  test   %rax,%rax
  je     L265
  movsbl (%r15),%eax
  sub    $0x30,%eax
  imul   $0xd2f00,%eax,%eax
  add    %eax,%r12d
L124:
  mov    %r15,%rbp
  movsbl (%r15),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L757
  movsbl (%r15),%eax
  lea    -0x30(%r12,%rax,1),%r12d
  mov    %r13d,%r14d
  mov    %r13d,%eax
  sub    $0x1,%eax
  js     L270
  movsbl -0x1(%r15),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L495
  movsbl -0x1(%r15),%eax
  lea    -0xf0(%rax,%rax,4),%eax
  lea    (%r12,%rax,2),%r12d
  mov    %r13d,%eax
  sub    $0x2,%eax
  js     L19
  cmpb   $0x3a,-0x2(%r15)
  jne    L591
L19:
  mov    %r14d,%eax
  sub    $0x3,%eax
  js     L270
  movsbl -0x3(%rbp),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L883
  movsbl -0x3(%rbp),%eax
  sub    $0x30,%eax
  imul   $0x3c,%eax,%eax
  add    %eax,%r12d
  mov    %r14d,%eax
  sub    $0x4,%eax
  js     L270
  movsbl -0x4(%rbp),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L788
  movsbl -0x4(%rbp),%eax
  sub    $0x30,%eax
  imul   $0x258,%eax,%eax
  add    %eax,%r12d
  mov    %r14d,%eax
  sub    $0x5,%eax
  js     L277
  cmpb   $0x3a,-0x5(%rbp)
  jne    L568
L277:
  mov    %r14d,%eax
  sub    $0x6,%eax
  js     L270
  movsbl -0x6(%rbp),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L345
  movsbl -0x6(%rbp),%eax
  sub    $0x30,%eax
  imul   $0xe10,%eax,%eax
  add    %eax,%r12d
  mov    %r14d,%eax
  sub    $0x7,%eax
  js     L270
  movsbl -0x7(%rbp),%edi
  call   <isdigit@plt>
  test   %rax,%rax
  je     L888
  movsbl -0x7(%rbp),%eax
  sub    $0x30,%eax
  imul   $0x8ca0,%eax,%eax
  add    %eax,%r12d
  mov    %r14d,%eax
  sub    $0x8,%eax
  js     L891
  cmpb   $0x2e,-0x8(%rbp)
  je     L891
  mov    $0xfffffff6,%ebp
  jmp    L164
L725:
  mov    $0x0,%r12d
L270:
  mov    %r12d,%ecx
  lea    D22(%rip),%rdx
  mov    $0x13,%esi
  mov    %rbx,%rdi
  call   <snprintf@plt>
  mov    $0x0,%ebp
  jmp    L164
L757:
  mov    $0xfffffff6,%ebp
  jmp    L164
L495:
  mov    $0xfffffff6,%ebp
  jmp    L164
L591:
  mov    $0xfffffff6,%ebp
  jmp    L164
L883:
  mov    $0xfffffff6,%ebp
  jmp    L164
L788:
  mov    $0xfffffff6,%ebp
  jmp    L164
L568:
  mov    $0xfffffff6,%ebp
  jmp    L164
L345:
  mov    $0xfffffff6,%ebp
  jmp    L164
L888:
  mov    $0xfffffff6,%ebp
  jmp    L164
L704:
  mov    $0xfffffff6,%ebp
  jmp    L164
L265:
  mov    $0xfffffff6,%ebp
  jmp    L164
L711:
  mov    $0xfffffff6,%ebp
  jmp    L164
L870:
  mov    $0xfffffff6,%ebp
  jmp    L164
L95:
  mov    $0xfffffff6,%ebp
  jmp    L164
L425:
  mov    $0xfffffff6,%ebp
  jmp    L164
L820:
  mov    $0xfffffff6,%ebp
  jmp    L164
L767:
  mov    $0xfffffff6,%ebp
  jmp    L164
L901:
  mov    $0xfffffff6,%ebp
  jmp    L164
L355:
  mov    $0xfffffff6,%ebp
  jmp    L164
L305:
  mov    $0xfffffff6,%ebp
  jmp    L164
L699:
  mov    $0xfffffff6,%ebp
  jmp    L164
L437:
  mov    $0xfffffff6,%ebp
  jmp    L164
L799:
  mov    $0xfffffff6,%ebp
  jmp    L164
L895:
  mov    $0xfffffff6,%ebp
  jmp    L164
L194:
  mov    $0xfffffff6,%ebp
  jmp    L164
L433:
  mov    $0xfffffff6,%ebp
  jmp    L164
L310:
  mov    $0xfffffff6,%ebp
  jmp    L164
L238:
  mov    $0xfffffff6,%ebp
  jmp    L164
L897:
  mov    $0xfffffff6,%ebp
  jmp    L164
L81:
  mov    $0xfffffff6,%ebp
  jmp    L164
L302:
  call   <__stack_chk_fail@plt>
```

tool_calls: name: disassemble_data
arguments: label: D22
type_infered: string

tool: D22: %d

assistant: ```c
int checkDateFormat(char *s) {
  int len;
  char t[] = "0000-00-00.00:00:00";
  char outUnixTime[32];
  int status;
  int offset = 0;
  if (isInteger(s))
    return (0);
  len = strlen(s);
  if (s[len - 1] == 's') {
    s[len - 1] = '\0';
    offset = atoi(s);
    snprintf(s, 19, "%d", offset);
    return 0;
  } else if (s[len - 1] == 'm') {
    s[len - 1] = '\0';
    offset = atoi(s) * 60;
    snprintf(s, 19, "%d", offset);
    return 0;
  } else if (s[len - 1] == 'h') {
    s[len - 1] = '\0';
    offset = atoi(s) * 3600;
    snprintf(s, 19, "%d", offset);
    return 0;
  } else if (s[len - 1] == 'd') {
    s[len - 1] = '\0';
    offset = atoi(s) * 3600 * 24;
    snprintf(s, 19, "%d", offset);
    return 0;
  } else if (s[len - 1] == 'y') {
    s[len - 1] = '\0';
    offset = atoi(s) * 3600 * 24 * 365;
    snprintf(s, 19, "%d", offset);
    return 0;
  } else if (len < 19) {
    if (isdigit(s[0]) && isdigit(s[1]) && isdigit(s[2]) && isdigit(s[3])) {
      strcat(s, (char *)&t[len]);
    } else {
      int mypos;
      mypos = len - 1;
      while (mypos >= 0) {
        if (isdigit(s[mypos]))
          offset += s[mypos] - 48;
        else
          return (-10);
        mypos--;
        if (mypos >= 0)
          if (isdigit(s[mypos]))
            offset += 10 * (s[mypos] - 48);
          else
            return (-10);
        else
          break;
        mypos--;
        if (mypos >= 0)
          if (s[mypos] != ':')
            return (-10);
        mypos--;
        if (mypos >= 0)
          if (isdigit(s[mypos]))
            offset += 60 * (s[mypos] - 48);
          else
            return (-10);
        else
          break;
        mypos--;
        if (mypos >= 0)
          if (isdigit(s[mypos]))
            offset += 10 * 60 * (s[mypos] - 48);
          else
            return (-10);
        else
          break;
        mypos--;
        if (mypos >= 0)
          if (s[mypos] != ':')
            return (-10);
        mypos--;
        if (mypos >= 0)
          if (isdigit(s[mypos]))
            offset += 3600 * (s[mypos] - 48);
          else
            return (-10);
        else
          break;
        mypos--;
        if (mypos >= 0)
          if (isdigit(s[mypos]))
            offset += 10 * 3600 * (s[mypos] - 48);
          else
            return (-10);
        else
          break;
        mypos--;
        if (mypos >= 0)
          if (s[mypos] != '.')
            return (-10);
        mypos--;
        if (mypos >= 0)
          if (isdigit(s[mypos]))
            offset += 24 * 3600 * (s[mypos] - 48);
          else
            return (-10);
        else
          break;
        mypos--;
        if (mypos >= 0)
          if (isdigit(s[mypos]))
            offset += 10 * 24 * 3600 * (s[mypos] - 48);
          else
            return (-10);
        else
          break;
      }
      snprintf(s, 19, "%d", offset);
      return (0);
    }
  }
  if (isdigit(s[0]) && isdigit(s[1]) && isdigit(s[2]) && isdigit(s[3]) && isdigit(s[5]) && isdigit(s[6]) && isdigit(s[8]) && isdigit(s[9]) && isdigit(s[11]) && isdigit(s[12]) && isdigit(s[14]) && isdigit(s[15]) && isdigit(s[17]) && isdigit(s[18]) && s[4] == '-' && s[7] == '-' && s[10] == '.' && s[13] == ':' && s[16] == ':') {
    status = localToUnixTime(s, outUnixTime);
    if (status >= 0) {
      strncpy(s, outUnixTime, 32);
    }
    return (status);
  } else {
    return (-10);
  }
}
```