; LLVM IR from guanzhi/GmSSL :: src (tls13)

; 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"

%struct.SM2_KEY = type { %struct.SM2_Z256_POINT, [4 x i64] }
%struct.SM2_Z256_POINT = type { [4 x i64], [4 x i64], [4 x i64] }
%struct.DIGEST_CTX = type { %union.anon.0, ptr }
%union.anon.0 = type { %struct.SM3_CTX }
%struct.SM3_CTX = type { [8 x i32], i64, [64 x i8], i64 }
%struct.TLS_CONNECT = type { i32, i32, [64 x i32], i64, i32, [18437 x i8], i64, [18437 x i8], [18437 x i8], ptr, i64, i32, [32 x i8], i64, [2048 x i8], i64, [2048 x i8], i64, [2048 x i8], i64, %struct.SM2_KEY, %struct.SM2_KEY, i32, [48 x i8], [96 x i8], %struct.SM3_HMAC_CTX, %struct.SM3_HMAC_CTX, %struct.SM4_KEY, %struct.SM4_KEY, [8 x i8], [8 x i8], [12 x i8], [12 x i8], %struct.BLOCK_CIPHER_KEY, %struct.BLOCK_CIPHER_KEY, i32 }
%struct.SM3_HMAC_CTX = type { %struct.SM3_CTX, [64 x i8] }
%struct.SM4_KEY = type { [32 x i32] }
%struct.BLOCK_CIPHER_KEY = type { %union.anon, ptr }
%union.anon = type { %struct.SM4_KEY }

@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [59 x i8], align 1
@__const.tls13_do_connect.protocols = external hidden unnamed_addr constant [1 x i32], align 4
@__const.tls13_do_connect.supported_groups = external hidden unnamed_addr constant [1 x i32], align 4
@__const.tls13_do_connect.sign_algors = external hidden unnamed_addr constant [1 x i32], align 4
@tls13_ciphers = external hidden constant [1 x i32], align 4
@__FUNCTION__.tls13_do_connect = external hidden unnamed_addr constant [17 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [24 x i8], align 1

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #3

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_encrypt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_decrypt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

declare i32 @tls_record_send(ptr noundef, i64 noundef, i32 noundef) #5

declare i32 @tls_seq_num_incr(ptr noundef) #5

declare i32 @tls_record_recv(ptr noundef, ptr noundef, i32 noundef) #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_hkdf_extract(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_hkdf_expand_label(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_derive_secret(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_sign_certificate_verify(i32 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef) #4

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_verify_certificate_verify(i32 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_compute_verify_data(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_client_hello_exts_set(ptr noundef, ptr noundef, i64 noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_server_hello_extensions_get(ptr noundef, i64 noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_encrypted_extensions(ptr noundef) #4

declare i32 @tls_record_get_handshake(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_set_handshake_certificate_verify(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i64 noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_certificate_verify(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_certificate_request(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_process_certificate_list(ptr noundef, i64 noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_set_handshake_certificate(ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_certificate(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_finished(ptr noundef, ptr noundef, ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_padding_len_rand(ptr noundef) #4

declare i32 @rand_bytes(ptr noundef, i64 noundef) #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_cipher_suite_get(i32 noundef, ptr noundef, ptr noundef) #4

declare ptr @DIGEST_sm3() #5

; Function Attrs: nounwind uwtable
define dso_local i32 @tls13_do_connect(ptr noundef %0) #4 {
  %2 = alloca i32, align 4
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca i64, align 8
  %8 = alloca i64, align 8
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca i64, align 8
  %12 = alloca i32, align 4
  %13 = alloca [32 x i8], align 16
  %14 = alloca [32 x i8], align 16
  %15 = alloca i32, align 4
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca i64, align 8
  %19 = alloca [1 x i32], align 4
  %20 = alloca [1 x i32], align 4
  %21 = alloca [1 x i32], align 4
  %22 = alloca [512 x i8], align 16
  %23 = alloca i64, align 8
  %24 = alloca ptr, align 8
  %25 = alloca i64, align 8
  %26 = alloca [72 x i8], align 16
  %27 = alloca i64, align 8
  %28 = alloca [32 x i8], align 16
  %29 = alloca i64, align 8
  %30 = alloca i32, align 4
  %31 = alloca ptr, align 8
  %32 = alloca i64, align 8
  %33 = alloca ptr, align 8
  %34 = alloca i64, align 8
  %35 = alloca %struct.SM2_KEY, align 8
  %36 = alloca %struct.SM2_Z256_POINT, align 8
  %37 = alloca %struct.SM2_KEY, align 8
  %38 = alloca ptr, align 8
  %39 = alloca %struct.DIGEST_CTX, align 8
  %40 = alloca %struct.DIGEST_CTX, align 8
  %41 = alloca ptr, align 8
  %42 = alloca i64, align 8
  %43 = alloca [32 x i8], align 16
  %44 = alloca [32 x i8], align 16
  %45 = alloca [32 x i8], align 16
  %46 = alloca [32 x i8], align 16
  %47 = alloca [32 x i8], align 16
  %48 = alloca [32 x i8], align 16
  %49 = alloca [32 x i8], align 16
  %50 = alloca [32 x i8], align 16
  %51 = alloca [32 x i8], align 16
  %52 = alloca [16 x i8], align 16
  %53 = alloca [16 x i8], align 16
  %54 = alloca ptr, align 8
  %55 = alloca i64, align 8
  %56 = alloca ptr, align 8
  %57 = alloca i64, align 8
  %58 = alloca ptr, align 8
  %59 = alloca i64, align 8
  %60 = alloca ptr, align 8
  %61 = alloca i64, align 8
  %62 = alloca [64 x i8], align 16
  %63 = alloca i32, align 4
  %64 = alloca i32, align 4
  %65 = alloca [72 x i8], align 16
  %66 = alloca i64, align 8
  %67 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #7
  store i32 -1, ptr %4, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #7
  %68 = load ptr, ptr %3, align 8, !tbaa !5
  %69 = getelementptr inbounds %struct.TLS_CONNECT, ptr %68, i32 0, i32 7
  %70 = getelementptr inbounds [18437 x i8], ptr %69, i64 0, i64 0
  store ptr %70, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #7
  %71 = load ptr, ptr %3, align 8, !tbaa !5
  %72 = getelementptr inbounds %struct.TLS_CONNECT, ptr %71, i32 0, i32 5
  %73 = getelementptr inbounds [18437 x i8], ptr %72, i64 0, i64 0
  store ptr %73, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %19, ptr align 4 @__const.tls13_do_connect.protocols, i64 4, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %20, ptr align 4 @__const.tls13_do_connect.supported_groups, i64 4, i1 false)
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #7
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %21, ptr align 4 @__const.tls13_do_connect.sign_algors, i64 4, i1 false)
  call void @llvm.lifetime.start.p0(i64 512, ptr %22) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 72, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  store i64 72, ptr %27, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 32, ptr %28) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.start.p0(i64 128, ptr %35) #7
  call void @llvm.lifetime.start.p0(i64 96, ptr %36) #7
  call void @llvm.lifetime.start.p0(i64 128, ptr %37) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #7
  %74 = call ptr @DIGEST_sm3()
  store ptr %74, ptr %38, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 120, ptr %39) #7
  call void @llvm.lifetime.start.p0(i64 120, ptr %40) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #7
  store ptr null, ptr %41, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %43) #7
  call void @llvm.memset.p0.i64(ptr align 16 %43, i8 0, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 32, ptr %44) #7
  call void @llvm.memset.p0.i64(ptr align 16 %44, i8 0, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 32, ptr %45) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %46) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %49) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %50) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr %51) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %52) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr %53) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %55) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %56) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %57) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #7
  %75 = load ptr, ptr %3, align 8, !tbaa !5
  %76 = getelementptr inbounds %struct.TLS_CONNECT, ptr %75, i32 0, i32 1
  store i32 1, ptr %76, align 4, !tbaa !13
  %77 = load ptr, ptr %6, align 8, !tbaa !5
  %78 = call i32 @tls_record_set_protocol(ptr noundef %77, i32 noundef 771)
  %79 = load ptr, ptr %38, align 8, !tbaa !5
  %80 = call i32 @digest_init(ptr noundef %39, ptr noundef %79)
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %40, ptr align 8 %39, i64 120, i1 false), !tbaa.struct !21
  %81 = load ptr, ptr %5, align 8, !tbaa !5
  %82 = call i32 @tls_record_set_protocol(ptr noundef %81, i32 noundef 769)
  %83 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 0
  %84 = call i32 @rand_bytes(ptr noundef %83, i64 noundef 32)
  %85 = call i32 @sm2_key_generate(ptr noundef %35)
  %86 = getelementptr inbounds [512 x i8], ptr %22, i64 0, i64 0
  %87 = getelementptr inbounds %struct.SM2_KEY, ptr %35, i32 0, i32 0
  %88 = call i32 @tls13_client_hello_exts_set(ptr noundef %86, ptr noundef %23, i64 noundef 512, ptr noundef %87)
  %89 = load ptr, ptr %5, align 8, !tbaa !5
  %90 = getelementptr inbounds [32 x i8], ptr %13, i64 0, i64 0
  %91 = getelementptr inbounds [512 x i8], ptr %22, i64 0, i64 0
  %92 = load i64, ptr %23, align 8, !tbaa !11
  %93 = call i32 @tls_record_set_handshake_client_hello(ptr noundef %89, ptr noundef %7, i32 noundef 771, ptr noundef %90, ptr noundef null, i64 noundef 0, ptr noundef @tls13_ciphers, i64 noundef 1, ptr noundef %91, i64 noundef %92)
  %94 = load ptr, ptr %5, align 8, !tbaa !5
  %95 = load i64, ptr %7, align 8, !tbaa !11
  %96 = load ptr, ptr %3, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.TLS_CONNECT, ptr %96, i32 0, i32 4
  %98 = load i32, ptr %97, align 8, !tbaa !23
  %99 = call i32 @tls_record_send(ptr noundef %94, i64 noundef %95, i32 noundef %98)
  %100 = icmp ne i32 %99, 1
  br i1 %100, label %101, label %107

101:                                              ; preds = %1
  br label %102

102:                                              ; preds = %101
  %103 = load ptr, ptr @stderr, align 8, !tbaa !5
  %104 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %103, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1550, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %105

105:                                              ; preds = %102
  br label %106

106:                                              ; preds = %105
  br label %939

107:                                              ; preds = %1
  %108 = load ptr, ptr %6, align 8, !tbaa !5
  %109 = load ptr, ptr %3, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.TLS_CONNECT, ptr %109, i32 0, i32 4
  %111 = load i32, ptr %110, align 8, !tbaa !23
  %112 = call i32 @tls_record_recv(ptr noundef %108, ptr noundef %8, i32 noundef %111)
  %113 = icmp ne i32 %112, 1
  br i1 %113, label %114, label %122

114:                                              ; preds = %107
  br label %115

115:                                              ; preds = %114
  %116 = load ptr, ptr @stderr, align 8, !tbaa !5
  %117 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %116, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1559, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %118

118:                                              ; preds = %115
  br label %119

119:                                              ; preds = %118
  %120 = load ptr, ptr %3, align 8, !tbaa !5
  %121 = call i32 @tls_send_alert(ptr noundef %120, i32 noundef 10)
  br label %939

122:                                              ; preds = %107
  %123 = load ptr, ptr %6, align 8, !tbaa !5
  %124 = call i32 @tls_record_get_handshake_server_hello(ptr noundef %123, ptr noundef %12, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %15, ptr noundef %24, ptr noundef %25)
  %125 = icmp ne i32 %124, 1
  br i1 %125, label %126, label %134

126:                                              ; preds = %122
  br label %127

127:                                              ; preds = %126
  %128 = load ptr, ptr @stderr, align 8, !tbaa !5
  %129 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %128, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1567, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %130

130:                                              ; preds = %127
  br label %131

131:                                              ; preds = %130
  %132 = load ptr, ptr %3, align 8, !tbaa !5
  %133 = call i32 @tls_send_alert(ptr noundef %132, i32 noundef 10)
  br label %939

134:                                              ; preds = %122
  %135 = load i32, ptr %12, align 4, !tbaa !9
  %136 = icmp ne i32 %135, 771
  br i1 %136, label %137, label %145

137:                                              ; preds = %134
  br label %138

138:                                              ; preds = %137
  %139 = load ptr, ptr @stderr, align 8, !tbaa !5
  %140 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %139, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1572, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %141

141:                                              ; preds = %138
  br label %142

142:                                              ; preds = %141
  %143 = load ptr, ptr %3, align 8, !tbaa !5
  %144 = call i32 @tls_send_alert(ptr noundef %143, i32 noundef 70)
  br label %939

145:                                              ; preds = %134
  %146 = getelementptr inbounds [32 x i8], ptr %14, i64 0, i64 0
  %147 = load ptr, ptr %16, align 8, !tbaa !5
  call void @llvm.memcpy.p0.p0.i64(ptr align 16 %146, ptr align 1 %147, i64 32, i1 false)
  %148 = load ptr, ptr %3, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.TLS_CONNECT, ptr %148, i32 0, i32 12
  %150 = getelementptr inbounds [32 x i8], ptr %149, i64 0, i64 0
  %151 = load ptr, ptr %17, align 8, !tbaa !5
  %152 = load i64, ptr %18, align 8, !tbaa !11
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %150, ptr align 1 %151, i64 %152, i1 false)
  %153 = load i64, ptr %18, align 8, !tbaa !11
  %154 = load ptr, ptr %3, align 8, !tbaa !5
  %155 = getelementptr inbounds %struct.TLS_CONNECT, ptr %154, i32 0, i32 13
  store i64 %153, ptr %155, align 8, !tbaa !24
  %156 = load i32, ptr %15, align 4, !tbaa !9
  %157 = call i32 @tls_cipher_suite_in_list(i32 noundef %156, ptr noundef @tls13_ciphers, i64 noundef 1)
  %158 = icmp ne i32 %157, 1
  br i1 %158, label %159, label %167

159:                                              ; preds = %145
  br label %160

160:                                              ; preds = %159
  %161 = load ptr, ptr @stderr, align 8, !tbaa !5
  %162 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %161, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1581, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %163

163:                                              ; preds = %160
  br label %164

164:                                              ; preds = %163
  %165 = load ptr, ptr %3, align 8, !tbaa !5
  %166 = call i32 @tls_send_alert(ptr noundef %165, i32 noundef 40)
  br label %939

167:                                              ; preds = %145
  %168 = load i32, ptr %15, align 4, !tbaa !9
  %169 = load ptr, ptr %3, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.TLS_CONNECT, ptr %169, i32 0, i32 11
  store i32 %168, ptr %170, align 8, !tbaa !25
  %171 = load ptr, ptr %24, align 8, !tbaa !5
  %172 = load i64, ptr %25, align 8, !tbaa !11
  %173 = call i32 @tls13_server_hello_extensions_get(ptr noundef %171, i64 noundef %172, ptr noundef %36)
  %174 = icmp ne i32 %173, 1
  br i1 %174, label %175, label %183

175:                                              ; preds = %167
  br label %176

176:                                              ; preds = %175
  %177 = load ptr, ptr @stderr, align 8, !tbaa !5
  %178 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %177, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1587, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %179

179:                                              ; preds = %176
  br label %180

180:                                              ; preds = %179
  %181 = load ptr, ptr %3, align 8, !tbaa !5
  %182 = call i32 @tls_send_alert(ptr noundef %181, i32 noundef 40)
  br label %939

