#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 unsigned char uint8_t;

/* Variables and functions */
int EXIT_FAILURE;
int EXIT_SUCCESS;
size_t base32hex_len(size_t);
int bytes_from_base32hex(uint8_t dst[], size_t dstsize, const char src[],
                         size_t srcsize) {
  size_t processed = 0;
  unsigned char *d = dst;
  int i;
  int v;
  if (srcsize != base32hex_len(dstsize)) {
    return EXIT_FAILURE;
  }
  for (i = 0; i < srcsize; i++) {
    if (*src >= 'a' && *src <= 'v') {
      v = *src - 'a' + 10;
    } else if (*src >= '0' && *src <= '9') {
      v = *src - '0';
    } else if (*src == '=') {
      src++;
      continue;
    } else {
      return EXIT_FAILURE;
    }
    src++;
    switch (processed % 8) {
    case 0:
      if (dstsize <= 0) {
        return EXIT_FAILURE;
      }
      d[0] &= 0x07;
      d[0] |= (v << 3) & 0xF8;
      break;
    case 1:
      if (dstsize < 1) {
        return EXIT_FAILURE;
      }
      d[0] &= 0xF8;
      d[0] |= (v >> 2) & 0x07;
      if (dstsize >= 2) {
        d[1] &= 0x3F;
        d[1] |= (v << 6) & 0xC0;
      }
      break;
    case 2:
      if (dstsize < 2) {
        return EXIT_FAILURE;
      }
      d[1] &= 0xC1;
      d[1] |= (v << 1) & 0x3E;
      break;
    case 3:
      if (dstsize < 2) {
        return EXIT_FAILURE;
      }
      d[1] &= 0xFE;
      d[1] |= (v >> 4) & 0x01;
      if (dstsize >= 3) {
        d[2] &= 0x0F;
        d[2] |= (v << 4) & 0xF0;
      }
      break;
    case 4:
      if (dstsize < 3) {
        return EXIT_FAILURE;
      }
      d[2] &= 0xF0;
      d[2] |= (v >> 1) & 0x0F;
      if (dstsize >= 4) {
        d[3] &= 0x7F;
        d[3] |= (v << 7) & 0x80;
      }
      break;
    case 5:
      if (dstsize < 4) {
        return EXIT_FAILURE;
      }
      d[3] &= 0x83;
      d[3] |= (v << 2) & 0x7C;
      break;
    case 6:
      if (dstsize < 4) {
        return EXIT_FAILURE;
      }
      d[3] &= 0xFC;
      d[3] |= (v >> 3) & 0x03;
      if (dstsize >= 5) {
        d[4] &= 0x1F;
        d[4] |= (v << 5) & 0xE0;
      }
      break;
    default:
      if (dstsize < 5) {
        return EXIT_FAILURE;
      }
      d[4] &= 0xE0;
      d[4] |= v & 0x1F;
      d += 5;
      dstsize -= 5;
      break;
    }
    processed++;
  }
  return EXIT_SUCCESS;
}


