int skip_item(const unsigned char *p_cInDat, unsigned int iInLen,
              unsigned int iPath, const unsigned char **pp_cOutDat,
              unsigned int *l_out) {
  unsigned int iNumTag = 0;
  unsigned int iLengthLen = 0;
  const unsigned char *p_cDat = p_cInDat;
  const unsigned char *p_cEnd = p_cInDat + iInLen - 1;
  unsigned int iIndex, j;
  unsigned int l_tag;
  unsigned int l_len;
  for (iIndex = 1; iIndex < iPath; iIndex++) {
    if ((*p_cDat == 0) && (*(p_cDat + 1) == 0)) {
      p_cDat += 2;
      while ((*p_cDat == 0) && (p_cDat <= p_cEnd)) {
        p_cDat++;
      }
    } else {
      iNumTag = *p_cDat & 0x1F;
      if (iNumTag == 0x1F) {
        iNumTag = 0;
        l_tag = 0;
        do {
          p_cDat++;
          l_tag++;
          if (l_tag > 4)
            return (-2);
          iNumTag = (iNumTag << 7) | (*p_cDat & 0x7F);
        } while ((*p_cDat & 0x80) && (p_cDat < p_cEnd));
      }
      if (p_cDat > p_cEnd)
        return (-4);
      p_cDat++;
      iLengthLen = l_len = (unsigned int)*p_cDat;
      if (l_len & 0x80) {
        if ((l_len &= 0x7F) > 4)
          return (-3);
        iLengthLen = 0;
        for (j = 0; j < l_len; j++) {
          p_cDat++;
          if (p_cDat > p_cEnd)
            return (-4);
          iLengthLen = (iLengthLen << 8) | *p_cDat;
        }
      }
      p_cDat = p_cDat + iLengthLen + 1;
      if (p_cDat > p_cEnd)
        return (-5);
    }
  }
  *pp_cOutDat = p_cDat;
  *l_out = iInLen - (unsigned int)(*pp_cOutDat - p_cInDat);
  return (0);
}


