; LLVM IR from guanzhi/GmSSL :: tools (sm4)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%union.anon = type { %struct.SM4_CBC_SM3_HMAC_CTX }
%struct.SM4_CBC_SM3_HMAC_CTX = type { %struct.SM4_CBC_CTX, %struct.SM3_HMAC_CTX, [32 x i8], i64 }
%struct.SM4_CBC_CTX = type { %struct.SM4_KEY, [16 x i8], [16 x i8], i64 }
%struct.SM4_KEY = type { [32 x i32] }
%struct.SM3_HMAC_CTX = type { %struct.SM3_CTX, [64 x i8] }
%struct.SM3_CTX = type { [8 x i32], i64, [64 x i8], i64 }

@stdin = external global ptr, align 8
@stdout = external global ptr, align 8
@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [14 x i8], align 1
@usage = external hidden global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@options = external hidden global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [59 x i8], align 1
@__FUNCTION__.sm4_main = external hidden unnamed_addr constant [9 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [92 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.43 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.45 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [47 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @sm4_main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca [48 x i8], align 16
  %16 = alloca [64 x i8], align 16
  %17 = alloca i64, align 8
  %18 = alloca i64, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca i32, align 4
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca %union.anon, align 8
  %25 = alloca [4096 x i8], align 16
  %26 = alloca i64, align 8
  %27 = alloca [41960 x i8], align 16
  %28 = alloca i64, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #8
  store i32 1, ptr %6, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #8
  %32 = load ptr, ptr %5, align 8, !tbaa !9
  %33 = getelementptr inbounds ptr, ptr %32, i64 0
  %34 = load ptr, ptr %33, align 8, !tbaa !9
  store ptr %34, ptr %7, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #8
  store ptr null, ptr %8, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #8
  store ptr null, ptr %9, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  store ptr null, ptr %10, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  store ptr null, ptr %11, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  store i64 0, ptr %12, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  store ptr null, ptr %13, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  store ptr null, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 64, ptr %16) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  store i64 0, ptr %17, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  store i64 0, ptr %18, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %35 = load ptr, ptr @stdin, align 8, !tbaa !9
  store ptr %35, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %36 = load ptr, ptr @stdout, align 8, !tbaa !9
  store ptr %36, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #8
  store i32 0, ptr %21, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 -1, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.start.p0(i64 384, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 4096, ptr %25) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.start.p0(i64 41960, ptr %27) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #8
  store i32 -1, ptr %29, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #8
  store i32 0, ptr %30, align 4, !tbaa !5
  %37 = load i32, ptr %4, align 4, !tbaa !5
  %38 = add nsw i32 %37, -1
  store i32 %38, ptr %4, align 4, !tbaa !5
  %39 = load ptr, ptr %5, align 8, !tbaa !9
  %40 = getelementptr inbounds ptr, ptr %39, i32 1
  store ptr %40, ptr %5, align 8, !tbaa !9
  %41 = load i32, ptr %4, align 4, !tbaa !5
  %42 = icmp slt i32 %41, 1
  br i1 %42, label %43, label %48

43:                                               ; preds = %2
  %44 = load ptr, ptr @stderr, align 8, !tbaa !9
  %45 = load ptr, ptr %7, align 8, !tbaa !9
  %46 = load ptr, ptr @usage, align 8, !tbaa !9
  %47 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %44, ptr noundef @.str, ptr noundef %45, ptr noundef %46) #8
  store i32 1, ptr %3, align 4
  store i32 1, ptr %31, align 4
  br label %900

48:                                               ; preds = %2
  br label %49

49:                                               ; preds = %456, %48
  %50 = load i32, ptr %4, align 4, !tbaa !5
  %51 = icmp sgt i32 %50, 0
  br i1 %51, label %52, label %461

52:                                               ; preds = %49
  %53 = load ptr, ptr %5, align 8, !tbaa !9
  %54 = load ptr, ptr %53, align 8, !tbaa !9
  %55 = call i32 @strcmp(ptr noundef %54, ptr noundef @.str.1) #9
  %56 = icmp ne i32 %55, 0
  br i1 %56, label %63, label %57

57:                                               ; preds = %52
  %58 = load ptr, ptr %7, align 8, !tbaa !9
  %59 = load ptr, ptr @usage, align 8, !tbaa !9
  %60 = call i32 (ptr, ...) @printf(ptr noundef @.str, ptr noundef %58, ptr noundef %59)
  %61 = load ptr, ptr @options, align 8, !tbaa !9
  %62 = call i32 (ptr, ...) @printf(ptr noundef @.str.2, ptr noundef %61)
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %869

63:                                               ; preds = %52
  %64 = load ptr, ptr %5, align 8, !tbaa !9
  %65 = load ptr, ptr %64, align 8, !tbaa !9
  %66 = call i32 @strcmp(ptr noundef %65, ptr noundef @.str.3) #9
  %67 = icmp ne i32 %66, 0
  br i1 %67, label %96, label %68

68:                                               ; preds = %63
  %69 = load i32, ptr %4, align 4, !tbaa !5
  %70 = add nsw i32 %69, -1
  store i32 %70, ptr %4, align 4, !tbaa !5
  %71 = icmp slt i32 %70, 1
  br i1 %71, label %72, label %73

72:                                               ; preds = %68
  br label %430

73:                                               ; preds = %68
  %74 = load ptr, ptr %5, align 8, !tbaa !9
  %75 = getelementptr inbounds ptr, ptr %74, i32 1
  store ptr %75, ptr %5, align 8, !tbaa !9
  %76 = load ptr, ptr %75, align 8, !tbaa !9
  store ptr %76, ptr %8, align 8, !tbaa !9
  %77 = load ptr, ptr %8, align 8, !tbaa !9
  %78 = call i64 @strlen(ptr noundef %77) #9
  %79 = icmp ugt i64 %78, 96
  br i1 %79, label %80, label %84

80:                                               ; preds = %73
  %81 = load ptr, ptr @stderr, align 8, !tbaa !9
  %82 = load ptr, ptr %7, align 8, !tbaa !9
  %83 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %81, ptr noundef @.str.4, ptr noundef %82) #8
  br label %869

84:                                               ; preds = %73
  %85 = load ptr, ptr %8, align 8, !tbaa !9
  %86 = load ptr, ptr %8, align 8, !tbaa !9
  %87 = call i64 @strlen(ptr noundef %86) #9
  %88 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %89 = call i32 @hex_to_bytes(ptr noundef %85, i64 noundef %87, ptr noundef %88, ptr noundef %17)
  %90 = icmp ne i32 %89, 1
  br i1 %90, label %91, label %95

91:                                               ; preds = %84
  %92 = load ptr, ptr @stderr, align 8, !tbaa !9
  %93 = load ptr, ptr %7, align 8, !tbaa !9
  %94 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %92, ptr noundef @.str.5, ptr noundef %93) #8
  br label %869

95:                                               ; preds = %84
  br label %455

96:                                               ; preds = %63
  %97 = load ptr, ptr %5, align 8, !tbaa !9
  %98 = load ptr, ptr %97, align 8, !tbaa !9
  %99 = call i32 @strcmp(ptr noundef %98, ptr noundef @.str.6) #9
  %100 = icmp ne i32 %99, 0
  br i1 %100, label %129, label %101

101:                                              ; preds = %96
  %102 = load i32, ptr %4, align 4, !tbaa !5
  %103 = add nsw i32 %102, -1
  store i32 %103, ptr %4, align 4, !tbaa !5
  %104 = icmp slt i32 %103, 1
  br i1 %104, label %105, label %106

105:                                              ; preds = %101
  br label %430

106:                                              ; preds = %101
  %107 = load ptr, ptr %5, align 8, !tbaa !9
  %108 = getelementptr inbounds ptr, ptr %107, i32 1
  store ptr %108, ptr %5, align 8, !tbaa !9
  %109 = load ptr, ptr %108, align 8, !tbaa !9
  store ptr %109, ptr %9, align 8, !tbaa !9
  %110 = load ptr, ptr %9, align 8, !tbaa !9
  %111 = call i64 @strlen(ptr noundef %110) #9
  %112 = icmp ugt i64 %111, 128
  br i1 %112, label %113, label %117

113:                                              ; preds = %106
  %114 = load ptr, ptr @stderr, align 8, !tbaa !9
  %115 = load ptr, ptr %7, align 8, !tbaa !9
  %116 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %114, ptr noundef @.str.7, ptr noundef %115) #8
  br label %869

117:                                              ; preds = %106
  %118 = load ptr, ptr %9, align 8, !tbaa !9
  %119 = load ptr, ptr %9, align 8, !tbaa !9
  %120 = call i64 @strlen(ptr noundef %119) #9
  %121 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %122 = call i32 @hex_to_bytes(ptr noundef %118, i64 noundef %120, ptr noundef %121, ptr noundef %18)
  %123 = icmp ne i32 %122, 1
  br i1 %123, label %124, label %128

124:                                              ; preds = %117
  %125 = load ptr, ptr @stderr, align 8, !tbaa !9
  %126 = load ptr, ptr %7, align 8, !tbaa !9
  %127 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %125, ptr noundef @.str.8, ptr noundef %126) #8
  br label %869

128:                                              ; preds = %117
  br label %454

129:                                              ; preds = %96
  %130 = load ptr, ptr %5, align 8, !tbaa !9
  %131 = load ptr, ptr %130, align 8, !tbaa !9
  %132 = call i32 @strcmp(ptr noundef %131, ptr noundef @.str.9) #9
  %133 = icmp ne i32 %132, 0
  br i1 %133, label %142, label %134

134:                                              ; preds = %129
  %135 = load i32, ptr %22, align 4, !tbaa !5
  %136 = icmp eq i32 %135, 0
  br i1 %136, label %137, label %141

137:                                              ; preds = %134
  %138 = load ptr, ptr @stderr, align 8, !tbaa !9
  %139 = load ptr, ptr %7, align 8, !tbaa !9
  %140 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %138, ptr noundef @.str.10, ptr noundef %139) #8
  br label %869

141:                                              ; preds = %134
  store i32 1, ptr %22, align 4, !tbaa !5
  br label %453

142:                                              ; preds = %129
  %143 = load ptr, ptr %5, align 8, !tbaa !9
  %144 = load ptr, ptr %143, align 8, !tbaa !9
  %145 = call i32 @strcmp(ptr noundef %144, ptr noundef @.str.11) #9
  %146 = icmp ne i32 %145, 0
  br i1 %146, label %155, label %147

147:                                              ; preds = %142
  %148 = load i32, ptr %22, align 4, !tbaa !5
  %149 = icmp eq i32 %148, 1
  br i1 %149, label %150, label %154

150:                                              ; preds = %147
  %151 = load ptr, ptr @stderr, align 8, !tbaa !9
  %152 = load ptr, ptr %7, align 8, !tbaa !9
  %153 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %151, ptr noundef @.str.10, ptr noundef %152) #8
  br label %869

154:                                              ; preds = %147
  store i32 0, ptr %22, align 4, !tbaa !5
  br label %452

155:                                              ; preds = %142
  %156 = load ptr, ptr %5, align 8, !tbaa !9
  %157 = load ptr, ptr %156, align 8, !tbaa !9
  %158 = call i32 @strcmp(ptr noundef %157, ptr noundef @.str.12) #9
  %159 = icmp ne i32 %158, 0
  br i1 %159, label %165, label %160

160:                                              ; preds = %155
  %161 = load i32, ptr %21, align 4, !tbaa !5
  %162 = icmp ne i32 %161, 0
  br i1 %162, label %163, label %164

163:                                              ; preds = %160
  br label %430

164:                                              ; preds = %160
  store i32 2, ptr %21, align 4, !tbaa !5
  br label %451

165:                                              ; preds = %155
  %166 = load ptr, ptr %5, align 8, !tbaa !9
  %167 = load ptr, ptr %166, align 8, !tbaa !9
  %168 = call i32 @strcmp(ptr noundef %167, ptr noundef @.str.13) #9
  %169 = icmp ne i32 %168, 0
  br i1 %169, label %175, label %170

170:                                              ; preds = %165
  %171 = load i32, ptr %21, align 4, !tbaa !5
  %172 = icmp ne i32 %171, 0
  br i1 %172, label %173, label %174

173:                                              ; preds = %170
  br label %430

174:                                              ; preds = %170
  store i32 5, ptr %21, align 4, !tbaa !5
  br label %450

175:                                              ; preds = %165
  %176 = load ptr, ptr %5, align 8, !tbaa !9
  %177 = load ptr, ptr %176, align 8, !tbaa !9
  %178 = call i32 @strcmp(ptr noundef %177, ptr noundef @.str.14) #9
  %179 = icmp ne i32 %178, 0
  br i1 %179, label %185, label %180

180:                                              ; preds = %175
  %181 = load i32, ptr %21, align 4, !tbaa !5
  %182 = icmp ne i32 %181, 0
  br i1 %182, label %183, label %184

183:                                              ; preds = %180
  br label %430

184:                                              ; preds = %180
  store i32 9, ptr %21, align 4, !tbaa !5
  br label %449

185:                                              ; preds = %175
  %186 = load ptr, ptr %5, align 8, !tbaa !9
  %187 = load ptr, ptr %186, align 8, !tbaa !9
  %188 = call i32 @strcmp(ptr noundef %187, ptr noundef @.str.15) #9
  %189 = icmp ne i32 %188, 0
  br i1 %189, label %195, label %190

190:                                              ; preds = %185
  %191 = load i32, ptr %21, align 4, !tbaa !5
  %192 = icmp ne i32 %191, 0
  br i1 %192, label %193, label %194

193:                                              ; preds = %190
  br label %430

194:                                              ; preds = %190
  store i32 10, ptr %21, align 4, !tbaa !5
  br label %448

195:                                              ; preds = %185
  %196 = load ptr, ptr %5, align 8, !tbaa !9
  %197 = load ptr, ptr %196, align 8, !tbaa !9
  %198 = call i32 @strcmp(ptr noundef %197, ptr noundef @.str.16) #9
  %199 = icmp ne i32 %198, 0
  br i1 %199, label %205, label %200

200:                                              ; preds = %195
  %201 = load i32, ptr %21, align 4, !tbaa !5
  %202 = icmp ne i32 %201, 0
  br i1 %202, label %203, label %204

203:                                              ; preds = %200
  br label %430

204:                                              ; preds = %200
  store i32 8, ptr %21, align 4, !tbaa !5
  br label %447

205:                                              ; preds = %195
  %206 = load ptr, ptr %5, align 8, !tbaa !9
  %207 = load ptr, ptr %206, align 8, !tbaa !9
  %208 = call i32 @strcmp(ptr noundef %207, ptr noundef @.str.17) #9
  %209 = icmp ne i32 %208, 0
  br i1 %209, label %215, label %210

210:                                              ; preds = %205
  %211 = load i32, ptr %21, align 4, !tbaa !5
  %212 = icmp ne i32 %211, 0
  br i1 %212, label %213, label %214

213:                                              ; preds = %210
  br label %430

214:                                              ; preds = %210
  store i32 1, ptr %21, align 4, !tbaa !5
  br label %446

215:                                              ; preds = %205
  %216 = load ptr, ptr %5, align 8, !tbaa !9
  %217 = load ptr, ptr %216, align 8, !tbaa !9
  %218 = call i32 @strcmp(ptr noundef %217, ptr noundef @.str.18) #9
  %219 = icmp ne i32 %218, 0
  br i1 %219, label %225, label %220

