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

/* Forward declarations */

/* Type definitions */
typedef int uint8_t;
typedef int /*<<< orphan*/ k_opad;
typedef int /*<<< orphan*/ k_ipad;
typedef int /*<<< orphan*/ MD5_CTX;

/* Variables and functions */
int /*<<< orphan*/ MD5_Final(int *, int /*<<< orphan*/ *);
int /*<<< orphan*/ MD5_Init(int /*<<< orphan*/ *);
int /*<<< orphan*/ MD5_Update(int /*<<< orphan*/ *, int *, int);
int /*<<< orphan*/ memcpy(int *, int *, size_t);
int /*<<< orphan*/ memset(int *, int /*<<< orphan*/, int);
void hmac_md5_vector(uint8_t *key, size_t key_len, size_t num_elem,
                     uint8_t *addr[], size_t *len, uint8_t *mac) {
  MD5_CTX context;
  uint8_t k_ipad[65];
  uint8_t k_opad[65];
  uint8_t tk[16];
  int i;
  if (key_len > 64) {
    MD5_Init(&context);
    MD5_Update(&context, key, key_len);
    MD5_Final(tk, &context);
    key = tk;
    key_len = 16;
  }
  memset(k_ipad, 0, sizeof(k_ipad));
  memset(k_opad, 0, sizeof(k_opad));
  memcpy(k_ipad, key, key_len);
  memcpy(k_opad, key, key_len);
  for (i = 0; i < 64; i++) {
    k_ipad[i] ^= 0x36;
    k_opad[i] ^= 0x5c;
  }
  MD5_Init(&context);
  MD5_Update(&context, k_ipad, 64);
  for (i = 0; i < num_elem; i++) {
    MD5_Update(&context, addr[i], len[i]);
  }
  MD5_Final(mac, &context);
  MD5_Init(&context);
  MD5_Update(&context, k_opad, 64);
  MD5_Update(&context, mac, 16);
  MD5_Final(mac, &context);
}


