#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 */

/* Variables and functions */
int /*<<< orphan*/ __ESBMC_assume(int);
int /*<<< orphan*/ assert(int);
int main(int argc, char *argv[]) {
  int n0, n1, n2;
  int i = 0;
  int k = 0;
  __ESBMC_assume(n2 == 59 && n1 == 387 && n0 == 455 && i <= 455 && k == i &&
                 i >= 0);
  while (i < n0) {
    i++;
    k++;
  }
  i = 0;
  __ESBMC_assume(n2 == 59 && n1 == 387 && n0 == 455 && i <= 387 &&
                 k == 455 + i && i >= 0);
  while (i < n1) {
    i++;
    k++;
  }
  i = 0;
  __ESBMC_assume(n2 == 59 && n1 == 387 && n0 == 455 && i <= 59 &&
                 k == 842 + i && i >= 0);
  while (i < n2) {
    i++;
    k++;
  }
  i = 0;
  __ESBMC_assume(n2 == 59 && n1 == 387 && n0 == 455 && k == 901 - i && i >= 0 &&
                 i <= 59);
  while (i < n2) {
    i++;
    k--;
  }
  i = 0;
  __ESBMC_assume(n2 == 59 && n1 == 387 && n0 == 455 && k == 842 - i && i >= 0 &&
                 i <= 387);
  while (i < n1) {
    i++;
    k--;
  }
  i = 0;
  __ESBMC_assume(n2 == 59 && n1 == 387 && n0 == 455 && k == 455 - i && i >= 0 &&
                 i <= 455);
  while (i < n0) {
    assert(k > 0);
    i++;
    k--;
  }
  return 0;
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x30,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movl   $0x0,-0x20(%rbp)
movl   $0x0,-0x24(%rbp)
xor    %eax,%eax
cmpl   $0x3b,-0x1c(%rbp)
mov    %al,-0x25(%rbp)
jne    11a4 <main+0x84>
xor    %eax,%eax
cmpl   $0x183,-0x18(%rbp)
mov    %al,-0x25(%rbp)
jne    11a4 <main+0x84>
xor    %eax,%eax
cmpl   $0x1c7,-0x14(%rbp)
mov    %al,-0x25(%rbp)
jne    11a4 <main+0x84>
xor    %eax,%eax
cmpl   $0x1c7,-0x20(%rbp)
mov    %al,-0x25(%rbp)
jg     11a4 <main+0x84>
mov    -0x24(%rbp),%ecx
xor    %eax,%eax
cmp    -0x20(%rbp),%ecx
mov    %al,-0x25(%rbp)
jne    11a4 <main+0x84>
cmpl   $0x0,-0x20(%rbp)
setge  %al
mov    %al,-0x25(%rbp)
mov    -0x25(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <__ESBMC_assume@plt>
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    11d4 <main+0xb4>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    11b1 <main+0x91>
movl   $0x0,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x3b,-0x1c(%rbp)
mov    %al,-0x26(%rbp)
jne    1243 <main+0x123>
xor    %eax,%eax
cmpl   $0x183,-0x18(%rbp)
mov    %al,-0x26(%rbp)
jne    1243 <main+0x123>
xor    %eax,%eax
cmpl   $0x1c7,-0x14(%rbp)
mov    %al,-0x26(%rbp)
jne    1243 <main+0x123>
xor    %eax,%eax
cmpl   $0x183,-0x20(%rbp)
mov    %al,-0x26(%rbp)
jg     1243 <main+0x123>
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%edx
add    $0x1c7,%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x26(%rbp)
jne    1243 <main+0x123>
cmpl   $0x0,-0x20(%rbp)
setge  %al
mov    %al,-0x26(%rbp)
mov    -0x26(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <__ESBMC_assume@plt>
mov    -0x20(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1273 <main+0x153>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    1250 <main+0x130>
movl   $0x0,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x3b,-0x1c(%rbp)
mov    %al,-0x27(%rbp)
jne    12df <main+0x1bf>
xor    %eax,%eax
cmpl   $0x183,-0x18(%rbp)
mov    %al,-0x27(%rbp)
jne    12df <main+0x1bf>
xor    %eax,%eax
cmpl   $0x1c7,-0x14(%rbp)
mov    %al,-0x27(%rbp)
jne    12df <main+0x1bf>
xor    %eax,%eax
cmpl   $0x3b,-0x20(%rbp)
mov    %al,-0x27(%rbp)
jg     12df <main+0x1bf>
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%edx
add    $0x34a,%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x27(%rbp)
jne    12df <main+0x1bf>
cmpl   $0x0,-0x20(%rbp)
setge  %al
mov    %al,-0x27(%rbp)
mov    -0x27(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <__ESBMC_assume@plt>
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    130f <main+0x1ef>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x24(%rbp)
jmp    12ec <main+0x1cc>
movl   $0x0,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x3b,-0x1c(%rbp)
mov    %al,-0x28(%rbp)
jne    137a <main+0x25a>
xor    %eax,%eax
cmpl   $0x183,-0x18(%rbp)
mov    %al,-0x28(%rbp)
jne    137a <main+0x25a>
xor    %eax,%eax
cmpl   $0x1c7,-0x14(%rbp)
mov    %al,-0x28(%rbp)
jne    137a <main+0x25a>
mov    -0x24(%rbp),%ecx
mov    $0x385,%edx
sub    -0x20(%rbp),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x28(%rbp)
jne    137a <main+0x25a>
xor    %eax,%eax
cmpl   $0x0,-0x20(%rbp)
mov    %al,-0x28(%rbp)
jl     137a <main+0x25a>
cmpl   $0x3b,-0x20(%rbp)
setle  %al
mov    %al,-0x28(%rbp)
mov    -0x28(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <__ESBMC_assume@plt>
mov    -0x20(%rbp),%eax
cmp    -0x1c(%rbp),%eax
jge    13aa <main+0x28a>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1387 <main+0x267>
movl   $0x0,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x3b,-0x1c(%rbp)
mov    %al,-0x29(%rbp)
jne    1418 <main+0x2f8>
xor    %eax,%eax
cmpl   $0x183,-0x18(%rbp)
mov    %al,-0x29(%rbp)
jne    1418 <main+0x2f8>
xor    %eax,%eax
cmpl   $0x1c7,-0x14(%rbp)
mov    %al,-0x29(%rbp)
jne    1418 <main+0x2f8>
mov    -0x24(%rbp),%ecx
mov    $0x34a,%edx
sub    -0x20(%rbp),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x29(%rbp)
jne    1418 <main+0x2f8>
xor    %eax,%eax
cmpl   $0x0,-0x20(%rbp)
mov    %al,-0x29(%rbp)
jl     1418 <main+0x2f8>
cmpl   $0x183,-0x20(%rbp)
setle  %al
mov    %al,-0x29(%rbp)
mov    -0x29(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <__ESBMC_assume@plt>
mov    -0x20(%rbp),%eax
cmp    -0x18(%rbp),%eax
jge    1448 <main+0x328>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    1425 <main+0x305>
movl   $0x0,-0x20(%rbp)
xor    %eax,%eax
cmpl   $0x3b,-0x1c(%rbp)
mov    %al,-0x2a(%rbp)
jne    14b6 <main+0x396>
xor    %eax,%eax
cmpl   $0x183,-0x18(%rbp)
mov    %al,-0x2a(%rbp)
jne    14b6 <main+0x396>
xor    %eax,%eax
cmpl   $0x1c7,-0x14(%rbp)
mov    %al,-0x2a(%rbp)
jne    14b6 <main+0x396>
mov    -0x24(%rbp),%ecx
mov    $0x1c7,%edx
sub    -0x20(%rbp),%edx
xor    %eax,%eax
cmp    %edx,%ecx
mov    %al,-0x2a(%rbp)
jne    14b6 <main+0x396>
xor    %eax,%eax
cmpl   $0x0,-0x20(%rbp)
mov    %al,-0x2a(%rbp)
jl     14b6 <main+0x396>
cmpl   $0x1c7,-0x20(%rbp)
setle  %al
mov    %al,-0x2a(%rbp)
mov    -0x2a(%rbp),%al
and    $0x1,%al
movzbl %al,%edi
call   1030 <__ESBMC_assume@plt>
mov    -0x20(%rbp),%eax
cmp    -0x14(%rbp),%eax
jge    14f7 <main+0x3d7>
cmpl   $0x0,-0x24(%rbp)
setg   %al
and    $0x1,%al
movzbl %al,%edi
call   1040 <assert@plt>
mov    -0x20(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x20(%rbp)
mov    -0x24(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x24(%rbp)
jmp    14c3 <main+0x3a3>
xor    %eax,%eax
add    $0x30,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rax
xor    %edi,%edi
call   1030 <__ESBMC_assume@plt>
xor    %edi,%edi
call   1030 <__ESBMC_assume@plt>
xor    %edi,%edi
call   1030 <__ESBMC_assume@plt>
xor    %edi,%edi
call   1030 <__ESBMC_assume@plt>
xor    %edi,%edi
call   1030 <__ESBMC_assume@plt>
xor    %edi,%edi
call   1030 <__ESBMC_assume@plt>
xor    %eax,%eax
pop    %rcx
ret

LLVM IR (-O0):
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i32
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
store i32 0, i32* %9
store i32 0, i32* %10
%11 = load i32, i32* %8
%12 = icmp eq i32 %11, 59
br i1 %12, label %13, label %29
13: ; preds = %2
%14 = load i32, i32* %7
%15 = icmp eq i32 %14, 387
br i1 %15, label %16, label %29
16: ; preds = %13
%17 = load i32, i32* %6
%18 = icmp eq i32 %17, 455
br i1 %18, label %19, label %29
19: ; preds = %16
%20 = load i32, i32* %9
%21 = icmp sle i32 %20, 455
br i1 %21, label %22, label %29
22: ; preds = %19
%23 = load i32, i32* %10
%24 = load i32, i32* %9
%25 = icmp eq i32 %23, %24
br i1 %25, label %26, label %29
26: ; preds = %22
%27 = load i32, i32* %9
%28 = icmp sge i32 %27, 0
br label %29
29: ; preds = %26, %22, %19, %16, %13, %2
%30 = phi i1 [ false, %22 ], [ false, %19 ], [ false, %16 ], [ false, %13 ], [ false, %2 ], [ %28, %26 ]
%31 = zext i1 %30 to i32
%32 = call i32 @__ESBMC_assume(i32 %31)
br label %33
33: ; preds = %37, %29
%34 = load i32, i32* %9
%35 = load i32, i32* %6
%36 = icmp slt i32 %34, %35
br i1 %36, label %37, label %42
37: ; preds = %33
%38 = load i32, i32* %9
%39 = add nsw i32 %38, 1
store i32 %39, i32* %9
%40 = load i32, i32* %10
%41 = add nsw i32 %40, 1
store i32 %41, i32* %10
br label %33
42: ; preds = %33
store i32 0, i32* %9
%43 = load i32, i32* %8
%44 = icmp eq i32 %43, 59
br i1 %44, label %45, label %62
45: ; preds = %42
%46 = load i32, i32* %7
%47 = icmp eq i32 %46, 387
br i1 %47, label %48, label %62
48: ; preds = %45
%49 = load i32, i32* %6
%50 = icmp eq i32 %49, 455
br i1 %50, label %51, label %62
51: ; preds = %48
%52 = load i32, i32* %9
%53 = icmp sle i32 %52, 387
br i1 %53, label %54, label %62
54: ; preds = %51
%55 = load i32, i32* %10
%56 = load i32, i32* %9
%57 = add nsw i32 455, %56
%58 = icmp eq i32 %55, %57
br i1 %58, label %59, label %62
59: ; preds = %54
%60 = load i32, i32* %9
%61 = icmp sge i32 %60, 0
br label %62
62: ; preds = %59, %54, %51, %48, %45, %42
%63 = phi i1 [ false, %54 ], [ false, %51 ], [ false, %48 ], [ false, %45 ], [ false, %42 ], [ %61, %59 ]
%64 = zext i1 %63 to i32
%65 = call i32 @__ESBMC_assume(i32 %64)
br label %66
66: ; preds = %70, %62
%67 = load i32, i32* %9
%68 = load i32, i32* %7
%69 = icmp slt i32 %67, %68
br i1 %69, label %70, label %75
70: ; preds = %66
%71 = load i32, i32* %9
%72 = add nsw i32 %71, 1
store i32 %72, i32* %9
%73 = load i32, i32* %10
%74 = add nsw i32 %73, 1
store i32 %74, i32* %10
br label %66
75: ; preds = %66
store i32 0, i32* %9
%76 = load i32, i32* %8
%77 = icmp eq i32 %76, 59
br i1 %77, label %78, label %95
78: ; preds = %75
%79 = load i32, i32* %7
%80 = icmp eq i32 %79, 387
br i1 %80, label %81, label %95
81: ; preds = %78
%82 = load i32, i32* %6
%83 = icmp eq i32 %82, 455
br i1 %83, label %84, label %95
84: ; preds = %81
%85 = load i32, i32* %9
%86 = icmp sle i32 %85, 59
br i1 %86, label %87, label %95
87: ; preds = %84
%88 = load i32, i32* %10
%89 = load i32, i32* %9
%90 = add nsw i32 842, %89
%91 = icmp eq i32 %88, %90
br i1 %91, label %92, label %95
92: ; preds = %87
%93 = load i32, i32* %9
%94 = icmp sge i32 %93, 0
br label %95
95: ; preds = %92, %87, %84, %81, %78, %75
%96 = phi i1 [ false, %87 ], [ false, %84 ], [ false, %81 ], [ false, %78 ], [ false, %75 ], [ %94, %92 ]
%97 = zext i1 %96 to i32
%98 = call i32 @__ESBMC_assume(i32 %97)
br label %99
99: ; preds = %103, %95
%100 = load i32, i32* %9
%101 = load i32, i32* %8
%102 = icmp slt i32 %100, %101
br i1 %102, label %103, label %108
103: ; preds = %99
%104 = load i32, i32* %9
%105 = add nsw i32 %104, 1
store i32 %105, i32* %9
%106 = load i32, i32* %10
%107 = add nsw i32 %106, 1
store i32 %107, i32* %10
br label %99
108: ; preds = %99
store i32 0, i32* %9
%109 = load i32, i32* %8
%110 = icmp eq i32 %109, 59
br i1 %110, label %111, label %128
111: ; preds = %108
%112 = load i32, i32* %7
%113 = icmp eq i32 %112, 387
br i1 %113, label %114, label %128
114: ; preds = %111
%115 = load i32, i32* %6
%116 = icmp eq i32 %115, 455
br i1 %116, label %117, label %128
117: ; preds = %114
%118 = load i32, i32* %10
%119 = load i32, i32* %9
%120 = sub nsw i32 901, %119
%121 = icmp eq i32 %118, %120
br i1 %121, label %122, label %128
122: ; preds = %117
%123 = load i32, i32* %9
%124 = icmp sge i32 %123, 0
br i1 %124, label %125, label %128
125: ; preds = %122
%126 = load i32, i32* %9
%127 = icmp sle i32 %126, 59
br label %128
128: ; preds = %125, %122, %117, %114, %111, %108
%129 = phi i1 [ false, %122 ], [ false, %117 ], [ false, %114 ], [ false, %111 ], [ false, %108 ], [ %127, %125 ]
%130 = zext i1 %129 to i32
%131 = call i32 @__ESBMC_assume(i32 %130)
br label %132
132: ; preds = %136, %128
%133 = load i32, i32* %9
%134 = load i32, i32* %8
%135 = icmp slt i32 %133, %134
br i1 %135, label %136, label %141
136: ; preds = %132
%137 = load i32, i32* %9
%138 = add nsw i32 %137, 1
store i32 %138, i32* %9
%139 = load i32, i32* %10
%140 = add nsw i32 %139, -1
store i32 %140, i32* %10
br label %132
141: ; preds = %132
store i32 0, i32* %9
%142 = load i32, i32* %8
%143 = icmp eq i32 %142, 59
br i1 %143, label %144, label %161
144: ; preds = %141
%145 = load i32, i32* %7
%146 = icmp eq i32 %145, 387
br i1 %146, label %147, label %161
147: ; preds = %144
%148 = load i32, i32* %6
%149 = icmp eq i32 %148, 455
br i1 %149, label %150, label %161
150: ; preds = %147
%151 = load i32, i32* %10
%152 = load i32, i32* %9
%153 = sub nsw i32 842, %152
%154 = icmp eq i32 %151, %153
br i1 %154, label %155, label %161
155: ; preds = %150
%156 = load i32, i32* %9
%157 = icmp sge i32 %156, 0
br i1 %157, label %158, label %161
158: ; preds = %155
%159 = load i32, i32* %9
%160 = icmp sle i32 %159, 387
br label %161
161: ; preds = %158, %155, %150, %147, %144, %141
%162 = phi i1 [ false, %155 ], [ false, %150 ], [ false, %147 ], [ false, %144 ], [ false, %141 ], [ %160, %158 ]
%163 = zext i1 %162 to i32
%164 = call i32 @__ESBMC_assume(i32 %163)
br label %165
165: ; preds = %169, %161
%166 = load i32, i32* %9
%167 = load i32, i32* %7
%168 = icmp slt i32 %166, %167
br i1 %168, label %169, label %174
169: ; preds = %165
%170 = load i32, i32* %9
%171 = add nsw i32 %170, 1
store i32 %171, i32* %9
%172 = load i32, i32* %10
%173 = add nsw i32 %172, -1
store i32 %173, i32* %10
br label %165
174: ; preds = %165
store i32 0, i32* %9
%175 = load i32, i32* %8
%176 = icmp eq i32 %175, 59
br i1 %176, label %177, label %194
177: ; preds = %174
%178 = load i32, i32* %7
%179 = icmp eq i32 %178, 387
br i1 %179, label %180, label %194
180: ; preds = %177
%181 = load i32, i32* %6
%182 = icmp eq i32 %181, 455
br i1 %182, label %183, label %194
183: ; preds = %180
%184 = load i32, i32* %10
%185 = load i32, i32* %9
%186 = sub nsw i32 455, %185
%187 = icmp eq i32 %184, %186
br i1 %187, label %188, label %194
188: ; preds = %183
%189 = load i32, i32* %9
%190 = icmp sge i32 %189, 0
br i1 %190, label %191, label %194
191: ; preds = %188
%192 = load i32, i32* %9
%193 = icmp sle i32 %192, 455
br label %194
194: ; preds = %191, %188, %183, %180, %177, %174
%195 = phi i1 [ false, %188 ], [ false, %183 ], [ false, %180 ], [ false, %177 ], [ false, %174 ], [ %193, %191 ]
%196 = zext i1 %195 to i32
%197 = call i32 @__ESBMC_assume(i32 %196)
br label %198
198: ; preds = %202, %194
%199 = load i32, i32* %9
%200 = load i32, i32* %6
%201 = icmp slt i32 %199, %200
br i1 %201, label %202, label %211
202: ; preds = %198
%203 = load i32, i32* %10
%204 = icmp sgt i32 %203, 0
%205 = zext i1 %204 to i32
%206 = call i32 @assert(i32 %205)
%207 = load i32, i32* %9
%208 = add nsw i32 %207, 1
store i32 %208, i32* %9
%209 = load i32, i32* %10
%210 = add nsw i32 %209, -1
store i32 %210, i32* %10
br label %198
211: ; preds = %198
ret i32 0
}

LLVM IR (-O2):
define i32 @main(i32 %0, i8** nocapture readnone %1) {
%3 = tail call i32 @__ESBMC_assume(i32 0)
%4 = tail call i32 @__ESBMC_assume(i32 0)
%5 = tail call i32 @__ESBMC_assume(i32 0)
%6 = tail call i32 @__ESBMC_assume(i32 0)
%7 = tail call i32 @__ESBMC_assume(i32 0)
%8 = tail call i32 @__ESBMC_assume(i32 0)
ret i32 0
}