#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 */
void expand_tokens(char *s, char *output) {
  size_t len = 1024;
  size_t i = 0;
  size_t j = 0;
  while (i < len - 1) {
    if (i == len) {
      output[j] = '\0';
      return;
    }
    if (s[i] == '\0') {
      output[j] = s[i];
      return;
    }
    if (s[i] == ';') {
      output[j] = ' ';
      output[++j] = ';';
      output[++j] = ' ';
    } else if (s[i] == '<') {
      output[j] = ' ';
      output[++j] = '<';
      output[++j] = ' ';
    } else if (i != 0 && s[i - 1] != '|' && s[i] == '|' && s[i + 1] != '|') {
      output[j] = ' ';
      output[++j] = '|';
      output[++j] = ' ';
    } else if (s[i] == '|' && s[i + 1] == '|') {
      output[j] = ' ';
      output[++j] = '|';
      output[++j] = '|';
      output[++j] = ' ';
      ++i;
    } else if (s[i] == '&' && s[i + 1] == '&') {
      output[j] = ' ';
      output[++j] = '&';
      output[++j] = '&';
      output[++j] = ' ';
      ++i;
    } else if (i != 0 && s[i - 1] != '&' && s[i] == '&' && s[i + 1] != '&') {
      output[j] = ' ';
      output[++j] = '&';
      output[++j] = ' ';
    } else if (s[i] == '>' && s[i + 1] == '>') {
      output[j] = ' ';
      output[++j] = '>';
      output[++j] = '>';
      output[++j] = ' ';
      ++i;
    } else if (i != 0 && i != 0 && s[i - 1] != '>' && s[i] == '>' &&
               s[i + 1] != '>') {
      output[j] = ' ';
      output[++j] = '>';
      output[++j] = ' ';
    } else {
      output[j] = s[i];
      output[j + 1] = '\0';
    }
    ++j;
    ++i;
  }
}


