#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 */
scalar_t__ gets(char *);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ strcpy(char *, char *);
int strlen(char *);
char *strtok(char *, char *);
int main() {
  char p[10][10][10], s[10 * 10 + 10], *ps;
  int i, j, k, x, y, z;
  gets(s);
  for (k = 0, ps = strtok(s, "|"), x = strlen(ps); ps; ps = strtok(NULL, "|"))
    strcpy(p[0][k++], ps);
  j = 1;
  z = k;
  while (gets(s)) {
    for (k = 0, ps = strtok(s, "|"); ps; ps = strtok(NULL, "|"))
      strcpy(p[j][k++], ps);
    ++j;
  }
  y = j;
  printf("l = 16;\ne = 0.16;\ng = 3;\n\n");
  printf("module m(v,w) { translate(v*l+[e,e,e]-3*e*w) "
         "cube((l-2*e)*[1,1,1]+(6*e-l)*w); }\n\n");
  printf("module a(i,j,k) { m([i,j,k],[0,0,0]); }\n");
  printf("module bx(i,j,k) { m([i,j,k],[1,0,0]); }\n");
  printf("module by(i,j,k) { m([i,j,k],[0,1,0]); }\n");
  printf("module bz(i,j,k) { m([i,j,k],[0,0,1]); }\n");
  printf("module cx(i,j,k) { m([i,j,k],[0,1,1]); }\n");
  printf("module cy(i,j,k) { m([i,j,k],[1,0,1]); }\n");
  printf("module cz(i,j,k) { m([i,j,k],[1,1,0]); }\n");
  printf("module d(i,j,k) { m([i,j,k],[1,1,1]); }\n\n");
  printf("module p() {\n");
  for (k = 0; k < z; ++k)
    for (j = 0; j < y; ++j)
      for (i = 0; i < x; ++i)
        if (p[j][k][i] != '.') {
          printf("  a(%d,%d,%d);\n", i, y - 1 - j, k);
          if (i > 0 && p[j][k][i - 1] != '.') {
            printf("  bx(%d,%d,%d);\n", i, y - 1 - j, k);
            if (k > 0 && p[j][k - 1][i] != '.' && p[j][k - 1][i - 1] != '.') {
              printf("  cy(%d,%d,%d);\n", i, y - 1 - j, k);
              if (j < y - 1 && p[j + 1][k][i] != '.' &&
                  p[j + 1][k][i - 1] != '.' && p[j + 1][k - 1][i] != '.' &&
                  p[j + 1][k - 1][i - 1] != '.')
                printf("  d(%d,%d,%d);\n", i, y - 1 - j, k);
            }
            if (j < y - 1 && p[j + 1][k][i] != '.' && p[j + 1][k][i - 1] != '.')
              printf("  cz(%d,%d,%d);\n", i, y - 1 - j, k);
          }
          if (j < y - 1 && p[j + 1][k][i] != '.') {
            printf("  by(%d,%d,%d);\n", i, y - 1 - j, k);
            if (k > 0 && p[j][k - 1][i] != '.' && p[j + 1][k - 1][i] != '.')
              printf("  cx(%d,%d,%d);\n", i, y - 1 - j, k);
          }
          if (k > 0 && p[j][k - 1][i] != '.')
            printf("  bz(%d,%d,%d);\n", i, y - 1 - j, k);
        }
  printf("}\np();\n");
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x480,%rsp
movl   $0x0,-0x4(%rbp)
lea    -0x460(%rbp),%rdi
call   1060 <gets@plt>
movl   $0x0,-0x474(%rbp)
lea    -0x460(%rbp),%rdi
lea    0xe7a(%rip),%rsi
call   1070 <strtok@plt>
mov    %rax,-0x468(%rbp)
mov    -0x468(%rbp),%rdi
call   1040 <strlen@plt>
mov    %eax,-0x478(%rbp)
cmpq   $0x0,-0x468(%rbp)
je     11fb <main+0xab>
lea    -0x3f0(%rbp),%rdi
mov    -0x474(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x474(%rbp)
cltq
imul   $0xa,%rax,%rax
add    %rax,%rdi
mov    -0x468(%rbp),%rsi
call   1030 <strcpy@plt>
xor    %eax,%eax
mov    %eax,%edi
lea    0xe16(%rip),%rsi
call   1070 <strtok@plt>
mov    %rax,-0x468(%rbp)
jmp    11a4 <main+0x54>
movl   $0x1,-0x470(%rbp)
mov    -0x474(%rbp),%eax
mov    %eax,-0x480(%rbp)
lea    -0x460(%rbp),%rdi
call   1060 <gets@plt>
cmp    $0x0,%rax
je     12c4 <main+0x174>
movl   $0x0,-0x474(%rbp)
lea    -0x460(%rbp),%rdi
lea    0xdc1(%rip),%rsi
call   1070 <strtok@plt>
mov    %rax,-0x468(%rbp)
cmpq   $0x0,-0x468(%rbp)
je     12b0 <main+0x160>
movslq -0x470(%rbp),%rax
lea    -0x3f0(%rbp),%rdi
imul   $0x64,%rax,%rax
add    %rax,%rdi
mov    -0x474(%rbp),%eax
mov    %eax,%ecx
add    $0x1,%ecx
mov    %ecx,-0x474(%rbp)
cltq
imul   $0xa,%rax,%rax
add    %rax,%rdi
mov    -0x468(%rbp),%rsi
call   1030 <strcpy@plt>
xor    %eax,%eax
mov    %eax,%edi
lea    0xd61(%rip),%rsi
call   1070 <strtok@plt>
mov    %rax,-0x468(%rbp)
jmp    124b <main+0xfb>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x470(%rbp)
jmp    1211 <main+0xc1>
mov    -0x470(%rbp),%eax
mov    %eax,-0x47c(%rbp)
lea    0xd2b(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xd38(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xd7c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xd97(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xdb3(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xdcf(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xdeb(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe07(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe23(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe3f(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
lea    0xe5b(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
movl   $0x0,-0x474(%rbp)
mov    -0x474(%rbp),%eax
cmp    -0x480(%rbp),%eax
jge    1944 <main+0x7f4>
movl   $0x0,-0x470(%rbp)
mov    -0x470(%rbp),%eax
cmp    -0x47c(%rbp),%eax
jge    192b <main+0x7db>
movl   $0x0,-0x46c(%rbp)
mov    -0x46c(%rbp),%eax
cmp    -0x478(%rbp),%eax
jge    1912 <main+0x7c2>
movslq -0x470(%rbp),%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x474(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x46c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     18f9 <main+0x7a9>
mov    -0x46c(%rbp),%esi
mov    -0x47c(%rbp),%edx
sub    $0x1,%edx
sub    -0x470(%rbp),%edx
mov    -0x474(%rbp),%ecx
lea    0xdb5(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
cmpl   $0x0,-0x46c(%rbp)
jle    174e <main+0x5fe>
movslq -0x470(%rbp),%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x474(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x46c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     174e <main+0x5fe>
mov    -0x46c(%rbp),%esi
mov    -0x47c(%rbp),%edx
sub    $0x1,%edx
sub    -0x470(%rbp),%edx
mov    -0x474(%rbp),%ecx
lea    0xd53(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
cmpl   $0x0,-0x474(%rbp)
jle    168c <main+0x53c>
movslq -0x470(%rbp),%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
mov    -0x474(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x46c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     168c <main+0x53c>
movslq -0x470(%rbp),%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
mov    -0x474(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x46c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     168c <main+0x53c>
mov    -0x46c(%rbp),%esi
mov    -0x47c(%rbp),%edx
sub    $0x1,%edx
sub    -0x470(%rbp),%edx
mov    -0x474(%rbp),%ecx
lea    0xcb1(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x470(%rbp),%eax
mov    -0x47c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1687 <main+0x537>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x474(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x46c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     1687 <main+0x537>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x474(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x46c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     1687 <main+0x537>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
mov    -0x474(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x46c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     1687 <main+0x537>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
mov    -0x474(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x46c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     1687 <main+0x537>
mov    -0x46c(%rbp),%esi
mov    -0x47c(%rbp),%edx
sub    $0x1,%edx
sub    -0x470(%rbp),%edx
mov    -0x474(%rbp),%ecx
lea    0xb7e(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    168c <main+0x53c>
mov    -0x470(%rbp),%eax
mov    -0x47c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1749 <main+0x5f9>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x474(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x46c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     1749 <main+0x5f9>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x474(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
mov    -0x46c(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     1749 <main+0x5f9>
mov    -0x46c(%rbp),%esi
mov    -0x47c(%rbp),%edx
sub    $0x1,%edx
sub    -0x470(%rbp),%edx
mov    -0x474(%rbp),%ecx
lea    0xacc(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    174e <main+0x5fe>
mov    -0x470(%rbp),%eax
mov    -0x47c(%rbp),%ecx
sub    $0x1,%ecx
cmp    %ecx,%eax
jge    1882 <main+0x732>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
movslq -0x474(%rbp),%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x46c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     1882 <main+0x732>
mov    -0x46c(%rbp),%esi
mov    -0x47c(%rbp),%edx
sub    $0x1,%edx
sub    -0x470(%rbp),%edx
mov    -0x474(%rbp),%ecx
lea    0xa5c(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
cmpl   $0x0,-0x474(%rbp)
jle    187d <main+0x72d>
movslq -0x470(%rbp),%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
mov    -0x474(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x46c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     187d <main+0x72d>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
movslq %eax,%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
mov    -0x474(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x46c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     187d <main+0x72d>
mov    -0x46c(%rbp),%esi
mov    -0x47c(%rbp),%edx
sub    $0x1,%edx
sub    -0x470(%rbp),%edx
mov    -0x474(%rbp),%ecx
lea    0x9ba(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    1882 <main+0x732>
cmpl   $0x0,-0x474(%rbp)
jle    18f4 <main+0x7a4>
movslq -0x470(%rbp),%rcx
lea    -0x3f0(%rbp),%rax
imul   $0x64,%rcx,%rcx
add    %rcx,%rax
mov    -0x474(%rbp),%ecx
sub    $0x1,%ecx
movslq %ecx,%rcx
imul   $0xa,%rcx,%rcx
add    %rcx,%rax
movslq -0x46c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2e,%eax
je     18f4 <main+0x7a4>
mov    -0x46c(%rbp),%esi
mov    -0x47c(%rbp),%edx
sub    $0x1,%edx
sub    -0x470(%rbp),%edx
mov    -0x474(%rbp),%ecx
lea    0x954(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
jmp    18f9 <main+0x7a9>
jmp    18fe <main+0x7ae>
mov    -0x46c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x46c(%rbp)
jmp    13ac <main+0x25c>
jmp    1917 <main+0x7c7>
mov    -0x470(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x470(%rbp)
jmp    1390 <main+0x240>
jmp    1930 <main+0x7e0>
mov    -0x474(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x474(%rbp)
jmp    1374 <main+0x224>
lea    0x907(%rip),%rdi
mov    $0x0,%al
call   1050 <printf@plt>
mov    -0x4(%rbp),%eax
add    $0x480,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x4c8,%rsp
lea    0x70(%rsp),%rbx
mov    %rbx,%rdi
call   1070 <gets@plt>
lea    0xe7b(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strtok@plt>
mov    %rax,%rbx
mov    %rax,%rdi
call   1050 <strlen@plt>
mov    %eax,0x1c(%rsp)
test   %rbx,%rbx
je     11e7 <main+0x87>
lea    0xe0(%rsp),%rbp
xor    %r15d,%r15d
lea    0xe4d(%rip),%r14
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
mov    %rbp,%rdi
mov    %rbx,%rsi
call   1030 <strcpy@plt>
xor    %edi,%edi
mov    %r14,%rsi
call   1080 <strtok@plt>
mov    %rax,%rbx
add    $0xa,%rbp
add    $0x1,%r15d
test   %rax,%rax
jne    11c0 <main+0x60>
jmp    11ea <main+0x8a>
xor    %r15d,%r15d
lea    0x70(%rsp),%rdi
call   1070 <gets@plt>
test   %rax,%rax
je     1270 <main+0x110>
lea    0x144(%rsp),%r13
mov    $0x1,%r12d
lea    0xdf2(%rip),%rbx
lea    0x70(%rsp),%r14
jmp    1235 <main+0xd5>
cs nopw 0x0(%rax,%rax,1)
nop
add    $0x1,%r12
mov    %r14,%rdi
call   1070 <gets@plt>
add    $0x64,%r13
test   %rax,%rax
je     1276 <main+0x116>
mov    %r14,%rdi
mov    %rbx,%rsi
call   1080 <strtok@plt>
test   %rax,%rax
je     1220 <main+0xc0>
mov    %r13,%rbp
nopl   0x0(%rax,%rax,1)
mov    %rbp,%rdi
mov    %rax,%rsi
call   1030 <strcpy@plt>
xor    %edi,%edi
mov    %rbx,%rsi
call   1080 <strtok@plt>
add    $0xa,%rbp
test   %rax,%rax
jne    1250 <main+0xf0>
jmp    1220 <main+0xc0>
mov    $0x1,%r12d
lea    0xe0b(%rip),%rdi
call   1040 <puts@plt>
lea    0xe19(%rip),%rdi
call   1040 <puts@plt>
lea    0xe5e(%rip),%rdi
call   1040 <puts@plt>
lea    0xe7a(%rip),%rdi
call   1040 <puts@plt>
lea    0xe97(%rip),%rdi
call   1040 <puts@plt>
lea    0xeb4(%rip),%rdi
call   1040 <puts@plt>
lea    0xed1(%rip),%rdi
call   1040 <puts@plt>
lea    0xeee(%rip),%rdi
call   1040 <puts@plt>
lea    0xf0b(%rip),%rdi
call   1040 <puts@plt>
lea    0xf28(%rip),%rdi
call   1040 <puts@plt>
lea    0xf45(%rip),%rdi
call   1040 <puts@plt>
test   %r15d,%r15d
je     164e <main+0x4ee>
lea    -0x1(%r12),%eax
mov    %eax,0x34(%rsp)
cltq
mov    %rax,0x28(%rsp)
cmp    $0x2,%r12d
mov    $0x1,%eax
cmovae %r12d,%eax
mov    %rax,0x58(%rsp)
mov    %r15d,%eax
mov    %rax,0x48(%rsp)
mov    0x1c(%rsp),%ebp
lea    0x144(%rsp),%rax
mov    %rax,0x38(%rsp)
mov    $0xffffffff,%eax
xor    %r15d,%r15d
jmp    136c <main+0x20c>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r15
mov    0x30(%rsp),%eax
add    $0x1,%eax
addq   $0xa,0x38(%rsp)
cmp    0x48(%rsp),%r15
je     164e <main+0x4ee>
mov    %eax,0x30(%rsp)
mov    %eax,%eax
mov    $0xffffffff,%ecx
add    %r15d,%ecx
mov    %rcx,0x60(%rsp)
lea    (%rax,%rax,4),%rax
lea    (%rsp,%rax,2),%rax
add    $0xe0,%rax
mov    %rax,0x50(%rsp)
xor    %eax,%eax
mov    %rax,0x8(%rsp)
jmp    13b4 <main+0x254>
nopl   0x0(%rax,%rax,1)
mov    0x20(%rsp),%rcx
mov    %rcx,%rax
mov    %rcx,0x8(%rsp)
cmp    0x58(%rsp),%rcx
je     1350 <main+0x1f0>
cmpl   $0x0,0x1c(%rsp)
jle    1640 <main+0x4e0>
mov    0x34(%rsp),%ecx
mov    0x8(%rsp),%rax
sub    %eax,%ecx
mov    %ecx,0x4(%rsp)
lea    0x1(%rax),%rcx
mov    %rcx,0x20(%rsp)
imul   $0x64,%rax,%rcx
mov    0x50(%rsp),%rax
add    %rcx,%rax
mov    %rax,0x10(%rsp)
mov    0x38(%rsp),%rax
mov    %rcx,0x68(%rsp)
lea    (%rax,%rcx,1),%r13
xor    %r12d,%r12d
jmp    1409 <main+0x2a9>
nopl   0x0(%rax,%rax,1)
add    $0x1,%r12
cmp    %r12,%rbp
je     13a0 <main+0x240>
cmpb   $0x2e,-0x64(%r13,%r12,1)
je     1400 <main+0x2a0>
lea    0xbea(%rip),%rdi
mov    %r12d,%esi
mov    0x4(%rsp),%edx
mov    %r15d,%ecx
xor    %eax,%eax
call   1060 <printf@plt>
test   %r12,%r12
je     1455 <main+0x2f5>
mov    $0xffffffff,%eax
lea    (%r12,%rax,1),%ebx
lea    (%r15,%r15,4),%rcx
mov    0x68(%rsp),%rax
lea    (%rsp,%rax,1),%r14
add    $0xe0,%r14
lea    (%r14,%rcx,2),%rax
cmpb   $0x2e,(%rbx,%rax,1)
jne    14d0 <main+0x370>
mov    0x8(%rsp),%rax
cmp    0x28(%rsp),%rax
jge    1570 <main+0x410>
cmpb   $0x2e,0x0(%r13,%r12,1)
je     1570 <main+0x410>
lea    0xbdd(%rip),%rdi
mov    %r12d,%esi
mov    0x4(%rsp),%edx
mov    %r15d,%ecx
xor    %eax,%eax
call   1060 <printf@plt>
test   %r15,%r15
je     1400 <main+0x2a0>
mov    0x10(%rsp),%rax
cmpb   $0x2e,(%rax,%r12,1)
je     1579 <main+0x419>
mov    0x10(%rsp),%rax
cmpb   $0x2e,0x64(%rax,%r12,1)
je     1579 <main+0x419>
lea    0xbac(%rip),%rdi
mov    %r12d,%esi
mov    0x4(%rsp),%edx
mov    %r15d,%ecx
xor    %eax,%eax
call   1060 <printf@plt>
jmp    1579 <main+0x419>
mov    %rcx,0x40(%rsp)
lea    0xb36(%rip),%rdi
mov    %r12d,%esi
mov    0x4(%rsp),%edx
mov    %r15d,%ecx
xor    %eax,%eax
call   1060 <printf@plt>
test   %r15,%r15
je     1515 <main+0x3b5>
mov    0x10(%rsp),%rax
cmpb   $0x2e,(%rax,%r12,1)
je     1515 <main+0x3b5>
mov    0x60(%rsp),%rax
lea    (%rax,%rax,4),%rcx
lea    (%r14,%rcx,2),%rax
cmpb   $0x2e,(%rbx,%rax,1)
jne    15a6 <main+0x446>
mov    0x8(%rsp),%rax
cmp    0x28(%rsp),%rax
jge    1570 <main+0x410>
cmpb   $0x2e,0x0(%r13,%r12,1)
je     1465 <main+0x305>
imul   $0x64,0x20(%rsp),%rax
add    %rsp,%rax
add    $0xe0,%rax
mov    0x40(%rsp),%rcx
lea    (%rax,%rcx,2),%rax
cmpb   $0x2e,(%rbx,%rax,1)
je     1465 <main+0x305>
lea    0xaee(%rip),%rdi
mov    %r12d,%esi
mov    0x4(%rsp),%edx
mov    %r15d,%ecx
xor    %eax,%eax
call   1060 <printf@plt>
jmp    1465 <main+0x305>
nopl   0x0(%rax)
test   %r15,%r15
je     1400 <main+0x2a0>
mov    0x10(%rsp),%rax
cmpb   $0x2e,(%rax,%r12,1)
je     1400 <main+0x2a0>
lea    0xae7(%rip),%rdi
mov    %r12d,%esi
mov    0x4(%rsp),%edx
mov    %r15d,%ecx
xor    %eax,%eax
call   1060 <printf@plt>
jmp    1400 <main+0x2a0>
mov    %rcx,%r14
lea    0xa73(%rip),%rdi
mov    %r12d,%esi
mov    0x4(%rsp),%edx
mov    %r15d,%ecx
xor    %eax,%eax
call   1060 <printf@plt>
mov    0x8(%rsp),%rax
cmp    0x28(%rsp),%rax
jge    1579 <main+0x419>
cmpb   $0x2e,0x0(%r13,%r12,1)
je     1521 <main+0x3c1>
imul   $0x64,0x20(%rsp),%rax
add    %rsp,%rax
add    $0xe0,%rax
mov    0x40(%rsp),%rcx
lea    (%rax,%rcx,2),%rcx
cmpb   $0x2e,(%rbx,%rcx,1)
je     1521 <main+0x3c1>
mov    0x10(%rsp),%rcx
cmpb   $0x2e,0x64(%rcx,%r12,1)
je     1521 <main+0x3c1>
lea    (%rax,%r14,2),%rax
cmpb   $0x2e,(%rbx,%rax,1)
je     1521 <main+0x3c1>
lea    0xa13(%rip),%rdi
mov    %r12d,%esi
mov    0x4(%rsp),%edx
mov    %r15d,%ecx
xor    %eax,%eax
call   1060 <printf@plt>
jmp    1521 <main+0x3c1>
nopw   0x0(%rax,%rax,1)
mov    0x8(%rsp),%rcx
add    $0x1,%rcx
jmp    13a5 <main+0x245>
lea    0xbf2(%rip),%rdi
call   1040 <puts@plt>
xor    %eax,%eax
add    $0x4c8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

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

LLVM IR (-O2):
@.str = [2 x i8] c"|\00"
@.str.12 = [16 x i8] c" a(%d,%d,%d);\0A\00"
@.str.13 = [17 x i8] c" bx(%d,%d,%d);\0A\00"
@.str.14 = [17 x i8] c" cy(%d,%d,%d);\0A\00"
@.str.15 = [16 x i8] c" d(%d,%d,%d);\0A\00"
@.str.16 = [17 x i8] c" cz(%d,%d,%d);\0A\00"
@.str.17 = [17 x i8] c" by(%d,%d,%d);\0A\00"
@.str.18 = [17 x i8] c" cx(%d,%d,%d);\0A\00"
@.str.19 = [17 x i8] c" bz(%d,%d,%d);\0A\00"
@str = [26 x i8] c"l = 16;\0Ae = 0.16;\0Ag = 3;\0A\00"
@str.21 = [81 x i8] c"module m(v,w) { translate(v*l+[e,e,e]-3*e*w) cube((l-2*e)*[1,1,1]+(6*e-l)*w); }\0A\00"
@str.22 = [40 x i8] c"module a(i,j,k) { m([i,j,k],[0,0,0]); }\00"
@str.23 = [41 x i8] c"module bx(i,j,k) { m([i,j,k],[1,0,0]); }\00"
@str.24 = [41 x i8] c"module by(i,j,k) { m([i,j,k],[0,1,0]); }\00"
@str.25 = [41 x i8] c"module bz(i,j,k) { m([i,j,k],[0,0,1]); }\00"
@str.26 = [41 x i8] c"module cx(i,j,k) { m([i,j,k],[0,1,1]); }\00"
@str.27 = [41 x i8] c"module cy(i,j,k) { m([i,j,k],[1,0,1]); }\00"
@str.28 = [41 x i8] c"module cz(i,j,k) { m([i,j,k],[1,1,0]); }\00"
@str.29 = [41 x i8] c"module d(i,j,k) { m([i,j,k],[1,1,1]); }\0A\00"
@str.30 = [13 x i8] c"module p() {\00"
@str.31 = [7 x i8] c"}\0Ap();\00"
define i32 @main() {
%1 = alloca [10 x [10 x [10 x i8]]]
%2 = alloca [110 x i8]
%3 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 0, i64 0, i64 0
%4 = getelementptr inbounds [110 x i8], [110 x i8]* %2, i64 0, i64 0
%5 = call i64 @gets(i8* %4)
%6 = call i8* @strtok(i8* %4, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%7 = call i32 @strlen(i8* %6)
%8 = icmp eq i8* %6, null
br i1 %8, label %11, label %15
9: ; preds = %15
%10 = trunc i64 %18 to i32
br label %11
11: ; preds = %9, %0
%12 = phi i32 [ 0, %0 ], [ %10, %9 ]
%13 = call i64 @gets(i8* %4)
%14 = icmp eq i64 %13, 0
br i1 %14, label %41, label %23
15: ; preds = %0, %15
%16 = phi i64 [ %18, %15 ], [ 0, %0 ]
%17 = phi i8* [ %21, %15 ], [ %6, %0 ]
%18 = add nuw i64 %16, 1
%19 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 0, i64 %16, i64 0
%20 = call i32 @strcpy(i8* %19, i8* %17)
%21 = call i8* @strtok(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%22 = icmp eq i8* %21, null
br i1 %22, label %9, label %15
23: ; preds = %11, %35
%24 = phi i64 [ %36, %35 ], [ 1, %11 ]
%25 = call i8* @strtok(i8* %4, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%26 = icmp eq i8* %25, null
br i1 %26, label %35, label %27
27: ; preds = %23, %27
%28 = phi i64 [ %30, %27 ], [ 0, %23 ]
%29 = phi i8* [ %33, %27 ], [ %25, %23 ]
%30 = add nuw i64 %28, 1
%31 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %24, i64 %28, i64 0
%32 = call i32 @strcpy(i8* %31, i8* %29)
%33 = call i8* @strtok(i8* null, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%34 = icmp eq i8* %33, null
br i1 %34, label %35, label %27
35: ; preds = %27, %23
%36 = add nuw i64 %24, 1
%37 = call i64 @gets(i8* %4)
%38 = icmp eq i64 %37, 0
br i1 %38, label %39, label %23
39: ; preds = %35
%40 = trunc i64 %36 to i32
br label %41
41: ; preds = %39, %11
%42 = phi i32 [ 1, %11 ], [ %40, %39 ]
%43 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str, i64 0, i64 0))
%44 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.21, i64 0, i64 0))
%45 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @str.22, i64 0, i64 0))
%46 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.23, i64 0, i64 0))
%47 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.24, i64 0, i64 0))
%48 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.25, i64 0, i64 0))
%49 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.26, i64 0, i64 0))
%50 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.27, i64 0, i64 0))
%51 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.28, i64 0, i64 0))
%52 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.29, i64 0, i64 0))
%53 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([13 x i8], [13 x i8]* @str.30, i64 0, i64 0))
%54 = icmp eq i32 %12, 0
br i1 %54, label %167, label %55
55: ; preds = %41
%56 = icmp sgt i32 %7, 0
%57 = add nsw i32 %42, -1
%58 = sext i32 %57 to i64
%59 = call i32 @llvm.umax.i32(i32 %42, i32 1)
%60 = zext i32 %12 to i64
%61 = zext i32 %59 to i64
%62 = zext i32 %7 to i64
br label %63
63: ; preds = %55, %164
%64 = phi i64 [ 0, %55 ], [ %165, %164 ]
%65 = icmp eq i64 %64, 0
%66 = add nuw i64 %64, 4294967295
%67 = and i64 %66, 4294967295
%68 = trunc i64 %64 to i32
br label %69
69: ; preds = %63, %161
%70 = phi i64 [ 0, %63 ], [ %162, %161 ]
br i1 %56, label %73, label %71
71: ; preds = %69
%72 = add nuw nsw i64 %70, 1
br label %161
73: ; preds = %69
%74 = trunc i64 %70 to i32
%75 = sub nsw i32 %57, %74
%76 = icmp slt i64 %70, %58
%77 = add nuw nsw i64 %70, 1
br label %78
78: ; preds = %73, %158
%79 = phi i64 [ 0, %73 ], [ %159, %158 ]
%80 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %70, i64 %64, i64 %79
%81 = load i8, i8* %80
%82 = icmp eq i8 %81, 46
br i1 %82, label %158, label %83
83: ; preds = %78
%84 = trunc i64 %79 to i32
%85 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.12, i64 0, i64 0), i32 %84, i32 %75, i32 %68)
%86 = icmp eq i64 %79, 0
br i1 %86, label %134, label %87
87: ; preds = %83
%88 = add nuw i64 %79, 4294967295
%89 = and i64 %88, 4294967295
%90 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %70, i64 %64, i64 %89
%91 = load i8, i8* %90
%92 = icmp eq i8 %91, 46
br i1 %92, label %134, label %93
93: ; preds = %87
%94 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.13, i64 0, i64 0), i32 %84, i32 %75, i32 %68)
br i1 %65, label %123, label %95
95: ; preds = %93
%96 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %70, i64 %67, i64 %79
%97 = load i8, i8* %96
%98 = icmp eq i8 %97, 46
br i1 %98, label %123, label %99
99: ; preds = %95
%100 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %70, i64 %67, i64 %89
%101 = load i8, i8* %100
%102 = icmp eq i8 %101, 46
br i1 %102, label %123, label %103
103: ; preds = %99
%104 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.14, i64 0, i64 0), i32 %84, i32 %75, i32 %68)
br i1 %76, label %105, label %152
105: ; preds = %103
%106 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %77, i64 %64, i64 %79
%107 = load i8, i8* %106
%108 = icmp eq i8 %107, 46
br i1 %108, label %124, label %109
109: ; preds = %105
%110 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %77, i64 %64, i64 %89
%111 = load i8, i8* %110
%112 = icmp eq i8 %111, 46
br i1 %112, label %124, label %113
113: ; preds = %109
%114 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %77, i64 %67, i64 %79
%115 = load i8, i8* %114
%116 = icmp eq i8 %115, 46
br i1 %116, label %124, label %117
117: ; preds = %113
%118 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %77, i64 %67, i64 %89
%119 = load i8, i8* %118
%120 = icmp eq i8 %119, 46
br i1 %120, label %124, label %121
121: ; preds = %117
%122 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @.str.15, i64 0, i64 0), i32 %84, i32 %75, i32 %68)
br label %124
123: ; preds = %99, %95, %93
br i1 %76, label %124, label %151
124: ; preds = %121, %117, %113, %109, %105, %123
%125 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %77, i64 %64, i64 %79
%126 = load i8, i8* %125
%127 = icmp eq i8 %126, 46
br i1 %127, label %135, label %128
128: ; preds = %124
%129 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %77, i64 %64, i64 %89
%130 = load i8, i8* %129
%131 = icmp eq i8 %130, 46
br i1 %131, label %135, label %132
132: ; preds = %128
%133 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.16, i64 0, i64 0), i32 %84, i32 %75, i32 %68)
br label %135
134: ; preds = %87, %83
br i1 %76, label %135, label %151
135: ; preds = %132, %128, %124, %134
%136 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %77, i64 %64, i64 %79
%137 = load i8, i8* %136
%138 = icmp eq i8 %137, 46
br i1 %138, label %151, label %139
139: ; preds = %135
%140 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.17, i64 0, i64 0), i32 %84, i32 %75, i32 %68)
br i1 %65, label %158, label %141
141: ; preds = %139
%142 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %70, i64 %67, i64 %79
%143 = load i8, i8* %142
%144 = icmp eq i8 %143, 46
br i1 %144, label %152, label %145
145: ; preds = %141
%146 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %77, i64 %67, i64 %79
%147 = load i8, i8* %146
%148 = icmp eq i8 %147, 46
br i1 %148, label %152, label %149
149: ; preds = %145
%150 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.18, i64 0, i64 0), i32 %84, i32 %75, i32 %68)
br label %152
151: ; preds = %123, %135, %134
br i1 %65, label %158, label %152
152: ; preds = %103, %149, %145, %141, %151
%153 = getelementptr inbounds [10 x [10 x [10 x i8]]], [10 x [10 x [10 x i8]]]* %1, i64 0, i64 %70, i64 %67, i64 %79
%154 = load i8, i8* %153
%155 = icmp eq i8 %154, 46
br i1 %155, label %158, label %156
156: ; preds = %152
%157 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @.str.19, i64 0, i64 0), i32 %84, i32 %75, i32 %68)
br label %158
158: ; preds = %139, %78, %156, %152, %151
%159 = add nuw nsw i64 %79, 1
%160 = icmp eq i64 %159, %62
br i1 %160, label %161, label %78
161: ; preds = %158, %71
%162 = phi i64 [ %72, %71 ], [ %77, %158 ]
%163 = icmp eq i64 %162, %61
br i1 %163, label %164, label %69
164: ; preds = %161
%165 = add nuw nsw i64 %64, 1
%166 = icmp eq i64 %165, %60
br i1 %166, label %167, label %63
167: ; preds = %164, %41
%168 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.31, i64 0, i64 0))
ret i32 0
}