#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */
typedef int uint8_t;
typedef int uint64_t;
typedef int uint32_t;

/* Variables and functions */
int UINT64_C(int);
int exports_parsetime(char *timestr, uint32_t *time) {
  uint64_t t;
  uint64_t tp;
  uint8_t bits;
  char *p;
  for (p = timestr; *p; p++) {
    if (*p >= 'a' && *p <= 'z') {
      *p -= ('a' - 'A');
    }
  }
  t = 0;
  bits = 0;
  while (1) {
    if (*timestr < '0' || *timestr > '9') {
      return -1;
    }
    tp = 0;
    while (*timestr >= '0' && *timestr <= '9') {
      tp *= 10;
      tp += *timestr - '0';
      timestr++;
      if (tp > UINT64_C(0x100000000)) {
        return -1;
      }
    }
    switch (*timestr) {
    case 'W':
      if (bits & 0x1F) {
        return -1;
      }
      bits |= 0x10;
      tp *= 604800;
      timestr++;
      break;
    case 'D':
      if (bits & 0x0F) {
        return -1;
      }
      bits |= 0x08;
      tp *= 86400;
      timestr++;
      break;
    case 'H':
      if (bits & 0x07) {
        return -1;
      }
      bits |= 0x04;
      tp *= 3600;
      timestr++;
      break;
    case 'M':
      if (bits & 0x03) {
        return -1;
      }
      bits |= 0x02;
      tp *= 60;
      timestr++;
      break;
    case 'S':
      if (bits & 0x01) {
        return -1;
      }
      bits |= 0x01;
      timestr++;
      break;
    case '\0':
      if (bits) {
        return -1;
      }
      break;
    default:
      return -1;
    }
    t += tp;
    if (t > UINT64_C(0x100000000)) {
      return -1;
    }
    if (*timestr == '\0') {
      *time = t;
      return 0;
    }
  }
  return -1;
}