x86 assembly (clang, -O0):
<expand_tokens>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
movq   $0x400,-0x18(%rbp)
movq   $0x0,-0x20(%rbp)
movq   $0x0,-0x28(%rbp)
mov    -0x20(%rbp),%rax
mov    -0x18(%rbp),%rcx
sub    $0x1,%rcx
cmp    %rcx,%rax
jae    1602 <expand_tokens+0x502>
mov    -0x20(%rbp),%rax
cmp    -0x18(%rbp),%rax
jne    1158 <expand_tokens+0x58>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    1602 <expand_tokens+0x502>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x0,%eax
jne    1188 <expand_tokens+0x88>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    1602 <expand_tokens+0x502>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3b,%eax
jne    11de <expand_tokens+0xde>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x3b,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x20,0x1(%rax,%rcx,1)
jmp    15e5 <expand_tokens+0x4e5>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3c,%eax
jne    1234 <expand_tokens+0x134>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x3c,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x20,0x1(%rax,%rcx,1)
jmp    15e0 <expand_tokens+0x4e0>
cmpq   $0x0,-0x20(%rbp)
je     12c4 <expand_tokens+0x1c4>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7c,%eax
je     12c4 <expand_tokens+0x1c4>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7c,%eax
jne    12c4 <expand_tokens+0x1c4>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x7c,%eax
je     12c4 <expand_tokens+0x1c4>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x7c,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x20,0x1(%rax,%rcx,1)
jmp    15db <expand_tokens+0x4db>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x7c,%eax
jne    1354 <expand_tokens+0x254>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x7c,%eax
jne    1354 <expand_tokens+0x254>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x7c,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x7c,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x20,0x1(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    15d6 <expand_tokens+0x4d6>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x26,%eax
jne    13e4 <expand_tokens+0x2e4>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x26,%eax
jne    13e4 <expand_tokens+0x2e4>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x26,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x26,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x20,0x1(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    15d1 <expand_tokens+0x4d1>
cmpq   $0x0,-0x20(%rbp)
je     1474 <expand_tokens+0x374>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x26,%eax
je     1474 <expand_tokens+0x374>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x26,%eax
jne    1474 <expand_tokens+0x374>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x26,%eax
je     1474 <expand_tokens+0x374>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x26,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x20,0x1(%rax,%rcx,1)
jmp    15cc <expand_tokens+0x4cc>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3e,%eax
jne    1504 <expand_tokens+0x404>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x3e,%eax
jne    1504 <expand_tokens+0x404>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x3e,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x3e,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x20,0x1(%rax,%rcx,1)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    15c7 <expand_tokens+0x4c7>
cmpq   $0x0,-0x20(%rbp)
je     159f <expand_tokens+0x49f>
cmpq   $0x0,-0x20(%rbp)
je     159f <expand_tokens+0x49f>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
sub    $0x1,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3e,%eax
je     159f <expand_tokens+0x49f>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x3e,%eax
jne    159f <expand_tokens+0x49f>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x3e,%eax
je     159f <expand_tokens+0x49f>
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x20,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x3e,0x1(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %rcx,%rdx
add    $0x1,%rdx
mov    %rdx,-0x28(%rbp)
movb   $0x20,0x1(%rax,%rcx,1)
jmp    15c2 <expand_tokens+0x4c2>
mov    -0x8(%rbp),%rax
mov    -0x20(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x10(%rbp),%rax
mov    -0x28(%rbp),%rcx
movb   $0x0,0x1(%rax,%rcx,1)
jmp    15c7 <expand_tokens+0x4c7>
jmp    15cc <expand_tokens+0x4cc>
jmp    15d1 <expand_tokens+0x4d1>
jmp    15d6 <expand_tokens+0x4d6>
jmp    15db <expand_tokens+0x4db>
jmp    15e0 <expand_tokens+0x4e0>
jmp    15e5 <expand_tokens+0x4e5>
mov    -0x28(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x28(%rbp)
mov    -0x20(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x20(%rbp)
jmp    1124 <expand_tokens+0x24>
pop    %rbp
ret

x86 assembly (clang, -O2):
<expand_tokens>:
xor    %eax,%eax
xor    %r9d,%r9d
cs nopw 0x0(%rax,%rax,1)
nop
movzbl (%rdi,%r9,1),%edx
cmp    $0x3b,%dl
je     1150 <expand_tokens+0x50>
cmp    $0x3c,%dl
je     1160 <expand_tokens+0x60>
test   %dl,%dl
je     125a <expand_tokens+0x15a>
test   %r9,%r9
je     1190 <expand_tokens+0x90>
cmpb   $0x7c,-0x1(%r9,%rdi,1)
je     1190 <expand_tokens+0x90>
cmp    $0x7c,%dl
jne    1190 <expand_tokens+0x90>
cmpb   $0x7c,0x1(%rdi,%r9,1)
je     11a5 <expand_tokens+0xa5>
movw   $0x7c20,(%rsi,%rax,1)
jmp    1166 <expand_tokens+0x66>
nopl   0x0(%rax)
movw   $0x3b20,(%rsi,%rax,1)
jmp    1166 <expand_tokens+0x66>
nopl   0x0(%rax,%rax,1)
movw   $0x3c20,(%rsi,%rax,1)
add    $0x2,%rax
mov    $0x20,%r8b
mov    %rax,%rdx
mov    %r8b,(%rsi,%rdx,1)
add    $0x1,%rax
lea    0x1(%r9),%rcx
cmp    $0x3fe,%r9
mov    %rcx,%r9
jb     1110 <expand_tokens+0x10>
jmp    1259 <expand_tokens+0x159>
nopl   (%rax)
cmp    $0x26,%dl
je     11ba <expand_tokens+0xba>
mov    $0x1,%r8b
cmp    $0x7c,%dl
jne    11da <expand_tokens+0xda>
cmpb   $0x7c,0x1(%rdi,%r9,1)
jne    11da <expand_tokens+0xda>
add    $0x1,%r9
movw   $0x7c20,(%rsi,%rax,1)
movb   $0x7c,0x2(%rsi,%rax,1)
add    $0x3,%rax
jmp    116a <expand_tokens+0x6a>
cmpb   $0x26,0x1(%rdi,%r9,1)
jne    11d7 <expand_tokens+0xd7>
add    $0x1,%r9
movw   $0x2620,(%rsi,%rax,1)
movb   $0x26,0x2(%rsi,%rax,1)
add    $0x3,%rax
jmp    116a <expand_tokens+0x6a>
xor    %r8d,%r8d
test   %r9,%r9
je     11f5 <expand_tokens+0xf5>
cmpb   $0x26,-0x1(%r9,%rdi,1)
sete   %cl
or     %cl,%r8b
jne    11f5 <expand_tokens+0xf5>
cmpb   $0x26,0x1(%r9,%rdi,1)
jne    1243 <expand_tokens+0x143>
cmp    $0x3e,%dl
jne    121a <expand_tokens+0x11a>
cmpb   $0x3e,0x1(%rdi,%r9,1)
jne    121a <expand_tokens+0x11a>
add    $0x1,%r9
movw   $0x3e20,(%rsi,%rax,1)
movb   $0x3e,0x2(%rsi,%rax,1)
add    $0x3,%rax
jmp    116a <expand_tokens+0x6a>
test   %r9,%r9
je     1234 <expand_tokens+0x134>
cmpb   $0x3e,-0x1(%r9,%rdi,1)
je     1234 <expand_tokens+0x134>
cmp    $0x3e,%dl
jne    1234 <expand_tokens+0x134>
cmpb   $0x3e,0x1(%r9,%rdi,1)
jne    124e <expand_tokens+0x14e>
mov    %dl,(%rsi,%rax,1)
lea    0x1(%rax),%rdx
xor    %r8d,%r8d
jmp    1170 <expand_tokens+0x70>
movw   $0x2620,(%rsi,%rax,1)
jmp    1166 <expand_tokens+0x66>
movw   $0x3e20,(%rsi,%rax,1)
jmp    1166 <expand_tokens+0x66>
ret
movb   $0x0,(%rsi,%rax,1)
ret

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

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