#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*/ rightArm;
typedef int /*<<< orphan*/ leftArm;
typedef int /*<<< orphan*/ body;
typedef int /*<<< orphan*/ accessory;

/* Variables and functions */
scalar_t__ calloc(int, int);
int /*<<< orphan*/ free(char *);
int /*<<< orphan*/ libcperciva_HMAC_SHA256_Buf(char const *, int /*<<< orphan*/,
                                               char const *, int /*<<< orphan*/,
                                               int *);
int /*<<< orphan*/ sprintf(char *, char *, char *, char const *, char const *,
                           char const *, char const *, char *);
int /*<<< orphan*/ strlen(char const *);
const char *Identicon(const char *userName, const char *masterPassword) {
  const char *leftArm[] = {"╔", "╚", "╰", "═"};
  const char *rightArm[] = {"╗", "╝", "╯", "═"};
  const char *body[] = {"█", "░", "▒", "▓", "☺", "☻"};
  const char *accessory[] = {
      "◈", "◎", "◐", "◑", "◒", "◓", "☀", "☁", "☂", "☃", "☄", "★", "☆", "☎", "☏",
      "⎈", "⌂", "☘", "☢", "☣", "☕", "⌚", "⌛", "⏰", "⚡", "⛄", "⛅", "☔", "♔", "♕",
      "♖", "♗", "♘", "♙", "♚", "♛", "♜", "♝", "♞", "♟", "♨", "♩", "♪", "♫", "⚐",
      "⚑", "⚔", "⚖", "⚙", "⚠", "⌘", "⏎", "✄", "✆", "✈", "✉", "✌"};
  uint8_t identiconSeed[32];
  libcperciva_HMAC_SHA256_Buf(masterPassword, strlen(masterPassword), userName,
                              strlen(userName), identiconSeed);
  char *colorString, *resetString;
  {
    colorString = (char *)calloc(1, sizeof(char));
    resetString = (char *)calloc(1, sizeof(char));
  }
  char *identicon = (char *)calloc(256, sizeof(char));
  sprintf(
      identicon, "%s%s%s%s%s%s", colorString,
      leftArm[identiconSeed[0] % (sizeof(leftArm) / sizeof(leftArm[0]))],
      body[identiconSeed[1] % (sizeof(body) / sizeof(body[0]))],
      rightArm[identiconSeed[2] % (sizeof(rightArm) / sizeof(rightArm[0]))],
      accessory[identiconSeed[3] % (sizeof(accessory) / sizeof(accessory[0]))],
      resetString);
  free(colorString);
  free(resetString);
  return identicon;
}


