#define NULL ((void *)0)
typedef unsigned long size_t; // Customize by platform.
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef long scalar_t__; // Either arithmetic or pointer type.
/* By default, we understand bool (as a convenience). */
typedef int bool;
#define false 0
#define true 1

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
char *alloca(size_t);
char *calloc(size_t, int);
int /*<<< orphan*/ memcpy(char *, char const *, size_t);
size_t strlen(char const *);
int /*<<< orphan*/ strncmp(char *, char *, int);
char toupper(char);
char *nysiis(const char *str) {
  size_t len = strlen(str);
  char c1, c2, c3;
  char *code = NULL;
  char *p, *cp;
  char *copy = alloca((len + 1) * sizeof(char));
  memcpy(copy, str, len + 1);
  if (!copy) {
    return NULL;
  }
  if (!*copy) {
    return calloc(1, sizeof(char));
  }
  code = calloc(len + 1, sizeof(char));
  if (!code) {
    return NULL;
  }
  if (!strncmp(copy, "MAC", 3)) {
    copy[1] = 'C';
  } else if (!strncmp(copy, "KN", 3)) {
    copy[0] = 'N';
  } else if (copy[0] == 'K') {
    copy[0] = 'C';
  } else if (!strncmp(copy, "PH", 2)) {
    copy[0] = 'F';
    copy[1] = 'F';
  } else if (!strncmp(copy, "SCH", 3)) {
    copy[1] = 'S';
    copy[2] = 'S';
  }
  c1 = copy[len - 1];
  if (c1 == 'E') {
    c2 = copy[len - 2];
    if (c2 == 'E' || c2 == 'I') {
      copy[len - 1] = ' ';
      copy[len - 2] = 'Y';
    }
  } else if (c1 == 'T') {
    c2 = copy[len - 2];
    if (c2 == 'D' || c2 == 'R' || c2 == 'N') {
      copy[len - 1] = ' ';
      copy[len - 2] = 'D';
    }
  } else if (c1 == 'D') {
    c2 = copy[len - 2];
    if (c2 == 'R' || c2 == 'N') {
      copy[len - 1] = ' ';
      copy[len - 2] = 'D';
    }
  }
  cp = code;
  p = copy;
  *(cp++) = toupper(*(p++));
  while ((c1 = toupper(*p))) {
    if (c1 == ' ') {
      break;
    }
    switch (c1) {
    case 'E':
      if (toupper(*(p + 1)) == 'V') {
        *cp = 'A';
        *(++cp) = 'F';
        break;
      }
    case 'A':
    case 'I':
    case 'O':
    case 'U':
      *cp = 'A';
      break;
    case 'Q':
      *cp = 'G';
      break;
    case 'Z':
      *cp = 'S';
      break;
    case 'M':
      *cp = 'N';
      break;
    case 'K':
      if (toupper(*(p + 1)) == 'N') {
        *cp = 'N';
      } else {
        *cp = 'C';
      }
      break;
    case 'S':
      if (toupper(*(p + 1)) == 'C' && toupper(*(p + 2)) == 'H') {
        *(cp++) = 'S';
        *(cp++) = 'S';
        *cp = 'S';
      } else {
        *cp = 'S';
      }
      break;
    case 'P':
      if (toupper(*(p + 1)) == 'H') {
        *cp = 'F';
        *(++cp) = 'F';
      } else {
        *cp = 'P';
      }
      break;
    case 'H':
      c2 = toupper(*(p + 1));
      c3 = toupper(*(p - 1));
      if (!((c2) == 'A' || (c2) == 'E' || (c2) == 'I' || (c2) == 'O' ||
            (c2) == 'U') ||
          !((c3) == 'A' || (c3) == 'E' || (c3) == 'I' || (c3) == 'O' ||
            (c3) == 'U')) {
        *cp = c3;
      } else {
        *cp = 'H';
      }
      break;
    case 'W':
      c2 = toupper(*(p - 1));
      if (((c2) == 'A' || (c2) == 'E' || (c2) == 'I' || (c2) == 'O' ||
           (c2) == 'U')) {
        *cp = c2;
      } else {
        *cp = 'W';
      }
      break;
    default:
      *cp = toupper(c1);
    }
    if (*cp != *(cp - 1) || cp == code + 1) {
      cp++;
    }
    p++;
  }
  *cp = '\0';
  c1 = *(cp - 1);
  if (c1 == 'S') {
    *(--cp) = '\0';
  } else if (c1 == 'Y') {
    if (*(cp - 2) == 'A') {
      *(--cp) = '\0';
      *(--cp) = 'Y';
    }
  }
  if (*(cp - 1) == 'A') {
    *(cp - 1) = '\0';
  }
  return code;
}


x86 assembly (clang, -O0):
<nysiis>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    %rdi,-0x10(%rbp)
mov    -0x10(%rbp),%rdi
call   1050 <strlen@plt>
mov    %rax,-0x18(%rbp)
movq   $0x0,-0x28(%rbp)
mov    -0x18(%rbp),%rdi
add    $0x1,%rdi
shl    $0x0,%rdi
call   1070 <alloca@plt>
mov    %rax,-0x40(%rbp)
mov    -0x40(%rbp),%rdi
mov    -0x10(%rbp),%rsi
mov    -0x18(%rbp),%rdx
add    $0x1,%rdx
call   1080 <memcpy@plt>
cmpq   $0x0,-0x40(%rbp)
jne    11c3 <nysiis+0x63>
movq   $0x0,-0x8(%rbp)
jmp    1841 <nysiis+0x6e1>
mov    -0x40(%rbp),%rax
cmpb   $0x0,(%rax)
jne    11e8 <nysiis+0x88>
mov    $0x1,%edi
mov    $0x1,%esi
call   1060 <calloc@plt>
mov    %rax,-0x8(%rbp)
jmp    1841 <nysiis+0x6e1>
mov    -0x18(%rbp),%rdi
add    $0x1,%rdi
mov    $0x1,%esi
call   1060 <calloc@plt>
mov    %rax,-0x28(%rbp)
cmpq   $0x0,-0x28(%rbp)
jne    1216 <nysiis+0xb6>
movq   $0x0,-0x8(%rbp)
jmp    1841 <nysiis+0x6e1>
mov    -0x40(%rbp),%rdi
lea    0xe47(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    1241 <nysiis+0xe1>
mov    -0x40(%rbp),%rax
movb   $0x43,0x1(%rax)
jmp    12fb <nysiis+0x19b>
mov    -0x40(%rbp),%rdi
lea    0xe20(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    126b <nysiis+0x10b>
mov    -0x40(%rbp),%rax
movb   $0x4e,(%rax)
jmp    12f6 <nysiis+0x196>
mov    -0x40(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x4b,%eax
jne    1287 <nysiis+0x127>
mov    -0x40(%rbp),%rax
movb   $0x43,(%rax)
jmp    12f1 <nysiis+0x191>
mov    -0x40(%rbp),%rdi
lea    0xddd(%rip),%rsi
mov    $0x2,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    12b9 <nysiis+0x159>
mov    -0x40(%rbp),%rax
movb   $0x46,(%rax)
mov    -0x40(%rbp),%rax
movb   $0x46,0x1(%rax)
jmp    12ec <nysiis+0x18c>
mov    -0x40(%rbp),%rdi
lea    0xdae(%rip),%rsi
mov    $0x3,%edx
call   1030 <strncmp@plt>
cmp    $0x0,%eax
jne    12e7 <nysiis+0x187>
mov    -0x40(%rbp),%rax
movb   $0x53,0x1(%rax)
mov    -0x40(%rbp),%rax
movb   $0x53,0x2(%rax)
jmp    12ec <nysiis+0x18c>
jmp    12f1 <nysiis+0x191>
jmp    12f6 <nysiis+0x196>
jmp    12fb <nysiis+0x19b>
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x45,%eax
jne    136b <nysiis+0x20b>
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x45,%eax
je     1346 <nysiis+0x1e6>
movsbl -0x1a(%rbp),%eax
cmp    $0x49,%eax
jne    1366 <nysiis+0x206>
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
movb   $0x59,(%rax,%rcx,1)
jmp    143e <nysiis+0x2de>
movsbl -0x19(%rbp),%eax
cmp    $0x54,%eax
jne    13d6 <nysiis+0x276>
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x44,%eax
je     13b1 <nysiis+0x251>
movsbl -0x1a(%rbp),%eax
cmp    $0x52,%eax
je     13b1 <nysiis+0x251>
movsbl -0x1a(%rbp),%eax
cmp    $0x4e,%eax
jne    13d1 <nysiis+0x271>
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
movb   $0x44,(%rax,%rcx,1)
jmp    1439 <nysiis+0x2d9>
movsbl -0x19(%rbp),%eax
cmp    $0x44,%eax
jne    1434 <nysiis+0x2d4>
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
mov    (%rax,%rcx,1),%al
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x52,%eax
je     140f <nysiis+0x2af>
movsbl -0x1a(%rbp),%eax
cmp    $0x4e,%eax
jne    142f <nysiis+0x2cf>
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x40(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x2,%rcx
movb   $0x44,(%rax,%rcx,1)
jmp    1434 <nysiis+0x2d4>
jmp    1439 <nysiis+0x2d9>
jmp    143e <nysiis+0x2de>
mov    -0x28(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x40(%rbp),%rax
mov    %rax,-0x30(%rbp)
mov    -0x30(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x30(%rbp)
movsbl (%rax),%edi
call   1040 <toupper@plt>
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x38(%rbp)
mov    %cl,(%rax)
mov    -0x30(%rbp),%rax
movsbl (%rax),%edi
call   1040 <toupper@plt>
mov    %al,-0x19(%rbp)
cmp    $0x0,%al
je     179c <nysiis+0x63c>
movsbl -0x19(%rbp),%eax
cmp    $0x20,%eax
jne    14a1 <nysiis+0x341>
jmp    179c <nysiis+0x63c>
movsbl -0x19(%rbp),%eax
add    $0xffffffbf,%eax
mov    %eax,%ecx
mov    %rcx,-0x48(%rbp)
sub    $0x19,%eax
ja     1742 <nysiis+0x5e2>
mov    -0x48(%rbp),%rax
lea    0xb3e(%rip),%rcx
movslq (%rcx,%rax,4),%rax
add    %rcx,%rax
jmp    *%rax
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1040 <toupper@plt>
movsbl %al,%eax
cmp    $0x56,%eax
jne    1503 <nysiis+0x3a3>
mov    -0x38(%rbp),%rax
movb   $0x41,(%rax)
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x38(%rbp)
movb   $0x46,0x1(%rax)
jmp    1753 <nysiis+0x5f3>
jmp    1508 <nysiis+0x3a8>
mov    -0x38(%rbp),%rax
movb   $0x41,(%rax)
jmp    1753 <nysiis+0x5f3>
mov    -0x38(%rbp),%rax
movb   $0x47,(%rax)
jmp    1753 <nysiis+0x5f3>
mov    -0x38(%rbp),%rax
movb   $0x53,(%rax)
jmp    1753 <nysiis+0x5f3>
mov    -0x38(%rbp),%rax
movb   $0x4e,(%rax)
jmp    1753 <nysiis+0x5f3>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1040 <toupper@plt>
movsbl %al,%eax
cmp    $0x4e,%eax
jne    155d <nysiis+0x3fd>
mov    -0x38(%rbp),%rax
movb   $0x4e,(%rax)
jmp    1564 <nysiis+0x404>
mov    -0x38(%rbp),%rax
movb   $0x43,(%rax)
jmp    1753 <nysiis+0x5f3>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1040 <toupper@plt>
movsbl %al,%eax
cmp    $0x43,%eax
jne    15cb <nysiis+0x46b>
mov    -0x30(%rbp),%rax
movsbl 0x2(%rax),%edi
call   1040 <toupper@plt>
movsbl %al,%eax
cmp    $0x48,%eax
jne    15cb <nysiis+0x46b>
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x38(%rbp)
movb   $0x53,(%rax)
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x38(%rbp)
movb   $0x53,(%rax)
mov    -0x38(%rbp),%rax
movb   $0x53,(%rax)
jmp    15d2 <nysiis+0x472>
mov    -0x38(%rbp),%rax
movb   $0x53,(%rax)
jmp    1753 <nysiis+0x5f3>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1040 <toupper@plt>
movsbl %al,%eax
cmp    $0x48,%eax
jne    160f <nysiis+0x4af>
mov    -0x38(%rbp),%rax
movb   $0x46,(%rax)
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x38(%rbp)
movb   $0x46,0x1(%rax)
jmp    1616 <nysiis+0x4b6>
mov    -0x38(%rbp),%rax
movb   $0x50,(%rax)
jmp    1753 <nysiis+0x5f3>
mov    -0x30(%rbp),%rax
movsbl 0x1(%rax),%edi
call   1040 <toupper@plt>
mov    %al,-0x1a(%rbp)
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%edi
call   1040 <toupper@plt>
mov    %al,-0x1b(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x41,%eax
je     167c <nysiis+0x51c>
movsbl -0x1a(%rbp),%eax
cmp    $0x45,%eax
je     167c <nysiis+0x51c>
movsbl -0x1a(%rbp),%eax
cmp    $0x49,%eax
je     167c <nysiis+0x51c>
movsbl -0x1a(%rbp),%eax
cmp    $0x4f,%eax
je     167c <nysiis+0x51c>
movsbl -0x1a(%rbp),%eax
cmp    $0x55,%eax
jne    16bd <nysiis+0x55d>
movsbl -0x1b(%rbp),%eax
cmp    $0x41,%eax
je     16cb <nysiis+0x56b>
movsbl -0x1b(%rbp),%eax
cmp    $0x45,%eax
je     16cb <nysiis+0x56b>
movsbl -0x1b(%rbp),%eax
cmp    $0x49,%eax
je     16cb <nysiis+0x56b>
movsbl -0x1b(%rbp),%eax
cmp    $0x4f,%eax
je     16cb <nysiis+0x56b>
movsbl -0x1b(%rbp),%eax
cmp    $0x55,%eax
je     16cb <nysiis+0x56b>
mov    -0x1b(%rbp),%cl
mov    -0x38(%rbp),%rax
mov    %cl,(%rax)
jmp    16d2 <nysiis+0x572>
mov    -0x38(%rbp),%rax
movb   $0x48,(%rax)
jmp    1753 <nysiis+0x5f3>
mov    -0x30(%rbp),%rax
movsbl -0x1(%rax),%edi
call   1040 <toupper@plt>
mov    %al,-0x1a(%rbp)
movsbl -0x1a(%rbp),%eax
cmp    $0x41,%eax
je     1728 <nysiis+0x5c8>
movsbl -0x1a(%rbp),%eax
cmp    $0x45,%eax
je     1728 <nysiis+0x5c8>
movsbl -0x1a(%rbp),%eax
cmp    $0x49,%eax
je     1728 <nysiis+0x5c8>
movsbl -0x1a(%rbp),%eax
cmp    $0x4f,%eax
je     1728 <nysiis+0x5c8>
movsbl -0x1a(%rbp),%eax
cmp    $0x55,%eax
jne    1736 <nysiis+0x5d6>
mov    -0x1a(%rbp),%cl
mov    -0x38(%rbp),%rax
mov    %cl,(%rax)
jmp    173d <nysiis+0x5dd>
mov    -0x38(%rbp),%rax
movb   $0x57,(%rax)
jmp    1753 <nysiis+0x5f3>
movsbl -0x19(%rbp),%edi
call   1040 <toupper@plt>
mov    %al,%cl
mov    -0x38(%rbp),%rax
mov    %cl,(%rax)
mov    -0x38(%rbp),%rax
movsbl (%rax),%eax
mov    -0x38(%rbp),%rcx
movsbl -0x1(%rcx),%ecx
cmp    %ecx,%eax
jne    177f <nysiis+0x61f>
mov    -0x38(%rbp),%rax
mov    -0x28(%rbp),%rcx
add    $0x1,%rcx
cmp    %rcx,%rax
jne    178b <nysiis+0x62b>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x30(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x30(%rbp)
jmp    1478 <nysiis+0x318>
mov    -0x38(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x38(%rbp),%rax
mov    -0x1(%rax),%al
mov    %al,-0x19(%rbp)
movsbl -0x19(%rbp),%eax
cmp    $0x53,%eax
jne    17d2 <nysiis+0x672>
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x38(%rbp)
movb   $0x0,-0x1(%rax)
jmp    1820 <nysiis+0x6c0>
movsbl -0x19(%rbp),%eax
cmp    $0x59,%eax
jne    181b <nysiis+0x6bb>
mov    -0x38(%rbp),%rax
movsbl -0x2(%rax),%eax
cmp    $0x41,%eax
jne    1816 <nysiis+0x6b6>
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x38(%rbp)
movb   $0x0,-0x1(%rax)
mov    -0x38(%rbp),%rax
mov    %rax,%rcx
add    $0xffffffffffffffff,%rcx
mov    %rcx,-0x38(%rbp)
movb   $0x59,-0x1(%rax)
jmp    181b <nysiis+0x6bb>
jmp    1820 <nysiis+0x6c0>
mov    -0x38(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x41,%eax
jne    1839 <nysiis+0x6d9>
mov    -0x38(%rbp),%rax
movb   $0x0,-0x1(%rax)
mov    -0x28(%rbp),%rax
mov    %rax,-0x8(%rbp)
mov    -0x8(%rbp),%rax
add    $0x50,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<nysiis>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    %rdi,%rbp
call   1050 <strlen@plt>
mov    %rax,%r15
lea    0x1(%rax),%r14
mov    %r14,%rdi
call   1070 <alloca@plt>
mov    %rax,%rbx
mov    %rax,%rdi
mov    %rbp,%rsi
mov    %r14,%rdx
call   1080 <memcpy@plt>
test   %rbx,%rbx
je     11ec <nysiis+0x8c>
cmpb   $0x0,(%rbx)
je     1201 <nysiis+0xa1>
mov    %r14,%rdi
mov    $0x1,%esi
call   1060 <calloc@plt>
test   %rax,%rax
je     11ec <nysiis+0x8c>
mov    %rax,%r14
lea    0xeaf(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1030 <strncmp@plt>
test   %eax,%eax
je     121e <nysiis+0xbe>
lea    0xe9b(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1030 <strncmp@plt>
test   %eax,%eax
je     1224 <nysiis+0xc4>
cmpb   $0x4b,(%rbx)
jne    1229 <nysiis+0xc9>
movb   $0x43,(%rbx)
jmp    1266 <nysiis+0x106>
xor    %r14d,%r14d
mov    %r14,%rax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret
mov    $0x1,%edi
mov    $0x1,%esi
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
jmp    1060 <calloc@plt>
movb   $0x43,0x1(%rbx)
jmp    1266 <nysiis+0x106>
movb   $0x4e,(%rbx)
jmp    1266 <nysiis+0x106>
lea    0xe3f(%rip),%rsi
mov    %rbx,%rdi
mov    $0x2,%edx
call   1030 <strncmp@plt>
test   %eax,%eax
je     1261 <nysiis+0x101>
lea    0xe2a(%rip),%rsi
mov    %rbx,%rdi
mov    $0x3,%edx
call   1030 <strncmp@plt>
test   %eax,%eax
jne    1266 <nysiis+0x106>
movw   $0x5353,0x1(%rbx)
jmp    1266 <nysiis+0x106>
movw   $0x4646,(%rbx)
mov    -0x1(%r15,%rbx,1),%al
cmp    $0x44,%al
je     128e <nysiis+0x12e>
cmp    $0x54,%al
je     129d <nysiis+0x13d>
cmp    $0x45,%al
jne    12be <nysiis+0x15e>
mov    -0x2(%r15,%rbx,1),%al
cmp    $0x49,%al
je     1284 <nysiis+0x124>
cmp    $0x45,%al
jne    12be <nysiis+0x15e>
movw   $0x2059,-0x2(%rbx,%r15,1)
20
jmp    12be <nysiis+0x15e>
mov    -0x2(%r15,%rbx,1),%al
cmp    $0x52,%al
je     12b6 <nysiis+0x156>
cmp    $0x4e,%al
je     12b6 <nysiis+0x156>
jmp    12be <nysiis+0x15e>
mov    -0x2(%r15,%rbx,1),%al
add    $0xbc,%al
cmp    $0xe,%al
ja     12be <nysiis+0x15e>
movzbl %al,%eax
mov    $0x4401,%ecx
bt     %rax,%rcx
jae    12be <nysiis+0x15e>
movw   $0x2044,-0x2(%rbx,%r15,1)
20
movsbl (%rbx),%edi
call   1040 <toupper@plt>
mov    %al,(%r14)
lea    0x1(%r14),%r13
movsbl 0x1(%rbx),%edi
call   1040 <toupper@plt>
test   $0xdf,%al
je     149e <nysiis+0x33e>
add    $0x3,%rbx
mov    $0x1,%ebp
lea    0xd12(%rip),%r12
jmp    1335 <nysiis+0x1d5>
movb   $0x53,0x0(%r13)
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%r14,%rbp,1),%eax
cmp    -0x1(%r14,%rbp,1),%al
setne  %al
cmp    $0x1,%rbp
sete   %cl
or     %al,%cl
movzbl %cl,%eax
add    %rax,%rbp
lea    (%r14,%rbp,1),%r13
movsbl -0x1(%rbx),%edi
call   1040 <toupper@plt>
add    $0x1,%rbx
test   $0xdf,%al
je     149e <nysiis+0x33e>
movsbl %al,%edi
lea    -0x41(%rdi),%eax
cmp    $0x19,%eax
ja     1350 <nysiis+0x1f0>
movslq (%r12,%rax,4),%rax
add    %r12,%rax
jmp    *%rax
movb   $0x41,0x0(%r13)
jmp    1300 <nysiis+0x1a0>
call   1040 <toupper@plt>
mov    %al,0x0(%r13)
jmp    1300 <nysiis+0x1a0>
movsbl -0x1(%rbx),%edi
call   1040 <toupper@plt>
cmp    $0x56,%al
jne    1349 <nysiis+0x1e9>
movb   $0x41,0x0(%r13)
jmp    1406 <nysiis+0x2a6>
movsbl -0x1(%rbx),%edi
call   1040 <toupper@plt>
mov    %eax,%r15d
movsbl -0x3(%rbx),%edi
call   1040 <toupper@plt>
add    $0xbf,%r15b
ror    %r15b
cmp    $0xa,%r15b
ja     1477 <nysiis+0x317>
movzbl %r15b,%ecx
mov    $0x495,%edx
bt     %rcx,%rdx
jae    1477 <nysiis+0x317>
lea    -0x41(%rax),%ecx
ror    %cl
cmp    $0xa,%cl
ja     1477 <nysiis+0x317>
movzbl %cl,%ecx
mov    $0x495,%edx
bt     %rcx,%rdx
jae    1477 <nysiis+0x317>
movb   $0x48,0x0(%r13)
jmp    1300 <nysiis+0x1a0>
movsbl -0x1(%rbx),%edi
call   1040 <toupper@plt>
cmp    $0x4e,%al
jne    1480 <nysiis+0x320>
movb   $0x4e,0x0(%r13)
jmp    1300 <nysiis+0x1a0>
movsbl -0x1(%rbx),%edi
call   1040 <toupper@plt>
cmp    $0x48,%al
jne    148a <nysiis+0x32a>
movb   $0x46,0x0(%r13)
movb   $0x46,0x1(%r14,%rbp,1)
add    $0x1,%rbp
jmp    1300 <nysiis+0x1a0>
movb   $0x47,0x0(%r13)
jmp    1300 <nysiis+0x1a0>
movsbl -0x1(%rbx),%edi
call   1040 <toupper@plt>
cmp    $0x43,%al
jne    12f0 <nysiis+0x190>
movsbl (%rbx),%edi
call   1040 <toupper@plt>
cmp    $0x48,%al
jne    12f0 <nysiis+0x190>
movb   $0x53,0x0(%r13)
movw   $0x5353,0x1(%rbp,%r14,1)
53
add    $0x2,%rbp
jmp    1300 <nysiis+0x1a0>
movsbl -0x3(%rbx),%edi
call   1040 <toupper@plt>
lea    -0x41(%rax),%ecx
ror    %cl
cmp    $0xa,%cl
ja     1494 <nysiis+0x334>
movzbl %cl,%ecx
mov    $0x495,%edx
bt     %rcx,%rdx
jae    1494 <nysiis+0x334>
mov    %al,0x0(%r13)
jmp    1300 <nysiis+0x1a0>
movb   $0x43,0x0(%r13)
jmp    1300 <nysiis+0x1a0>
movb   $0x50,0x0(%r13)
jmp    1300 <nysiis+0x1a0>
movb   $0x57,0x0(%r13)
jmp    1300 <nysiis+0x1a0>
movb   $0x0,0x0(%r13)
lea    -0x1(%r13),%rax
mov    -0x1(%r13),%cl
cmp    $0x59,%cl
je     14bd <nysiis+0x35d>
cmp    $0x53,%cl
jne    14d0 <nysiis+0x370>
movb   $0x0,(%rax)
mov    %rax,%r13
jmp    14d0 <nysiis+0x370>
cmpb   $0x41,-0x2(%r13)
jne    14d0 <nysiis+0x370>
add    $0xfffffffffffffffe,%r13
movb   $0x0,(%rax)
movb   $0x59,0x0(%r13)
cmpb   $0x41,-0x1(%r13)
jne    11ef <nysiis+0x8f>
movb   $0x0,-0x1(%r13)
jmp    11ef <nysiis+0x8f>

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

LLVM IR (-O2):
@.str = [4 x i8] c"MAC\00"
@.str.1 = [3 x i8] c"KN\00"
@.str.2 = [3 x i8] c"PH\00"
@.str.3 = [4 x i8] c"SCH\00"
define i8* @nysiis(i8* %0) {
%2 = tail call i64 @strlen(i8* dereferenceable(1) %0)
%3 = add i64 %2, 1
%4 = tail call i8* @alloca(i64 %3)
%5 = tail call i32 @memcpy(i8* %4, i8* %0, i64 %3)
%6 = icmp eq i8* %4, null
br i1 %6, label %173, label %7
7: ; preds = %1
%8 = load i8, i8* %4
%9 = icmp eq i8 %8, 0
br i1 %9, label %10, label %12
10: ; preds = %7
%11 = tail call i8* @calloc(i64 1, i32 1)
br label %173
12: ; preds = %7
%13 = tail call i8* @calloc(i64 %3, i32 1)
%14 = icmp eq i8* %13, null
br i1 %14, label %173, label %15
15: ; preds = %12
%16 = tail call i32 @strncmp(i8* %4, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str, i64 0, i64 0), i32 3)
%17 = icmp eq i32 %16, 0
br i1 %17, label %18, label %20
18: ; preds = %15
%19 = getelementptr inbounds i8, i8* %4, i64 1
store i8 67, i8* %19
br label %39
20: ; preds = %15
%21 = tail call i32 @strncmp(i8* %4, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.1, i64 0, i64 0), i32 3)
%22 = icmp eq i32 %21, 0
br i1 %22, label %23, label %24
23: ; preds = %20
store i8 78, i8* %4
br label %39
24: ; preds = %20
%25 = load i8, i8* %4
%26 = icmp eq i8 %25, 75
br i1 %26, label %27, label %28
27: ; preds = %24
store i8 67, i8* %4
br label %39
28: ; preds = %24
%29 = tail call i32 @strncmp(i8* %4, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32 2)
%30 = icmp eq i32 %29, 0
br i1 %30, label %31, label %33
31: ; preds = %28
store i8 70, i8* %4
%32 = getelementptr inbounds i8, i8* %4, i64 1
store i8 70, i8* %32
br label %39
33: ; preds = %28
%34 = tail call i32 @strncmp(i8* %4, i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.3, i64 0, i64 0), i32 3)
%35 = icmp eq i32 %34, 0
br i1 %35, label %36, label %39
36: ; preds = %33
%37 = getelementptr inbounds i8, i8* %4, i64 1
store i8 83, i8* %37
%38 = getelementptr inbounds i8, i8* %4, i64 2
store i8 83, i8* %38
br label %39
39: ; preds = %23, %31, %36, %33, %27, %18
%40 = add i64 %2, -1
%41 = getelementptr inbounds i8, i8* %4, i64 %40
%42 = load i8, i8* %41
switch i8 %42, label %58 [
i8 69, label %43
i8 84, label %48
i8 68, label %53
]
43: ; preds = %39
%44 = add i64 %2, -2
%45 = getelementptr inbounds i8, i8* %4, i64 %44
%46 = load i8, i8* %45
switch i8 %46, label %58 [
i8 73, label %47
i8 69, label %47
]
47: ; preds = %43, %43
store i8 32, i8* %41
store i8 89, i8* %45
br label %58
48: ; preds = %39
%49 = add i64 %2, -2
%50 = getelementptr inbounds i8, i8* %4, i64 %49
%51 = load i8, i8* %50
switch i8 %51, label %58 [
i8 82, label %52
i8 78, label %52
i8 68, label %52
]
52: ; preds = %48, %48, %48
store i8 32, i8* %41
store i8 68, i8* %50
br label %58
53: ; preds = %39
%54 = add i64 %2, -2
%55 = getelementptr inbounds i8, i8* %4, i64 %54
%56 = load i8, i8* %55
switch i8 %56, label %58 [
i8 82, label %57
i8 78, label %57
]
57: ; preds = %53, %53
store i8 32, i8* %41
store i8 68, i8* %55
br label %58
58: ; preds = %53, %39, %48, %43, %52, %57, %47
%59 = load i8, i8* %4
%60 = tail call signext i8 @toupper(i8 signext %59)
store i8 %60, i8* %13
%61 = getelementptr inbounds i8, i8* %4, i64 1
%62 = getelementptr inbounds i8, i8* %13, i64 1
%63 = load i8, i8* %61
%64 = tail call signext i8 @toupper(i8 signext %63)
%65 = and i8 %64, -33
%66 = icmp eq i8 %65, 0
br i1 %66, label %157, label %67
67: ; preds = %58, %140
%68 = phi i8 [ %154, %140 ], [ %64, %58 ]
%69 = phi i8* [ %152, %140 ], [ %62, %58 ]
%70 = phi i8* [ %151, %140 ], [ %61, %58 ]
%71 = phi i64 [ %150, %140 ], [ 1, %58 ]
%72 = phi i8* [ %70, %140 ], [ %4, %58 ]
%73 = sext i8 %68 to i32
switch i32 %73, label %138 [
i32 69, label %74
i32 65, label %82
i32 73, label %82
i32 79, label %82
i32 85, label %82
i32 81, label %83
i32 90, label %84
i32 77, label %85
i32 75, label %86
i32 83, label %93
i32 80, label %109
i32 72, label %118
i32 87, label %131
]
74: ; preds = %67
%75 = getelementptr inbounds i8, i8* %72, i64 2
%76 = load i8, i8* %75
%77 = tail call signext i8 @toupper(i8 signext %76)
%78 = icmp eq i8 %77, 86
br i1 %78, label %79, label %82
79: ; preds = %74
store i8 65, i8* %69
%80 = add nsw i64 %71, 1
%81 = getelementptr inbounds i8, i8* %13, i64 %80
store i8 70, i8* %81
br label %140
82: ; preds = %74, %67, %67, %67, %67
store i8 65, i8* %69
br label %140
83: ; preds = %67
store i8 71, i8* %69
br label %140
84: ; preds = %67
store i8 83, i8* %69
br label %140
85: ; preds = %67
store i8 78, i8* %69
br label %140
86: ; preds = %67
%87 = getelementptr inbounds i8, i8* %72, i64 2
%88 = load i8, i8* %87
%89 = tail call signext i8 @toupper(i8 signext %88)
%90 = icmp eq i8 %89, 78
br i1 %90, label %91, label %92
91: ; preds = %86
store i8 78, i8* %69
br label %140
92: ; preds = %86
store i8 67, i8* %69
br label %140
93: ; preds = %67
%94 = getelementptr inbounds i8, i8* %72, i64 2
%95 = load i8, i8* %94
%96 = tail call signext i8 @toupper(i8 signext %95)
%97 = icmp eq i8 %96, 67
br i1 %97, label %98, label %108
98: ; preds = %93
%99 = getelementptr inbounds i8, i8* %72, i64 3
%100 = load i8, i8* %99
%101 = tail call signext i8 @toupper(i8 signext %100)
%102 = icmp eq i8 %101, 72
br i1 %102, label %103, label %108
103: ; preds = %98
%104 = add nsw i64 %71, 1
%105 = getelementptr inbounds i8, i8* %13, i64 %104
store i8 83, i8* %69
%106 = add nsw i64 %71, 2
%107 = getelementptr inbounds i8, i8* %13, i64 %106
store i8 83, i8* %105
store i8 83, i8* %107
br label %140
108: ; preds = %98, %93
store i8 83, i8* %69
br label %140
109: ; preds = %67
%110 = getelementptr inbounds i8, i8* %72, i64 2
%111 = load i8, i8* %110
%112 = tail call signext i8 @toupper(i8 signext %111)
%113 = icmp eq i8 %112, 72
br i1 %113, label %114, label %117
114: ; preds = %109
store i8 70, i8* %69
%115 = add nsw i64 %71, 1
%116 = getelementptr inbounds i8, i8* %13, i64 %115
store i8 70, i8* %116
br label %140
117: ; preds = %109
store i8 80, i8* %69
br label %140
118: ; preds = %67
%119 = getelementptr inbounds i8, i8* %72, i64 2
%120 = load i8, i8* %119
%121 = tail call signext i8 @toupper(i8 signext %120)
%122 = load i8, i8* %72
%123 = tail call signext i8 @toupper(i8 signext %122)
%124 = add i8 %121, -65
%125 = tail call i8 @llvm.fshl.i8(i8 %124, i8 %124, i8 7)
switch i8 %125, label %129 [
i8 10, label %126
i8 7, label %126
i8 4, label %126
i8 2, label %126
i8 0, label %126
]
126: ; preds = %118, %118, %118, %118, %118
%127 = add i8 %123, -65
%128 = tail call i8 @llvm.fshl.i8(i8 %127, i8 %127, i8 7)
switch i8 %128, label %129 [
i8 10, label %130
i8 7, label %130
i8 4, label %130
i8 2, label %130
i8 0, label %130
]
129: ; preds = %126, %118
store i8 %123, i8* %69
br label %140
130: ; preds = %126, %126, %126, %126, %126
store i8 72, i8* %69
br label %140
131: ; preds = %67
%132 = load i8, i8* %72
%133 = tail call signext i8 @toupper(i8 signext %132)
%134 = add i8 %133, -65
%135 = tail call i8 @llvm.fshl.i8(i8 %134, i8 %134, i8 7)
switch i8 %135, label %137 [
i8 10, label %136
i8 7, label %136
i8 4, label %136
i8 2, label %136
i8 0, label %136
]
136: ; preds = %131, %131, %131, %131, %131
store i8 %133, i8* %69
br label %140
137: ; preds = %131
store i8 87, i8* %69
br label %140
138: ; preds = %67
%139 = tail call signext i8 @toupper(i8 signext %68)
store i8 %139, i8* %69
br label %140
140: ; preds = %136, %137, %129, %130, %114, %117, %103, %108, %91, %92, %138, %85, %84, %83, %82, %79
%141 = phi i64 [ %71, %138 ], [ %71, %136 ], [ %71, %137 ], [ %71, %130 ], [ %71, %129 ], [ %115, %114 ], [ %71, %117 ], [ %106, %103 ], [ %71, %108 ], [ %71, %91 ], [ %71, %92 ], [ %71, %85 ], [ %71, %84 ], [ %71, %83 ], [ %71, %82 ], [ %80, %79 ]
%142 = getelementptr inbounds i8, i8* %13, i64 %141
%143 = load i8, i8* %142
%144 = getelementptr inbounds i8, i8* %142, i64 -1
%145 = load i8, i8* %144
%146 = icmp ne i8 %143, %145
%147 = icmp eq i64 %141, 1
%148 = select i1 %146, i1 true, i1 %147
%149 = zext i1 %148 to i64
%150 = add nsw i64 %141, %149
%151 = getelementptr inbounds i8, i8* %70, i64 1
%152 = getelementptr inbounds i8, i8* %13, i64 %150
%153 = load i8, i8* %151
%154 = tail call signext i8 @toupper(i8 signext %153)
%155 = and i8 %154, -33
%156 = icmp eq i8 %155, 0
br i1 %156, label %157, label %67
157: ; preds = %140, %58
%158 = phi i8* [ %62, %58 ], [ %152, %140 ]
store i8 0, i8* %158
%159 = getelementptr inbounds i8, i8* %158, i64 -1
%160 = load i8, i8* %159
switch i8 %160, label %167 [
i8 83, label %161
i8 89, label %162
]
161: ; preds = %157
store i8 0, i8* %159
br label %167
162: ; preds = %157
%163 = getelementptr inbounds i8, i8* %158, i64 -2
%164 = load i8, i8* %163
%165 = icmp eq i8 %164, 65
br i1 %165, label %166, label %167
166: ; preds = %162
store i8 0, i8* %159
store i8 89, i8* %163
br label %167
167: ; preds = %157, %166, %162, %161
%168 = phi i8* [ %159, %161 ], [ %163, %166 ], [ %158, %162 ], [ %158, %157 ]
%169 = getelementptr inbounds i8, i8* %168, i64 -1
%170 = load i8, i8* %169
%171 = icmp eq i8 %170, 65
br i1 %171, label %172, label %173
172: ; preds = %167
store i8 0, i8* %169
br label %173
173: ; preds = %167, %172, %12, %1, %10
%174 = phi i8* [ %11, %10 ], [ null, %1 ], [ null, %12 ], [ %13, %172 ], [ %13, %167 ]
ret i8* %174
}