#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 */
int /*<<< orphan*/ free(char *);
scalar_t__ malloc(int);
int /*<<< orphan*/ strcat(char *, char *);
int strlen(char *);
int /*<<< orphan*/ strncpy(char *, char *, int);
char *kn_parsenum(char *numstr) {
  char *singles[] = {"s11n n7",  "11n d5",     "7 r1 dd5", "m6 r5",
                     "n2l k5",   "10 d5",      "2 r5",     "8 ll5",
                     "7nna tt5", "11m bh1t t5"};
  char *teens[] = {"h1t t5",          "h1n n11n d5",  "h1n n7 r1 dd5",
                   "h1 d3 m6 r5",     "h1 d3 n2l k5", "h1 d3 n10 d5",
                   "h1 d3 n2 r5",     "h1 d3 n8 ll5", "h1 d3 n7nna tt5",
                   "h1t t11m bh1t t5"};
  char *tens[] = {
      " ",         " ",           "3p p1t t1", "m6 v1t t1",  "n1 l1 v1t t1",
      "10 v1t t1", "1 r1 v1t t1", "7p p1t t1", "7m bh1t t1", "t11m bh1t t1"};
  char *hundreds[] = {"",
                      "n6 r1",
                      "3n n6 r1",
                      "m5n n6 r1",
                      "n2 n6 r1",
                      "10 n6 r1",
                      "2 r5 n6 r1",
                      "8 ll5 n6 r1",
                      "7nna tt5 n6 r1",
                      "11m bh10 n6 r1"};
  int place, i, inr;
  char *number, *tmp;
  place = strlen(numstr);
  number = (char *)malloc(100 * sizeof(char));
  number[0] = '\0';
  tmp = (char *)malloc(20 * sizeof(char));
  for (i = 0; i < place; i++) {
    inr = 0;
    if (place - i == 9) {
      strncpy(tmp, numstr + i, 2);
      strcat(number, kn_parsenum(tmp));
      strcat(number, " k12 tt3 ");
      inr = 1;
    } else if (place - i == 8) {
      strcat(number, singles[numstr[i] - 0]);
      strcat(number, " k12 tt3 ");
    } else if (place - i == 7) {
      strncpy(tmp, numstr + i, 2);
      strcat(number, kn_parsenum(tmp));
      if (numstr[i + 2] == '0' && numstr[i + 3] == '0' &&
          numstr[i + 4] == '0' && numstr[i + 5] == '0' &&
          numstr[i + 6] == '0') {
        strcat(number, " l1 kHsh1 ");
        inr = 6;
      } else {
        strcat(number, " l1 kHsh1 d1 ");
        inr = 1;
      }
    } else if (place - i == 6) {
      if (numstr[i + 1] == '0' && numstr[i + 2] == '0' &&
          numstr[i + 3] == '0' && numstr[i + 4] == '0' &&
          numstr[i + 5] == '0') {
        strcat(number, singles[numstr[i] - 0]);
        strcat(number, " l1 kHsh1 ");
      } else {
        strcat(number, singles[numstr[i] - 0]);
        strcat(number, " l1 kHsh1 d1 ");
      }
    } else if (place - i == 5) {
      strncpy(tmp, numstr + i, 2);
      strcat(number, kn_parsenum(tmp));
      if (numstr[i + 2] == '0' && numstr[i + 3] == '0' &&
          numstr[i + 4] == '0') {
        strcat(number, " s2 v3 r1 ");
        inr = 3;
      } else {
        strcat(number, " s2 v3 r1 d1 ");
        inr = 1;
      }
    } else if (place - i == 4) {
      if (numstr[i + 1] == '0' && numstr[i + 2] == '0' &&
          numstr[i + 3] == '0') {
        strcat(number, singles[numstr[i] - 0]);
        strcat(number, " s2 v3 r1 ");
      } else {
        strcat(number, singles[numstr[i] - 0]);
        strcat(number, " s2 v3 r1 d1 ");
      }
    } else if (place - i == 3) {
      if (numstr[i + 1] == '0' && numstr[i + 2] == '0') {
        strcat(number, hundreds[numstr[i] - 0]);
        number[strlen(number) - 1] = '5';
        inr = 2;
      } else if (numstr[i + 1] == 0) {
        strcat(number, hundreds[numstr[i] - 0]);
        inr = 1;
      } else {
        strcat(number, hundreds[numstr[i] - 0]);
      }
      strcat(number, " ");
    } else if (place - i == 2) {
      if (numstr[i] == '1') {
        strcat(number, teens[numstr[i + 1] - 0]);
        inr = 1;
      } else if (numstr[i + 1] == '0') {
        strcat(number, tens[numstr[i] - 0]);
        number[strlen(number) - 1] = '5';
        inr = 1;
      } else {
        strcat(number, tens[numstr[i] - 0]);
      }
      strcat(number, " ");
    } else if (place - i == 1) {
      strcat(number, singles[numstr[i] - 0]);
      strcat(number, " ");
    }
    i += inr;
    strcat(number, " G1500 ");
  }
  free(tmp);
  tmp = NULL;
  return (number);
}