220:                                              ; preds = %215
  %221 = load i32, ptr %21, align 4, !tbaa !5
  %222 = icmp ne i32 %221, 0
  br i1 %222, label %223, label %224

223:                                              ; preds = %220
  br label %430

224:                                              ; preds = %220
  store i32 3, ptr %21, align 4, !tbaa !5
  br label %445

225:                                              ; preds = %215
  %226 = load ptr, ptr %5, align 8, !tbaa !9
  %227 = load ptr, ptr %226, align 8, !tbaa !9
  %228 = call i32 @strcmp(ptr noundef %227, ptr noundef @.str.19) #9
  %229 = icmp ne i32 %228, 0
  br i1 %229, label %235, label %230

230:                                              ; preds = %225
  %231 = load i32, ptr %21, align 4, !tbaa !5
  %232 = icmp ne i32 %231, 0
  br i1 %232, label %233, label %234

233:                                              ; preds = %230
  br label %430

234:                                              ; preds = %230
  store i32 4, ptr %21, align 4, !tbaa !5
  br label %444

235:                                              ; preds = %225
  %236 = load ptr, ptr %5, align 8, !tbaa !9
  %237 = load ptr, ptr %236, align 8, !tbaa !9
  %238 = call i32 @strcmp(ptr noundef %237, ptr noundef @.str.20) #9
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %245, label %240

240:                                              ; preds = %235
  %241 = load i32, ptr %21, align 4, !tbaa !5
  %242 = icmp ne i32 %241, 0
  br i1 %242, label %243, label %244

243:                                              ; preds = %240
  br label %430

244:                                              ; preds = %240
  store i32 7, ptr %21, align 4, !tbaa !5
  br label %443

245:                                              ; preds = %235
  %246 = load ptr, ptr %5, align 8, !tbaa !9
  %247 = load ptr, ptr %246, align 8, !tbaa !9
  %248 = call i32 @strcmp(ptr noundef %247, ptr noundef @.str.21) #9
  %249 = icmp ne i32 %248, 0
  br i1 %249, label %255, label %250

250:                                              ; preds = %245
  %251 = load i32, ptr %21, align 4, !tbaa !5
  %252 = icmp ne i32 %251, 0
  br i1 %252, label %253, label %254

253:                                              ; preds = %250
  br label %430

254:                                              ; preds = %250
  store i32 6, ptr %21, align 4, !tbaa !5
  br label %442

255:                                              ; preds = %245
  %256 = load ptr, ptr %5, align 8, !tbaa !9
  %257 = load ptr, ptr %256, align 8, !tbaa !9
  %258 = call i32 @strcmp(ptr noundef %257, ptr noundef @.str.22) #9
  %259 = icmp ne i32 %258, 0
  br i1 %259, label %278, label %260

260:                                              ; preds = %255
  %261 = load i32, ptr %4, align 4, !tbaa !5
  %262 = add nsw i32 %261, -1
  store i32 %262, ptr %4, align 4, !tbaa !5
  %263 = icmp slt i32 %262, 1
  br i1 %263, label %264, label %265

264:                                              ; preds = %260
  br label %430

265:                                              ; preds = %260
  %266 = load ptr, ptr %10, align 8, !tbaa !9
  %267 = icmp ne ptr %266, null
  br i1 %267, label %268, label %272

268:                                              ; preds = %265
  %269 = load ptr, ptr @stderr, align 8, !tbaa !9
  %270 = load ptr, ptr %7, align 8, !tbaa !9
  %271 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %269, ptr noundef @.str.23, ptr noundef %270) #8
  br label %430

272:                                              ; preds = %265
  %273 = load ptr, ptr %5, align 8, !tbaa !9
  %274 = getelementptr inbounds ptr, ptr %273, i32 1
  store ptr %274, ptr %5, align 8, !tbaa !9
  %275 = load ptr, ptr %274, align 8, !tbaa !9
  store ptr %275, ptr %10, align 8, !tbaa !9
  %276 = load ptr, ptr %10, align 8, !tbaa !9
  %277 = call i64 @strlen(ptr noundef %276) #9
  store i64 %277, ptr %12, align 8, !tbaa !11
  br label %441

278:                                              ; preds = %255
  %279 = load ptr, ptr %5, align 8, !tbaa !9
  %280 = load ptr, ptr %279, align 8, !tbaa !9
  %281 = call i32 @strcmp(ptr noundef %280, ptr noundef @.str.24) #9
  %282 = icmp ne i32 %281, 0
  br i1 %282, label %322, label %283

283:                                              ; preds = %278
  %284 = load i32, ptr %4, align 4, !tbaa !5
  %285 = add nsw i32 %284, -1
  store i32 %285, ptr %4, align 4, !tbaa !5
  %286 = icmp slt i32 %285, 1
  br i1 %286, label %287, label %288

287:                                              ; preds = %283
  br label %430

288:                                              ; preds = %283
  %289 = load ptr, ptr %10, align 8, !tbaa !9
  %290 = icmp ne ptr %289, null
  br i1 %290, label %291, label %295

291:                                              ; preds = %288
  %292 = load ptr, ptr @stderr, align 8, !tbaa !9
  %293 = load ptr, ptr %7, align 8, !tbaa !9
  %294 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %292, ptr noundef @.str.23, ptr noundef %293) #8
  br label %430

295:                                              ; preds = %288
  %296 = load ptr, ptr %5, align 8, !tbaa !9
  %297 = getelementptr inbounds ptr, ptr %296, i32 1
  store ptr %297, ptr %5, align 8, !tbaa !9
  %298 = load ptr, ptr %297, align 8, !tbaa !9
  store ptr %298, ptr %10, align 8, !tbaa !9
  %299 = load ptr, ptr %10, align 8, !tbaa !9
  %300 = call i64 @strlen(ptr noundef %299) #9
  %301 = udiv i64 %300, 2
  %302 = add i64 %301, 1
  %303 = call noalias ptr @malloc(i64 noundef %302) #10
  store ptr %303, ptr %11, align 8, !tbaa !9
  %304 = icmp ne ptr %303, null
  br i1 %304, label %309, label %305

305:                                              ; preds = %295
  %306 = load ptr, ptr @stderr, align 8, !tbaa !9
  %307 = load ptr, ptr %7, align 8, !tbaa !9
  %308 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %306, ptr noundef @.str.25, ptr noundef %307) #8
  br label %869

309:                                              ; preds = %295
  %310 = load ptr, ptr %10, align 8, !tbaa !9
  %311 = load ptr, ptr %10, align 8, !tbaa !9
  %312 = call i64 @strlen(ptr noundef %311) #9
  %313 = load ptr, ptr %11, align 8, !tbaa !9
  %314 = call i32 @hex_to_bytes(ptr noundef %310, i64 noundef %312, ptr noundef %313, ptr noundef %12)
  %315 = icmp ne i32 %314, 1
  br i1 %315, label %316, label %320

316:                                              ; preds = %309
  %317 = load ptr, ptr @stderr, align 8, !tbaa !9
  %318 = load ptr, ptr %7, align 8, !tbaa !9
  %319 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %317, ptr noundef @.str.26, ptr noundef %318) #8
  br label %869

320:                                              ; preds = %309
  %321 = load ptr, ptr %11, align 8, !tbaa !9
  store ptr %321, ptr %10, align 8, !tbaa !9
  br label %440

322:                                              ; preds = %278
  %323 = load ptr, ptr %5, align 8, !tbaa !9
  %324 = load ptr, ptr %323, align 8, !tbaa !9
  %325 = call i32 @strcmp(ptr noundef %324, ptr noundef @.str.27) #9
  %326 = icmp ne i32 %325, 0
  br i1 %326, label %347, label %327

327:                                              ; preds = %322
  %328 = load i32, ptr %4, align 4, !tbaa !5
  %329 = add nsw i32 %328, -1
  store i32 %329, ptr %4, align 4, !tbaa !5
  %330 = icmp slt i32 %329, 1
  br i1 %330, label %331, label %332

331:                                              ; preds = %327
  br label %430

332:                                              ; preds = %327
  %333 = load ptr, ptr %5, align 8, !tbaa !9
  %334 = getelementptr inbounds ptr, ptr %333, i32 1
  store ptr %334, ptr %5, align 8, !tbaa !9
  %335 = load ptr, ptr %334, align 8, !tbaa !9
  %336 = call i32 @atoi(ptr noundef %335) #9
  store i32 %336, ptr %29, align 4, !tbaa !5
  %337 = load i32, ptr %29, align 4, !tbaa !5
  %338 = icmp slt i32 %337, 0
  br i1 %338, label %342, label %339

339:                                              ; preds = %332
  %340 = load i32, ptr %29, align 4, !tbaa !5
  %341 = icmp sgt i32 %340, 32
  br i1 %341, label %342, label %346

342:                                              ; preds = %339, %332
  %343 = load ptr, ptr @stderr, align 8, !tbaa !9
  %344 = load ptr, ptr %7, align 8, !tbaa !9
  %345 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %343, ptr noundef @.str.28, ptr noundef %344) #8
  br label %869

346:                                              ; preds = %339
  br label %439

347:                                              ; preds = %322
  %348 = load ptr, ptr %5, align 8, !tbaa !9
  %349 = load ptr, ptr %348, align 8, !tbaa !9
  %350 = call i32 @strcmp(ptr noundef %349, ptr noundef @.str.29) #9
  %351 = icmp ne i32 %350, 0
  br i1 %351, label %372, label %352

352:                                              ; preds = %347
  %353 = load i32, ptr %4, align 4, !tbaa !5
  %354 = add nsw i32 %353, -1
  store i32 %354, ptr %4, align 4, !tbaa !5
  %355 = icmp slt i32 %354, 1
  br i1 %355, label %356, label %357

356:                                              ; preds = %352
  br label %430

357:                                              ; preds = %352
  %358 = load ptr, ptr %5, align 8, !tbaa !9
  %359 = getelementptr inbounds ptr, ptr %358, i32 1
  store ptr %359, ptr %5, align 8, !tbaa !9
  %360 = load ptr, ptr %359, align 8, !tbaa !9
  %361 = call i32 @atoi(ptr noundef %360) #9
  store i32 %361, ptr %30, align 4, !tbaa !5
  %362 = load i32, ptr %30, align 4, !tbaa !5
  %363 = sext i32 %362 to i64
  %364 = icmp ugt i64 %363, 40936
  br i1 %364, label %365, label %371

365:                                              ; preds = %357
  br label %366

366:                                              ; preds = %365
  %367 = load ptr, ptr @stderr, align 8, !tbaa !9
  %368 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %367, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 391, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %369

369:                                              ; preds = %366
  br label %370

370:                                              ; preds = %369
  br label %869

371:                                              ; preds = %357
  br label %438

372:                                              ; preds = %347
  %373 = load ptr, ptr %5, align 8, !tbaa !9
  %374 = load ptr, ptr %373, align 8, !tbaa !9
  %375 = call i32 @strcmp(ptr noundef %374, ptr noundef @.str.32) #9
  %376 = icmp ne i32 %375, 0
  br i1 %376, label %398, label %377

377:                                              ; preds = %372
  %378 = load i32, ptr %4, align 4, !tbaa !5
  %379 = add nsw i32 %378, -1
  store i32 %379, ptr %4, align 4, !tbaa !5
  %380 = icmp slt i32 %379, 1
  br i1 %380, label %381, label %382

381:                                              ; preds = %377
  br label %430

382:                                              ; preds = %377
  %383 = load ptr, ptr %5, align 8, !tbaa !9
  %384 = getelementptr inbounds ptr, ptr %383, i32 1
  store ptr %384, ptr %5, align 8, !tbaa !9
  %385 = load ptr, ptr %384, align 8, !tbaa !9
  store ptr %385, ptr %13, align 8, !tbaa !9
  %386 = load ptr, ptr %13, align 8, !tbaa !9
  %387 = call noalias ptr @fopen(ptr noundef %386, ptr noundef @.str.33)
  store ptr %387, ptr %19, align 8, !tbaa !9
  %388 = icmp ne ptr %387, null
  br i1 %388, label %397, label %389

389:                                              ; preds = %382
  %390 = load ptr, ptr @stderr, align 8, !tbaa !9
  %391 = load ptr, ptr %7, align 8, !tbaa !9
  %392 = load ptr, ptr %13, align 8, !tbaa !9
  %393 = call ptr @__errno_location() #11
  %394 = load i32, ptr %393, align 4, !tbaa !5
  %395 = call ptr @strerror(i32 noundef %394) #8
  %396 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %390, ptr noundef @.str.34, ptr noundef %391, ptr noundef %392, ptr noundef %395) #8
  br label %869

397:                                              ; preds = %382
  br label %437

398:                                              ; preds = %372
  %399 = load ptr, ptr %5, align 8, !tbaa !9
  %400 = load ptr, ptr %399, align 8, !tbaa !9
  %401 = call i32 @strcmp(ptr noundef %400, ptr noundef @.str.35) #9
  %402 = icmp ne i32 %401, 0
  br i1 %402, label %424, label %403

403:                                              ; preds = %398
  %404 = load i32, ptr %4, align 4, !tbaa !5
  %405 = add nsw i32 %404, -1
  store i32 %405, ptr %4, align 4, !tbaa !5
  %406 = icmp slt i32 %405, 1
  br i1 %406, label %407, label %408

407:                                              ; preds = %403
  br label %430

408:                                              ; preds = %403
  %409 = load ptr, ptr %5, align 8, !tbaa !9
  %410 = getelementptr inbounds ptr, ptr %409, i32 1
  store ptr %410, ptr %5, align 8, !tbaa !9
  %411 = load ptr, ptr %410, align 8, !tbaa !9
  store ptr %411, ptr %14, align 8, !tbaa !9
  %412 = load ptr, ptr %14, align 8, !tbaa !9
  %413 = call noalias ptr @fopen(ptr noundef %412, ptr noundef @.str.36)
  store ptr %413, ptr %20, align 8, !tbaa !9
  %414 = icmp ne ptr %413, null
  br i1 %414, label %423, label %415

415:                                              ; preds = %408
  %416 = load ptr, ptr @stderr, align 8, !tbaa !9
  %417 = load ptr, ptr %7, align 8, !tbaa !9
  %418 = load ptr, ptr %14, align 8, !tbaa !9
  %419 = call ptr @__errno_location() #11
  %420 = load i32, ptr %419, align 4, !tbaa !5
  %421 = call ptr @strerror(i32 noundef %420) #8
  %422 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %416, ptr noundef @.str.34, ptr noundef %417, ptr noundef %418, ptr noundef %421) #8
  br label %869

423:                                              ; preds = %408
  br label %436

424:                                              ; preds = %398
  %425 = load ptr, ptr @stderr, align 8, !tbaa !9
  %426 = load ptr, ptr %7, align 8, !tbaa !9
  %427 = load ptr, ptr %5, align 8, !tbaa !9
  %428 = load ptr, ptr %427, align 8, !tbaa !9
  %429 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %425, ptr noundef @.str.37, ptr noundef %426, ptr noundef %428) #8
  br label %869

430:                                              ; preds = %407, %381, %356, %331, %291, %287, %268, %264, %253, %243, %233, %223, %213, %203, %193, %183, %173, %163, %105, %72
  %431 = load ptr, ptr @stderr, align 8, !tbaa !9
  %432 = load ptr, ptr %7, align 8, !tbaa !9
  %433 = load ptr, ptr %5, align 8, !tbaa !9
  %434 = load ptr, ptr %433, align 8, !tbaa !9
  %435 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %431, ptr noundef @.str.38, ptr noundef %432, ptr noundef %434) #8
  br label %869