x86 assembly (clang, -O0):
<Identicon>:
push   %rbp
mov    %rsp,%rbp
sub    $0x320,%rsp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    0x2a86(%rip),%rax
mov    %rax,-0x30(%rbp)
mov    0x2a83(%rip),%rax
mov    %rax,-0x28(%rbp)
mov    0x2a80(%rip),%rax
mov    %rax,-0x20(%rbp)
mov    0x2a7d(%rip),%rax
mov    %rax,-0x18(%rbp)
mov    0x2a7a(%rip),%rax
mov    %rax,-0x50(%rbp)
mov    0x2a77(%rip),%rax
mov    %rax,-0x48(%rbp)
mov    0x2a74(%rip),%rax
mov    %rax,-0x40(%rbp)
mov    0x2a71(%rip),%rax
mov    %rax,-0x38(%rbp)
lea    -0x80(%rbp),%rdi
xor    %esi,%esi
mov    $0x30,%edx
call   1050 <memset@plt>
lea    0xe2a(%rip),%rax
mov    %rax,-0x80(%rbp)
lea    0xe23(%rip),%rax
mov    %rax,-0x78(%rbp)
lea    0xe1c(%rip),%rax
mov    %rax,-0x70(%rbp)
lea    0xe15(%rip),%rax
mov    %rax,-0x68(%rbp)
lea    0xe0e(%rip),%rax
mov    %rax,-0x60(%rbp)
lea    0xe07(%rip),%rax
mov    %rax,-0x58(%rbp)
lea    -0x250(%rbp),%rdi
lea    0x2a15(%rip),%rsi
mov    $0x1c8,%edx
call   1070 <memcpy@plt>
mov    -0x10(%rbp),%rax
mov    %rax,-0x308(%rbp)
mov    -0x10(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,-0x2fc(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x2f8(%rbp)
mov    -0x8(%rbp),%rdi
call   1040 <strlen@plt>
mov    -0x308(%rbp),%rdi
mov    -0x2fc(%rbp),%esi
mov    -0x2f8(%rbp),%rdx
mov    %eax,%ecx
lea    -0x2d0(%rbp),%r8
call   1080 <libcperciva_HMAC_SHA256_Buf@plt>
mov    $0x1,%esi
mov    %esi,%edi
call   1060 <calloc@plt>
mov    %rax,-0x2d8(%rbp)
mov    $0x1,%esi
mov    %esi,%edi
call   1060 <calloc@plt>
mov    %rax,-0x2e0(%rbp)
mov    $0x100,%edi
mov    $0x1,%esi
call   1060 <calloc@plt>
mov    %rax,-0x2e8(%rbp)
mov    -0x2e8(%rbp),%rdi
mov    -0x2d8(%rbp),%rax
mov    %rax,-0x2f0(%rbp)
movslq -0x2d0(%rbp),%rax
and    $0x3,%rax
mov    -0x30(%rbp,%rax,8),%rcx
movslq -0x2cc(%rbp),%rax
mov    $0x6,%esi
xor    %edx,%edx
div    %rsi
mov    -0x80(%rbp,%rdx,8),%r8
movslq -0x2c8(%rbp),%rax
and    $0x3,%rax
mov    -0x50(%rbp,%rax,8),%r9
movslq -0x2c4(%rbp),%rax
mov    $0x39,%esi
xor    %edx,%edx
div    %rsi
mov    %rdx,%rax
mov    -0x2f0(%rbp),%rdx
mov    -0x250(%rbp,%rax,8),%r10
ff
mov    -0x2e0(%rbp),%rax
lea    0xdcb(%rip),%rsi
mov    %r10,(%rsp)
mov    %rax,0x8(%rsp)
call   1090 <sprintf@plt>
mov    -0x2d8(%rbp),%rdi
call   1030 <free@plt>
mov    -0x2e0(%rbp),%rdi
call   1030 <free@plt>
mov    -0x2e8(%rbp),%rax
add    $0x320,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<Identicon>:
push   %rbp
push   %r15
push   %r14
push   %rbx
sub    $0xb8,%rsp
mov    %rsi,%rbx
mov    %rdi,%r14
lea    0xeb2(%rip),%rax
mov    %rax,(%rsp)
lea    0xeab(%rip),%rax
mov    %rax,0x8(%rsp)
lea    0xea3(%rip),%rax
mov    %rax,0x10(%rsp)
lea    0xe9b(%rip),%rax
mov    %rax,0x18(%rsp)
lea    0xe93(%rip),%rax
mov    %rax,0x20(%rsp)
lea    0xe8b(%rip),%rax
mov    %rax,0x28(%rsp)
mov    %rsi,%rdi
call   1040 <strlen@plt>
mov    %eax,%ebp
mov    %r14,%rdi
call   1040 <strlen@plt>
lea    0x30(%rsp),%r8
mov    %rbx,%rdi
mov    %ebp,%esi
mov    %r14,%rdx
mov    %eax,%ecx
call   1060 <libcperciva_HMAC_SHA256_Buf@plt>
mov    $0x1,%edi
mov    $0x1,%esi
call   1050 <calloc@plt>
mov    %rax,%r14
mov    $0x1,%edi
mov    $0x1,%esi
call   1050 <calloc@plt>
mov    %rax,%r15
mov    $0x100,%edi
mov    $0x1,%esi
call   1050 <calloc@plt>
mov    %rax,%rbx
mov    0x30(%rsp),%eax
mov    0x38(%rsp),%edi
and    $0x3,%eax
lea    0xf10(%rip),%rbp
movslq 0x0(%rbp,%rax,4),%rcx
movslq 0x34(%rsp),%rsi
movabs $0xaaaaaaaaaaaaaaab,%rdx
aa aa aa
mov    %rsi,%rax
mul    %rdx
add    %rbp,%rcx
shr    %rdx
and    $0xfffffffffffffffe,%rdx
lea    (%rdx,%rdx,2),%rax
sub    %rax,%rsi
mov    (%rsp,%rsi,8),%r8
and    $0x3,%edi
lea    0xee7(%rip),%rax
movslq (%rax,%rdi,4),%r9
add    %rax,%r9
movslq 0x3c(%rsp),%rsi
movabs $0x8fb823ee08fb823f,%rdx
23 b8 8f
mov    %rsi,%rax
mul    %rdx
shr    $0x5,%rdx
imul   $0x39,%rdx,%rax
sub    %rax,%rsi
lea    0xec9(%rip),%rax
movslq (%rax,%rsi,4),%rbp
add    %rax,%rbp
lea    0xe8b(%rip),%rsi
mov    %rbx,%rdi
mov    %r14,%rdx
push   %r15
push   %rbp
call   1070 <sprintf@plt>
add    $0x10,%rsp
mov    %r14,%rdi
call   1030 <free@plt>
mov    %r15,%rdi
call   1030 <free@plt>
mov    %rbx,%rax
add    $0xb8,%rsp
pop    %rbx
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [4 x i8] c"\E2\95\94\00"
@.str.1 = [4 x i8] c"\E2\95\9A\00"
@.str.2 = [4 x i8] c"\E2\95\B0\00"
@.str.3 = [4 x i8] c"\E2\95\90\00"
@__const.Identicon.leftArm = [4 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i32 0, i32 0)]
@.str.4 = [4 x i8] c"\E2\95\97\00"
@.str.5 = [4 x i8] c"\E2\95\9D\00"
@.str.6 = [4 x i8] c"\E2\95\AF\00"
@__const.Identicon.rightArm = [4 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i32 0, i32 0)]
@.str.7 = [4 x i8] c"\E2\96\88\00"
@.str.8 = [4 x i8] c"\E2\96\91\00"
@.str.9 = [4 x i8] c"\E2\96\92\00"
@.str.10 = [4 x i8] c"\E2\96\93\00"
@.str.11 = [4 x i8] c"\E2\98\BA\00"
@.str.12 = [4 x i8] c"\E2\98\BB\00"
@.str.13 = [4 x i8] c"\E2\97\88\00"
@.str.14 = [4 x i8] c"\E2\97\8E\00"
@.str.15 = [4 x i8] c"\E2\97\90\00"
@.str.16 = [4 x i8] c"\E2\97\91\00"
@.str.17 = [4 x i8] c"\E2\97\92\00"
@.str.18 = [4 x i8] c"\E2\97\93\00"
@.str.19 = [4 x i8] c"\E2\98\80\00"
@.str.20 = [4 x i8] c"\E2\98\81\00"
@.str.21 = [4 x i8] c"\E2\98\82\00"
@.str.22 = [4 x i8] c"\E2\98\83\00"
@.str.23 = [4 x i8] c"\E2\98\84\00"
@.str.24 = [4 x i8] c"\E2\98\85\00"
@.str.25 = [4 x i8] c"\E2\98\86\00"
@.str.26 = [4 x i8] c"\E2\98\8E\00"
@.str.27 = [4 x i8] c"\E2\98\8F\00"
@.str.28 = [4 x i8] c"\E2\8E\88\00"
@.str.29 = [4 x i8] c"\E2\8C\82\00"
@.str.30 = [4 x i8] c"\E2\98\98\00"
@.str.31 = [4 x i8] c"\E2\98\A2\00"
@.str.32 = [4 x i8] c"\E2\98\A3\00"
@.str.33 = [4 x i8] c"\E2\98\95\00"
@.str.34 = [4 x i8] c"\E2\8C\9A\00"
@.str.35 = [4 x i8] c"\E2\8C\9B\00"
@.str.36 = [4 x i8] c"\E2\8F\B0\00"
@.str.37 = [4 x i8] c"\E2\9A\A1\00"
@.str.38 = [4 x i8] c"\E2\9B\84\00"
@.str.39 = [4 x i8] c"\E2\9B\85\00"
@.str.40 = [4 x i8] c"\E2\98\94\00"
@.str.41 = [4 x i8] c"\E2\99\94\00"
@.str.42 = [4 x i8] c"\E2\99\95\00"
@.str.43 = [4 x i8] c"\E2\99\96\00"
@.str.44 = [4 x i8] c"\E2\99\97\00"
@.str.45 = [4 x i8] c"\E2\99\98\00"
@.str.46 = [4 x i8] c"\E2\99\99\00"
@.str.47 = [4 x i8] c"\E2\99\9A\00"
@.str.48 = [4 x i8] c"\E2\99\9B\00"
@.str.49 = [4 x i8] c"\E2\99\9C\00"
@.str.50 = [4 x i8] c"\E2\99\9D\00"
@.str.51 = [4 x i8] c"\E2\99\9E\00"
@.str.52 = [4 x i8] c"\E2\99\9F\00"
@.str.53 = [4 x i8] c"\E2\99\A8\00"
@.str.54 = [4 x i8] c"\E2\99\A9\00"
@.str.55 = [4 x i8] c"\E2\99\AA\00"
@.str.56 = [4 x i8] c"\E2\99\AB\00"
@.str.57 = [4 x i8] c"\E2\9A\90\00"
@.str.58 = [4 x i8] c"\E2\9A\91\00"
@.str.59 = [4 x i8] c"\E2\9A\94\00"
@.str.60 = [4 x i8] c"\E2\9A\96\00"
@.str.61 = [4 x i8] c"\E2\9A\99\00"
@.str.62 = [4 x i8] c"\E2\9A\A0\00"
@.str.63 = [4 x i8] c"\E2\8C\98\00"
@.str.64 = [4 x i8] c"\E2\8F\8E\00"
@.str.65 = [4 x i8] c"\E2\9C\84\00"
@.str.66 = [4 x i8] c"\E2\9C\86\00"
@.str.67 = [4 x i8] c"\E2\9C\88\00"
@.str.68 = [4 x i8] c"\E2\9C\89\00"
@.str.69 = [4 x i8] c"\E2\9C\8C\00"
@__const.Identicon.accessory = [57 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.19, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.25, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.28, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.29, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.32, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.34, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.36, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.38, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.39, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.40, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.41, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.42, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.43, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.44, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.45, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.46, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.47, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.48, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.49, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.50, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.51, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.52, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.53, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.54, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.55, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.56, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.57, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.58, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.59, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.60, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.61, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.62, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.63, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.64, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.65, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.66, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.67, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.68, i32 0, i32 0), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.69, i32 0, i32 0)]
@.str.70 = [13 x i8] c"%s%s%s%s%s%s\00"
define i8* @Identicon(i8* %0, i8* %1) {
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca [4 x i8*]
%6 = alloca [4 x i8*]
%7 = alloca [6 x i8*]
%8 = alloca [57 x i8*]
%9 = alloca [32 x i32]
%10 = alloca i8*
%11 = alloca i8*
%12 = alloca i8*
store i8* %0, i8** %3
store i8* %1, i8** %4
%13 = bitcast [4 x i8*]* %5 to i8*
%14 = bitcast [4 x i8*]* %6 to i8*
%15 = bitcast [6 x i8*]* %7 to i8*
%16 = bitcast i8* %15 to [6 x i8*]*
%17 = getelementptr inbounds [6 x i8*], [6 x i8*]* %16, i32 0, i32 0
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i32 0, i32 0), i8** %17
%18 = getelementptr inbounds [6 x i8*], [6 x i8*]* %16, i32 0, i32 1
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i32 0, i32 0), i8** %18
%19 = getelementptr inbounds [6 x i8*], [6 x i8*]* %16, i32 0, i32 2
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i32 0, i32 0), i8** %19
%20 = getelementptr inbounds [6 x i8*], [6 x i8*]* %16, i32 0, i32 3
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i32 0, i32 0), i8** %20
%21 = getelementptr inbounds [6 x i8*], [6 x i8*]* %16, i32 0, i32 4
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i32 0, i32 0), i8** %21
%22 = getelementptr inbounds [6 x i8*], [6 x i8*]* %16, i32 0, i32 5
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i32 0, i32 0), i8** %22
%23 = bitcast [57 x i8*]* %8 to i8*
%24 = load i8*, i8** %4
%25 = load i8*, i8** %4
%26 = call i32 @strlen(i8* %25)
%27 = load i8*, i8** %3
%28 = load i8*, i8** %3
%29 = call i32 @strlen(i8* %28)
%30 = getelementptr inbounds [32 x i32], [32 x i32]* %9, i64 0, i64 0
%31 = call i32 @libcperciva_HMAC_SHA256_Buf(i8* %24, i32 %26, i8* %27, i32 %29, i32* %30)
%32 = call i64 @calloc(i32 1, i32 1)
%33 = inttoptr i64 %32 to i8*
store i8* %33, i8** %10
%34 = call i64 @calloc(i32 1, i32 1)
%35 = inttoptr i64 %34 to i8*
store i8* %35, i8** %11
%36 = call i64 @calloc(i32 256, i32 1)
%37 = inttoptr i64 %36 to i8*
store i8* %37, i8** %12
%38 = load i8*, i8** %12
%39 = load i8*, i8** %10
%40 = getelementptr inbounds [32 x i32], [32 x i32]* %9, i64 0, i64 0
%41 = load i32, i32* %40
%42 = sext i32 %41 to i64
%43 = urem i64 %42, 4
%44 = getelementptr inbounds [4 x i8*], [4 x i8*]* %5, i64 0, i64 %43
%45 = load i8*, i8** %44
%46 = getelementptr inbounds [32 x i32], [32 x i32]* %9, i64 0, i64 1
%47 = load i32, i32* %46
%48 = sext i32 %47 to i64
%49 = urem i64 %48, 6
%50 = getelementptr inbounds [6 x i8*], [6 x i8*]* %7, i64 0, i64 %49
%51 = load i8*, i8** %50
%52 = getelementptr inbounds [32 x i32], [32 x i32]* %9, i64 0, i64 2
%53 = load i32, i32* %52
%54 = sext i32 %53 to i64
%55 = urem i64 %54, 4
%56 = getelementptr inbounds [4 x i8*], [4 x i8*]* %6, i64 0, i64 %55
%57 = load i8*, i8** %56
%58 = getelementptr inbounds [32 x i32], [32 x i32]* %9, i64 0, i64 3
%59 = load i32, i32* %58
%60 = sext i32 %59 to i64
%61 = urem i64 %60, 57
%62 = getelementptr inbounds [57 x i8*], [57 x i8*]* %8, i64 0, i64 %61
%63 = load i8*, i8** %62
%64 = load i8*, i8** %11
%65 = call i32 @sprintf(i8* %38, i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.70, i64 0, i64 0), i8* %39, i8* %45, i8* %51, i8* %57, i8* %63, i8* %64)
%66 = load i8*, i8** %10
%67 = call i32 @free(i8* %66)
%68 = load i8*, i8** %11
%69 = call i32 @free(i8* %68)
%70 = load i8*, i8** %12
ret i8* %70
}

