#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 */

/* Variables and functions */
char *number(char *str, long long num, int base, int size, int precision,
             int type, size_t *osize, size_t n) {
  char c, sign, tmp[66];
  const char *digits = "0123456789abcdefghijklmnopqrstuvwxyz";
  int i;
  if (type & 0x40)
    digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
  if (type & 0x10)
    type &= 0xFE;
  if ((base < 2) || (base > 36))
    return NULL;
  c = (type & 0x01) ? '0' : ' ';
  sign = 0;
  if (type & 0x02) {
    if (num < 0) {
      sign = '-';
      num = -num;
      size--;
    } else if (type & 0x04) {
      sign = '+';
      size--;
    } else if (type & 0x08) {
      sign = ' ';
      size--;
    }
  }
  if (type & 0x20) {
    if (base == 16)
      size -= 2;
    else if (base == 8)
      size--;
  }
  i = 0;
  if (num == 0)
    tmp[i++] = '0';
  else {
    while (num != 0) {
      unsigned long long __res;
      __res = ((unsigned long long)num) % (unsigned int)base;
      num = ((unsigned long long)num) / (unsigned int)base;
      tmp[i++] = digits[__res];
    }
  }
  if (i > precision)
    precision = i;
  size -= precision;
  if (!(type & 0x11))
    while (size-- > 0)
      if ((*osize)++ < n)
        *(str++) = ' ';
  if (sign)
    if ((*osize)++ < n)
      *(str++) = sign;
  if (type & 0x20) {
    if (base == 8) {
      if ((*osize)++ < n)
        *(str++) = '0';
    } else if (base == 16) {
      if ((*osize)++ < n)
        *(str++) = '0';
      if ((*osize)++ < n)
        *(str++) = digits[33];
    }
  }
  if (!(type & 0x10))
    while (size-- > 0)
      if ((*osize)++ < n)
        *(str++) = c;
  while (i < precision--)
    if ((*osize)++ < n)
      *(str++) = '0';
  while (i-- > 0)
    if ((*osize)++ < n)
      *(str++) = tmp[i];
  while (size-- > 0)
    if ((*osize)++ < n)
      *(str++) = ' ';
  return str;
}