436:                                              ; preds = %423
  br label %437

437:                                              ; preds = %436, %397
  br label %438

438:                                              ; preds = %437, %371
  br label %439

439:                                              ; preds = %438, %346
  br label %440

440:                                              ; preds = %439, %320
  br label %441

441:                                              ; preds = %440, %272
  br label %442

442:                                              ; preds = %441, %254
  br label %443

443:                                              ; preds = %442, %244
  br label %444

444:                                              ; preds = %443, %234
  br label %445

445:                                              ; preds = %444, %224
  br label %446

446:                                              ; preds = %445, %214
  br label %447

447:                                              ; preds = %446, %204
  br label %448

448:                                              ; preds = %447, %194
  br label %449

449:                                              ; preds = %448, %184
  br label %450

450:                                              ; preds = %449, %174
  br label %451

451:                                              ; preds = %450, %164
  br label %452

452:                                              ; preds = %451, %154
  br label %453

453:                                              ; preds = %452, %141
  br label %454

454:                                              ; preds = %453, %128
  br label %455

455:                                              ; preds = %454, %95
  br label %456

456:                                              ; preds = %455
  %457 = load i32, ptr %4, align 4, !tbaa !5
  %458 = add nsw i32 %457, -1
  store i32 %458, ptr %4, align 4, !tbaa !5
  %459 = load ptr, ptr %5, align 8, !tbaa !9
  %460 = getelementptr inbounds ptr, ptr %459, i32 1
  store ptr %460, ptr %5, align 8, !tbaa !9
  br label %49, !llvm.loop !13

461:                                              ; preds = %49
  %462 = load i32, ptr %21, align 4, !tbaa !5
  %463 = icmp ne i32 %462, 0
  br i1 %463, label %468, label %464

464:                                              ; preds = %461
  %465 = load ptr, ptr @stderr, align 8, !tbaa !9
  %466 = load ptr, ptr %7, align 8, !tbaa !9
  %467 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %465, ptr noundef @.str.39, ptr noundef %466) #8
  br label %869

468:                                              ; preds = %461
  %469 = load ptr, ptr %8, align 8, !tbaa !9
  %470 = icmp ne ptr %469, null
  br i1 %470, label %475, label %471

471:                                              ; preds = %468
  %472 = load ptr, ptr @stderr, align 8, !tbaa !9
  %473 = load ptr, ptr %7, align 8, !tbaa !9
  %474 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %472, ptr noundef @.str.40, ptr noundef %473) #8
  br label %869

475:                                              ; preds = %468
  %476 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %476, label %478 [
    i32 2, label %477
    i32 5, label %477
    i32 8, label %477
    i32 9, label %477
    i32 10, label %477
  ]

477:                                              ; preds = %475, %475, %475, %475, %475
  br label %482

478:                                              ; preds = %475
  %479 = load ptr, ptr @stderr, align 8, !tbaa !9
  %480 = load ptr, ptr %7, align 8, !tbaa !9
  %481 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %479, ptr noundef @.str.41, ptr noundef %480) #8
  br label %869

482:                                              ; preds = %477
  %483 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %483, label %508 [
    i32 1, label %484
    i32 2, label %484
    i32 3, label %484
    i32 4, label %484
    i32 5, label %484
    i32 7, label %484
    i32 8, label %484
    i32 6, label %492
    i32 9, label %500
    i32 10, label %500
  ]

484:                                              ; preds = %482, %482, %482, %482, %482, %482, %482
  %485 = load i64, ptr %17, align 8, !tbaa !11
  %486 = icmp ne i64 %485, 16
  br i1 %486, label %487, label %491

487:                                              ; preds = %484
  %488 = load ptr, ptr @stderr, align 8, !tbaa !9
  %489 = load ptr, ptr %7, align 8, !tbaa !9
  %490 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %488, ptr noundef @.str.42, ptr noundef %489) #8
  br label %869

491:                                              ; preds = %484
  br label %508

492:                                              ; preds = %482
  %493 = load i64, ptr %17, align 8, !tbaa !11
  %494 = icmp ne i64 %493, 32
  br i1 %494, label %495, label %499

495:                                              ; preds = %492
  %496 = load ptr, ptr @stderr, align 8, !tbaa !9
  %497 = load ptr, ptr %7, align 8, !tbaa !9
  %498 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %496, ptr noundef @.str.43, ptr noundef %497) #8
  br label %869

499:                                              ; preds = %492
  br label %508

500:                                              ; preds = %482, %482
  %501 = load i64, ptr %17, align 8, !tbaa !11
  %502 = icmp ne i64 %501, 48
  br i1 %502, label %503, label %507

503:                                              ; preds = %500
  %504 = load ptr, ptr @stderr, align 8, !tbaa !9
  %505 = load ptr, ptr %7, align 8, !tbaa !9
  %506 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %504, ptr noundef @.str.44, ptr noundef %505) #8
  br label %869

507:                                              ; preds = %500
  br label %508

508:                                              ; preds = %507, %499, %491, %482
  %509 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %509, label %526 [
    i32 1, label %510
    i32 2, label %518
    i32 3, label %518
    i32 4, label %518
    i32 5, label %518
    i32 9, label %518
    i32 10, label %518
  ]

510:                                              ; preds = %508
  %511 = load i64, ptr %18, align 8, !tbaa !11
  %512 = icmp ne i64 %511, 0
  br i1 %512, label %513, label %517

513:                                              ; preds = %510
  %514 = load ptr, ptr @stderr, align 8, !tbaa !9
  %515 = load ptr, ptr %7, align 8, !tbaa !9
  %516 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %514, ptr noundef @.str.45, ptr noundef %515) #8
  br label %869

517:                                              ; preds = %510
  br label %526

518:                                              ; preds = %508, %508, %508, %508, %508, %508
  %519 = load i64, ptr %18, align 8, !tbaa !11
  %520 = icmp ne i64 %519, 16
  br i1 %520, label %521, label %525

521:                                              ; preds = %518
  %522 = load ptr, ptr @stderr, align 8, !tbaa !9
  %523 = load ptr, ptr %7, align 8, !tbaa !9
  %524 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %522, ptr noundef @.str.46, ptr noundef %523) #8
  br label %869

525:                                              ; preds = %518
  br label %526

526:                                              ; preds = %525, %517, %508
  %527 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %527, label %536 [
    i32 1, label %528
    i32 2, label %528
    i32 3, label %528
    i32 4, label %528
    i32 5, label %528
    i32 6, label %528
  ]

528:                                              ; preds = %526, %526, %526, %526, %526, %526
  %529 = load ptr, ptr %10, align 8, !tbaa !9
  %530 = icmp ne ptr %529, null
  br i1 %530, label %531, label %535

531:                                              ; preds = %528
  %532 = load ptr, ptr @stderr, align 8, !tbaa !9
  %533 = load ptr, ptr %7, align 8, !tbaa !9
  %534 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %532, ptr noundef @.str.47, ptr noundef %533) #8
  br label %869

535:                                              ; preds = %528
  br label %536

536:                                              ; preds = %535, %526
  %537 = load i32, ptr %21, align 4, !tbaa !5
  %538 = icmp eq i32 %537, 5
  br i1 %538, label %539, label %608

539:                                              ; preds = %536
  %540 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %541 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %542 = call i32 @sm4_ctr_encrypt_init(ptr noundef %24, ptr noundef %540, ptr noundef %541)
  %543 = icmp ne i32 %542, 1
  br i1 %543, label %544, label %550

544:                                              ; preds = %539
  br label %545

545:                                              ; preds = %544
  %546 = load ptr, ptr @stderr, align 8, !tbaa !9
  %547 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %546, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 532, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %548

548:                                              ; preds = %545
  br label %549

549:                                              ; preds = %548
  br label %869

550:                                              ; preds = %539
  br label %551

551:                                              ; preds = %582, %550
  %552 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %553 = load ptr, ptr %19, align 8, !tbaa !9
  %554 = call i64 @fread(ptr noundef %552, i64 noundef 1, i64 noundef 4096, ptr noundef %553)
  store i64 %554, ptr %26, align 8, !tbaa !11
  %555 = icmp ugt i64 %554, 0
  br i1 %555, label %556, label %583

556:                                              ; preds = %551
  %557 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %558 = load i64, ptr %26, align 8, !tbaa !11
  %559 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %560 = call i32 @sm4_ctr_encrypt_update(ptr noundef %24, ptr noundef %557, i64 noundef %558, ptr noundef %559, ptr noundef %28)
  %561 = icmp ne i32 %560, 1
  br i1 %561, label %562, label %568

562:                                              ; preds = %556
  br label %563

563:                                              ; preds = %562
  %564 = load ptr, ptr @stderr, align 8, !tbaa !9
  %565 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %564, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 537, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %566

566:                                              ; preds = %563
  br label %567

567:                                              ; preds = %566
  br label %869

568:                                              ; preds = %556
  %569 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %570 = load i64, ptr %28, align 8, !tbaa !11
  %571 = load ptr, ptr %20, align 8, !tbaa !9
  %572 = call i64 @fwrite(ptr noundef %569, i64 noundef 1, i64 noundef %570, ptr noundef %571)
  %573 = load i64, ptr %28, align 8, !tbaa !11
  %574 = icmp ne i64 %572, %573
  br i1 %574, label %575, label %582

575:                                              ; preds = %568
  %576 = load ptr, ptr @stderr, align 8, !tbaa !9
  %577 = load ptr, ptr %7, align 8, !tbaa !9
  %578 = call ptr @__errno_location() #11
  %579 = load i32, ptr %578, align 4, !tbaa !5
  %580 = call ptr @strerror(i32 noundef %579) #8
  %581 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %576, ptr noundef @.str.48, ptr noundef %577, ptr noundef %580) #8
  br label %869

582:                                              ; preds = %568
  br label %551, !llvm.loop !15

583:                                              ; preds = %551
  %584 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %585 = call i32 @sm4_ctr_encrypt_finish(ptr noundef %24, ptr noundef %584, ptr noundef %28)
  %586 = icmp ne i32 %585, 1
  br i1 %586, label %587, label %593

587:                                              ; preds = %583
  br label %588

588:                                              ; preds = %587
  %589 = load ptr, ptr @stderr, align 8, !tbaa !9
  %590 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %589, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 546, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %591

591:                                              ; preds = %588
  br label %592

592:                                              ; preds = %591
  br label %869

593:                                              ; preds = %583
  %594 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %595 = load i64, ptr %28, align 8, !tbaa !11
  %596 = load ptr, ptr %20, align 8, !tbaa !9
  %597 = call i64 @fwrite(ptr noundef %594, i64 noundef 1, i64 noundef %595, ptr noundef %596)
  %598 = load i64, ptr %28, align 8, !tbaa !11
  %599 = icmp ne i64 %597, %598
  br i1 %599, label %600, label %607

600:                                              ; preds = %593
  %601 = load ptr, ptr @stderr, align 8, !tbaa !9
  %602 = load ptr, ptr %7, align 8, !tbaa !9
  %603 = call ptr @__errno_location() #11
  %604 = load i32, ptr %603, align 4, !tbaa !5
  %605 = call ptr @strerror(i32 noundef %604) #8
  %606 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %601, ptr noundef @.str.48, ptr noundef %602, ptr noundef %605) #8
  br label %869

607:                                              ; preds = %593
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %869

608:                                              ; preds = %536
  %609 = load i32, ptr %22, align 4, !tbaa !5
  %610 = icmp slt i32 %609, 0
  br i1 %610, label %611, label %615

611:                                              ; preds = %608
  %612 = load ptr, ptr @stderr, align 8, !tbaa !9
  %613 = load ptr, ptr %7, align 8, !tbaa !9
  %614 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %612, ptr noundef @.str.49, ptr noundef %613) #8
  br label %869

615:                                              ; preds = %608
  %616 = load i32, ptr %22, align 4, !tbaa !5
  %617 = icmp ne i32 %616, 0
  br i1 %617, label %618, label %743

618:                                              ; preds = %615
  %619 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %619, label %644 [
    i32 2, label %620
    i32 8, label %624
    i32 9, label %632
    i32 10, label %638
  ]

620:                                              ; preds = %618
  %621 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %622 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %623 = call i32 @sm4_cbc_encrypt_init(ptr noundef %24, ptr noundef %621, ptr noundef %622)
  store i32 %623, ptr %23, align 4, !tbaa !5
  br label %644

624:                                              ; preds = %618
  %625 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %626 = load i64, ptr %17, align 8, !tbaa !11
  %627 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %628 = load i64, ptr %18, align 8, !tbaa !11
  %629 = load ptr, ptr %10, align 8, !tbaa !9
  %630 = load i64, ptr %12, align 8, !tbaa !11
  %631 = call i32 @sm4_gcm_encrypt_init(ptr noundef %24, ptr noundef %625, i64 noundef %626, ptr noundef %627, i64 noundef %628, ptr noundef %629, i64 noundef %630, i64 noundef 16)
  store i32 %631, ptr %23, align 4, !tbaa !5
  br label %644

632:                                              ; preds = %618
  %633 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %634 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %635 = load ptr, ptr %10, align 8, !tbaa !9
  %636 = load i64, ptr %12, align 8, !tbaa !11
  %637 = call i32 @sm4_cbc_sm3_hmac_encrypt_init(ptr noundef %24, ptr noundef %633, ptr noundef %634, ptr noundef %635, i64 noundef %636)
  store i32 %637, ptr %23, align 4, !tbaa !5
  br label %644

638:                                              ; preds = %618
  %639 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %640 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %641 = load ptr, ptr %10, align 8, !tbaa !9
  %642 = load i64, ptr %12, align 8, !tbaa !11
  %643 = call i32 @sm4_ctr_sm3_hmac_encrypt_init(ptr noundef %24, ptr noundef %639, ptr noundef %640, ptr noundef %641, i64 noundef %642)
  store i32 %643, ptr %23, align 4, !tbaa !5
  br label %644

644:                                              ; preds = %638, %632, %624, %620, %618
  %645 = load i32, ptr %23, align 4, !tbaa !5
  %646 = icmp ne i32 %645, 1
  br i1 %646, label %647, label %653

647:                                              ; preds = %644
  br label %648

648:                                              ; preds = %647
  %649 = load ptr, ptr @stderr, align 8, !tbaa !9
  %650 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %649, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 592, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %651

651:                                              ; preds = %648
  br label %652

652:                                              ; preds = %651
  br label %869

653:                                              ; preds = %644
  br label %654

654:                                              ; preds = %704, %653
  %655 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %656 = load ptr, ptr %19, align 8, !tbaa !9
  %657 = call i64 @fread(ptr noundef %655, i64 noundef 1, i64 noundef 4096, ptr noundef %656)
  store i64 %657, ptr %26, align 8, !tbaa !11
  %658 = icmp ugt i64 %657, 0
  br i1 %658, label %659, label %705

659:                                              ; preds = %654
  %660 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %660, label %681 [
    i32 2, label %661
    i32 8, label %666
    i32 9, label %671
    i32 10, label %676
  ]

661:                                              ; preds = %659
  %662 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %663 = load i64, ptr %26, align 8, !tbaa !11
  %664 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %665 = call i32 @sm4_cbc_encrypt_update(ptr noundef %24, ptr noundef %662, i64 noundef %663, ptr noundef %664, ptr noundef %28)
  store i32 %665, ptr %23, align 4, !tbaa !5
  br label %681