183:                                              ; preds = %167
  %184 = load ptr, ptr %3, align 8, !tbaa !5
  %185 = getelementptr inbounds %struct.TLS_CONNECT, ptr %184, i32 0, i32 0
  store i32 772, ptr %185, align 8, !tbaa !26
  %186 = load ptr, ptr %3, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.TLS_CONNECT, ptr %186, i32 0, i32 11
  %188 = load i32, ptr %187, align 8, !tbaa !25
  %189 = call i32 @tls13_cipher_suite_get(i32 noundef %188, ptr noundef %38, ptr noundef %41)
  %190 = load ptr, ptr %5, align 8, !tbaa !5
  %191 = getelementptr inbounds i8, ptr %190, i64 5
  %192 = load i64, ptr %7, align 8, !tbaa !11
  %193 = sub i64 %192, 5
  %194 = call i32 @digest_update(ptr noundef %39, ptr noundef %191, i64 noundef %193)
  %195 = load ptr, ptr %6, align 8, !tbaa !5
  %196 = getelementptr inbounds i8, ptr %195, i64 5
  %197 = load i64, ptr %8, align 8, !tbaa !11
  %198 = sub i64 %197, 5
  %199 = call i32 @digest_update(ptr noundef %39, ptr noundef %196, i64 noundef %198)
  %200 = call i32 (ptr, ...) @printf(ptr noundef @.str.15)
  %201 = call i32 @sm2_do_ecdh(ptr noundef %35, ptr noundef %36, ptr noundef %36)
  %202 = getelementptr inbounds [64 x i8], ptr %62, i64 0, i64 0
  %203 = call i32 @sm2_z256_point_to_bytes(ptr noundef %36, ptr noundef %202)
  %204 = load ptr, ptr %38, align 8, !tbaa !5
  %205 = getelementptr inbounds [32 x i8], ptr %43, i64 0, i64 0
  %206 = getelementptr inbounds [32 x i8], ptr %44, i64 0, i64 0
  %207 = getelementptr inbounds [32 x i8], ptr %45, i64 0, i64 0
  %208 = call i32 @tls13_hkdf_extract(ptr noundef %204, ptr noundef %205, ptr noundef %206, ptr noundef %207)
  %209 = getelementptr inbounds [32 x i8], ptr %45, i64 0, i64 0
  %210 = getelementptr inbounds [32 x i8], ptr %46, i64 0, i64 0
  %211 = call i32 @tls13_derive_secret(ptr noundef %209, ptr noundef @.str.16, ptr noundef %40, ptr noundef %210)
  %212 = load ptr, ptr %38, align 8, !tbaa !5
  %213 = getelementptr inbounds [32 x i8], ptr %46, i64 0, i64 0
  %214 = getelementptr inbounds [64 x i8], ptr %62, i64 0, i64 0
  %215 = getelementptr inbounds [32 x i8], ptr %46, i64 0, i64 0
  %216 = call i32 @tls13_hkdf_extract(ptr noundef %212, ptr noundef %213, ptr noundef %214, ptr noundef %215)
  %217 = getelementptr inbounds [32 x i8], ptr %46, i64 0, i64 0
  %218 = getelementptr inbounds [32 x i8], ptr %48, i64 0, i64 0
  %219 = call i32 @tls13_derive_secret(ptr noundef %217, ptr noundef @.str.17, ptr noundef %39, ptr noundef %218)
  %220 = getelementptr inbounds [32 x i8], ptr %46, i64 0, i64 0
  %221 = getelementptr inbounds [32 x i8], ptr %49, i64 0, i64 0
  %222 = call i32 @tls13_derive_secret(ptr noundef %220, ptr noundef @.str.18, ptr noundef %39, ptr noundef %221)
  %223 = getelementptr inbounds [32 x i8], ptr %46, i64 0, i64 0
  %224 = getelementptr inbounds [32 x i8], ptr %47, i64 0, i64 0
  %225 = call i32 @tls13_derive_secret(ptr noundef %223, ptr noundef @.str.16, ptr noundef %40, ptr noundef %224)
  %226 = load ptr, ptr %38, align 8, !tbaa !5
  %227 = getelementptr inbounds [32 x i8], ptr %47, i64 0, i64 0
  %228 = getelementptr inbounds [32 x i8], ptr %43, i64 0, i64 0
  %229 = getelementptr inbounds [32 x i8], ptr %47, i64 0, i64 0
  %230 = call i32 @tls13_hkdf_extract(ptr noundef %226, ptr noundef %227, ptr noundef %228, ptr noundef %229)
  %231 = load ptr, ptr %38, align 8, !tbaa !5
  %232 = getelementptr inbounds [32 x i8], ptr %49, i64 0, i64 0
  %233 = getelementptr inbounds [16 x i8], ptr %53, i64 0, i64 0
  %234 = call i32 @tls13_hkdf_expand_label(ptr noundef %231, ptr noundef %232, ptr noundef @.str.19, ptr noundef null, i64 noundef 0, i64 noundef 16, ptr noundef %233)
  %235 = load ptr, ptr %38, align 8, !tbaa !5
  %236 = getelementptr inbounds [32 x i8], ptr %49, i64 0, i64 0
  %237 = load ptr, ptr %3, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.TLS_CONNECT, ptr %237, i32 0, i32 32
  %239 = getelementptr inbounds [12 x i8], ptr %238, i64 0, i64 0
  %240 = call i32 @tls13_hkdf_expand_label(ptr noundef %235, ptr noundef %236, ptr noundef @.str.20, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef %239)
  %241 = load ptr, ptr %3, align 8, !tbaa !5
  %242 = getelementptr inbounds %struct.TLS_CONNECT, ptr %241, i32 0, i32 34
  %243 = load ptr, ptr %41, align 8, !tbaa !5
  %244 = getelementptr inbounds [16 x i8], ptr %53, i64 0, i64 0
  %245 = call i32 @block_cipher_set_encrypt_key(ptr noundef %242, ptr noundef %243, ptr noundef %244)
  %246 = load ptr, ptr %3, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.TLS_CONNECT, ptr %246, i32 0, i32 30
  %248 = getelementptr inbounds [8 x i8], ptr %247, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %248, i8 0, i64 8, i1 false)
  %249 = load ptr, ptr %38, align 8, !tbaa !5
  %250 = getelementptr inbounds [32 x i8], ptr %48, i64 0, i64 0
  %251 = getelementptr inbounds [16 x i8], ptr %52, i64 0, i64 0
  %252 = call i32 @tls13_hkdf_expand_label(ptr noundef %249, ptr noundef %250, ptr noundef @.str.19, ptr noundef null, i64 noundef 0, i64 noundef 16, ptr noundef %251)
  %253 = load ptr, ptr %38, align 8, !tbaa !5
  %254 = getelementptr inbounds [32 x i8], ptr %48, i64 0, i64 0
  %255 = load ptr, ptr %3, align 8, !tbaa !5
  %256 = getelementptr inbounds %struct.TLS_CONNECT, ptr %255, i32 0, i32 31
  %257 = getelementptr inbounds [12 x i8], ptr %256, i64 0, i64 0
  %258 = call i32 @tls13_hkdf_expand_label(ptr noundef %253, ptr noundef %254, ptr noundef @.str.20, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef %257)
  %259 = load ptr, ptr %3, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.TLS_CONNECT, ptr %259, i32 0, i32 33
  %261 = load ptr, ptr %41, align 8, !tbaa !5
  %262 = getelementptr inbounds [16 x i8], ptr %52, i64 0, i64 0
  %263 = call i32 @block_cipher_set_encrypt_key(ptr noundef %260, ptr noundef %261, ptr noundef %262)
  %264 = load ptr, ptr %3, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.TLS_CONNECT, ptr %264, i32 0, i32 29
  %266 = getelementptr inbounds [8 x i8], ptr %265, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %266, i8 0, i64 8, i1 false)
  %267 = call i32 (ptr, ...) @printf(ptr noundef @.str.21)
  %268 = load ptr, ptr %6, align 8, !tbaa !5
  %269 = load ptr, ptr %3, align 8, !tbaa !5
  %270 = getelementptr inbounds %struct.TLS_CONNECT, ptr %269, i32 0, i32 4
  %271 = load i32, ptr %270, align 8, !tbaa !23
  %272 = call i32 @tls_record_recv(ptr noundef %268, ptr noundef %8, i32 noundef %271)
  %273 = icmp ne i32 %272, 1
  br i1 %273, label %274, label %282

274:                                              ; preds = %183
  br label %275

275:                                              ; preds = %274
  %276 = load ptr, ptr @stderr, align 8, !tbaa !5
  %277 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %276, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1638, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %278

278:                                              ; preds = %275
  br label %279

279:                                              ; preds = %278
  %280 = load ptr, ptr %3, align 8, !tbaa !5
  %281 = call i32 @tls_send_alert(ptr noundef %280, i32 noundef 40)
  br label %939

282:                                              ; preds = %183
  %283 = load ptr, ptr %3, align 8, !tbaa !5
  %284 = getelementptr inbounds %struct.TLS_CONNECT, ptr %283, i32 0, i32 34
  %285 = load ptr, ptr %3, align 8, !tbaa !5
  %286 = getelementptr inbounds %struct.TLS_CONNECT, ptr %285, i32 0, i32 32
  %287 = getelementptr inbounds [12 x i8], ptr %286, i64 0, i64 0
  %288 = load ptr, ptr %3, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.TLS_CONNECT, ptr %288, i32 0, i32 30
  %290 = getelementptr inbounds [8 x i8], ptr %289, i64 0, i64 0
  %291 = load ptr, ptr %6, align 8, !tbaa !5
  %292 = load i64, ptr %8, align 8, !tbaa !11
  %293 = load ptr, ptr %5, align 8, !tbaa !5
  %294 = call i32 @tls13_record_decrypt(ptr noundef %284, ptr noundef %287, ptr noundef %290, ptr noundef %291, i64 noundef %292, ptr noundef %293, ptr noundef %7)
  %295 = icmp ne i32 %294, 1
  br i1 %295, label %296, label %304

296:                                              ; preds = %282
  br label %297

297:                                              ; preds = %296
  %298 = load ptr, ptr @stderr, align 8, !tbaa !5
  %299 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %298, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1645, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %300

300:                                              ; preds = %297
  br label %301

301:                                              ; preds = %300
  %302 = load ptr, ptr %3, align 8, !tbaa !5
  %303 = call i32 @tls_send_alert(ptr noundef %302, i32 noundef 20)
  br label %939

304:                                              ; preds = %282
  %305 = load ptr, ptr %5, align 8, !tbaa !5
  %306 = call i32 @tls13_record_get_handshake_encrypted_extensions(ptr noundef %305)
  %307 = icmp ne i32 %306, 1
  br i1 %307, label %308, label %316

308:                                              ; preds = %304
  %309 = load ptr, ptr %3, align 8, !tbaa !5
  %310 = call i32 @tls_send_alert(ptr noundef %309, i32 noundef 40)
  br label %311

311:                                              ; preds = %308
  %312 = load ptr, ptr @stderr, align 8, !tbaa !5
  %313 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %312, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1652, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %314

314:                                              ; preds = %311
  br label %315

315:                                              ; preds = %314
  br label %939

316:                                              ; preds = %304
  %317 = load ptr, ptr %5, align 8, !tbaa !5
  %318 = getelementptr inbounds i8, ptr %317, i64 5
  %319 = load i64, ptr %7, align 8, !tbaa !11
  %320 = sub i64 %319, 5
  %321 = call i32 @digest_update(ptr noundef %39, ptr noundef %318, i64 noundef %320)
  %322 = load ptr, ptr %3, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.TLS_CONNECT, ptr %322, i32 0, i32 30
  %324 = getelementptr inbounds [8 x i8], ptr %323, i64 0, i64 0
  %325 = call i32 @tls_seq_num_incr(ptr noundef %324)
  %326 = load ptr, ptr %6, align 8, !tbaa !5
  %327 = load ptr, ptr %3, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.TLS_CONNECT, ptr %327, i32 0, i32 4
  %329 = load i32, ptr %328, align 8, !tbaa !23
  %330 = call i32 @tls_record_recv(ptr noundef %326, ptr noundef %8, i32 noundef %329)
  %331 = icmp ne i32 %330, 1
  br i1 %331, label %332, label %340

332:                                              ; preds = %316
  br label %333

333:                                              ; preds = %332
  %334 = load ptr, ptr @stderr, align 8, !tbaa !5
  %335 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %334, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1661, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %336

336:                                              ; preds = %333
  br label %337

337:                                              ; preds = %336
  %338 = load ptr, ptr %3, align 8, !tbaa !5
  %339 = call i32 @tls_send_alert(ptr noundef %338, i32 noundef 40)
  br label %939

340:                                              ; preds = %316
  %341 = load ptr, ptr %3, align 8, !tbaa !5
  %342 = getelementptr inbounds %struct.TLS_CONNECT, ptr %341, i32 0, i32 34
  %343 = load ptr, ptr %3, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.TLS_CONNECT, ptr %343, i32 0, i32 32
  %345 = getelementptr inbounds [12 x i8], ptr %344, i64 0, i64 0
  %346 = load ptr, ptr %3, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.TLS_CONNECT, ptr %346, i32 0, i32 30
  %348 = getelementptr inbounds [8 x i8], ptr %347, i64 0, i64 0
  %349 = load ptr, ptr %6, align 8, !tbaa !5
  %350 = load i64, ptr %8, align 8, !tbaa !11
  %351 = load ptr, ptr %5, align 8, !tbaa !5
  %352 = call i32 @tls13_record_decrypt(ptr noundef %342, ptr noundef %345, ptr noundef %348, ptr noundef %349, i64 noundef %350, ptr noundef %351, ptr noundef %7)
  %353 = icmp ne i32 %352, 1
  br i1 %353, label %354, label %362

354:                                              ; preds = %340
  br label %355

355:                                              ; preds = %354
  %356 = load ptr, ptr @stderr, align 8, !tbaa !5
  %357 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %356, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1668, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %358

358:                                              ; preds = %355
  br label %359

359:                                              ; preds = %358
  %360 = load ptr, ptr %3, align 8, !tbaa !5
  %361 = call i32 @tls_send_alert(ptr noundef %360, i32 noundef 20)
  br label %939

362:                                              ; preds = %340
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = call i32 @tls_record_get_handshake(ptr noundef %363, ptr noundef %9, ptr noundef %10, ptr noundef %11)
  %365 = icmp ne i32 %364, 1
  br i1 %365, label %366, label %374

366:                                              ; preds = %362
  br label %367

367:                                              ; preds = %366
  %368 = load ptr, ptr @stderr, align 8, !tbaa !5
  %369 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %368, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1673, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %370

370:                                              ; preds = %367
  br label %371

371:                                              ; preds = %370
  %372 = load ptr, ptr %3, align 8, !tbaa !5
  %373 = call i32 @tls_send_alert(ptr noundef %372, i32 noundef 40)
  br label %939

374:                                              ; preds = %362
  %375 = load i32, ptr %9, align 4, !tbaa !9
  %376 = icmp eq i32 %375, 13
  br i1 %376, label %377, label %436

377:                                              ; preds = %374
  %378 = load ptr, ptr %5, align 8, !tbaa !5
  %379 = call i32 @tls13_record_get_handshake_certificate_request(ptr noundef %378, ptr noundef %54, ptr noundef %55, ptr noundef %56, ptr noundef %57)
  %380 = icmp ne i32 %379, 1
  br i1 %380, label %381, label %389

381:                                              ; preds = %377
  br label %382