x86 assembly (clang, -O0):
<bytes_from_base32hex>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
movq   $0x0,-0x30(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%rdi
call   1030 <base32hex_len@plt>
mov    %rax,%rcx
mov    -0x48(%rbp),%rax
cmp    %rcx,%rax
je     116a <bytes_from_base32hex+0x5a>
mov    0x2e80(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
movl   $0x0,-0x3c(%rbp)
movslq -0x3c(%rbp),%rax
cmp    -0x28(%rbp),%rax
jae    157c <bytes_from_base32hex+0x46c>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x61,%eax
jl     11b4 <bytes_from_base32hex+0xa4>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x76,%eax
jg     11b4 <bytes_from_base32hex+0xa4>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
sub    $0x61,%eax
add    $0xa,%eax
mov    %eax,-0x40(%rbp)
jmp    121d <bytes_from_base32hex+0x10d>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     11e6 <bytes_from_base32hex+0xd6>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     11e6 <bytes_from_base32hex+0xd6>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
sub    $0x30,%eax
mov    %eax,-0x40(%rbp)
jmp    1218 <bytes_from_base32hex+0x108>
mov    -0x20(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x3d,%eax
jne    1207 <bytes_from_base32hex+0xf7>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    156e <bytes_from_base32hex+0x45e>
mov    0x2dd2(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
jmp    121d <bytes_from_base32hex+0x10d>
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
mov    -0x30(%rbp),%rax
and    $0x7,%eax
mov    %rax,-0x50(%rbp)
sub    $0x6,%rax
ja     150a <bytes_from_base32hex+0x3fa>
mov    -0x50(%rbp),%rax
lea    0xdb7(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
cmpq   $0x0,-0x18(%rbp)
ja     126e <bytes_from_base32hex+0x15e>
mov    0x2d7c(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
mov    -0x38(%rbp),%rax
movzbl (%rax),%ecx
and    $0x7,%ecx
mov    %cl,(%rax)
mov    -0x40(%rbp),%edx
shl    $0x3,%edx
and    $0xf8,%edx
mov    -0x38(%rbp),%rax
movzbl (%rax),%ecx
or     %edx,%ecx
mov    %cl,(%rax)
jmp    1562 <bytes_from_base32hex+0x452>
cmpq   $0x1,-0x18(%rbp)
jae    12b2 <bytes_from_base32hex+0x1a2>
mov    0x2d38(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
mov    -0x38(%rbp),%rax
movzbl (%rax),%ecx
and    $0xf8,%ecx
mov    %cl,(%rax)
mov    -0x40(%rbp),%edx
sar    $0x2,%edx
and    $0x7,%edx
mov    -0x38(%rbp),%rax
movzbl (%rax),%ecx
or     %edx,%ecx
mov    %cl,(%rax)
cmpq   $0x2,-0x18(%rbp)
jb     1307 <bytes_from_base32hex+0x1f7>
mov    -0x38(%rbp),%rax
movzbl 0x1(%rax),%ecx
and    $0x3f,%ecx
mov    %cl,0x1(%rax)
mov    -0x40(%rbp),%edx
shl    $0x6,%edx
and    $0xc0,%edx
mov    -0x38(%rbp),%rax
movzbl 0x1(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x1(%rax)
jmp    1562 <bytes_from_base32hex+0x452>
cmpq   $0x2,-0x18(%rbp)
jae    1328 <bytes_from_base32hex+0x218>
mov    0x2cc2(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
mov    -0x38(%rbp),%rax
movzbl 0x1(%rax),%ecx
and    $0xc1,%ecx
mov    %cl,0x1(%rax)
mov    -0x40(%rbp),%edx
shl    $0x1,%edx
and    $0x3e,%edx
mov    -0x38(%rbp),%rax
movzbl 0x1(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x1(%rax)
jmp    1562 <bytes_from_base32hex+0x452>
cmpq   $0x2,-0x18(%rbp)
jae    1370 <bytes_from_base32hex+0x260>
mov    0x2c7a(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
mov    -0x38(%rbp),%rax
movzbl 0x1(%rax),%ecx
and    $0xfe,%ecx
mov    %cl,0x1(%rax)
mov    -0x40(%rbp),%edx
sar    $0x4,%edx
and    $0x1,%edx
mov    -0x38(%rbp),%rax
movzbl 0x1(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x1(%rax)
cmpq   $0x3,-0x18(%rbp)
jb     13c9 <bytes_from_base32hex+0x2b9>
mov    -0x38(%rbp),%rax
movzbl 0x2(%rax),%ecx
and    $0xf,%ecx
mov    %cl,0x2(%rax)
mov    -0x40(%rbp),%edx
shl    $0x4,%edx
and    $0xf0,%edx
mov    -0x38(%rbp),%rax
movzbl 0x2(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x2(%rax)
jmp    1562 <bytes_from_base32hex+0x452>
cmpq   $0x3,-0x18(%rbp)
jae    13ea <bytes_from_base32hex+0x2da>
mov    0x2c00(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
mov    -0x38(%rbp),%rax
movzbl 0x2(%rax),%ecx
and    $0xf0,%ecx
mov    %cl,0x2(%rax)
mov    -0x40(%rbp),%edx
sar    $0x1,%edx
and    $0xf,%edx
mov    -0x38(%rbp),%rax
movzbl 0x2(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x2(%rax)
cmpq   $0x4,-0x18(%rbp)
jb     1443 <bytes_from_base32hex+0x333>
mov    -0x38(%rbp),%rax
movzbl 0x3(%rax),%ecx
and    $0x7f,%ecx
mov    %cl,0x3(%rax)
mov    -0x40(%rbp),%edx
shl    $0x7,%edx
and    $0x80,%edx
mov    -0x38(%rbp),%rax
movzbl 0x3(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x3(%rax)
jmp    1562 <bytes_from_base32hex+0x452>
cmpq   $0x4,-0x18(%rbp)
jae    1464 <bytes_from_base32hex+0x354>
mov    0x2b86(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
mov    -0x38(%rbp),%rax
movzbl 0x3(%rax),%ecx
and    $0x83,%ecx
mov    %cl,0x3(%rax)
mov    -0x40(%rbp),%edx
shl    $0x2,%edx
and    $0x7c,%edx
mov    -0x38(%rbp),%rax
movzbl 0x3(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x3(%rax)
jmp    1562 <bytes_from_base32hex+0x452>
cmpq   $0x4,-0x18(%rbp)
jae    14ac <bytes_from_base32hex+0x39c>
mov    0x2b3e(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
mov    -0x38(%rbp),%rax
movzbl 0x3(%rax),%ecx
and    $0xfc,%ecx
mov    %cl,0x3(%rax)
mov    -0x40(%rbp),%edx
sar    $0x3,%edx
and    $0x3,%edx
mov    -0x38(%rbp),%rax
movzbl 0x3(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x3(%rax)
cmpq   $0x5,-0x18(%rbp)
jb     1505 <bytes_from_base32hex+0x3f5>
mov    -0x38(%rbp),%rax
movzbl 0x4(%rax),%ecx
and    $0x1f,%ecx
mov    %cl,0x4(%rax)
mov    -0x40(%rbp),%edx
shl    $0x5,%edx
and    $0xe0,%edx
mov    -0x38(%rbp),%rax
movzbl 0x4(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x4(%rax)
jmp    1562 <bytes_from_base32hex+0x452>
cmpq   $0x5,-0x18(%rbp)
jae    1526 <bytes_from_base32hex+0x416>
mov    0x2ac4(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    1588 <bytes_from_base32hex+0x478>
mov    -0x38(%rbp),%rax
movzbl 0x4(%rax),%ecx
and    $0xe0,%ecx
mov    %cl,0x4(%rax)
mov    -0x40(%rbp),%edx
and    $0x1f,%edx
mov    -0x38(%rbp),%rax
movzbl 0x4(%rax),%ecx
or     %edx,%ecx
mov    %cl,0x4(%rax)
mov    -0x38(%rbp),%rax
add    $0x5,%rax
mov    %rax,-0x38(%rbp)
mov    -0x18(%rbp),%rax
sub    $0x5,%rax
mov    %rax,-0x18(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
mov    -0x3c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x3c(%rbp)
jmp    1171 <bytes_from_base32hex+0x61>
mov    0x2a55(%rip),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<bytes_from_base32hex>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %rcx,%r15
mov    %rdx,%r14
mov    %rsi,%r12
mov    %rdi,%r13
mov    %rsi,%rdi
call   1030 <base32hex_len@plt>
mov    0x2eac(%rip),%r9
cmp    %r15,%rax
jne    1358 <bytes_from_base32hex+0x248>
mov    0x2e94(%rip),%r8
test   %r15,%r15
je     1355 <bytes_from_base32hex+0x245>
xor    %edx,%edx
lea    0xeaa(%rip),%r10
xor    %edi,%edi
jmp    1181 <bytes_from_base32hex+0x71>
movzbl 0x4(%r13),%ecx
and    $0x1f,%cl
shl    $0x5,%al
or     %cl,%al
mov    %al,0x4(%r13)
nopl   0x0(%rax,%rax,1)
add    $0x1,%rdi
add    $0x1,%rdx
cmp    %rdx,%r15
je     1355 <bytes_from_base32hex+0x245>
movzbl (%r14,%rdx,1),%ecx
lea    -0x61(%rcx),%esi
mov    $0xffffffa9,%eax
cmp    $0x16,%sil
jb     11a2 <bytes_from_base32hex+0x92>
lea    -0x30(%rcx),%esi
mov    $0xffffffd0,%eax
cmp    $0xa,%sil
jae    11e0 <bytes_from_base32hex+0xd0>
add    %ecx,%eax
mov    %edi,%ecx
and    $0x7,%ecx
cmp    $0x6,%rcx
ja     11ea <bytes_from_base32hex+0xda>
movslq (%r10,%rcx,4),%rcx
add    %r10,%rcx
jmp    *%rcx
test   %r12,%r12
je     1358 <bytes_from_base32hex+0x248>
movzbl 0x0(%r13),%ecx
and    $0x7,%cl
shl    $0x3,%al
or     %cl,%al
mov    %al,0x0(%r13)
jmp    1170 <bytes_from_base32hex+0x60>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
cmp    $0x3d,%cl
je     1174 <bytes_from_base32hex+0x64>
jmp    1358 <bytes_from_base32hex+0x248>
cmp    $0x5,%r12
jb     1358 <bytes_from_base32hex+0x248>
movzbl 0x4(%r13),%ecx
and    $0xe0,%cl
and    $0x1f,%al
or     %cl,%al
mov    %al,0x4(%r13)
add    $0x5,%r13
add    $0xfffffffffffffffb,%r12
jmp    1170 <bytes_from_base32hex+0x60>
test   %r12,%r12
je     1358 <bytes_from_base32hex+0x248>
movzbl 0x0(%r13),%ecx
and    $0xf8,%cl
mov    %eax,%ebx
shr    $0x2,%bl
and    $0x7,%bl
or     %cl,%bl
mov    %bl,0x0(%r13)
cmp    $0x1,%r12
jne    1313 <bytes_from_base32hex+0x203>
mov    $0x1,%r12d
jmp    1170 <bytes_from_base32hex+0x60>
cmp    $0x2,%r12
jb     1358 <bytes_from_base32hex+0x248>
movzbl 0x1(%r13),%ecx
and    $0xc1,%cl
add    %al,%al
and    $0x3e,%al
jmp    131e <bytes_from_base32hex+0x20e>
cmp    $0x2,%r12
jb     1358 <bytes_from_base32hex+0x248>
movzbl 0x1(%r13),%ecx
and    $0xfe,%cl
mov    %eax,%ebx
shr    $0x4,%bl
and    $0x1,%bl
or     %cl,%bl
mov    %bl,0x1(%r13)
cmp    $0x2,%r12
jne    1329 <bytes_from_base32hex+0x219>
mov    $0x2,%r12d
jmp    1170 <bytes_from_base32hex+0x60>
cmp    $0x3,%r12
jb     1358 <bytes_from_base32hex+0x248>
movzbl 0x2(%r13),%ecx
and    $0xf0,%cl
mov    %eax,%ebx
shr    %bl
and    $0xf,%bl
or     %cl,%bl
mov    %bl,0x2(%r13)
cmp    $0x3,%r12
jne    133f <bytes_from_base32hex+0x22f>
mov    $0x3,%r12d
jmp    1170 <bytes_from_base32hex+0x60>
cmp    $0x4,%r12
jb     1358 <bytes_from_base32hex+0x248>
movzbl 0x3(%r13),%ecx
and    $0x83,%cl
shl    $0x2,%al
and    $0x7c,%al
jmp    134a <bytes_from_base32hex+0x23a>
cmp    $0x4,%r12
jb     1358 <bytes_from_base32hex+0x248>
movzbl 0x3(%r13),%ecx
and    $0xfc,%cl
mov    %eax,%ebx
shr    $0x3,%bl
and    $0x3,%bl
or     %cl,%bl
mov    %bl,0x3(%r13)
cmp    $0x4,%r12
jne    115a <bytes_from_base32hex+0x4a>
mov    $0x4,%r12d
jmp    1170 <bytes_from_base32hex+0x60>
movzbl 0x1(%r13),%ecx
and    $0x3f,%cl
shl    $0x6,%al
or     %cl,%al
mov    %al,0x1(%r13)
jmp    1170 <bytes_from_base32hex+0x60>
movzbl 0x2(%r13),%ecx
and    $0xf,%cl
shl    $0x4,%al
or     %cl,%al
mov    %al,0x2(%r13)
jmp    1170 <bytes_from_base32hex+0x60>
movzbl 0x3(%r13),%ecx
and    $0x7f,%cl
shl    $0x7,%al
or     %cl,%al
mov    %al,0x3(%r13)
jmp    1170 <bytes_from_base32hex+0x60>
mov    %r8,%r9
mov    (%r9),%eax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
ret

LLVM IR (-O0):
@EXIT_FAILURE = global i32 0
@EXIT_SUCCESS = global i32 0
define i32 @bytes_from_base32hex(i8* %0, i64 %1, i8* %2, i64 %3) {
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i64
%8 = alloca i8*
%9 = alloca i64
%10 = alloca i64
%11 = alloca i8*
%12 = alloca i32
%13 = alloca i32
store i8* %0, i8** %6
store i64 %1, i64* %7
store i8* %2, i8** %8
store i64 %3, i64* %9
store i64 0, i64* %10
%14 = load i8*, i8** %6
store i8* %14, i8** %11
%15 = load i64, i64* %9
%16 = load i64, i64* %7
%17 = call i64 @base32hex_len(i64 %16)
%18 = icmp ne i64 %15, %17
br i1 %18, label %19, label %21
19: ; preds = %4
%20 = load i32, i32* @EXIT_FAILURE
store i32 %20, i32* %5
br label %329
21: ; preds = %4
store i32 0, i32* %12
br label %22
22: ; preds = %324, %21
%23 = load i32, i32* %12
%24 = sext i32 %23 to i64
%25 = load i64, i64* %9
%26 = icmp ult i64 %24, %25
br i1 %26, label %27, label %327
27: ; preds = %22
%28 = load i8*, i8** %8
%29 = load i8, i8* %28
%30 = sext i8 %29 to i32
%31 = icmp sge i32 %30, 97
br i1 %31, label %32, label %43
32: ; preds = %27
%33 = load i8*, i8** %8
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = icmp sle i32 %35, 118
br i1 %36, label %37, label %43
37: ; preds = %32
%38 = load i8*, i8** %8
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
%41 = sub nsw i32 %40, 97
%42 = add nsw i32 %41, 10
store i32 %42, i32* %13
br label %69
43: ; preds = %32, %27
%44 = load i8*, i8** %8
%45 = load i8, i8* %44
%46 = sext i8 %45 to i32
%47 = icmp sge i32 %46, 48
br i1 %47, label %48, label %58
48: ; preds = %43
%49 = load i8*, i8** %8
%50 = load i8, i8* %49
%51 = sext i8 %50 to i32
%52 = icmp sle i32 %51, 57
br i1 %52, label %53, label %58
53: ; preds = %48
%54 = load i8*, i8** %8
%55 = load i8, i8* %54
%56 = sext i8 %55 to i32
%57 = sub nsw i32 %56, 48
store i32 %57, i32* %13
br label %68
58: ; preds = %48, %43
%59 = load i8*, i8** %8
%60 = load i8, i8* %59
%61 = sext i8 %60 to i32
%62 = icmp eq i32 %61, 61
br i1 %62, label %63, label %66
63: ; preds = %58
%64 = load i8*, i8** %8
%65 = getelementptr inbounds i8, i8* %64, i32 1
store i8* %65, i8** %8
br label %324
66: ; preds = %58
%67 = load i32, i32* @EXIT_FAILURE
store i32 %67, i32* %5
br label %329
68: ; preds = %53
br label %69
69: ; preds = %68, %37
%70 = load i8*, i8** %8
%71 = getelementptr inbounds i8, i8* %70, i32 1
store i8* %71, i8** %8
%72 = load i64, i64* %10
%73 = urem i64 %72, 8
switch i64 %73, label %297 [
i64 0, label %74
i64 1, label %95
i64 2, label %135
i64 3, label %156
i64 4, label %196
i64 5, label %236
i64 6, label %257
]
74: ; preds = %69
%75 = load i64, i64* %7
%76 = icmp ule i64 %75, 0
br i1 %76, label %77, label %79
77: ; preds = %74
%78 = load i32, i32* @EXIT_FAILURE
store i32 %78, i32* %5
br label %329
79: ; preds = %74
%80 = load i8*, i8** %11
%81 = getelementptr inbounds i8, i8* %80, i64 0
%82 = load i8, i8* %81
%83 = zext i8 %82 to i32
%84 = and i32 %83, 7
%85 = trunc i32 %84 to i8
store i8 %85, i8* %81
%86 = load i32, i32* %13
%87 = shl i32 %86, 3
%88 = and i32 %87, 248
%89 = load i8*, i8** %11
%90 = getelementptr inbounds i8, i8* %89, i64 0
%91 = load i8, i8* %90
%92 = zext i8 %91 to i32
%93 = or i32 %92, %88
%94 = trunc i32 %93 to i8
store i8 %94, i8* %90
br label %321
95: ; preds = %69
%96 = load i64, i64* %7
%97 = icmp ult i64 %96, 1
br i1 %97, label %98, label %100
98: ; preds = %95
%99 = load i32, i32* @EXIT_FAILURE
store i32 %99, i32* %5
br label %329
100: ; preds = %95
%101 = load i8*, i8** %11
%102 = getelementptr inbounds i8, i8* %101, i64 0
%103 = load i8, i8* %102
%104 = zext i8 %103 to i32
%105 = and i32 %104, 248
%106 = trunc i32 %105 to i8
store i8 %106, i8* %102
%107 = load i32, i32* %13
%108 = ashr i32 %107, 2
%109 = and i32 %108, 7
%110 = load i8*, i8** %11
%111 = getelementptr inbounds i8, i8* %110, i64 0
%112 = load i8, i8* %111
%113 = zext i8 %112 to i32
%114 = or i32 %113, %109
%115 = trunc i32 %114 to i8
store i8 %115, i8* %111
%116 = load i64, i64* %7
%117 = icmp uge i64 %116, 2
br i1 %117, label %118, label %134
118: ; preds = %100
%119 = load i8*, i8** %11
%120 = getelementptr inbounds i8, i8* %119, i64 1
%121 = load i8, i8* %120
%122 = zext i8 %121 to i32
%123 = and i32 %122, 63
%124 = trunc i32 %123 to i8
store i8 %124, i8* %120
%125 = load i32, i32* %13
%126 = shl i32 %125, 6
%127 = and i32 %126, 192
%128 = load i8*, i8** %11
%129 = getelementptr inbounds i8, i8* %128, i64 1
%130 = load i8, i8* %129
%131 = zext i8 %130 to i32
%132 = or i32 %131, %127
%133 = trunc i32 %132 to i8
store i8 %133, i8* %129
br label %134
134: ; preds = %118, %100
br label %321
135: ; preds = %69
%136 = load i64, i64* %7
%137 = icmp ult i64 %136, 2
br i1 %137, label %138, label %140
138: ; preds = %135
%139 = load i32, i32* @EXIT_FAILURE
store i32 %139, i32* %5
br label %329
140: ; preds = %135
%141 = load i8*, i8** %11
%142 = getelementptr inbounds i8, i8* %141, i64 1
%143 = load i8, i8* %142
%144 = zext i8 %143 to i32
%145 = and i32 %144, 193
%146 = trunc i32 %145 to i8
store i8 %146, i8* %142
%147 = load i32, i32* %13
%148 = shl i32 %147, 1
%149 = and i32 %148, 62
%150 = load i8*, i8** %11
%151 = getelementptr inbounds i8, i8* %150, i64 1
%152 = load i8, i8* %151
%153 = zext i8 %152 to i32
%154 = or i32 %153, %149
%155 = trunc i32 %154 to i8
store i8 %155, i8* %151
br label %321
156: ; preds = %69
%157 = load i64, i64* %7
%158 = icmp ult i64 %157, 2
br i1 %158, label %159, label %161
159: ; preds = %156
%160 = load i32, i32* @EXIT_FAILURE
store i32 %160, i32* %5
br label %329
161: ; preds = %156
%162 = load i8*, i8** %11
%163 = getelementptr inbounds i8, i8* %162, i64 1
%164 = load i8, i8* %163
%165 = zext i8 %164 to i32
%166 = and i32 %165, 254
%167 = trunc i32 %166 to i8
store i8 %167, i8* %163
%168 = load i32, i32* %13
%169 = ashr i32 %168, 4
%170 = and i32 %169, 1
%171 = load i8*, i8** %11
%172 = getelementptr inbounds i8, i8* %171, i64 1
%173 = load i8, i8* %172
%174 = zext i8 %173 to i32
%175 = or i32 %174, %170
%176 = trunc i32 %175 to i8
store i8 %176, i8* %172
%177 = load i64, i64* %7
%178 = icmp uge i64 %177, 3
br i1 %178, label %179, label %195
179: ; preds = %161
%180 = load i8*, i8** %11
%181 = getelementptr inbounds i8, i8* %180, i64 2
%182 = load i8, i8* %181
%183 = zext i8 %182 to i32
%184 = and i32 %183, 15
%185 = trunc i32 %184 to i8
store i8 %185, i8* %181
%186 = load i32, i32* %13
%187 = shl i32 %186, 4
%188 = and i32 %187, 240
%189 = load i8*, i8** %11
%190 = getelementptr inbounds i8, i8* %189, i64 2
%191 = load i8, i8* %190
%192 = zext i8 %191 to i32
%193 = or i32 %192, %188
%194 = trunc i32 %193 to i8
store i8 %194, i8* %190
br label %195
195: ; preds = %179, %161
br label %321
196: ; preds = %69
%197 = load i64, i64* %7
%198 = icmp ult i64 %197, 3
br i1 %198, label %199, label %201
199: ; preds = %196
%200 = load i32, i32* @EXIT_FAILURE
store i32 %200, i32* %5
br label %329
201: ; preds = %196
%202 = load i8*, i8** %11
%203 = getelementptr inbounds i8, i8* %202, i64 2
%204 = load i8, i8* %203
%205 = zext i8 %204 to i32
%206 = and i32 %205, 240
%207 = trunc i32 %206 to i8
store i8 %207, i8* %203
%208 = load i32, i32* %13
%209 = ashr i32 %208, 1
%210 = and i32 %209, 15
%211 = load i8*, i8** %11
%212 = getelementptr inbounds i8, i8* %211, i64 2
%213 = load i8, i8* %212
%214 = zext i8 %213 to i32
%215 = or i32 %214, %210
%216 = trunc i32 %215 to i8
store i8 %216, i8* %212
%217 = load i64, i64* %7
%218 = icmp uge i64 %217, 4
br i1 %218, label %219, label %235
219: ; preds = %201
%220 = load i8*, i8** %11
%221 = getelementptr inbounds i8, i8* %220, i64 3
%222 = load i8, i8* %221
%223 = zext i8 %222 to i32
%224 = and i32 %223, 127
%225 = trunc i32 %224 to i8
store i8 %225, i8* %221
%226 = load i32, i32* %13
%227 = shl i32 %226, 7
%228 = and i32 %227, 128
%229 = load i8*, i8** %11
%230 = getelementptr inbounds i8, i8* %229, i64 3
%231 = load i8, i8* %230
%232 = zext i8 %231 to i32
%233 = or i32 %232, %228
%234 = trunc i32 %233 to i8
store i8 %234, i8* %230
br label %235
235: ; preds = %219, %201
br label %321
236: ; preds = %69
%237 = load i64, i64* %7
%238 = icmp ult i64 %237, 4
br i1 %238, label %239, label %241
239: ; preds = %236
%240 = load i32, i32* @EXIT_FAILURE
store i32 %240, i32* %5
br label %329
241: ; preds = %236
%242 = load i8*, i8** %11
%243 = getelementptr inbounds i8, i8* %242, i64 3
%244 = load i8, i8* %243
%245 = zext i8 %244 to i32
%246 = and i32 %245, 131
%247 = trunc i32 %246 to i8
store i8 %247, i8* %243
%248 = load i32, i32* %13
%249 = shl i32 %248, 2
%250 = and i32 %249, 124
%251 = load i8*, i8** %11
%252 = getelementptr inbounds i8, i8* %251, i64 3
%253 = load i8, i8* %252
%254 = zext i8 %253 to i32
%255 = or i32 %254, %250
%256 = trunc i32 %255 to i8
store i8 %256, i8* %252
br label %321
257: ; preds = %69
%258 = load i64, i64* %7
%259 = icmp ult i64 %258, 4
br i1 %259, label %260, label %262
260: ; preds = %257
%261 = load i32, i32* @EXIT_FAILURE
store i32 %261, i32* %5
br label %329
262: ; preds = %257
%263 = load i8*, i8** %11
%264 = getelementptr inbounds i8, i8* %263, i64 3
%265 = load i8, i8* %264
%266 = zext i8 %265 to i32
%267 = and i32 %266, 252
%268 = trunc i32 %267 to i8
store i8 %268, i8* %264
%269 = load i32, i32* %13
%270 = ashr i32 %269, 3
%271 = and i32 %270, 3
%272 = load i8*, i8** %11
%273 = getelementptr inbounds i8, i8* %272, i64 3
%274 = load i8, i8* %273
%275 = zext i8 %274 to i32
%276 = or i32 %275, %271
%277 = trunc i32 %276 to i8
store i8 %277, i8* %273
%278 = load i64, i64* %7
%279 = icmp uge i64 %278, 5
br i1 %279, label %280, label %296
280: ; preds = %262
%281 = load i8*, i8** %11
%282 = getelementptr inbounds i8, i8* %281, i64 4
%283 = load i8, i8* %282
%284 = zext i8 %283 to i32
%285 = and i32 %284, 31
%286 = trunc i32 %285 to i8
store i8 %286, i8* %282
%287 = load i32, i32* %13
%288 = shl i32 %287, 5
%289 = and i32 %288, 224
%290 = load i8*, i8** %11
%291 = getelementptr inbounds i8, i8* %290, i64 4
%292 = load i8, i8* %291
%293 = zext i8 %292 to i32
%294 = or i32 %293, %289
%295 = trunc i32 %294 to i8
store i8 %295, i8* %291
br label %296
296: ; preds = %280, %262
br label %321
297: ; preds = %69
%298 = load i64, i64* %7
%299 = icmp ult i64 %298, 5
br i1 %299, label %300, label %302
300: ; preds = %297
%301 = load i32, i32* @EXIT_FAILURE
store i32 %301, i32* %5
br label %329
302: ; preds = %297
%303 = load i8*, i8** %11
%304 = getelementptr inbounds i8, i8* %303, i64 4
%305 = load i8, i8* %304
%306 = zext i8 %305 to i32
%307 = and i32 %306, 224
%308 = trunc i32 %307 to i8
store i8 %308, i8* %304
%309 = load i32, i32* %13
%310 = and i32 %309, 31
%311 = load i8*, i8** %11
%312 = getelementptr inbounds i8, i8* %311, i64 4
%313 = load i8, i8* %312
%314 = zext i8 %313 to i32
%315 = or i32 %314, %310
%316 = trunc i32 %315 to i8
store i8 %316, i8* %312
%317 = load i8*, i8** %11
%318 = getelementptr inbounds i8, i8* %317, i64 5
store i8* %318, i8** %11
%319 = load i64, i64* %7
%320 = sub i64 %319, 5
store i64 %320, i64* %7
br label %321
321: ; preds = %302, %296, %241, %235, %195, %140, %134, %79
%322 = load i64, i64* %10
%323 = add i64 %322, 1
store i64 %323, i64* %10
br label %324
324: ; preds = %321, %63
%325 = load i32, i32* %12
%326 = add nsw i32 %325, 1
store i32 %326, i32* %12
br label %22
327: ; preds = %22
%328 = load i32, i32* @EXIT_SUCCESS
store i32 %328, i32* %5
br label %329
329: ; preds = %327, %300, %260, %239, %199, %159, %138, %98, %77, %66, %19
%330 = load i32, i32* %5
ret i32 %330
}

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