666:                                              ; preds = %659
  %667 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %668 = load i64, ptr %26, align 8, !tbaa !11
  %669 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %670 = call i32 @sm4_gcm_encrypt_update(ptr noundef %24, ptr noundef %667, i64 noundef %668, ptr noundef %669, ptr noundef %28)
  store i32 %670, ptr %23, align 4, !tbaa !5
  br label %681

671:                                              ; preds = %659
  %672 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %673 = load i64, ptr %26, align 8, !tbaa !11
  %674 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %675 = call i32 @sm4_cbc_sm3_hmac_encrypt_update(ptr noundef %24, ptr noundef %672, i64 noundef %673, ptr noundef %674, ptr noundef %28)
  store i32 %675, ptr %23, align 4, !tbaa !5
  br label %681

676:                                              ; preds = %659
  %677 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %678 = load i64, ptr %26, align 8, !tbaa !11
  %679 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %680 = call i32 @sm4_ctr_sm3_hmac_encrypt_update(ptr noundef %24, ptr noundef %677, i64 noundef %678, ptr noundef %679, ptr noundef %28)
  store i32 %680, ptr %23, align 4, !tbaa !5
  br label %681

681:                                              ; preds = %676, %671, %666, %661, %659
  %682 = load i32, ptr %23, align 4, !tbaa !5
  %683 = icmp ne i32 %682, 1
  br i1 %683, label %684, label %690

684:                                              ; preds = %681
  br label %685

685:                                              ; preds = %684
  %686 = load ptr, ptr @stderr, align 8, !tbaa !9
  %687 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %686, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 616, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %688

688:                                              ; preds = %685
  br label %689

689:                                              ; preds = %688
  br label %869

690:                                              ; preds = %681
  %691 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %692 = load i64, ptr %28, align 8, !tbaa !11
  %693 = load ptr, ptr %20, align 8, !tbaa !9
  %694 = call i64 @fwrite(ptr noundef %691, i64 noundef 1, i64 noundef %692, ptr noundef %693)
  %695 = load i64, ptr %28, align 8, !tbaa !11
  %696 = icmp ne i64 %694, %695
  br i1 %696, label %697, label %704

697:                                              ; preds = %690
  %698 = load ptr, ptr @stderr, align 8, !tbaa !9
  %699 = load ptr, ptr %7, align 8, !tbaa !9
  %700 = call ptr @__errno_location() #11
  %701 = load i32, ptr %700, align 4, !tbaa !5
  %702 = call ptr @strerror(i32 noundef %701) #8
  %703 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %698, ptr noundef @.str.48, ptr noundef %699, ptr noundef %702) #8
  br label %869

704:                                              ; preds = %690
  br label %654, !llvm.loop !16

705:                                              ; preds = %654
  %706 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %706, label %719 [
    i32 2, label %707
    i32 8, label %710
    i32 9, label %713
    i32 10, label %716
  ]

707:                                              ; preds = %705
  %708 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %709 = call i32 @sm4_cbc_encrypt_finish(ptr noundef %24, ptr noundef %708, ptr noundef %28)
  store i32 %709, ptr %23, align 4, !tbaa !5
  br label %719

710:                                              ; preds = %705
  %711 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %712 = call i32 @sm4_gcm_encrypt_finish(ptr noundef %24, ptr noundef %711, ptr noundef %28)
  store i32 %712, ptr %23, align 4, !tbaa !5
  br label %719

713:                                              ; preds = %705
  %714 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %715 = call i32 @sm4_cbc_sm3_hmac_encrypt_finish(ptr noundef %24, ptr noundef %714, ptr noundef %28)
  store i32 %715, ptr %23, align 4, !tbaa !5
  br label %719

716:                                              ; preds = %705
  %717 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %718 = call i32 @sm4_ctr_sm3_hmac_encrypt_finish(ptr noundef %24, ptr noundef %717, ptr noundef %28)
  store i32 %718, ptr %23, align 4, !tbaa !5
  br label %719

719:                                              ; preds = %716, %713, %710, %707, %705
  %720 = load i32, ptr %23, align 4, !tbaa !5
  %721 = icmp ne i32 %720, 1
  br i1 %721, label %722, label %728

722:                                              ; preds = %719
  br label %723

723:                                              ; preds = %722
  %724 = load ptr, ptr @stderr, align 8, !tbaa !9
  %725 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %724, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 644, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %726

726:                                              ; preds = %723
  br label %727

727:                                              ; preds = %726
  br label %869

728:                                              ; preds = %719
  %729 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %730 = load i64, ptr %28, align 8, !tbaa !11
  %731 = load ptr, ptr %20, align 8, !tbaa !9
  %732 = call i64 @fwrite(ptr noundef %729, i64 noundef 1, i64 noundef %730, ptr noundef %731)
  %733 = load i64, ptr %28, align 8, !tbaa !11
  %734 = icmp ne i64 %732, %733
  br i1 %734, label %735, label %742

735:                                              ; preds = %728
  %736 = load ptr, ptr @stderr, align 8, !tbaa !9
  %737 = load ptr, ptr %7, align 8, !tbaa !9
  %738 = call ptr @__errno_location() #11
  %739 = load i32, ptr %738, align 4, !tbaa !5
  %740 = call ptr @strerror(i32 noundef %739) #8
  %741 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %736, ptr noundef @.str.48, ptr noundef %737, ptr noundef %740) #8
  br label %869

742:                                              ; preds = %728
  br label %868

743:                                              ; preds = %615
  %744 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %744, label %769 [
    i32 2, label %745
    i32 8, label %749
    i32 9, label %757
    i32 10, label %763
  ]

745:                                              ; preds = %743
  %746 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %747 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %748 = call i32 @sm4_cbc_decrypt_init(ptr noundef %24, ptr noundef %746, ptr noundef %747)
  store i32 %748, ptr %23, align 4, !tbaa !5
  br label %769

749:                                              ; preds = %743
  %750 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %751 = load i64, ptr %17, align 8, !tbaa !11
  %752 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %753 = load i64, ptr %18, align 8, !tbaa !11
  %754 = load ptr, ptr %10, align 8, !tbaa !9
  %755 = load i64, ptr %12, align 8, !tbaa !11
  %756 = call i32 @sm4_gcm_decrypt_init(ptr noundef %24, ptr noundef %750, i64 noundef %751, ptr noundef %752, i64 noundef %753, ptr noundef %754, i64 noundef %755, i64 noundef 16)
  store i32 %756, ptr %23, align 4, !tbaa !5
  br label %769

757:                                              ; preds = %743
  %758 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %759 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %760 = load ptr, ptr %10, align 8, !tbaa !9
  %761 = load i64, ptr %12, align 8, !tbaa !11
  %762 = call i32 @sm4_cbc_sm3_hmac_decrypt_init(ptr noundef %24, ptr noundef %758, ptr noundef %759, ptr noundef %760, i64 noundef %761)
  store i32 %762, ptr %23, align 4, !tbaa !5
  br label %769

763:                                              ; preds = %743
  %764 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  %765 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  %766 = load ptr, ptr %10, align 8, !tbaa !9
  %767 = load i64, ptr %12, align 8, !tbaa !11
  %768 = call i32 @sm4_ctr_sm3_hmac_decrypt_init(ptr noundef %24, ptr noundef %764, ptr noundef %765, ptr noundef %766, i64 noundef %767)
  store i32 %768, ptr %23, align 4, !tbaa !5
  br label %769

769:                                              ; preds = %763, %757, %749, %745, %743
  %770 = load i32, ptr %23, align 4, !tbaa !5
  %771 = icmp ne i32 %770, 1
  br i1 %771, label %772, label %778

772:                                              ; preds = %769
  br label %773

773:                                              ; preds = %772
  %774 = load ptr, ptr @stderr, align 8, !tbaa !9
  %775 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %774, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 672, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %776

776:                                              ; preds = %773
  br label %777

777:                                              ; preds = %776
  br label %869

778:                                              ; preds = %769
  br label %779

779:                                              ; preds = %829, %778
  %780 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %781 = load ptr, ptr %19, align 8, !tbaa !9
  %782 = call i64 @fread(ptr noundef %780, i64 noundef 1, i64 noundef 4096, ptr noundef %781)
  store i64 %782, ptr %26, align 8, !tbaa !11
  %783 = icmp ugt i64 %782, 0
  br i1 %783, label %784, label %830

784:                                              ; preds = %779
  %785 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %785, label %806 [
    i32 2, label %786
    i32 8, label %791
    i32 9, label %796
    i32 10, label %801
  ]

786:                                              ; preds = %784
  %787 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %788 = load i64, ptr %26, align 8, !tbaa !11
  %789 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %790 = call i32 @sm4_cbc_decrypt_update(ptr noundef %24, ptr noundef %787, i64 noundef %788, ptr noundef %789, ptr noundef %28)
  store i32 %790, ptr %23, align 4, !tbaa !5
  br label %806

791:                                              ; preds = %784
  %792 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %793 = load i64, ptr %26, align 8, !tbaa !11
  %794 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %795 = call i32 @sm4_gcm_decrypt_update(ptr noundef %24, ptr noundef %792, i64 noundef %793, ptr noundef %794, ptr noundef %28)
  store i32 %795, ptr %23, align 4, !tbaa !5
  br label %806

796:                                              ; preds = %784
  %797 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %798 = load i64, ptr %26, align 8, !tbaa !11
  %799 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %800 = call i32 @sm4_cbc_sm3_hmac_decrypt_update(ptr noundef %24, ptr noundef %797, i64 noundef %798, ptr noundef %799, ptr noundef %28)
  store i32 %800, ptr %23, align 4, !tbaa !5
  br label %806

801:                                              ; preds = %784
  %802 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  %803 = load i64, ptr %26, align 8, !tbaa !11
  %804 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %805 = call i32 @sm4_ctr_sm3_hmac_decrypt_update(ptr noundef %24, ptr noundef %802, i64 noundef %803, ptr noundef %804, ptr noundef %28)
  store i32 %805, ptr %23, align 4, !tbaa !5
  br label %806

806:                                              ; preds = %801, %796, %791, %786, %784
  %807 = load i32, ptr %23, align 4, !tbaa !5
  %808 = icmp ne i32 %807, 1
  br i1 %808, label %809, label %815

809:                                              ; preds = %806
  br label %810

810:                                              ; preds = %809
  %811 = load ptr, ptr @stderr, align 8, !tbaa !9
  %812 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %811, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 696, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %813

813:                                              ; preds = %810
  br label %814

814:                                              ; preds = %813
  br label %869

815:                                              ; preds = %806
  %816 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %817 = load i64, ptr %28, align 8, !tbaa !11
  %818 = load ptr, ptr %20, align 8, !tbaa !9
  %819 = call i64 @fwrite(ptr noundef %816, i64 noundef 1, i64 noundef %817, ptr noundef %818)
  %820 = load i64, ptr %28, align 8, !tbaa !11
  %821 = icmp ne i64 %819, %820
  br i1 %821, label %822, label %829

822:                                              ; preds = %815
  %823 = load ptr, ptr @stderr, align 8, !tbaa !9
  %824 = load ptr, ptr %7, align 8, !tbaa !9
  %825 = call ptr @__errno_location() #11
  %826 = load i32, ptr %825, align 4, !tbaa !5
  %827 = call ptr @strerror(i32 noundef %826) #8
  %828 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %823, ptr noundef @.str.48, ptr noundef %824, ptr noundef %827) #8
  br label %869

829:                                              ; preds = %815
  br label %779, !llvm.loop !17

830:                                              ; preds = %779
  %831 = load i32, ptr %21, align 4, !tbaa !5
  switch i32 %831, label %844 [
    i32 2, label %832
    i32 8, label %835
    i32 9, label %838
    i32 10, label %841
  ]

832:                                              ; preds = %830
  %833 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %834 = call i32 @sm4_cbc_decrypt_finish(ptr noundef %24, ptr noundef %833, ptr noundef %28)
  store i32 %834, ptr %23, align 4, !tbaa !5
  br label %844

835:                                              ; preds = %830
  %836 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %837 = call i32 @sm4_gcm_decrypt_finish(ptr noundef %24, ptr noundef %836, ptr noundef %28)
  store i32 %837, ptr %23, align 4, !tbaa !5
  br label %844

838:                                              ; preds = %830
  %839 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %840 = call i32 @sm4_cbc_sm3_hmac_decrypt_finish(ptr noundef %24, ptr noundef %839, ptr noundef %28)
  store i32 %840, ptr %23, align 4, !tbaa !5
  br label %844

841:                                              ; preds = %830
  %842 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %843 = call i32 @sm4_ctr_sm3_hmac_decrypt_finish(ptr noundef %24, ptr noundef %842, ptr noundef %28)
  store i32 %843, ptr %23, align 4, !tbaa !5
  br label %844

844:                                              ; preds = %841, %838, %835, %832, %830
  %845 = load i32, ptr %23, align 4, !tbaa !5
  %846 = icmp ne i32 %845, 1
  br i1 %846, label %847, label %853

847:                                              ; preds = %844
  br label %848

848:                                              ; preds = %847
  %849 = load ptr, ptr @stderr, align 8, !tbaa !9
  %850 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %849, ptr noundef @.str.30, ptr noundef @.str.31, i32 noundef 725, ptr noundef @__FUNCTION__.sm4_main) #8
  br label %851

851:                                              ; preds = %848
  br label %852

852:                                              ; preds = %851
  br label %869

853:                                              ; preds = %844
  %854 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  %855 = load i64, ptr %28, align 8, !tbaa !11
  %856 = load ptr, ptr %20, align 8, !tbaa !9
  %857 = call i64 @fwrite(ptr noundef %854, i64 noundef 1, i64 noundef %855, ptr noundef %856)
  %858 = load i64, ptr %28, align 8, !tbaa !11
  %859 = icmp ne i64 %857, %858
  br i1 %859, label %860, label %867

860:                                              ; preds = %853
  %861 = load ptr, ptr @stderr, align 8, !tbaa !9
  %862 = load ptr, ptr %7, align 8, !tbaa !9
  %863 = call ptr @__errno_location() #11
  %864 = load i32, ptr %863, align 4, !tbaa !5
  %865 = call ptr @strerror(i32 noundef %864) #8
  %866 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %861, ptr noundef @.str.48, ptr noundef %862, ptr noundef %865) #8
  br label %869

867:                                              ; preds = %853
  br label %868

868:                                              ; preds = %867, %742
  store i32 0, ptr %6, align 4, !tbaa !5
  br label %869

869:                                              ; preds = %868, %860, %852, %822, %814, %777, %735, %727, %697, %689, %652, %611, %607, %600, %592, %575, %567, %549, %531, %521, %513, %503, %495, %487, %478, %471, %464, %430, %424, %415, %389, %370, %342, %316, %305, %150, %137, %124, %113, %91, %80, %57
  call void @gmssl_secure_clear(ptr noundef %24, i64 noundef 384)
  %870 = getelementptr inbounds [48 x i8], ptr %15, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %870, i64 noundef 48)
  %871 = getelementptr inbounds [64 x i8], ptr %16, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %871, i64 noundef 64)
  %872 = getelementptr inbounds [4096 x i8], ptr %25, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %872, i64 noundef 4096)
  %873 = getelementptr inbounds [41960 x i8], ptr %27, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %873, i64 noundef 41960)
  %874 = load ptr, ptr %11, align 8, !tbaa !9
  %875 = icmp ne ptr %874, null
  br i1 %875, label %876, label %880