382:                                              ; preds = %381
  %383 = load ptr, ptr @stderr, align 8, !tbaa !5
  %384 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %383, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1683, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %385

385:                                              ; preds = %382
  br label %386

386:                                              ; preds = %385
  %387 = load ptr, ptr %3, align 8, !tbaa !5
  %388 = call i32 @tls_send_alert(ptr noundef %387, i32 noundef 40)
  br label %939

389:                                              ; preds = %377
  %390 = load ptr, ptr %5, align 8, !tbaa !5
  %391 = getelementptr inbounds i8, ptr %390, i64 5
  %392 = load i64, ptr %7, align 8, !tbaa !11
  %393 = sub i64 %392, 5
  %394 = call i32 @digest_update(ptr noundef %39, ptr noundef %391, i64 noundef %393)
  %395 = load ptr, ptr %3, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.TLS_CONNECT, ptr %395, i32 0, i32 30
  %397 = getelementptr inbounds [8 x i8], ptr %396, i64 0, i64 0
  %398 = call i32 @tls_seq_num_incr(ptr noundef %397)
  %399 = load ptr, ptr %6, align 8, !tbaa !5
  %400 = load ptr, ptr %3, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.TLS_CONNECT, ptr %400, i32 0, i32 4
  %402 = load i32, ptr %401, align 8, !tbaa !23
  %403 = call i32 @tls_record_recv(ptr noundef %399, ptr noundef %8, i32 noundef %402)
  %404 = icmp ne i32 %403, 1
  br i1 %404, label %405, label %413

405:                                              ; preds = %389
  br label %406

406:                                              ; preds = %405
  %407 = load ptr, ptr @stderr, align 8, !tbaa !5
  %408 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %407, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1695, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %409

409:                                              ; preds = %406
  br label %410

410:                                              ; preds = %409
  %411 = load ptr, ptr %3, align 8, !tbaa !5
  %412 = call i32 @tls_send_alert(ptr noundef %411, i32 noundef 40)
  br label %939

413:                                              ; preds = %389
  %414 = load ptr, ptr %3, align 8, !tbaa !5
  %415 = getelementptr inbounds %struct.TLS_CONNECT, ptr %414, i32 0, i32 34
  %416 = load ptr, ptr %3, align 8, !tbaa !5
  %417 = getelementptr inbounds %struct.TLS_CONNECT, ptr %416, i32 0, i32 32
  %418 = getelementptr inbounds [12 x i8], ptr %417, i64 0, i64 0
  %419 = load ptr, ptr %3, align 8, !tbaa !5
  %420 = getelementptr inbounds %struct.TLS_CONNECT, ptr %419, i32 0, i32 30
  %421 = getelementptr inbounds [8 x i8], ptr %420, i64 0, i64 0
  %422 = load ptr, ptr %6, align 8, !tbaa !5
  %423 = load i64, ptr %8, align 8, !tbaa !11
  %424 = load ptr, ptr %5, align 8, !tbaa !5
  %425 = call i32 @tls13_record_decrypt(ptr noundef %415, ptr noundef %418, ptr noundef %421, ptr noundef %422, i64 noundef %423, ptr noundef %424, ptr noundef %7)
  %426 = icmp ne i32 %425, 1
  br i1 %426, label %427, label %435

427:                                              ; preds = %413
  br label %428

428:                                              ; preds = %427
  %429 = load ptr, ptr @stderr, align 8, !tbaa !5
  %430 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %429, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1702, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %431

431:                                              ; preds = %428
  br label %432

432:                                              ; preds = %431
  %433 = load ptr, ptr %3, align 8, !tbaa !5
  %434 = call i32 @tls_send_alert(ptr noundef %433, i32 noundef 20)
  br label %939

435:                                              ; preds = %413
  br label %439

436:                                              ; preds = %374
  %437 = load ptr, ptr %3, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.TLS_CONNECT, ptr %437, i32 0, i32 17
  store i64 0, ptr %438, align 8, !tbaa !27
  br label %439

439:                                              ; preds = %436, %435
  %440 = load ptr, ptr %5, align 8, !tbaa !5
  %441 = call i32 @tls13_record_get_handshake_certificate(ptr noundef %440, ptr noundef %54, ptr noundef %55, ptr noundef %58, ptr noundef %59)
  %442 = icmp ne i32 %441, 1
  br i1 %442, label %443, label %451

443:                                              ; preds = %439
  br label %444

444:                                              ; preds = %443
  %445 = load ptr, ptr @stderr, align 8, !tbaa !5
  %446 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %445, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1717, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %447

447:                                              ; preds = %444
  br label %448

448:                                              ; preds = %447
  %449 = load ptr, ptr %3, align 8, !tbaa !5
  %450 = call i32 @tls_send_alert(ptr noundef %449, i32 noundef 10)
  br label %939

451:                                              ; preds = %439
  %452 = load ptr, ptr %58, align 8, !tbaa !5
  %453 = load i64, ptr %59, align 8, !tbaa !11
  %454 = load ptr, ptr %3, align 8, !tbaa !5
  %455 = getelementptr inbounds %struct.TLS_CONNECT, ptr %454, i32 0, i32 14
  %456 = getelementptr inbounds [2048 x i8], ptr %455, i64 0, i64 0
  %457 = load ptr, ptr %3, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.TLS_CONNECT, ptr %457, i32 0, i32 15
  %459 = call i32 @tls13_process_certificate_list(ptr noundef %452, i64 noundef %453, ptr noundef %456, ptr noundef %458)
  %460 = icmp ne i32 %459, 1
  br i1 %460, label %461, label %469

461:                                              ; preds = %451
  br label %462

462:                                              ; preds = %461
  %463 = load ptr, ptr @stderr, align 8, !tbaa !5
  %464 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %463, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1722, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %465

465:                                              ; preds = %462
  br label %466

466:                                              ; preds = %465
  %467 = load ptr, ptr %3, align 8, !tbaa !5
  %468 = call i32 @tls_send_alert(ptr noundef %467, i32 noundef 10)
  br label %939

469:                                              ; preds = %451
  %470 = load ptr, ptr %3, align 8, !tbaa !5
  %471 = getelementptr inbounds %struct.TLS_CONNECT, ptr %470, i32 0, i32 14
  %472 = getelementptr inbounds [2048 x i8], ptr %471, i64 0, i64 0
  %473 = load ptr, ptr %3, align 8, !tbaa !5
  %474 = getelementptr inbounds %struct.TLS_CONNECT, ptr %473, i32 0, i32 15
  %475 = load i64, ptr %474, align 8, !tbaa !28
  %476 = call i32 @x509_certs_get_cert_by_index(ptr noundef %472, i64 noundef %475, i32 noundef 0, ptr noundef %60, ptr noundef %61)
  %477 = icmp ne i32 %476, 1
  br i1 %477, label %483, label %478

478:                                              ; preds = %469
  %479 = load ptr, ptr %60, align 8, !tbaa !5
  %480 = load i64, ptr %61, align 8, !tbaa !11
  %481 = call i32 @x509_cert_get_subject_public_key(ptr noundef %479, i64 noundef %480, ptr noundef %37)
  %482 = icmp ne i32 %481, 1
  br i1 %482, label %483, label %491

483:                                              ; preds = %478, %469
  br label %484

484:                                              ; preds = %483
  %485 = load ptr, ptr @stderr, align 8, !tbaa !5
  %486 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %485, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1728, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %487

487:                                              ; preds = %484
  br label %488

488:                                              ; preds = %487
  %489 = load ptr, ptr %3, align 8, !tbaa !5
  %490 = call i32 @tls_send_alert(ptr noundef %489, i32 noundef 10)
  br label %939

491:                                              ; preds = %478
  %492 = load ptr, ptr %5, align 8, !tbaa !5
  %493 = getelementptr inbounds i8, ptr %492, i64 5
  %494 = load i64, ptr %7, align 8, !tbaa !11
  %495 = sub i64 %494, 5
  %496 = call i32 @digest_update(ptr noundef %39, ptr noundef %493, i64 noundef %495)
  %497 = load ptr, ptr %3, align 8, !tbaa !5
  %498 = getelementptr inbounds %struct.TLS_CONNECT, ptr %497, i32 0, i32 30
  %499 = getelementptr inbounds [8 x i8], ptr %498, i64 0, i64 0
  %500 = call i32 @tls_seq_num_incr(ptr noundef %499)
  store i32 0, ptr %63, align 4, !tbaa !9
  %501 = load ptr, ptr %3, align 8, !tbaa !5
  %502 = getelementptr inbounds %struct.TLS_CONNECT, ptr %501, i32 0, i32 14
  %503 = getelementptr inbounds [2048 x i8], ptr %502, i64 0, i64 0
  %504 = load ptr, ptr %3, align 8, !tbaa !5
  %505 = getelementptr inbounds %struct.TLS_CONNECT, ptr %504, i32 0, i32 15
  %506 = load i64, ptr %505, align 8, !tbaa !28
  %507 = load ptr, ptr %3, align 8, !tbaa !5
  %508 = getelementptr inbounds %struct.TLS_CONNECT, ptr %507, i32 0, i32 18
  %509 = getelementptr inbounds [2048 x i8], ptr %508, i64 0, i64 0
  %510 = load ptr, ptr %3, align 8, !tbaa !5
  %511 = getelementptr inbounds %struct.TLS_CONNECT, ptr %510, i32 0, i32 19
  %512 = load i64, ptr %511, align 8, !tbaa !29
  %513 = call i32 @x509_certs_verify(ptr noundef %503, i64 noundef %506, i32 noundef 0, ptr noundef %509, i64 noundef %512, i32 noundef 6, ptr noundef %63)
  %514 = icmp ne i32 %513, 1
  br i1 %514, label %515, label %523

515:                                              ; preds = %491
  br label %516

516:                                              ; preds = %515
  %517 = load ptr, ptr @stderr, align 8, !tbaa !5
  %518 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %517, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1739, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %519

519:                                              ; preds = %516
  br label %520

520:                                              ; preds = %519
  %521 = load ptr, ptr %3, align 8, !tbaa !5
  %522 = call i32 @tls_send_alert(ptr noundef %521, i32 noundef 42)
  br label %939

523:                                              ; preds = %491
  %524 = load ptr, ptr %6, align 8, !tbaa !5
  %525 = load ptr, ptr %3, align 8, !tbaa !5
  %526 = getelementptr inbounds %struct.TLS_CONNECT, ptr %525, i32 0, i32 4
  %527 = load i32, ptr %526, align 8, !tbaa !23
  %528 = call i32 @tls_record_recv(ptr noundef %524, ptr noundef %8, i32 noundef %527)
  %529 = icmp ne i32 %528, 1
  br i1 %529, label %530, label %538

530:                                              ; preds = %523
  br label %531

531:                                              ; preds = %530
  %532 = load ptr, ptr @stderr, align 8, !tbaa !5
  %533 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %532, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1747, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %534

534:                                              ; preds = %531
  br label %535

535:                                              ; preds = %534
  %536 = load ptr, ptr %3, align 8, !tbaa !5
  %537 = call i32 @tls_send_alert(ptr noundef %536, i32 noundef 10)
  br label %939

538:                                              ; preds = %523
  %539 = load ptr, ptr %3, align 8, !tbaa !5
  %540 = getelementptr inbounds %struct.TLS_CONNECT, ptr %539, i32 0, i32 34
  %541 = load ptr, ptr %3, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.TLS_CONNECT, ptr %541, i32 0, i32 32
  %543 = getelementptr inbounds [12 x i8], ptr %542, i64 0, i64 0
  %544 = load ptr, ptr %3, align 8, !tbaa !5
  %545 = getelementptr inbounds %struct.TLS_CONNECT, ptr %544, i32 0, i32 30
  %546 = getelementptr inbounds [8 x i8], ptr %545, i64 0, i64 0
  %547 = load ptr, ptr %6, align 8, !tbaa !5
  %548 = load i64, ptr %8, align 8, !tbaa !11
  %549 = load ptr, ptr %5, align 8, !tbaa !5
  %550 = call i32 @tls13_record_decrypt(ptr noundef %540, ptr noundef %543, ptr noundef %546, ptr noundef %547, i64 noundef %548, ptr noundef %549, ptr noundef %7)
  %551 = icmp ne i32 %550, 1
  br i1 %551, label %552, label %560

552:                                              ; preds = %538
  br label %553

553:                                              ; preds = %552
  %554 = load ptr, ptr @stderr, align 8, !tbaa !5
  %555 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %554, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1754, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %556

556:                                              ; preds = %553
  br label %557

557:                                              ; preds = %556
  %558 = load ptr, ptr %3, align 8, !tbaa !5
  %559 = call i32 @tls_send_alert(ptr noundef %558, i32 noundef 20)
  br label %939

560:                                              ; preds = %538
  %561 = load ptr, ptr %5, align 8, !tbaa !5
  %562 = call i32 @tls13_record_get_handshake_certificate_verify(ptr noundef %561, ptr noundef %30, ptr noundef %31, ptr noundef %32)
  %563 = icmp ne i32 %562, 1
  br i1 %563, label %564, label %572

564:                                              ; preds = %560
  br label %565

565:                                              ; preds = %564
  %566 = load ptr, ptr @stderr, align 8, !tbaa !5
  %567 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %566, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1761, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %568

568:                                              ; preds = %565
  br label %569

569:                                              ; preds = %568
  %570 = load ptr, ptr %3, align 8, !tbaa !5
  %571 = call i32 @tls_send_alert(ptr noundef %570, i32 noundef 10)
  br label %939

572:                                              ; preds = %560
  %573 = load i32, ptr %30, align 4, !tbaa !9
  %574 = icmp ne i32 %573, 1800
  br i1 %574, label %575, label %583

575:                                              ; preds = %572
  br label %576

576:                                              ; preds = %575
  %577 = load ptr, ptr @stderr, align 8, !tbaa !5
  %578 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %577, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1766, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %579

579:                                              ; preds = %576
  br label %580

580:                                              ; preds = %579
  %581 = load ptr, ptr %3, align 8, !tbaa !5
  %582 = call i32 @tls_send_alert(ptr noundef %581, i32 noundef 10)
  br label %939

583:                                              ; preds = %572
  %584 = load ptr, ptr %31, align 8, !tbaa !5
  %585 = load i64, ptr %32, align 8, !tbaa !11
  %586 = call i32 @tls13_verify_certificate_verify(i32 noundef 0, ptr noundef %37, ptr noundef @.str.22, i64 noundef 23, ptr noundef %39, ptr noundef %584, i64 noundef %585)
  %587 = icmp ne i32 %586, 1
  br i1 %587, label %588, label %594

588:                                              ; preds = %583
  br label %589

589:                                              ; preds = %588
  %590 = load ptr, ptr @stderr, align 8, !tbaa !5
  %591 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %590, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1771, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %592

592:                                              ; preds = %589
  br label %593

593:                                              ; preds = %592
  br label %939