x86 assembly (clang, -O0):
<kn_parsenum>:
push   %rbp
mov    %rsp,%rbp
sub    $0x1a0,%rsp
mov    %rdi,-0x8(%rbp)
lea    -0x60(%rbp),%rdi
lea    0x2b56(%rip),%rsi
mov    $0x50,%edx
call   1070 <memcpy@plt>
lea    -0xb0(%rbp),%rdi
lea    0x2b8e(%rip),%rsi
mov    $0x50,%edx
call   1070 <memcpy@plt>
lea    -0x100(%rbp),%rdi
lea    0x2bc6(%rip),%rsi
mov    $0x50,%edx
call   1070 <memcpy@plt>
lea    -0x150(%rbp),%rdi
lea    0x2bfe(%rip),%rsi
mov    $0x50,%edx
call   1070 <memcpy@plt>
mov    -0x8(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,-0x154(%rbp)
mov    $0x64,%edi
call   1080 <malloc@plt>
mov    %rax,-0x168(%rbp)
mov    -0x168(%rbp),%rax
movb   $0x0,(%rax)
mov    $0x14,%edi
call   1080 <malloc@plt>
mov    %rax,-0x170(%rbp)
movl   $0x0,-0x158(%rbp)
mov    -0x158(%rbp),%eax
cmp    -0x154(%rbp),%eax
jge    1a67 <kn_parsenum+0x8f7>
movl   $0x0,-0x15c(%rbp)
mov    -0x154(%rbp),%eax
sub    -0x158(%rbp),%eax
cmp    $0x9,%eax
jne    12bc <kn_parsenum+0x14c>
mov    -0x170(%rbp),%rdi
mov    -0x8(%rbp),%rsi
movslq -0x158(%rbp),%rax
add    %rax,%rsi
mov    $0x2,%edx
call   1050 <strncpy@plt>
mov    -0x168(%rbp),%rax
mov    %rax,-0x178(%rbp)
mov    -0x170(%rbp),%rdi
call   1030 <kn_parsenum@plt>
mov    -0x178(%rbp),%rdi
mov    %rax,%rsi
call   1090 <strcat@plt>
mov    -0x168(%rbp),%rdi
lea    0xe84(%rip),%rsi
call   1090 <strcat@plt>
movl   $0x1,-0x15c(%rbp)
jmp    1a2e <kn_parsenum+0x8be>
mov    -0x154(%rbp),%eax
sub    -0x158(%rbp),%eax
cmp    $0x8,%eax
jne    130e <kn_parsenum+0x19e>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x60(%rbp,%rax,8),%rsi
call   1090 <strcat@plt>
mov    -0x168(%rbp),%rdi
lea    0xe28(%rip),%rsi
call   1090 <strcat@plt>
jmp    1a29 <kn_parsenum+0x8b9>
mov    -0x154(%rbp),%eax
sub    -0x158(%rbp),%eax
cmp    $0x7,%eax
jne    1440 <kn_parsenum+0x2d0>
mov    -0x170(%rbp),%rdi
mov    -0x8(%rbp),%rsi
movslq -0x158(%rbp),%rax
add    %rax,%rsi
mov    $0x2,%edx
call   1050 <strncpy@plt>
mov    -0x168(%rbp),%rax
mov    %rax,-0x180(%rbp)
mov    -0x170(%rbp),%rdi
call   1030 <kn_parsenum@plt>
mov    -0x180(%rbp),%rdi
mov    %rax,%rsi
call   1090 <strcat@plt>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    141e <kn_parsenum+0x2ae>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    141e <kn_parsenum+0x2ae>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    141e <kn_parsenum+0x2ae>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    141e <kn_parsenum+0x2ae>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x6,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    141e <kn_parsenum+0x2ae>
mov    -0x168(%rbp),%rdi
lea    0xd2c(%rip),%rsi
call   1090 <strcat@plt>
movl   $0x6,-0x15c(%rbp)
jmp    143b <kn_parsenum+0x2cb>
mov    -0x168(%rbp),%rdi
lea    0xd15(%rip),%rsi
call   1090 <strcat@plt>
movl   $0x1,-0x15c(%rbp)
jmp    1a24 <kn_parsenum+0x8b4>
mov    -0x154(%rbp),%eax
sub    -0x158(%rbp),%eax
cmp    $0x6,%eax
jne    1560 <kn_parsenum+0x3f0>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1523 <kn_parsenum+0x3b3>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1523 <kn_parsenum+0x3b3>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1523 <kn_parsenum+0x3b3>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1523 <kn_parsenum+0x3b3>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x5,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1523 <kn_parsenum+0x3b3>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x60(%rbp,%rax,8),%rsi
call   1090 <strcat@plt>
mov    -0x168(%rbp),%rdi
lea    0xc1d(%rip),%rsi
call   1090 <strcat@plt>
jmp    155b <kn_parsenum+0x3eb>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x60(%rbp,%rax,8),%rsi
call   1090 <strcat@plt>
mov    -0x168(%rbp),%rdi
lea    0xbeb(%rip),%rsi
call   1090 <strcat@plt>
jmp    1a1f <kn_parsenum+0x8af>
mov    -0x154(%rbp),%eax
sub    -0x158(%rbp),%eax
cmp    $0x5,%eax
jne    1658 <kn_parsenum+0x4e8>
mov    -0x170(%rbp),%rdi
mov    -0x8(%rbp),%rsi
movslq -0x158(%rbp),%rax
add    %rax,%rsi
mov    $0x2,%edx
call   1050 <strncpy@plt>
mov    -0x168(%rbp),%rax
mov    %rax,-0x188(%rbp)
mov    -0x170(%rbp),%rdi
call   1030 <kn_parsenum@plt>
mov    -0x188(%rbp),%rdi
mov    %rax,%rsi
call   1090 <strcat@plt>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1636 <kn_parsenum+0x4c6>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1636 <kn_parsenum+0x4c6>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x4,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1636 <kn_parsenum+0x4c6>
mov    -0x168(%rbp),%rdi
lea    0xb2d(%rip),%rsi
call   1090 <strcat@plt>
movl   $0x3,-0x15c(%rbp)
jmp    1653 <kn_parsenum+0x4e3>
mov    -0x168(%rbp),%rdi
lea    0xb16(%rip),%rsi
call   1090 <strcat@plt>
movl   $0x1,-0x15c(%rbp)
jmp    1a1a <kn_parsenum+0x8aa>
mov    -0x154(%rbp),%eax
sub    -0x158(%rbp),%eax
cmp    $0x4,%eax
jne    173e <kn_parsenum+0x5ce>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1701 <kn_parsenum+0x591>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1701 <kn_parsenum+0x591>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x3,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1701 <kn_parsenum+0x591>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x60(%rbp,%rax,8),%rsi
call   1090 <strcat@plt>
mov    -0x168(%rbp),%rdi
lea    0xa58(%rip),%rsi
call   1090 <strcat@plt>
jmp    1739 <kn_parsenum+0x5c9>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x60(%rbp,%rax,8),%rsi
call   1090 <strcat@plt>
mov    -0x168(%rbp),%rdi
lea    0xa26(%rip),%rsi
call   1090 <strcat@plt>
jmp    1a15 <kn_parsenum+0x8a5>
mov    -0x154(%rbp),%eax
sub    -0x158(%rbp),%eax
cmp    $0x3,%eax
jne    188a <kn_parsenum+0x71a>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    17f1 <kn_parsenum+0x681>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x2,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    17f1 <kn_parsenum+0x681>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x150(%rbp,%rax,8),%rsi
ff
call   1090 <strcat@plt>
mov    -0x168(%rbp),%rax
mov    %rax,-0x190(%rbp)
mov    -0x168(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,%ecx
mov    -0x190(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x35,(%rax,%rcx,1)
movl   $0x2,-0x15c(%rbp)
jmp    1872 <kn_parsenum+0x702>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1845 <kn_parsenum+0x6d5>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x150(%rbp,%rax,8),%rsi
ff
call   1090 <strcat@plt>
movl   $0x1,-0x15c(%rbp)
jmp    186d <kn_parsenum+0x6fd>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x150(%rbp,%rax,8),%rsi
ff
call   1090 <strcat@plt>
jmp    1872 <kn_parsenum+0x702>
mov    -0x168(%rbp),%rdi
lea    0x8ee(%rip),%rsi
call   1090 <strcat@plt>
jmp    1a10 <kn_parsenum+0x8a0>
mov    -0x154(%rbp),%eax
sub    -0x158(%rbp),%eax
cmp    $0x2,%eax
jne    19b9 <kn_parsenum+0x849>
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x31,%eax
jne    18f3 <kn_parsenum+0x783>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0xb0(%rbp,%rax,8),%rsi
ff
call   1090 <strcat@plt>
movl   $0x1,-0x15c(%rbp)
jmp    19a1 <kn_parsenum+0x831>
mov    -0x8(%rbp),%rax
mov    -0x158(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x30,%eax
jne    1974 <kn_parsenum+0x804>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x100(%rbp,%rax,8),%rsi
ff
call   1090 <strcat@plt>
mov    -0x168(%rbp),%rax
mov    %rax,-0x198(%rbp)
mov    -0x168(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,%ecx
mov    -0x198(%rbp),%rax
sub    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x35,(%rax,%rcx,1)
movl   $0x1,-0x15c(%rbp)
jmp    199c <kn_parsenum+0x82c>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x100(%rbp,%rax,8),%rsi
ff
call   1090 <strcat@plt>
jmp    19a1 <kn_parsenum+0x831>
mov    -0x168(%rbp),%rdi
lea    0x7bf(%rip),%rsi
call   1090 <strcat@plt>
jmp    1a0b <kn_parsenum+0x89b>
mov    -0x154(%rbp),%eax
sub    -0x158(%rbp),%eax
cmp    $0x1,%eax
jne    1a06 <kn_parsenum+0x896>
mov    -0x168(%rbp),%rdi
mov    -0x8(%rbp),%rax
movslq -0x158(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
sub    $0x0,%eax
cltq
mov    -0x60(%rbp,%rax,8),%rsi
call   1090 <strcat@plt>
mov    -0x168(%rbp),%rdi
lea    0x76d(%rip),%rsi
call   1090 <strcat@plt>
jmp    1a0b <kn_parsenum+0x89b>
jmp    1a10 <kn_parsenum+0x8a0>
jmp    1a15 <kn_parsenum+0x8a5>
jmp    1a1a <kn_parsenum+0x8aa>
jmp    1a1f <kn_parsenum+0x8af>
jmp    1a24 <kn_parsenum+0x8b4>
jmp    1a29 <kn_parsenum+0x8b9>
jmp    1a2e <kn_parsenum+0x8be>
mov    -0x15c(%rbp),%eax
add    -0x158(%rbp),%eax
mov    %eax,-0x158(%rbp)
mov    -0x168(%rbp),%rdi
lea    0x71a(%rip),%rsi
call   1090 <strcat@plt>
mov    -0x158(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x158(%rbp)
jmp    1221 <kn_parsenum+0xb1>
mov    -0x170(%rbp),%rdi
call   1040 <free@plt>
movq   $0x0,-0x170(%rbp)
mov    -0x168(%rbp),%rax
add    $0x1a0,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<kn_parsenum>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    %rdi,%rbx
call   1060 <strlen@plt>
mov    %eax,%r13d
mov    $0x64,%edi
call   1070 <malloc@plt>
mov    %rax,%r14
movb   $0x0,(%rax)
mov    $0x14,%edi
call   1070 <malloc@plt>
mov    %rax,0x8(%rsp)
test   %r13d,%r13d
jle    1560 <kn_parsenum+0x400>
xor    %ebp,%ebp
mov    %rbx,0x10(%rsp)
jmp    11f5 <kn_parsenum+0x95>
movslq %ebp,%rax
movsbq (%rbx,%rax,1),%rax
lea    0x2bc7(%rip),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
xor    %r15d,%r15d
lea    0x1013(%rip),%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
mov    %r14,%rdi
lea    0xffb(%rip),%rsi
call   1080 <strcat@plt>
add    %r15d,%ebp
add    $0x1,%ebp
cmp    %ebp,%r13d
jle    1560 <kn_parsenum+0x400>
mov    %ebp,%eax
not    %eax
add    %r13d,%eax
mov    $0x0,%r15d
cmp    $0x8,%eax
ja     11d7 <kn_parsenum+0x77>
lea    0xdf2(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
movslq %ebp,%rcx
movsbq (%rbx,%rcx,1),%rax
movsbq 0x1(%rbx,%rcx,1),%r12
cmp    $0x31,%rax
jne    14e7 <kn_parsenum+0x387>
lea    0xdee(%rip),%rax
movslq (%rax,%r12,4),%rsi
add    %rax,%rsi
jmp    154d <kn_parsenum+0x3ed>
movslq %ebp,%rax
movzbl 0x1(%rax,%rbx,1),%ecx
test   %cl,%cl
je     153d <kn_parsenum+0x3dd>
cmp    $0x30,%cl
jne    152c <kn_parsenum+0x3cc>
cmpb   $0x30,0x2(%rax,%rbx,1)
jne    152c <kn_parsenum+0x3cc>
movsbq (%rbx,%rax,1),%rax
lea    0x2b5e(%rip),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
mov    %r14,%rdi
call   1060 <strlen@plt>
cltq
movb   $0x35,-0x1(%rax,%r14,1)
mov    $0x2,%r15d
jmp    11c8 <kn_parsenum+0x68>
movslq %ebp,%rax
cmpb   $0x30,0x1(%rax,%rbx,1)
jne    14c0 <kn_parsenum+0x360>
cmpb   $0x30,0x2(%rax,%rbx,1)
jne    14c0 <kn_parsenum+0x360>
cmpb   $0x30,0x3(%rax,%rbx,1)
jne    14c0 <kn_parsenum+0x360>
movsbq (%rbx,%rax,1),%rax
lea    0x2ab7(%rip),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
xor    %r15d,%r15d
lea    0xee4(%rip),%rsi
jmp    11cf <kn_parsenum+0x6f>
movslq %ebp,%r12
lea    (%rbx,%r12,1),%rsi
mov    0x8(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x2,%edx
call   1050 <strncpy@plt>
mov    %rbx,%rdi
mov    0x10(%rsp),%rbx
call   1030 <kn_parsenum@plt>
mov    %r14,%rdi
mov    %rax,%rsi
call   1080 <strcat@plt>
cmpb   $0x30,0x2(%rbx,%r12,1)
jne    133e <kn_parsenum+0x1de>
cmpb   $0x30,0x3(%r12,%rbx,1)
jne    133e <kn_parsenum+0x1de>
mov    $0x3,%r15d
cmpb   $0x30,0x4(%r12,%rbx,1)
lea    0xe8b(%rip),%rsi
je     11cf <kn_parsenum+0x6f>
mov    $0x1,%r15d
lea    0xe83(%rip),%rsi
jmp    11cf <kn_parsenum+0x6f>
movslq %ebp,%rax
movsbq (%rbx,%rax,1),%rax
lea    0x2a21(%rip),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
xor    %r15d,%r15d
lea    0xe2b(%rip),%rsi
jmp    11cf <kn_parsenum+0x6f>
movslq %ebp,%rax
cmpb   $0x30,0x1(%rax,%rbx,1)
jne    1499 <kn_parsenum+0x339>
cmpb   $0x30,0x2(%rax,%rbx,1)
jne    1499 <kn_parsenum+0x339>
cmpb   $0x30,0x3(%rax,%rbx,1)
jne    1499 <kn_parsenum+0x339>
cmpb   $0x30,0x4(%rax,%rbx,1)
jne    1499 <kn_parsenum+0x339>
cmpb   $0x30,0x5(%rax,%rbx,1)
jne    1499 <kn_parsenum+0x339>
movsbq (%rbx,%rax,1),%rax
lea    0x29c0(%rip),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
xor    %r15d,%r15d
lea    0xdd4(%rip),%rsi
jmp    11cf <kn_parsenum+0x6f>
movslq %ebp,%r12
lea    (%rbx,%r12,1),%rsi
mov    0x8(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x2,%edx
call   1050 <strncpy@plt>
mov    %rbx,%rdi
mov    0x10(%rsp),%rbx
call   1030 <kn_parsenum@plt>
mov    %r14,%rdi
mov    %rax,%rsi
call   1080 <strcat@plt>
cmpb   $0x30,0x2(%rbx,%r12,1)
jne    1445 <kn_parsenum+0x2e5>
cmpb   $0x30,0x3(%r12,%rbx,1)
jne    1445 <kn_parsenum+0x2e5>
cmpb   $0x30,0x4(%r12,%rbx,1)
jne    1445 <kn_parsenum+0x2e5>
cmpb   $0x30,0x5(%r12,%rbx,1)
jne    1445 <kn_parsenum+0x2e5>
mov    $0x6,%r15d
cmpb   $0x30,0x6(%r12,%rbx,1)
lea    0xd6b(%rip),%rsi
je     11cf <kn_parsenum+0x6f>
mov    $0x1,%r15d
lea    0xd63(%rip),%rsi
jmp    11cf <kn_parsenum+0x6f>
movslq %ebp,%rsi
add    %rbx,%rsi
mov    0x8(%rsp),%rbx
mov    %rbx,%rdi
mov    $0x2,%edx
call   1050 <strncpy@plt>
mov    %rbx,%rdi
mov    0x10(%rsp),%rbx
call   1030 <kn_parsenum@plt>
mov    %r14,%rdi
mov    %rax,%rsi
call   1080 <strcat@plt>
mov    $0x1,%r15d
lea    0xd0c(%rip),%rsi
jmp    11cf <kn_parsenum+0x6f>
movsbq (%rbx,%rax,1),%rax
lea    0x28db(%rip),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
xor    %r15d,%r15d
lea    0xcfa(%rip),%rsi
jmp    11cf <kn_parsenum+0x6f>
movsbq (%rbx,%rax,1),%rax
lea    0x28b4(%rip),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
xor    %r15d,%r15d
lea    0xcec(%rip),%rsi
jmp    11cf <kn_parsenum+0x6f>
lea    0xb5e(%rip),%rcx
movslq (%rcx,%rax,4),%rsi
add    %rcx,%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
xor    %r15d,%r15d
lea    0xcdb(%rip),%rsi
cmp    $0x30,%r12b
jne    11cf <kn_parsenum+0x6f>
mov    %r14,%rdi
call   1060 <strlen@plt>
cltq
movb   $0x35,-0x1(%rax,%r14,1)
mov    $0x1,%r15d
jmp    11c8 <kn_parsenum+0x68>
movsbq (%rbx,%rax,1),%rax
lea    0x2898(%rip),%rcx
jmp    11b9 <kn_parsenum+0x59>
movsbq (%rbx,%rax,1),%rax
lea    0x2887(%rip),%rcx
mov    (%rcx,%rax,8),%rsi
mov    %r14,%rdi
call   1080 <strcat@plt>
mov    $0x1,%r15d
jmp    11c8 <kn_parsenum+0x68>
mov    0x8(%rsp),%rdi
call   1040 <free@plt>
mov    %r14,%rax
add    $0x18,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [8 x i8] c"s11n n7\00"
@.str.1 = [7 x i8] c"11n d5\00"
@.str.2 = [9 x i8] c"7 r1 dd5\00"
@.str.3 = [6 x i8] c"m6 r5\00"
@.str.4 = [7 x i8] c"n2l k5\00"
@.str.5 = [6 x i8] c"10 d5\00"
@.str.6 = [5 x i8] c"2 r5\00"
@.str.7 = [6 x i8] c"8 ll5\00"
@.str.8 = [9 x i8] c"7nna tt5\00"
@.str.9 = [12 x i8] c"11m bh1t t5\00"
@__const.kn_parsenum.singles = [10 x i8*] [i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i32 0, i32 0)]
@.str.10 = [7 x i8] c"h1t t5\00"
@.str.11 = [12 x i8] c"h1n n11n d5\00"
@.str.12 = [14 x i8] c"h1n n7 r1 dd5\00"
@.str.13 = [12 x i8] c"h1 d3 m6 r5\00"
@.str.14 = [13 x i8] c"h1 d3 n2l k5\00"
@.str.15 = [13 x i8] c"h1 d3 n10 d5\00"
@.str.16 = [12 x i8] c"h1 d3 n2 r5\00"
@.str.17 = [13 x i8] c"h1 d3 n8 ll5\00"
@.str.18 = [16 x i8] c"h1 d3 n7nna tt5\00"
@.str.19 = [17 x i8] c"h1t t11m bh1t t5\00"
@__const.kn_parsenum.teens = [10 x i8*] [i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.10, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.11, i32 0, i32 0), i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.12, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.13, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.14, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.15, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.16, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.17, i32 0, i32 0), i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.18, i32 0, i32 0), i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.19, i32 0, i32 0)]
@.str.20 = [2 x i8] c" \00"
@.str.21 = [10 x i8] c"3p p1t t1\00"
@.str.22 = [10 x i8] c"m6 v1t t1\00"
@.str.23 = [13 x i8] c"n1 l1 v1t t1\00"
@.str.24 = [10 x i8] c"10 v1t t1\00"
@.str.25 = [12 x i8] c"1 r1 v1t t1\00"
@.str.26 = [10 x i8] c"7p p1t t1\00"
@.str.27 = [11 x i8] c"7m bh1t t1\00"
@.str.28 = [13 x i8] c"t11m bh1t t1\00"
@__const.kn_parsenum.tens = [10 x i8*] [i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.21, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.22, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.23, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.24, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.25, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.26, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.27, i32 0, i32 0), i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.28, i32 0, i32 0)]
@.str.29 = [1 x i8] zeroinitializer
@.str.30 = [6 x i8] c"n6 r1\00"
@.str.31 = [9 x i8] c"3n n6 r1\00"
@.str.32 = [10 x i8] c"m5n n6 r1\00"
@.str.33 = [9 x i8] c"n2 n6 r1\00"
@.str.34 = [9 x i8] c"10 n6 r1\00"
@.str.35 = [11 x i8] c"2 r5 n6 r1\00"
@.str.36 = [12 x i8] c"8 ll5 n6 r1\00"
@.str.37 = [15 x i8] c"7nna tt5 n6 r1\00"
@.str.38 = [15 x i8] c"11m bh10 n6 r1\00"
@__const.kn_parsenum.hundreds = [10 x i8*] [i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.29, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.32, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.36, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.38, i32 0, i32 0)]
@.str.39 = [10 x i8] c" k12 tt3 \00"
@.str.40 = [11 x i8] c" l1 kHsh1 \00"
@.str.41 = [14 x i8] c" l1 kHsh1 d1 \00"
@.str.42 = [11 x i8] c" s2 v3 r1 \00"
@.str.43 = [14 x i8] c" s2 v3 r1 d1 \00"
@.str.44 = [8 x i8] c" G1500 \00"
define i8* @kn_parsenum(i8* %0) {
%2 = alloca i8*
%3 = alloca [10 x i8*]
%4 = alloca [10 x i8*]
%5 = alloca [10 x i8*]
%6 = alloca [10 x i8*]
%7 = alloca i32
%8 = alloca i32
%9 = alloca i32
%10 = alloca i8*
%11 = alloca i8*
store i8* %0, i8** %2
%12 = bitcast [10 x i8*]* %3 to i8*
%13 = bitcast [10 x i8*]* %4 to i8*
%14 = bitcast [10 x i8*]* %5 to i8*
%15 = bitcast [10 x i8*]* %6 to i8*
%16 = load i8*, i8** %2
%17 = call i32 @strlen(i8* %16)
store i32 %17, i32* %7
%18 = call i64 @malloc(i32 100)
%19 = inttoptr i64 %18 to i8*
store i8* %19, i8** %10
%20 = load i8*, i8** %10
%21 = getelementptr inbounds i8, i8* %20, i64 0
store i8 0, i8* %21
%22 = call i64 @malloc(i32 20)
%23 = inttoptr i64 %22 to i8*
store i8* %23, i8** %11
store i32 0, i32* %8
br label %24
24: ; preds = %513, %1
%25 = load i32, i32* %8
%26 = load i32, i32* %7
%27 = icmp slt i32 %25, %26
br i1 %27, label %28, label %516
28: ; preds = %24
store i32 0, i32* %9
%29 = load i32, i32* %7
%30 = load i32, i32* %8
%31 = sub nsw i32 %29, %30
%32 = icmp eq i32 %31, 9
br i1 %32, label %33, label %46
33: ; preds = %28
%34 = load i8*, i8** %11
%35 = load i8*, i8** %2
%36 = load i32, i32* %8
%37 = sext i32 %36 to i64
%38 = getelementptr inbounds i8, i8* %35, i64 %37
%39 = call i32 @strncpy(i8* %34, i8* %38, i32 2)
%40 = load i8*, i8** %10
%41 = load i8*, i8** %11
%42 = call i8* @kn_parsenum(i8* %41)
%43 = call i32 @strcat(i8* %40, i8* %42)
%44 = load i8*, i8** %10
%45 = call i32 @strcat(i8* %44, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.39, i64 0, i64 0))
store i32 1, i32* %9
br label %507
46: ; preds = %28
%47 = load i32, i32* %7
%48 = load i32, i32* %8
%49 = sub nsw i32 %47, %48
%50 = icmp eq i32 %49, 8
br i1 %50, label %51, label %66
51: ; preds = %46
%52 = load i8*, i8** %10
%53 = load i8*, i8** %2
%54 = load i32, i32* %8
%55 = sext i32 %54 to i64
%56 = getelementptr inbounds i8, i8* %53, i64 %55
%57 = load i8, i8* %56
%58 = sext i8 %57 to i32
%59 = sub nsw i32 %58, 0
%60 = sext i32 %59 to i64
%61 = getelementptr inbounds [10 x i8*], [10 x i8*]* %3, i64 0, i64 %60
%62 = load i8*, i8** %61
%63 = call i32 @strcat(i8* %52, i8* %62)
%64 = load i8*, i8** %10
%65 = call i32 @strcat(i8* %64, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.39, i64 0, i64 0))
br label %506
66: ; preds = %46
%67 = load i32, i32* %7
%68 = load i32, i32* %8
%69 = sub nsw i32 %67, %68
%70 = icmp eq i32 %69, 7
br i1 %70, label %71, label %133
71: ; preds = %66
%72 = load i8*, i8** %11
%73 = load i8*, i8** %2
%74 = load i32, i32* %8
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i8, i8* %73, i64 %75
%77 = call i32 @strncpy(i8* %72, i8* %76, i32 2)
%78 = load i8*, i8** %10
%79 = load i8*, i8** %11
%80 = call i8* @kn_parsenum(i8* %79)
%81 = call i32 @strcat(i8* %78, i8* %80)
%82 = load i8*, i8** %2
%83 = load i32, i32* %8
%84 = add nsw i32 %83, 2
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds i8, i8* %82, i64 %85
%87 = load i8, i8* %86
%88 = sext i8 %87 to i32
%89 = icmp eq i32 %88, 48
br i1 %89, label %90, label %129
90: ; preds = %71
%91 = load i8*, i8** %2
%92 = load i32, i32* %8
%93 = add nsw i32 %92, 3
%94 = sext i32 %93 to i64
%95 = getelementptr inbounds i8, i8* %91, i64 %94
%96 = load i8, i8* %95
%97 = sext i8 %96 to i32
%98 = icmp eq i32 %97, 48
br i1 %98, label %99, label %129
99: ; preds = %90
%100 = load i8*, i8** %2
%101 = load i32, i32* %8
%102 = add nsw i32 %101, 4
%103 = sext i32 %102 to i64
%104 = getelementptr inbounds i8, i8* %100, i64 %103
%105 = load i8, i8* %104
%106 = sext i8 %105 to i32
%107 = icmp eq i32 %106, 48
br i1 %107, label %108, label %129
108: ; preds = %99
%109 = load i8*, i8** %2
%110 = load i32, i32* %8
%111 = add nsw i32 %110, 5
%112 = sext i32 %111 to i64
%113 = getelementptr inbounds i8, i8* %109, i64 %112
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = icmp eq i32 %115, 48
br i1 %116, label %117, label %129
117: ; preds = %108
%118 = load i8*, i8** %2
%119 = load i32, i32* %8
%120 = add nsw i32 %119, 6
%121 = sext i32 %120 to i64
%122 = getelementptr inbounds i8, i8* %118, i64 %121
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = icmp eq i32 %124, 48
br i1 %125, label %126, label %129
126: ; preds = %117
%127 = load i8*, i8** %10
%128 = call i32 @strcat(i8* %127, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.40, i64 0, i64 0))
store i32 6, i32* %9
br label %132
129: ; preds = %117, %108, %99, %90, %71
%130 = load i8*, i8** %10
%131 = call i32 @strcat(i8* %130, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.41, i64 0, i64 0))
store i32 1, i32* %9
br label %132
132: ; preds = %129, %126
br label %505
133: ; preds = %66
%134 = load i32, i32* %7
%135 = load i32, i32* %8
%136 = sub nsw i32 %134, %135
%137 = icmp eq i32 %136, 6
br i1 %137, label %138, label %214
138: ; preds = %133
%139 = load i8*, i8** %2
%140 = load i32, i32* %8
%141 = add nsw i32 %140, 1
%142 = sext i32 %141 to i64
%143 = getelementptr inbounds i8, i8* %139, i64 %142
%144 = load i8, i8* %143
%145 = sext i8 %144 to i32
%146 = icmp eq i32 %145, 48
br i1 %146, label %147, label %198
147: ; preds = %138
%148 = load i8*, i8** %2
%149 = load i32, i32* %8
%150 = add nsw i32 %149, 2
%151 = sext i32 %150 to i64
%152 = getelementptr inbounds i8, i8* %148, i64 %151
%153 = load i8, i8* %152
%154 = sext i8 %153 to i32
%155 = icmp eq i32 %154, 48
br i1 %155, label %156, label %198
156: ; preds = %147
%157 = load i8*, i8** %2
%158 = load i32, i32* %8
%159 = add nsw i32 %158, 3
%160 = sext i32 %159 to i64
%161 = getelementptr inbounds i8, i8* %157, i64 %160
%162 = load i8, i8* %161
%163 = sext i8 %162 to i32
%164 = icmp eq i32 %163, 48
br i1 %164, label %165, label %198
165: ; preds = %156
%166 = load i8*, i8** %2
%167 = load i32, i32* %8
%168 = add nsw i32 %167, 4
%169 = sext i32 %168 to i64
%170 = getelementptr inbounds i8, i8* %166, i64 %169
%171 = load i8, i8* %170
%172 = sext i8 %171 to i32
%173 = icmp eq i32 %172, 48
br i1 %173, label %174, label %198
174: ; preds = %165
%175 = load i8*, i8** %2
%176 = load i32, i32* %8
%177 = add nsw i32 %176, 5
%178 = sext i32 %177 to i64
%179 = getelementptr inbounds i8, i8* %175, i64 %178
%180 = load i8, i8* %179
%181 = sext i8 %180 to i32
%182 = icmp eq i32 %181, 48
br i1 %182, label %183, label %198
183: ; preds = %174
%184 = load i8*, i8** %10
%185 = load i8*, i8** %2
%186 = load i32, i32* %8
%187 = sext i32 %186 to i64
%188 = getelementptr inbounds i8, i8* %185, i64 %187
%189 = load i8, i8* %188
%190 = sext i8 %189 to i32
%191 = sub nsw i32 %190, 0
%192 = sext i32 %191 to i64
%193 = getelementptr inbounds [10 x i8*], [10 x i8*]* %3, i64 0, i64 %192
%194 = load i8*, i8** %193
%195 = call i32 @strcat(i8* %184, i8* %194)
%196 = load i8*, i8** %10
%197 = call i32 @strcat(i8* %196, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.40, i64 0, i64 0))
br label %213
198: ; preds = %174, %165, %156, %147, %138
%199 = load i8*, i8** %10
%200 = load i8*, i8** %2
%201 = load i32, i32* %8
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds i8, i8* %200, i64 %202
%204 = load i8, i8* %203
%205 = sext i8 %204 to i32
%206 = sub nsw i32 %205, 0
%207 = sext i32 %206 to i64
%208 = getelementptr inbounds [10 x i8*], [10 x i8*]* %3, i64 0, i64 %207
%209 = load i8*, i8** %208
%210 = call i32 @strcat(i8* %199, i8* %209)
%211 = load i8*, i8** %10
%212 = call i32 @strcat(i8* %211, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.41, i64 0, i64 0))
br label %213
213: ; preds = %198, %183
br label %504
214: ; preds = %133
%215 = load i32, i32* %7
%216 = load i32, i32* %8
%217 = sub nsw i32 %215, %216
%218 = icmp eq i32 %217, 5
br i1 %218, label %219, label %263
219: ; preds = %214
%220 = load i8*, i8** %11
%221 = load i8*, i8** %2
%222 = load i32, i32* %8
%223 = sext i32 %222 to i64
%224 = getelementptr inbounds i8, i8* %221, i64 %223
%225 = call i32 @strncpy(i8* %220, i8* %224, i32 2)
%226 = load i8*, i8** %10
%227 = load i8*, i8** %11
%228 = call i8* @kn_parsenum(i8* %227)
%229 = call i32 @strcat(i8* %226, i8* %228)
%230 = load i8*, i8** %2
%231 = load i32, i32* %8
%232 = add nsw i32 %231, 2
%233 = sext i32 %232 to i64
%234 = getelementptr inbounds i8, i8* %230, i64 %233
%235 = load i8, i8* %234
%236 = sext i8 %235 to i32
%237 = icmp eq i32 %236, 48
br i1 %237, label %238, label %259
238: ; preds = %219
%239 = load i8*, i8** %2
%240 = load i32, i32* %8
%241 = add nsw i32 %240, 3
%242 = sext i32 %241 to i64
%243 = getelementptr inbounds i8, i8* %239, i64 %242
%244 = load i8, i8* %243
%245 = sext i8 %244 to i32
%246 = icmp eq i32 %245, 48
br i1 %246, label %247, label %259
247: ; preds = %238
%248 = load i8*, i8** %2
%249 = load i32, i32* %8
%250 = add nsw i32 %249, 4
%251 = sext i32 %250 to i64
%252 = getelementptr inbounds i8, i8* %248, i64 %251
%253 = load i8, i8* %252
%254 = sext i8 %253 to i32
%255 = icmp eq i32 %254, 48
br i1 %255, label %256, label %259
256: ; preds = %247
%257 = load i8*, i8** %10
%258 = call i32 @strcat(i8* %257, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.42, i64 0, i64 0))
store i32 3, i32* %9
br label %262
259: ; preds = %247, %238, %219
%260 = load i8*, i8** %10
%261 = call i32 @strcat(i8* %260, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.43, i64 0, i64 0))
store i32 1, i32* %9
br label %262
262: ; preds = %259, %256
br label %503
263: ; preds = %214
%264 = load i32, i32* %7
%265 = load i32, i32* %8
%266 = sub nsw i32 %264, %265
%267 = icmp eq i32 %266, 4
br i1 %267, label %268, label %326
268: ; preds = %263
%269 = load i8*, i8** %2
%270 = load i32, i32* %8
%271 = add nsw i32 %270, 1
%272 = sext i32 %271 to i64
%273 = getelementptr inbounds i8, i8* %269, i64 %272
%274 = load i8, i8* %273
%275 = sext i8 %274 to i32
%276 = icmp eq i32 %275, 48
br i1 %276, label %277, label %310
277: ; preds = %268
%278 = load i8*, i8** %2
%279 = load i32, i32* %8
%280 = add nsw i32 %279, 2
%281 = sext i32 %280 to i64
%282 = getelementptr inbounds i8, i8* %278, i64 %281
%283 = load i8, i8* %282
%284 = sext i8 %283 to i32
%285 = icmp eq i32 %284, 48
br i1 %285, label %286, label %310
286: ; preds = %277
%287 = load i8*, i8** %2
%288 = load i32, i32* %8
%289 = add nsw i32 %288, 3
%290 = sext i32 %289 to i64
%291 = getelementptr inbounds i8, i8* %287, i64 %290
%292 = load i8, i8* %291
%293 = sext i8 %292 to i32
%294 = icmp eq i32 %293, 48
br i1 %294, label %295, label %310
295: ; preds = %286
%296 = load i8*, i8** %10
%297 = load i8*, i8** %2
%298 = load i32, i32* %8
%299 = sext i32 %298 to i64
%300 = getelementptr inbounds i8, i8* %297, i64 %299
%301 = load i8, i8* %300
%302 = sext i8 %301 to i32
%303 = sub nsw i32 %302, 0
%304 = sext i32 %303 to i64
%305 = getelementptr inbounds [10 x i8*], [10 x i8*]* %3, i64 0, i64 %304
%306 = load i8*, i8** %305
%307 = call i32 @strcat(i8* %296, i8* %306)
%308 = load i8*, i8** %10
%309 = call i32 @strcat(i8* %308, i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.42, i64 0, i64 0))
br label %325
310: ; preds = %286, %277, %268
%311 = load i8*, i8** %10
%312 = load i8*, i8** %2
%313 = load i32, i32* %8
%314 = sext i32 %313 to i64
%315 = getelementptr inbounds i8, i8* %312, i64 %314
%316 = load i8, i8* %315
%317 = sext i8 %316 to i32
%318 = sub nsw i32 %317, 0
%319 = sext i32 %318 to i64
%320 = getelementptr inbounds [10 x i8*], [10 x i8*]* %3, i64 0, i64 %319
%321 = load i8*, i8** %320
%322 = call i32 @strcat(i8* %311, i8* %321)
%323 = load i8*, i8** %10
%324 = call i32 @strcat(i8* %323, i8* getelementptr inbounds ([14 x i8], [14 x i8]* @.str.43, i64 0, i64 0))
br label %325
325: ; preds = %310, %295
br label %502
326: ; preds = %263
%327 = load i32, i32* %7
%328 = load i32, i32* %8
%329 = sub nsw i32 %327, %328
%330 = icmp eq i32 %329, 3
br i1 %330, label %331, label %407
331: ; preds = %326
%332 = load i8*, i8** %2
%333 = load i32, i32* %8
%334 = add nsw i32 %333, 1
%335 = sext i32 %334 to i64
%336 = getelementptr inbounds i8, i8* %332, i64 %335
%337 = load i8, i8* %336
%338 = sext i8 %337 to i32
%339 = icmp eq i32 %338, 48
br i1 %339, label %340, label %368
340: ; preds = %331
%341 = load i8*, i8** %2
%342 = load i32, i32* %8
%343 = add nsw i32 %342, 2
%344 = sext i32 %343 to i64
%345 = getelementptr inbounds i8, i8* %341, i64 %344
%346 = load i8, i8* %345
%347 = sext i8 %346 to i32
%348 = icmp eq i32 %347, 48
br i1 %348, label %349, label %368
349: ; preds = %340
%350 = load i8*, i8** %10
%351 = load i8*, i8** %2
%352 = load i32, i32* %8
%353 = sext i32 %352 to i64
%354 = getelementptr inbounds i8, i8* %351, i64 %353
%355 = load i8, i8* %354
%356 = sext i8 %355 to i32
%357 = sub nsw i32 %356, 0
%358 = sext i32 %357 to i64
%359 = getelementptr inbounds [10 x i8*], [10 x i8*]* %6, i64 0, i64 %358
%360 = load i8*, i8** %359
%361 = call i32 @strcat(i8* %350, i8* %360)
%362 = load i8*, i8** %10
%363 = load i8*, i8** %10
%364 = call i32 @strlen(i8* %363)
%365 = sub nsw i32 %364, 1
%366 = sext i32 %365 to i64
%367 = getelementptr inbounds i8, i8* %362, i64 %366
store i8 53, i8* %367
store i32 2, i32* %9
br label %404
368: ; preds = %340, %331
%369 = load i8*, i8** %2
%370 = load i32, i32* %8
%371 = add nsw i32 %370, 1
%372 = sext i32 %371 to i64
%373 = getelementptr inbounds i8, i8* %369, i64 %372
%374 = load i8, i8* %373
%375 = sext i8 %374 to i32
%376 = icmp eq i32 %375, 0
br i1 %376, label %377, label %390
377: ; preds = %368
%378 = load i8*, i8** %10
%379 = load i8*, i8** %2
%380 = load i32, i32* %8
%381 = sext i32 %380 to i64
%382 = getelementptr inbounds i8, i8* %379, i64 %381
%383 = load i8, i8* %382
%384 = sext i8 %383 to i32
%385 = sub nsw i32 %384, 0
%386 = sext i32 %385 to i64
%387 = getelementptr inbounds [10 x i8*], [10 x i8*]* %6, i64 0, i64 %386
%388 = load i8*, i8** %387
%389 = call i32 @strcat(i8* %378, i8* %388)
store i32 1, i32* %9
br label %403
390: ; preds = %368
%391 = load i8*, i8** %10
%392 = load i8*, i8** %2
%393 = load i32, i32* %8
%394 = sext i32 %393 to i64
%395 = getelementptr inbounds i8, i8* %392, i64 %394
%396 = load i8, i8* %395
%397 = sext i8 %396 to i32
%398 = sub nsw i32 %397, 0
%399 = sext i32 %398 to i64
%400 = getelementptr inbounds [10 x i8*], [10 x i8*]* %6, i64 0, i64 %399
%401 = load i8*, i8** %400
%402 = call i32 @strcat(i8* %391, i8* %401)
br label %403
403: ; preds = %390, %377
br label %404
404: ; preds = %403, %349
%405 = load i8*, i8** %10
%406 = call i32 @strcat(i8* %405, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0))
br label %501
407: ; preds = %326
%408 = load i32, i32* %7
%409 = load i32, i32* %8
%410 = sub nsw i32 %408, %409
%411 = icmp eq i32 %410, 2
br i1 %411, label %412, label %479
412: ; preds = %407
%413 = load i8*, i8** %2
%414 = load i32, i32* %8
%415 = sext i32 %414 to i64
%416 = getelementptr inbounds i8, i8* %413, i64 %415
%417 = load i8, i8* %416
%418 = sext i8 %417 to i32
%419 = icmp eq i32 %418, 49
br i1 %419, label %420, label %434
420: ; preds = %412
%421 = load i8*, i8** %10
%422 = load i8*, i8** %2
%423 = load i32, i32* %8
%424 = add nsw i32 %423, 1
%425 = sext i32 %424 to i64
%426 = getelementptr inbounds i8, i8* %422, i64 %425
%427 = load i8, i8* %426
%428 = sext i8 %427 to i32
%429 = sub nsw i32 %428, 0
%430 = sext i32 %429 to i64
%431 = getelementptr inbounds [10 x i8*], [10 x i8*]* %4, i64 0, i64 %430
%432 = load i8*, i8** %431
%433 = call i32 @strcat(i8* %421, i8* %432)
store i32 1, i32* %9
br label %476
434: ; preds = %412
%435 = load i8*, i8** %2
%436 = load i32, i32* %8
%437 = add nsw i32 %436, 1
%438 = sext i32 %437 to i64
%439 = getelementptr inbounds i8, i8* %435, i64 %438
%440 = load i8, i8* %439
%441 = sext i8 %440 to i32
%442 = icmp eq i32 %441, 48
br i1 %442, label %443, label %462
443: ; preds = %434
%444 = load i8*, i8** %10
%445 = load i8*, i8** %2
%446 = load i32, i32* %8
%447 = sext i32 %446 to i64
%448 = getelementptr inbounds i8, i8* %445, i64 %447
%449 = load i8, i8* %448
%450 = sext i8 %449 to i32
%451 = sub nsw i32 %450, 0
%452 = sext i32 %451 to i64
%453 = getelementptr inbounds [10 x i8*], [10 x i8*]* %5, i64 0, i64 %452
%454 = load i8*, i8** %453
%455 = call i32 @strcat(i8* %444, i8* %454)
%456 = load i8*, i8** %10
%457 = load i8*, i8** %10
%458 = call i32 @strlen(i8* %457)
%459 = sub nsw i32 %458, 1
%460 = sext i32 %459 to i64
%461 = getelementptr inbounds i8, i8* %456, i64 %460
store i8 53, i8* %461
store i32 1, i32* %9
br label %475
462: ; preds = %434
%463 = load i8*, i8** %10
%464 = load i8*, i8** %2
%465 = load i32, i32* %8
%466 = sext i32 %465 to i64
%467 = getelementptr inbounds i8, i8* %464, i64 %466
%468 = load i8, i8* %467
%469 = sext i8 %468 to i32
%470 = sub nsw i32 %469, 0
%471 = sext i32 %470 to i64
%472 = getelementptr inbounds [10 x i8*], [10 x i8*]* %5, i64 0, i64 %471
%473 = load i8*, i8** %472
%474 = call i32 @strcat(i8* %463, i8* %473)
br label %475
475: ; preds = %462, %443
br label %476
476: ; preds = %475, %420
%477 = load i8*, i8** %10
%478 = call i32 @strcat(i8* %477, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0))
br label %500
479: ; preds = %407
%480 = load i32, i32* %7
%481 = load i32, i32* %8
%482 = sub nsw i32 %480, %481
%483 = icmp eq i32 %482, 1
br i1 %483, label %484, label %499
484: ; preds = %479
%485 = load i8*, i8** %10
%486 = load i8*, i8** %2
%487 = load i32, i32* %8
%488 = sext i32 %487 to i64
%489 = getelementptr inbounds i8, i8* %486, i64 %488
%490 = load i8, i8* %489
%491 = sext i8 %490 to i32
%492 = sub nsw i32 %491, 0
%493 = sext i32 %492 to i64
%494 = getelementptr inbounds [10 x i8*], [10 x i8*]* %3, i64 0, i64 %493
%495 = load i8*, i8** %494
%496 = call i32 @strcat(i8* %485, i8* %495)
%497 = load i8*, i8** %10
%498 = call i32 @strcat(i8* %497, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0))
br label %499
499: ; preds = %484, %479
br label %500
500: ; preds = %499, %476
br label %501
501: ; preds = %500, %404
br label %502
502: ; preds = %501, %325
br label %503
503: ; preds = %502, %262
br label %504
504: ; preds = %503, %213
br label %505
505: ; preds = %504, %132
br label %506
506: ; preds = %505, %51
br label %507
507: ; preds = %506, %33
%508 = load i32, i32* %9
%509 = load i32, i32* %8
%510 = add nsw i32 %509, %508
store i32 %510, i32* %8
%511 = load i8*, i8** %10
%512 = call i32 @strcat(i8* %511, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.44, i64 0, i64 0))
br label %513
513: ; preds = %507
%514 = load i32, i32* %8
%515 = add nsw i32 %514, 1
store i32 %515, i32* %8
br label %24
516: ; preds = %24
%517 = load i8*, i8** %11
%518 = call i32 @free(i8* %517)
store i8* null, i8** %11
%519 = load i8*, i8** %10
ret i8* %519
}