876:                                              ; preds = %869
  %877 = load ptr, ptr %11, align 8, !tbaa !9
  %878 = load i64, ptr %12, align 8, !tbaa !11
  call void @gmssl_secure_clear(ptr noundef %877, i64 noundef %878)
  %879 = load ptr, ptr %11, align 8, !tbaa !9
  call void @free(ptr noundef %879) #8
  br label %880

880:                                              ; preds = %876, %869
  %881 = load ptr, ptr %13, align 8, !tbaa !9
  %882 = icmp ne ptr %881, null
  br i1 %882, label %883, label %889

883:                                              ; preds = %880
  %884 = load ptr, ptr %19, align 8, !tbaa !9
  %885 = icmp ne ptr %884, null
  br i1 %885, label %886, label %889

886:                                              ; preds = %883
  %887 = load ptr, ptr %19, align 8, !tbaa !9
  %888 = call i32 @fclose(ptr noundef %887)
  br label %889

889:                                              ; preds = %886, %883, %880
  %890 = load ptr, ptr %14, align 8, !tbaa !9
  %891 = icmp ne ptr %890, null
  br i1 %891, label %892, label %898

892:                                              ; preds = %889
  %893 = load ptr, ptr %20, align 8, !tbaa !9
  %894 = icmp ne ptr %893, null
  br i1 %894, label %895, label %898

895:                                              ; preds = %892
  %896 = load ptr, ptr %20, align 8, !tbaa !9
  %897 = call i32 @fclose(ptr noundef %896)
  br label %898

898:                                              ; preds = %895, %892, %889
  %899 = load i32, ptr %6, align 4, !tbaa !5
  store i32 %899, ptr %3, align 4
  store i32 1, ptr %31, align 4
  br label %900

900:                                              ; preds = %898, %43
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 41960, ptr %27) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #8
  call void @llvm.lifetime.end.p0(i64 4096, ptr %25) #8
  call void @llvm.lifetime.end.p0(i64 384, ptr %24) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 64, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #8
  %901 = load i32, ptr %3, align 4
  ret i32 %901
}

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #2

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcmp(ptr noundef, ptr noundef) #3

declare i32 @printf(ptr noundef, ...) #4

; Function Attrs: nounwind willreturn memory(read)
declare i64 @strlen(ptr noundef) #3

declare i32 @hex_to_bytes(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind allocsize(0)
declare noalias ptr @malloc(i64 noundef) #5

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr noundef nonnull) #6

declare noalias ptr @fopen(ptr noundef, ptr noundef) #4

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) #2

; Function Attrs: nounwind willreturn memory(none)
declare ptr @__errno_location() #7

declare i32 @sm4_ctr_encrypt_init(ptr noundef, ptr noundef, ptr noundef) #4

declare i64 @fread(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #4

declare i32 @sm4_ctr_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i64 @fwrite(ptr noundef, i64 noundef, i64 noundef, ptr noundef) #4

declare i32 @sm4_ctr_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_cbc_encrypt_init(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_gcm_encrypt_init(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) #4

declare i32 @sm4_cbc_sm3_hmac_encrypt_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #4

declare i32 @sm4_ctr_sm3_hmac_encrypt_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #4

declare i32 @sm4_cbc_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_gcm_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_cbc_sm3_hmac_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_ctr_sm3_hmac_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_cbc_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_gcm_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_cbc_sm3_hmac_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_ctr_sm3_hmac_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_cbc_decrypt_init(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_gcm_decrypt_init(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) #4

declare i32 @sm4_cbc_sm3_hmac_decrypt_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #4

declare i32 @sm4_ctr_sm3_hmac_decrypt_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) #4

declare i32 @sm4_cbc_decrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_gcm_decrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_cbc_sm3_hmac_decrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_ctr_sm3_hmac_decrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_cbc_decrypt_finish(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_gcm_decrypt_finish(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_cbc_sm3_hmac_decrypt_finish(ptr noundef, ptr noundef, ptr noundef) #4

declare i32 @sm4_ctr_sm3_hmac_decrypt_finish(ptr noundef, ptr noundef, ptr noundef) #4

declare void @gmssl_secure_clear(ptr noundef, i64 noundef) #4

; Function Attrs: nounwind
declare void @free(ptr noundef) #2

declare i32 @fclose(ptr noundef) #4

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nounwind willreturn memory(read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind allocsize(0) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { nounwind }
attributes #9 = { nounwind willreturn memory(read) }
attributes #10 = { nounwind allocsize(0) }
attributes #11 = { nounwind willreturn memory(none) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%union.anon = type { %struct.SM4_CBC_SM3_HMAC_CTX }
%struct.SM4_CBC_SM3_HMAC_CTX = type { %struct.SM4_CBC_CTX, %struct.SM3_HMAC_CTX, [32 x i8], i64 }
%struct.SM4_CBC_CTX = type { %struct.SM4_KEY, [16 x i8], [16 x i8], i64 }
%struct.SM4_KEY = type { [32 x i32] }
%struct.SM3_HMAC_CTX = type { %struct.SM3_CTX, [64 x i8] }
%struct.SM3_CTX = type { [8 x i32], i64, [64 x i8], i64 }

@stdin = external local_unnamed_addr global ptr, align 8
@stdout = external local_unnamed_addr global ptr, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [14 x i8], align 1
@usage = external hidden local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [4 x i8], align 1
@options = external hidden local_unnamed_addr global ptr, align 8
@.str.3 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [40 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.31 = external hidden unnamed_addr constant [59 x i8], align 1
@__FUNCTION__.sm4_main = external hidden unnamed_addr constant [9 x i8], align 1
@.str.32 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.33 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.34 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.39 = external hidden unnamed_addr constant [92 x i8], align 1
@.str.40 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.44 = external hidden unnamed_addr constant [49 x i8], align 1
@.str.46 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.47 = external hidden unnamed_addr constant [59 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.49 = external hidden unnamed_addr constant [47 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 2) i32 @sm4_main(i32 noundef %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca i64, align 8
  %4 = alloca [48 x i8], align 16
  %5 = alloca [64 x i8], align 16
  %6 = alloca i64, align 8
  %7 = alloca i64, align 8
  %8 = alloca %union.anon, align 8
  %9 = alloca [4096 x i8], align 16
  %10 = alloca [41960 x i8], align 16
  %11 = alloca i64, align 8
  %12 = load ptr, ptr %1, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #10
  store i64 0, ptr %3, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %4) #10
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %5) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #10
  store i64 0, ptr %6, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %7) #10
  store i64 0, ptr %7, align 8, !tbaa !9
  %13 = load ptr, ptr @stdin, align 8, !tbaa !5
  %14 = load ptr, ptr @stdout, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %8) #10
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %9) #10
  call void @llvm.lifetime.start.p0(i64 41960, ptr nonnull %10) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #10
  %15 = icmp slt i32 %0, 2
  br i1 %15, label %16, label %.preheader315

16:                                               ; preds = %2
  %17 = load ptr, ptr @stderr, align 8, !tbaa !5
  %18 = load ptr, ptr @usage, align 8, !tbaa !5
  %19 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %17, ptr noundef nonnull @.str, ptr noundef %12, ptr noundef %18) #11
  br label %416

.preheader315:                                    ; preds = %2, %201
  %.0173524 = phi i32 [ %.1174, %201 ], [ -1, %2 ]
  %.0175523 = phi i32 [ %.1176, %201 ], [ 0, %2 ]
  %.0177522 = phi ptr [ %.1178, %201 ], [ %14, %2 ]
  %.0180521 = phi ptr [ %.1181, %201 ], [ %13, %2 ]
  %.0183520 = phi ptr [ %.1184, %201 ], [ null, %2 ]
  %.0186519 = phi ptr [ %.1187, %201 ], [ null, %2 ]
  %.0189518 = phi ptr [ %.1190, %201 ], [ null, %2 ]
  %.0192517 = phi ptr [ %.1193, %201 ], [ null, %2 ]
  %.0194516 = phi ptr [ %.1195, %201 ], [ null, %2 ]
  %.pn515 = phi ptr [ %.1199, %201 ], [ %1, %2 ]
  %.0200.in514 = phi i32 [ %.1201, %201 ], [ %0, %2 ]
  %.0198525 = getelementptr inbounds i8, ptr %.pn515, i64 8
  %.0200526 = add nsw i32 %.0200.in514, -1
  %20 = load ptr, ptr %.0198525, align 8, !tbaa !5
  %21 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.1) #12
  %.not248 = icmp eq i32 %21, 0
  br i1 %.not248, label %22, label %27

22:                                               ; preds = %.preheader315
  %23 = load ptr, ptr @usage, align 8, !tbaa !5
  %24 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, ptr noundef %12, ptr noundef %23)
  %25 = load ptr, ptr @options, align 8, !tbaa !5
  %26 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2, ptr noundef %25)
  br label %403

27:                                               ; preds = %.preheader315
  %28 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.3) #12
  %.not249 = icmp eq i32 %28, 0
  br i1 %.not249, label %29, label %45

29:                                               ; preds = %27
  %30 = add nsw i32 %.0200.in514, -2
  %31 = icmp eq i32 %.0200.in514, 2
  br i1 %31, label %.loopexit, label %32

32:                                               ; preds = %29
  %33 = getelementptr inbounds i8, ptr %.pn515, i64 16
  %34 = load ptr, ptr %33, align 8, !tbaa !5
  %35 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %34) #12
  %36 = icmp ugt i64 %35, 96
  br i1 %36, label %37, label %40

37:                                               ; preds = %32
  %38 = load ptr, ptr @stderr, align 8, !tbaa !5
  %39 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %38, ptr noundef nonnull @.str.4, ptr noundef %12) #11
  br label %403

40:                                               ; preds = %32
  %41 = call i32 @hex_to_bytes(ptr noundef %34, i64 noundef %35, ptr noundef nonnull %4, ptr noundef nonnull %6) #10
  %.not250 = icmp eq i32 %41, 1
  br i1 %.not250, label %201, label %42

42:                                               ; preds = %40
  %43 = load ptr, ptr @stderr, align 8, !tbaa !5
  %44 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %43, ptr noundef nonnull @.str.5, ptr noundef %12) #11
  br label %403

45:                                               ; preds = %27
  %46 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.6) #12
  %.not251 = icmp eq i32 %46, 0
  br i1 %.not251, label %47, label %63

47:                                               ; preds = %45
  %48 = add nsw i32 %.0200.in514, -2
  %49 = icmp eq i32 %.0200.in514, 2
  br i1 %49, label %.loopexit, label %50

50:                                               ; preds = %47
  %51 = getelementptr inbounds i8, ptr %.pn515, i64 16
  %52 = load ptr, ptr %51, align 8, !tbaa !5
  %53 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %52) #12
  %54 = icmp ugt i64 %53, 128
  br i1 %54, label %55, label %58

55:                                               ; preds = %50
  %56 = load ptr, ptr @stderr, align 8, !tbaa !5
  %57 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %56, ptr noundef nonnull @.str.7, ptr noundef %12) #11
  br label %403

58:                                               ; preds = %50
  %59 = call i32 @hex_to_bytes(ptr noundef %52, i64 noundef %53, ptr noundef nonnull %5, ptr noundef nonnull %7) #10
  %.not252 = icmp eq i32 %59, 1
  br i1 %.not252, label %201, label %60

60:                                               ; preds = %58
  %61 = load ptr, ptr @stderr, align 8, !tbaa !5
  %62 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %61, ptr noundef nonnull @.str.8, ptr noundef %12) #11
  br label %403

63:                                               ; preds = %45
  %64 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.9) #12
  %.not253 = icmp eq i32 %64, 0
  br i1 %.not253, label %65, label %70

65:                                               ; preds = %63
  %66 = icmp eq i32 %.0173524, 0
  br i1 %66, label %67, label %201

67:                                               ; preds = %65
  %68 = load ptr, ptr @stderr, align 8, !tbaa !5
  %69 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef nonnull @.str.10, ptr noundef %12) #11
  br label %403

70:                                               ; preds = %63
  %71 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.11) #12
  %.not254 = icmp eq i32 %71, 0
  br i1 %.not254, label %72, label %77

72:                                               ; preds = %70
  %73 = icmp eq i32 %.0173524, 1
  br i1 %73, label %74, label %201

74:                                               ; preds = %72
  %75 = load ptr, ptr @stderr, align 8, !tbaa !5
  %76 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %75, ptr noundef nonnull @.str.10, ptr noundef %12) #11
  br label %403

77:                                               ; preds = %70
  %78 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.12) #12
  %.not255 = icmp eq i32 %78, 0
  br i1 %.not255, label %79, label %80

79:                                               ; preds = %77
  %.not256 = icmp eq i32 %.0175523, 0
  br i1 %.not256, label %201, label %.loopexit

80:                                               ; preds = %77
  %81 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.13) #12
  %.not257 = icmp eq i32 %81, 0
  br i1 %.not257, label %82, label %83

82:                                               ; preds = %80
  %.not258 = icmp eq i32 %.0175523, 0
  br i1 %.not258, label %201, label %.loopexit

83:                                               ; preds = %80
  %84 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.14) #12
  %.not259 = icmp eq i32 %84, 0
  br i1 %.not259, label %85, label %86

85:                                               ; preds = %83
  %.not260 = icmp eq i32 %.0175523, 0
  br i1 %.not260, label %201, label %.loopexit

86:                                               ; preds = %83
  %87 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.15) #12
  %.not261 = icmp eq i32 %87, 0
  br i1 %.not261, label %88, label %89

88:                                               ; preds = %86
  %.not262 = icmp eq i32 %.0175523, 0
  br i1 %.not262, label %201, label %.loopexit

89:                                               ; preds = %86
  %90 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.16) #12
  %.not263 = icmp eq i32 %90, 0
  br i1 %.not263, label %91, label %92

91:                                               ; preds = %89
  %.not264 = icmp eq i32 %.0175523, 0
  br i1 %.not264, label %201, label %.loopexit

92:                                               ; preds = %89
  %93 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.17) #12
  %.not265 = icmp eq i32 %93, 0
  br i1 %.not265, label %94, label %95

94:                                               ; preds = %92
  %.not266 = icmp eq i32 %.0175523, 0
  br i1 %.not266, label %201, label %.loopexit

95:                                               ; preds = %92
  %96 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.18) #12
  %.not267 = icmp eq i32 %96, 0
  br i1 %.not267, label %97, label %98

97:                                               ; preds = %95
  %.not268 = icmp eq i32 %.0175523, 0
  br i1 %.not268, label %201, label %.loopexit

98:                                               ; preds = %95
  %99 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.19) #12
  %.not269 = icmp eq i32 %99, 0
  br i1 %.not269, label %100, label %101

100:                                              ; preds = %98
  %.not270 = icmp eq i32 %.0175523, 0
  br i1 %.not270, label %201, label %.loopexit

101:                                              ; preds = %98
  %102 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.20) #12
  %.not271 = icmp eq i32 %102, 0
  br i1 %.not271, label %103, label %104

103:                                              ; preds = %101
  %.not272 = icmp eq i32 %.0175523, 0
  br i1 %.not272, label %201, label %.loopexit

104:                                              ; preds = %101
  %105 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.21) #12
  %.not273 = icmp eq i32 %105, 0
  br i1 %.not273, label %106, label %107

106:                                              ; preds = %104
  %.not274 = icmp eq i32 %.0175523, 0
  br i1 %.not274, label %201, label %.loopexit

107:                                              ; preds = %104
  %108 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.22) #12
  %.not275 = icmp eq i32 %108, 0
  br i1 %.not275, label %109, label %117

109:                                              ; preds = %107
  %110 = add nsw i32 %.0200.in514, -2
  %111 = icmp eq i32 %.0200.in514, 2
  br i1 %111, label %.loopexit, label %112