594:                                              ; preds = %583
  %595 = load ptr, ptr %5, align 8, !tbaa !5
  %596 = getelementptr inbounds i8, ptr %595, i64 5
  %597 = load i64, ptr %7, align 8, !tbaa !11
  %598 = sub i64 %597, 5
  %599 = call i32 @digest_update(ptr noundef %39, ptr noundef %596, i64 noundef %598)
  %600 = load ptr, ptr %3, align 8, !tbaa !5
  %601 = getelementptr inbounds %struct.TLS_CONNECT, ptr %600, i32 0, i32 30
  %602 = getelementptr inbounds [8 x i8], ptr %601, i64 0, i64 0
  %603 = call i32 @tls_seq_num_incr(ptr noundef %602)
  %604 = getelementptr inbounds [32 x i8], ptr %49, i64 0, i64 0
  %605 = getelementptr inbounds [32 x i8], ptr %28, i64 0, i64 0
  %606 = call i32 @tls13_compute_verify_data(ptr noundef %604, ptr noundef %39, ptr noundef %605, ptr noundef %29)
  %607 = load ptr, ptr %6, align 8, !tbaa !5
  %608 = load ptr, ptr %3, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.TLS_CONNECT, ptr %608, i32 0, i32 4
  %610 = load i32, ptr %609, align 8, !tbaa !23
  %611 = call i32 @tls_record_recv(ptr noundef %607, ptr noundef %8, i32 noundef %610)
  %612 = icmp ne i32 %611, 1
  br i1 %612, label %613, label %621

613:                                              ; preds = %594
  br label %614

614:                                              ; preds = %613
  %615 = load ptr, ptr @stderr, align 8, !tbaa !5
  %616 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %615, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1786, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %617

617:                                              ; preds = %614
  br label %618

618:                                              ; preds = %617
  %619 = load ptr, ptr %3, align 8, !tbaa !5
  %620 = call i32 @tls_send_alert(ptr noundef %619, i32 noundef 10)
  br label %939

621:                                              ; preds = %594
  %622 = load ptr, ptr %3, align 8, !tbaa !5
  %623 = getelementptr inbounds %struct.TLS_CONNECT, ptr %622, i32 0, i32 34
  %624 = load ptr, ptr %3, align 8, !tbaa !5
  %625 = getelementptr inbounds %struct.TLS_CONNECT, ptr %624, i32 0, i32 32
  %626 = getelementptr inbounds [12 x i8], ptr %625, i64 0, i64 0
  %627 = load ptr, ptr %3, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.TLS_CONNECT, ptr %627, i32 0, i32 30
  %629 = getelementptr inbounds [8 x i8], ptr %628, i64 0, i64 0
  %630 = load ptr, ptr %6, align 8, !tbaa !5
  %631 = load i64, ptr %8, align 8, !tbaa !11
  %632 = load ptr, ptr %5, align 8, !tbaa !5
  %633 = call i32 @tls13_record_decrypt(ptr noundef %623, ptr noundef %626, ptr noundef %629, ptr noundef %630, i64 noundef %631, ptr noundef %632, ptr noundef %7)
  %634 = icmp ne i32 %633, 1
  br i1 %634, label %635, label %643

635:                                              ; preds = %621
  br label %636

636:                                              ; preds = %635
  %637 = load ptr, ptr @stderr, align 8, !tbaa !5
  %638 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %637, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1793, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %639

639:                                              ; preds = %636
  br label %640

640:                                              ; preds = %639
  %641 = load ptr, ptr %3, align 8, !tbaa !5
  %642 = call i32 @tls_send_alert(ptr noundef %641, i32 noundef 20)
  br label %939

643:                                              ; preds = %621
  %644 = load ptr, ptr %5, align 8, !tbaa !5
  %645 = call i32 @tls13_record_get_handshake_finished(ptr noundef %644, ptr noundef %33, ptr noundef %34)
  %646 = icmp ne i32 %645, 1
  br i1 %646, label %647, label %655

647:                                              ; preds = %643
  br label %648

648:                                              ; preds = %647
  %649 = load ptr, ptr @stderr, align 8, !tbaa !5
  %650 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %649, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1800, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %651

651:                                              ; preds = %648
  br label %652

652:                                              ; preds = %651
  %653 = load ptr, ptr %3, align 8, !tbaa !5
  %654 = call i32 @tls_send_alert(ptr noundef %653, i32 noundef 10)
  br label %939

655:                                              ; preds = %643
  %656 = load i64, ptr %34, align 8, !tbaa !11
  %657 = load i64, ptr %29, align 8, !tbaa !11
  %658 = icmp ne i64 %656, %657
  br i1 %658, label %665, label %659

659:                                              ; preds = %655
  %660 = load ptr, ptr %33, align 8, !tbaa !5
  %661 = getelementptr inbounds [32 x i8], ptr %28, i64 0, i64 0
  %662 = load i64, ptr %29, align 8, !tbaa !11
  %663 = call i32 @memcmp(ptr noundef %660, ptr noundef %661, i64 noundef %662) #8
  %664 = icmp ne i32 %663, 0
  br i1 %664, label %665, label %673

665:                                              ; preds = %659, %655
  br label %666

666:                                              ; preds = %665
  %667 = load ptr, ptr @stderr, align 8, !tbaa !5
  %668 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %667, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1806, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %669

669:                                              ; preds = %666
  br label %670

670:                                              ; preds = %669
  %671 = load ptr, ptr %3, align 8, !tbaa !5
  %672 = call i32 @tls_send_alert(ptr noundef %671, i32 noundef 10)
  br label %939

673:                                              ; preds = %659
  %674 = load ptr, ptr %5, align 8, !tbaa !5
  %675 = getelementptr inbounds i8, ptr %674, i64 5
  %676 = load i64, ptr %7, align 8, !tbaa !11
  %677 = sub i64 %676, 5
  %678 = call i32 @digest_update(ptr noundef %39, ptr noundef %675, i64 noundef %677)
  %679 = load ptr, ptr %3, align 8, !tbaa !5
  %680 = getelementptr inbounds %struct.TLS_CONNECT, ptr %679, i32 0, i32 30
  %681 = getelementptr inbounds [8 x i8], ptr %680, i64 0, i64 0
  %682 = call i32 @tls_seq_num_incr(ptr noundef %681)
  %683 = getelementptr inbounds [32 x i8], ptr %47, i64 0, i64 0
  %684 = getelementptr inbounds [32 x i8], ptr %51, i64 0, i64 0
  %685 = call i32 @tls13_derive_secret(ptr noundef %683, ptr noundef @.str.23, ptr noundef %39, ptr noundef %684)
  %686 = getelementptr inbounds [32 x i8], ptr %47, i64 0, i64 0
  %687 = getelementptr inbounds [32 x i8], ptr %50, i64 0, i64 0
  %688 = call i32 @tls13_derive_secret(ptr noundef %686, ptr noundef @.str.24, ptr noundef %39, ptr noundef %687)
  %689 = load ptr, ptr %3, align 8, !tbaa !5
  %690 = getelementptr inbounds %struct.TLS_CONNECT, ptr %689, i32 0, i32 17
  %691 = load i64, ptr %690, align 8, !tbaa !27
  %692 = icmp ne i64 %691, 0
  br i1 %692, label %693, label %830

693:                                              ; preds = %673
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #7
  call void @llvm.lifetime.start.p0(i64 72, ptr %65) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %66) #7
  %694 = load ptr, ptr %5, align 8, !tbaa !5
  %695 = load ptr, ptr %3, align 8, !tbaa !5
  %696 = getelementptr inbounds %struct.TLS_CONNECT, ptr %695, i32 0, i32 16
  %697 = getelementptr inbounds [2048 x i8], ptr %696, i64 0, i64 0
  %698 = load ptr, ptr %3, align 8, !tbaa !5
  %699 = getelementptr inbounds %struct.TLS_CONNECT, ptr %698, i32 0, i32 17
  %700 = load i64, ptr %699, align 8, !tbaa !27
  %701 = call i32 @tls13_record_set_handshake_certificate(ptr noundef %694, ptr noundef %7, ptr noundef null, i64 noundef 0, ptr noundef %697, i64 noundef %700)
  %702 = icmp ne i32 %701, 1
  br i1 %702, label %703, label %711

703:                                              ; preds = %693
  br label %704

704:                                              ; preds = %703
  %705 = load ptr, ptr @stderr, align 8, !tbaa !5
  %706 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %705, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1830, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %707

707:                                              ; preds = %704
  br label %708

708:                                              ; preds = %707
  %709 = load ptr, ptr %3, align 8, !tbaa !5
  %710 = call i32 @tls_send_alert(ptr noundef %709, i32 noundef 80)
  store i32 4, ptr %67, align 4
  br label %827

711:                                              ; preds = %693
  %712 = call i32 @tls13_padding_len_rand(ptr noundef %42)
  %713 = load ptr, ptr %3, align 8, !tbaa !5
  %714 = getelementptr inbounds %struct.TLS_CONNECT, ptr %713, i32 0, i32 33
  %715 = load ptr, ptr %3, align 8, !tbaa !5
  %716 = getelementptr inbounds %struct.TLS_CONNECT, ptr %715, i32 0, i32 31
  %717 = getelementptr inbounds [12 x i8], ptr %716, i64 0, i64 0
  %718 = load ptr, ptr %3, align 8, !tbaa !5
  %719 = getelementptr inbounds %struct.TLS_CONNECT, ptr %718, i32 0, i32 29
  %720 = getelementptr inbounds [8 x i8], ptr %719, i64 0, i64 0
  %721 = load ptr, ptr %5, align 8, !tbaa !5
  %722 = load i64, ptr %7, align 8, !tbaa !11
  %723 = load i64, ptr %42, align 8, !tbaa !11
  %724 = load ptr, ptr %6, align 8, !tbaa !5
  %725 = call i32 @tls13_record_encrypt(ptr noundef %714, ptr noundef %717, ptr noundef %720, ptr noundef %721, i64 noundef %722, i64 noundef %723, ptr noundef %724, ptr noundef %8)
  %726 = icmp ne i32 %725, 1
  br i1 %726, label %727, label %735

727:                                              ; preds = %711
  br label %728

728:                                              ; preds = %727
  %729 = load ptr, ptr @stderr, align 8, !tbaa !5
  %730 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %729, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1839, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %731

731:                                              ; preds = %728
  br label %732

732:                                              ; preds = %731
  %733 = load ptr, ptr %3, align 8, !tbaa !5
  %734 = call i32 @tls_send_alert(ptr noundef %733, i32 noundef 80)
  store i32 4, ptr %67, align 4
  br label %827

735:                                              ; preds = %711
  %736 = load ptr, ptr %6, align 8, !tbaa !5
  %737 = load i64, ptr %8, align 8, !tbaa !11
  %738 = load ptr, ptr %3, align 8, !tbaa !5
  %739 = getelementptr inbounds %struct.TLS_CONNECT, ptr %738, i32 0, i32 4
  %740 = load i32, ptr %739, align 8, !tbaa !23
  %741 = call i32 @tls_record_send(ptr noundef %736, i64 noundef %737, i32 noundef %740)
  %742 = icmp ne i32 %741, 1
  br i1 %742, label %743, label %751

743:                                              ; preds = %735
  br label %744

744:                                              ; preds = %743
  %745 = load ptr, ptr @stderr, align 8, !tbaa !5
  %746 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %745, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1844, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %747

747:                                              ; preds = %744
  br label %748

748:                                              ; preds = %747
  %749 = load ptr, ptr %3, align 8, !tbaa !5
  %750 = call i32 @tls_send_alert(ptr noundef %749, i32 noundef 80)
  store i32 4, ptr %67, align 4
  br label %827

751:                                              ; preds = %735
  %752 = load ptr, ptr %5, align 8, !tbaa !5
  %753 = getelementptr inbounds i8, ptr %752, i64 5
  %754 = load i64, ptr %7, align 8, !tbaa !11
  %755 = sub i64 %754, 5
  %756 = call i32 @digest_update(ptr noundef %39, ptr noundef %753, i64 noundef %755)
  %757 = load ptr, ptr %3, align 8, !tbaa !5
  %758 = getelementptr inbounds %struct.TLS_CONNECT, ptr %757, i32 0, i32 29
  %759 = getelementptr inbounds [8 x i8], ptr %758, i64 0, i64 0
  %760 = call i32 @tls_seq_num_incr(ptr noundef %759)
  store i32 1800, ptr %64, align 4, !tbaa !9
  %761 = load ptr, ptr %3, align 8, !tbaa !5
  %762 = getelementptr inbounds %struct.TLS_CONNECT, ptr %761, i32 0, i32 20
  %763 = getelementptr inbounds [72 x i8], ptr %65, i64 0, i64 0
  %764 = call i32 @tls13_sign_certificate_verify(i32 noundef 1, ptr noundef %762, ptr noundef @.str.22, i64 noundef 23, ptr noundef %39, ptr noundef %763, ptr noundef %66)
  %765 = load ptr, ptr %5, align 8, !tbaa !5
  %766 = load i32, ptr %64, align 4, !tbaa !9
  %767 = getelementptr inbounds [72 x i8], ptr %65, i64 0, i64 0
  %768 = load i64, ptr %66, align 8, !tbaa !11
  %769 = call i32 @tls13_record_set_handshake_certificate_verify(ptr noundef %765, ptr noundef %7, i32 noundef %766, ptr noundef %767, i64 noundef %768)
  %770 = icmp ne i32 %769, 1
  br i1 %770, label %771, label %779

771:                                              ; preds = %751
  br label %772

772:                                              ; preds = %771
  %773 = load ptr, ptr @stderr, align 8, !tbaa !5
  %774 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %773, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1858, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %775

775:                                              ; preds = %772
  br label %776

776:                                              ; preds = %775
  %777 = load ptr, ptr %3, align 8, !tbaa !5
  %778 = call i32 @tls_send_alert(ptr noundef %777, i32 noundef 80)
  store i32 4, ptr %67, align 4
  br label %827

779:                                              ; preds = %751
  %780 = call i32 @tls13_padding_len_rand(ptr noundef %42)
  %781 = load ptr, ptr %3, align 8, !tbaa !5
  %782 = getelementptr inbounds %struct.TLS_CONNECT, ptr %781, i32 0, i32 33
  %783 = load ptr, ptr %3, align 8, !tbaa !5
  %784 = getelementptr inbounds %struct.TLS_CONNECT, ptr %783, i32 0, i32 31
  %785 = getelementptr inbounds [12 x i8], ptr %784, i64 0, i64 0
  %786 = load ptr, ptr %3, align 8, !tbaa !5
  %787 = getelementptr inbounds %struct.TLS_CONNECT, ptr %786, i32 0, i32 29
  %788 = getelementptr inbounds [8 x i8], ptr %787, i64 0, i64 0
  %789 = load ptr, ptr %5, align 8, !tbaa !5
  %790 = load i64, ptr %7, align 8, !tbaa !11
  %791 = load i64, ptr %42, align 8, !tbaa !11
  %792 = load ptr, ptr %6, align 8, !tbaa !5
  %793 = call i32 @tls13_record_encrypt(ptr noundef %782, ptr noundef %785, ptr noundef %788, ptr noundef %789, i64 noundef %790, i64 noundef %791, ptr noundef %792, ptr noundef %8)
  %794 = icmp ne i32 %793, 1
  br i1 %794, label %795, label %803

795:                                              ; preds = %779
  br label %796

796:                                              ; preds = %795
  %797 = load ptr, ptr @stderr, align 8, !tbaa !5
  %798 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %797, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1867, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %799

799:                                              ; preds = %796
  br label %800

800:                                              ; preds = %799
  %801 = load ptr, ptr %3, align 8, !tbaa !5
  %802 = call i32 @tls_send_alert(ptr noundef %801, i32 noundef 80)
  store i32 4, ptr %67, align 4
  br label %827