x86 assembly (clang, -O0):
<exports_parsetime>:
push   %rbp
mov    %rsp,%rbp
sub    $0x40,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
cmpb   $0x0,(%rax)
je     1177 <exports_parsetime+0x67>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     1161 <exports_parsetime+0x51>
mov    -0x30(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7a,%eax
jg     1161 <exports_parsetime+0x51>
mov    -0x30(%rbp),%rax
movsbl (%rax),%ecx
sub    $0x20,%ecx
mov    %cl,(%rax)
jmp    1166 <exports_parsetime+0x56>
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1128 <exports_parsetime+0x18>
movl   $0x0,-0x1c(%rbp)
movl   $0x0,-0x24(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     11a5 <exports_parsetime+0x95>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jle    11b1 <exports_parsetime+0xa1>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
movl   $0x0,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x30,%ecx
mov    %al,-0x31(%rbp)
jl     11dd <exports_parsetime+0xcd>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
setle  %al
mov    %al,-0x31(%rbp)
mov    -0x31(%rbp),%al
test   $0x1,%al
jne    11ed <exports_parsetime+0xdd>
jmp    123b <exports_parsetime+0x12b>
imul   $0xa,-0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
add    -0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
mov    -0x20(%rbp),%eax
mov    %eax,-0x38(%rbp)
xor    %edi,%edi
call   1030 <UINT64_C@plt>
mov    %eax,%ecx
mov    -0x38(%rbp),%eax
cmp    %ecx,%eax
jle    1236 <exports_parsetime+0x126>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
jmp    11b8 <exports_parsetime+0xa8>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
mov    %eax,-0x3c(%rbp)
test   %eax,%eax
je     13d5 <exports_parsetime+0x2c5>
jmp    1252 <exports_parsetime+0x142>
mov    -0x3c(%rbp),%eax
sub    $0x44,%eax
je     12e6 <exports_parsetime+0x1d6>
jmp    1263 <exports_parsetime+0x153>
mov    -0x3c(%rbp),%eax
sub    $0x48,%eax
je     1325 <exports_parsetime+0x215>
jmp    1274 <exports_parsetime+0x164>
mov    -0x3c(%rbp),%eax
sub    $0x4d,%eax
je     1364 <exports_parsetime+0x254>
jmp    1285 <exports_parsetime+0x175>
mov    -0x3c(%rbp),%eax
sub    $0x53,%eax
je     13a0 <exports_parsetime+0x290>
jmp    1296 <exports_parsetime+0x186>
mov    -0x3c(%rbp),%eax
sub    $0x57,%eax
jne    13f0 <exports_parsetime+0x2e0>
jmp    12a7 <exports_parsetime+0x197>
mov    -0x24(%rbp),%eax
and    $0x1f,%eax
cmp    $0x0,%eax
je     12c2 <exports_parsetime+0x1b2>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
mov    -0x24(%rbp),%eax
or     $0x10,%eax
mov    %eax,-0x24(%rbp)
imul   $0x93a80,-0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13fc <exports_parsetime+0x2ec>
mov    -0x24(%rbp),%eax
and    $0xf,%eax
cmp    $0x0,%eax
je     1301 <exports_parsetime+0x1f1>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
mov    -0x24(%rbp),%eax
or     $0x8,%eax
mov    %eax,-0x24(%rbp)
imul   $0x15180,-0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13fc <exports_parsetime+0x2ec>
mov    -0x24(%rbp),%eax
and    $0x7,%eax
cmp    $0x0,%eax
je     1340 <exports_parsetime+0x230>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
mov    -0x24(%rbp),%eax
or     $0x4,%eax
mov    %eax,-0x24(%rbp)
imul   $0xe10,-0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13fc <exports_parsetime+0x2ec>
mov    -0x24(%rbp),%eax
and    $0x3,%eax
cmp    $0x0,%eax
je     137f <exports_parsetime+0x26f>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
mov    -0x24(%rbp),%eax
or     $0x2,%eax
mov    %eax,-0x24(%rbp)
imul   $0x3c,-0x20(%rbp),%eax
mov    %eax,-0x20(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13fc <exports_parsetime+0x2ec>
mov    -0x24(%rbp),%eax
and    $0x1,%eax
cmp    $0x0,%eax
je     13bb <exports_parsetime+0x2ab>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
mov    -0x24(%rbp),%eax
or     $0x1,%eax
mov    %eax,-0x24(%rbp)
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13fc <exports_parsetime+0x2ec>
cmpl   $0x0,-0x24(%rbp)
je     13eb <exports_parsetime+0x2db>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
jmp    13fc <exports_parsetime+0x2ec>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
mov    -0x20(%rbp),%eax
add    -0x1c(%rbp),%eax
mov    %eax,-0x1c(%rbp)
mov    -0x1c(%rbp),%eax
mov    %eax,-0x40(%rbp)
xor    %edi,%edi
call   1030 <UINT64_C@plt>
mov    %eax,%ecx
mov    -0x40(%rbp),%eax
cmp    %ecx,%eax
jle    142b <exports_parsetime+0x31b>
movl   $0xffffffff,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x0,%eax
jne    1450 <exports_parsetime+0x340>
mov    -0x1c(%rbp),%ecx
mov    -0x18(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x0,-0x4(%rbp)
jmp    1455 <exports_parsetime+0x345>
jmp    1185 <exports_parsetime+0x75>
mov    -0x4(%rbp),%eax
add    $0x40,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<exports_parsetime>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%rbx
mov    (%rdi),%al
xor    %ebp,%ebp
test   %al,%al
mov    %rsi,(%rsp)
je     114e <exports_parsetime+0x3e>
lea    0x1(%rbx),%rcx
jmp    113b <exports_parsetime+0x2b>
movzbl (%rcx),%eax
add    $0x1,%rcx
test   %al,%al
je     114a <exports_parsetime+0x3a>
lea    -0x61(%rax),%edx
cmp    $0x19,%dl
ja     1130 <exports_parsetime+0x20>
add    $0xe0,%al
mov    %al,-0x1(%rcx)
jmp    1130 <exports_parsetime+0x20>
mov    (%rbx),%al
jmp    1150 <exports_parsetime+0x40>
xor    %eax,%eax
lea    0xea9(%rip),%r12
xor    %r13d,%r13d
mov    $0xffffffff,%r15d
lea    -0x3a(%rax),%ecx
cmp    $0xf6,%cl
jb     1255 <exports_parsetime+0x145>
lea    -0x30(%rax),%ecx
xor    %r14d,%r14d
cmp    $0x9,%cl
ja     11af <exports_parsetime+0x9f>
xor    %r14d,%r14d
nopw   0x0(%rax,%rax,1)
movzbl %al,%eax
lea    (%r14,%r14,4),%ecx
lea    (%rax,%rcx,2),%r14d
add    $0xffffffd0,%r14d
xor    %edi,%edi
call   1030 <UINT64_C@plt>
cmp    %eax,%r14d
jg     1255 <exports_parsetime+0x145>
movzbl 0x1(%rbx),%eax
add    $0x1,%rbx
lea    -0x30(%rax),%ecx
cmp    $0xa,%cl
jb     1180 <exports_parsetime+0x70>
movsbl %al,%eax
lea    -0x44(%rax),%ecx
cmp    $0x13,%ecx
ja     11da <exports_parsetime+0xca>
movslq (%r12,%rcx,4),%rax
add    %r12,%rax
jmp    *%rax
test   $0xf,%r13b
jne    1255 <exports_parsetime+0x145>
or     $0x8,%r13d
imul   $0x15180,%r14d,%r14d
jmp    1230 <exports_parsetime+0x120>
test   %eax,%eax
jne    1255 <exports_parsetime+0x145>
test   %r13d,%r13d
mov    $0x0,%r13d
je     1234 <exports_parsetime+0x124>
jmp    1255 <exports_parsetime+0x145>
test   $0x7,%r13b
jne    1255 <exports_parsetime+0x145>
or     $0x4,%r13d
imul   $0xe10,%r14d,%r14d
jmp    1230 <exports_parsetime+0x120>
test   $0x3,%r13b
jne    1255 <exports_parsetime+0x145>
or     $0x2,%r13d
imul   $0x3c,%r14d,%r14d
jmp    1230 <exports_parsetime+0x120>
test   $0x1,%r13b
jne    1255 <exports_parsetime+0x145>
or     $0x1,%r13d
jmp    1230 <exports_parsetime+0x120>
test   $0x1f,%r13b
jne    1255 <exports_parsetime+0x145>
or     $0x10,%r13d
imul   $0x93a80,%r14d,%r14d
nopl   0x0(%rax,%rax,1)
add    $0x1,%rbx
add    %r14d,%ebp
xor    %edi,%edi
call   1030 <UINT64_C@plt>
cmp    %eax,%ebp
jg     1255 <exports_parsetime+0x145>
mov    (%rbx),%al
test   %al,%al
jne    1160 <exports_parsetime+0x50>
mov    (%rsp),%rax
mov    %ebp,(%rax)
xor    %r15d,%r15d
mov    %r15d,%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define i32 @exports_parsetime(i8* %0, i32* %1) {
%3 = alloca i32
%4 = alloca i8*
%5 = alloca i32*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i8*
store i8* %0, i8** %4
store i32* %1, i32** %5
%10 = load i8*, i8** %4
store i8* %10, i8** %9
br label %11
11: ; preds = %32, %2
%12 = load i8*, i8** %9
%13 = load i8, i8* %12
%14 = icmp ne i8 %13, 0
br i1 %14, label %15, label %35
15: ; preds = %11
%16 = load i8*, i8** %9
%17 = load i8, i8* %16
%18 = sext i8 %17 to i32
%19 = icmp sge i32 %18, 97
br i1 %19, label %20, label %31
20: ; preds = %15
%21 = load i8*, i8** %9
%22 = load i8, i8* %21
%23 = sext i8 %22 to i32
%24 = icmp sle i32 %23, 122
br i1 %24, label %25, label %31
25: ; preds = %20
%26 = load i8*, i8** %9
%27 = load i8, i8* %26
%28 = sext i8 %27 to i32
%29 = sub nsw i32 %28, 32
%30 = trunc i32 %29 to i8
store i8 %30, i8* %26
br label %31
31: ; preds = %25, %20, %15
br label %32
32: ; preds = %31
%33 = load i8*, i8** %9
%34 = getelementptr inbounds i8, i8* %33, i32 1
store i8* %34, i8** %9
br label %11
35: ; preds = %11
store i32 0, i32* %6
store i32 0, i32* %8
br label %36
36: ; preds = %35, %160
%37 = load i8*, i8** %4
%38 = load i8, i8* %37
%39 = sext i8 %38 to i32
%40 = icmp slt i32 %39, 48
br i1 %40, label %46, label %41
41: ; preds = %36
%42 = load i8*, i8** %4
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
%45 = icmp sgt i32 %44, 57
br i1 %45, label %46, label %47
46: ; preds = %41, %36
store i32 -1, i32* %3
br label %161
47: ; preds = %41
store i32 0, i32* %7
br label %48
48: ; preds = %75, %47
%49 = load i8*, i8** %4
%50 = load i8, i8* %49
%51 = sext i8 %50 to i32
%52 = icmp sge i32 %51, 48
br i1 %52, label %53, label %58
53: ; preds = %48
%54 = load i8*, i8** %4
%55 = load i8, i8* %54
%56 = sext i8 %55 to i32
%57 = icmp sle i32 %56, 57
br label %58
58: ; preds = %53, %48
%59 = phi i1 [ false, %48 ], [ %57, %53 ]
br i1 %59, label %60, label %76
60: ; preds = %58
%61 = load i32, i32* %7
%62 = mul nsw i32 %61, 10
store i32 %62, i32* %7
%63 = load i8*, i8** %4
%64 = load i8, i8* %63
%65 = sext i8 %64 to i32
%66 = sub nsw i32 %65, 48
%67 = load i32, i32* %7
%68 = add nsw i32 %67, %66
store i32 %68, i32* %7
%69 = load i8*, i8** %4
%70 = getelementptr inbounds i8, i8* %69, i32 1
store i8* %70, i8** %4
%71 = load i32, i32* %7
%72 = call i32 @UINT64_C(i32 0)
%73 = icmp sgt i32 %71, %72
br i1 %73, label %74, label %75
74: ; preds = %60
store i32 -1, i32* %3
br label %161
75: ; preds = %60
br label %48
76: ; preds = %58
%77 = load i8*, i8** %4
%78 = load i8, i8* %77
%79 = sext i8 %78 to i32
switch i32 %79, label %143 [
i32 87, label %80
i32 68, label %92
i32 72, label %104
i32 77, label %116
i32 83, label %128
i32 0, label %138
]
80: ; preds = %76
%81 = load i32, i32* %8
%82 = and i32 %81, 31
%83 = icmp ne i32 %82, 0
br i1 %83, label %84, label %85
84: ; preds = %80
store i32 -1, i32* %3
br label %161
85: ; preds = %80
%86 = load i32, i32* %8
%87 = or i32 %86, 16
store i32 %87, i32* %8
%88 = load i32, i32* %7
%89 = mul nsw i32 %88, 604800
store i32 %89, i32* %7
%90 = load i8*, i8** %4
%91 = getelementptr inbounds i8, i8* %90, i32 1
store i8* %91, i8** %4
br label %144
92: ; preds = %76
%93 = load i32, i32* %8
%94 = and i32 %93, 15
%95 = icmp ne i32 %94, 0
br i1 %95, label %96, label %97
96: ; preds = %92
store i32 -1, i32* %3
br label %161
97: ; preds = %92
%98 = load i32, i32* %8
%99 = or i32 %98, 8
store i32 %99, i32* %8
%100 = load i32, i32* %7
%101 = mul nsw i32 %100, 86400
store i32 %101, i32* %7
%102 = load i8*, i8** %4
%103 = getelementptr inbounds i8, i8* %102, i32 1
store i8* %103, i8** %4
br label %144
104: ; preds = %76
%105 = load i32, i32* %8
%106 = and i32 %105, 7
%107 = icmp ne i32 %106, 0
br i1 %107, label %108, label %109
108: ; preds = %104
store i32 -1, i32* %3
br label %161
109: ; preds = %104
%110 = load i32, i32* %8
%111 = or i32 %110, 4
store i32 %111, i32* %8
%112 = load i32, i32* %7
%113 = mul nsw i32 %112, 3600
store i32 %113, i32* %7
%114 = load i8*, i8** %4
%115 = getelementptr inbounds i8, i8* %114, i32 1
store i8* %115, i8** %4
br label %144
116: ; preds = %76
%117 = load i32, i32* %8
%118 = and i32 %117, 3
%119 = icmp ne i32 %118, 0
br i1 %119, label %120, label %121
120: ; preds = %116
store i32 -1, i32* %3
br label %161
121: ; preds = %116
%122 = load i32, i32* %8
%123 = or i32 %122, 2
store i32 %123, i32* %8
%124 = load i32, i32* %7
%125 = mul nsw i32 %124, 60
store i32 %125, i32* %7
%126 = load i8*, i8** %4
%127 = getelementptr inbounds i8, i8* %126, i32 1
store i8* %127, i8** %4
br label %144
128: ; preds = %76
%129 = load i32, i32* %8
%130 = and i32 %129, 1
%131 = icmp ne i32 %130, 0
br i1 %131, label %132, label %133
132: ; preds = %128
store i32 -1, i32* %3
br label %161
133: ; preds = %128
%134 = load i32, i32* %8
%135 = or i32 %134, 1
store i32 %135, i32* %8
%136 = load i8*, i8** %4
%137 = getelementptr inbounds i8, i8* %136, i32 1
store i8* %137, i8** %4
br label %144
138: ; preds = %76
%139 = load i32, i32* %8
%140 = icmp ne i32 %139, 0
br i1 %140, label %141, label %142
141: ; preds = %138
store i32 -1, i32* %3
br label %161
142: ; preds = %138
br label %144
143: ; preds = %76
store i32 -1, i32* %3
br label %161
144: ; preds = %142, %133, %121, %109, %97, %85
%145 = load i32, i32* %7
%146 = load i32, i32* %6
%147 = add nsw i32 %146, %145
store i32 %147, i32* %6
%148 = load i32, i32* %6
%149 = call i32 @UINT64_C(i32 0)
%150 = icmp sgt i32 %148, %149
br i1 %150, label %151, label %152
151: ; preds = %144
store i32 -1, i32* %3
br label %161
152: ; preds = %144
%153 = load i8*, i8** %4
%154 = load i8, i8* %153
%155 = sext i8 %154 to i32
%156 = icmp eq i32 %155, 0
br i1 %156, label %157, label %160
157: ; preds = %152
%158 = load i32, i32* %6
%159 = load i32*, i32** %5
store i32 %158, i32* %159
store i32 0, i32* %3
br label %161
160: ; preds = %152
br label %36
161: ; preds = %157, %151, %143, %141, %132, %120, %108, %96, %84, %74, %46
%162 = load i32, i32* %3
ret i32 %162
}

LLVM IR (-O2):
define i32 @exports_parsetime(i8* nocapture %0, i32* nocapture writeonly %1) {
%3 = load i8, i8* %0
%4 = icmp eq i8 %3, 0
br i1 %4, label %5, label %9
5: ; preds = %7, %2
%6 = phi i8 [ 0, %2 ], [ %8, %7 ]
br label %20
7: ; preds = %16
%8 = load i8, i8* %0
br label %5
9: ; preds = %2, %16
%10 = phi i8 [ %18, %16 ], [ %3, %2 ]
%11 = phi i8* [ %17, %16 ], [ %0, %2 ]
%12 = add i8 %10, -97
%13 = icmp ult i8 %12, 26
br i1 %13, label %14, label %16
14: ; preds = %9
%15 = add nsw i8 %10, -32
store i8 %15, i8* %11
br label %16
16: ; preds = %9, %14
%17 = getelementptr inbounds i8, i8* %11, i64 1
%18 = load i8, i8* %17
%19 = icmp eq i8 %18, 0
br i1 %19, label %7, label %9
20: ; preds = %5, %93
%21 = phi i8 [ %94, %93 ], [ %6, %5 ]
%22 = phi i8* [ %87, %93 ], [ %0, %5 ]
%23 = phi i32 [ %90, %93 ], [ 0, %5 ]
%24 = phi i32 [ %89, %93 ], [ 0, %5 ]
%25 = add i8 %21, -58
%26 = icmp ult i8 %25, -10
br i1 %26, label %97, label %27
27: ; preds = %20
%28 = add i8 %21, -48
%29 = icmp ult i8 %28, 10
br i1 %29, label %30, label %45
30: ; preds = %27, %41
%31 = phi i32 [ %37, %41 ], [ 0, %27 ]
%32 = phi i8* [ %38, %41 ], [ %22, %27 ]
%33 = phi i8 [ %42, %41 ], [ %21, %27 ]
%34 = zext i8 %33 to i32
%35 = mul nsw i32 %31, 10
%36 = add i32 %35, -48
%37 = add i32 %36, %34
%38 = getelementptr inbounds i8, i8* %32, i64 1
%39 = tail call i32 @UINT64_C(i32 0)
%40 = icmp sgt i32 %37, %39
br i1 %40, label %97, label %41
41: ; preds = %30
%42 = load i8, i8* %38
%43 = add i8 %42, -48
%44 = icmp ult i8 %43, 10
br i1 %44, label %30, label %45
45: ; preds = %41, %27
%46 = phi i8 [ %21, %27 ], [ %42, %41 ]
%47 = phi i8* [ %22, %27 ], [ %38, %41 ]
%48 = phi i32 [ 0, %27 ], [ %37, %41 ]
%49 = sext i8 %46 to i32
switch i32 %49, label %97 [
i32 87, label %50
i32 68, label %57
i32 72, label %64
i32 77, label %71
i32 83, label %78
i32 0, label %84
]
50: ; preds = %45
%51 = and i32 %24, 31
%52 = icmp eq i32 %51, 0
br i1 %52, label %53, label %97
53: ; preds = %50
%54 = or i32 %24, 16
%55 = mul nsw i32 %48, 604800
%56 = getelementptr inbounds i8, i8* %47, i64 1
br label %86
57: ; preds = %45
%58 = and i32 %24, 15
%59 = icmp eq i32 %58, 0
br i1 %59, label %60, label %97
60: ; preds = %57
%61 = or i32 %24, 8
%62 = mul nsw i32 %48, 86400
%63 = getelementptr inbounds i8, i8* %47, i64 1
br label %86
64: ; preds = %45
%65 = and i32 %24, 7
%66 = icmp eq i32 %65, 0
br i1 %66, label %67, label %97
67: ; preds = %64
%68 = or i32 %24, 4
%69 = mul nsw i32 %48, 3600
%70 = getelementptr inbounds i8, i8* %47, i64 1
br label %86
71: ; preds = %45
%72 = and i32 %24, 3
%73 = icmp eq i32 %72, 0
br i1 %73, label %74, label %97
74: ; preds = %71
%75 = or i32 %24, 2
%76 = mul nsw i32 %48, 60
%77 = getelementptr inbounds i8, i8* %47, i64 1
br label %86
78: ; preds = %45
%79 = and i32 %24, 1
%80 = icmp eq i32 %79, 0
br i1 %80, label %81, label %97
81: ; preds = %78
%82 = or i32 %24, 1
%83 = getelementptr inbounds i8, i8* %47, i64 1
br label %86
84: ; preds = %45
%85 = icmp eq i32 %24, 0
br i1 %85, label %86, label %97
86: ; preds = %84, %81, %74, %67, %60, %53
%87 = phi i8* [ %47, %84 ], [ %83, %81 ], [ %77, %74 ], [ %70, %67 ], [ %63, %60 ], [ %56, %53 ]
%88 = phi i32 [ %48, %84 ], [ %48, %81 ], [ %76, %74 ], [ %69, %67 ], [ %62, %60 ], [ %55, %53 ]
%89 = phi i32 [ 0, %84 ], [ %82, %81 ], [ %75, %74 ], [ %68, %67 ], [ %61, %60 ], [ %54, %53 ]
%90 = add nsw i32 %88, %23
%91 = tail call i32 @UINT64_C(i32 0)
%92 = icmp sgt i32 %90, %91
br i1 %92, label %97, label %93
93: ; preds = %86
%94 = load i8, i8* %87
%95 = icmp eq i8 %94, 0
br i1 %95, label %96, label %20
96: ; preds = %93
store i32 %90, i32* %1
br label %97
97: ; preds = %86, %45, %84, %78, %71, %64, %57, %50, %20, %30, %96
%98 = phi i32 [ 0, %96 ], [ -1, %30 ], [ -1, %20 ], [ -1, %50 ], [ -1, %57 ], [ -1, %64 ], [ -1, %71 ], [ -1, %78 ], [ -1, %84 ], [ -1, %45 ], [ -1, %86 ]
ret i32 %98
}