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

```asm
<test_mktime>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0x60,%rsp
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  movl   $0x70,-0x50(%rbp)
  movl   $0xb,-0x4c(%rbp)
  movl   $0x10,-0x48(%rbp)
  movl   $0x15,-0x44(%rbp)
  movl   $0x2a,-0x40(%rbp)
  movl   $0x1,-0x3c(%rbp)
  movl   $0xa,-0x38(%rbp)
  movl   $0xa,-0x34(%rbp)
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <mktime@plt>
  mov    %eax,-0x54(%rbp)
  mov    -0x54(%rbp),%eax
  cmp    $0x50ce4029,%eax
  je     L34
  mov    $0x2e,%edx
  lea    D82(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L34:
  mov    -0x38(%rbp),%eax
  test   %eax,%eax
  je     L180
  mov    $0x2f,%edx
  lea    D199(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L180:
  mov    -0x34(%rbp),%eax
  cmp    $0x15e,%eax
  je     L25
  mov    $0x30,%edx
  lea    D193(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L25:
  lea    -0x30(%rbp),%rdx
  lea    -0x54(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <gmtime_r@plt>
  lea    -0x30(%rbp),%rdx
  cmp    %rdx,%rax
  je     L105
  mov    $0x32,%edx
  lea    D113(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L105:
  mov    -0x30(%rbp),%eax
  cmp    $0x70,%eax
  je     L198
  mov    $0x34,%edx
  lea    D176(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L198:
  mov    -0x2c(%rbp),%eax
  cmp    $0xb,%eax
  je     L106
  mov    $0x35,%edx
  lea    D187(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L106:
  mov    -0x28(%rbp),%eax
  cmp    $0x10,%eax
  je     L61
  mov    $0x36,%edx
  lea    D10(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L61:
  mov    -0x24(%rbp),%eax
  cmp    $0x15,%eax
  je     L89
  mov    $0x37,%edx
  lea    D60(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L89:
  movl   $0x0,-0x50(%rbp)
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <mktime@plt>
  cmp    $0xffffffff,%eax
  je     L81
  mov    $0x3a,%edx
  lea    D146(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L81:
  movl   $0x7dc,-0x50(%rbp)
  lea    -0x50(%rbp),%rax
  mov    %rax,%rdi
  call   <mktime@plt>
  cmp    $0xffffffff,%eax
  je     L24
  mov    $0x3d,%edx
  lea    D146(%rip),%rax
  mov    %rax,%rsi
  lea    D29(%rip),%rax
  mov    %rax,%rdi
  call   <printf@plt>
  mov    $0x0,%eax
  jmp    L154
L24:
  mov    $0x1,%eax
L154:
  mov    -0x8(%rbp),%rdx
  sub    %fs:0x28,%rdx
  je     L177
  call   <__stack_chk_fail@plt>
L177:
  leave
  ret
```

tool_calls: name: parse_data
arguments: data_label: D82
datatype: string
name: parse_data
arguments: data_label: D29
datatype: string
name: parse_data
arguments: data_label: D199
datatype: string
name: parse_data
arguments: data_label: D193
datatype: string
name: parse_data
arguments: data_label: D113
datatype: string
name: parse_data
arguments: data_label: D176
datatype: string
name: parse_data
arguments: data_label: D187
datatype: string
name: parse_data
arguments: data_label: D10
datatype: string
name: parse_data
arguments: data_label: D60
datatype: string
name: parse_data
arguments: data_label: D146
datatype: string

tool: D82: t == 1355694121

tool: D29: expression '%s' untrue at %d


tool: D199: tm.tm_wday == 0

tool: D193: tm.tm_yday == 350

tool: D113: &tm2 == gmtime_r(&t, &tm2)

tool: D176: tm2.tm_year == 112

tool: D187: tm2.tm_mon == 11

tool: D10: tm2.tm_mday == 16

tool: D60: tm2.tm_hour == 21

tool: D146: -1 == mktime(&tm)

assistant: ```c
int test_mktime(void) {
  struct tm tm = {
      .tm_year = 112,
      .tm_mon = 11,
      .tm_mday = 16,
      .tm_hour = 21,
      .tm_min = 42,
      .tm_sec = 1,
      .tm_wday = 10,
      .tm_yday = 10,
  };
  struct tm tm2;
  time_t t;
  t = mktime(&tm);
  do {
    if (!(t == 1355694121)) {
      printf("expression '%s' untrue at %d\n", "t == 1355694121", 46);
      return 0;
    }
  } while (0);
  do {
    if (!(tm.tm_wday == 0)) {
      printf("expression '%s' untrue at %d\n", "tm.tm_wday == 0", 47);
      return 0;
    }
  } while (0);
  do {
    if (!(tm.tm_yday == 350)) {
      printf("expression '%s' untrue at %d\n", "tm.tm_yday == 350", 48);
      return 0;
    }
  } while (0);
  do {
    if (!(&tm2 == gmtime_r(&t, &tm2))) {
      printf("expression '%s' untrue at %d\n", "&tm2 == gmtime_r(&t, &tm2)", 50);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_year == 112)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_year == 112", 52);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_mon == 11)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_mon == 11", 53);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_mday == 16)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_mday == 16", 54);
      return 0;
    }
  } while (0);
  do {
    if (!(tm2.tm_hour == 21)) {
      printf("expression '%s' untrue at %d\n", "tm2.tm_hour == 21", 55);
      return 0;
    }
  } while (0);
  tm.tm_year = 0;
  do {
    if (!(-1 == mktime(&tm))) {
      printf("expression '%s' untrue at %d\n", "-1 == mktime(&tm)", 58);
      return 0;
    }
  } while (0);
  tm.tm_year = 2012;
  do {
    if (!(-1 == mktime(&tm))) {
      printf("expression '%s' untrue at %d\n", "-1 == mktime(&tm)", 61);
      return 0;
    }
  } while (0);
  return 1;
}
```