803:                                              ; preds = %779
  %804 = load ptr, ptr %6, align 8, !tbaa !5
  %805 = load i64, ptr %8, align 8, !tbaa !11
  %806 = load ptr, ptr %3, align 8, !tbaa !5
  %807 = getelementptr inbounds %struct.TLS_CONNECT, ptr %806, i32 0, i32 4
  %808 = load i32, ptr %807, align 8, !tbaa !23
  %809 = call i32 @tls_record_send(ptr noundef %804, i64 noundef %805, i32 noundef %808)
  %810 = icmp ne i32 %809, 1
  br i1 %810, label %811, label %817

811:                                              ; preds = %803
  br label %812

812:                                              ; preds = %811
  %813 = load ptr, ptr @stderr, align 8, !tbaa !5
  %814 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %813, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1872, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %815

815:                                              ; preds = %812
  br label %816

816:                                              ; preds = %815
  store i32 4, ptr %67, align 4
  br label %827

817:                                              ; preds = %803
  %818 = load ptr, ptr %5, align 8, !tbaa !5
  %819 = getelementptr inbounds i8, ptr %818, i64 5
  %820 = load i64, ptr %7, align 8, !tbaa !11
  %821 = sub i64 %820, 5
  %822 = call i32 @digest_update(ptr noundef %39, ptr noundef %819, i64 noundef %821)
  %823 = load ptr, ptr %3, align 8, !tbaa !5
  %824 = getelementptr inbounds %struct.TLS_CONNECT, ptr %823, i32 0, i32 29
  %825 = getelementptr inbounds [8 x i8], ptr %824, i64 0, i64 0
  %826 = call i32 @tls_seq_num_incr(ptr noundef %825)
  store i32 0, ptr %67, align 4
  br label %827

827:                                              ; preds = %817, %816, %800, %776, %748, %732, %708
  call void @llvm.lifetime.end.p0(i64 8, ptr %66) #7
  call void @llvm.lifetime.end.p0(i64 72, ptr %65) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #7
  %828 = load i32, ptr %67, align 4
  switch i32 %828, label %951 [
    i32 0, label %829
    i32 4, label %939
  ]

829:                                              ; preds = %827
  br label %830

830:                                              ; preds = %829, %673
  %831 = getelementptr inbounds [32 x i8], ptr %48, i64 0, i64 0
  %832 = getelementptr inbounds [32 x i8], ptr %28, i64 0, i64 0
  %833 = call i32 @tls13_compute_verify_data(ptr noundef %831, ptr noundef %39, ptr noundef %832, ptr noundef %29)
  %834 = load ptr, ptr %5, align 8, !tbaa !5
  %835 = getelementptr inbounds [32 x i8], ptr %28, i64 0, i64 0
  %836 = load i64, ptr %29, align 8, !tbaa !11
  %837 = call i32 @tls_record_set_handshake_finished(ptr noundef %834, ptr noundef %7, ptr noundef %835, i64 noundef %836)
  %838 = icmp ne i32 %837, 1
  br i1 %838, label %839, label %847

839:                                              ; preds = %830
  br label %840

840:                                              ; preds = %839
  %841 = load ptr, ptr @stderr, align 8, !tbaa !5
  %842 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %841, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1883, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %843

843:                                              ; preds = %840
  br label %844

844:                                              ; preds = %843
  %845 = load ptr, ptr %3, align 8, !tbaa !5
  %846 = call i32 @tls_send_alert(ptr noundef %845, i32 noundef 80)
  br label %939

847:                                              ; preds = %830
  %848 = call i32 @tls13_padding_len_rand(ptr noundef %42)
  %849 = load ptr, ptr %3, align 8, !tbaa !5
  %850 = getelementptr inbounds %struct.TLS_CONNECT, ptr %849, i32 0, i32 33
  %851 = load ptr, ptr %3, align 8, !tbaa !5
  %852 = getelementptr inbounds %struct.TLS_CONNECT, ptr %851, i32 0, i32 31
  %853 = getelementptr inbounds [12 x i8], ptr %852, i64 0, i64 0
  %854 = load ptr, ptr %3, align 8, !tbaa !5
  %855 = getelementptr inbounds %struct.TLS_CONNECT, ptr %854, i32 0, i32 29
  %856 = getelementptr inbounds [8 x i8], ptr %855, i64 0, i64 0
  %857 = load ptr, ptr %5, align 8, !tbaa !5
  %858 = load i64, ptr %7, align 8, !tbaa !11
  %859 = load i64, ptr %42, align 8, !tbaa !11
  %860 = load ptr, ptr %6, align 8, !tbaa !5
  %861 = call i32 @tls13_record_encrypt(ptr noundef %850, ptr noundef %853, ptr noundef %856, ptr noundef %857, i64 noundef %858, i64 noundef %859, ptr noundef %860, ptr noundef %8)
  %862 = icmp ne i32 %861, 1
  br i1 %862, label %863, label %871

863:                                              ; preds = %847
  br label %864

864:                                              ; preds = %863
  %865 = load ptr, ptr @stderr, align 8, !tbaa !5
  %866 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %865, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1892, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %867

867:                                              ; preds = %864
  br label %868

868:                                              ; preds = %867
  %869 = load ptr, ptr %3, align 8, !tbaa !5
  %870 = call i32 @tls_send_alert(ptr noundef %869, i32 noundef 80)
  br label %939

871:                                              ; preds = %847
  %872 = load ptr, ptr %6, align 8, !tbaa !5
  %873 = load i64, ptr %8, align 8, !tbaa !11
  %874 = load ptr, ptr %3, align 8, !tbaa !5
  %875 = getelementptr inbounds %struct.TLS_CONNECT, ptr %874, i32 0, i32 4
  %876 = load i32, ptr %875, align 8, !tbaa !23
  %877 = call i32 @tls_record_send(ptr noundef %872, i64 noundef %873, i32 noundef %876)
  %878 = icmp ne i32 %877, 1
  br i1 %878, label %879, label %885

879:                                              ; preds = %871
  br label %880

880:                                              ; preds = %879
  %881 = load ptr, ptr @stderr, align 8, !tbaa !5
  %882 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %881, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 1897, ptr noundef @__FUNCTION__.tls13_do_connect) #7
  br label %883

883:                                              ; preds = %880
  br label %884

884:                                              ; preds = %883
  br label %939

885:                                              ; preds = %871
  %886 = load ptr, ptr %5, align 8, !tbaa !5
  %887 = getelementptr inbounds i8, ptr %886, i64 5
  %888 = load i64, ptr %7, align 8, !tbaa !11
  %889 = sub i64 %888, 5
  %890 = call i32 @digest_update(ptr noundef %39, ptr noundef %887, i64 noundef %889)
  %891 = load ptr, ptr %3, align 8, !tbaa !5
  %892 = getelementptr inbounds %struct.TLS_CONNECT, ptr %891, i32 0, i32 29
  %893 = getelementptr inbounds [8 x i8], ptr %892, i64 0, i64 0
  %894 = call i32 @tls_seq_num_incr(ptr noundef %893)
  %895 = load ptr, ptr %38, align 8, !tbaa !5
  %896 = getelementptr inbounds [32 x i8], ptr %51, i64 0, i64 0
  %897 = getelementptr inbounds [16 x i8], ptr %53, i64 0, i64 0
  %898 = call i32 @tls13_hkdf_expand_label(ptr noundef %895, ptr noundef %896, ptr noundef @.str.19, ptr noundef null, i64 noundef 0, i64 noundef 16, ptr noundef %897)
  %899 = load ptr, ptr %3, align 8, !tbaa !5
  %900 = getelementptr inbounds %struct.TLS_CONNECT, ptr %899, i32 0, i32 34
  %901 = load ptr, ptr %41, align 8, !tbaa !5
  %902 = getelementptr inbounds [16 x i8], ptr %53, i64 0, i64 0
  %903 = call i32 @block_cipher_set_encrypt_key(ptr noundef %900, ptr noundef %901, ptr noundef %902)
  %904 = load ptr, ptr %38, align 8, !tbaa !5
  %905 = getelementptr inbounds [32 x i8], ptr %51, i64 0, i64 0
  %906 = load ptr, ptr %3, align 8, !tbaa !5
  %907 = getelementptr inbounds %struct.TLS_CONNECT, ptr %906, i32 0, i32 32
  %908 = getelementptr inbounds [12 x i8], ptr %907, i64 0, i64 0
  %909 = call i32 @tls13_hkdf_expand_label(ptr noundef %904, ptr noundef %905, ptr noundef @.str.20, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef %908)
  %910 = load ptr, ptr %3, align 8, !tbaa !5
  %911 = getelementptr inbounds %struct.TLS_CONNECT, ptr %910, i32 0, i32 30
  %912 = getelementptr inbounds [8 x i8], ptr %911, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %912, i8 0, i64 8, i1 false)
  %913 = load ptr, ptr %38, align 8, !tbaa !5
  %914 = getelementptr inbounds [32 x i8], ptr %50, i64 0, i64 0
  %915 = getelementptr inbounds [16 x i8], ptr %52, i64 0, i64 0
  %916 = call i32 @tls13_hkdf_expand_label(ptr noundef %913, ptr noundef %914, ptr noundef @.str.19, ptr noundef null, i64 noundef 0, i64 noundef 16, ptr noundef %915)
  %917 = load ptr, ptr %38, align 8, !tbaa !5
  %918 = getelementptr inbounds [32 x i8], ptr %50, i64 0, i64 0
  %919 = load ptr, ptr %3, align 8, !tbaa !5
  %920 = getelementptr inbounds %struct.TLS_CONNECT, ptr %919, i32 0, i32 31
  %921 = getelementptr inbounds [12 x i8], ptr %920, i64 0, i64 0
  %922 = call i32 @tls13_hkdf_expand_label(ptr noundef %917, ptr noundef %918, ptr noundef @.str.20, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef %921)
  %923 = load ptr, ptr %3, align 8, !tbaa !5
  %924 = getelementptr inbounds %struct.TLS_CONNECT, ptr %923, i32 0, i32 33
  %925 = load ptr, ptr %41, align 8, !tbaa !5
  %926 = getelementptr inbounds [16 x i8], ptr %52, i64 0, i64 0
  %927 = call i32 @block_cipher_set_encrypt_key(ptr noundef %924, ptr noundef %925, ptr noundef %926)
  %928 = load ptr, ptr %3, align 8, !tbaa !5
  %929 = getelementptr inbounds %struct.TLS_CONNECT, ptr %928, i32 0, i32 29
  %930 = getelementptr inbounds [8 x i8], ptr %929, i64 0, i64 0
  call void @llvm.memset.p0.i64(ptr align 8 %930, i8 0, i64 8, i1 false)
  %931 = load ptr, ptr %3, align 8, !tbaa !5
  %932 = getelementptr inbounds %struct.TLS_CONNECT, ptr %931, i32 0, i32 35
  %933 = load i32, ptr %932, align 8, !tbaa !30
  %934 = icmp ne i32 %933, 0
  br i1 %934, label %938, label %935

935:                                              ; preds = %885
  %936 = load ptr, ptr @stderr, align 8, !tbaa !5
  %937 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %936, ptr noundef @.str.25) #7
  br label %938

938:                                              ; preds = %935, %885
  store i32 1, ptr %4, align 4, !tbaa !9
  br label %939

939:                                              ; preds = %938, %884, %868, %844, %827, %670, %652, %640, %618, %593, %580, %569, %557, %535, %520, %488, %466, %448, %432, %410, %386, %371, %359, %337, %315, %301, %279, %180, %164, %142, %131, %119, %106
  call void @gmssl_secure_clear(ptr noundef %35, i64 noundef 128)
  call void @gmssl_secure_clear(ptr noundef %37, i64 noundef 128)
  %940 = getelementptr inbounds [32 x i8], ptr %44, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %940, i64 noundef 32)
  %941 = getelementptr inbounds [32 x i8], ptr %45, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %941, i64 noundef 32)
  %942 = getelementptr inbounds [32 x i8], ptr %46, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %942, i64 noundef 32)
  %943 = getelementptr inbounds [32 x i8], ptr %47, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %943, i64 noundef 32)
  %944 = getelementptr inbounds [32 x i8], ptr %48, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %944, i64 noundef 32)
  %945 = getelementptr inbounds [32 x i8], ptr %49, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %945, i64 noundef 32)
  %946 = getelementptr inbounds [32 x i8], ptr %50, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %946, i64 noundef 32)
  %947 = getelementptr inbounds [32 x i8], ptr %51, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %947, i64 noundef 32)
  %948 = getelementptr inbounds [16 x i8], ptr %52, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %948, i64 noundef 16)
  %949 = getelementptr inbounds [16 x i8], ptr %53, i64 0, i64 0
  call void @gmssl_secure_clear(ptr noundef %949, i64 noundef 16)
  %950 = load i32, ptr %4, align 4, !tbaa !9
  store i32 %950, ptr %2, align 4
  store i32 1, ptr %67, align 4
  br label %951

951:                                              ; preds = %939, %827
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %57) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %56) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %55) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %54) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %53) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %52) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %51) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %50) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %49) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %46) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %45) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %44) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %43) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #7
  call void @llvm.lifetime.end.p0(i64 120, ptr %40) #7
  call void @llvm.lifetime.end.p0(i64 120, ptr %39) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr %37) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr %36) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr %35) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 72, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 512, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #7
  %952 = load i32, ptr %2, align 4
  ret i32 %952
}

declare i32 @tls_record_set_protocol(ptr noundef, i32 noundef) #5

declare i32 @digest_init(ptr noundef, ptr noundef) #5

declare i32 @sm2_key_generate(ptr noundef) #5

declare i32 @tls_record_set_handshake_client_hello(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) #5

declare i32 @tls_send_alert(ptr noundef, i32 noundef) #5

