void CleanupOutput(char *str) {
  char *s, *t;
  int period = 0;
  s = t = str;
  while (*s && *s != '}') {
    if (*s == '\n')
      *s = ' ';
    if ((*s == ' ' || *s == '\n') && (s[1] == ' ' || s[1] == '\n'))
      s++;
    else
      *t++ = *s++;
  }
  while (*s)
    *t++ = *s++;
  *t = 0;
  s = t = str;
  while (*s) {
    if (*s == '.') {
      period = 1;
      *t++ = *s++;
    } else if (*s == '-' && s[1] == '0' && s[2] == ' ') {
      s++;
    } else if (*s <= '9' && *s >= '0') {
      *t++ = *s++;
    } else if (*s == '\n' && (t > str && t[-1] == '\n')) {
      s++;
    } else if (period) {
      while (t > str && t[-1] == '0')
        t--;
      if (t > str && t[-1] == '.')
        t--;
      while (*s == ' ' && s[1] == ' ')
        s++;
      period = 0;
      *t++ = *s++;
    } else if (*s == ' ' && s[1] == ' ')
      s++;
    else {
      period = 0;
      *t++ = *s++;
    }
  }
  *t = 0;
  s = t = str;
  while (*s) {
    if (*s == '-' && s[1] == '0' && s[2] == ' ') {
      s++;
    } else
      *t++ = *s++;
  }
  *t = 0;
}


