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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ printf(char *, ...);
int main() {
  printf("");
  {
    char *p,
        s[999] = "int main(){ "
                 "printf(~~);{char*p,s[999]=~%s"
                 "~,*q=s,c;for(p=62**~~+q;q<s+435;"
                 "c=q-s>*~s~||c>8?*p++=c-35?*~}"
                 "~<c?34:c:92:0,p[*~~]=0)c=*q++;*p="
                 "2+*~~;printf(s+62**~~,s);}"
                 "return(*~#0_HH_ee_ll_ll_oo_,,_ "
                 " _ww_oo_rr_ll_dd_!!#n~); }",
        *q = s, c;
    for (p = 62 * *"" + q;
         q<s + 435; c = q - s> * "s" || c > 8
             ? *p++ = c - 35 ? *"}" < c ? 34 : c : 92
             : 0,
        p[*""] = 0)
      c = *q++;
    *p = 2 + *"";
    printf(s + 62 * *"", s);
  }
  return (*"\0_HH_ee_ll_ll_oo_,,_  "
           "_ww_oo_rr_ll_dd_!!\n");
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x420,%rsp
movl   $0x0,-0x4(%rbp)
lea    0xedd(%rip),%rdi
mov    $0x0,%al
call   1030 <printf@plt>
lea    -0x400(%rbp),%rdi
lea    0xee2(%rip),%rsi
mov    $0x3e7,%edx
call   1040 <memcpy@plt>
lea    -0x400(%rbp),%rax
mov    %rax,-0x408(%rbp)
movsbl 0xe95(%rip),%eax
imul   $0x3e,%eax,%ecx
mov    -0x408(%rbp),%rax
movslq %ecx,%rcx
add    %rcx,%rax
mov    %rax,-0x10(%rbp)
mov    -0x408(%rbp),%rax
lea    -0x400(%rbp),%rcx
add    $0x1b3,%rcx
cmp    %rcx,%rax
jae    12a8 <main+0x188>
mov    -0x408(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x408(%rbp)
mov    (%rax),%al
mov    %al,-0x409(%rbp)
mov    -0x408(%rbp),%rax
lea    -0x400(%rbp),%rcx
sub    %rcx,%rax
movsbq 0xe2b(%rip),%rcx
cmp    %rcx,%rax
jg     11ee <main+0xce>
movsbl -0x409(%rbp),%eax
cmp    $0x8,%eax
jle    127a <main+0x15a>
movsbl -0x409(%rbp),%eax
sub    $0x23,%eax
cmp    $0x0,%eax
je     1245 <main+0x125>
movsbl 0xe0f(%rip),%eax
movsbl -0x409(%rbp),%ecx
cmp    %ecx,%eax
jge    1227 <main+0x107>
mov    $0x22,%eax
mov    %eax,-0x410(%rbp)
jmp    1234 <main+0x114>
movsbl -0x409(%rbp),%eax
mov    %eax,-0x410(%rbp)
mov    -0x410(%rbp),%eax
mov    %eax,-0x414(%rbp)
jmp    1255 <main+0x135>
mov    $0x5c,%eax
mov    %eax,-0x414(%rbp)
jmp    1255 <main+0x135>
mov    -0x414(%rbp),%eax
mov    -0x10(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x10(%rbp)
mov    %al,(%rcx)
movsbl %al,%eax
mov    %eax,-0x418(%rbp)
jmp    1287 <main+0x167>
xor    %eax,%eax
mov    %eax,-0x418(%rbp)
jmp    1287 <main+0x167>
mov    -0x418(%rbp),%eax
mov    %al,-0x409(%rbp)
mov    -0x10(%rbp),%rax
movsbq 0xd65(%rip),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1181 <main+0x61>
movsbl 0xd54(%rip),%eax
add    $0x2,%eax
mov    %al,%cl
mov    -0x10(%rbp),%rax
mov    %cl,(%rax)
lea    -0x400(%rbp),%rdi
movsbl 0xd3e(%rip),%eax
imul   $0x3e,%eax,%eax
cltq
add    %rax,%rdi
lea    -0x400(%rbp),%rsi
mov    $0x0,%al
call   1030 <printf@plt>
movsbl 0x1132(%rip),%eax
add    $0x420,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
sub    $0x3e8,%rsp
lea    0xed2(%rip),%rsi
mov    %rsp,%rdi
mov    $0x3e7,%edx
call   1040 <memcpy@plt>
lea    0x1f0(%rsp),%rdi
mov    $0x69,%cl
mov    $0x1,%eax
lea    0x1b3(%rsp),%r10
mov    $0x22,%r8d
mov    $0x5c,%r9d
mov    %rdi,%rdx
cmp    $0x73,%rax
jg     1175 <main+0x55>
nopw   0x0(%rax,%rax,1)
cmp    $0x9,%cl
jl     118d <main+0x6d>
cmp    $0x7e,%cl
movzbl %cl,%esi
cmovge %r8d,%esi
cmp    $0x23,%cl
cmove  %r9d,%esi
mov    %sil,(%rdx)
add    $0x1,%rdx
lea    (%rsp,%rax,1),%rcx
movb   $0x0,0x8(%rdx)
cmp    %r10,%rcx
jae    11a9 <main+0x89>
mov    (%rsp,%rax,1),%cl
add    $0x1,%rax
cmp    $0x73,%rax
jle    1170 <main+0x50>
jmp    1175 <main+0x55>
movb   $0xa,(%rdx)
mov    %rsp,%rsi
xor    %eax,%eax
call   1030 <printf@plt>
xor    %eax,%eax
add    $0x3e8,%rsp
ret

LLVM IR (-O0):
@.str = [1 x i8] zeroinitializer
@__const.main.s = [999 x i8] c"i\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08nt main(){ printf(~~)\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08;{char*p,s[999]=~%s\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~,*q=s,c;for(p=62**~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~+q;q<s+435;c=q-s>*~s\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~||c>8?*p++=c-35?*~}\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~<c?34:c:92:0,p[*~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~]=0)c=*q++;*p=2+*~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~;printf(s+62**~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~,s);}return(*~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08_\08H\08H_\08e\08e_\08l\08l_\08l\08l_\08o\08o_\08,\08,_\08 \08 _\08w\08w_\08o\08o_\08r\08r_\08l\08l_\08d\08d_\08!\08!#n~); }\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
@.str.1 = [21 x i8] c"\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\00"
@.str.2 = [23 x i8] c"s\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\00"
@.str.3 = [22 x i8] c"}\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\00"
@.str.4 = [19 x i8] c"\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\00"
@.str.5 = [20 x i8] c"\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\00"
@.str.6 = [17 x i8] c"\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\00"
@.str.7 = [84 x i8] c"\00\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08_\08H\08H_\08e\08e_\08l\08l_\08l\08l_\08o\08o_\08,\08,_\08 \08 _\08w\08w_\08o\08o_\08r\08r_\08l\08l_\08d\08d_\08!\08!\0A\00"
define i32 @main() {
%1 = alloca i32
%2 = alloca i8*
%3 = alloca [999 x i8]
%4 = alloca i8*
%5 = alloca i8
store i32 0, i32* %1
%6 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([1 x i8], [1 x i8]* @.str, i64 0, i64 0))
%7 = bitcast [999 x i8]* %3 to i8*
%8 = getelementptr inbounds [999 x i8], [999 x i8]* %3, i64 0, i64 0
store i8* %8, i8** %4
%9 = load i8, i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.1, i64 0, i64 0)
%10 = sext i8 %9 to i32
%11 = mul nsw i32 62, %10
%12 = load i8*, i8** %4
%13 = sext i32 %11 to i64
%14 = getelementptr inbounds i8, i8* %12, i64 %13
store i8* %14, i8** %2
br label %15
15: ; preds = %62, %0
%16 = load i8*, i8** %4
%17 = getelementptr inbounds [999 x i8], [999 x i8]* %3, i64 0, i64 0
%18 = getelementptr inbounds i8, i8* %17, i64 435
%19 = icmp ult i8* %16, %18
br i1 %19, label %20, label %69
20: ; preds = %15
%21 = load i8*, i8** %4
%22 = getelementptr inbounds i8, i8* %21, i32 1
store i8* %22, i8** %4
%23 = load i8, i8* %21
store i8 %23, i8* %5
br label %24
24: ; preds = %20
%25 = load i8*, i8** %4
%26 = getelementptr inbounds [999 x i8], [999 x i8]* %3, i64 0, i64 0
%27 = ptrtoint i8* %25 to i64
%28 = ptrtoint i8* %26 to i64
%29 = sub i64 %27, %28
%30 = load i8, i8* getelementptr inbounds ([23 x i8], [23 x i8]* @.str.2, i64 0, i64 0)
%31 = sext i8 %30 to i64
%32 = icmp sgt i64 %29, %31
br i1 %32, label %37, label %33
33: ; preds = %24
%34 = load i8, i8* %5
%35 = sext i8 %34 to i32
%36 = icmp sgt i32 %35, 8
br i1 %36, label %37, label %61
37: ; preds = %33, %24
%38 = load i8, i8* %5
%39 = sext i8 %38 to i32
%40 = sub nsw i32 %39, 35
%41 = icmp ne i32 %40, 0
br i1 %41, label %42, label %54
42: ; preds = %37
%43 = load i8, i8* getelementptr inbounds ([22 x i8], [22 x i8]* @.str.3, i64 0, i64 0)
%44 = sext i8 %43 to i32
%45 = load i8, i8* %5
%46 = sext i8 %45 to i32
%47 = icmp slt i32 %44, %46
br i1 %47, label %48, label %49
48: ; preds = %42
br label %52
49: ; preds = %42
%50 = load i8, i8* %5
%51 = sext i8 %50 to i32
br label %52
52: ; preds = %49, %48
%53 = phi i32 [ 34, %48 ], [ %51, %49 ]
br label %55
54: ; preds = %37
br label %55
55: ; preds = %54, %52
%56 = phi i32 [ %53, %52 ], [ 92, %54 ]
%57 = trunc i32 %56 to i8
%58 = load i8*, i8** %2
%59 = getelementptr inbounds i8, i8* %58, i32 1
store i8* %59, i8** %2
store i8 %57, i8* %58
%60 = sext i8 %57 to i32
br label %62
61: ; preds = %33
br label %62
62: ; preds = %61, %55
%63 = phi i32 [ %60, %55 ], [ 0, %61 ]
%64 = trunc i32 %63 to i8
store i8 %64, i8* %5
%65 = load i8*, i8** %2
%66 = load i8, i8* getelementptr inbounds ([19 x i8], [19 x i8]* @.str.4, i64 0, i64 0)
%67 = sext i8 %66 to i64
%68 = getelementptr inbounds i8, i8* %65, i64 %67
store i8 0, i8* %68
br label %15
69: ; preds = %15
%70 = load i8, i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.5, i64 0, i64 0)
%71 = sext i8 %70 to i32
%72 = add nsw i32 2, %71
%73 = trunc i32 %72 to i8
%74 = load i8*, i8** %2
store i8 %73, i8* %74
%75 = getelementptr inbounds [999 x i8], [999 x i8]* %3, i64 0, i64 0
%76 = load i8, i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.6, i64 0, i64 0)
%77 = sext i8 %76 to i32
%78 = mul nsw i32 62, %77
%79 = sext i32 %78 to i64
%80 = getelementptr inbounds i8, i8* %75, i64 %79
%81 = getelementptr inbounds [999 x i8], [999 x i8]* %3, i64 0, i64 0
%82 = call i32 (i8*, ...) @printf(i8* %80, i8* %81)
%83 = load i8, i8* getelementptr inbounds ([84 x i8], [84 x i8]* @.str.7, i64 0, i64 0)
%84 = sext i8 %83 to i32
ret i32 %84
}