declare i32 @tls_record_get_handshake_server_hello(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

declare i32 @tls_cipher_suite_in_list(i32 noundef, ptr noundef, i64 noundef) #5

declare i32 @digest_update(ptr noundef, ptr noundef, i64 noundef) #5

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

declare i32 @sm2_do_ecdh(ptr noundef, ptr noundef, ptr noundef) #5

declare i32 @sm2_z256_point_to_bytes(ptr noundef, ptr noundef) #5

declare i32 @block_cipher_set_encrypt_key(ptr noundef, ptr noundef, ptr noundef) #5

declare i32 @x509_certs_get_cert_by_index(ptr noundef, i64 noundef, i32 noundef, ptr noundef, ptr noundef) #5

declare i32 @x509_cert_get_subject_public_key(ptr noundef, i64 noundef, ptr noundef) #5

declare i32 @x509_certs_verify(ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef) #5

; Function Attrs: nounwind willreturn memory(read)
declare i32 @memcmp(ptr noundef, ptr noundef, i64 noundef) #6

declare i32 @tls_record_set_handshake_finished(ptr noundef, ptr noundef, ptr noundef, i64 noundef) #5

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { 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 #5 = { "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 = { 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 #7 = { nounwind }
attributes #8 = { nounwind willreturn memory(read) }

!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 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !10, i64 4}
!14 = !{!"", !10, i64 0, !10, i64 4, !7, i64 8, !12, i64 264, !10, i64 272, !7, i64 276, !12, i64 18720, !7, i64 18728, !7, i64 37165, !6, i64 55608, !12, i64 55616, !10, i64 55624, !7, i64 55628, !12, i64 55664, !7, i64 55672, !12, i64 57720, !7, i64 57728, !12, i64 59776, !7, i64 59784, !12, i64 61832, !15, i64 61840, !15, i64 61968, !10, i64 62096, !7, i64 62100, !7, i64 62148, !17, i64 62248, !17, i64 62424, !19, i64 62600, !19, i64 62728, !7, i64 62856, !7, i64 62864, !7, i64 62872, !7, i64 62884, !20, i64 62896, !20, i64 63032, !10, i64 63168}
!15 = !{!"", !16, i64 0, !7, i64 96}
!16 = !{!"", !7, i64 0, !7, i64 32, !7, i64 64}
!17 = !{!"", !18, i64 0, !7, i64 112}
!18 = !{!"", !7, i64 0, !12, i64 32, !7, i64 40, !12, i64 104}
!19 = !{!"", !7, i64 0}
!20 = !{!"BLOCK_CIPHER_KEY", !7, i64 0, !6, i64 128}
!21 = !{i64 0, i64 112, !22, i64 112, i64 8, !5}
!22 = !{!7, !7, i64 0}
!23 = !{!14, !10, i64 272}
!24 = !{!14, !12, i64 55664}
!25 = !{!14, !10, i64 55624}
!26 = !{!14, !10, i64 0}
!27 = !{!14, !12, i64 59776}
!28 = !{!14, !12, i64 57720}
!29 = !{!14, !12, i64 61832}
!30 = !{!14, !10, i64 63168}


; 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"

%struct.SM2_KEY = type { %struct.SM2_Z256_POINT, [4 x i64] }
%struct.SM2_Z256_POINT = type { [4 x i64], [4 x i64], [4 x i64] }
%struct.DIGEST_CTX = type { %union.anon.0, ptr }
%union.anon.0 = type { %struct.SM3_CTX }
%struct.SM3_CTX = type { [8 x i32], i64, [64 x i8], i64 }

@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [13 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [59 x i8], align 1
@tls13_ciphers = external hidden constant [1 x i32], align 4
@__FUNCTION__.tls13_do_connect = external hidden unnamed_addr constant [17 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [24 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [24 x i8], align 1

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

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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #3

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_encrypt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_decrypt(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @tls_record_send(ptr noundef, i64 noundef, i32 noundef) local_unnamed_addr #5

declare i32 @tls_seq_num_incr(ptr noundef) local_unnamed_addr #5

declare i32 @tls_record_recv(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_hkdf_extract(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_hkdf_expand_label(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i64 noundef, i64 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_derive_secret(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_sign_certificate_verify(i32 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_verify_certificate_verify(i32 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_compute_verify_data(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_client_hello_exts_set(ptr noundef, ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_server_hello_extensions_get(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_encrypted_extensions(ptr noundef) local_unnamed_addr #4

declare i32 @tls_record_get_handshake(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_set_handshake_certificate_verify(ptr noundef, ptr noundef, i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_certificate_verify(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_certificate_request(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_process_certificate_list(ptr noundef, i64 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_set_handshake_certificate(ptr noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_certificate(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_record_get_handshake_finished(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_padding_len_rand(ptr noundef) local_unnamed_addr #4

declare i32 @rand_bytes(ptr noundef, i64 noundef) local_unnamed_addr #5

; Function Attrs: nounwind uwtable
declare dso_local i32 @tls13_cipher_suite_get(i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

declare ptr @DIGEST_sm3() local_unnamed_addr #5

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @tls13_do_connect(ptr noundef %0) local_unnamed_addr #4 {
  %2 = alloca i64, align 8
  %3 = alloca i64, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca i32, align 4
  %8 = alloca [32 x i8], align 16
  %9 = alloca i32, align 4
  %10 = alloca ptr, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i64, align 8
  %13 = alloca [512 x i8], align 16
  %14 = alloca i64, align 8
  %15 = alloca ptr, align 8
  %16 = alloca i64, align 8
  %17 = alloca [32 x i8], align 16
  %18 = alloca i64, align 8
  %19 = alloca i32, align 4
  %20 = alloca ptr, align 8
  %21 = alloca i64, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca %struct.SM2_KEY, align 8
  %25 = alloca %struct.SM2_Z256_POINT, align 8
  %26 = alloca %struct.SM2_KEY, align 8
  %27 = alloca ptr, align 8
  %28 = alloca %struct.DIGEST_CTX, align 8
  %29 = alloca %struct.DIGEST_CTX, align 8
  %30 = alloca ptr, align 8
  %31 = alloca i64, align 8
  %32 = alloca [32 x i8], align 16
  %33 = alloca [32 x i8], align 16
  %34 = alloca [32 x i8], align 16
  %35 = alloca [32 x i8], align 16
  %36 = alloca [32 x i8], align 16
  %37 = alloca [32 x i8], align 16
  %38 = alloca [32 x i8], align 16
  %39 = alloca [32 x i8], align 16
  %40 = alloca [32 x i8], align 16
  %41 = alloca [16 x i8], align 16
  %42 = alloca [16 x i8], align 16
  %43 = alloca ptr, align 8
  %44 = alloca i64, align 8
  %45 = alloca ptr, align 8
  %46 = alloca i64, align 8
  %47 = alloca ptr, align 8
  %48 = alloca i64, align 8
  %49 = alloca ptr, align 8
  %50 = alloca i64, align 8
  %51 = alloca [64 x i8], align 16
  %52 = alloca i32, align 4
  %53 = alloca [72 x i8], align 16
  %54 = alloca i64, align 8
  %55 = getelementptr inbounds i8, ptr %0, i64 18728
  %56 = getelementptr inbounds i8, ptr %0, i64 276
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %4) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %7) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 512, ptr nonnull %13) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %17) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #7
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %24) #7
  call void @llvm.lifetime.start.p0(i64 96, ptr nonnull %25) #7
  call void @llvm.lifetime.start.p0(i64 128, ptr nonnull %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %27) #7
  %57 = tail call ptr @DIGEST_sm3() #7
  store ptr %57, ptr %27, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %28) #7
  call void @llvm.lifetime.start.p0(i64 120, ptr nonnull %29) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #7
  store ptr null, ptr %30, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %31) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %32) #7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %32, i8 0, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 16 dereferenceable(32) %33, i8 0, i64 32, i1 false)
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %38) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %39) #7
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %40) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %41) #7
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %42) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %47) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %49) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %50) #7
  %58 = getelementptr inbounds i8, ptr %0, i64 4
  store i32 1, ptr %58, align 4, !tbaa !9
  %59 = tail call i32 @tls_record_set_protocol(ptr noundef nonnull %56, i32 noundef 771) #7
  %60 = call i32 @digest_init(ptr noundef nonnull %28, ptr noundef %57) #7
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(120) %29, ptr noundef nonnull align 8 dereferenceable(120) %28, i64 120, i1 false), !tbaa.struct !19
  %61 = call i32 @tls_record_set_protocol(ptr noundef nonnull %55, i32 noundef 769) #7
  %62 = call i32 @rand_bytes(ptr noundef nonnull %8, i64 noundef 32) #7
  %63 = call i32 @sm2_key_generate(ptr noundef nonnull %24) #7
  %64 = call i32 @tls13_client_hello_exts_set(ptr noundef nonnull %13, ptr noundef nonnull %14, i64 noundef 512, ptr noundef nonnull %24)
  %65 = load i64, ptr %14, align 8, !tbaa !21
  %66 = call i32 @tls_record_set_handshake_client_hello(ptr noundef nonnull %55, ptr noundef nonnull %2, i32 noundef 771, ptr noundef nonnull %8, ptr noundef null, i64 noundef 0, ptr noundef nonnull @tls13_ciphers, i64 noundef 1, ptr noundef nonnull %13, i64 noundef %65) #7
  %67 = load i64, ptr %2, align 8, !tbaa !21
  %68 = getelementptr inbounds i8, ptr %0, i64 272
  %69 = load i32, ptr %68, align 8, !tbaa !22
  %70 = call i32 @tls_record_send(ptr noundef nonnull %55, i64 noundef %67, i32 noundef %69) #7
  %.not = icmp eq i32 %70, 1
  br i1 %.not, label %74, label %71

71:                                               ; preds = %1
  %72 = load ptr, ptr @stderr, align 8, !tbaa !5
  %73 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %72, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1550, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  br label %450

74:                                               ; preds = %1
  %75 = load i32, ptr %68, align 8, !tbaa !22
  %76 = call i32 @tls_record_recv(ptr noundef nonnull %56, ptr noundef nonnull %3, i32 noundef %75) #7
  %.not166 = icmp eq i32 %76, 1
  br i1 %.not166, label %81, label %77

77:                                               ; preds = %74
  %78 = load ptr, ptr @stderr, align 8, !tbaa !5
  %79 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %78, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1559, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %80 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

81:                                               ; preds = %74
  %82 = call i32 @tls_record_get_handshake_server_hello(ptr noundef nonnull %56, ptr noundef nonnull %7, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %9, ptr noundef nonnull %15, ptr noundef nonnull %16) #7
  %.not167 = icmp eq i32 %82, 1
  br i1 %.not167, label %87, label %83

83:                                               ; preds = %81
  %84 = load ptr, ptr @stderr, align 8, !tbaa !5
  %85 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %84, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1567, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %86 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

87:                                               ; preds = %81
  %88 = load i32, ptr %7, align 4, !tbaa !23
  %.not168 = icmp eq i32 %88, 771
  br i1 %.not168, label %93, label %89

89:                                               ; preds = %87
  %90 = load ptr, ptr @stderr, align 8, !tbaa !5
  %91 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %90, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1572, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %92 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 70) #7
  br label %450

93:                                               ; preds = %87
  %94 = getelementptr inbounds i8, ptr %0, i64 55628
  %95 = load ptr, ptr %11, align 8, !tbaa !5
  %96 = load i64, ptr %12, align 8, !tbaa !21
  call void @llvm.memcpy.p0.p0.i64(ptr nonnull align 4 %94, ptr align 1 %95, i64 %96, i1 false)
  %97 = getelementptr inbounds i8, ptr %0, i64 55664
  store i64 %96, ptr %97, align 8, !tbaa !24
  %98 = load i32, ptr %9, align 4, !tbaa !23
  %99 = call i32 @tls_cipher_suite_in_list(i32 noundef %98, ptr noundef nonnull @tls13_ciphers, i64 noundef 1) #7
  %.not169 = icmp eq i32 %99, 1
  br i1 %.not169, label %104, label %100

100:                                              ; preds = %93
  %101 = load ptr, ptr @stderr, align 8, !tbaa !5
  %102 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %101, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1581, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %103 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 40) #7
  br label %450

104:                                              ; preds = %93
  %105 = load i32, ptr %9, align 4, !tbaa !23
  %106 = getelementptr inbounds i8, ptr %0, i64 55624
  store i32 %105, ptr %106, align 8, !tbaa !25
  %107 = load ptr, ptr %15, align 8, !tbaa !5
  %108 = load i64, ptr %16, align 8, !tbaa !21
  %109 = call i32 @tls13_server_hello_extensions_get(ptr noundef %107, i64 noundef %108, ptr noundef nonnull %25)
  %.not170 = icmp eq i32 %109, 1
  br i1 %.not170, label %114, label %110

110:                                              ; preds = %104
  %111 = load ptr, ptr @stderr, align 8, !tbaa !5
  %112 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %111, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1587, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %113 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 40) #7
  br label %450

114:                                              ; preds = %104
  store i32 772, ptr %0, align 8, !tbaa !26
  %115 = load i32, ptr %106, align 8, !tbaa !25
  %116 = call i32 @tls13_cipher_suite_get(i32 noundef %115, ptr noundef nonnull %27, ptr noundef nonnull %30)
  %117 = getelementptr inbounds i8, ptr %0, i64 18733
  %118 = load i64, ptr %2, align 8, !tbaa !21
  %119 = add i64 %118, -5
  %120 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %117, i64 noundef %119) #7
  %121 = getelementptr inbounds i8, ptr %0, i64 281
  %122 = load i64, ptr %3, align 8, !tbaa !21
  %123 = add i64 %122, -5
  %124 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %121, i64 noundef %123) #7
  %125 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15)
  %126 = call i32 @sm2_do_ecdh(ptr noundef nonnull %24, ptr noundef nonnull %25, ptr noundef nonnull %25) #7
  %127 = call i32 @sm2_z256_point_to_bytes(ptr noundef nonnull %25, ptr noundef nonnull %51) #7
  %128 = load ptr, ptr %27, align 8, !tbaa !5
  %129 = call i32 @tls13_hkdf_extract(ptr noundef %128, ptr noundef nonnull %32, ptr noundef nonnull %33, ptr noundef nonnull %34)
  %130 = call i32 @tls13_derive_secret(ptr noundef nonnull %34, ptr noundef nonnull @.str.16, ptr noundef nonnull %29, ptr noundef nonnull %35)
  %131 = load ptr, ptr %27, align 8, !tbaa !5
  %132 = call i32 @tls13_hkdf_extract(ptr noundef %131, ptr noundef nonnull %35, ptr noundef nonnull %51, ptr noundef nonnull %35)
  %133 = call i32 @tls13_derive_secret(ptr noundef nonnull %35, ptr noundef nonnull @.str.17, ptr noundef nonnull %28, ptr noundef nonnull %37)
  %134 = call i32 @tls13_derive_secret(ptr noundef nonnull %35, ptr noundef nonnull @.str.18, ptr noundef nonnull %28, ptr noundef nonnull %38)
  %135 = call i32 @tls13_derive_secret(ptr noundef nonnull %35, ptr noundef nonnull @.str.16, ptr noundef nonnull %29, ptr noundef nonnull %36)
  %136 = load ptr, ptr %27, align 8, !tbaa !5
  %137 = call i32 @tls13_hkdf_extract(ptr noundef %136, ptr noundef nonnull %36, ptr noundef nonnull %32, ptr noundef nonnull %36)
  %138 = load ptr, ptr %27, align 8, !tbaa !5
  %139 = call i32 @tls13_hkdf_expand_label(ptr noundef %138, ptr noundef nonnull %38, ptr noundef nonnull @.str.19, ptr noundef null, i64 noundef 0, i64 noundef 16, ptr noundef nonnull %42)
  %140 = load ptr, ptr %27, align 8, !tbaa !5
  %141 = getelementptr inbounds i8, ptr %0, i64 62884
  %142 = call i32 @tls13_hkdf_expand_label(ptr noundef %140, ptr noundef nonnull %38, ptr noundef nonnull @.str.20, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef nonnull %141)
  %143 = getelementptr inbounds i8, ptr %0, i64 63032
  %144 = load ptr, ptr %30, align 8, !tbaa !5
  %145 = call i32 @block_cipher_set_encrypt_key(ptr noundef nonnull %143, ptr noundef %144, ptr noundef nonnull %42) #7
  %146 = getelementptr inbounds i8, ptr %0, i64 62864
  store i64 0, ptr %146, align 8
  %147 = load ptr, ptr %27, align 8, !tbaa !5
  %148 = call i32 @tls13_hkdf_expand_label(ptr noundef %147, ptr noundef nonnull %37, ptr noundef nonnull @.str.19, ptr noundef null, i64 noundef 0, i64 noundef 16, ptr noundef nonnull %41)
  %149 = load ptr, ptr %27, align 8, !tbaa !5
  %150 = getelementptr inbounds i8, ptr %0, i64 62872
  %151 = call i32 @tls13_hkdf_expand_label(ptr noundef %149, ptr noundef nonnull %37, ptr noundef nonnull @.str.20, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef nonnull %150)
  %152 = getelementptr inbounds i8, ptr %0, i64 62896
  %153 = load ptr, ptr %30, align 8, !tbaa !5
  %154 = call i32 @block_cipher_set_encrypt_key(ptr noundef nonnull %152, ptr noundef %153, ptr noundef nonnull %41) #7
  %155 = getelementptr inbounds i8, ptr %0, i64 62856
  store i64 0, ptr %155, align 8
  %156 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21)
  %157 = load i32, ptr %68, align 8, !tbaa !22
  %158 = call i32 @tls_record_recv(ptr noundef nonnull %56, ptr noundef nonnull %3, i32 noundef %157) #7
  %.not171 = icmp eq i32 %158, 1
  br i1 %.not171, label %163, label %159