x86 assembly (clang, -O0):
<skip_item>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x10(%rbp)
mov    %esi,-0x14(%rbp)
mov    %edx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x14(%rbp),%ecx
add    %rcx,%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x40(%rbp)
movl   $0x1,-0x44(%rbp)
mov    -0x44(%rbp),%eax
cmp    -0x18(%rbp),%eax
jae    1370 <skip_item+0x270>
mov    -0x38(%rbp),%rax
movzbl (%rax),%eax
cmp    $0x0,%eax
jne    11c7 <skip_item+0xc7>
mov    -0x38(%rbp),%rax
movzbl 0x1(%rax),%eax
cmp    $0x0,%eax
jne    11c7 <skip_item+0xc7>
mov    -0x38(%rbp),%rax
add    $0x2,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
movzbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x51(%rbp)
jne    11a1 <skip_item+0xa1>
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
setbe  %al
mov    %al,-0x51(%rbp)
mov    -0x51(%rbp),%al
test   $0x1,%al
jne    11b1 <skip_item+0xb1>
jmp    11c2 <skip_item+0xc2>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    117e <skip_item+0x7e>
jmp    135d <skip_item+0x25d>
mov    -0x38(%rbp),%rax
movzbl (%rax),%eax
and    $0x1f,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x1f,-0x2c(%rbp)
jne    1265 <skip_item+0x165>
movl   $0x0,-0x2c(%rbp)
movl   $0x0,-0x4c(%rbp)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x4c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x4c(%rbp)
cmpl   $0x4,-0x4c(%rbp)
jbe    1217 <skip_item+0x117>
movl   $0xfffffffe,-0x4(%rbp)
jmp    139b <skip_item+0x29b>
mov    -0x2c(%rbp),%eax
shl    $0x7,%eax
mov    -0x38(%rbp),%rcx
movzbl (%rcx),%ecx
and    $0x7f,%ecx
or     %ecx,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x38(%rbp),%rax
movzbl (%rax),%ecx
and    $0x80,%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x52(%rbp)
je     1255 <skip_item+0x155>
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
setb   %al
mov    %al,-0x52(%rbp)
mov    -0x52(%rbp),%al
test   $0x1,%al
jne    11ec <skip_item+0xec>
jmp    1265 <skip_item+0x165>
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jbe    127f <skip_item+0x17f>
movl   $0xfffffffc,-0x4(%rbp)
jmp    139b <skip_item+0x29b>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
movzbl (%rax),%eax
mov    %eax,-0x50(%rbp)
mov    %eax,-0x30(%rbp)
mov    -0x50(%rbp),%eax
and    $0x80,%eax
cmp    $0x0,%eax
je     132c <skip_item+0x22c>
mov    -0x50(%rbp),%eax
and    $0x7f,%eax
mov    %eax,-0x50(%rbp)
cmp    $0x4,%eax
jbe    12c7 <skip_item+0x1c7>
movl   $0xfffffffd,-0x4(%rbp)
jmp    139b <skip_item+0x29b>
movl   $0x0,-0x30(%rbp)
movl   $0x0,-0x48(%rbp)
mov    -0x48(%rbp),%eax
cmp    -0x50(%rbp),%eax
jae    1327 <skip_item+0x227>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jbe    1307 <skip_item+0x207>
movl   $0xfffffffc,-0x4(%rbp)
jmp    139b <skip_item+0x29b>
mov    -0x30(%rbp),%eax
shl    $0x8,%eax
mov    -0x38(%rbp),%rcx
movzbl (%rcx),%ecx
or     %ecx,%eax
mov    %eax,-0x30(%rbp)
mov    -0x48(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x48(%rbp)
jmp    12d5 <skip_item+0x1d5>
jmp    132c <skip_item+0x22c>
mov    -0x38(%rbp),%rax
mov    -0x30(%rbp),%ecx
add    %rcx,%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jbe    1358 <skip_item+0x258>
movl   $0xfffffffb,-0x4(%rbp)
jmp    139b <skip_item+0x29b>
jmp    135d <skip_item+0x25d>
jmp    1362 <skip_item+0x262>
mov    -0x44(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x44(%rbp)
jmp    1145 <skip_item+0x45>
mov    -0x38(%rbp),%rcx
mov    -0x20(%rbp),%rax
mov    %rcx,(%rax)
mov    -0x14(%rbp),%ecx
mov    -0x20(%rbp),%rax
mov    (%rax),%rax
mov    -0x10(%rbp),%rdx
sub    %rdx,%rax
sub    %eax,%ecx
mov    -0x28(%rbp),%rax
mov    %ecx,(%rax)
movl   $0x0,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<skip_item>:
push   %rbp
push   %r15
push   %r14
push   %r12
push   %rbx
mov    %rdi,%rbx
cmp    $0x2,%edx
jb     127f <skip_item+0x17f>
mov    %esi,%eax
lea    (%rdi,%rax,1),%r9
add    $0xffffffffffffffff,%r9
mov    $0x1,%r10d
mov    %rdi,%rbx
nopw   0x0(%rax,%rax,1)
mov    (%rbx),%al
test   %al,%al
je     1180 <skip_item+0x80>
not    %al
test   $0x1f,%al
jne    1186 <skip_item+0x86>
lea    0x1(%rbx),%r11
cmpb   $0x0,0x1(%rbx)
jns    1189 <skip_item+0x89>
cmp    %r9,%r11
jae    1189 <skip_item+0x89>
lea    0x2(%rbx),%r11
cmpb   $0x0,0x2(%rbx)
jns    1189 <skip_item+0x89>
cmp    %r9,%r11
jae    1189 <skip_item+0x89>
lea    0x3(%rbx),%r11
cmpb   $0x0,0x3(%rbx)
jns    1189 <skip_item+0x89>
cmp    %r9,%r11
jae    1189 <skip_item+0x89>
lea    0x4(%rbx),%r11
cmpb   $0x0,0x4(%rbx)
jns    1189 <skip_item+0x89>
cmp    %r9,%r11
jae    1189 <skip_item+0x89>
jmp    12a2 <skip_item+0x1a2>
nopl   (%rax)
cmpb   $0x0,0x1(%rbx)
je     11e6 <skip_item+0xe6>
mov    %rbx,%r11
mov    $0xfffffffc,%eax
cmp    %r9,%r11
ja     128b <skip_item+0x18b>
movzbl 0x1(%r11),%ebx
test   $0x80,%bl
je     1263 <skip_item+0x163>
and    $0x7f,%ebx
cmp    $0x4,%ebx
ja     129b <skip_item+0x19b>
test   %ebx,%ebx
je     11df <skip_item+0xdf>
lea    0x2(%r11),%rbp
cmp    %r9,%rbp
ja     128b <skip_item+0x18b>
lea    0x1(%r11),%r15
lea    -0x1(%rbx),%r14d
add    %r15,%r14
movzbl 0x0(%rbp),%r15d
cmp    $0x1,%ebx
jne    1207 <skip_item+0x107>
mov    %r15d,%ebx
jmp    1260 <skip_item+0x160>
xor    %ebx,%ebx
jmp    1263 <skip_item+0x163>
add    $0x2,%rbx
mov    %rbx,%rax
nopl   (%rax)
lea    0x1(%rax),%rbx
cmpb   $0x0,(%rax)
jne    1201 <skip_item+0x101>
cmp    %r9,%rax
mov    %rbx,%rax
jbe    11f0 <skip_item+0xf0>
add    $0xffffffffffffffff,%rbx
jmp    1272 <skip_item+0x172>
lea    0x3(%r11),%rbp
cmp    %r9,%rbp
ja     128b <skip_item+0x18b>
shl    $0x8,%r15d
movzbl 0x0(%rbp),%r12d
or     %r15d,%r12d
cmp    $0x2,%ebx
jne    1226 <skip_item+0x126>
mov    %r12d,%ebx
jmp    1260 <skip_item+0x160>
lea    0x4(%r11),%rbp
cmp    %r9,%rbp
ja     128b <skip_item+0x18b>
shl    $0x8,%r12d
movzbl 0x0(%rbp),%r15d
or     %r12d,%r15d
cmp    $0x3,%ebx
je     11d7 <skip_item+0xd7>
add    $0x5,%r11
cmp    %r9,%r11
ja     128b <skip_item+0x18b>
shl    $0x8,%r15d
movzbl (%r11),%ebx
or     %r15d,%ebx
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r14,%r11
mov    %ebx,%eax
lea    (%r11,%rax,1),%rbx
add    $0x2,%rbx
cmp    %r9,%rbx
ja     1294 <skip_item+0x194>
add    $0x1,%r10d
cmp    %edx,%r10d
jne    1130 <skip_item+0x30>
mov    %rbx,(%rcx)
sub    %ebx,%edi
add    %esi,%edi
mov    %edi,(%r8)
xor    %eax,%eax
pop    %rbx
pop    %r12
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0xfffffffb,%eax
jmp    128b <skip_item+0x18b>
mov    $0xfffffffd,%eax
jmp    128b <skip_item+0x18b>
mov    $0xfffffffe,%eax
jmp    128b <skip_item+0x18b>

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

LLVM IR (-O2):
define i32 @skip_item(i8* %0, i32 %1, i32 %2, i8** nocapture writeonly %3, i32* nocapture writeonly %4) {
%6 = zext i32 %1 to i64
%7 = getelementptr inbounds i8, i8* %0, i64 %6
%8 = getelementptr inbounds i8, i8* %7, i64 -1
%9 = icmp ugt i32 %2, 1
br i1 %9, label %10, label %116
10: ; preds = %5, %112
%11 = phi i32 [ %114, %112 ], [ 1, %5 ]
%12 = phi i8* [ %113, %112 ], [ %0, %5 ]
%13 = load i8, i8* %12
%14 = icmp eq i8 %13, 0
br i1 %14, label %15, label %28
15: ; preds = %10
%16 = getelementptr inbounds i8, i8* %12, i64 1
%17 = load i8, i8* %16
%18 = icmp eq i8 %17, 0
br i1 %18, label %19, label %55
19: ; preds = %15
%20 = getelementptr inbounds i8, i8* %12, i64 2
br label %21
21: ; preds = %21, %19
%22 = phi i8* [ %20, %19 ], [ %27, %21 ]
%23 = load i8, i8* %22
%24 = icmp eq i8 %23, 0
%25 = icmp ule i8* %22, %8
%26 = select i1 %24, i1 %25, i1 false
%27 = getelementptr inbounds i8, i8* %22, i64 1
br i1 %26, label %21, label %112
28: ; preds = %10
%29 = and i8 %13, 31
%30 = icmp eq i8 %29, 31
br i1 %30, label %31, label %55
31: ; preds = %28
%32 = getelementptr inbounds i8, i8* %12, i64 1
%33 = load i8, i8* %32
%34 = icmp slt i8 %33, 0
%35 = icmp ult i8* %32, %8
%36 = select i1 %34, i1 %35, i1 false
br i1 %36, label %37, label %55
37: ; preds = %31
%38 = getelementptr inbounds i8, i8* %12, i64 2
%39 = load i8, i8* %38
%40 = icmp slt i8 %39, 0
%41 = icmp ult i8* %38, %8
%42 = select i1 %40, i1 %41, i1 false
br i1 %42, label %43, label %55
43: ; preds = %37
%44 = getelementptr inbounds i8, i8* %12, i64 3
%45 = load i8, i8* %44
%46 = icmp slt i8 %45, 0
%47 = icmp ult i8* %44, %8
%48 = select i1 %46, i1 %47, i1 false
br i1 %48, label %49, label %55
49: ; preds = %43
%50 = getelementptr inbounds i8, i8* %12, i64 4
%51 = load i8, i8* %50
%52 = icmp slt i8 %51, 0
%53 = icmp ult i8* %50, %8
%54 = select i1 %52, i1 %53, i1 false
br i1 %54, label %123, label %55
55: ; preds = %31, %37, %43, %49, %15, %28
%56 = phi i8* [ %12, %28 ], [ %12, %15 ], [ %32, %31 ], [ %38, %37 ], [ %44, %43 ], [ %50, %49 ]
%57 = icmp ugt i8* %56, %8
br i1 %57, label %123, label %58
58: ; preds = %55
%59 = getelementptr i8, i8* %56, i64 1
%60 = load i8, i8* %59
%61 = zext i8 %60 to i32
%62 = and i32 %61, 128
%63 = icmp eq i32 %62, 0
br i1 %63, label %105, label %64
64: ; preds = %58
%65 = and i32 %61, 127
%66 = icmp ugt i32 %65, 4
br i1 %66, label %123, label %67
67: ; preds = %64
%68 = icmp eq i32 %65, 0
br i1 %68, label %105, label %69
69: ; preds = %67
%70 = add nsw i32 %65, -1
%71 = zext i32 %70 to i64
%72 = getelementptr i8, i8* %59, i64 %71
%73 = getelementptr i8, i8* %56, i64 2
%74 = icmp ugt i8* %73, %8
br i1 %74, label %123, label %75
75: ; preds = %69
%76 = load i8, i8* %73
%77 = zext i8 %76 to i32
%78 = icmp eq i32 %65, 1
br i1 %78, label %105, label %79
79: ; preds = %75
%80 = getelementptr i8, i8* %56, i64 3
%81 = icmp ugt i8* %80, %8
br i1 %81, label %123, label %82
82: ; preds = %79
%83 = shl nuw nsw i32 %77, 8
%84 = load i8, i8* %80
%85 = zext i8 %84 to i32
%86 = or i32 %83, %85
%87 = icmp eq i32 %65, 2
br i1 %87, label %105, label %88
88: ; preds = %82
%89 = getelementptr i8, i8* %56, i64 4
%90 = icmp ugt i8* %89, %8
br i1 %90, label %123, label %91
91: ; preds = %88
%92 = shl nuw nsw i32 %86, 8
%93 = load i8, i8* %89
%94 = zext i8 %93 to i32
%95 = or i32 %92, %94
%96 = icmp eq i32 %65, 3
br i1 %96, label %105, label %97
97: ; preds = %91
%98 = getelementptr i8, i8* %56, i64 5
%99 = icmp ugt i8* %98, %8
br i1 %99, label %123, label %100
100: ; preds = %97
%101 = shl nuw i32 %95, 8
%102 = load i8, i8* %98
%103 = zext i8 %102 to i32
%104 = or i32 %101, %103
br label %105
105: ; preds = %75, %82, %91, %100, %67, %58
%106 = phi i32 [ %61, %58 ], [ 0, %67 ], [ %77, %75 ], [ %86, %82 ], [ %95, %91 ], [ %104, %100 ]
%107 = phi i8* [ %56, %58 ], [ %56, %67 ], [ %72, %100 ], [ %72, %91 ], [ %72, %82 ], [ %72, %75 ]
%108 = zext i32 %106 to i64
%109 = getelementptr inbounds i8, i8* %107, i64 2
%110 = getelementptr inbounds i8, i8* %109, i64 %108
%111 = icmp ugt i8* %110, %8
br i1 %111, label %123, label %112
112: ; preds = %21, %105
%113 = phi i8* [ %110, %105 ], [ %22, %21 ]
%114 = add nuw i32 %11, 1
%115 = icmp eq i32 %114, %2
br i1 %115, label %116, label %10
116: ; preds = %112, %5
%117 = phi i8* [ %0, %5 ], [ %113, %112 ]
store i8* %117, i8** %3
%118 = ptrtoint i8* %117 to i64
%119 = ptrtoint i8* %0 to i64
%120 = sub i64 %119, %118
%121 = trunc i64 %120 to i32
%122 = add i32 %121, %1
store i32 %122, i32* %4
br label %123
123: ; preds = %105, %64, %55, %49, %69, %79, %88, %97, %116
%124 = phi i32 [ 0, %116 ], [ -4, %97 ], [ -4, %88 ], [ -4, %79 ], [ -4, %69 ], [ -5, %105 ], [ -3, %64 ], [ -4, %55 ], [ -2, %49 ]
ret i32 %124
}