x86 assembly (clang, -O0):
<hmac_md5_vector>:
push   %rbp
mov    %rsp,%rbp
sub    $0x2a0,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %rdx,-0x18(%rbp)
mov    %rcx,-0x20(%rbp)
mov    %r8,-0x28(%rbp)
mov    %r9,-0x30(%rbp)
cmpq   $0x40,-0x10(%rbp)
jbe    11bd <hmac_md5_vector+0x6d>
lea    -0x34(%rbp),%rdi
call   1060 <MD5_Init@plt>
mov    -0x8(%rbp),%rsi
mov    -0x10(%rbp),%rax
mov    %eax,%edx
lea    -0x34(%rbp),%rdi
call   1070 <MD5_Update@plt>
lea    -0x290(%rbp),%rdi
lea    -0x34(%rbp),%rsi
call   1030 <MD5_Final@plt>
lea    -0x290(%rbp),%rax
mov    %rax,-0x8(%rbp)
movq   $0x10,-0x10(%rbp)
lea    -0x140(%rbp),%rdi
xor    %esi,%esi
mov    $0x104,%edx
call   1040 <memset@plt>
lea    -0x250(%rbp),%rdi
xor    %esi,%esi
mov    $0x104,%edx
call   1040 <memset@plt>
lea    -0x140(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    -0x10(%rbp),%rdx
call   1050 <memcpy@plt>
lea    -0x250(%rbp),%rdi
mov    -0x8(%rbp),%rsi
mov    -0x10(%rbp),%rdx
call   1050 <memcpy@plt>
movl   $0x0,-0x294(%rbp)
cmpl   $0x40,-0x294(%rbp)
jge    1266 <hmac_md5_vector+0x116>
movslq -0x294(%rbp),%rax
mov    -0x140(%rbp,%rax,4),%ecx
xor    $0x36,%ecx
mov    %ecx,-0x140(%rbp,%rax,4)
movslq -0x294(%rbp),%rax
mov    -0x250(%rbp,%rax,4),%ecx
xor    $0x5c,%ecx
mov    %ecx,-0x250(%rbp,%rax,4)
mov    -0x294(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x294(%rbp)
jmp    1215 <hmac_md5_vector+0xc5>
lea    -0x34(%rbp),%rdi
call   1060 <MD5_Init@plt>
lea    -0x140(%rbp),%rsi
lea    -0x34(%rbp),%rdi
mov    $0x40,%edx
call   1070 <MD5_Update@plt>
movl   $0x0,-0x294(%rbp)
movslq -0x294(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    12dc <hmac_md5_vector+0x18c>
mov    -0x20(%rbp),%rax
movslq -0x294(%rbp),%rcx
mov    (%rax,%rcx,8),%rsi
mov    -0x28(%rbp),%rax
movslq -0x294(%rbp),%rcx
mov    (%rax,%rcx,8),%rax
mov    %eax,%edx
lea    -0x34(%rbp),%rdi
call   1070 <MD5_Update@plt>
mov    -0x294(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x294(%rbp)
jmp    128e <hmac_md5_vector+0x13e>
mov    -0x30(%rbp),%rdi
lea    -0x34(%rbp),%rsi
call   1030 <MD5_Final@plt>
lea    -0x34(%rbp),%rdi
call   1060 <MD5_Init@plt>
lea    -0x250(%rbp),%rsi
lea    -0x34(%rbp),%rdi
mov    $0x40,%edx
call   1070 <MD5_Update@plt>
mov    -0x30(%rbp),%rsi
lea    -0x34(%rbp),%rdi
mov    $0x10,%edx
call   1070 <MD5_Update@plt>
mov    -0x30(%rbp),%rdi
lea    -0x34(%rbp),%rsi
call   1030 <MD5_Final@plt>
add    $0x2a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<hmac_md5_vector>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x278,%rsp
mov    %r9,0x8(%rsp)
mov    %r8,%r15
mov    %rcx,%r12
mov    %rdx,%r14
mov    %rsi,%r13
mov    %rdi,%rbp
cmp    $0x41,%rsi
jb     11af <hmac_md5_vector+0x5f>
lea    0x4(%rsp),%rbx
mov    %rbx,%rdi
call   1060 <MD5_Init@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    %r13d,%edx
call   1070 <MD5_Update@plt>
lea    0x230(%rsp),%rbp
mov    %rbp,%rdi
mov    %rbx,%rsi
call   1030 <MD5_Final@plt>
mov    $0x10,%r13d
lea    0x10(%rsp),%rdi
xor    %esi,%esi
mov    $0x104,%edx
call   1040 <memset@plt>
lea    0x120(%rsp),%rbx
mov    %rbx,%rdi
xor    %esi,%esi
mov    $0x104,%edx
call   1040 <memset@plt>
lea    0x10(%rsp),%rdi
mov    %rbp,%rsi
mov    %r13,%rdx
call   1050 <memcpy@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    %r13,%rdx
call   1050 <memcpy@plt>
movaps 0xe04(%rip),%xmm0
movaps 0x10(%rsp),%xmm1
xorps  %xmm0,%xmm1
movaps %xmm1,0x10(%rsp)
movaps 0xe00(%rip),%xmm1
movaps 0x120(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x120(%rsp)
movaps 0x20(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0x20(%rsp)
movaps 0x130(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x130(%rsp)
movaps 0x30(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0x30(%rsp)
movaps 0x140(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x140(%rsp)
movaps 0x40(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0x40(%rsp)
movaps 0x150(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x150(%rsp)
movaps 0x50(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0x50(%rsp)
movaps 0x160(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x160(%rsp)
movaps 0x60(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0x60(%rsp)
movaps 0x170(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x170(%rsp)
movaps 0x70(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0x70(%rsp)
movaps 0x180(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x180(%rsp)
movaps 0x80(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0x80(%rsp)
movaps 0x190(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x190(%rsp)
movaps 0x90(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0x90(%rsp)
movaps 0x1a0(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x1a0(%rsp)
movaps 0xa0(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0xa0(%rsp)
movaps 0x1b0(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x1b0(%rsp)
movaps 0xb0(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0xb0(%rsp)
movaps 0x1c0(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x1c0(%rsp)
movaps 0xc0(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0xc0(%rsp)
movaps 0x1d0(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x1d0(%rsp)
movaps 0xd0(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0xd0(%rsp)
movaps 0x1e0(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x1e0(%rsp)
movaps 0xe0(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0xe0(%rsp)
movaps 0x1f0(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x1f0(%rsp)
movaps 0xf0(%rsp),%xmm2
xorps  %xmm0,%xmm2
movaps %xmm2,0xf0(%rsp)
movaps 0x200(%rsp),%xmm2
xorps  %xmm1,%xmm2
movaps %xmm2,0x200(%rsp)
xorps  0x100(%rsp),%xmm0
movaps %xmm0,0x100(%rsp)
xorps  0x210(%rsp),%xmm1
movaps %xmm1,0x210(%rsp)
lea    0x4(%rsp),%rbp
mov    %rbp,%rdi
call   1060 <MD5_Init@plt>
mov    %rbp,%rdi
lea    0x10(%rsp),%rsi
mov    $0x40,%edx
call   1070 <MD5_Update@plt>
test   %r14,%r14
je     1479 <hmac_md5_vector+0x329>
xor    %ebx,%ebx
lea    0x4(%rsp),%rbp
xchg   %ax,%ax
mov    (%r12,%rbx,8),%rsi
mov    (%r15,%rbx,8),%edx
mov    %rbp,%rdi
call   1070 <MD5_Update@plt>
add    $0x1,%rbx
cmp    %rbx,%r14
jne    1460 <hmac_md5_vector+0x310>
lea    0x4(%rsp),%rbx
mov    0x8(%rsp),%rbp
mov    %rbp,%rdi
mov    %rbx,%rsi
call   1030 <MD5_Final@plt>
mov    %rbx,%rdi
call   1060 <MD5_Init@plt>
lea    0x120(%rsp),%rsi
mov    %rbx,%rdi
mov    $0x40,%edx
call   1070 <MD5_Update@plt>
mov    %rbx,%rdi
mov    %rbp,%rsi
mov    $0x10,%edx
call   1070 <MD5_Update@plt>
mov    %rbp,%rdi
mov    %rbx,%rsi
call   1030 <MD5_Final@plt>
add    $0x278,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
define void @hmac_md5_vector(i32* %0, i64 %1, i64 %2, i32** %3, i64* %4, i32* %5) {
%7 = alloca i32*
%8 = alloca i64
%9 = alloca i64
%10 = alloca i32**
%11 = alloca i64*
%12 = alloca i32*
%13 = alloca i32
%14 = alloca [65 x i32]
%15 = alloca [65 x i32]
%16 = alloca [16 x i32]
%17 = alloca i32
store i32* %0, i32** %7
store i64 %1, i64* %8
store i64 %2, i64* %9
store i32** %3, i32*** %10
store i64* %4, i64** %11
store i32* %5, i32** %12
%18 = load i64, i64* %8
%19 = icmp ugt i64 %18, 64
br i1 %19, label %20, label %29
20: ; preds = %6
%21 = call i32 @MD5_Init(i32* %13)
%22 = load i32*, i32** %7
%23 = load i64, i64* %8
%24 = trunc i64 %23 to i32
%25 = call i32 @MD5_Update(i32* %13, i32* %22, i32 %24)
%26 = getelementptr inbounds [16 x i32], [16 x i32]* %16, i64 0, i64 0
%27 = call i32 @MD5_Final(i32* %26, i32* %13)
%28 = getelementptr inbounds [16 x i32], [16 x i32]* %16, i64 0, i64 0
store i32* %28, i32** %7
store i64 16, i64* %8
br label %29
29: ; preds = %20, %6
%30 = getelementptr inbounds [65 x i32], [65 x i32]* %14, i64 0, i64 0
%31 = call i32 @memset(i32* %30, i32 0, i32 260)
%32 = getelementptr inbounds [65 x i32], [65 x i32]* %15, i64 0, i64 0
%33 = call i32 @memset(i32* %32, i32 0, i32 260)
%34 = getelementptr inbounds [65 x i32], [65 x i32]* %14, i64 0, i64 0
%35 = load i32*, i32** %7
%36 = load i64, i64* %8
%37 = call i32 @memcpy(i32* %34, i32* %35, i64 %36)
%38 = getelementptr inbounds [65 x i32], [65 x i32]* %15, i64 0, i64 0
%39 = load i32*, i32** %7
%40 = load i64, i64* %8
%41 = call i32 @memcpy(i32* %38, i32* %39, i64 %40)
store i32 0, i32* %17
br label %42
42: ; preds = %56, %29
%43 = load i32, i32* %17
%44 = icmp slt i32 %43, 64
br i1 %44, label %45, label %59
45: ; preds = %42
%46 = load i32, i32* %17
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [65 x i32], [65 x i32]* %14, i64 0, i64 %47
%49 = load i32, i32* %48
%50 = xor i32 %49, 54
store i32 %50, i32* %48
%51 = load i32, i32* %17
%52 = sext i32 %51 to i64
%53 = getelementptr inbounds [65 x i32], [65 x i32]* %15, i64 0, i64 %52
%54 = load i32, i32* %53
%55 = xor i32 %54, 92
store i32 %55, i32* %53
br label %56
56: ; preds = %45
%57 = load i32, i32* %17
%58 = add nsw i32 %57, 1
store i32 %58, i32* %17
br label %42
59: ; preds = %42
%60 = call i32 @MD5_Init(i32* %13)
%61 = getelementptr inbounds [65 x i32], [65 x i32]* %14, i64 0, i64 0
%62 = call i32 @MD5_Update(i32* %13, i32* %61, i32 64)
store i32 0, i32* %17
br label %63
63: ; preds = %81, %59
%64 = load i32, i32* %17
%65 = sext i32 %64 to i64
%66 = load i64, i64* %9
%67 = icmp ult i64 %65, %66
br i1 %67, label %68, label %84
68: ; preds = %63
%69 = load i32**, i32*** %10
%70 = load i32, i32* %17
%71 = sext i32 %70 to i64
%72 = getelementptr inbounds i32*, i32** %69, i64 %71
%73 = load i32*, i32** %72
%74 = load i64*, i64** %11
%75 = load i32, i32* %17
%76 = sext i32 %75 to i64
%77 = getelementptr inbounds i64, i64* %74, i64 %76
%78 = load i64, i64* %77
%79 = trunc i64 %78 to i32
%80 = call i32 @MD5_Update(i32* %13, i32* %73, i32 %79)
br label %81
81: ; preds = %68
%82 = load i32, i32* %17
%83 = add nsw i32 %82, 1
store i32 %83, i32* %17
br label %63
84: ; preds = %63
%85 = load i32*, i32** %12
%86 = call i32 @MD5_Final(i32* %85, i32* %13)
%87 = call i32 @MD5_Init(i32* %13)
%88 = getelementptr inbounds [65 x i32], [65 x i32]* %15, i64 0, i64 0
%89 = call i32 @MD5_Update(i32* %13, i32* %88, i32 64)
%90 = load i32*, i32** %12
%91 = call i32 @MD5_Update(i32* %13, i32* %90, i32 16)
%92 = load i32*, i32** %12
%93 = call i32 @MD5_Final(i32* %92, i32* %13)
ret void
}

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