159:                                              ; preds = %114
  %160 = load ptr, ptr @stderr, align 8, !tbaa !5
  %161 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %160, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1638, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %162 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 40) #7
  br label %450

163:                                              ; preds = %114
  %164 = load i64, ptr %3, align 8, !tbaa !21
  %165 = call i32 @tls13_record_decrypt(ptr noundef nonnull %143, ptr noundef nonnull %141, ptr noundef nonnull %146, ptr noundef nonnull %56, i64 noundef %164, ptr noundef nonnull %55, ptr noundef nonnull %2)
  %.not172 = icmp eq i32 %165, 1
  br i1 %.not172, label %170, label %166

166:                                              ; preds = %163
  %167 = load ptr, ptr @stderr, align 8, !tbaa !5
  %168 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %167, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1645, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %169 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 20) #7
  br label %450

170:                                              ; preds = %163
  %171 = call i32 @tls13_record_get_handshake_encrypted_extensions(ptr noundef nonnull %55)
  %.not173 = icmp eq i32 %171, 1
  br i1 %.not173, label %176, label %172

172:                                              ; preds = %170
  %173 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 40) #7
  %174 = load ptr, ptr @stderr, align 8, !tbaa !5
  %175 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %174, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1652, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  br label %450

176:                                              ; preds = %170
  %177 = load i64, ptr %2, align 8, !tbaa !21
  %178 = add i64 %177, -5
  %179 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %117, i64 noundef %178) #7
  %180 = call i32 @tls_seq_num_incr(ptr noundef nonnull %146) #7
  %181 = load i32, ptr %68, align 8, !tbaa !22
  %182 = call i32 @tls_record_recv(ptr noundef nonnull %56, ptr noundef nonnull %3, i32 noundef %181) #7
  %.not174 = icmp eq i32 %182, 1
  br i1 %.not174, label %187, label %183

183:                                              ; preds = %176
  %184 = load ptr, ptr @stderr, align 8, !tbaa !5
  %185 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %184, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1661, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %186 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 40) #7
  br label %450

187:                                              ; preds = %176
  %188 = load i64, ptr %3, align 8, !tbaa !21
  %189 = call i32 @tls13_record_decrypt(ptr noundef nonnull %143, ptr noundef nonnull %141, ptr noundef nonnull %146, ptr noundef nonnull %56, i64 noundef %188, ptr noundef nonnull %55, ptr noundef nonnull %2)
  %.not175 = icmp eq i32 %189, 1
  br i1 %.not175, label %194, label %190

190:                                              ; preds = %187
  %191 = load ptr, ptr @stderr, align 8, !tbaa !5
  %192 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %191, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1668, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %193 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 20) #7
  br label %450

194:                                              ; preds = %187
  %195 = call i32 @tls_record_get_handshake(ptr noundef nonnull %55, ptr noundef nonnull %4, ptr noundef nonnull %5, ptr noundef nonnull %6) #7
  %.not176 = icmp eq i32 %195, 1
  br i1 %.not176, label %200, label %196

196:                                              ; preds = %194
  %197 = load ptr, ptr @stderr, align 8, !tbaa !5
  %198 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %197, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1673, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %199 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 40) #7
  br label %450

200:                                              ; preds = %194
  %201 = load i32, ptr %4, align 4, !tbaa !23
  %202 = icmp eq i32 %201, 13
  br i1 %202, label %203, label %227

203:                                              ; preds = %200
  %204 = call i32 @tls13_record_get_handshake_certificate_request(ptr noundef nonnull %55, ptr noundef nonnull %43, ptr noundef nonnull %44, ptr noundef nonnull %45, ptr noundef nonnull %46)
  %.not177 = icmp eq i32 %204, 1
  br i1 %.not177, label %209, label %205

205:                                              ; preds = %203
  %206 = load ptr, ptr @stderr, align 8, !tbaa !5
  %207 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %206, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1683, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %208 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 40) #7
  br label %450

209:                                              ; preds = %203
  %210 = load i64, ptr %2, align 8, !tbaa !21
  %211 = add i64 %210, -5
  %212 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %117, i64 noundef %211) #7
  %213 = call i32 @tls_seq_num_incr(ptr noundef nonnull %146) #7
  %214 = load i32, ptr %68, align 8, !tbaa !22
  %215 = call i32 @tls_record_recv(ptr noundef nonnull %56, ptr noundef nonnull %3, i32 noundef %214) #7
  %.not178 = icmp eq i32 %215, 1
  br i1 %.not178, label %220, label %216

216:                                              ; preds = %209
  %217 = load ptr, ptr @stderr, align 8, !tbaa !5
  %218 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %217, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1695, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %219 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 40) #7
  br label %450

220:                                              ; preds = %209
  %221 = load i64, ptr %3, align 8, !tbaa !21
  %222 = call i32 @tls13_record_decrypt(ptr noundef nonnull %143, ptr noundef nonnull %141, ptr noundef nonnull %146, ptr noundef nonnull %56, i64 noundef %221, ptr noundef nonnull %55, ptr noundef nonnull %2)
  %.not179 = icmp eq i32 %222, 1
  br i1 %.not179, label %229, label %223

223:                                              ; preds = %220
  %224 = load ptr, ptr @stderr, align 8, !tbaa !5
  %225 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %224, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1702, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %226 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 20) #7
  br label %450

227:                                              ; preds = %200
  %228 = getelementptr inbounds i8, ptr %0, i64 59776
  store i64 0, ptr %228, align 8, !tbaa !27
  br label %229

229:                                              ; preds = %220, %227
  %230 = call i32 @tls13_record_get_handshake_certificate(ptr noundef nonnull %55, ptr noundef nonnull %43, ptr noundef nonnull %44, ptr noundef nonnull %47, ptr noundef nonnull %48)
  %.not180 = icmp eq i32 %230, 1
  br i1 %.not180, label %235, label %231

231:                                              ; preds = %229
  %232 = load ptr, ptr @stderr, align 8, !tbaa !5
  %233 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %232, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1717, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %234 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

235:                                              ; preds = %229
  %236 = load ptr, ptr %47, align 8, !tbaa !5
  %237 = load i64, ptr %48, align 8, !tbaa !21
  %238 = getelementptr inbounds i8, ptr %0, i64 55672
  %239 = getelementptr inbounds i8, ptr %0, i64 57720
  %240 = call i32 @tls13_process_certificate_list(ptr noundef %236, i64 noundef %237, ptr noundef nonnull %238, ptr noundef nonnull %239)
  %.not181 = icmp eq i32 %240, 1
  br i1 %.not181, label %245, label %241

241:                                              ; preds = %235
  %242 = load ptr, ptr @stderr, align 8, !tbaa !5
  %243 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %242, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1722, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %244 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

245:                                              ; preds = %235
  %246 = load i64, ptr %239, align 8, !tbaa !28
  %247 = call i32 @x509_certs_get_cert_by_index(ptr noundef nonnull %238, i64 noundef %246, i32 noundef 0, ptr noundef nonnull %49, ptr noundef nonnull %50) #7
  %.not182 = icmp eq i32 %247, 1
  br i1 %.not182, label %248, label %252

248:                                              ; preds = %245
  %249 = load ptr, ptr %49, align 8, !tbaa !5
  %250 = load i64, ptr %50, align 8, !tbaa !21
  %251 = call i32 @x509_cert_get_subject_public_key(ptr noundef %249, i64 noundef %250, ptr noundef nonnull %26) #7
  %.not183 = icmp eq i32 %251, 1
  br i1 %.not183, label %256, label %252

252:                                              ; preds = %245, %248
  %253 = load ptr, ptr @stderr, align 8, !tbaa !5
  %254 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %253, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1728, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %255 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

256:                                              ; preds = %248
  %257 = load i64, ptr %2, align 8, !tbaa !21
  %258 = add i64 %257, -5
  %259 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %117, i64 noundef %258) #7
  %260 = call i32 @tls_seq_num_incr(ptr noundef nonnull %146) #7
  store i32 0, ptr %52, align 4, !tbaa !23
  %261 = load i64, ptr %239, align 8, !tbaa !28
  %262 = getelementptr inbounds i8, ptr %0, i64 59784
  %263 = getelementptr inbounds i8, ptr %0, i64 61832
  %264 = load i64, ptr %263, align 8, !tbaa !29
  %265 = call i32 @x509_certs_verify(ptr noundef nonnull %238, i64 noundef %261, i32 noundef 0, ptr noundef nonnull %262, i64 noundef %264, i32 noundef 6, ptr noundef nonnull %52) #7
  %.not184 = icmp eq i32 %265, 1
  br i1 %.not184, label %270, label %266

266:                                              ; preds = %256
  %267 = load ptr, ptr @stderr, align 8, !tbaa !5
  %268 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %267, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1739, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %269 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 42) #7
  br label %450

270:                                              ; preds = %256
  %271 = load i32, ptr %68, align 8, !tbaa !22
  %272 = call i32 @tls_record_recv(ptr noundef nonnull %56, ptr noundef nonnull %3, i32 noundef %271) #7
  %.not185 = icmp eq i32 %272, 1
  br i1 %.not185, label %277, label %273

273:                                              ; preds = %270
  %274 = load ptr, ptr @stderr, align 8, !tbaa !5
  %275 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %274, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1747, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %276 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

277:                                              ; preds = %270
  %278 = load i64, ptr %3, align 8, !tbaa !21
  %279 = call i32 @tls13_record_decrypt(ptr noundef nonnull %143, ptr noundef nonnull %141, ptr noundef nonnull %146, ptr noundef nonnull %56, i64 noundef %278, ptr noundef nonnull %55, ptr noundef nonnull %2)
  %.not186 = icmp eq i32 %279, 1
  br i1 %.not186, label %284, label %280

280:                                              ; preds = %277
  %281 = load ptr, ptr @stderr, align 8, !tbaa !5
  %282 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %281, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1754, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %283 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 20) #7
  br label %450

284:                                              ; preds = %277
  %285 = call i32 @tls13_record_get_handshake_certificate_verify(ptr noundef nonnull %55, ptr noundef nonnull %19, ptr noundef nonnull %20, ptr noundef nonnull %21)
  %.not187 = icmp eq i32 %285, 1
  br i1 %.not187, label %290, label %286

286:                                              ; preds = %284
  %287 = load ptr, ptr @stderr, align 8, !tbaa !5
  %288 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %287, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1761, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %289 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

290:                                              ; preds = %284
  %291 = load i32, ptr %19, align 4, !tbaa !23
  %.not188 = icmp eq i32 %291, 1800
  br i1 %.not188, label %296, label %292

292:                                              ; preds = %290
  %293 = load ptr, ptr @stderr, align 8, !tbaa !5
  %294 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %293, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1766, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %295 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

296:                                              ; preds = %290
  %297 = load ptr, ptr %20, align 8, !tbaa !5
  %298 = load i64, ptr %21, align 8, !tbaa !21
  %299 = call i32 @tls13_verify_certificate_verify(i32 noundef 0, ptr noundef nonnull %26, ptr noundef nonnull @.str.22, i64 noundef 23, ptr noundef nonnull %28, ptr noundef %297, i64 noundef %298)
  %.not189 = icmp eq i32 %299, 1
  br i1 %.not189, label %303, label %300

300:                                              ; preds = %296
  %301 = load ptr, ptr @stderr, align 8, !tbaa !5
  %302 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %301, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1771, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  br label %450

303:                                              ; preds = %296
  %304 = load i64, ptr %2, align 8, !tbaa !21
  %305 = add i64 %304, -5
  %306 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %117, i64 noundef %305) #7
  %307 = call i32 @tls_seq_num_incr(ptr noundef nonnull %146) #7
  %308 = call i32 @tls13_compute_verify_data(ptr noundef nonnull %38, ptr noundef nonnull %28, ptr noundef nonnull %17, ptr noundef nonnull %18)
  %309 = load i32, ptr %68, align 8, !tbaa !22
  %310 = call i32 @tls_record_recv(ptr noundef nonnull %56, ptr noundef nonnull %3, i32 noundef %309) #7
  %.not190 = icmp eq i32 %310, 1
  br i1 %.not190, label %315, label %311

311:                                              ; preds = %303
  %312 = load ptr, ptr @stderr, align 8, !tbaa !5
  %313 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %312, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1786, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %314 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

315:                                              ; preds = %303
  %316 = load i64, ptr %3, align 8, !tbaa !21
  %317 = call i32 @tls13_record_decrypt(ptr noundef nonnull %143, ptr noundef nonnull %141, ptr noundef nonnull %146, ptr noundef nonnull %56, i64 noundef %316, ptr noundef nonnull %55, ptr noundef nonnull %2)
  %.not191 = icmp eq i32 %317, 1
  br i1 %.not191, label %322, label %318

318:                                              ; preds = %315
  %319 = load ptr, ptr @stderr, align 8, !tbaa !5
  %320 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %319, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1793, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %321 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 20) #7
  br label %450

322:                                              ; preds = %315
  %323 = call i32 @tls13_record_get_handshake_finished(ptr noundef nonnull %55, ptr noundef nonnull %22, ptr noundef nonnull %23)
  %.not192 = icmp eq i32 %323, 1
  br i1 %.not192, label %328, label %324

324:                                              ; preds = %322
  %325 = load ptr, ptr @stderr, align 8, !tbaa !5
  %326 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %325, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1800, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %327 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

328:                                              ; preds = %322
  %329 = load i64, ptr %23, align 8, !tbaa !21
  %330 = load i64, ptr %18, align 8, !tbaa !21
  %.not193 = icmp eq i64 %329, %330
  br i1 %.not193, label %331, label %333

331:                                              ; preds = %328
  %332 = load ptr, ptr %22, align 8, !tbaa !5
  %bcmp = call i32 @bcmp(ptr %332, ptr nonnull %17, i64 %329)
  %.not194 = icmp eq i32 %bcmp, 0
  br i1 %.not194, label %337, label %333

333:                                              ; preds = %328, %331
  %334 = load ptr, ptr @stderr, align 8, !tbaa !5
  %335 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %334, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1806, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %336 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 10) #7
  br label %450

337:                                              ; preds = %331
  %338 = load i64, ptr %2, align 8, !tbaa !21
  %339 = add i64 %338, -5
  %340 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %117, i64 noundef %339) #7
  %341 = call i32 @tls_seq_num_incr(ptr noundef nonnull %146) #7
  %342 = call i32 @tls13_derive_secret(ptr noundef nonnull %36, ptr noundef nonnull @.str.23, ptr noundef nonnull %28, ptr noundef nonnull %40)
  %343 = call i32 @tls13_derive_secret(ptr noundef nonnull %36, ptr noundef nonnull @.str.24, ptr noundef nonnull %28, ptr noundef nonnull %39)
  %344 = getelementptr inbounds i8, ptr %0, i64 59776
  %345 = load i64, ptr %344, align 8, !tbaa !27
  %.not195 = icmp eq i64 %345, 0
  br i1 %.not195, label %404, label %346

346:                                              ; preds = %337
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %53) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #7
  %347 = getelementptr inbounds i8, ptr %0, i64 57728
  %348 = call i32 @tls13_record_set_handshake_certificate(ptr noundef nonnull %55, ptr noundef nonnull %2, ptr noundef null, i64 noundef 0, ptr noundef nonnull %347, i64 noundef %345)
  %.not196 = icmp eq i32 %348, 1
  br i1 %.not196, label %353, label %349