x86 assembly (clang, -O0):
<CleanupOutput>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
movl   $0x0,-0x1c(%rbp)
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x0,%ecx
mov    %al,-0x1d(%rbp)
je     1140 <CleanupOutput+0x40>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x7d,%eax
setne  %al
mov    %al,-0x1d(%rbp)
mov    -0x1d(%rbp),%al
test   $0x1,%al
jne    1150 <CleanupOutput+0x50>
jmp    11e1 <CleanupOutput+0xe1>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    1167 <CleanupOutput+0x67>
mov    -0x10(%rbp),%rax
movb   $0x20,(%rax)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
je     1187 <CleanupOutput+0x87>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    11ba <CleanupOutput+0xba>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x20,%eax
je     11a9 <CleanupOutput+0xa9>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0xa,%eax
jne    11ba <CleanupOutput+0xba>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    11dc <CleanupOutput+0xdc>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    111b <CleanupOutput+0x1b>
jmp    11e6 <CleanupOutput+0xe6>
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     121a <CleanupOutput+0x11a>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    11e6 <CleanupOutput+0xe6>
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     14b4 <CleanupOutput+0x3b4>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2e,%eax
jne    1278 <CleanupOutput+0x178>
movl   $0x1,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    14af <CleanupOutput+0x3af>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    12bb <CleanupOutput+0x1bb>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x30,%eax
jne    12bb <CleanupOutput+0x1bb>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x20,%eax
jne    12bb <CleanupOutput+0x1bb>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14aa <CleanupOutput+0x3aa>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x39,%eax
jg     1302 <CleanupOutput+0x202>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x30,%eax
jl     1302 <CleanupOutput+0x202>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    14a5 <CleanupOutput+0x3a5>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0xa,%eax
jne    1342 <CleanupOutput+0x242>
mov    -0x18(%rbp),%rax
cmp    -0x8(%rbp),%rax
jbe    1342 <CleanupOutput+0x242>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0xa,%eax
jne    1342 <CleanupOutput+0x242>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    14a0 <CleanupOutput+0x3a0>
cmpl   $0x0,-0x1c(%rbp)
je     143b <CleanupOutput+0x33b>
jmp    1351 <CleanupOutput+0x251>
mov    -0x18(%rbp),%rcx
xor    %eax,%eax
cmp    -0x8(%rbp),%rcx
mov    %al,-0x1e(%rbp)
jbe    1375 <CleanupOutput+0x275>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x30,%eax
sete   %al
mov    %al,-0x1e(%rbp)
mov    -0x1e(%rbp),%al
test   $0x1,%al
jne    1385 <CleanupOutput+0x285>
jmp    1396 <CleanupOutput+0x296>
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
jmp    1351 <CleanupOutput+0x251>
mov    -0x18(%rbp),%rax
cmp    -0x8(%rbp),%rax
jbe    13c1 <CleanupOutput+0x2c1>
mov    -0x18(%rbp),%rax
movsbl -0x1(%rax),%eax
cmp    $0x2e,%eax
jne    13c1 <CleanupOutput+0x2c1>
mov    -0x18(%rbp),%rax
add    $0xffffffffffffffff,%rax
mov    %rax,-0x18(%rbp)
jmp    13c6 <CleanupOutput+0x2c6>
mov    -0x10(%rbp),%rax
movsbl (%rax),%ecx
xor    %eax,%eax
cmp    $0x20,%ecx
mov    %al,-0x1f(%rbp)
jne    13ec <CleanupOutput+0x2ec>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x20,%eax
sete   %al
mov    %al,-0x1f(%rbp)
mov    -0x1f(%rbp),%al
test   $0x1,%al
jne    13fc <CleanupOutput+0x2fc>
jmp    140d <CleanupOutput+0x30d>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    13c6 <CleanupOutput+0x2c6>
movl   $0x0,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    149b <CleanupOutput+0x39b>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x20,%eax
jne    146d <CleanupOutput+0x36d>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x20,%eax
jne    146d <CleanupOutput+0x36d>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1496 <CleanupOutput+0x396>
movl   $0x0,-0x1c(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    149b <CleanupOutput+0x39b>
jmp    14a0 <CleanupOutput+0x3a0>
jmp    14a5 <CleanupOutput+0x3a5>
jmp    14aa <CleanupOutput+0x3aa>
jmp    14af <CleanupOutput+0x3af>
jmp    122d <CleanupOutput+0x12d>
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x8(%rbp),%rax
mov    %rax,-0x18(%rbp)
mov    %rax,-0x10(%rbp)
mov    -0x10(%rbp),%rax
cmpb   $0x0,(%rax)
je     153e <CleanupOutput+0x43e>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
cmp    $0x2d,%eax
jne    1517 <CleanupOutput+0x417>
mov    -0x10(%rbp),%rax
movsbl 0x1(%rax),%eax
cmp    $0x30,%eax
jne    1517 <CleanupOutput+0x417>
mov    -0x10(%rbp),%rax
movsbl 0x2(%rax),%eax
cmp    $0x20,%eax
jne    1517 <CleanupOutput+0x417>
mov    -0x10(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x10(%rbp)
jmp    1539 <CleanupOutput+0x439>
mov    -0x10(%rbp),%rax
mov    %rax,%rcx
add    $0x1,%rcx
mov    %rcx,-0x10(%rbp)
mov    (%rax),%cl
mov    -0x18(%rbp),%rax
mov    %rax,%rdx
add    $0x1,%rdx
mov    %rdx,-0x18(%rbp)
mov    %cl,(%rax)
jmp    14c7 <CleanupOutput+0x3c7>
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
pop    %rbp
ret

x86 assembly (clang, -O2):
<CleanupOutput>:
lea    0x1(%rdi),%rcx
mov    %rdi,%r8
jmp    1118 <CleanupOutput+0x18>
test   %dl,%dl
je     1163 <CleanupOutput+0x63>
mov    %dl,(%r8)
add    $0x1,%r8
add    $0x1,%rcx
movzbl -0x1(%rcx),%edx
cmp    $0x1f,%dl
jg     1130 <CleanupOutput+0x30>
cmp    $0xa,%dl
jne    1109 <CleanupOutput+0x9>
movb   $0x20,-0x1(%rcx)
jmp    1135 <CleanupOutput+0x35>
nopl   0x0(%rax)
cmp    $0x20,%dl
jne    1144 <CleanupOutput+0x44>
movzbl (%rcx),%eax
cmp    $0xa,%al
je     1114 <CleanupOutput+0x14>
mov    $0x20,%dl
cmp    $0x20,%al
je     1114 <CleanupOutput+0x14>
jmp    110d <CleanupOutput+0xd>
cmp    $0x7d,%dl
jne    110d <CleanupOutput+0xd>
xor    %esi,%esi
nopl   0x0(%rax,%rax,1)
mov    %dl,(%r8,%rsi,1)
movzbl (%rcx,%rsi,1),%edx
add    $0x1,%rsi
test   %dl,%dl
jne    1150 <CleanupOutput+0x50>
add    %rsi,%r8
movb   $0x0,(%r8)
xor    %r8d,%r8d
mov    %rdi,%r9
mov    %rdi,%rax
jmp    1197 <CleanupOutput+0x97>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
movb   $0x2e,(%rax)
add    $0x1,%rax
mov    $0x1,%r8d
mov    %r9,%rcx
add    $0x1,%rcx
mov    %rcx,%r9
mov    (%r9),%sil
cmp    $0x2d,%sil
je     11c0 <CleanupOutput+0xc0>
cmp    $0x2e,%sil
je     1180 <CleanupOutput+0x80>
test   %sil,%sil
je     1269 <CleanupOutput+0x169>
lea    -0x30(%rsi),%ecx
cmp    $0x9,%cl
ja     11d0 <CleanupOutput+0xd0>
mov    %sil,(%rax)
add    $0x1,%rax
jmp    118d <CleanupOutput+0x8d>
cmpb   $0x30,0x1(%r9)
jne    11f0 <CleanupOutput+0xf0>
cmpb   $0x20,0x2(%r9)
je     118d <CleanupOutput+0x8d>
jmp    11f0 <CleanupOutput+0xf0>
cmp    $0xa,%sil
jne    11f0 <CleanupOutput+0xf0>
cmp    %rdi,%rax
jbe    11f0 <CleanupOutput+0xf0>
cmpb   $0xa,-0x1(%rax)
je     118d <CleanupOutput+0x8d>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax,%rax,1)
test   %r8d,%r8d
je     1246 <CleanupOutput+0x146>
cs nopw 0x0(%rax,%rax,1)
nop
cmp    %rdi,%rax
jbe    1220 <CleanupOutput+0x120>
movzbl -0x1(%rax),%ecx
add    $0xffffffffffffffff,%rax
cmp    $0x30,%cl
je     1200 <CleanupOutput+0x100>
lea    0x1(%rax),%rdx
cmp    $0x2e,%cl
cmovne %rdx,%rax
nopl   (%rax)
mov    %r9,%rcx
mov    %esi,%edx
cmp    $0x20,%sil
jne    1238 <CleanupOutput+0x138>
lea    0x1(%rcx),%r9
mov    $0x20,%sil
cmpb   $0x20,0x1(%rcx)
je     1220 <CleanupOutput+0x120>
mov    %dl,(%rax)
add    $0x1,%rax
xor    %r8d,%r8d
jmp    1190 <CleanupOutput+0x90>
cmp    $0x20,%sil
jne    125a <CleanupOutput+0x15a>
xor    %r8d,%r8d
cmpb   $0x20,0x1(%r9)
je     118d <CleanupOutput+0x8d>
mov    %sil,(%rax)
add    $0x1,%rax
xor    %r8d,%r8d
jmp    118d <CleanupOutput+0x8d>
movb   $0x0,(%rax)
lea    0x2(%rdi),%rax
jmp    128e <CleanupOutput+0x18e>
cs nopw 0x0(%rax,%rax,1)
nopl   0x0(%rax)
test   %cl,%cl
je     12a4 <CleanupOutput+0x1a4>
mov    %cl,(%rdi)
add    $0x1,%rdi
add    $0x1,%rax
movzbl -0x2(%rax),%ecx
cmp    $0x2d,%cl
jne    1280 <CleanupOutput+0x180>
cmpb   $0x30,-0x1(%rax)
jne    1284 <CleanupOutput+0x184>
cmpb   $0x20,(%rax)
jne    1284 <CleanupOutput+0x184>
jmp    128a <CleanupOutput+0x18a>
movb   $0x0,(%rdi)
ret

LLVM IR (-O0):
define void @CleanupOutput(i8* %0) {
%2 = alloca i8*
%3 = alloca i8*
%4 = alloca i8*
%5 = alloca i32
store i8* %0, i8** %2
store i32 0, i32* %5
%6 = load i8*, i8** %2
store i8* %6, i8** %4
store i8* %6, i8** %3
br label %7
7: ; preds = %57, %1
%8 = load i8*, i8** %3
%9 = load i8, i8* %8
%10 = sext i8 %9 to i32
%11 = icmp ne i32 %10, 0
br i1 %11, label %12, label %17
12: ; preds = %7
%13 = load i8*, i8** %3
%14 = load i8, i8* %13
%15 = sext i8 %14 to i32
%16 = icmp ne i32 %15, 125
br label %17
17: ; preds = %12, %7
%18 = phi i1 [ false, %7 ], [ %16, %12 ]
br i1 %18, label %19, label %58
19: ; preds = %17
%20 = load i8*, i8** %3
%21 = load i8, i8* %20
%22 = sext i8 %21 to i32
%23 = icmp eq i32 %22, 10
br i1 %23, label %24, label %26
24: ; preds = %19
%25 = load i8*, i8** %3
store i8 32, i8* %25
br label %26
26: ; preds = %24, %19
%27 = load i8*, i8** %3
%28 = load i8, i8* %27
%29 = sext i8 %28 to i32
%30 = icmp eq i32 %29, 32
br i1 %30, label %36, label %31
31: ; preds = %26
%32 = load i8*, i8** %3
%33 = load i8, i8* %32
%34 = sext i8 %33 to i32
%35 = icmp eq i32 %34, 10
br i1 %35, label %36, label %51
36: ; preds = %31, %26
%37 = load i8*, i8** %3
%38 = getelementptr inbounds i8, i8* %37, i64 1
%39 = load i8, i8* %38
%40 = sext i8 %39 to i32
%41 = icmp eq i32 %40, 32
br i1 %41, label %48, label %42
42: ; preds = %36
%43 = load i8*, i8** %3
%44 = getelementptr inbounds i8, i8* %43, i64 1
%45 = load i8, i8* %44
%46 = sext i8 %45 to i32
%47 = icmp eq i32 %46, 10
br i1 %47, label %48, label %51
48: ; preds = %42, %36
%49 = load i8*, i8** %3
%50 = getelementptr inbounds i8, i8* %49, i32 1
store i8* %50, i8** %3
br label %57
51: ; preds = %42, %31
%52 = load i8*, i8** %3
%53 = getelementptr inbounds i8, i8* %52, i32 1
store i8* %53, i8** %3
%54 = load i8, i8* %52
%55 = load i8*, i8** %4
%56 = getelementptr inbounds i8, i8* %55, i32 1
store i8* %56, i8** %4
store i8 %54, i8* %55
br label %57
57: ; preds = %51, %48
br label %7
58: ; preds = %17
br label %59
59: ; preds = %63, %58
%60 = load i8*, i8** %3
%61 = load i8, i8* %60
%62 = icmp ne i8 %61, 0
br i1 %62, label %63, label %69
63: ; preds = %59
%64 = load i8*, i8** %3
%65 = getelementptr inbounds i8, i8* %64, i32 1
store i8* %65, i8** %3
%66 = load i8, i8* %64
%67 = load i8*, i8** %4
%68 = getelementptr inbounds i8, i8* %67, i32 1
store i8* %68, i8** %4
store i8 %66, i8* %67
br label %59
69: ; preds = %59
%70 = load i8*, i8** %4
store i8 0, i8* %70
%71 = load i8*, i8** %2
store i8* %71, i8** %4
store i8* %71, i8** %3
br label %72
72: ; preds = %221, %69
%73 = load i8*, i8** %3
%74 = load i8, i8* %73
%75 = icmp ne i8 %74, 0
br i1 %75, label %76, label %222
76: ; preds = %72
%77 = load i8*, i8** %3
%78 = load i8, i8* %77
%79 = sext i8 %78 to i32
%80 = icmp eq i32 %79, 46
br i1 %80, label %81, label %87
81: ; preds = %76
store i32 1, i32* %5
%82 = load i8*, i8** %3
%83 = getelementptr inbounds i8, i8* %82, i32 1
store i8* %83, i8** %3
%84 = load i8, i8* %82
%85 = load i8*, i8** %4
%86 = getelementptr inbounds i8, i8* %85, i32 1
store i8* %86, i8** %4
store i8 %84, i8* %85
br label %221
87: ; preds = %76
%88 = load i8*, i8** %3
%89 = load i8, i8* %88
%90 = sext i8 %89 to i32
%91 = icmp eq i32 %90, 45
br i1 %91, label %92, label %107
92: ; preds = %87
%93 = load i8*, i8** %3
%94 = getelementptr inbounds i8, i8* %93, i64 1
%95 = load i8, i8* %94
%96 = sext i8 %95 to i32
%97 = icmp eq i32 %96, 48
br i1 %97, label %98, label %107
98: ; preds = %92
%99 = load i8*, i8** %3
%100 = getelementptr inbounds i8, i8* %99, i64 2
%101 = load i8, i8* %100
%102 = sext i8 %101 to i32
%103 = icmp eq i32 %102, 32
br i1 %103, label %104, label %107
104: ; preds = %98
%105 = load i8*, i8** %3
%106 = getelementptr inbounds i8, i8* %105, i32 1
store i8* %106, i8** %3
br label %220
107: ; preds = %98, %92, %87
%108 = load i8*, i8** %3
%109 = load i8, i8* %108
%110 = sext i8 %109 to i32
%111 = icmp sle i32 %110, 57
br i1 %111, label %112, label %123
112: ; preds = %107
%113 = load i8*, i8** %3
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = icmp sge i32 %115, 48
br i1 %116, label %117, label %123
117: ; preds = %112
%118 = load i8*, i8** %3
%119 = getelementptr inbounds i8, i8* %118, i32 1
store i8* %119, i8** %3
%120 = load i8, i8* %118
%121 = load i8*, i8** %4
%122 = getelementptr inbounds i8, i8* %121, i32 1
store i8* %122, i8** %4
store i8 %120, i8* %121
br label %219
123: ; preds = %112, %107
%124 = load i8*, i8** %3
%125 = load i8, i8* %124
%126 = sext i8 %125 to i32
%127 = icmp eq i32 %126, 10
br i1 %127, label %128, label %141
128: ; preds = %123
%129 = load i8*, i8** %4
%130 = load i8*, i8** %2
%131 = icmp ugt i8* %129, %130
br i1 %131, label %132, label %141
132: ; preds = %128
%133 = load i8*, i8** %4
%134 = getelementptr inbounds i8, i8* %133, i64 -1
%135 = load i8, i8* %134
%136 = sext i8 %135 to i32
%137 = icmp eq i32 %136, 10
br i1 %137, label %138, label %141
138: ; preds = %132
%139 = load i8*, i8** %3
%140 = getelementptr inbounds i8, i8* %139, i32 1
store i8* %140, i8** %3
br label %218
141: ; preds = %132, %128, %123
%142 = load i32, i32* %5
%143 = icmp ne i32 %142, 0
br i1 %143, label %144, label %196
144: ; preds = %141
br label %145
145: ; preds = %157, %144
%146 = load i8*, i8** %4
%147 = load i8*, i8** %2
%148 = icmp ugt i8* %146, %147
br i1 %148, label %149, label %155
149: ; preds = %145
%150 = load i8*, i8** %4
%151 = getelementptr inbounds i8, i8* %150, i64 -1
%152 = load i8, i8* %151
%153 = sext i8 %152 to i32
%154 = icmp eq i32 %153, 48
br label %155
155: ; preds = %149, %145
%156 = phi i1 [ false, %145 ], [ %154, %149 ]
br i1 %156, label %157, label %160
157: ; preds = %155
%158 = load i8*, i8** %4
%159 = getelementptr inbounds i8, i8* %158, i32 -1
store i8* %159, i8** %4
br label %145
160: ; preds = %155
%161 = load i8*, i8** %4
%162 = load i8*, i8** %2
%163 = icmp ugt i8* %161, %162
br i1 %163, label %164, label %173
164: ; preds = %160
%165 = load i8*, i8** %4
%166 = getelementptr inbounds i8, i8* %165, i64 -1
%167 = load i8, i8* %166
%168 = sext i8 %167 to i32
%169 = icmp eq i32 %168, 46
br i1 %169, label %170, label %173
170: ; preds = %164
%171 = load i8*, i8** %4
%172 = getelementptr inbounds i8, i8* %171, i32 -1
store i8* %172, i8** %4
br label %173
173: ; preds = %170, %164, %160
br label %174
174: ; preds = %187, %173
%175 = load i8*, i8** %3
%176 = load i8, i8* %175
%177 = sext i8 %176 to i32
%178 = icmp eq i32 %177, 32
br i1 %178, label %179, label %185
179: ; preds = %174
%180 = load i8*, i8** %3
%181 = getelementptr inbounds i8, i8* %180, i64 1
%182 = load i8, i8* %181
%183 = sext i8 %182 to i32
%184 = icmp eq i32 %183, 32
br label %185
185: ; preds = %179, %174
%186 = phi i1 [ false, %174 ], [ %184, %179 ]
br i1 %186, label %187, label %190
187: ; preds = %185
%188 = load i8*, i8** %3
%189 = getelementptr inbounds i8, i8* %188, i32 1
store i8* %189, i8** %3
br label %174
190: ; preds = %185
store i32 0, i32* %5
%191 = load i8*, i8** %3
%192 = getelementptr inbounds i8, i8* %191, i32 1
store i8* %192, i8** %3
%193 = load i8, i8* %191
%194 = load i8*, i8** %4
%195 = getelementptr inbounds i8, i8* %194, i32 1
store i8* %195, i8** %4
store i8 %193, i8* %194
br label %217
196: ; preds = %141
%197 = load i8*, i8** %3
%198 = load i8, i8* %197
%199 = sext i8 %198 to i32
%200 = icmp eq i32 %199, 32
br i1 %200, label %201, label %210
201: ; preds = %196
%202 = load i8*, i8** %3
%203 = getelementptr inbounds i8, i8* %202, i64 1
%204 = load i8, i8* %203
%205 = sext i8 %204 to i32
%206 = icmp eq i32 %205, 32
br i1 %206, label %207, label %210
207: ; preds = %201
%208 = load i8*, i8** %3
%209 = getelementptr inbounds i8, i8* %208, i32 1
store i8* %209, i8** %3
br label %216
210: ; preds = %201, %196
store i32 0, i32* %5
%211 = load i8*, i8** %3
%212 = getelementptr inbounds i8, i8* %211, i32 1
store i8* %212, i8** %3
%213 = load i8, i8* %211
%214 = load i8*, i8** %4
%215 = getelementptr inbounds i8, i8* %214, i32 1
store i8* %215, i8** %4
store i8 %213, i8* %214
br label %216
216: ; preds = %210, %207
br label %217
217: ; preds = %216, %190
br label %218
218: ; preds = %217, %138
br label %219
219: ; preds = %218, %117
br label %220
220: ; preds = %219, %104
br label %221
221: ; preds = %220, %81
br label %72
222: ; preds = %72
%223 = load i8*, i8** %4
store i8 0, i8* %223
%224 = load i8*, i8** %2
store i8* %224, i8** %4
store i8* %224, i8** %3
br label %225
225: ; preds = %255, %222
%226 = load i8*, i8** %3
%227 = load i8, i8* %226
%228 = icmp ne i8 %227, 0
br i1 %228, label %229, label %256
229: ; preds = %225
%230 = load i8*, i8** %3
%231 = load i8, i8* %230
%232 = sext i8 %231 to i32
%233 = icmp eq i32 %232, 45
br i1 %233, label %234, label %249
234: ; preds = %229
%235 = load i8*, i8** %3
%236 = getelementptr inbounds i8, i8* %235, i64 1
%237 = load i8, i8* %236
%238 = sext i8 %237 to i32
%239 = icmp eq i32 %238, 48
br i1 %239, label %240, label %249
240: ; preds = %234
%241 = load i8*, i8** %3
%242 = getelementptr inbounds i8, i8* %241, i64 2
%243 = load i8, i8* %242
%244 = sext i8 %243 to i32
%245 = icmp eq i32 %244, 32
br i1 %245, label %246, label %249
246: ; preds = %240
%247 = load i8*, i8** %3
%248 = getelementptr inbounds i8, i8* %247, i32 1
store i8* %248, i8** %3
br label %255
249: ; preds = %240, %234, %229
%250 = load i8*, i8** %3
%251 = getelementptr inbounds i8, i8* %250, i32 1
store i8* %251, i8** %3
%252 = load i8, i8* %250
%253 = load i8*, i8** %4
%254 = getelementptr inbounds i8, i8* %253, i32 1
store i8* %254, i8** %4
store i8 %252, i8* %253
br label %255
255: ; preds = %249, %246
br label %225
256: ; preds = %225
%257 = load i8*, i8** %4
store i8 0, i8* %257
ret void
}

LLVM IR (-O2):
define void @CleanupOutput(i8* %0) {
br label %2
2: ; preds = %13, %1
%3 = phi i8* [ %0, %1 ], [ %15, %13 ]
%4 = phi i8* [ %0, %1 ], [ %14, %13 ]
%5 = load i8, i8* %3
switch i8 %5, label %10 [
i8 32, label %7
i8 10, label %6
i8 0, label %24
i8 125, label %16
]
6: ; preds = %2
store i8 32, i8* %3
br label %7
7: ; preds = %2, %6
%8 = getelementptr inbounds i8, i8* %3, i64 1
%9 = load i8, i8* %8
switch i8 %9, label %10 [
i8 32, label %13
i8 10, label %13
]
10: ; preds = %2, %7
%11 = phi i8 [ 32, %7 ], [ %5, %2 ]
%12 = getelementptr inbounds i8, i8* %4, i64 1
store i8 %11, i8* %4
br label %13
13: ; preds = %7, %7, %10
%14 = phi i8* [ %12, %10 ], [ %4, %7 ], [ %4, %7 ]
%15 = getelementptr inbounds i8, i8* %3, i64 1
br label %2
16: ; preds = %2, %16
%17 = phi i8 [ %22, %16 ], [ %5, %2 ]
%18 = phi i8* [ %21, %16 ], [ %4, %2 ]
%19 = phi i8* [ %20, %16 ], [ %3, %2 ]
%20 = getelementptr inbounds i8, i8* %19, i64 1
%21 = getelementptr inbounds i8, i8* %18, i64 1
store i8 %17, i8* %18
%22 = load i8, i8* %20
%23 = icmp eq i8 %22, 0
br i1 %23, label %24, label %16
24: ; preds = %2, %16
%25 = phi i8* [ %21, %16 ], [ %4, %2 ]
store i8 0, i8* %25
br label %26
26: ; preds = %86, %24
%27 = phi i8* [ %0, %24 ], [ %90, %86 ]
%28 = phi i8* [ %0, %24 ], [ %88, %86 ]
%29 = phi i32 [ 0, %24 ], [ %89, %86 ]
%30 = load i8, i8* %27
switch i8 %30, label %41 [
i8 0, label %91
i8 46, label %31
i8 45, label %33
]
31: ; preds = %26
%32 = getelementptr inbounds i8, i8* %28, i64 1
store i8 46, i8* %28
br label %86
33: ; preds = %26
%34 = getelementptr inbounds i8, i8* %27, i64 1
%35 = load i8, i8* %34
%36 = icmp eq i8 %35, 48
br i1 %36, label %37, label %54
37: ; preds = %33
%38 = getelementptr inbounds i8, i8* %27, i64 2
%39 = load i8, i8* %38
%40 = icmp eq i8 %39, 32
br i1 %40, label %86, label %54
41: ; preds = %26
%42 = add i8 %30, -48
%43 = icmp ult i8 %42, 10
br i1 %43, label %44, label %46
44: ; preds = %41
%45 = getelementptr inbounds i8, i8* %28, i64 1
store i8 %30, i8* %28
br label %86
46: ; preds = %41
%47 = icmp eq i8 %30, 10
%48 = icmp ugt i8* %28, %0
%49 = select i1 %47, i1 %48, i1 false
br i1 %49, label %50, label %54
50: ; preds = %46
%51 = getelementptr inbounds i8, i8* %28, i64 -1
%52 = load i8, i8* %51
%53 = icmp eq i8 %52, 10
br i1 %53, label %86, label %54
54: ; preds = %37, %33, %50, %46
%55 = icmp eq i32 %29, 0
br i1 %55, label %78, label %56
56: ; preds = %54, %59
%57 = phi i8* [ %60, %59 ], [ %28, %54 ]
%58 = icmp ugt i8* %57, %0
br i1 %58, label %59, label %66
59: ; preds = %56
%60 = getelementptr inbounds i8, i8* %57, i64 -1
%61 = load i8, i8* %60
%62 = icmp eq i8 %61, 48
br i1 %62, label %56, label %63
63: ; preds = %59
%64 = icmp eq i8 %61, 46
%65 = select i1 %64, i8* %60, i8* %57
br label %66
66: ; preds = %56, %63
%67 = phi i8* [ %65, %63 ], [ %57, %56 ]
br label %68
68: ; preds = %72, %66
%69 = phi i8 [ %30, %66 ], [ 32, %72 ]
%70 = phi i8* [ %27, %66 ], [ %73, %72 ]
%71 = icmp eq i8 %69, 32
br i1 %71, label %72, label %76
72: ; preds = %68
%73 = getelementptr inbounds i8, i8* %70, i64 1
%74 = load i8, i8* %73
%75 = icmp eq i8 %74, 32
br i1 %75, label %68, label %76
76: ; preds = %68, %72
%77 = getelementptr inbounds i8, i8* %67, i64 1
store i8 %69, i8* %67
br label %86
78: ; preds = %54
%79 = icmp eq i8 %30, 32
br i1 %79, label %80, label %84
80: ; preds = %78
%81 = getelementptr inbounds i8, i8* %27, i64 1
%82 = load i8, i8* %81
%83 = icmp eq i8 %82, 32
br i1 %83, label %86, label %84
84: ; preds = %80, %78
%85 = getelementptr inbounds i8, i8* %28, i64 1
store i8 %30, i8* %28
br label %86
86: ; preds = %80, %50, %37, %84, %76, %44, %31
%87 = phi i8* [ %27, %31 ], [ %27, %44 ], [ %70, %76 ], [ %27, %84 ], [ %27, %37 ], [ %27, %50 ], [ %27, %80 ]
%88 = phi i8* [ %32, %31 ], [ %45, %44 ], [ %77, %76 ], [ %85, %84 ], [ %28, %37 ], [ %28, %50 ], [ %28, %80 ]
%89 = phi i32 [ 1, %31 ], [ %29, %44 ], [ 0, %76 ], [ 0, %84 ], [ %29, %37 ], [ %29, %50 ], [ 0, %80 ]
%90 = getelementptr inbounds i8, i8* %87, i64 1
br label %26
91: ; preds = %26
store i8 0, i8* %28
br label %92
92: ; preds = %106, %91
%93 = phi i8* [ %0, %91 ], [ %108, %106 ]
%94 = phi i8* [ %0, %91 ], [ %107, %106 ]
%95 = load i8, i8* %93
switch i8 %95, label %104 [
i8 0, label %109
i8 45, label %96
]
96: ; preds = %92
%97 = getelementptr inbounds i8, i8* %93, i64 1
%98 = load i8, i8* %97
%99 = icmp eq i8 %98, 48
br i1 %99, label %100, label %104
100: ; preds = %96
%101 = getelementptr inbounds i8, i8* %93, i64 2
%102 = load i8, i8* %101
%103 = icmp eq i8 %102, 32
br i1 %103, label %106, label %104
104: ; preds = %92, %100, %96
%105 = getelementptr inbounds i8, i8* %94, i64 1
store i8 %95, i8* %94
br label %106
106: ; preds = %100, %104
%107 = phi i8* [ %105, %104 ], [ %94, %100 ]
%108 = getelementptr inbounds i8, i8* %93, i64 1
br label %92
109: ; preds = %92
store i8 0, i8* %94
ret void
}