112:                                              ; preds = %109
  %.not276 = icmp eq ptr %.0192517, null
  br i1 %.not276, label %113, label %.loopexit.sink.split

113:                                              ; preds = %112
  %114 = getelementptr inbounds i8, ptr %.pn515, i64 16
  %115 = load ptr, ptr %114, align 8, !tbaa !5
  %116 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %115) #12
  store i64 %116, ptr %3, align 8, !tbaa !9
  br label %201

117:                                              ; preds = %107
  %118 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.24) #12
  %.not277 = icmp eq i32 %118, 0
  br i1 %.not277, label %119, label %138

119:                                              ; preds = %117
  %120 = add nsw i32 %.0200.in514, -2
  %121 = icmp eq i32 %.0200.in514, 2
  br i1 %121, label %.loopexit, label %122

122:                                              ; preds = %119
  %.not278 = icmp eq ptr %.0192517, null
  br i1 %.not278, label %123, label %.loopexit.sink.split

123:                                              ; preds = %122
  %124 = getelementptr inbounds i8, ptr %.pn515, i64 16
  %125 = load ptr, ptr %124, align 8, !tbaa !5
  %126 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %125) #12
  %127 = lshr i64 %126, 1
  %128 = add nuw i64 %127, 1
  %129 = call noalias ptr @malloc(i64 noundef %128) #13
  %.not279 = icmp eq ptr %129, null
  br i1 %.not279, label %130, label %133

130:                                              ; preds = %123
  %131 = load ptr, ptr @stderr, align 8, !tbaa !5
  %132 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %131, ptr noundef nonnull @.str.25, ptr noundef %12) #11
  br label %403

133:                                              ; preds = %123
  %134 = call i32 @hex_to_bytes(ptr noundef %125, i64 noundef %126, ptr noundef nonnull %129, ptr noundef nonnull %3) #10
  %.not280 = icmp eq i32 %134, 1
  br i1 %.not280, label %201, label %135

135:                                              ; preds = %133
  %136 = load ptr, ptr @stderr, align 8, !tbaa !5
  %137 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %136, ptr noundef nonnull @.str.26, ptr noundef %12) #11
  br label %403

138:                                              ; preds = %117
  %139 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.27) #12
  %.not281 = icmp eq i32 %139, 0
  br i1 %.not281, label %140, label %150

140:                                              ; preds = %138
  %141 = icmp eq i32 %.0200.in514, 2
  br i1 %141, label %.loopexit, label %142

142:                                              ; preds = %140
  %143 = add nsw i32 %.0200.in514, -2
  %144 = getelementptr inbounds i8, ptr %.pn515, i64 16
  %145 = load ptr, ptr %144, align 8, !tbaa !5
  %146 = call i32 @atoi(ptr nocapture noundef %145) #12
  %or.cond = icmp ugt i32 %146, 32
  br i1 %or.cond, label %147, label %201

147:                                              ; preds = %142
  %148 = load ptr, ptr @stderr, align 8, !tbaa !5
  %149 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %148, ptr noundef nonnull @.str.28, ptr noundef %12) #11
  br label %403

150:                                              ; preds = %138
  %151 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.29) #12
  %.not282 = icmp eq i32 %151, 0
  br i1 %.not282, label %152, label %163

152:                                              ; preds = %150
  %153 = icmp eq i32 %.0200.in514, 2
  br i1 %153, label %.loopexit, label %154

154:                                              ; preds = %152
  %155 = add nsw i32 %.0200.in514, -2
  %156 = getelementptr inbounds i8, ptr %.pn515, i64 16
  %157 = load ptr, ptr %156, align 8, !tbaa !5
  %158 = call i32 @atoi(ptr nocapture noundef %157) #12
  %159 = icmp ugt i32 %158, 40936
  br i1 %159, label %160, label %201

160:                                              ; preds = %154
  %161 = load ptr, ptr @stderr, align 8, !tbaa !5
  %162 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %161, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 391, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

163:                                              ; preds = %150
  %164 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.32) #12
  %.not283 = icmp eq i32 %164, 0
  br i1 %.not283, label %165, label %178

165:                                              ; preds = %163
  %166 = icmp eq i32 %.0200.in514, 2
  br i1 %166, label %.loopexit, label %167

167:                                              ; preds = %165
  %168 = add nsw i32 %.0200.in514, -2
  %169 = getelementptr inbounds i8, ptr %.pn515, i64 16
  %170 = load ptr, ptr %169, align 8, !tbaa !5
  %171 = call noalias ptr @fopen(ptr noundef %170, ptr noundef nonnull @.str.33)
  %.not284 = icmp eq ptr %171, null
  br i1 %.not284, label %172, label %201

172:                                              ; preds = %167
  %173 = load ptr, ptr @stderr, align 8, !tbaa !5
  %174 = tail call ptr @__errno_location() #14
  %175 = load i32, ptr %174, align 4, !tbaa !11
  %176 = call ptr @strerror(i32 noundef %175) #10
  %177 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %173, ptr noundef nonnull @.str.34, ptr noundef %12, ptr noundef %170, ptr noundef %176) #11
  br label %403

178:                                              ; preds = %163
  %179 = call i32 @strcmp(ptr noundef nonnull dereferenceable(1) %20, ptr noundef nonnull dereferenceable(1) @.str.35) #12
  %.not285 = icmp eq i32 %179, 0
  br i1 %.not285, label %180, label %193

180:                                              ; preds = %178
  %181 = icmp eq i32 %.0200.in514, 2
  br i1 %181, label %.loopexit, label %182

182:                                              ; preds = %180
  %183 = add nsw i32 %.0200.in514, -2
  %184 = getelementptr inbounds i8, ptr %.pn515, i64 16
  %185 = load ptr, ptr %184, align 8, !tbaa !5
  %186 = call noalias ptr @fopen(ptr noundef %185, ptr noundef nonnull @.str.36)
  %.not286 = icmp eq ptr %186, null
  br i1 %.not286, label %187, label %201

187:                                              ; preds = %182
  %188 = load ptr, ptr @stderr, align 8, !tbaa !5
  %189 = tail call ptr @__errno_location() #14
  %190 = load i32, ptr %189, align 4, !tbaa !11
  %191 = call ptr @strerror(i32 noundef %190) #10
  %192 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %188, ptr noundef nonnull @.str.34, ptr noundef %12, ptr noundef %185, ptr noundef %191) #11
  br label %403

193:                                              ; preds = %178
  %194 = load ptr, ptr @stderr, align 8, !tbaa !5
  %195 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %194, ptr noundef nonnull @.str.37, ptr noundef %12, ptr noundef %20) #11
  br label %403

.loopexit.sink.split:                             ; preds = %122, %112
  %196 = load ptr, ptr @stderr, align 8, !tbaa !5
  %197 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %196, ptr noundef nonnull @.str.23, ptr noundef %12) #11
  br label %.loopexit

.loopexit:                                        ; preds = %180, %165, %152, %140, %119, %109, %106, %103, %100, %97, %94, %91, %88, %85, %82, %79, %47, %29, %.loopexit.sink.split
  %198 = load ptr, ptr @stderr, align 8, !tbaa !5
  %199 = load ptr, ptr %.0198525, align 8, !tbaa !5
  %200 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %198, ptr noundef nonnull @.str.38, ptr noundef %12, ptr noundef %199) #11
  br label %403

201:                                              ; preds = %133, %106, %103, %100, %97, %94, %91, %88, %85, %82, %79, %72, %65, %40, %113, %142, %167, %182, %154, %58
  %.1201 = phi i32 [ %183, %182 ], [ %168, %167 ], [ %155, %154 ], [ %143, %142 ], [ %110, %113 ], [ %48, %58 ], [ %30, %40 ], [ %.0200526, %65 ], [ %.0200526, %72 ], [ %.0200526, %79 ], [ %.0200526, %82 ], [ %.0200526, %85 ], [ %.0200526, %88 ], [ %.0200526, %91 ], [ %.0200526, %94 ], [ %.0200526, %97 ], [ %.0200526, %100 ], [ %.0200526, %103 ], [ %.0200526, %106 ], [ %120, %133 ]
  %.1199 = phi ptr [ %184, %182 ], [ %169, %167 ], [ %156, %154 ], [ %144, %142 ], [ %114, %113 ], [ %51, %58 ], [ %33, %40 ], [ %.0198525, %65 ], [ %.0198525, %72 ], [ %.0198525, %79 ], [ %.0198525, %82 ], [ %.0198525, %85 ], [ %.0198525, %88 ], [ %.0198525, %91 ], [ %.0198525, %94 ], [ %.0198525, %97 ], [ %.0198525, %100 ], [ %.0198525, %103 ], [ %.0198525, %106 ], [ %124, %133 ]
  %.1195 = phi ptr [ %.0194516, %182 ], [ %.0194516, %167 ], [ %.0194516, %154 ], [ %.0194516, %142 ], [ %.0194516, %113 ], [ %.0194516, %58 ], [ %34, %40 ], [ %.0194516, %65 ], [ %.0194516, %72 ], [ %.0194516, %79 ], [ %.0194516, %82 ], [ %.0194516, %85 ], [ %.0194516, %88 ], [ %.0194516, %91 ], [ %.0194516, %94 ], [ %.0194516, %97 ], [ %.0194516, %100 ], [ %.0194516, %103 ], [ %.0194516, %106 ], [ %.0194516, %133 ]
  %.1193 = phi ptr [ %.0192517, %182 ], [ %.0192517, %167 ], [ %.0192517, %154 ], [ %.0192517, %142 ], [ %115, %113 ], [ %.0192517, %58 ], [ %.0192517, %40 ], [ %.0192517, %65 ], [ %.0192517, %72 ], [ %.0192517, %79 ], [ %.0192517, %82 ], [ %.0192517, %85 ], [ %.0192517, %88 ], [ %.0192517, %91 ], [ %.0192517, %94 ], [ %.0192517, %97 ], [ %.0192517, %100 ], [ %.0192517, %103 ], [ %.0192517, %106 ], [ %129, %133 ]
  %.1190 = phi ptr [ %.0189518, %182 ], [ %.0189518, %167 ], [ %.0189518, %154 ], [ %.0189518, %142 ], [ %.0189518, %113 ], [ %.0189518, %58 ], [ %.0189518, %40 ], [ %.0189518, %65 ], [ %.0189518, %72 ], [ %.0189518, %79 ], [ %.0189518, %82 ], [ %.0189518, %85 ], [ %.0189518, %88 ], [ %.0189518, %91 ], [ %.0189518, %94 ], [ %.0189518, %97 ], [ %.0189518, %100 ], [ %.0189518, %103 ], [ %.0189518, %106 ], [ %129, %133 ]
  %.1187 = phi ptr [ %.0186519, %182 ], [ %170, %167 ], [ %.0186519, %154 ], [ %.0186519, %142 ], [ %.0186519, %113 ], [ %.0186519, %58 ], [ %.0186519, %40 ], [ %.0186519, %65 ], [ %.0186519, %72 ], [ %.0186519, %79 ], [ %.0186519, %82 ], [ %.0186519, %85 ], [ %.0186519, %88 ], [ %.0186519, %91 ], [ %.0186519, %94 ], [ %.0186519, %97 ], [ %.0186519, %100 ], [ %.0186519, %103 ], [ %.0186519, %106 ], [ %.0186519, %133 ]
  %.1184 = phi ptr [ %185, %182 ], [ %.0183520, %167 ], [ %.0183520, %154 ], [ %.0183520, %142 ], [ %.0183520, %113 ], [ %.0183520, %58 ], [ %.0183520, %40 ], [ %.0183520, %65 ], [ %.0183520, %72 ], [ %.0183520, %79 ], [ %.0183520, %82 ], [ %.0183520, %85 ], [ %.0183520, %88 ], [ %.0183520, %91 ], [ %.0183520, %94 ], [ %.0183520, %97 ], [ %.0183520, %100 ], [ %.0183520, %103 ], [ %.0183520, %106 ], [ %.0183520, %133 ]
  %.1181 = phi ptr [ %.0180521, %182 ], [ %171, %167 ], [ %.0180521, %154 ], [ %.0180521, %142 ], [ %.0180521, %113 ], [ %.0180521, %58 ], [ %.0180521, %40 ], [ %.0180521, %65 ], [ %.0180521, %72 ], [ %.0180521, %79 ], [ %.0180521, %82 ], [ %.0180521, %85 ], [ %.0180521, %88 ], [ %.0180521, %91 ], [ %.0180521, %94 ], [ %.0180521, %97 ], [ %.0180521, %100 ], [ %.0180521, %103 ], [ %.0180521, %106 ], [ %.0180521, %133 ]
  %.1178 = phi ptr [ %186, %182 ], [ %.0177522, %167 ], [ %.0177522, %154 ], [ %.0177522, %142 ], [ %.0177522, %113 ], [ %.0177522, %58 ], [ %.0177522, %40 ], [ %.0177522, %65 ], [ %.0177522, %72 ], [ %.0177522, %79 ], [ %.0177522, %82 ], [ %.0177522, %85 ], [ %.0177522, %88 ], [ %.0177522, %91 ], [ %.0177522, %94 ], [ %.0177522, %97 ], [ %.0177522, %100 ], [ %.0177522, %103 ], [ %.0177522, %106 ], [ %.0177522, %133 ]
  %.1176 = phi i32 [ %.0175523, %182 ], [ %.0175523, %167 ], [ %.0175523, %154 ], [ %.0175523, %142 ], [ %.0175523, %113 ], [ %.0175523, %58 ], [ %.0175523, %40 ], [ %.0175523, %65 ], [ %.0175523, %72 ], [ 2, %79 ], [ 5, %82 ], [ 9, %85 ], [ 10, %88 ], [ 8, %91 ], [ 1, %94 ], [ 3, %97 ], [ 4, %100 ], [ 7, %103 ], [ 6, %106 ], [ %.0175523, %133 ]
  %.1174 = phi i32 [ %.0173524, %182 ], [ %.0173524, %167 ], [ %.0173524, %154 ], [ %.0173524, %142 ], [ %.0173524, %113 ], [ %.0173524, %58 ], [ %.0173524, %40 ], [ 1, %65 ], [ 0, %72 ], [ %.0173524, %79 ], [ %.0173524, %82 ], [ %.0173524, %85 ], [ %.0173524, %88 ], [ %.0173524, %91 ], [ %.0173524, %94 ], [ %.0173524, %97 ], [ %.0173524, %100 ], [ %.0173524, %103 ], [ %.0173524, %106 ], [ %.0173524, %133 ]
  %202 = icmp sgt i32 %.1201, 1
  br i1 %202, label %.preheader315, label %203, !llvm.loop !13

203:                                              ; preds = %201
  %.not = icmp eq i32 %.1176, 0
  br i1 %.not, label %204, label %207

204:                                              ; preds = %203
  %205 = load ptr, ptr @stderr, align 8, !tbaa !5
  %206 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %205, ptr noundef nonnull @.str.39, ptr noundef %12) #11
  br label %403

207:                                              ; preds = %203
  %.not222 = icmp eq ptr %.1195, null
  br i1 %.not222, label %208, label %211

208:                                              ; preds = %207
  %209 = load ptr, ptr @stderr, align 8, !tbaa !5
  %210 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %209, ptr noundef nonnull @.str.40, ptr noundef %12) #11
  br label %403

211:                                              ; preds = %207
  switch i32 %.1176, label %212 [
    i32 2, label %215
    i32 5, label %215
    i32 8, label %215
    i32 9, label %220
    i32 10, label %220
  ]