349:                                              ; preds = %346
  %350 = load ptr, ptr @stderr, align 8, !tbaa !5
  %351 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %350, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1830, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %352 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #7
  br label %.thread

353:                                              ; preds = %346
  %354 = call i32 @tls13_padding_len_rand(ptr noundef nonnull %31)
  %355 = load i64, ptr %2, align 8, !tbaa !21
  %356 = load i64, ptr %31, align 8, !tbaa !21
  %357 = call i32 @tls13_record_encrypt(ptr noundef nonnull %152, ptr noundef nonnull %150, ptr noundef nonnull %155, ptr noundef nonnull %55, i64 noundef %355, i64 noundef %356, ptr noundef nonnull %56, ptr noundef nonnull %3)
  %.not197 = icmp eq i32 %357, 1
  br i1 %.not197, label %362, label %358

358:                                              ; preds = %353
  %359 = load ptr, ptr @stderr, align 8, !tbaa !5
  %360 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %359, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1839, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %361 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #7
  br label %.thread

362:                                              ; preds = %353
  %363 = load i64, ptr %3, align 8, !tbaa !21
  %364 = load i32, ptr %68, align 8, !tbaa !22
  %365 = call i32 @tls_record_send(ptr noundef nonnull %56, i64 noundef %363, i32 noundef %364) #7
  %.not198 = icmp eq i32 %365, 1
  br i1 %.not198, label %370, label %366

366:                                              ; preds = %362
  %367 = load ptr, ptr @stderr, align 8, !tbaa !5
  %368 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %367, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1844, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %369 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #7
  br label %.thread

370:                                              ; preds = %362
  %371 = load i64, ptr %2, align 8, !tbaa !21
  %372 = add i64 %371, -5
  %373 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %117, i64 noundef %372) #7
  %374 = call i32 @tls_seq_num_incr(ptr noundef nonnull %155) #7
  %375 = getelementptr inbounds i8, ptr %0, i64 61840
  %376 = call i32 @tls13_sign_certificate_verify(i32 noundef 1, ptr noundef nonnull %375, ptr noundef nonnull @.str.22, i64 noundef 23, ptr noundef nonnull %28, ptr noundef nonnull %53, ptr noundef nonnull %54)
  %377 = load i64, ptr %54, align 8, !tbaa !21
  %378 = call i32 @tls13_record_set_handshake_certificate_verify(ptr noundef nonnull %55, ptr noundef nonnull %2, i32 noundef 1800, ptr noundef nonnull %53, i64 noundef %377)
  %.not199 = icmp eq i32 %378, 1
  br i1 %.not199, label %383, label %379

379:                                              ; preds = %370
  %380 = load ptr, ptr @stderr, align 8, !tbaa !5
  %381 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %380, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1858, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %382 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #7
  br label %.thread

383:                                              ; preds = %370
  %384 = call i32 @tls13_padding_len_rand(ptr noundef nonnull %31)
  %385 = load i64, ptr %2, align 8, !tbaa !21
  %386 = load i64, ptr %31, align 8, !tbaa !21
  %387 = call i32 @tls13_record_encrypt(ptr noundef nonnull %152, ptr noundef nonnull %150, ptr noundef nonnull %155, ptr noundef nonnull %55, i64 noundef %385, i64 noundef %386, ptr noundef nonnull %56, ptr noundef nonnull %3)
  %.not200 = icmp eq i32 %387, 1
  br i1 %.not200, label %392, label %388

388:                                              ; preds = %383
  %389 = load ptr, ptr @stderr, align 8, !tbaa !5
  %390 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %389, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1867, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %391 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #7
  br label %.thread

392:                                              ; preds = %383
  %393 = load i64, ptr %3, align 8, !tbaa !21
  %394 = load i32, ptr %68, align 8, !tbaa !22
  %395 = call i32 @tls_record_send(ptr noundef nonnull %56, i64 noundef %393, i32 noundef %394) #7
  %.not201 = icmp eq i32 %395, 1
  br i1 %.not201, label %399, label %396

396:                                              ; preds = %392
  %397 = load ptr, ptr @stderr, align 8, !tbaa !5
  %398 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %397, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1872, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  br label %.thread

.thread:                                          ; preds = %349, %358, %366, %379, %388, %396
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %53) #7
  br label %450

399:                                              ; preds = %392
  %400 = load i64, ptr %2, align 8, !tbaa !21
  %401 = add i64 %400, -5
  %402 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %117, i64 noundef %401) #7
  %403 = call i32 @tls_seq_num_incr(ptr noundef nonnull %155) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #7
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %53) #7
  br label %404

404:                                              ; preds = %399, %337
  %405 = call i32 @tls13_compute_verify_data(ptr noundef nonnull %37, ptr noundef nonnull %28, ptr noundef nonnull %17, ptr noundef nonnull %18)
  %406 = load i64, ptr %18, align 8, !tbaa !21
  %407 = call i32 @tls_record_set_handshake_finished(ptr noundef nonnull %55, ptr noundef nonnull %2, ptr noundef nonnull %17, i64 noundef %406) #7
  %.not202 = icmp eq i32 %407, 1
  br i1 %.not202, label %412, label %408

408:                                              ; preds = %404
  %409 = load ptr, ptr @stderr, align 8, !tbaa !5
  %410 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %409, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1883, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %411 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #7
  br label %450

412:                                              ; preds = %404
  %413 = call i32 @tls13_padding_len_rand(ptr noundef nonnull %31)
  %414 = load i64, ptr %2, align 8, !tbaa !21
  %415 = load i64, ptr %31, align 8, !tbaa !21
  %416 = call i32 @tls13_record_encrypt(ptr noundef nonnull %152, ptr noundef nonnull %150, ptr noundef nonnull %155, ptr noundef nonnull %55, i64 noundef %414, i64 noundef %415, ptr noundef nonnull %56, ptr noundef nonnull %3)
  %.not203 = icmp eq i32 %416, 1
  br i1 %.not203, label %421, label %417

417:                                              ; preds = %412
  %418 = load ptr, ptr @stderr, align 8, !tbaa !5
  %419 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %418, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1892, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  %420 = call i32 @tls_send_alert(ptr noundef nonnull %0, i32 noundef 80) #7
  br label %450

421:                                              ; preds = %412
  %422 = load i64, ptr %3, align 8, !tbaa !21
  %423 = load i32, ptr %68, align 8, !tbaa !22
  %424 = call i32 @tls_record_send(ptr noundef nonnull %56, i64 noundef %422, i32 noundef %423) #7
  %.not204 = icmp eq i32 %424, 1
  br i1 %.not204, label %428, label %425

425:                                              ; preds = %421
  %426 = load ptr, ptr @stderr, align 8, !tbaa !5
  %427 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %426, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 1897, ptr noundef nonnull @__FUNCTION__.tls13_do_connect) #8
  br label %450

428:                                              ; preds = %421
  %429 = load i64, ptr %2, align 8, !tbaa !21
  %430 = add i64 %429, -5
  %431 = call i32 @digest_update(ptr noundef nonnull %28, ptr noundef nonnull %117, i64 noundef %430) #7
  %432 = call i32 @tls_seq_num_incr(ptr noundef nonnull %155) #7
  %433 = load ptr, ptr %27, align 8, !tbaa !5
  %434 = call i32 @tls13_hkdf_expand_label(ptr noundef %433, ptr noundef nonnull %40, ptr noundef nonnull @.str.19, ptr noundef null, i64 noundef 0, i64 noundef 16, ptr noundef nonnull %42)
  %435 = load ptr, ptr %30, align 8, !tbaa !5
  %436 = call i32 @block_cipher_set_encrypt_key(ptr noundef nonnull %143, ptr noundef %435, ptr noundef nonnull %42) #7
  %437 = load ptr, ptr %27, align 8, !tbaa !5
  %438 = call i32 @tls13_hkdf_expand_label(ptr noundef %437, ptr noundef nonnull %40, ptr noundef nonnull @.str.20, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef nonnull %141)
  store i64 0, ptr %146, align 8
  %439 = load ptr, ptr %27, align 8, !tbaa !5
  %440 = call i32 @tls13_hkdf_expand_label(ptr noundef %439, ptr noundef nonnull %39, ptr noundef nonnull @.str.19, ptr noundef null, i64 noundef 0, i64 noundef 16, ptr noundef nonnull %41)
  %441 = load ptr, ptr %27, align 8, !tbaa !5
  %442 = call i32 @tls13_hkdf_expand_label(ptr noundef %441, ptr noundef nonnull %39, ptr noundef nonnull @.str.20, ptr noundef null, i64 noundef 0, i64 noundef 12, ptr noundef nonnull %150)
  %443 = load ptr, ptr %30, align 8, !tbaa !5
  %444 = call i32 @block_cipher_set_encrypt_key(ptr noundef nonnull %152, ptr noundef %443, ptr noundef nonnull %41) #7
  store i64 0, ptr %155, align 8
  %445 = getelementptr inbounds i8, ptr %0, i64 63168
  %446 = load i32, ptr %445, align 8, !tbaa !30
  %.not205 = icmp eq i32 %446, 0
  br i1 %.not205, label %447, label %450

447:                                              ; preds = %428
  %448 = load ptr, ptr @stderr, align 8, !tbaa !5
  %449 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %448, ptr noundef nonnull @.str.25) #8
  br label %450

450:                                              ; preds = %.thread, %428, %447, %425, %417, %408, %333, %324, %318, %311, %300, %292, %286, %280, %273, %266, %252, %241, %231, %223, %216, %205, %196, %190, %183, %172, %166, %159, %110, %100, %89, %83, %77, %71
  %.0164 = phi i32 [ -1, %71 ], [ -1, %77 ], [ -1, %83 ], [ -1, %89 ], [ -1, %100 ], [ -1, %110 ], [ -1, %159 ], [ -1, %166 ], [ -1, %172 ], [ -1, %183 ], [ -1, %190 ], [ -1, %196 ], [ -1, %205 ], [ -1, %216 ], [ -1, %223 ], [ -1, %231 ], [ -1, %241 ], [ -1, %252 ], [ -1, %266 ], [ -1, %273 ], [ -1, %280 ], [ -1, %286 ], [ -1, %292 ], [ -1, %300 ], [ -1, %311 ], [ -1, %318 ], [ -1, %324 ], [ -1, %333 ], [ -1, %408 ], [ -1, %417 ], [ -1, %425 ], [ 1, %447 ], [ 1, %428 ], [ -1, %.thread ]
  call void @gmssl_secure_clear(ptr noundef nonnull %24, i64 noundef 128) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %26, i64 noundef 128) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %33, i64 noundef 32) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %34, i64 noundef 32) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %35, i64 noundef 32) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %36, i64 noundef 32) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %37, i64 noundef 32) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %38, i64 noundef 32) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %39, i64 noundef 32) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %40, i64 noundef 32) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %41, i64 noundef 16) #7
  call void @gmssl_secure_clear(ptr noundef nonnull %42, i64 noundef 16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %50) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %49) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %47) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %42) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %41) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %40) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %39) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %38) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %37) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %36) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %35) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %33) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %32) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %31) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #7
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %29) #7
  call void @llvm.lifetime.end.p0(i64 120, ptr nonnull %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %27) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %26) #7
  call void @llvm.lifetime.end.p0(i64 96, ptr nonnull %25) #7
  call void @llvm.lifetime.end.p0(i64 128, ptr nonnull %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %18) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %17) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #7
  call void @llvm.lifetime.end.p0(i64 512, ptr nonnull %13) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %7) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %4) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2) #7
  ret i32 %.0164
}

declare i32 @tls_record_set_protocol(ptr noundef, i32 noundef) local_unnamed_addr #5

declare i32 @digest_init(ptr noundef, ptr noundef) local_unnamed_addr #5

declare i32 @sm2_key_generate(ptr noundef) local_unnamed_addr #5

declare i32 @tls_record_set_handshake_client_hello(ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef, ptr noundef, i64 noundef) local_unnamed_addr #5

declare i32 @tls_send_alert(ptr noundef, i32 noundef) local_unnamed_addr #5

declare i32 @tls_record_get_handshake_server_hello(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

declare i32 @tls_cipher_suite_in_list(i32 noundef, ptr noundef, i64 noundef) local_unnamed_addr #5

declare i32 @digest_update(ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #5

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

declare i32 @sm2_do_ecdh(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

declare i32 @sm2_z256_point_to_bytes(ptr noundef, ptr noundef) local_unnamed_addr #5

declare i32 @block_cipher_set_encrypt_key(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

declare i32 @x509_certs_get_cert_by_index(ptr noundef, i64 noundef, i32 noundef, ptr noundef, ptr noundef) local_unnamed_addr #5

declare i32 @x509_cert_get_subject_public_key(ptr noundef, i64 noundef, ptr noundef) local_unnamed_addr #5

declare i32 @x509_certs_verify(ptr noundef, i64 noundef, i32 noundef, ptr noundef, i64 noundef, i32 noundef, ptr noundef) local_unnamed_addr #5

declare i32 @tls_record_set_handshake_finished(ptr noundef, ptr noundef, ptr noundef, i64 noundef) local_unnamed_addr #5

; Function Attrs: nofree nounwind willreturn memory(argmem: read)
declare i32 @bcmp(ptr nocapture, ptr nocapture, i64) local_unnamed_addr #6

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { 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 #5 = { "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 = { nofree nounwind willreturn memory(argmem: read) }
attributes #7 = { nounwind }
attributes #8 = { cold nounwind }

!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, !11, i64 4}
!10 = !{!"", !11, i64 0, !11, i64 4, !7, i64 8, !12, i64 264, !11, i64 272, !7, i64 276, !12, i64 18720, !7, i64 18728, !7, i64 37165, !6, i64 55608, !12, i64 55616, !11, i64 55624, !7, i64 55628, !12, i64 55664, !7, i64 55672, !12, i64 57720, !7, i64 57728, !12, i64 59776, !7, i64 59784, !12, i64 61832, !13, i64 61840, !13, i64 61968, !11, i64 62096, !7, i64 62100, !7, i64 62148, !15, i64 62248, !15, i64 62424, !17, i64 62600, !17, i64 62728, !7, i64 62856, !7, i64 62864, !7, i64 62872, !7, i64 62884, !18, i64 62896, !18, i64 63032, !11, i64 63168}
!11 = !{!"int", !7, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!"", !14, i64 0, !7, i64 96}
!14 = !{!"", !7, i64 0, !7, i64 32, !7, i64 64}
!15 = !{!"", !16, i64 0, !7, i64 112}
!16 = !{!"", !7, i64 0, !12, i64 32, !7, i64 40, !12, i64 104}
!17 = !{!"", !7, i64 0}
!18 = !{!"BLOCK_CIPHER_KEY", !7, i64 0, !6, i64 128}
!19 = !{i64 0, i64 112, !20, i64 112, i64 8, !5}
!20 = !{!7, !7, i64 0}
!21 = !{!12, !12, i64 0}
!22 = !{!10, !11, i64 272}
!23 = !{!11, !11, i64 0}
!24 = !{!10, !12, i64 55664}
!25 = !{!10, !11, i64 55624}
!26 = !{!10, !11, i64 0}
!27 = !{!10, !12, i64 59776}
!28 = !{!10, !12, i64 57720}
!29 = !{!10, !12, i64 61832}
!30 = !{!10, !11, i64 63168}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass,TailCallElimPass