LLVM IR (-O2):
@.str = [8 x i8] c"s11n n7\00"
@.str.1 = [7 x i8] c"11n d5\00"
@.str.2 = [9 x i8] c"7 r1 dd5\00"
@.str.3 = [6 x i8] c"m6 r5\00"
@.str.4 = [7 x i8] c"n2l k5\00"
@.str.5 = [6 x i8] c"10 d5\00"
@.str.6 = [5 x i8] c"2 r5\00"
@.str.7 = [6 x i8] c"8 ll5\00"
@.str.8 = [9 x i8] c"7nna tt5\00"
@.str.9 = [12 x i8] c"11m bh1t t5\00"
@__const.kn_parsenum.singles = [10 x i8*] [i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.1, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.3, i32 0, i32 0), i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.4, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.5, i32 0, i32 0), i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.6, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.7, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.8, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.9, i32 0, i32 0)]
@.str.10 = [7 x i8] c"h1t t5\00"
@.str.11 = [12 x i8] c"h1n n11n d5\00"
@.str.12 = [14 x i8] c"h1n n7 r1 dd5\00"
@.str.13 = [12 x i8] c"h1 d3 m6 r5\00"
@.str.14 = [13 x i8] c"h1 d3 n2l k5\00"
@.str.15 = [13 x i8] c"h1 d3 n10 d5\00"
@.str.16 = [12 x i8] c"h1 d3 n2 r5\00"
@.str.17 = [13 x i8] c"h1 d3 n8 ll5\00"
@.str.18 = [16 x i8] c"h1 d3 n7nna tt5\00"
@.str.19 = [17 x i8] c"h1t t11m bh1t t5\00"
@reltable.kn_parsenum = [10 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([7 x i8]* @.str.10 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([12 x i8]* @.str.11 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([14 x i8]* @.str.12 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([12 x i8]* @.str.13 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([13 x i8]* @.str.14 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([13 x i8]* @.str.15 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([12 x i8]* @.str.16 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([13 x i8]* @.str.17 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([16 x i8]* @.str.18 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([17 x i8]* @.str.19 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum to i64)) to i32)]
@.str.20 = [2 x i8] c" \00"
@.str.21 = [10 x i8] c"3p p1t t1\00"
@.str.22 = [10 x i8] c"m6 v1t t1\00"
@.str.23 = [13 x i8] c"n1 l1 v1t t1\00"
@.str.24 = [10 x i8] c"10 v1t t1\00"
@.str.25 = [12 x i8] c"1 r1 v1t t1\00"
@.str.26 = [10 x i8] c"7p p1t t1\00"
@.str.27 = [11 x i8] c"7m bh1t t1\00"
@.str.28 = [13 x i8] c"t11m bh1t t1\00"
@reltable.kn_parsenum.45 = [10 x i32] [i32 trunc (i64 sub (i64 ptrtoint ([2 x i8]* @.str.20 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([2 x i8]* @.str.20 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([10 x i8]* @.str.21 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([10 x i8]* @.str.22 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([13 x i8]* @.str.23 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([10 x i8]* @.str.24 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([12 x i8]* @.str.25 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([10 x i8]* @.str.26 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([11 x i8]* @.str.27 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32), i32 trunc (i64 sub (i64 ptrtoint ([13 x i8]* @.str.28 to i64), i64 ptrtoint ([10 x i32]* @reltable.kn_parsenum.45 to i64)) to i32)]
@.str.29 = [1 x i8] zeroinitializer
@.str.30 = [6 x i8] c"n6 r1\00"
@.str.31 = [9 x i8] c"3n n6 r1\00"
@.str.32 = [10 x i8] c"m5n n6 r1\00"
@.str.33 = [9 x i8] c"n2 n6 r1\00"
@.str.34 = [9 x i8] c"10 n6 r1\00"
@.str.35 = [11 x i8] c"2 r5 n6 r1\00"
@.str.36 = [12 x i8] c"8 ll5 n6 r1\00"
@.str.37 = [15 x i8] c"7nna tt5 n6 r1\00"
@.str.38 = [15 x i8] c"11m bh10 n6 r1\00"
@__const.kn_parsenum.hundreds = [10 x i8*] [i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str.29, i32 0, i32 0), i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.30, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.31, i32 0, i32 0), i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str.32, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.33, i32 0, i32 0), i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.34, i32 0, i32 0), i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.35, i32 0, i32 0), i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.36, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.37, i32 0, i32 0), i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.38, i32 0, i32 0)]
@.str.39 = [10 x i8] c" k12 tt3 \00"
@.str.40 = [11 x i8] c" l1 kHsh1 \00"
@.str.41 = [14 x i8] c" l1 kHsh1 d1 \00"
@.str.42 = [11 x i8] c" s2 v3 r1 \00"
@.str.43 = [14 x i8] c" s2 v3 r1 d1 \00"
@.str.44 = [8 x i8] c" G1500 \00"
define i8* @kn_parsenum(i8* %0) {
%2 = tail call i32 @strlen(i8* %0)
%3 = tail call i64 @malloc(i32 100)
%4 = inttoptr i64 %3 to i8*
store i8 0, i8* %4
%5 = tail call i64 @malloc(i32 20)
%6 = inttoptr i64 %5 to i8*
%7 = icmp sgt i32 %2, 0
br i1 %7, label %8, label %247
8: ; preds = %1, %241
%9 = phi i32 [ %245, %241 ], [ 0, %1 ]
%10 = sub nsw i32 %2, %9
switch i32 %10, label %241 [
i32 9, label %11
i32 8, label %17
i32 7, label %25
i32 6, label %61
i32 5, label %107
i32 4, label %131
i32 3, label %165
i32 2, label %204
i32 1, label %229
]
11: ; preds = %8
%12 = sext i32 %9 to i64
%13 = getelementptr inbounds i8, i8* %0, i64 %12
%14 = tail call i32 @strncpy(i8* %6, i8* %13, i32 2)
%15 = tail call i8* @kn_parsenum(i8* %6)
%16 = tail call i32 @strcat(i8* %4, i8* %15)
br label %237
17: ; preds = %8
%18 = sext i32 %9 to i64
%19 = getelementptr inbounds i8, i8* %0, i64 %18
%20 = load i8, i8* %19
%21 = sext i8 %20 to i64
%22 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.kn_parsenum.singles, i64 0, i64 %21
%23 = load i8*, i8** %22
%24 = tail call i32 @strcat(i8* %4, i8* %23)
br label %237
25: ; preds = %8
%26 = sext i32 %9 to i64
%27 = getelementptr inbounds i8, i8* %0, i64 %26
%28 = tail call i32 @strncpy(i8* %6, i8* %27, i32 2)
%29 = tail call i8* @kn_parsenum(i8* %6)
%30 = tail call i32 @strcat(i8* %4, i8* %29)
%31 = add nsw i32 %9, 2
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds i8, i8* %0, i64 %32
%34 = load i8, i8* %33
%35 = icmp eq i8 %34, 48
br i1 %35, label %36, label %60
36: ; preds = %25
%37 = add nsw i32 %9, 3
%38 = sext i32 %37 to i64
%39 = getelementptr inbounds i8, i8* %0, i64 %38
%40 = load i8, i8* %39
%41 = icmp eq i8 %40, 48
br i1 %41, label %42, label %60
42: ; preds = %36
%43 = add nsw i32 %9, 4
%44 = sext i32 %43 to i64
%45 = getelementptr inbounds i8, i8* %0, i64 %44
%46 = load i8, i8* %45
%47 = icmp eq i8 %46, 48
br i1 %47, label %48, label %60
48: ; preds = %42
%49 = add nsw i32 %9, 5
%50 = sext i32 %49 to i64
%51 = getelementptr inbounds i8, i8* %0, i64 %50
%52 = load i8, i8* %51
%53 = icmp eq i8 %52, 48
br i1 %53, label %54, label %60
54: ; preds = %48
%55 = add nsw i32 %9, 6
%56 = sext i32 %55 to i64
%57 = getelementptr inbounds i8, i8* %0, i64 %56
%58 = load i8, i8* %57
%59 = icmp eq i8 %58, 48
br i1 %59, label %237, label %60
60: ; preds = %54, %48, %42, %36, %25
br label %237
61: ; preds = %8
%62 = add nsw i32 %9, 1
%63 = sext i32 %62 to i64
%64 = getelementptr inbounds i8, i8* %0, i64 %63
%65 = load i8, i8* %64
%66 = icmp eq i8 %65, 48
br i1 %66, label %67, label %99
67: ; preds = %61
%68 = add nsw i32 %9, 2
%69 = sext i32 %68 to i64
%70 = getelementptr inbounds i8, i8* %0, i64 %69
%71 = load i8, i8* %70
%72 = icmp eq i8 %71, 48
br i1 %72, label %73, label %99
73: ; preds = %67
%74 = add nsw i32 %9, 3
%75 = sext i32 %74 to i64
%76 = getelementptr inbounds i8, i8* %0, i64 %75
%77 = load i8, i8* %76
%78 = icmp eq i8 %77, 48
br i1 %78, label %79, label %99
79: ; preds = %73
%80 = add nsw i32 %9, 4
%81 = sext i32 %80 to i64
%82 = getelementptr inbounds i8, i8* %0, i64 %81
%83 = load i8, i8* %82
%84 = icmp eq i8 %83, 48
br i1 %84, label %85, label %99
85: ; preds = %79
%86 = add nsw i32 %9, 5
%87 = sext i32 %86 to i64
%88 = getelementptr inbounds i8, i8* %0, i64 %87
%89 = load i8, i8* %88
%90 = icmp eq i8 %89, 48
br i1 %90, label %91, label %99
91: ; preds = %85
%92 = sext i32 %9 to i64
%93 = getelementptr inbounds i8, i8* %0, i64 %92
%94 = load i8, i8* %93
%95 = sext i8 %94 to i64
%96 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.kn_parsenum.singles, i64 0, i64 %95
%97 = load i8*, i8** %96
%98 = tail call i32 @strcat(i8* %4, i8* %97)
br label %237
99: ; preds = %85, %79, %73, %67, %61
%100 = sext i32 %9 to i64
%101 = getelementptr inbounds i8, i8* %0, i64 %100
%102 = load i8, i8* %101
%103 = sext i8 %102 to i64
%104 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.kn_parsenum.singles, i64 0, i64 %103
%105 = load i8*, i8** %104
%106 = tail call i32 @strcat(i8* %4, i8* %105)
br label %237
107: ; preds = %8
%108 = sext i32 %9 to i64
%109 = getelementptr inbounds i8, i8* %0, i64 %108
%110 = tail call i32 @strncpy(i8* %6, i8* %109, i32 2)
%111 = tail call i8* @kn_parsenum(i8* %6)
%112 = tail call i32 @strcat(i8* %4, i8* %111)
%113 = add nsw i32 %9, 2
%114 = sext i32 %113 to i64
%115 = getelementptr inbounds i8, i8* %0, i64 %114
%116 = load i8, i8* %115
%117 = icmp eq i8 %116, 48
br i1 %117, label %118, label %130
118: ; preds = %107
%119 = add nsw i32 %9, 3
%120 = sext i32 %119 to i64
%121 = getelementptr inbounds i8, i8* %0, i64 %120
%122 = load i8, i8* %121
%123 = icmp eq i8 %122, 48
br i1 %123, label %124, label %130
124: ; preds = %118
%125 = add nsw i32 %9, 4
%126 = sext i32 %125 to i64
%127 = getelementptr inbounds i8, i8* %0, i64 %126
%128 = load i8, i8* %127
%129 = icmp eq i8 %128, 48
br i1 %129, label %237, label %130
130: ; preds = %124, %118, %107
br label %237
131: ; preds = %8
%132 = add nsw i32 %9, 1
%133 = sext i32 %132 to i64
%134 = getelementptr inbounds i8, i8* %0, i64 %133
%135 = load i8, i8* %134
%136 = icmp eq i8 %135, 48
br i1 %136, label %137, label %157
137: ; preds = %131
%138 = add nsw i32 %9, 2
%139 = sext i32 %138 to i64
%140 = getelementptr inbounds i8, i8* %0, i64 %139
%141 = load i8, i8* %140
%142 = icmp eq i8 %141, 48
br i1 %142, label %143, label %157
143: ; preds = %137
%144 = add nsw i32 %9, 3
%145 = sext i32 %144 to i64
%146 = getelementptr inbounds i8, i8* %0, i64 %145
%147 = load i8, i8* %146
%148 = icmp eq i8 %147, 48
br i1 %148, label %149, label %157
149: ; preds = %143
%150 = sext i32 %9 to i64
%151 = getelementptr inbounds i8, i8* %0, i64 %150
%152 = load i8, i8* %151
%153 = sext i8 %152 to i64
%154 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.kn_parsenum.singles, i64 0, i64 %153
%155 = load i8*, i8** %154
%156 = tail call i32 @strcat(i8* %4, i8* %155)
br label %237
157: ; preds = %143, %137, %131
%158 = sext i32 %9 to i64
%159 = getelementptr inbounds i8, i8* %0, i64 %158
%160 = load i8, i8* %159
%161 = sext i8 %160 to i64
%162 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.kn_parsenum.singles, i64 0, i64 %161
%163 = load i8*, i8** %162
%164 = tail call i32 @strcat(i8* %4, i8* %163)
br label %237
165: ; preds = %8
%166 = add nsw i32 %9, 1
%167 = sext i32 %166 to i64
%168 = getelementptr inbounds i8, i8* %0, i64 %167
%169 = load i8, i8* %168
switch i8 %169, label %196 [
i8 48, label %170
i8 0, label %188
]
170: ; preds = %165
%171 = add nsw i32 %9, 2
%172 = sext i32 %171 to i64
%173 = getelementptr inbounds i8, i8* %0, i64 %172
%174 = load i8, i8* %173
%175 = icmp eq i8 %174, 48
br i1 %175, label %176, label %196
176: ; preds = %170
%177 = sext i32 %9 to i64
%178 = getelementptr inbounds i8, i8* %0, i64 %177
%179 = load i8, i8* %178
%180 = sext i8 %179 to i64
%181 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.kn_parsenum.hundreds, i64 0, i64 %180
%182 = load i8*, i8** %181
%183 = tail call i32 @strcat(i8* %4, i8* %182)
%184 = tail call i32 @strlen(i8* %4)
%185 = add nsw i32 %184, -1
%186 = sext i32 %185 to i64
%187 = getelementptr inbounds i8, i8* %4, i64 %186
store i8 53, i8* %187
br label %237
188: ; preds = %165
%189 = sext i32 %9 to i64
%190 = getelementptr inbounds i8, i8* %0, i64 %189
%191 = load i8, i8* %190
%192 = sext i8 %191 to i64
%193 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.kn_parsenum.hundreds, i64 0, i64 %192
%194 = load i8*, i8** %193
%195 = tail call i32 @strcat(i8* %4, i8* %194)
br label %237
196: ; preds = %165, %170
%197 = sext i32 %9 to i64
%198 = getelementptr inbounds i8, i8* %0, i64 %197
%199 = load i8, i8* %198
%200 = sext i8 %199 to i64
%201 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.kn_parsenum.hundreds, i64 0, i64 %200
%202 = load i8*, i8** %201
%203 = tail call i32 @strcat(i8* %4, i8* %202)
br label %237
204: ; preds = %8
%205 = sext i32 %9 to i64
%206 = getelementptr inbounds i8, i8* %0, i64 %205
%207 = load i8, i8* %206
%208 = icmp eq i8 %207, 49
%209 = add nsw i32 %9, 1
%210 = sext i32 %209 to i64
%211 = getelementptr inbounds i8, i8* %0, i64 %210
%212 = load i8, i8* %211
br i1 %208, label %213, label %218
213: ; preds = %204
%214 = sext i8 %212 to i64
%215 = shl i64 %214, 2
%216 = call i8* @llvm.load.relative.i64(i8* bitcast ([10 x i32]* @reltable.kn_parsenum to i8*), i64 %215)
%217 = tail call i32 @strcat(i8* %4, i8* %216)
br label %237
218: ; preds = %204
%219 = icmp eq i8 %212, 48
%220 = sext i8 %207 to i64
%221 = shl i64 %220, 2
%222 = call i8* @llvm.load.relative.i64(i8* bitcast ([10 x i32]* @reltable.kn_parsenum.45 to i8*), i64 %221)
%223 = tail call i32 @strcat(i8* %4, i8* %222)
br i1 %219, label %224, label %237
224: ; preds = %218
%225 = tail call i32 @strlen(i8* %4)
%226 = add nsw i32 %225, -1
%227 = sext i32 %226 to i64
%228 = getelementptr inbounds i8, i8* %4, i64 %227
store i8 53, i8* %228
br label %237
229: ; preds = %8
%230 = sext i32 %9 to i64
%231 = getelementptr inbounds i8, i8* %0, i64 %230
%232 = load i8, i8* %231
%233 = sext i8 %232 to i64
%234 = getelementptr inbounds [10 x i8*], [10 x i8*]* @__const.kn_parsenum.singles, i64 0, i64 %233
%235 = load i8*, i8** %234
%236 = tail call i32 @strcat(i8* %4, i8* %235)
br label %237
237: ; preds = %213, %224, %218, %176, %196, %188, %124, %54, %11, %60, %130, %229, %149, %157, %91, %99, %17
%238 = phi i8* [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.39, i64 0, i64 0), %17 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.41, i64 0, i64 0), %99 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.40, i64 0, i64 0), %91 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.43, i64 0, i64 0), %157 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.42, i64 0, i64 0), %149 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0), %229 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.43, i64 0, i64 0), %130 ], [ getelementptr inbounds ([14 x i8], [14 x i8]* @.str.41, i64 0, i64 0), %60 ], [ getelementptr inbounds ([10 x i8], [10 x i8]* @.str.39, i64 0, i64 0), %11 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.40, i64 0, i64 0), %54 ], [ getelementptr inbounds ([11 x i8], [11 x i8]* @.str.42, i64 0, i64 0), %124 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0), %188 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0), %196 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0), %176 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0), %218 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0), %224 ], [ getelementptr inbounds ([2 x i8], [2 x i8]* @.str.20, i64 0, i64 0), %213 ]
%239 = phi i32 [ 0, %17 ], [ 0, %99 ], [ 0, %91 ], [ 0, %157 ], [ 0, %149 ], [ 0, %229 ], [ 1, %130 ], [ 1, %60 ], [ 1, %11 ], [ 6, %54 ], [ 3, %124 ], [ 1, %188 ], [ 0, %196 ], [ 2, %176 ], [ 0, %218 ], [ 1, %224 ], [ 1, %213 ]
%240 = tail call i32 @strcat(i8* %4, i8* %238)
br label %241
241: ; preds = %237, %8
%242 = phi i32 [ 0, %8 ], [ %239, %237 ]
%243 = tail call i32 @strcat(i8* %4, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.44, i64 0, i64 0))
%244 = add nsw i32 %9, 1
%245 = add i32 %244, %242
%246 = icmp sgt i32 %2, %245
br i1 %246, label %8, label %247
247: ; preds = %241, %1
%248 = tail call i32 @free(i8* %6)
ret i8* %4
}