212:                                              ; preds = %211
  %213 = load ptr, ptr @stderr, align 8, !tbaa !5
  %214 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %213, ptr noundef nonnull @.str.41, ptr noundef %12) #11
  br label %403

215:                                              ; preds = %211, %211, %211
  %216 = load i64, ptr %6, align 8, !tbaa !9
  %.not225 = icmp eq i64 %216, 16
  br i1 %.not225, label %225, label %217

217:                                              ; preds = %215
  %218 = load ptr, ptr @stderr, align 8, !tbaa !5
  %219 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %218, ptr noundef nonnull @.str.42, ptr noundef %12) #11
  br label %403

220:                                              ; preds = %211, %211
  %221 = load i64, ptr %6, align 8, !tbaa !9
  %.not223 = icmp eq i64 %221, 48
  br i1 %.not223, label %225, label %222

222:                                              ; preds = %220
  %223 = load ptr, ptr @stderr, align 8, !tbaa !5
  %224 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %223, ptr noundef nonnull @.str.44, ptr noundef %12) #11
  br label %403

225:                                              ; preds = %220, %215
  %226 = phi i64 [ 48, %220 ], [ 16, %215 ]
  switch i32 %.1176, label %.thread294 [
    i32 6, label %234
    i32 2, label %227
    i32 3, label %227
    i32 4, label %227
    i32 5, label %227
    i32 9, label %227
    i32 10, label %227
  ]

227:                                              ; preds = %225, %225, %225, %225, %225, %225
  %228 = load i64, ptr %7, align 8, !tbaa !9
  %.not226 = icmp eq i64 %228, 16
  br i1 %.not226, label %232, label %229

229:                                              ; preds = %227
  %230 = load ptr, ptr @stderr, align 8, !tbaa !5
  %231 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %230, ptr noundef nonnull @.str.46, ptr noundef %12) #11
  br label %403

232:                                              ; preds = %227
  %233 = add nsw i32 %.1176, -7
  %switch = icmp ult i32 %233, -6
  %.not228 = icmp eq ptr %.1193, null
  %or.cond288 = select i1 %switch, i1 true, i1 %.not228
  br i1 %or.cond288, label %238, label %235

234:                                              ; preds = %225
  %.not228.old = icmp eq ptr %.1193, null
  br i1 %.not228.old, label %.thread294, label %235

235:                                              ; preds = %232, %234
  %236 = load ptr, ptr @stderr, align 8, !tbaa !5
  %237 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %236, ptr noundef nonnull @.str.47, ptr noundef %12) #11
  br label %403

238:                                              ; preds = %232
  %239 = icmp eq i32 %.1176, 5
  br i1 %239, label %240, label %.thread294

240:                                              ; preds = %238
  %241 = call i32 @sm4_ctr_encrypt_init(ptr noundef nonnull %8, ptr noundef nonnull %4, ptr noundef nonnull %5) #10
  %.not242 = icmp eq i32 %241, 1
  br i1 %.not242, label %.preheader314, label %242

242:                                              ; preds = %240
  %243 = load ptr, ptr @stderr, align 8, !tbaa !5
  %244 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %243, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 532, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

.preheader314:                                    ; preds = %240, %251
  %245 = call i64 @fread(ptr noundef nonnull %9, i64 noundef 1, i64 noundef 4096, ptr noundef %.1181)
  %.not243 = icmp eq i64 %245, 0
  br i1 %.not243, label %261, label %246

246:                                              ; preds = %.preheader314
  %247 = call i32 @sm4_ctr_encrypt_update(ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %245, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  %.not246 = icmp eq i32 %247, 1
  br i1 %.not246, label %251, label %248

248:                                              ; preds = %246
  %249 = load ptr, ptr @stderr, align 8, !tbaa !5
  %250 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %249, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 537, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

251:                                              ; preds = %246
  %252 = load i64, ptr %11, align 8, !tbaa !9
  %253 = call i64 @fwrite(ptr noundef nonnull %10, i64 noundef 1, i64 noundef %252, ptr noundef %.1178)
  %254 = load i64, ptr %11, align 8, !tbaa !9
  %.not247 = icmp eq i64 %253, %254
  br i1 %.not247, label %.preheader314, label %255, !llvm.loop !15

255:                                              ; preds = %251
  %256 = load ptr, ptr @stderr, align 8, !tbaa !5
  %257 = tail call ptr @__errno_location() #14
  %258 = load i32, ptr %257, align 4, !tbaa !11
  %259 = call ptr @strerror(i32 noundef %258) #10
  %260 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %256, ptr noundef nonnull @.str.48, ptr noundef %12, ptr noundef %259) #11
  br label %403

261:                                              ; preds = %.preheader314
  %262 = call i32 @sm4_ctr_encrypt_finish(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  %.not244 = icmp eq i32 %262, 1
  br i1 %.not244, label %266, label %263

263:                                              ; preds = %261
  %264 = load ptr, ptr @stderr, align 8, !tbaa !5
  %265 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %264, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 546, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

266:                                              ; preds = %261
  %267 = load i64, ptr %11, align 8, !tbaa !9
  %268 = call i64 @fwrite(ptr noundef nonnull %10, i64 noundef 1, i64 noundef %267, ptr noundef %.1178)
  %269 = load i64, ptr %11, align 8, !tbaa !9
  %.not245 = icmp eq i64 %268, %269
  br i1 %.not245, label %403, label %270

270:                                              ; preds = %266
  %271 = load ptr, ptr @stderr, align 8, !tbaa !5
  %272 = tail call ptr @__errno_location() #14
  %273 = load i32, ptr %272, align 4, !tbaa !11
  %274 = call ptr @strerror(i32 noundef %273) #10
  %275 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %271, ptr noundef nonnull @.str.48, ptr noundef %12, ptr noundef %274) #11
  br label %403

.thread294:                                       ; preds = %234, %225, %238
  %276 = icmp slt i32 %.1174, 0
  br i1 %276, label %277, label %280

277:                                              ; preds = %.thread294
  %278 = load ptr, ptr @stderr, align 8, !tbaa !5
  %279 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %278, ptr noundef nonnull @.str.49, ptr noundef %12) #11
  br label %403

280:                                              ; preds = %.thread294
  %.not229 = icmp eq i32 %.1174, 0
  br i1 %.not229, label %342, label %281

281:                                              ; preds = %280
  switch i32 %.1176, label %.thread295 [
    i32 2, label %282
    i32 8, label %284
    i32 9, label %288
    i32 10, label %291
  ]

282:                                              ; preds = %281
  %283 = call i32 @sm4_cbc_encrypt_init(ptr noundef nonnull %8, ptr noundef nonnull %4, ptr noundef nonnull %5) #10
  br label %294

284:                                              ; preds = %281
  %285 = load i64, ptr %7, align 8, !tbaa !9
  %286 = load i64, ptr %3, align 8, !tbaa !9
  %287 = call i32 @sm4_gcm_encrypt_init(ptr noundef nonnull %8, ptr noundef nonnull %4, i64 noundef %226, ptr noundef nonnull %5, i64 noundef %285, ptr noundef %.1193, i64 noundef %286, i64 noundef 16) #10
  br label %294

288:                                              ; preds = %281
  %289 = load i64, ptr %3, align 8, !tbaa !9
  %290 = call i32 @sm4_cbc_sm3_hmac_encrypt_init(ptr noundef nonnull %8, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %.1193, i64 noundef %289) #10
  br label %294

291:                                              ; preds = %281
  %292 = load i64, ptr %3, align 8, !tbaa !9
  %293 = call i32 @sm4_ctr_sm3_hmac_encrypt_init(ptr noundef nonnull %8, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %.1193, i64 noundef %292) #10
  br label %294

294:                                              ; preds = %291, %288, %284, %282
  %.0 = phi i32 [ %293, %291 ], [ %290, %288 ], [ %287, %284 ], [ %283, %282 ]
  %.not236 = icmp eq i32 %.0, 1
  br i1 %.not236, label %.preheader313, label %.thread295

.thread295:                                       ; preds = %281, %294
  %295 = load ptr, ptr @stderr, align 8, !tbaa !5
  %296 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %295, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 592, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

.preheader313:                                    ; preds = %294, %.thread298
  %297 = call i64 @fread(ptr noundef nonnull %9, i64 noundef 1, i64 noundef 4096, ptr noundef %.1181)
  %.not237 = icmp eq i64 %297, 0
  br i1 %.not237, label %320, label %298

298:                                              ; preds = %.preheader313
  switch i32 %.1176, label %.thread298 [
    i32 2, label %299
    i32 8, label %301
    i32 9, label %303
    i32 10, label %305
  ]