x86 assembly (clang, -O0):
<number>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10,%rsp
mov    0x18(%rbp),%rax
mov    0x10(%rbp),%rax
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %edx,-0x1c(%rbp)
mov    %ecx,-0x20(%rbp)
mov    %r8d,-0x24(%rbp)
mov    %r9d,-0x28(%rbp)
lea    0xed3(%rip),%rax
mov    %rax,-0x78(%rbp)
mov    -0x28(%rbp),%eax
and    $0x40,%eax
cmp    $0x0,%eax
je     114b <number+0x4b>
lea    0xede(%rip),%rax
mov    %rax,-0x78(%rbp)
mov    -0x28(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
je     1165 <number+0x65>
mov    -0x28(%rbp),%eax
and    $0xfe,%eax
mov    %eax,-0x28(%rbp)
cmpl   $0x2,-0x1c(%rbp)
jl     1179 <number+0x79>
cmpl   $0x24,-0x1c(%rbp)
jle    1186 <number+0x86>
movq   $0x0,-0x8(%rbp)
jmp    15bf <number+0x4bf>
mov    -0x28(%rbp),%edx
and    $0x1,%edx
mov    $0x20,%eax
mov    $0x30,%ecx
cmp    $0x0,%edx
cmovne %ecx,%eax
mov    %al,-0x29(%rbp)
movb   $0x0,-0x2a(%rbp)
mov    -0x28(%rbp),%eax
and    $0x2,%eax
cmp    $0x0,%eax
je     1225 <number+0x125>
cmpq   $0x0,-0x18(%rbp)
jge    11d9 <number+0xd9>
movb   $0x2d,-0x2a(%rbp)
xor    %eax,%eax
sub    -0x18(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
jmp    1220 <number+0x120>
mov    -0x28(%rbp),%eax
and    $0x4,%eax
cmp    $0x0,%eax
je     11fa <number+0xfa>
movb   $0x2b,-0x2a(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
jmp    121b <number+0x11b>
mov    -0x28(%rbp),%eax
and    $0x8,%eax
cmp    $0x0,%eax
je     1216 <number+0x116>
movb   $0x20,-0x2a(%rbp)
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
jmp    121b <number+0x11b>
jmp    1220 <number+0x120>
jmp    1225 <number+0x125>
mov    -0x28(%rbp),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     1269 <number+0x169>
cmpl   $0x10,-0x1c(%rbp)
jne    124c <number+0x14c>
mov    -0x20(%rbp),%eax
sub    $0x2,%eax
mov    %eax,-0x20(%rbp)
jmp    1264 <number+0x164>
cmpl   $0x8,-0x1c(%rbp)
jne    125f <number+0x15f>
mov    -0x20(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x20(%rbp)
jmp    1264 <number+0x164>
jmp    1269 <number+0x169>
movl   $0x0,-0x7c(%rbp)
cmpq   $0x0,-0x18(%rbp)
jne    1292 <number+0x192>
mov    -0x7c(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x7c(%rbp)
cltq
movb   $0x30,-0x70(%rbp,%rax,1)
jmp    12ee <number+0x1ee>
jmp    1297 <number+0x197>
cmpq   $0x0,-0x18(%rbp)
je     12e9 <number+0x1e9>
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
xor    %edx,%edx
div    %rcx
mov    %rdx,-0x88(%rbp)
mov    -0x18(%rbp),%rax
mov    -0x1c(%rbp),%ecx
xor    %edx,%edx
div    %rcx
mov    %rax,-0x18(%rbp)
mov    -0x78(%rbp),%rax
mov    -0x88(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
mov    -0x7c(%rbp),%eax
mov    %eax,%edx
add    $0x1,%edx
mov    %edx,-0x7c(%rbp)
cltq
mov    %cl,-0x70(%rbp,%rax,1)
jmp    1297 <number+0x197>
jmp    12ee <number+0x1ee>
mov    -0x7c(%rbp),%eax
cmp    -0x24(%rbp),%eax
jle    1300 <number+0x200>
mov    -0x7c(%rbp),%eax
mov    %eax,-0x24(%rbp)
mov    -0x24(%rbp),%ecx
mov    -0x20(%rbp),%eax
sub    %ecx,%eax
mov    %eax,-0x20(%rbp)
mov    -0x28(%rbp),%eax
and    $0x11,%eax
cmp    $0x0,%eax
jne    136a <number+0x26a>
jmp    131f <number+0x21f>
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    1365 <number+0x265>
mov    0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
cmp    0x18(%rbp),%rax
jae    1360 <number+0x260>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x20,(%rax)
jmp    131f <number+0x21f>
jmp    136a <number+0x26a>
cmpb   $0x0,-0x2a(%rbp)
je     13a8 <number+0x2a8>
mov    0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
cmp    0x18(%rbp),%rax
jae    13a3 <number+0x2a3>
mov    -0x2a(%rbp),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
jmp    13a8 <number+0x2a8>
mov    -0x28(%rbp),%eax
and    $0x20,%eax
cmp    $0x0,%eax
je     146c <number+0x36c>
cmpl   $0x8,-0x1c(%rbp)
jne    13f3 <number+0x2f3>
mov    0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
cmp    0x18(%rbp),%rax
jae    13ee <number+0x2ee>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x30,(%rax)
jmp    1467 <number+0x367>
cmpl   $0x10,-0x1c(%rbp)
jne    1462 <number+0x362>
mov    0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
cmp    0x18(%rbp),%rax
jae    142a <number+0x32a>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x30,(%rax)
mov    0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
cmp    0x18(%rbp),%rax
jae    145d <number+0x35d>
mov    -0x78(%rbp),%rax
mov    0x21(%rax),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
jmp    1462 <number+0x362>
jmp    1467 <number+0x367>
jmp    146c <number+0x36c>
mov    -0x28(%rbp),%eax
and    $0x10,%eax
cmp    $0x0,%eax
jne    14cd <number+0x3cd>
jmp    1480 <number+0x380>
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    14c8 <number+0x3c8>
mov    0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
cmp    0x18(%rbp),%rax
jae    14c3 <number+0x3c3>
mov    -0x29(%rbp),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
jmp    1480 <number+0x380>
jmp    14cd <number+0x3cd>
jmp    14d2 <number+0x3d2>
mov    -0x7c(%rbp),%eax
mov    -0x24(%rbp),%ecx
mov    %ecx,%edx
add    $0xffffffff,%edx
mov    %edx,-0x24(%rbp)
cmp    %ecx,%eax
jge    151a <number+0x41a>
mov    0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
cmp    0x18(%rbp),%rax
jae    1515 <number+0x415>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x30,(%rax)
jmp    14d2 <number+0x3d2>
jmp    151f <number+0x41f>
mov    -0x7c(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x7c(%rbp)
cmp    $0x0,%eax
jle    156c <number+0x46c>
mov    0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
cmp    0x18(%rbp),%rax
jae    1567 <number+0x467>
movslq -0x7c(%rbp),%rax
mov    -0x70(%rbp,%rax,1),%cl
mov    -0x10(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %cl,(%rax)
jmp    151f <number+0x41f>
jmp    1571 <number+0x471>
mov    -0x20(%rbp),%eax
mov    %eax,%ecx
add    $0xffffffff,%ecx
mov    %ecx,-0x20(%rbp)
cmp    $0x0,%eax
jle    15b7 <number+0x4b7>
mov    0x10(%rbp),%rcx
mov    (%rcx),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,(%rcx)
cmp    0x18(%rbp),%rax
jae    15b2 <number+0x4b2>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
movb   $0x20,(%rax)
jmp    1571 <number+0x471>
mov    -0x10(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x10,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<number>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
mov    %edx,%r10d
test   $0x40,%r9b
lea    0xee8(%rip),%rax
lea    0xf06(%rip),%rbp
cmove  %rax,%rbp
mov    %r9d,%r13d
and    $0xfe,%r13d
test   $0x10,%r9b
cmove  %r9d,%r13d
lea    -0x25(%r10),%eax
cmp    $0xffffffdd,%eax
jae    1146 <number+0x46>
xor    %r11d,%r11d
jmp    1455 <number+0x355>
mov    %rdi,%r11
mov    $0x1,%r15b
test   $0x2,%r13b
jne    115d <number+0x5d>
xor    %r14d,%r14d
test   $0x20,%r13b
je     119f <number+0x9f>
jmp    1190 <number+0x90>
test   %rsi,%rsi
js     1176 <number+0x76>
test   $0x4,%r13b
jne    1181 <number+0x81>
test   $0x8,%r13b
je     1152 <number+0x52>
add    $0xffffffff,%ecx
mov    $0x20,%r14b
jmp    1187 <number+0x87>
neg    %rsi
add    $0xffffffff,%ecx
mov    $0x2d,%r14b
jmp    1187 <number+0x87>
add    $0xffffffff,%ecx
mov    $0x2b,%r14b
xor    %r15d,%r15d
test   $0x20,%r13b
je     119f <number+0x9f>
cmp    $0x8,%r10d
je     11de <number+0xde>
cmp    $0x10,%r10d
jne    119f <number+0x9f>
add    $0xfffffffe,%ecx
test   %rsi,%rsi
je     11e6 <number+0xe6>
mov    %r10d,%ebx
xor    %edi,%edi
jmp    11cd <number+0xcd>
nopl   0x0(%rax,%rax,1)
mov    %rsi,%rax
xor    %edx,%edx
div    %rbx
movzbl 0x0(%rbp,%rdx,1),%edx
mov    %dl,-0x48(%rsp,%rdi,1)
add    $0x1,%rdi
cmp    %rbx,%rsi
mov    %rax,%rsi
jb     11f0 <number+0xf0>
mov    %rsi,%rax
shr    $0x20,%rax
jne    11b0 <number+0xb0>
mov    %esi,%eax
xor    %edx,%edx
div    %ebx
jmp    11b8 <number+0xb8>
add    $0xffffffff,%ecx
test   %rsi,%rsi
jne    11a4 <number+0xa4>
movb   $0x30,-0x48(%rsp)
mov    $0x1,%edi
mov    0x40(%rsp),%rax
mov    0x38(%rsp),%rdx
cmp    %r8d,%edi
mov    %r8d,%r12d
cmovg  %edi,%r12d
sub    %r12d,%ecx
test   $0x11,%r13b
je     124f <number+0x14f>
test   %r15b,%r15b
jne    1228 <number+0x128>
mov    (%rdx),%rsi
lea    0x1(%rsi),%rbx
mov    %rbx,(%rdx)
cmp    %rax,%rsi
jae    1228 <number+0x128>
mov    %r14b,(%r11)
add    $0x1,%r11
test   $0x20,%r13b
je     12a7 <number+0x1a7>
cmp    $0x10,%r10d
je     126d <number+0x16d>
cmp    $0x8,%r10d
jne    12a7 <number+0x1a7>
mov    (%rdx),%rsi
lea    0x1(%rsi),%rbp
mov    %rbp,(%rdx)
cmp    %rax,%rsi
jae    12a7 <number+0x1a7>
movb   $0x30,(%r11)
jmp    12a3 <number+0x1a3>
lea    -0x1(%rcx),%ebx
test   %ecx,%ecx
jle    138a <number+0x28a>
mov    (%rdx),%rsi
test   $0x1,%cl
jne    14a5 <number+0x3a5>
mov    %ebx,%ebp
jmp    14c4 <number+0x3c4>
mov    (%rdx),%rbp
lea    0x1(%rbp),%rsi
mov    %rsi,(%rdx)
cmp    %rax,%rbp
jae    1287 <number+0x187>
movb   $0x30,(%r11)
add    $0x1,%r11
mov    (%rdx),%rsi
lea    0x1(%rsi),%rbp
mov    %rbp,(%rdx)
cmp    %rax,%rsi
jae    12a7 <number+0x1a7>
test   $0x40,%r9b
sete   %bl
shl    $0x5,%bl
or     $0x58,%bl
mov    %bl,(%r11)
add    $0x1,%r11
test   $0x10,%r13b
jne    1346 <number+0x246>
lea    -0x1(%rcx),%r9d
test   %ecx,%ecx
jle    12d2 <number+0x1d2>
and    $0x1,%r13b
shl    $0x4,%r13b
or     $0x20,%r13b
mov    (%rdx),%rsi
test   $0x1,%cl
jne    12d7 <number+0x1d7>
mov    %r9d,%ebp
jmp    12f5 <number+0x1f5>
mov    %r9d,%ecx
jmp    1346 <number+0x246>
lea    0x1(%rsi),%rbp
mov    %rbp,(%rdx)
cmp    %rax,%rsi
jae    12ed <number+0x1ed>
mov    %r13b,(%r11)
add    $0x1,%r11
mov    (%rdx),%rbp
add    $0xfffffffe,%ecx
mov    %rbp,%rsi
mov    %ecx,%ebp
mov    $0xffffffff,%ecx
test   %r9d,%r9d
je     1346 <number+0x246>
add    $0x2,%ebp
jmp    1318 <number+0x218>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
add    $0xfffffffe,%ebp
cmp    $0x1,%ebp
jle    1346 <number+0x246>
lea    0x1(%rsi),%rbx
mov    %rbx,(%rdx)
cmp    %rax,%rsi
jae    132e <number+0x22e>
mov    %r13b,(%r11)
add    $0x1,%r11
mov    (%rdx),%rbx
lea    0x1(%rbx),%rsi
mov    %rsi,(%rdx)
cmp    %rax,%rbx
jae    1310 <number+0x210>
mov    %r13b,(%r11)
add    $0x1,%r11
mov    (%rdx),%rsi
jmp    1310 <number+0x210>
cmp    %r8d,%edi
jge    1399 <number+0x299>
mov    (%rdx),%rbx
mov    %r12d,%esi
sub    %edi,%esi
lea    0x1(%rdi),%r8d
test   $0x1,%sil
jne    1367 <number+0x267>
mov    %r12d,%ebp
cmp    %r8d,%r12d
jne    13e4 <number+0x2e4>
jmp    1399 <number+0x299>
lea    -0x1(%r12),%ebp
lea    0x1(%rbx),%rsi
mov    %rsi,(%rdx)
cmp    %rax,%rbx
jae    1391 <number+0x291>
movb   $0x30,(%r11)
add    $0x1,%r11
mov    (%rdx),%rbx
cmp    %r8d,%r12d
jne    13e4 <number+0x2e4>
jmp    1399 <number+0x299>
mov    %ebx,%ecx
jmp    120d <number+0x10d>
mov    %rsi,%rbx
cmp    %r8d,%r12d
jne    13e4 <number+0x2e4>
mov    (%rdx),%rbp
lea    0x1(%rdi),%esi
add    $0xffffffff,%edi
add    %rsp,%rdi
add    $0xffffffffffffffb8,%rdi
jmp    13bf <number+0x2bf>
nopl   0x0(%rax,%rax,1)
add    $0xffffffff,%esi
add    $0xffffffffffffffff,%rdi
mov    %rbx,%rbp
cmp    $0x1,%esi
jle    1417 <number+0x317>
lea    0x1(%rbp),%rbx
mov    %rbx,(%rdx)
cmp    %rax,%rbp
jae    13b0 <number+0x2b0>
movzbl (%rdi),%ebx
mov    %bl,(%r11)
add    $0x1,%r11
mov    (%rdx),%rbx
jmp    13b0 <number+0x2b0>
nopw   0x0(%rax,%rax,1)
cmp    %ebp,%edi
jge    1399 <number+0x299>
lea    0x1(%rbx),%rsi
mov    %rsi,(%rdx)
cmp    %rax,%rbx
jae    13fb <number+0x2fb>
movb   $0x30,(%r11)
add    $0x1,%r11
mov    (%rdx),%rsi
add    $0xfffffffe,%ebp
lea    0x1(%rsi),%rbx
mov    %rbx,(%rdx)
cmp    %rax,%rsi
jae    13e0 <number+0x2e0>
movb   $0x30,(%r11)
add    $0x1,%r11
mov    (%rdx),%rbx
jmp    13e0 <number+0x2e0>
test   %ecx,%ecx
jle    1455 <number+0x355>
mov    (%rdx),%rdi
test   $0x1,%cl
jne    142c <number+0x32c>
mov    %ecx,%esi
cmp    $0x1,%ecx
je     1455 <number+0x355>
jmp    1463 <number+0x363>
lea    -0x1(%rcx),%esi
lea    0x1(%rdi),%rbp
mov    %rbp,(%rdx)
cmp    %rax,%rdi
jae    144d <number+0x34d>
movb   $0x20,(%r11)
add    $0x1,%r11
mov    (%rdx),%rdi
cmp    $0x1,%ecx
je     1455 <number+0x355>
jmp    1463 <number+0x363>
mov    %rbp,%rdi
cmp    $0x1,%ecx
jne    1463 <number+0x363>
mov    %r11,%rax
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
add    $0xffffffff,%esi
jmp    1475 <number+0x375>
nopl   0x0(%rax,%rax,1)
add    $0xfffffffe,%esi
jae    1455 <number+0x355>
lea    0x1(%rdi),%rcx
mov    %rcx,(%rdx)
cmp    %rax,%rdi
jae    148c <number+0x38c>
movb   $0x20,(%r11)
add    $0x1,%r11
mov    (%rdx),%rcx
lea    0x1(%rcx),%rdi
mov    %rdi,(%rdx)
cmp    %rax,%rcx
jae    1470 <number+0x370>
movb   $0x20,(%r11)
add    $0x1,%r11
mov    (%rdx),%rdi
jmp    1470 <number+0x370>
lea    0x1(%rsi),%rbp
mov    %rbp,(%rdx)
cmp    %rax,%rsi
jae    14bc <number+0x3bc>
movb   $0x20,(%r11)
add    $0x1,%r11
mov    (%rdx),%rbp
add    $0xfffffffe,%ecx
mov    %rbp,%rsi
mov    %ecx,%ebp
mov    $0xffffffff,%ecx
test   %ebx,%ebx
je     120d <number+0x10d>
add    $0x2,%ebp
jmp    14ec <number+0x3ec>
cs nopw 0x0(%rax,%rax,1)
add    $0xfffffffe,%ebp
cmp    $0x1,%ebp
jle    120d <number+0x10d>
lea    0x1(%rsi),%rbx
mov    %rbx,(%rdx)
cmp    %rax,%rsi
jae    1503 <number+0x403>
movb   $0x20,(%r11)
add    $0x1,%r11
mov    (%rdx),%rbx
lea    0x1(%rbx),%rsi
mov    %rsi,(%rdx)
cmp    %rax,%rbx
jae    14e0 <number+0x3e0>
movb   $0x20,(%r11)
add    $0x1,%r11
mov    (%rdx),%rsi
jmp    14e0 <number+0x3e0>

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

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