#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 SHRT_MAX;
int /*<<< orphan*/ exit(int /*<<< orphan*/);
char getchar();
int /*<<< orphan*/ myCreateProcess(char *);
int /*<<< orphan*/ printf(char *, ...);
int strlen(char *);
int /*<<< orphan*/ system(char *);
void main() {
  char c;
  char input[SHRT_MAX], prompt[SHRT_MAX];
  int lock, sprompt, i;
  prompt[0] = '>';
  while (1) {
    printf("%s ", prompt);
    for (i = 0; i < SHRT_MAX; i++) {
      input[i] = '\0';
    }
    i = 0;
    do {
      c = getchar();
      input[i++] = c;
    } while (c != '\n');
    if (input[0] == '\n') {
      system("clear");
    } else {
      if ((input[0] == 'Q' || input[0] == 'q') &&
          (input[1] == '\n' || input[1] == '\0')) {
        exit(0);
      } else if ((input[0] == 'Q' || input[0] == 'q') &&
                 (input[1] == 'U' || input[1] == 'u') &&
                 (input[2] == 'I' || input[2] == 'i') &&
                 (input[3] == 'T' || input[3] == 't') && (input[4] == '\n')) {
        exit(0);
      }
      if ((input[0] == 't') && (input[1] == 'l') && (input[2] == 'o') &&
          (input[3] == 'c') && (input[4] == 'k') && (input[5] == '\n')) {
        while (1) {
          for (i = 0; i < SHRT_MAX; i++) {
            input[i] = '\0';
          }
          lock = 0;
          printf("unlock: ");
          i = 0;
          do {
            c = getchar();
            input[i++] = c;
          } while (c != '\n');
          if ((input[0] == "NOTSOSECRET"[0]) &&
              (input[1] == "NOTSOSECRET"[1]) &&
              (input[2] == "NOTSOSECRET"[2]) &&
              (input[3] == "NOTSOSECRET"[3]) &&
              (input[4] == "NOTSOSECRET"[4]) &&
              (input[5] == "NOTSOSECRET"[5]) &&
              (input[6] == "NOTSOSECRET"[6]) &&
              (input[7] == "NOTSOSECRET"[7]) &&
              (input[8] == "NOTSOSECRET"[8]) &&
              (input[9] == "NOTSOSECRET"[9]) &&
              (input[10] == "NOTSOSECRET"[10]) && (input[11] == '\n')) {
            lock = 1;
          }
          if (lock == 1) {
            break;
          }
        }
      }
      if ((input[0] == 'c') && (input[1] == 'p') && (input[2] == 'r') &&
          (input[3] == 'o') && (input[4] == 'm') && (input[5] == 'p') &&
          (input[6] == 't')) {
        int j = 0;
        if (input[7] == ' ') {
          i = 8;
        } else {
          i = 7;
        }
        for (i; i < SHRT_MAX; i++) {
          prompt[j] = input[i];
          if (prompt[j] == '\n') {
            prompt[j] = '\0';
          }
          j++;
        }
        sprompt = 1;
      } else if ((input[0] == 'd') && (input[1] == 'p') && (input[2] == 'r') &&
                 (input[3] == 'o') && (input[4] == 'm') && (input[5] == 'p') &&
                 (input[6] == 't')) {
        prompt[0] = '>';
        for (i = 1; i < SHRT_MAX; i++) {
          prompt[i] = '\0';
        }
        sprompt = 1;
      }
      int len;
      if (lock == 0 && sprompt == 0) {
        len = strlen(input);
        input[len - 1] = '\0';
        myCreateProcess(input);
      }
      lock = 0;
      sprompt = 0;
    }
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x50,%rsp
mov    0x2e71(%rip),%rax
mov    (%rax),%ecx
mov    %rsp,%rdx
mov    %rdx,-0x10(%rbp)
mov    %rcx,%rsi
add    $0xf,%rsi
and    $0xfffffffffffffff0,%rsi
mov    %rsp,%rdx
sub    %rsi,%rdx
mov    %rdx,-0x48(%rbp)
mov    %rdx,%rsp
mov    %rcx,-0x18(%rbp)
mov    (%rax),%eax
mov    %eax,%ecx
mov    %rcx,%rdx
add    $0xf,%rdx
and    $0xfffffffffffffff0,%rdx
mov    %rsp,%rax
sub    %rdx,%rax
mov    %rax,-0x40(%rbp)
mov    %rax,%rsp
mov    %rcx,-0x20(%rbp)
movb   $0x3e,(%rax)
jmp    11bc <main+0x5c>
mov    -0x40(%rbp),%rsi
lea    0xe39(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    0x2e01(%rip),%rcx
cmp    (%rcx),%eax
jge    1201 <main+0xa1>
mov    -0x48(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    11d5 <main+0x75>
movl   $0x0,-0x2c(%rbp)
mov    $0x0,%al
call   1060 <getchar@plt>
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %cl,-0x1(%rbp)
mov    -0x1(%rbp),%dl
mov    -0x2c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x2c(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
movsbl -0x1(%rbp),%eax
cmp    $0xa,%eax
jne    1208 <main+0xa8>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    125a <main+0xfa>
lea    0xdb4(%rip),%rdi
call   1040 <system@plt>
jmp    176a <main+0x60a>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x51,%eax
je     127a <main+0x11a>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x71,%eax
jne    12a3 <main+0x143>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0xa,%eax
je     129c <main+0x13c>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x0,%eax
jne    12a3 <main+0x143>
xor    %edi,%edi
call   1080 <exit@plt>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x51,%eax
je     12c3 <main+0x163>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x71,%eax
jne    1341 <main+0x1e1>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x55,%eax
je     12e5 <main+0x185>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x75,%eax
jne    1341 <main+0x1e1>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x49,%eax
je     1307 <main+0x1a7>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x69,%eax
jne    1341 <main+0x1e1>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x54,%eax
je     1329 <main+0x1c9>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x74,%eax
jne    1341 <main+0x1e1>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0xa,%eax
jne    1341 <main+0x1e1>
xor    %edi,%edi
call   1080 <exit@plt>
jmp    1346 <main+0x1e6>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x74,%eax
jne    1562 <main+0x402>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x6c,%eax
jne    1562 <main+0x402>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x6f,%eax
jne    1562 <main+0x402>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x63,%eax
jne    1562 <main+0x402>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x6b,%eax
jne    1562 <main+0x402>
mov    -0x48(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0xa,%eax
jne    1562 <main+0x402>
jmp    13b0 <main+0x250>
jmp    13b5 <main+0x255>
movl   $0x0,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    0x2c1a(%rip),%rcx
cmp    (%rcx),%eax
jge    13e8 <main+0x288>
mov    -0x48(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    13bc <main+0x25c>
movl   $0x0,-0x24(%rbp)
lea    0xc14(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x2c(%rbp)
mov    $0x0,%al
call   1060 <getchar@plt>
mov    %al,%cl
mov    -0x48(%rbp),%rax
mov    %cl,-0x1(%rbp)
mov    -0x1(%rbp),%dl
mov    -0x2c(%rbp),%ecx
mov    %ecx,%esi
add    $0x1,%esi
mov    %esi,-0x2c(%rbp)
movslq %ecx,%rcx
mov    %dl,(%rax,%rcx,1)
movsbl -0x1(%rbp),%eax
cmp    $0xa,%eax
jne    1404 <main+0x2a4>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xbd0(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
movsbl 0xbba(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
movsbl 0xba4(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
movsbl 0xb8e(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
movsbl 0xb78(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0x5(%rax),%eax
movsbl 0xb62(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0x6(%rax),%eax
movsbl 0xb4c(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0x7(%rax),%eax
movsbl 0xb36(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0x8(%rax),%eax
movsbl 0xb20(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0x9(%rax),%eax
movsbl 0xb0a(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0xa(%rax),%eax
movsbl 0xaf4(%rip),%ecx
cmp    %ecx,%eax
jne    1549 <main+0x3e9>
mov    -0x48(%rbp),%rax
movsbl 0xb(%rax),%eax
cmp    $0xa,%eax
jne    1549 <main+0x3e9>
movl   $0x1,-0x24(%rbp)
cmpl   $0x1,-0x24(%rbp)
jne    1558 <main+0x3f8>
jmp    155d <main+0x3fd>
jmp    13b0 <main+0x250>
jmp    1562 <main+0x402>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x63,%eax
jne    166b <main+0x50b>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x70,%eax
jne    166b <main+0x50b>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x72,%eax
jne    166b <main+0x50b>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x6f,%eax
jne    166b <main+0x50b>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x6d,%eax
jne    166b <main+0x50b>
mov    -0x48(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x70,%eax
jne    166b <main+0x50b>
mov    -0x48(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x74,%eax
jne    166b <main+0x50b>
mov    -0x48(%rbp),%rax
movl   $0x0,-0x30(%rbp)
movsbl 0x7(%rax),%eax
cmp    $0x20,%eax
jne    15fc <main+0x49c>
movl   $0x8,-0x2c(%rbp)
jmp    1603 <main+0x4a3>
movl   $0x7,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    0x29d3(%rip),%rcx
cmp    (%rcx),%eax
jge    165f <main+0x4ff>
mov    -0x40(%rbp),%rax
mov    -0x48(%rbp),%rcx
movslq -0x2c(%rbp),%rdx
mov    (%rcx,%rdx,1),%dl
movslq -0x30(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
movslq -0x30(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0xa,%eax
jne    1648 <main+0x4e8>
mov    -0x40(%rbp),%rax
movslq -0x30(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x30(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x30(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    1603 <main+0x4a3>
movl   $0x1,-0x28(%rbp)
jmp    1727 <main+0x5c7>
mov    -0x48(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x64,%eax
jne    1722 <main+0x5c2>
mov    -0x48(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x70,%eax
jne    1722 <main+0x5c2>
mov    -0x48(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x72,%eax
jne    1722 <main+0x5c2>
mov    -0x48(%rbp),%rax
movsbl 0x3(%rax),%eax
cmp    $0x6f,%eax
jne    1722 <main+0x5c2>
mov    -0x48(%rbp),%rax
movsbl 0x4(%rax),%eax
cmp    $0x6d,%eax
jne    1722 <main+0x5c2>
mov    -0x48(%rbp),%rax
movsbl 0x5(%rax),%eax
cmp    $0x70,%eax
jne    1722 <main+0x5c2>
mov    -0x48(%rbp),%rax
movsbl 0x6(%rax),%eax
cmp    $0x74,%eax
jne    1722 <main+0x5c2>
mov    -0x40(%rbp),%rax
movb   $0x3e,(%rax)
movl   $0x1,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
mov    0x28e7(%rip),%rcx
cmp    (%rcx),%eax
jge    171b <main+0x5bb>
mov    -0x40(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    16ef <main+0x58f>
movl   $0x1,-0x28(%rbp)
jmp    1727 <main+0x5c7>
cmpl   $0x0,-0x24(%rbp)
jne    175c <main+0x5fc>
cmpl   $0x0,-0x28(%rbp)
jne    175c <main+0x5fc>
mov    -0x48(%rbp),%rdi
call   1030 <strlen@plt>
mov    -0x48(%rbp),%rdi
mov    %eax,-0x34(%rbp)
mov    -0x34(%rbp),%eax
sub    $0x1,%eax
cltq
movb   $0x0,(%rdi,%rax,1)
call   1070 <myCreateProcess@plt>
movl   $0x0,-0x24(%rbp)
movl   $0x0,-0x28(%rbp)
jmp    11b7 <main+0x57>

x86 assembly (clang, -O2):
<main>:
push   %rbp
mov    %rsp,%rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x18,%rsp
mov    0x2e58(%rip),%r13
mov    0x0(%r13),%eax
mov    %rsp,%r12
add    $0xf,%rax
and    $0xfffffffffffffff0,%rax
sub    %rax,%r12
mov    %r12,%rsp
mov    %rsp,%r14
sub    %rax,%r14
mov    %r14,%rsp
movb   $0x3e,(%r14)
lea    0x1(%r14),%rax
mov    %rax,-0x30(%rbp)
lea    0x1(%r12),%rax
mov    %rax,-0x38(%rbp)
lea    0xf7c(%rip),%r15
jmp    11e8 <main+0x78>
cs nopw 0x0(%rax,%rax,1)
xchg   %ax,%ax
mov    %r12,%rdi
call   1030 <strlen@plt>
cltq
movb   $0x0,-0x1(%rax,%r12,1)
mov    %r12,%rdi
call   1080 <myCreateProcess@plt>
lea    0xf45(%rip),%rdi
mov    %r14,%rsi
xor    %eax,%eax
call   1050 <printf@plt>
mov    0x0(%r13),%edx
test   %edx,%edx
jle    120b <main+0x9b>
mov    %r12,%rdi
xor    %esi,%esi
call   1060 <memset@plt>
mov    %r12,%rbx
xchg   %ax,%ax
xor    %eax,%eax
call   1070 <getchar@plt>
mov    %al,(%rbx)
add    $0x1,%rbx
cmp    $0xa,%al
jne    1210 <main+0xa0>
mov    (%r12),%sil
lea    -0x51(%rsi),%ecx
cmp    $0x23,%cl
ja     13b0 <main+0x240>
movzbl %cl,%edx
lea    0xde5(%rip),%rdi
movslq (%rdi,%rdx,4),%rax
add    %rdi,%rax
jmp    *%rax
mov    0x1(%r12),%al
cmp    $0xa,%al
je     16a1 <main+0x531>
test   %al,%al
je     16a1 <main+0x531>
cmp    $0x20,%cl
ja     11d0 <main+0x60>
lea    0xe47(%rip),%rdi
movslq (%rdi,%rdx,4),%rcx
add    %rdi,%rcx
jmp    *%rcx
or     $0x20,%al
cmp    $0x75,%al
jne    129a <main+0x12a>
mov    0x2(%r12),%al
or     $0x20,%al
cmp    $0x69,%al
jne    129a <main+0x12a>
mov    0x3(%r12),%al
or     $0x20,%al
cmp    $0x74,%al
jne    129a <main+0x12a>
cmpb   $0xa,0x4(%r12)
je     16a1 <main+0x531>
cmp    $0x64,%sil
je     1340 <main+0x1d0>
cmp    $0x63,%sil
jne    11d0 <main+0x60>
xchg   %ax,%ax
cmpb   $0x70,0x1(%r12)
jne    11d0 <main+0x60>
cmpb   $0x72,0x2(%r12)
jne    11d0 <main+0x60>
cmpb   $0x6f,0x3(%r12)
jne    11d0 <main+0x60>
cmpb   $0x6d,0x4(%r12)
jne    11d0 <main+0x60>
cmpb   $0x70,0x5(%r12)
jne    11d0 <main+0x60>
cmpb   $0x74,0x6(%r12)
jne    11d0 <main+0x60>
xor    %ecx,%ecx
cmpb   $0x20,0x7(%r12)
sete   %cl
add    $0x7,%ecx
mov    0x0(%r13),%r9d
sub    %ecx,%r9d
jle    11e8 <main+0x78>
mov    %ecx,%edx
cmp    $0x8,%r9d
jae    14ad <main+0x33d>
mov    %rdx,%rsi
xor    %ecx,%ecx
test   $0x1,%r9b
je     160f <main+0x49f>
jmp    1636 <main+0x4c6>
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
cmpb   $0x70,0x1(%r12)
jne    11d0 <main+0x60>
cmpb   $0x72,0x2(%r12)
jne    11d0 <main+0x60>
cmpb   $0x6f,0x3(%r12)
jne    11d0 <main+0x60>
cmpb   $0x6d,0x4(%r12)
jne    11d0 <main+0x60>
cmpb   $0x70,0x5(%r12)
jne    11d0 <main+0x60>
cmpb   $0x74,0x6(%r12)
jne    11d0 <main+0x60>
movb   $0x3e,(%r14)
mov    0x0(%r13),%edx
cmp    $0x2,%edx
jl     11e8 <main+0x78>
add    $0xffffffff,%edx
mov    -0x30(%rbp),%rdi
xor    %esi,%esi
call   1060 <memset@plt>
jmp    11e8 <main+0x78>
nopl   0x0(%rax)
cmp    $0xa,%sil
jne    11d0 <main+0x60>
lea    0xd77(%rip),%rdi
call   1040 <system@plt>
jmp    11e8 <main+0x78>
cmpb   $0x6c,0x1(%r12)
jne    11d0 <main+0x60>
cmpb   $0x6f,0x2(%r12)
jne    11d0 <main+0x60>
cmpb   $0x63,0x3(%r12)
jne    11d0 <main+0x60>
cmpb   $0x6b,0x4(%r12)
jne    11d0 <main+0x60>
cmpb   $0xa,0x5(%r12)
jne    11d0 <main+0x60>
nopw   0x0(%rax,%rax,1)
mov    0x0(%r13),%edx
test   %edx,%edx
jle    1422 <main+0x2b2>
mov    %r12,%rdi
xor    %esi,%esi
call   1060 <memset@plt>
mov    %r15,%rdi
xor    %eax,%eax
call   1050 <printf@plt>
mov    %r12,%rbx
nop
xor    %eax,%eax
call   1070 <getchar@plt>
mov    %al,(%rbx)
add    $0x1,%rbx
cmp    $0xa,%al
jne    1430 <main+0x2c0>
cmpb   $0x4e,(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x4f,0x1(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x54,0x2(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x53,0x3(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x4f,0x4(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x53,0x5(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x45,0x6(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x43,0x7(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x52,0x8(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x45,0x9(%r12)
jne    1410 <main+0x2a0>
cmpb   $0x54,0xa(%r12)
jne    1410 <main+0x2a0>
cmpb   $0xa,0xb(%r12)
jne    1410 <main+0x2a0>
jmp    11e8 <main+0x78>
cmp    $0x20,%r9d
jae    14ba <main+0x34a>
xor    %ecx,%ecx
jmp    15b9 <main+0x449>
mov    %r9d,%ecx
and    $0xffffffe0,%ecx
lea    -0x20(%rcx),%rsi
mov    %rsi,%r8
shr    $0x5,%r8
add    $0x1,%r8
test   %rsi,%rsi
je     1614 <main+0x4a4>
mov    %r8,%rdi
and    $0xfffffffffffffffe,%rdi
xor    %ebx,%ebx
movdqa 0xb17(%rip),%xmm3
nopl   0x0(%rax)
mov    %rbx,%rsi
or     %rdx,%rsi
movdqu (%r12,%rsi,1),%xmm0
movdqu 0x10(%r12,%rsi,1),%xmm1
movdqa %xmm0,%xmm2
pcmpeqb %xmm3,%xmm2
pandn  %xmm0,%xmm2
movdqa %xmm1,%xmm0
pcmpeqb %xmm3,%xmm0
pandn  %xmm1,%xmm0
movdqa %xmm2,(%r14,%rbx,1)
movdqa %xmm0,0x10(%r14,%rbx,1)
lea    0x20(%rbx),%rsi
or     %rdx,%rsi
movdqu (%r12,%rsi,1),%xmm0
movdqu 0x10(%r12,%rsi,1),%xmm1
movdqa %xmm0,%xmm2
pcmpeqb %xmm3,%xmm2
pandn  %xmm0,%xmm2
movdqa %xmm1,%xmm0
pcmpeqb %xmm3,%xmm0
pandn  %xmm1,%xmm0
movdqa %xmm2,0x20(%r14,%rbx,1)
movdqa %xmm0,0x30(%r14,%rbx,1)
add    $0x40,%rbx
add    $0xfffffffffffffffe,%rdi
jne    14f0 <main+0x380>
test   $0x1,%r8b
je     15aa <main+0x43a>
mov    %rbx,%rsi
or     %rdx,%rsi
movdqu (%r12,%rsi,1),%xmm0
movdqu 0x10(%r12,%rsi,1),%xmm1
movdqa %xmm0,%xmm2
pcmpeqb %xmm3,%xmm2
pandn  %xmm0,%xmm2
movdqa %xmm1,%xmm0
pcmpeqb %xmm3,%xmm0
pandn  %xmm1,%xmm0
movdqa %xmm2,(%r14,%rbx,1)
movdqa %xmm0,0x10(%r14,%rbx,1)
cmp    %r9,%rcx
je     11e8 <main+0x78>
test   $0x18,%r9b
je     162a <main+0x4ba>
mov    %rcx,%rdi
mov    %r9d,%ecx
and    $0xfffffff8,%ecx
lea    (%rcx,%rdx,1),%rsi
add    %r12,%rdx
movdqa 0xa3f(%rip),%xmm2
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
movq   (%rdx,%rdi,1),%xmm0
movdqa %xmm0,%xmm1
pcmpeqb %xmm2,%xmm1
pandn  %xmm0,%xmm1
movq   %xmm1,(%r14,%rdi,1)
add    $0x8,%rdi
cmp    %rdi,%rcx
jne    15e0 <main+0x470>
cmp    %r9,%rcx
je     11e8 <main+0x78>
test   $0x1,%r9b
jne    1636 <main+0x4c6>
mov    %rcx,%rdx
jmp    1655 <main+0x4e5>
xor    %ebx,%ebx
movdqa 0x9e2(%rip),%xmm3
test   $0x1,%r8b
jne    1572 <main+0x402>
jmp    15aa <main+0x43a>
or     %rcx,%rdx
mov    %rdx,%rsi
test   $0x1,%r9b
je     160f <main+0x49f>
movzbl (%r12,%rsi,1),%edx
cmp    $0xa,%dl
mov    $0x0,%edi
cmove  %edi,%edx
mov    %dl,(%r14,%rcx,1)
mov    %rcx,%rdx
or     $0x1,%rdx
add    $0x1,%rsi
not    %rcx
add    %r9,%rcx
je     11e8 <main+0x78>
add    -0x38(%rbp),%rsi
sub    %rdx,%r9
add    -0x30(%rbp),%rdx
xor    %ecx,%ecx
xchg   %ax,%ax
movzbl -0x1(%rsi,%rcx,1),%edi
cmp    $0xa,%dil
mov    $0x0,%eax
cmove  %eax,%edi
movzbl (%rsi,%rcx,1),%ebx
cmp    $0xa,%bl
cmove  %eax,%ebx
mov    %dil,-0x1(%rdx,%rcx,1)
mov    %bl,(%rdx,%rcx,1)
add    $0x2,%rcx
cmp    %rcx,%r9
jne    1670 <main+0x500>
jmp    11e8 <main+0x78>
xor    %edi,%edi
call   1090 <exit@plt>

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

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