LLVM IR (-O2):
@.str = [4 x i8] c"\E2\95\94\00"
@.str.1 = [4 x i8] c"\E2\95\9A\00"
@.str.2 = [4 x i8] c"\E2\95\B0\00"
@.str.3 = [4 x i8] c"\E2\95\90\00"
@reltable.Identicon = [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str to i64), i64 ptrtoint ([4 x i32]* @reltable.Identicon to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.1 to i64), i64 ptrtoint ([4 x i32]* @reltable.Identicon to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.2 to i64), i64 ptrtoint ([4 x i32]* @reltable.Identicon to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.3 to i64), i64 ptrtoint ([4 x i32]* @reltable.Identicon to i64)) to i32)]
@.str.4 = [4 x i8] c"\E2\95\97\00"
@.str.5 = [4 x i8] c"\E2\95\9D\00"
@.str.6 = [4 x i8] c"\E2\95\AF\00"
@reltable.Identicon.71 = [4 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.4 to i64), i64 ptrtoint ([4 x i32]* @reltable.Identicon.71 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.5 to i64), i64 ptrtoint ([4 x i32]* @reltable.Identicon.71 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.6 to i64), i64 ptrtoint ([4 x i32]* @reltable.Identicon.71 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.3 to i64), i64 ptrtoint ([4 x i32]* @reltable.Identicon.71 to i64)) to i32)]
@.str.7 = [4 x i8] c"\E2\96\88\00"
@.str.8 = [4 x i8] c"\E2\96\91\00"
@.str.9 = [4 x i8] c"\E2\96\92\00"
@.str.10 = [4 x i8] c"\E2\96\93\00"
@.str.11 = [4 x i8] c"\E2\98\BA\00"
@.str.12 = [4 x i8] c"\E2\98\BB\00"
@.str.13 = [4 x i8] c"\E2\97\88\00"
@.str.14 = [4 x i8] c"\E2\97\8E\00"
@.str.15 = [4 x i8] c"\E2\97\90\00"
@.str.16 = [4 x i8] c"\E2\97\91\00"
@.str.17 = [4 x i8] c"\E2\97\92\00"
@.str.18 = [4 x i8] c"\E2\97\93\00"
@.str.19 = [4 x i8] c"\E2\98\80\00"
@.str.20 = [4 x i8] c"\E2\98\81\00"
@.str.21 = [4 x i8] c"\E2\98\82\00"
@.str.22 = [4 x i8] c"\E2\98\83\00"
@.str.23 = [4 x i8] c"\E2\98\84\00"
@.str.24 = [4 x i8] c"\E2\98\85\00"
@.str.25 = [4 x i8] c"\E2\98\86\00"
@.str.26 = [4 x i8] c"\E2\98\8E\00"
@.str.27 = [4 x i8] c"\E2\98\8F\00"
@.str.28 = [4 x i8] c"\E2\8E\88\00"
@.str.29 = [4 x i8] c"\E2\8C\82\00"
@.str.30 = [4 x i8] c"\E2\98\98\00"
@.str.31 = [4 x i8] c"\E2\98\A2\00"
@.str.32 = [4 x i8] c"\E2\98\A3\00"
@.str.33 = [4 x i8] c"\E2\98\95\00"
@.str.34 = [4 x i8] c"\E2\8C\9A\00"
@.str.35 = [4 x i8] c"\E2\8C\9B\00"
@.str.36 = [4 x i8] c"\E2\8F\B0\00"
@.str.37 = [4 x i8] c"\E2\9A\A1\00"
@.str.38 = [4 x i8] c"\E2\9B\84\00"
@.str.39 = [4 x i8] c"\E2\9B\85\00"
@.str.40 = [4 x i8] c"\E2\98\94\00"
@.str.41 = [4 x i8] c"\E2\99\94\00"
@.str.42 = [4 x i8] c"\E2\99\95\00"
@.str.43 = [4 x i8] c"\E2\99\96\00"
@.str.44 = [4 x i8] c"\E2\99\97\00"
@.str.45 = [4 x i8] c"\E2\99\98\00"
@.str.46 = [4 x i8] c"\E2\99\99\00"
@.str.47 = [4 x i8] c"\E2\99\9A\00"
@.str.48 = [4 x i8] c"\E2\99\9B\00"
@.str.49 = [4 x i8] c"\E2\99\9C\00"
@.str.50 = [4 x i8] c"\E2\99\9D\00"
@.str.51 = [4 x i8] c"\E2\99\9E\00"
@.str.52 = [4 x i8] c"\E2\99\9F\00"
@.str.53 = [4 x i8] c"\E2\99\A8\00"
@.str.54 = [4 x i8] c"\E2\99\A9\00"
@.str.55 = [4 x i8] c"\E2\99\AA\00"
@.str.56 = [4 x i8] c"\E2\99\AB\00"
@.str.57 = [4 x i8] c"\E2\9A\90\00"
@.str.58 = [4 x i8] c"\E2\9A\91\00"
@.str.59 = [4 x i8] c"\E2\9A\94\00"
@.str.60 = [4 x i8] c"\E2\9A\96\00"
@.str.61 = [4 x i8] c"\E2\9A\99\00"
@.str.62 = [4 x i8] c"\E2\9A\A0\00"
@.str.63 = [4 x i8] c"\E2\8C\98\00"
@.str.64 = [4 x i8] c"\E2\8F\8E\00"
@.str.65 = [4 x i8] c"\E2\9C\84\00"
@.str.66 = [4 x i8] c"\E2\9C\86\00"
@.str.67 = [4 x i8] c"\E2\9C\88\00"
@.str.68 = [4 x i8] c"\E2\9C\89\00"
@.str.69 = [4 x i8] c"\E2\9C\8C\00"
@reltable.Identicon.72 = [57 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.13 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.14 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.15 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.16 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.17 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.18 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.19 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.20 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.21 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.22 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.23 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.24 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.25 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.26 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.27 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.28 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.29 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.30 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.31 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.32 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.33 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.34 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.35 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.36 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.37 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.38 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.39 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.40 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.41 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.42 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.43 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.44 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.45 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.46 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.47 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.48 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.49 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.50 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.51 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.52 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.53 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.54 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.55 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.56 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.57 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.58 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.59 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.60 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.61 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.62 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.63 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.64 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.65 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.66 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.67 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.68 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([4 x i8]* @.str.69 to i64), i64 ptrtoint ([57 x i32]* @reltable.Identicon.72 to i64)) to i32)]
@.str.70 = [13 x i8] c"%s%s%s%s%s%s\00"
define i8* @Identicon(i8* %0, i8* %1) {
%3 = alloca [6 x i8*]
%4 = alloca [32 x i32]
%5 = bitcast [6 x i8*]* %3 to i8*
%6 = getelementptr inbounds [6 x i8*], [6 x i8*]* %3, i64 0, i64 0
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.7, i64 0, i64 0), i8** %6
%7 = getelementptr inbounds [6 x i8*], [6 x i8*]* %3, i64 0, i64 1
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.8, i64 0, i64 0), i8** %7
%8 = getelementptr inbounds [6 x i8*], [6 x i8*]* %3, i64 0, i64 2
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.9, i64 0, i64 0), i8** %8
%9 = getelementptr inbounds [6 x i8*], [6 x i8*]* %3, i64 0, i64 3
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.10, i64 0, i64 0), i8** %9
%10 = getelementptr inbounds [6 x i8*], [6 x i8*]* %3, i64 0, i64 4
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.11, i64 0, i64 0), i8** %10
%11 = getelementptr inbounds [6 x i8*], [6 x i8*]* %3, i64 0, i64 5
store i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.12, i64 0, i64 0), i8** %11
%12 = bitcast [32 x i32]* %4 to i8*
%13 = tail call i32 @strlen(i8* %1)
%14 = tail call i32 @strlen(i8* %0)
%15 = getelementptr inbounds [32 x i32], [32 x i32]* %4, i64 0, i64 0
%16 = call i32 @libcperciva_HMAC_SHA256_Buf(i8* %1, i32 %13, i8* %0, i32 %14, i32* %15)
%17 = call i64 @calloc(i32 1, i32 1)
%18 = inttoptr i64 %17 to i8*
%19 = call i64 @calloc(i32 1, i32 1)
%20 = inttoptr i64 %19 to i8*
%21 = call i64 @calloc(i32 256, i32 1)
%22 = inttoptr i64 %21 to i8*
%23 = load i32, i32* %15
%24 = and i32 %23, 3
%25 = zext i32 %24 to i64
%26 = shl i64 %25, 2
%27 = call i8* @llvm.load.relative.i64(i8* bitcast ([4 x i32]* @reltable.Identicon to i8*), i64 %26)
%28 = getelementptr inbounds [32 x i32], [32 x i32]* %4, i64 0, i64 1
%29 = load i32, i32* %28
%30 = sext i32 %29 to i64
%31 = urem i64 %30, 6
%32 = getelementptr inbounds [6 x i8*], [6 x i8*]* %3, i64 0, i64 %31
%33 = load i8*, i8** %32
%34 = getelementptr inbounds [32 x i32], [32 x i32]* %4, i64 0, i64 2
%35 = load i32, i32* %34
%36 = and i32 %35, 3
%37 = zext i32 %36 to i64
%38 = shl i64 %37, 2
%39 = call i8* @llvm.load.relative.i64(i8* bitcast ([4 x i32]* @reltable.Identicon.71 to i8*), i64 %38)
%40 = getelementptr inbounds [32 x i32], [32 x i32]* %4, i64 0, i64 3
%41 = load i32, i32* %40
%42 = sext i32 %41 to i64
%43 = urem i64 %42, 57
%44 = shl i64 %43, 2
%45 = call i8* @llvm.load.relative.i64(i8* bitcast ([57 x i32]* @reltable.Identicon.72 to i8*), i64 %44)
%46 = call i32 @sprintf(i8* dereferenceable(1) %22, i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @.str.70, i64 0, i64 0), i8* %18, i8* %27, i8* %33, i8* %39, i8* %45, i8* %20)
%47 = call i32 @free(i8* %18)
%48 = call i32 @free(i8* %20)
ret i8* %22
}