LLVM IR (-O2):
@__const.main.s = [999 x i8] c"i\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08nt main(){ printf(~~)\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08;{char*p,s[999]=~%s\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~,*q=s,c;for(p=62**~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~+q;q<s+435;c=q-s>*~s\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~||c>8?*p++=c-35?*~}\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~<c?34:c:92:0,p[*~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~]=0)c=*q++;*p=2+*~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~;printf(s+62**~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08~,s);}return(*~\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08_\08H\08H_\08e\08e_\08l\08l_\08l\08l_\08o\08o_\08,\08,_\08 \08 _\08w\08w_\08o\08o_\08r\08r_\08l\08l_\08d\08d_\08!\08!#n~); }\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\08\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00"
define i32 @main() {
%1 = alloca [999 x i8]
%2 = getelementptr inbounds [999 x i8], [999 x i8]* %1, i64 0, i64 0
%3 = getelementptr inbounds [999 x i8], [999 x i8]* %1, i64 0, i64 496
%4 = getelementptr inbounds [999 x i8], [999 x i8]* %1, i64 0, i64 435
%5 = ptrtoint [999 x i8]* %1 to i64
br label %6
6: ; preds = %26, %0
%7 = phi i8 [ 105, %0 ], [ %27, %26 ]
%8 = phi i8* [ %2, %0 ], [ %10, %26 ]
%9 = phi i8* [ %3, %0 ], [ %23, %26 ]
%10 = getelementptr inbounds i8, i8* %8, i64 1
%11 = ptrtoint i8* %10 to i64
%12 = sub i64 %11, %5
%13 = icmp sgt i64 %12, 115
%14 = icmp sgt i8 %7, 8
%15 = select i1 %13, i1 true, i1 %14
br i1 %15, label %16, label %22
16: ; preds = %6
%17 = icmp eq i8 %7, 35
%18 = icmp sgt i8 %7, 125
%19 = select i1 %18, i8 34, i8 %7
%20 = select i1 %17, i8 92, i8 %19
%21 = getelementptr inbounds i8, i8* %9, i64 1
store i8 %20, i8* %9
br label %22
22: ; preds = %6, %16
%23 = phi i8* [ %21, %16 ], [ %9, %6 ]
%24 = getelementptr inbounds i8, i8* %23, i64 8
store i8 0, i8* %24
%25 = icmp ult i8* %10, %4
br i1 %25, label %26, label %28
26: ; preds = %22
%27 = load i8, i8* %10
br label %6
28: ; preds = %22
store i8 10, i8* %23
%29 = call i32 (i8*, ...) @printf(i8* %3, i8* %2)
ret i32 0
}