299:                                              ; preds = %298
  %300 = call i32 @sm4_cbc_encrypt_update(ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %297, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %307

301:                                              ; preds = %298
  %302 = call i32 @sm4_gcm_encrypt_update(ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %297, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %307

303:                                              ; preds = %298
  %304 = call i32 @sm4_cbc_sm3_hmac_encrypt_update(ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %297, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %307

305:                                              ; preds = %298
  %306 = call i32 @sm4_ctr_sm3_hmac_encrypt_update(ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %297, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %307

307:                                              ; preds = %305, %303, %301, %299
  %.2 = phi i32 [ %306, %305 ], [ %304, %303 ], [ %302, %301 ], [ %300, %299 ]
  %.not240 = icmp eq i32 %.2, 1
  br i1 %.not240, label %.thread298, label %308

308:                                              ; preds = %307
  %309 = load ptr, ptr @stderr, align 8, !tbaa !5
  %310 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %309, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 616, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

.thread298:                                       ; preds = %298, %307
  %311 = load i64, ptr %11, align 8, !tbaa !9
  %312 = call i64 @fwrite(ptr noundef nonnull %10, i64 noundef 1, i64 noundef %311, ptr noundef %.1178)
  %313 = load i64, ptr %11, align 8, !tbaa !9
  %.not241 = icmp eq i64 %312, %313
  br i1 %.not241, label %.preheader313, label %314, !llvm.loop !16

314:                                              ; preds = %.thread298
  %315 = load ptr, ptr @stderr, align 8, !tbaa !5
  %316 = tail call ptr @__errno_location() #14
  %317 = load i32, ptr %316, align 4, !tbaa !11
  %318 = call ptr @strerror(i32 noundef %317) #10
  %319 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %315, ptr noundef nonnull @.str.48, ptr noundef %12, ptr noundef %318) #11
  br label %403

320:                                              ; preds = %.preheader313
  switch i32 %.1176, label %.thread301 [
    i32 2, label %321
    i32 8, label %323
    i32 9, label %325
    i32 10, label %327
  ]

321:                                              ; preds = %320
  %322 = call i32 @sm4_cbc_encrypt_finish(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %329

323:                                              ; preds = %320
  %324 = call i32 @sm4_gcm_encrypt_finish(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %329

325:                                              ; preds = %320
  %326 = call i32 @sm4_cbc_sm3_hmac_encrypt_finish(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %329

327:                                              ; preds = %320
  %328 = call i32 @sm4_ctr_sm3_hmac_encrypt_finish(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %329

329:                                              ; preds = %327, %325, %323, %321
  %.3 = phi i32 [ %328, %327 ], [ %326, %325 ], [ %324, %323 ], [ %322, %321 ]
  %.not238 = icmp eq i32 %.3, 1
  br i1 %.not238, label %.thread301, label %330

330:                                              ; preds = %329
  %331 = load ptr, ptr @stderr, align 8, !tbaa !5
  %332 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %331, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 644, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

.thread301:                                       ; preds = %320, %329
  %333 = load i64, ptr %11, align 8, !tbaa !9
  %334 = call i64 @fwrite(ptr noundef nonnull %10, i64 noundef 1, i64 noundef %333, ptr noundef %.1178)
  %335 = load i64, ptr %11, align 8, !tbaa !9
  %.not239 = icmp eq i64 %334, %335
  br i1 %.not239, label %403, label %336

336:                                              ; preds = %.thread301
  %337 = load ptr, ptr @stderr, align 8, !tbaa !5
  %338 = tail call ptr @__errno_location() #14
  %339 = load i32, ptr %338, align 4, !tbaa !11
  %340 = call ptr @strerror(i32 noundef %339) #10
  %341 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %337, ptr noundef nonnull @.str.48, ptr noundef %12, ptr noundef %340) #11
  br label %403

342:                                              ; preds = %280
  switch i32 %.1176, label %.thread304 [
    i32 2, label %343
    i32 8, label %345
    i32 9, label %349
    i32 10, label %352
  ]

343:                                              ; preds = %342
  %344 = call i32 @sm4_cbc_decrypt_init(ptr noundef nonnull %8, ptr noundef nonnull %4, ptr noundef nonnull %5) #10
  br label %355

345:                                              ; preds = %342
  %346 = load i64, ptr %7, align 8, !tbaa !9
  %347 = load i64, ptr %3, align 8, !tbaa !9
  %348 = call i32 @sm4_gcm_decrypt_init(ptr noundef nonnull %8, ptr noundef nonnull %4, i64 noundef %226, ptr noundef nonnull %5, i64 noundef %346, ptr noundef %.1193, i64 noundef %347, i64 noundef 16) #10
  br label %355

349:                                              ; preds = %342
  %350 = load i64, ptr %3, align 8, !tbaa !9
  %351 = call i32 @sm4_cbc_sm3_hmac_decrypt_init(ptr noundef nonnull %8, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %.1193, i64 noundef %350) #10
  br label %355

352:                                              ; preds = %342
  %353 = load i64, ptr %3, align 8, !tbaa !9
  %354 = call i32 @sm4_ctr_sm3_hmac_decrypt_init(ptr noundef nonnull %8, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef %.1193, i64 noundef %353) #10
  br label %355

355:                                              ; preds = %352, %349, %345, %343
  %.4 = phi i32 [ %354, %352 ], [ %351, %349 ], [ %348, %345 ], [ %344, %343 ]
  %.not230 = icmp eq i32 %.4, 1
  br i1 %.not230, label %.preheader, label %.thread304

.thread304:                                       ; preds = %342, %355
  %356 = load ptr, ptr @stderr, align 8, !tbaa !5
  %357 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %356, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 672, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

.preheader:                                       ; preds = %355, %.thread307
  %358 = call i64 @fread(ptr noundef nonnull %9, i64 noundef 1, i64 noundef 4096, ptr noundef %.1181)
  %.not231 = icmp eq i64 %358, 0
  br i1 %.not231, label %381, label %359

359:                                              ; preds = %.preheader
  switch i32 %.1176, label %.thread307 [
    i32 2, label %360
    i32 8, label %362
    i32 9, label %364
    i32 10, label %366
  ]

360:                                              ; preds = %359
  %361 = call i32 @sm4_cbc_decrypt_update(ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %358, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %368

362:                                              ; preds = %359
  %363 = call i32 @sm4_gcm_decrypt_update(ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %358, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %368

364:                                              ; preds = %359
  %365 = call i32 @sm4_cbc_sm3_hmac_decrypt_update(ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %358, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %368

366:                                              ; preds = %359
  %367 = call i32 @sm4_ctr_sm3_hmac_decrypt_update(ptr noundef nonnull %8, ptr noundef nonnull %9, i64 noundef %358, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %368

368:                                              ; preds = %366, %364, %362, %360
  %.6 = phi i32 [ %367, %366 ], [ %365, %364 ], [ %363, %362 ], [ %361, %360 ]
  %.not234 = icmp eq i32 %.6, 1
  br i1 %.not234, label %.thread307, label %369

369:                                              ; preds = %368
  %370 = load ptr, ptr @stderr, align 8, !tbaa !5
  %371 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %370, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 696, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

.thread307:                                       ; preds = %359, %368
  %372 = load i64, ptr %11, align 8, !tbaa !9
  %373 = call i64 @fwrite(ptr noundef nonnull %10, i64 noundef 1, i64 noundef %372, ptr noundef %.1178)
  %374 = load i64, ptr %11, align 8, !tbaa !9
  %.not235 = icmp eq i64 %373, %374
  br i1 %.not235, label %.preheader, label %375, !llvm.loop !17

375:                                              ; preds = %.thread307
  %376 = load ptr, ptr @stderr, align 8, !tbaa !5
  %377 = tail call ptr @__errno_location() #14
  %378 = load i32, ptr %377, align 4, !tbaa !11
  %379 = call ptr @strerror(i32 noundef %378) #10
  %380 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %376, ptr noundef nonnull @.str.48, ptr noundef %12, ptr noundef %379) #11
  br label %403

381:                                              ; preds = %.preheader
  switch i32 %.1176, label %.thread310 [
    i32 2, label %382
    i32 8, label %384
    i32 9, label %386
    i32 10, label %388
  ]

382:                                              ; preds = %381
  %383 = call i32 @sm4_cbc_decrypt_finish(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %390

384:                                              ; preds = %381
  %385 = call i32 @sm4_gcm_decrypt_finish(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %390

386:                                              ; preds = %381
  %387 = call i32 @sm4_cbc_sm3_hmac_decrypt_finish(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %390

388:                                              ; preds = %381
  %389 = call i32 @sm4_ctr_sm3_hmac_decrypt_finish(ptr noundef nonnull %8, ptr noundef nonnull %10, ptr noundef nonnull %11) #10
  br label %390

390:                                              ; preds = %388, %386, %384, %382
  %.7 = phi i32 [ %389, %388 ], [ %387, %386 ], [ %385, %384 ], [ %383, %382 ]
  %.not232 = icmp eq i32 %.7, 1
  br i1 %.not232, label %.thread310, label %391

391:                                              ; preds = %390
  %392 = load ptr, ptr @stderr, align 8, !tbaa !5
  %393 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %392, ptr noundef nonnull @.str.30, ptr noundef nonnull @.str.31, i32 noundef 725, ptr noundef nonnull @__FUNCTION__.sm4_main) #11
  br label %403

.thread310:                                       ; preds = %381, %390
  %394 = load i64, ptr %11, align 8, !tbaa !9
  %395 = call i64 @fwrite(ptr noundef nonnull %10, i64 noundef 1, i64 noundef %394, ptr noundef %.1178)
  %396 = load i64, ptr %11, align 8, !tbaa !9
  %.not233 = icmp eq i64 %395, %396
  br i1 %.not233, label %403, label %397

397:                                              ; preds = %.thread310
  %398 = load ptr, ptr @stderr, align 8, !tbaa !5
  %399 = tail call ptr @__errno_location() #14
  %400 = load i32, ptr %399, align 4, !tbaa !11
  %401 = call ptr @strerror(i32 noundef %400) #10
  %402 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %398, ptr noundef nonnull @.str.48, ptr noundef %12, ptr noundef %401) #11
  br label %403

403:                                              ; preds = %.thread301, %.thread310, %266, %397, %391, %375, %369, %.thread304, %336, %330, %314, %308, %.thread295, %277, %270, %263, %255, %248, %242, %235, %229, %222, %217, %212, %208, %204, %.loopexit, %193, %187, %172, %160, %147, %135, %130, %74, %67, %60, %55, %42, %37, %22
  %.0197 = phi i32 [ 1, %193 ], [ 1, %.loopexit ], [ 1, %187 ], [ 1, %172 ], [ 1, %160 ], [ 1, %147 ], [ 1, %135 ], [ 1, %130 ], [ 1, %74 ], [ 1, %67 ], [ 1, %55 ], [ 1, %60 ], [ 1, %37 ], [ 1, %42 ], [ 0, %22 ], [ 1, %212 ], [ 1, %242 ], [ 1, %248 ], [ 1, %255 ], [ 1, %263 ], [ 1, %270 ], [ 1, %277 ], [ 1, %.thread295 ], [ 1, %308 ], [ 1, %314 ], [ 1, %330 ], [ 1, %336 ], [ 1, %.thread304 ], [ 1, %369 ], [ 1, %375 ], [ 1, %391 ], [ 1, %397 ], [ 1, %235 ], [ 1, %229 ], [ 1, %222 ], [ 1, %217 ], [ 1, %208 ], [ 1, %204 ], [ 0, %266 ], [ 0, %.thread310 ], [ 0, %.thread301 ]
  %.2191 = phi ptr [ %.0189518, %193 ], [ %.0189518, %.loopexit ], [ %.0189518, %187 ], [ %.0189518, %172 ], [ %.0189518, %160 ], [ %.0189518, %147 ], [ %129, %135 ], [ null, %130 ], [ %.0189518, %74 ], [ %.0189518, %67 ], [ %.0189518, %55 ], [ %.0189518, %60 ], [ %.0189518, %37 ], [ %.0189518, %42 ], [ %.0189518, %22 ], [ %.1190, %212 ], [ %.1190, %242 ], [ %.1190, %248 ], [ %.1190, %255 ], [ %.1190, %263 ], [ %.1190, %270 ], [ %.1190, %277 ], [ %.1190, %.thread295 ], [ %.1190, %308 ], [ %.1190, %314 ], [ %.1190, %330 ], [ %.1190, %336 ], [ %.1190, %.thread304 ], [ %.1190, %369 ], [ %.1190, %375 ], [ %.1190, %391 ], [ %.1190, %397 ], [ %.1190, %235 ], [ %.1190, %229 ], [ %.1190, %222 ], [ %.1190, %217 ], [ %.1190, %208 ], [ %.1190, %204 ], [ %.1190, %266 ], [ %.1190, %.thread310 ], [ %.1190, %.thread301 ]
  %.2188 = phi ptr [ %.0186519, %193 ], [ %.0186519, %.loopexit ], [ %.0186519, %187 ], [ %170, %172 ], [ %.0186519, %160 ], [ %.0186519, %147 ], [ %.0186519, %135 ], [ %.0186519, %130 ], [ %.0186519, %74 ], [ %.0186519, %67 ], [ %.0186519, %55 ], [ %.0186519, %60 ], [ %.0186519, %37 ], [ %.0186519, %42 ], [ %.0186519, %22 ], [ %.1187, %212 ], [ %.1187, %242 ], [ %.1187, %248 ], [ %.1187, %255 ], [ %.1187, %263 ], [ %.1187, %270 ], [ %.1187, %277 ], [ %.1187, %.thread295 ], [ %.1187, %308 ], [ %.1187, %314 ], [ %.1187, %330 ], [ %.1187, %336 ], [ %.1187, %.thread304 ], [ %.1187, %369 ], [ %.1187, %375 ], [ %.1187, %391 ], [ %.1187, %397 ], [ %.1187, %235 ], [ %.1187, %229 ], [ %.1187, %222 ], [ %.1187, %217 ], [ %.1187, %208 ], [ %.1187, %204 ], [ %.1187, %266 ], [ %.1187, %.thread310 ], [ %.1187, %.thread301 ]
  %.2185 = phi ptr [ %.0183520, %193 ], [ %.0183520, %.loopexit ], [ %185, %187 ], [ %.0183520, %172 ], [ %.0183520, %160 ], [ %.0183520, %147 ], [ %.0183520, %135 ], [ %.0183520, %130 ], [ %.0183520, %74 ], [ %.0183520, %67 ], [ %.0183520, %55 ], [ %.0183520, %60 ], [ %.0183520, %37 ], [ %.0183520, %42 ], [ %.0183520, %22 ], [ %.1184, %212 ], [ %.1184, %242 ], [ %.1184, %248 ], [ %.1184, %255 ], [ %.1184, %263 ], [ %.1184, %270 ], [ %.1184, %277 ], [ %.1184, %.thread295 ], [ %.1184, %308 ], [ %.1184, %314 ], [ %.1184, %330 ], [ %.1184, %336 ], [ %.1184, %.thread304 ], [ %.1184, %369 ], [ %.1184, %375 ], [ %.1184, %391 ], [ %.1184, %397 ], [ %.1184, %235 ], [ %.1184, %229 ], [ %.1184, %222 ], [ %.1184, %217 ], [ %.1184, %208 ], [ %.1184, %204 ], [ %.1184, %266 ], [ %.1184, %.thread310 ], [ %.1184, %.thread301 ]
  %.2182 = phi ptr [ %.0180521, %193 ], [ %.0180521, %.loopexit ], [ %.0180521, %187 ], [ null, %172 ], [ %.0180521, %160 ], [ %.0180521, %147 ], [ %.0180521, %135 ], [ %.0180521, %130 ], [ %.0180521, %74 ], [ %.0180521, %67 ], [ %.0180521, %55 ], [ %.0180521, %60 ], [ %.0180521, %37 ], [ %.0180521, %42 ], [ %.0180521, %22 ], [ %.1181, %212 ], [ %.1181, %242 ], [ %.1181, %248 ], [ %.1181, %255 ], [ %.1181, %263 ], [ %.1181, %270 ], [ %.1181, %277 ], [ %.1181, %.thread295 ], [ %.1181, %308 ], [ %.1181, %314 ], [ %.1181, %330 ], [ %.1181, %336 ], [ %.1181, %.thread304 ], [ %.1181, %369 ], [ %.1181, %375 ], [ %.1181, %391 ], [ %.1181, %397 ], [ %.1181, %235 ], [ %.1181, %229 ], [ %.1181, %222 ], [ %.1181, %217 ], [ %.1181, %208 ], [ %.1181, %204 ], [ %.1181, %266 ], [ %.1181, %.thread310 ], [ %.1181, %.thread301 ]
  %.2179 = phi ptr [ %.0177522, %193 ], [ %.0177522, %.loopexit ], [ null, %187 ], [ %.0177522, %172 ], [ %.0177522, %160 ], [ %.0177522, %147 ], [ %.0177522, %135 ], [ %.0177522, %130 ], [ %.0177522, %74 ], [ %.0177522, %67 ], [ %.0177522, %55 ], [ %.0177522, %60 ], [ %.0177522, %37 ], [ %.0177522, %42 ], [ %.0177522, %22 ], [ %.1178, %212 ], [ %.1178, %242 ], [ %.1178, %248 ], [ %.1178, %255 ], [ %.1178, %263 ], [ %.1178, %270 ], [ %.1178, %277 ], [ %.1178, %.thread295 ], [ %.1178, %308 ], [ %.1178, %314 ], [ %.1178, %330 ], [ %.1178, %336 ], [ %.1178, %.thread304 ], [ %.1178, %369 ], [ %.1178, %375 ], [ %.1178, %391 ], [ %.1178, %397 ], [ %.1178, %235 ], [ %.1178, %229 ], [ %.1178, %222 ], [ %.1178, %217 ], [ %.1178, %208 ], [ %.1178, %204 ], [ %.1178, %266 ], [ %.1178, %.thread310 ], [ %.1178, %.thread301 ]
  call void @gmssl_secure_clear(ptr noundef nonnull %8, i64 noundef 384) #10
  call void @gmssl_secure_clear(ptr noundef nonnull %4, i64 noundef 48) #10
  call void @gmssl_secure_clear(ptr noundef nonnull %5, i64 noundef 64) #10
  call void @gmssl_secure_clear(ptr noundef nonnull %9, i64 noundef 4096) #10
  call void @gmssl_secure_clear(ptr noundef nonnull %10, i64 noundef 41960) #10
  %.not287 = icmp eq ptr %.2191, null
  br i1 %.not287, label %406, label %404

404:                                              ; preds = %403
  %405 = load i64, ptr %3, align 8, !tbaa !9
  call void @gmssl_secure_clear(ptr noundef nonnull %.2191, i64 noundef %405) #10
  call void @free(ptr noundef nonnull %.2191) #10
  br label %406

406:                                              ; preds = %404, %403
  %407 = icmp ne ptr %.2188, null
  %408 = icmp ne ptr %.2182, null
  %or.cond3 = select i1 %407, i1 %408, i1 false
  br i1 %or.cond3, label %409, label %411

409:                                              ; preds = %406
  %410 = call i32 @fclose(ptr noundef nonnull %.2182)
  br label %411

411:                                              ; preds = %409, %406
  %412 = icmp ne ptr %.2185, null
  %413 = icmp ne ptr %.2179, null
  %or.cond5 = select i1 %412, i1 %413, i1 false
  br i1 %or.cond5, label %414, label %416

414:                                              ; preds = %411
  %415 = call i32 @fclose(ptr noundef nonnull %.2179)
  br label %416

416:                                              ; preds = %411, %414, %16
  %.0196 = phi i32 [ 1, %16 ], [ %.0197, %414 ], [ %.0197, %411 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #10
  call void @llvm.lifetime.end.p0(i64 41960, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %9) #10
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %8) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #10
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %5) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #10
  ret i32 %.0196
}

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i32 @strcmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #3

; Function Attrs: nofree nounwind
declare noundef i32 @printf(ptr nocapture noundef readonly, ...) local_unnamed_addr #2

; Function Attrs: mustprogress nofree nounwind willreturn memory(argmem: read)
declare i64 @strlen(ptr nocapture noundef) local_unnamed_addr #3

declare i32 @hex_to_bytes(ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #5

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare i32 @atoi(ptr nocapture noundef nonnull) local_unnamed_addr #6

; Function Attrs: nofree nounwind
declare noalias noundef ptr @fopen(ptr nocapture noundef readonly, ptr nocapture noundef readonly) local_unnamed_addr #2

; Function Attrs: nounwind
declare ptr @strerror(i32 noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nofree nosync nounwind willreturn memory(none)
declare ptr @__errno_location() local_unnamed_addr #8

declare i32 @sm4_ctr_encrypt_init(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef i64 @fread(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #2

declare i32 @sm4_ctr_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nofree nounwind
declare noundef i64 @fwrite(ptr nocapture noundef, i64 noundef, i64 noundef, ptr nocapture noundef) local_unnamed_addr #2

declare i32 @sm4_ctr_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_encrypt_init(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_gcm_encrypt_init(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_sm3_hmac_encrypt_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

declare i32 @sm4_ctr_sm3_hmac_encrypt_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_gcm_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_sm3_hmac_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_ctr_sm3_hmac_encrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_gcm_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_sm3_hmac_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_ctr_sm3_hmac_encrypt_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_decrypt_init(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_gcm_decrypt_init(ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_sm3_hmac_decrypt_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

declare i32 @sm4_ctr_sm3_hmac_decrypt_init(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_decrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_gcm_decrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_sm3_hmac_decrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_ctr_sm3_hmac_decrypt_update(ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_decrypt_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_gcm_decrypt_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_cbc_sm3_hmac_decrypt_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @sm4_ctr_sm3_hmac_decrypt_finish(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare void @gmssl_secure_clear(ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #9

; Function Attrs: nofree nounwind
declare noundef i32 @fclose(ptr nocapture noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nofree nounwind willreturn memory(argmem: read) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #8 = { mustprogress nofree nosync nounwind willreturn memory(none) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #10 = { nounwind }
attributes #11 = { cold nounwind }
attributes #12 = { nounwind willreturn memory(read) }
attributes #13 = { nounwind allocsize(0) }
attributes #14 = { nounwind willreturn memory(none) }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass