#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 /*<<< orphan*/ testBuf;
typedef int /*<<< orphan*/ buffer;
typedef int /*<<< orphan*/ bin;

/* Variables and functions */
int /*<<< orphan*/ expand7BitString(char *, unsigned char const *);
int /*<<< orphan*/ intAsBinary(char *, unsigned int, int);
int /*<<< orphan*/ memset(char *, int /*<<< orphan*/, int);
int /*<<< orphan*/ strcat(char *, char *);
scalar_t__ strcmp(char *, char *);
size_t strlen(char *);
scalar_t__ strncmp(char *, char *, int);
int /*<<< orphan*/ strncpy(char *, char *, size_t);
size_t uncompress(const unsigned char *compressed, const size_t compressedSize,
                  char *text) {
  if (strncmp("3", (char *)compressed, 1) == 0) {
    expand7BitString(text, compressed + sizeof(char));
    return strlen(text);
  }
  char buffer[(compressedSize + 1) * 8];
  memset(buffer, 0, sizeof(buffer));
  for (size_t i = 0; i < compressedSize; i++) {
    char bin[(8) + 1];
    memset(bin, 0, sizeof(bin));
    unsigned int chInt = compressed[i];
    intAsBinary(bin, chInt, 8);
    strcat(buffer, bin);
  }
  size_t start = 0;
  size_t len = 0;
  size_t bufLen = strlen(buffer);
  char testBuf[(8) + 1];
  memset(testBuf, 0, sizeof(testBuf));
  int i = 0;
  while (start < bufLen) {
    len++;
    strncpy(testBuf, buffer + start, len);
    if (strcmp("101", testBuf) == 0) {
      text[i++] = ':';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("011", testBuf) == 0) {
      text[i++] = '0';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("1101", testBuf) == 0) {
      text[i++] = '7';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("1100", testBuf) == 0) {
      text[i++] = '6';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("0010", testBuf) == 0) {
      text[i++] = 'a';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("0001", testBuf) == 0) {
      text[i++] = '9';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("0000", testBuf) == 0) {
      text[i++] = '2';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("1001", testBuf) == 0) {
      text[i++] = '3';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("0100", testBuf) == 0) {
      text[i++] = '1';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("0101", testBuf) == 0) {
      text[i++] = '.';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("0011", testBuf) == 0) {
      text[i++] = '4';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("10000", testBuf) == 0) {
      text[i++] = '-';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("11110", testBuf) == 0) {
      text[i++] = '5';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("11101", testBuf) == 0) {
      text[i++] = 'f';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("11100", testBuf) == 0) {
      text[i++] = '8';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("111110", testBuf) == 0) {
      text[i++] = 'e';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("111111", testBuf) == 0) {
      text[i++] = 'b';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("100010", testBuf) == 0) {
      text[i++] = '#';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("1000111", testBuf) == 0) {
      text[i++] = 'd';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("10001101", testBuf) == 0) {
      text[i++] = 'c';
      start += len;
      len = 0;
      memset(testBuf, 0, sizeof(testBuf));
    } else if (strcmp("10001100", testBuf) == 0) {
      break;
    }
  }
  return strlen(text);
}


x86 assembly (clang, -O0):
<uncompress>:
push   %rbp
mov    %rsp,%rbp
sub    $0x80,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    -0x10(%rbp),%rsi
lea    0xe5e(%rip),%rdi
mov    $0x1,%edx
call   1040 <strncmp@plt>
cmp    $0x0,%rax
jne    11d9 <uncompress+0x59>
mov    -0x20(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    $0x1,%rsi
call   1090 <expand7BitString@plt>
mov    -0x20(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,-0x8(%rbp)
jmp    1a69 <uncompress+0x8e9>
mov    -0x18(%rbp),%rcx
lea    0x8(,%rcx,8),%rax
mov    %rsp,%rdx
mov    %rdx,-0x28(%rbp)
lea    0x17(,%rcx,8),%rcx
and    $0xfffffffffffffff0,%rcx
mov    %rsp,%rdi
sub    %rcx,%rdi
mov    %rdi,-0x78(%rbp)
mov    %rdi,%rsp
mov    %rax,-0x30(%rbp)
mov    %eax,%edx
xor    %esi,%esi
call   1070 <memset@plt>
movq   $0x0,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x18(%rbp),%rax
jae    1276 <uncompress+0xf6>
lea    -0x41(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movzbl (%rax,%rcx,1),%eax
mov    %eax,-0x48(%rbp)
lea    -0x41(%rbp),%rdi
mov    -0x48(%rbp),%esi
mov    $0x8,%edx
call   1060 <intAsBinary@plt>
mov    -0x78(%rbp),%rdi
lea    -0x41(%rbp),%rsi
call   10a0 <strcat@plt>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    121a <uncompress+0x9a>
mov    -0x78(%rbp),%rdi
movq   $0x0,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
call   1050 <strlen@plt>
mov    %rax,-0x60(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
movl   $0x0,-0x70(%rbp)
mov    -0x50(%rbp),%rax
cmp    -0x60(%rbp),%rax
jae    1a55 <uncompress+0x8d5>
mov    -0x78(%rbp),%rsi
mov    -0x58(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
add    -0x50(%rbp),%rsi
mov    -0x58(%rbp),%rdx
call   1030 <strncpy@plt>
lea    -0x69(%rbp),%rsi
lea    0xd2e(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1332 <uncompress+0x1b2>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x3a,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a50 <uncompress+0x8d0>
lea    -0x69(%rbp),%rsi
lea    0xcda(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    138b <uncompress+0x20b>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x30,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a4b <uncompress+0x8cb>
lea    -0x69(%rbp),%rsi
lea    0xcb8(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    13e4 <uncompress+0x264>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x37,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a46 <uncompress+0x8c6>
lea    -0x69(%rbp),%rsi
lea    0xc68(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    143d <uncompress+0x2bd>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x36,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a41 <uncompress+0x8c1>
lea    -0x69(%rbp),%rsi
lea    0xbf5(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1496 <uncompress+0x316>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x61,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a3c <uncompress+0x8bc>
lea    -0x69(%rbp),%rsi
lea    0xb61(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    14ef <uncompress+0x36f>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x39,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a37 <uncompress+0x8b7>
lea    -0x69(%rbp),%rsi
lea    0xb22(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1548 <uncompress+0x3c8>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x32,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a32 <uncompress+0x8b2>
lea    -0x69(%rbp),%rsi
lea    0xab4(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    15a1 <uncompress+0x421>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x33,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a2d <uncompress+0x8ad>
lea    -0x69(%rbp),%rsi
lea    0xa60(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    15fa <uncompress+0x47a>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x31,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a28 <uncompress+0x8a8>
lea    -0x69(%rbp),%rsi
lea    0xa0c(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1653 <uncompress+0x4d3>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x2e,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a23 <uncompress+0x8a3>
lea    -0x69(%rbp),%rsi
lea    0x9b8(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    16ac <uncompress+0x52c>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x34,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a1e <uncompress+0x89e>
lea    -0x69(%rbp),%rsi
lea    0x964(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1705 <uncompress+0x585>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x2d,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a19 <uncompress+0x899>
lea    -0x69(%rbp),%rsi
lea    0x91e(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    175e <uncompress+0x5de>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x35,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a14 <uncompress+0x894>
lea    -0x69(%rbp),%rsi
lea    0x8b8(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    17b7 <uncompress+0x637>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x66,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a0f <uncompress+0x88f>
lea    -0x69(%rbp),%rsi
lea    0x865(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1810 <uncompress+0x690>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x38,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a0a <uncompress+0x88a>
lea    -0x69(%rbp),%rsi
lea    0x812(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1869 <uncompress+0x6e9>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x65,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a05 <uncompress+0x885>
lea    -0x69(%rbp),%rsi
lea    0x7c0(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    18c2 <uncompress+0x742>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x62,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    1a00 <uncompress+0x880>
lea    -0x69(%rbp),%rsi
lea    0x76e(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    191b <uncompress+0x79b>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x23,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    19fb <uncompress+0x87b>
lea    -0x69(%rbp),%rsi
lea    0x71c(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    1974 <uncompress+0x7f4>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x64,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    19f6 <uncompress+0x876>
lea    -0x69(%rbp),%rsi
lea    0x6cb(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    19cd <uncompress+0x84d>
mov    -0x20(%rbp),%rax
mov    -0x70(%rbp),%ecx
mov    %ecx,%edx
add    $0x1,%edx
mov    %edx,-0x70(%rbp)
movslq %ecx,%rcx
movb   $0x63,(%rax,%rcx,1)
mov    -0x58(%rbp),%rax
add    -0x50(%rbp),%rax
mov    %rax,-0x50(%rbp)
movq   $0x0,-0x58(%rbp)
lea    -0x69(%rbp),%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
jmp    19f1 <uncompress+0x871>
lea    -0x69(%rbp),%rsi
lea    0x67b(%rip),%rdi
call   1080 <strcmp@plt>
cmp    $0x0,%rax
jne    19ec <uncompress+0x86c>
jmp    1a55 <uncompress+0x8d5>
jmp    19f1 <uncompress+0x871>
jmp    19f6 <uncompress+0x876>
jmp    19fb <uncompress+0x87b>
jmp    1a00 <uncompress+0x880>
jmp    1a05 <uncompress+0x885>
jmp    1a0a <uncompress+0x88a>
jmp    1a0f <uncompress+0x88f>
jmp    1a14 <uncompress+0x894>
jmp    1a19 <uncompress+0x899>
jmp    1a1e <uncompress+0x89e>
jmp    1a23 <uncompress+0x8a3>
jmp    1a28 <uncompress+0x8a8>
jmp    1a2d <uncompress+0x8ad>
jmp    1a32 <uncompress+0x8b2>
jmp    1a37 <uncompress+0x8b7>
jmp    1a3c <uncompress+0x8bc>
jmp    1a41 <uncompress+0x8c1>
jmp    1a46 <uncompress+0x8c6>
jmp    1a4b <uncompress+0x8cb>
jmp    1a50 <uncompress+0x8d0>
jmp    12aa <uncompress+0x12a>
mov    -0x20(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,-0x8(%rbp)
mov    -0x28(%rbp),%rax
mov    %rax,%rsp
mov    -0x8(%rbp),%rax
mov    %rbp,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<uncompress>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x28,%rsp
mov    %rdx,%rbx
mov    %rsi,%r13
mov    %rdi,%r15
lea    0xe5f(%rip),%rdi
mov    %r15,%rsi
mov    $0x1,%edx
call   1040 <strncmp@plt>
test   %rax,%rax
je     1529 <uncompress+0x3a9>
mov    %rbx,-0x30(%rbp)
mov    %rsp,-0x48(%rbp)
lea    0x0(,%r13,8),%rdx
add    $0x8,%edx
mov    %rsp,%r12
lea    0x17(,%r13,8),%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r12
mov    %r12,%rsp
mov    %r12,%rdi
xor    %esi,%esi
call   1070 <memset@plt>
test   %r13,%r13
je     1235 <uncompress+0xb5>
xor    %ebx,%ebx
lea    -0x39(%rbp),%r14
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r14,%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
movzbl (%r15,%rbx,1),%esi
mov    %r14,%rdi
mov    $0x8,%edx
call   1060 <intAsBinary@plt>
mov    %r12,%rdi
mov    %r14,%rsi
call   10a0 <strcat@plt>
add    $0x1,%rbx
cmp    %rbx,%r13
jne    1200 <uncompress+0x80>
mov    %r12,%rdi
call   1050 <strlen@plt>
mov    %rax,%rbx
lea    -0x39(%rbp),%rdi
xor    %r14d,%r14d
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
mov    %rbx,-0x50(%rbp)
test   %rbx,%rbx
je     150d <uncompress+0x38d>
lea    -0x39(%rbp),%rbx
xor    %r13d,%r13d
xor    %r15d,%r15d
nopw   0x0(%rax,%rax,1)
add    $0x1,%r13
lea    (%r12,%r15,1),%rsi
mov    %rbx,%rdi
mov    %r13,%rdx
call   1030 <strncpy@plt>
lea    0xd88(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1480 <uncompress+0x300>
lea    0xd75(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1490 <uncompress+0x310>
lea    0xd94(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1494 <uncompress+0x314>
lea    0xd85(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     1498 <uncompress+0x318>
lea    0xd53(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     149c <uncompress+0x31c>
lea    0xd00(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14a0 <uncompress+0x320>
lea    0xd02(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14a4 <uncompress+0x324>
lea    0xcd5(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14a8 <uncompress+0x328>
lea    0xcc2(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14ac <uncompress+0x32c>
lea    0xcaf(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14b0 <uncompress+0x330>
lea    0xc9c(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14b4 <uncompress+0x334>
lea    0xc89(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14b8 <uncompress+0x338>
lea    0xc84(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14bc <uncompress+0x33c>
lea    0xc5f(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14c0 <uncompress+0x340>
lea    0xc4d(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14c4 <uncompress+0x344>
lea    0xc3b(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14c8 <uncompress+0x348>
lea    0xc2a(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14cc <uncompress+0x34c>
lea    0xc19(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14d0 <uncompress+0x350>
lea    0xc08(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14d4 <uncompress+0x354>
lea    0xbf8(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
je     14d8 <uncompress+0x358>
lea    0xbed(%rip),%rdi
mov    %rbx,%rsi
call   1080 <strcmp@plt>
test   %rax,%rax
jne    1503 <uncompress+0x383>
jmp    150d <uncompress+0x38d>
nopl   0x0(%rax)
mov    $0x3a,%al
jmp    14e0 <uncompress+0x360>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    $0x30,%al
jmp    14e0 <uncompress+0x360>
mov    $0x37,%al
jmp    14e0 <uncompress+0x360>
mov    $0x36,%al
jmp    14e0 <uncompress+0x360>
mov    $0x61,%al
jmp    14e0 <uncompress+0x360>
mov    $0x39,%al
jmp    14e0 <uncompress+0x360>
mov    $0x32,%al
jmp    14e0 <uncompress+0x360>
mov    $0x33,%al
jmp    14e0 <uncompress+0x360>
mov    $0x31,%al
jmp    14e0 <uncompress+0x360>
mov    $0x2e,%al
jmp    14e0 <uncompress+0x360>
mov    $0x34,%al
jmp    14e0 <uncompress+0x360>
mov    $0x2d,%al
jmp    14e0 <uncompress+0x360>
mov    $0x35,%al
jmp    14e0 <uncompress+0x360>
mov    $0x66,%al
jmp    14e0 <uncompress+0x360>
mov    $0x38,%al
jmp    14e0 <uncompress+0x360>
mov    $0x65,%al
jmp    14e0 <uncompress+0x360>
mov    $0x62,%al
jmp    14e0 <uncompress+0x360>
mov    $0x23,%al
jmp    14e0 <uncompress+0x360>
mov    $0x64,%al
jmp    14e0 <uncompress+0x360>
mov    $0x63,%al
nopw   0x0(%rax,%rax,1)
movslq %r14d,%rcx
add    $0x1,%r14d
mov    -0x30(%rbp),%rdx
mov    %al,(%rdx,%rcx,1)
add    %r13,%r15
mov    %rbx,%rdi
xor    %esi,%esi
mov    $0x9,%edx
call   1070 <memset@plt>
xor    %r13d,%r13d
cmp    -0x50(%rbp),%r15
jb     1270 <uncompress+0xf0>
mov    -0x30(%rbp),%rdi
call   1050 <strlen@plt>
mov    -0x48(%rbp),%rsp
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
add    $0x1,%r15
mov    %rbx,%rdi
mov    %r15,%rsi
call   1090 <expand7BitString@plt>
mov    %rbx,%rdi
lea    -0x28(%rbp),%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1050 <strlen@plt>

LLVM IR (-O0):
@.str = [2 x i8] c"3\00"
@.str.1 = [4 x i8] c"101\00"
@.str.2 = [4 x i8] c"011\00"
@.str.3 = [5 x i8] c"1101\00"
@.str.4 = [5 x i8] c"1100\00"
@.str.5 = [5 x i8] c"0010\00"
@.str.6 = [5 x i8] c"0001\00"
@.str.7 = [5 x i8] c"0000\00"
@.str.8 = [5 x i8] c"1001\00"
@.str.9 = [5 x i8] c"0100\00"
@.str.10 = [5 x i8] c"0101\00"
@.str.11 = [5 x i8] c"0011\00"
@.str.12 = [6 x i8] c"10000\00"
@.str.13 = [6 x i8] c"11110\00"
@.str.14 = [6 x i8] c"11101\00"
@.str.15 = [6 x i8] c"11100\00"
@.str.16 = [7 x i8] c"111110\00"
@.str.17 = [7 x i8] c"111111\00"
@.str.18 = [7 x i8] c"100010\00"
@.str.19 = [8 x i8] c"1000111\00"
@.str.20 = [9 x i8] c"10001101\00"
@.str.21 = [9 x i8] c"10001100\00"
define i64 @uncompress(i8* %0, i64 %1, i8* %2) {
%4 = alloca i64
%5 = alloca i8*
%6 = alloca i64
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i64
%10 = alloca i64
%11 = alloca [9 x i8]
%12 = alloca i32
%13 = alloca i64
%14 = alloca i64
%15 = alloca i64
%16 = alloca [9 x i8]
%17 = alloca i32
store i8* %0, i8** %5
store i64 %1, i64* %6
store i8* %2, i8** %7
%18 = load i8*, i8** %5
%19 = call i64 @strncmp(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i8* %18, i32 1)
%20 = icmp eq i64 %19, 0
br i1 %20, label %21, label %28
21: ; preds = %3
%22 = load i8*, i8** %7
%23 = load i8*, i8** %5
%24 = getelementptr inbounds i8, i8* %23, i64 1
%25 = call i32 @expand7BitString(i8* %22, i8* %24)
%26 = load i8*, i8** %7
%27 = call i64 @strlen(i8* %26)
store i64 %27, i64* %4
br label %401
28: ; preds = %3
%29 = load i64, i64* %6
%30 = add i64 %29, 1
%31 = mul i64 %30, 8
%32 = call i8* @llvm.stacksave()
store i8* %32, i8** %8
%33 = alloca i8, i64 %31
store i64 %31, i64* %9
%34 = trunc i64 %31 to i32
%35 = call i32 @memset(i8* %33, i32 0, i32 %34)
store i64 0, i64* %10
br label %36
36: ; preds = %53, %28
%37 = load i64, i64* %10
%38 = load i64, i64* %6
%39 = icmp ult i64 %37, %38
br i1 %39, label %40, label %56
40: ; preds = %36
%41 = getelementptr inbounds [9 x i8], [9 x i8]* %11, i64 0, i64 0
%42 = call i32 @memset(i8* %41, i32 0, i32 9)
%43 = load i8*, i8** %5
%44 = load i64, i64* %10
%45 = getelementptr inbounds i8, i8* %43, i64 %44
%46 = load i8, i8* %45
%47 = zext i8 %46 to i32
store i32 %47, i32* %12
%48 = getelementptr inbounds [9 x i8], [9 x i8]* %11, i64 0, i64 0
%49 = load i32, i32* %12
%50 = call i32 @intAsBinary(i8* %48, i32 %49, i32 8)
%51 = getelementptr inbounds [9 x i8], [9 x i8]* %11, i64 0, i64 0
%52 = call i32 @strcat(i8* %33, i8* %51)
br label %53
53: ; preds = %40
%54 = load i64, i64* %10
%55 = add i64 %54, 1
store i64 %55, i64* %10
br label %36
56: ; preds = %36
store i64 0, i64* %13
store i64 0, i64* %14
%57 = call i64 @strlen(i8* %33)
store i64 %57, i64* %15
%58 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%59 = call i32 @memset(i8* %58, i32 0, i32 9)
store i32 0, i32* %17
br label %60
60: ; preds = %396, %56
%61 = load i64, i64* %13
%62 = load i64, i64* %15
%63 = icmp ult i64 %61, %62
br i1 %63, label %64, label %397
64: ; preds = %60
%65 = load i64, i64* %14
%66 = add i64 %65, 1
store i64 %66, i64* %14
%67 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%68 = load i64, i64* %13
%69 = getelementptr inbounds i8, i8* %33, i64 %68
%70 = load i64, i64* %14
%71 = call i32 @strncpy(i8* %67, i8* %69, i64 %70)
%72 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%73 = call i64 @strcmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8* %72)
%74 = icmp eq i64 %73, 0
br i1 %74, label %75, label %86
75: ; preds = %64
%76 = load i8*, i8** %7
%77 = load i32, i32* %17
%78 = add nsw i32 %77, 1
store i32 %78, i32* %17
%79 = sext i32 %77 to i64
%80 = getelementptr inbounds i8, i8* %76, i64 %79
store i8 58, i8* %80
%81 = load i64, i64* %14
%82 = load i64, i64* %13
%83 = add i64 %82, %81
store i64 %83, i64* %13
store i64 0, i64* %14
%84 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%85 = call i32 @memset(i8* %84, i32 0, i32 9)
br label %396
86: ; preds = %64
%87 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%88 = call i64 @strcmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i8* %87)
%89 = icmp eq i64 %88, 0
br i1 %89, label %90, label %101
90: ; preds = %86
%91 = load i8*, i8** %7
%92 = load i32, i32* %17
%93 = add nsw i32 %92, 1
store i32 %93, i32* %17
%94 = sext i32 %92 to i64
%95 = getelementptr inbounds i8, i8* %91, i64 %94
store i8 48, i8* %95
%96 = load i64, i64* %14
%97 = load i64, i64* %13
%98 = add i64 %97, %96
store i64 %98, i64* %13
store i64 0, i64* %14
%99 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%100 = call i32 @memset(i8* %99, i32 0, i32 9)
br label %395
101: ; preds = %86
%102 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%103 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i8* %102)
%104 = icmp eq i64 %103, 0
br i1 %104, label %105, label %116
105: ; preds = %101
%106 = load i8*, i8** %7
%107 = load i32, i32* %17
%108 = add nsw i32 %107, 1
store i32 %108, i32* %17
%109 = sext i32 %107 to i64
%110 = getelementptr inbounds i8, i8* %106, i64 %109
store i8 55, i8* %110
%111 = load i64, i64* %14
%112 = load i64, i64* %13
%113 = add i64 %112, %111
store i64 %113, i64* %13
store i64 0, i64* %14
%114 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%115 = call i32 @memset(i8* %114, i32 0, i32 9)
br label %394
116: ; preds = %101
%117 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%118 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0), i8* %117)
%119 = icmp eq i64 %118, 0
br i1 %119, label %120, label %131
120: ; preds = %116
%121 = load i8*, i8** %7
%122 = load i32, i32* %17
%123 = add nsw i32 %122, 1
store i32 %123, i32* %17
%124 = sext i32 %122 to i64
%125 = getelementptr inbounds i8, i8* %121, i64 %124
store i8 54, i8* %125
%126 = load i64, i64* %14
%127 = load i64, i64* %13
%128 = add i64 %127, %126
store i64 %128, i64* %13
store i64 0, i64* %14
%129 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%130 = call i32 @memset(i8* %129, i32 0, i32 9)
br label %393
131: ; preds = %116
%132 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%133 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i8* %132)
%134 = icmp eq i64 %133, 0
br i1 %134, label %135, label %146
135: ; preds = %131
%136 = load i8*, i8** %7
%137 = load i32, i32* %17
%138 = add nsw i32 %137, 1
store i32 %138, i32* %17
%139 = sext i32 %137 to i64
%140 = getelementptr inbounds i8, i8* %136, i64 %139
store i8 97, i8* %140
%141 = load i64, i64* %14
%142 = load i64, i64* %13
%143 = add i64 %142, %141
store i64 %143, i64* %13
store i64 0, i64* %14
%144 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%145 = call i32 @memset(i8* %144, i32 0, i32 9)
br label %392
146: ; preds = %131
%147 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%148 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0), i8* %147)
%149 = icmp eq i64 %148, 0
br i1 %149, label %150, label %161
150: ; preds = %146
%151 = load i8*, i8** %7
%152 = load i32, i32* %17
%153 = add nsw i32 %152, 1
store i32 %153, i32* %17
%154 = sext i32 %152 to i64
%155 = getelementptr inbounds i8, i8* %151, i64 %154
store i8 57, i8* %155
%156 = load i64, i64* %14
%157 = load i64, i64* %13
%158 = add i64 %157, %156
store i64 %158, i64* %13
store i64 0, i64* %14
%159 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%160 = call i32 @memset(i8* %159, i32 0, i32 9)
br label %391
161: ; preds = %146
%162 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%163 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), i8* %162)
%164 = icmp eq i64 %163, 0
br i1 %164, label %165, label %176
165: ; preds = %161
%166 = load i8*, i8** %7
%167 = load i32, i32* %17
%168 = add nsw i32 %167, 1
store i32 %168, i32* %17
%169 = sext i32 %167 to i64
%170 = getelementptr inbounds i8, i8* %166, i64 %169
store i8 50, i8* %170
%171 = load i64, i64* %14
%172 = load i64, i64* %13
%173 = add i64 %172, %171
store i64 %173, i64* %13
store i64 0, i64* %14
%174 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%175 = call i32 @memset(i8* %174, i32 0, i32 9)
br label %390
176: ; preds = %161
%177 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%178 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0), i8* %177)
%179 = icmp eq i64 %178, 0
br i1 %179, label %180, label %191
180: ; preds = %176
%181 = load i8*, i8** %7
%182 = load i32, i32* %17
%183 = add nsw i32 %182, 1
store i32 %183, i32* %17
%184 = sext i32 %182 to i64
%185 = getelementptr inbounds i8, i8* %181, i64 %184
store i8 51, i8* %185
%186 = load i64, i64* %14
%187 = load i64, i64* %13
%188 = add i64 %187, %186
store i64 %188, i64* %13
store i64 0, i64* %14
%189 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%190 = call i32 @memset(i8* %189, i32 0, i32 9)
br label %389
191: ; preds = %176
%192 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%193 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i8* %192)
%194 = icmp eq i64 %193, 0
br i1 %194, label %195, label %206
195: ; preds = %191
%196 = load i8*, i8** %7
%197 = load i32, i32* %17
%198 = add nsw i32 %197, 1
store i32 %198, i32* %17
%199 = sext i32 %197 to i64
%200 = getelementptr inbounds i8, i8* %196, i64 %199
store i8 49, i8* %200
%201 = load i64, i64* %14
%202 = load i64, i64* %13
%203 = add i64 %202, %201
store i64 %203, i64* %13
store i64 0, i64* %14
%204 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%205 = call i32 @memset(i8* %204, i32 0, i32 9)
br label %388
206: ; preds = %191
%207 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%208 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0), i8* %207)
%209 = icmp eq i64 %208, 0
br i1 %209, label %210, label %221
210: ; preds = %206
%211 = load i8*, i8** %7
%212 = load i32, i32* %17
%213 = add nsw i32 %212, 1
store i32 %213, i32* %17
%214 = sext i32 %212 to i64
%215 = getelementptr inbounds i8, i8* %211, i64 %214
store i8 46, i8* %215
%216 = load i64, i64* %14
%217 = load i64, i64* %13
%218 = add i64 %217, %216
store i64 %218, i64* %13
store i64 0, i64* %14
%219 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%220 = call i32 @memset(i8* %219, i32 0, i32 9)
br label %387
221: ; preds = %206
%222 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%223 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0), i8* %222)
%224 = icmp eq i64 %223, 0
br i1 %224, label %225, label %236
225: ; preds = %221
%226 = load i8*, i8** %7
%227 = load i32, i32* %17
%228 = add nsw i32 %227, 1
store i32 %228, i32* %17
%229 = sext i32 %227 to i64
%230 = getelementptr inbounds i8, i8* %226, i64 %229
store i8 52, i8* %230
%231 = load i64, i64* %14
%232 = load i64, i64* %13
%233 = add i64 %232, %231
store i64 %233, i64* %13
store i64 0, i64* %14
%234 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%235 = call i32 @memset(i8* %234, i32 0, i32 9)
br label %386
236: ; preds = %221
%237 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%238 = call i64 @strcmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i8* %237)
%239 = icmp eq i64 %238, 0
br i1 %239, label %240, label %251
240: ; preds = %236
%241 = load i8*, i8** %7
%242 = load i32, i32* %17
%243 = add nsw i32 %242, 1
store i32 %243, i32* %17
%244 = sext i32 %242 to i64
%245 = getelementptr inbounds i8, i8* %241, i64 %244
store i8 45, i8* %245
%246 = load i64, i64* %14
%247 = load i64, i64* %13
%248 = add i64 %247, %246
store i64 %248, i64* %13
store i64 0, i64* %14
%249 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%250 = call i32 @memset(i8* %249, i32 0, i32 9)
br label %385
251: ; preds = %236
%252 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%253 = call i64 @strcmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i8* %252)
%254 = icmp eq i64 %253, 0
br i1 %254, label %255, label %266
255: ; preds = %251
%256 = load i8*, i8** %7
%257 = load i32, i32* %17
%258 = add nsw i32 %257, 1
store i32 %258, i32* %17
%259 = sext i32 %257 to i64
%260 = getelementptr inbounds i8, i8* %256, i64 %259
store i8 53, i8* %260
%261 = load i64, i64* %14
%262 = load i64, i64* %13
%263 = add i64 %262, %261
store i64 %263, i64* %13
store i64 0, i64* %14
%264 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%265 = call i32 @memset(i8* %264, i32 0, i32 9)
br label %384
266: ; preds = %251
%267 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%268 = call i64 @strcmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0), i8* %267)
%269 = icmp eq i64 %268, 0
br i1 %269, label %270, label %281
270: ; preds = %266
%271 = load i8*, i8** %7
%272 = load i32, i32* %17
%273 = add nsw i32 %272, 1
store i32 %273, i32* %17
%274 = sext i32 %272 to i64
%275 = getelementptr inbounds i8, i8* %271, i64 %274
store i8 102, i8* %275
%276 = load i64, i64* %14
%277 = load i64, i64* %13
%278 = add i64 %277, %276
store i64 %278, i64* %13
store i64 0, i64* %14
%279 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%280 = call i32 @memset(i8* %279, i32 0, i32 9)
br label %383
281: ; preds = %266
%282 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%283 = call i64 @strcmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.15, i64 0, i64 0), i8* %282)
%284 = icmp eq i64 %283, 0
br i1 %284, label %285, label %296
285: ; preds = %281
%286 = load i8*, i8** %7
%287 = load i32, i32* %17
%288 = add nsw i32 %287, 1
store i32 %288, i32* %17
%289 = sext i32 %287 to i64
%290 = getelementptr inbounds i8, i8* %286, i64 %289
store i8 56, i8* %290
%291 = load i64, i64* %14
%292 = load i64, i64* %13
%293 = add i64 %292, %291
store i64 %293, i64* %13
store i64 0, i64* %14
%294 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%295 = call i32 @memset(i8* %294, i32 0, i32 9)
br label %382
296: ; preds = %281
%297 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%298 = call i64 @strcmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i64 0, i64 0), i8* %297)
%299 = icmp eq i64 %298, 0
br i1 %299, label %300, label %311
300: ; preds = %296
%301 = load i8*, i8** %7
%302 = load i32, i32* %17
%303 = add nsw i32 %302, 1
store i32 %303, i32* %17
%304 = sext i32 %302 to i64
%305 = getelementptr inbounds i8, i8* %301, i64 %304
store i8 101, i8* %305
%306 = load i64, i64* %14
%307 = load i64, i64* %13
%308 = add i64 %307, %306
store i64 %308, i64* %13
store i64 0, i64* %14
%309 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%310 = call i32 @memset(i8* %309, i32 0, i32 9)
br label %381
311: ; preds = %296
%312 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%313 = call i64 @strcmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i64 0, i64 0), i8* %312)
%314 = icmp eq i64 %313, 0
br i1 %314, label %315, label %326
315: ; preds = %311
%316 = load i8*, i8** %7
%317 = load i32, i32* %17
%318 = add nsw i32 %317, 1
store i32 %318, i32* %17
%319 = sext i32 %317 to i64
%320 = getelementptr inbounds i8, i8* %316, i64 %319
store i8 98, i8* %320
%321 = load i64, i64* %14
%322 = load i64, i64* %13
%323 = add i64 %322, %321
store i64 %323, i64* %13
store i64 0, i64* %14
%324 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%325 = call i32 @memset(i8* %324, i32 0, i32 9)
br label %380
326: ; preds = %311
%327 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%328 = call i64 @strcmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i64 0, i64 0), i8* %327)
%329 = icmp eq i64 %328, 0
br i1 %329, label %330, label %341
330: ; preds = %326
%331 = load i8*, i8** %7
%332 = load i32, i32* %17
%333 = add nsw i32 %332, 1
store i32 %333, i32* %17
%334 = sext i32 %332 to i64
%335 = getelementptr inbounds i8, i8* %331, i64 %334
store i8 35, i8* %335
%336 = load i64, i64* %14
%337 = load i64, i64* %13
%338 = add i64 %337, %336
store i64 %338, i64* %13
store i64 0, i64* %14
%339 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%340 = call i32 @memset(i8* %339, i32 0, i32 9)
br label %379
341: ; preds = %326
%342 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%343 = call i64 @strcmp(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.19, i64 0, i64 0), i8* %342)
%344 = icmp eq i64 %343, 0
br i1 %344, label %345, label %356
345: ; preds = %341
%346 = load i8*, i8** %7
%347 = load i32, i32* %17
%348 = add nsw i32 %347, 1
store i32 %348, i32* %17
%349 = sext i32 %347 to i64
%350 = getelementptr inbounds i8, i8* %346, i64 %349
store i8 100, i8* %350
%351 = load i64, i64* %14
%352 = load i64, i64* %13
%353 = add i64 %352, %351
store i64 %353, i64* %13
store i64 0, i64* %14
%354 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%355 = call i32 @memset(i8* %354, i32 0, i32 9)
br label %378
356: ; preds = %341
%357 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%358 = call i64 @strcmp(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.20, i64 0, i64 0), i8* %357)
%359 = icmp eq i64 %358, 0
br i1 %359, label %360, label %371
360: ; preds = %356
%361 = load i8*, i8** %7
%362 = load i32, i32* %17
%363 = add nsw i32 %362, 1
store i32 %363, i32* %17
%364 = sext i32 %362 to i64
%365 = getelementptr inbounds i8, i8* %361, i64 %364
store i8 99, i8* %365
%366 = load i64, i64* %14
%367 = load i64, i64* %13
%368 = add i64 %367, %366
store i64 %368, i64* %13
store i64 0, i64* %14
%369 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%370 = call i32 @memset(i8* %369, i32 0, i32 9)
br label %377
371: ; preds = %356
%372 = getelementptr inbounds [9 x i8], [9 x i8]* %16, i64 0, i64 0
%373 = call i64 @strcmp(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.21, i64 0, i64 0), i8* %372)
%374 = icmp eq i64 %373, 0
br i1 %374, label %375, label %376
375: ; preds = %371
br label %397
376: ; preds = %371
br label %377
377: ; preds = %376, %360
br label %378
378: ; preds = %377, %345
br label %379
379: ; preds = %378, %330
br label %380
380: ; preds = %379, %315
br label %381
381: ; preds = %380, %300
br label %382
382: ; preds = %381, %285
br label %383
383: ; preds = %382, %270
br label %384
384: ; preds = %383, %255
br label %385
385: ; preds = %384, %240
br label %386
386: ; preds = %385, %225
br label %387
387: ; preds = %386, %210
br label %388
388: ; preds = %387, %195
br label %389
389: ; preds = %388, %180
br label %390
390: ; preds = %389, %165
br label %391
391: ; preds = %390, %150
br label %392
392: ; preds = %391, %135
br label %393
393: ; preds = %392, %120
br label %394
394: ; preds = %393, %105
br label %395
395: ; preds = %394, %90
br label %396
396: ; preds = %395, %75
br label %60
397: ; preds = %375, %60
%398 = load i8*, i8** %7
%399 = call i64 @strlen(i8* %398)
store i64 %399, i64* %4
%400 = load i8*, i8** %8
br label %401
401: ; preds = %397, %21
%402 = load i64, i64* %4
ret i64 %402
}

LLVM IR (-O2):
@.str = [2 x i8] c"3\00"
@.str.1 = [4 x i8] c"101\00"
@.str.2 = [4 x i8] c"011\00"
@.str.3 = [5 x i8] c"1101\00"
@.str.4 = [5 x i8] c"1100\00"
@.str.5 = [5 x i8] c"0010\00"
@.str.6 = [5 x i8] c"0001\00"
@.str.7 = [5 x i8] c"0000\00"
@.str.8 = [5 x i8] c"1001\00"
@.str.9 = [5 x i8] c"0100\00"
@.str.10 = [5 x i8] c"0101\00"
@.str.11 = [5 x i8] c"0011\00"
@.str.12 = [6 x i8] c"10000\00"
@.str.13 = [6 x i8] c"11110\00"
@.str.14 = [6 x i8] c"11101\00"
@.str.15 = [6 x i8] c"11100\00"
@.str.16 = [7 x i8] c"111110\00"
@.str.17 = [7 x i8] c"111111\00"
@.str.18 = [7 x i8] c"100010\00"
@.str.19 = [8 x i8] c"1000111\00"
@.str.20 = [9 x i8] c"10001101\00"
@.str.21 = [9 x i8] c"10001100\00"
define i64 @uncompress(i8* %0, i64 %1, i8* %2) {
%4 = alloca [9 x i8]
%5 = alloca [9 x i8]
%6 = tail call i64 @strncmp(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0), i8* %0, i32 1)
%7 = icmp eq i64 %6, 0
br i1 %7, label %8, label %12
8: ; preds = %3
%9 = getelementptr inbounds i8, i8* %0, i64 1
%10 = tail call i32 @expand7BitString(i8* %2, i8* %9)
%11 = tail call i64 @strlen(i8* dereferenceable(1) %2)
br label %120
12: ; preds = %3
%13 = shl i64 %1, 3
%14 = add i64 %13, 8
%15 = tail call i8* @llvm.stacksave()
%16 = alloca i8, i64 %14
%17 = trunc i64 %14 to i32
%18 = call i32 @memset(i8* %16, i32 0, i32 %17)
%19 = icmp eq i64 %1, 0
br i1 %19, label %22, label %20
20: ; preds = %12
%21 = getelementptr inbounds [9 x i8], [9 x i8]* %4, i64 0, i64 0
br label %27
22: ; preds = %27, %12
%23 = call i64 @strlen(i8* %16)
%24 = getelementptr inbounds [9 x i8], [9 x i8]* %5, i64 0, i64 0
%25 = call i32 @memset(i8* %24, i32 0, i32 9)
%26 = icmp eq i64 %23, 0
br i1 %26, label %118, label %37
27: ; preds = %20, %27
%28 = phi i64 [ 0, %20 ], [ %35, %27 ]
%29 = call i32 @memset(i8* %21, i32 0, i32 9)
%30 = getelementptr inbounds i8, i8* %0, i64 %28
%31 = load i8, i8* %30
%32 = zext i8 %31 to i32
%33 = call i32 @intAsBinary(i8* %21, i32 %32, i32 8)
%34 = call i32 @strcat(i8* %16, i8* %21)
%35 = add nuw i64 %28, 1
%36 = icmp eq i64 %35, %1
br i1 %36, label %22, label %27
37: ; preds = %22, %113
%38 = phi i32 [ %116, %113 ], [ 0, %22 ]
%39 = phi i64 [ %115, %113 ], [ 0, %22 ]
%40 = phi i64 [ %114, %113 ], [ 0, %22 ]
%41 = add i64 %39, 1
%42 = getelementptr inbounds i8, i8* %16, i64 %40
%43 = call i32 @strncpy(i8* %24, i8* %42, i64 %41)
%44 = call i64 @strcmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.1, i64 0, i64 0), i8* %24)
%45 = icmp eq i64 %44, 0
br i1 %45, label %106, label %46
46: ; preds = %37
%47 = call i64 @strcmp(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.2, i64 0, i64 0), i8* %24)
%48 = icmp eq i64 %47, 0
br i1 %48, label %106, label %49
49: ; preds = %46
%50 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.3, i64 0, i64 0), i8* %24)
%51 = icmp eq i64 %50, 0
br i1 %51, label %106, label %52
52: ; preds = %49
%53 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.4, i64 0, i64 0), i8* %24)
%54 = icmp eq i64 %53, 0
br i1 %54, label %106, label %55
55: ; preds = %52
%56 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.5, i64 0, i64 0), i8* %24)
%57 = icmp eq i64 %56, 0
br i1 %57, label %106, label %58
58: ; preds = %55
%59 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i64 0, i64 0), i8* %24)
%60 = icmp eq i64 %59, 0
br i1 %60, label %106, label %61
61: ; preds = %58
%62 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.7, i64 0, i64 0), i8* %24)
%63 = icmp eq i64 %62, 0
br i1 %63, label %106, label %64
64: ; preds = %61
%65 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.8, i64 0, i64 0), i8* %24)
%66 = icmp eq i64 %65, 0
br i1 %66, label %106, label %67
67: ; preds = %64
%68 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.9, i64 0, i64 0), i8* %24)
%69 = icmp eq i64 %68, 0
br i1 %69, label %106, label %70
70: ; preds = %67
%71 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.10, i64 0, i64 0), i8* %24)
%72 = icmp eq i64 %71, 0
br i1 %72, label %106, label %73
73: ; preds = %70
%74 = call i64 @strcmp(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.11, i64 0, i64 0), i8* %24)
%75 = icmp eq i64 %74, 0
br i1 %75, label %106, label %76
76: ; preds = %73
%77 = call i64 @strcmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.12, i64 0, i64 0), i8* %24)
%78 = icmp eq i64 %77, 0
br i1 %78, label %106, label %79
79: ; preds = %76
%80 = call i64 @strcmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.13, i64 0, i64 0), i8* %24)
%81 = icmp eq i64 %80, 0
br i1 %81, label %106, label %82
82: ; preds = %79
%83 = call i64 @strcmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.14, i64 0, i64 0), i8* %24)
%84 = icmp eq i64 %83, 0
br i1 %84, label %106, label %85
85: ; preds = %82
%86 = call i64 @strcmp(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.15, i64 0, i64 0), i8* %24)
%87 = icmp eq i64 %86, 0
br i1 %87, label %106, label %88
88: ; preds = %85
%89 = call i64 @strcmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.16, i64 0, i64 0), i8* %24)
%90 = icmp eq i64 %89, 0
br i1 %90, label %106, label %91
91: ; preds = %88
%92 = call i64 @strcmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.17, i64 0, i64 0), i8* %24)
%93 = icmp eq i64 %92, 0
br i1 %93, label %106, label %94
94: ; preds = %91
%95 = call i64 @strcmp(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.18, i64 0, i64 0), i8* %24)
%96 = icmp eq i64 %95, 0
br i1 %96, label %106, label %97
97: ; preds = %94
%98 = call i64 @strcmp(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.19, i64 0, i64 0), i8* %24)
%99 = icmp eq i64 %98, 0
br i1 %99, label %106, label %100
100: ; preds = %97
%101 = call i64 @strcmp(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.20, i64 0, i64 0), i8* %24)
%102 = icmp eq i64 %101, 0
br i1 %102, label %106, label %103
103: ; preds = %100
%104 = call i64 @strcmp(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.21, i64 0, i64 0), i8* %24)
%105 = icmp eq i64 %104, 0
br i1 %105, label %118, label %113
106: ; preds = %100, %97, %94, %91, %88, %85, %82, %79, %76, %73, %70, %67, %64, %61, %58, %55, %52, %49, %46, %37
%107 = phi i8 [ 58, %37 ], [ 48, %46 ], [ 55, %49 ], [ 54, %52 ], [ 97, %55 ], [ 57, %58 ], [ 50, %61 ], [ 51, %64 ], [ 49, %67 ], [ 46, %70 ], [ 52, %73 ], [ 45, %76 ], [ 53, %79 ], [ 102, %82 ], [ 56, %85 ], [ 101, %88 ], [ 98, %91 ], [ 35, %94 ], [ 100, %97 ], [ 99, %100 ]
%108 = add nsw i32 %38, 1
%109 = sext i32 %38 to i64
%110 = getelementptr inbounds i8, i8* %2, i64 %109
store i8 %107, i8* %110
%111 = add i64 %41, %40
%112 = call i32 @memset(i8* %24, i32 0, i32 9)
br label %113
113: ; preds = %106, %103
%114 = phi i64 [ %40, %103 ], [ %111, %106 ]
%115 = phi i64 [ %41, %103 ], [ 0, %106 ]
%116 = phi i32 [ %38, %103 ], [ %108, %106 ]
%117 = icmp ult i64 %114, %23
br i1 %117, label %37, label %118
118: ; preds = %113, %103, %22
%119 = call i64 @strlen(i8* dereferenceable(1) %2)
br label %120
120: ; preds = %118, %8
%121 = phi i64 [ %11, %8 ], [ %119, %118 ]
ret i64 %121
}