#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 */
typedef int /*<<< orphan*/ FILE;

/* Variables and functions */
scalar_t__ EOF;
int /*<<< orphan*/ EXIT_FAILURE;
int /*<<< orphan*/ EXIT_SUCCESS;
int /*<<< orphan*/ exit(int /*<<< orphan*/);
int /*<<< orphan*/ fclose(int /*<<< orphan*/ *);
int /*<<< orphan*/ *fgets(char *, int, int /*<<< orphan*/ *);
int /*<<< orphan*/ *fopen(char *, char *);
int /*<<< orphan*/ fprintf(int /*<<< orphan*/, char *, char *);
scalar_t__ fscanf(int /*<<< orphan*/ *, char *, int *);
char *index(char *, char);
int /*<<< orphan*/ memset(char *, int /*<<< orphan*/, int);
int /*<<< orphan*/ printf(char *, ...);
int /*<<< orphan*/ putchar(char);
int /*<<< orphan*/ sscanf(char *, char *, int *);
int /*<<< orphan*/ stderr;
int strlen(char *);
int main(int argc, char **argv) {
  int i;
  char teststring[256];
  int loc;
  char *gstart;
  char plane0width[0x10000];
  FILE *infilefp;
  if ((infilefp = fopen(argv[1], "r")) == NULL) {
    fprintf(stderr, "ERROR - hex input file %s not found.\n\n", argv[1]);
    exit(EXIT_FAILURE);
  }
  memset(plane0width, 0, 0x10000 * sizeof(char));
  teststring[256] = '\0';
  while (fgets(teststring, 256 - 1, infilefp) != NULL) {
    sscanf(teststring, "%X", &loc);
    gstart = index(teststring, ':') + 1;
    plane0width[loc] = strlen(gstart) <= 34 ? 1 : 2;
  }
  fclose(infilefp);
  if ((infilefp = fopen(argv[2], "r")) == NULL) {
    fprintf(stderr, "ERROR - combining characters file %s not found.\n\n",
            argv[2]);
    exit(EXIT_FAILURE);
  }
  while (fscanf(infilefp, "%X", &loc) != EOF)
    plane0width[loc] = 0;
  fclose(infilefp);
  plane0width[0] = 0;
  for (i = 0x0001; i <= 0x001F; i++)
    plane0width[i] = -1;
  for (i = 0x007F; i <= 0x009F; i++)
    plane0width[i] = -1;
  plane0width[0x034F] = 0;
  plane0width[0x180B] = 0;
  plane0width[0x180C] = 0;
  plane0width[0x180D] = 0;
  plane0width[0x180E] = 0;
  plane0width[0x200B] = 0;
  plane0width[0x200C] = 0;
  plane0width[0x200D] = 0;
  plane0width[0x200E] = 0;
  plane0width[0x200F] = 0;
  plane0width[0x202A] = 0;
  plane0width[0x202B] = 0;
  plane0width[0x202C] = 0;
  plane0width[0x202D] = 0;
  plane0width[0x202E] = 0;
  plane0width[0x2060] = 0;
  plane0width[0x2061] = 0;
  plane0width[0x2062] = 0;
  plane0width[0x2063] = 0;
  plane0width[0x2064] = 0;
  plane0width[0x206A] = 0;
  plane0width[0x206B] = 0;
  plane0width[0x206C] = 0;
  plane0width[0x206D] = 0;
  plane0width[0x206E] = 0;
  plane0width[0x206F] = 0;
  for (i = 0x2FF0; i <= 0x2FFB; i++)
    plane0width[i] = 0;
  plane0width[0x303E] = 0;
  for (i = 0xFE00; i <= 0xFE0F; i++)
    plane0width[i] = 0;
  plane0width[0xFEFF] = 0;
  plane0width[0xFFF9] = 0;
  plane0width[0xFFFA] = 0;
  plane0width[0xFFFB] = 0;
  for (i = 0x1160; i <= 0x11FF; i++)
    plane0width[i] = 0;
  for (i = 0xE000; i <= 0xF8FF; i++) {
    if (plane0width[i] == 0)
      plane0width[i] = 2;
  }
  for (i = 0xFDD0; i <= 0xFDEF; i++)
    plane0width[i] = -1;
  plane0width[0xFFFE] = -1;
  plane0width[0xFFFF] = -1;
  for (i = 0xD800; i <= 0xDFFF; i++)
    plane0width[i] = -1;
  printf("/*\n");
  printf("   wcwidth() and wcswidth() functions, as per IEEE 1003.1-2008\n");
  printf("   System Interfaces, pp. 2241 and 2251.\n\n");
  printf("   Author: Paul Hardy, 2013\n\n");
  printf("   Copyright (c) 2013 Paul Hardy\n\n");
  printf("   LICENSE:\n");
  printf("\n");
  printf("      This program is free software: you can redistribute it and/or "
         "modify\n");
  printf("      it under the terms of the GNU General Public License as "
         "published by\n");
  printf("      the Free Software Foundation, either version 2 of the License, "
         "or\n");
  printf("      (at your option) any later version.\n");
  printf("\n");
  printf("      This program is distributed in the hope that it will be "
         "useful,\n");
  printf(
      "      but WITHOUT ANY WARRANTY; without even the implied warranty of\n");
  printf(
      "      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n");
  printf("      GNU General Public License for more details.\n");
  printf("\n");
  printf("      You should have received a copy of the GNU General Public "
         "License\n");
  printf("      along with this program.  If not, see "
         "<http://www.gnu.org/licenses/>.\n");
  printf("*/\n\n");
  printf("#include <wchar.h>\n\n");
  printf("#define PLANE1_ZEROES 177\n\n");
  printf("\n\n");
  printf("/* wcwidth() -- return charcell positions of one code point */\n");
  printf("inline int wcwidth(wchar_t wc) {\n");
  printf("   return(wcswidth(&wc, 1));\n");
  printf("}\n");
  printf("\n\n");
  printf("int wcswidth(const wchar_t *pwcs, size_t n) {\n\n");
  printf("   int i;                    /* loop variable                        "
         "              */\n");
  printf("   unsigned codept;          /* Unicode code point of current "
         "character            */\n");
  printf("   unsigned plane;           /* Unicode plane, 0x00..0x10            "
         "              */\n");
  printf("   unsigned lower16;         /* lower 16 bits of Unicode code point  "
         "              */\n");
  printf("   int lowpt, midpt, highpt; /* for binary searching in "
         "plane1zeroes[]             */\n");
  printf("   int found;                /* for binary searching in "
         "plane1zeroes[]             */\n");
  printf("   int totalwidth;           /* total width of string, in charcells "
         "(1 or 2/glyph) */\n");
  printf("   int illegalchar;          /* Whether or not tihs code point is "
         "illegal          */\n");
  putchar('\n');
  printf("   char plane0width[0x10000] = {");
  for (i = 0; i < 0x10000; i++) {
    if ((i & 0x1F) == 0)
      printf("\n      /* U+%04X */ ", i);
    printf("%d,", plane0width[i]);
  }
  printf("};\n\n");
  printf("\n");
  printf("   /*\n");
  printf("      Zero-width code points in Supplemental Multilingual Plane\n");
  printf("   */\n");
  printf("   int plane1zeroes[PLANE1_ZEROES] = {\n");
  printf("      /* Phaistos Disc */\n");
  printf("      0x0101FD,\n");
  printf("      /* Kharoshthi Combining Glyphs */\n");
  printf("      "
         "0x010A01,0x010A02,0x010A03,0x010A05,0x010A06,0x010A0C,0x010A0D,\n");
  printf("      0x010A0E,0x010A0F,0x010A38,0x010A39,0x010A3A,0x010A3F,\n");
  printf("      /* Brahmi Combining Glyphs */\n");
  printf("      "
         "0x011000,0x011001,0x011002,0x011038,0x011039,0x01103A,0x01103B,\n");
  printf("      "
         "0x01103C,0x01103D,0x01103E,0x01103F,0x011040,0x011041,0x011042,\n");
  printf("      0x011043,0x011044,0x011045,0x011046,\n");
  printf("      /* Kaithi Combining Glyphs */\n");
  printf("      "
         "0x011080,0x011081,0x011082,0x0110B0,0x0110B1,0x0110B2,0x0110B3,\n");
  printf("      "
         "0x0110B4,0x0110B5,0x0110B6,0x0110B7,0x0110B8,0x0110B9,0x0110BA,\n");
  printf("      /* Chakma Combining Glyphs */\n");
  printf("      "
         "0x011100,0x011101,0x011102,0x011127,0x011128,0x011129,0x01112A,\n");
  printf("      "
         "0x01112B,0x01112C,0x01112D,0x01112E,0x01112F,0x011130,0x011131,\n");
  printf("      0x011132,0x011133,0x011134,\n");
  printf("      /* Sharada Combining Glyphs */\n");
  printf("      "
         "0x011180,0x011181,0x011182,0x0111B3,0x0111B4,0x0111B5,0x0111B6,\n");
  printf("      "
         "0x0111B7,0x0111B8,0x0111B9,0x0111BA,0x0111BB,0x0111BC,0x0111BD,\n");
  printf("      0x0111BE,0x0111BF,0x0111C0,\n");
  printf("      /* Takri Combining Glyphs */\n");
  printf("      "
         "0x0116AB,0x0116AC,0x0116AD,0x0116AE,0x0116AF,0x0116B0,0x0116B1,\n");
  printf("      0x0116B2,0x0116B3,0x0116B4,0x0116B5,0x0116B6,0x0116B7,\n");
  printf("      /* Miao Combining Glyphs */\n");
  printf("      "
         "0x016F51,0x016F52,0x016F53,0x016F54,0x016F55,0x016F56,0x016F57,\n");
  printf("      "
         "0x016F58,0x016F59,0x016F5A,0x016F5B,0x016F5C,0x016F5D,0x016F5E,\n");
  printf("      "
         "0x016F5F,0x016F60,0x016F61,0x016F62,0x016F63,0x016F64,0x016F65,\n");
  printf("      "
         "0x016F66,0x016F67,0x016F68,0x016F69,0x016F6A,0x016F6B,0x016F6C,\n");
  printf("      "
         "0x016F6D,0x016F6E,0x016F6F,0x016F70,0x016F71,0x016F72,0x016F73,\n");
  printf("      "
         "0x016F74,0x016F75,0x016F76,0x016F77,0x016F78,0x016F79,0x016F7A,\n");
  printf("      0x016F7B,0x016F7C,0x016F7D,0x016F7E,\n");
  printf("      0x016F8F,0x016F90,0x016F91,0x016F92,\n");
  printf("      /* Musical Symbols Combining Glyphs */\n");
  printf("      "
         "0x01D159,0x01D165,0x01D166,0x01D167,0x01D168,0x01D169,0x01D16D,\n");
  printf("      "
         "0x01D16E,0x01D16F,0x01D170,0x01D171,0x01D172,0x01D17B,0x01D17C,\n");
  printf("      "
         "0x01D17D,0x01D17E,0x01D17F,0x01D180,0x01D181,0x01D182,0x01D185,\n");
  printf("      "
         "0x01D186,0x01D187,0x01D188,0x01D189,0x01D18A,0x01D18B,0x01D1AA,\n");
  printf("      0x01D1AB,0x01D1AC,0x01D1AD,\n");
  printf("      /* Ancient Greek Musical Notation */\n");
  printf("      0x01D242,0x01D243,0x01D244\n");
  printf("   };\n\n");
  printf("\n");
  printf("   illegalchar = totalwidth = 0;\n");
  printf("   for (i = 0; !illegalchar && i < n; i++) {\n");
  printf("      codept  = pwcs[i];\n");
  printf("      plane   = codept >> 16;\n");
  printf("      lower16 = codept & 0xFFFF;\n");
  printf("      if (plane == 0) { /* the most common case */\n");
  printf("         if (plane0width[lower16] < 0) illegalchar = 1;\n");
  printf("         else totalwidth += plane0width[lower16];\n");
  printf("      }\n");
  printf("      else { /* a higher plane or beyond Unicode range */\n");
  printf("         if (lower16 == 0xFFFE || lower16 == 0xFFFF) {\n");
  printf("            illegalchar = 1;\n");
  printf("         }\n");
  printf("         else if (plane > 0x10) {\n");
  printf("            illegalchar = 1;\n");
  printf("         }\n");
  printf("         else if (plane == 1) { /* Supplementary Multilingual Plane "
         "*/\n");
  printf("            /*\n");
  printf("               Perform a binary search in plane1zeroes[] sparse list "
         "for\n");
  printf("               combining code points and other zero-width code "
         "points.\n");
  printf("            */\n");
  printf("            lowpt  = 0;\n");
  printf("            highpt = PLANE1_ZEROES - 1;\n");
  printf("\n");
  printf("            while (lowpt < highpt) {\n");
  printf("               midpt  = (lowpt + highpt) >> 1;\n");
  printf("               if (plane1zeroes[midpt] < codept)\n");
  printf("                  lowpt = midpt + 1;\n");
  printf("               else if (plane1zeroes[midpt] > codept)\n");
  printf("                  highpt = midpt - 1;\n");
  printf("               else\n");
  printf("                  lowpt = highpt = midpt; /* found the match */\n");
  printf("            }\n");
  printf("\n");
  printf("            if (lowpt >= 0 && codept == plane1zeroes[lowpt]) {\n");
  printf("               found = 1;\n");
  printf("            }\n");
  printf("            else if (highpt < PLANE1_ZEROES && codept == "
         "plane1zeroes[highpt]) {\n");
  printf("               found = 1;\n");
  printf("            }\n");
  printf("            else {\n");
  printf("               found = 0;\n");
  printf("            }\n");
  printf("\n");
  printf("            if (!found) totalwidth += 2; /* default for SMP glyphs "
         "*/\n");
  printf("         }\n");
  printf("         /* Other non-printing in higher planes; return -1 as per "
         "IEEE 1003.1-2008. */\n");
  printf("         else if (/* language tags */\n");
  printf("                  codept == 0x0E0001 || (codept >= 0x0E0020 && "
         "codept <= 0x0E007F) ||\n");
  printf("                  /* variation selectors, 0x0E0100..0x0E01EF */\n");
  printf("                  (codept >= 0x0E0100 && codept <= 0x0E01EF)) {\n");
  printf("            illegalchar = 1;\n");
  printf("         }\n");
  printf("         /*\n");
  printf("            Unicode plane 0x02..0x10 printing character\n");
  printf("         */\n");
  printf("         else {\n");
  printf("            totalwidth += 2; /* default width of 2 charcells for "
         "legal glyphs */\n");
  printf("         }\n");
  printf("\n");
  printf("      }\n");
  printf("   }\n");
  printf("   if (illegalchar) totalwidth = -1;\n");
  printf("\n");
  printf("   return(totalwidth);\n");
  printf("\n");
  printf("}\n");
  exit(EXIT_SUCCESS);
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x10140,%rsp
movl   $0x0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xe18(%rip),%rsi
call   10d0 <fopen@plt>
mov    %rax,-0x10138(%rbp)
cmp    $0x0,%rax
jne    1229 <main+0x69>
mov    0x3dd3(%rip),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdx
lea    0xdec(%rip),%rsi
call   10b0 <fprintf@plt>
mov    0x3dae(%rip),%rax
mov    (%rax),%edi
call   10e0 <exit@plt>
lea    -0x10130(%rbp),%rdi
xor    %esi,%esi
mov    $0x10000,%edx
call   1070 <memset@plt>
movb   $0x0,-0x20(%rbp)
lea    -0x120(%rbp),%rdi
mov    -0x10138(%rbp),%rdx
mov    $0xff,%esi
call   10a0 <fgets@plt>
cmp    $0x0,%rax
je     12cb <main+0x10b>
lea    -0x120(%rbp),%rdi
lea    0xdb9(%rip),%rsi
lea    -0x124(%rbp),%rdx
call   10c0 <sscanf@plt>
lea    -0x120(%rbp),%rdi
mov    $0x3a,%esi
call   1090 <index@plt>
add    $0x1,%rax
mov    %rax,-0x130(%rbp)
mov    -0x130(%rbp),%rdi
call   1050 <strlen@plt>
mov    %eax,%edx
mov    $0x2,%eax
mov    $0x1,%ecx
cmp    $0x22,%edx
cmovle %ecx,%eax
mov    %al,%cl
movslq -0x124(%rbp),%rax
mov    %cl,-0x10130(%rbp,%rax,1)
jmp    1240 <main+0x80>
mov    -0x10138(%rbp),%rdi
call   1040 <fclose@plt>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
lea    0xd1a(%rip),%rsi
call   10d0 <fopen@plt>
mov    %rax,-0x10138(%rbp)
cmp    $0x0,%rax
jne    1327 <main+0x167>
mov    0x3cd5(%rip),%rax
mov    (%rax),%edi
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdx
lea    0xd18(%rip),%rsi
call   10b0 <fprintf@plt>
mov    0x3cb0(%rip),%rax
mov    (%rax),%edi
call   10e0 <exit@plt>
jmp    132c <main+0x16c>
mov    -0x10138(%rbp),%rdi
lea    0xcef(%rip),%rsi
lea    -0x124(%rbp),%rdx
call   1080 <fscanf@plt>
mov    0x3c9b(%rip),%rcx
cmp    (%rcx),%rax
je     136a <main+0x1aa>
movslq -0x124(%rbp),%rax
movb   $0x0,-0x10130(%rbp,%rax,1)
jmp    132c <main+0x16c>
mov    -0x10138(%rbp),%rdi
call   1040 <fclose@plt>
movb   $0x0,-0x10130(%rbp)
movl   $0x1,-0x14(%rbp)
cmpl   $0x1f,-0x14(%rbp)
jg     13a8 <main+0x1e8>
movslq -0x14(%rbp),%rax
movb   $0xff,-0x10130(%rbp,%rax,1)
ff
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1384 <main+0x1c4>
movl   $0x7f,-0x14(%rbp)
cmpl   $0x9f,-0x14(%rbp)
jg     13d6 <main+0x216>
movslq -0x14(%rbp),%rax
movb   $0xff,-0x10130(%rbp,%rax,1)
ff
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    13af <main+0x1ef>
movb   $0x0,-0xfde1(%rbp)
movb   $0x0,-0xe925(%rbp)
movb   $0x0,-0xe924(%rbp)
movb   $0x0,-0xe923(%rbp)
movb   $0x0,-0xe922(%rbp)
movb   $0x0,-0xe125(%rbp)
movb   $0x0,-0xe124(%rbp)
movb   $0x0,-0xe123(%rbp)
movb   $0x0,-0xe122(%rbp)
movb   $0x0,-0xe121(%rbp)
movb   $0x0,-0xe106(%rbp)
movb   $0x0,-0xe105(%rbp)
movb   $0x0,-0xe104(%rbp)
movb   $0x0,-0xe103(%rbp)
movb   $0x0,-0xe102(%rbp)
movb   $0x0,-0xe0d0(%rbp)
movb   $0x0,-0xe0cf(%rbp)
movb   $0x0,-0xe0ce(%rbp)
movb   $0x0,-0xe0cd(%rbp)
movb   $0x0,-0xe0cc(%rbp)
movb   $0x0,-0xe0c6(%rbp)
movb   $0x0,-0xe0c5(%rbp)
movb   $0x0,-0xe0c4(%rbp)
movb   $0x0,-0xe0c3(%rbp)
movb   $0x0,-0xe0c2(%rbp)
movb   $0x0,-0xe0c1(%rbp)
movl   $0x2ff0,-0x14(%rbp)
cmpl   $0x2ffb,-0x14(%rbp)
jg     14ba <main+0x2fa>
movslq -0x14(%rbp),%rax
movb   $0x0,-0x10130(%rbp,%rax,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1493 <main+0x2d3>
movb   $0x0,-0xd0f2(%rbp)
movl   $0xfe00,-0x14(%rbp)
cmpl   $0xfe0f,-0x14(%rbp)
jg     14ef <main+0x32f>
movslq -0x14(%rbp),%rax
movb   $0x0,-0x10130(%rbp,%rax,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    14c8 <main+0x308>
movb   $0x0,-0x231(%rbp)
movb   $0x0,-0x137(%rbp)
movb   $0x0,-0x136(%rbp)
movb   $0x0,-0x135(%rbp)
movl   $0x1160,-0x14(%rbp)
cmpl   $0x11ff,-0x14(%rbp)
jg     1539 <main+0x379>
movslq -0x14(%rbp),%rax
movb   $0x0,-0x10130(%rbp,%rax,1)
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1512 <main+0x352>
movl   $0xe000,-0x14(%rbp)
cmpl   $0xf8ff,-0x14(%rbp)
jg     1581 <main+0x3c1>
movslq -0x14(%rbp),%rax
movsbl -0x10130(%rbp,%rax,1),%eax
ff
cmp    $0x0,%eax
jne    156e <main+0x3ae>
movslq -0x14(%rbp),%rax
movb   $0x2,-0x10130(%rbp,%rax,1)
02
jmp    1573 <main+0x3b3>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1540 <main+0x380>
movl   $0xfdd0,-0x14(%rbp)
cmpl   $0xfdef,-0x14(%rbp)
jg     15af <main+0x3ef>
movslq -0x14(%rbp),%rax
movb   $0xff,-0x10130(%rbp,%rax,1)
ff
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1588 <main+0x3c8>
movb   $0xff,-0x132(%rbp)
movb   $0xff,-0x131(%rbp)
movl   $0xd800,-0x14(%rbp)
cmpl   $0xdfff,-0x14(%rbp)
jg     15eb <main+0x42b>
movslq -0x14(%rbp),%rax
movb   $0xff,-0x10130(%rbp,%rax,1)
ff
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    15c4 <main+0x404>
lea    0x1d0b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xa5e(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xa90(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xaad(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xabd(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xad2(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xa81(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xac3(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xb01(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xb3f(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xb7a(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xa3b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xb89(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xbc2(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xbfa(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xc31(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x9f5(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xc49(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xc84(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xcc3(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xcba(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xcc1(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x9a0(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xcc1(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xcf3(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xd07(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1de5(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x95a(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xcfb(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xd1d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xd66(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xdaf(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xdf8(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xe41(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xe8a(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xed3(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf1c(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xf5b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movl   $0x0,-0x14(%rbp)
cmpl   $0x10000,-0x14(%rbp)
jge    1865 <main+0x6a5>
mov    -0x14(%rbp),%eax
and    $0x1f,%eax
cmp    $0x0,%eax
jne    183d <main+0x67d>
mov    -0x14(%rbp),%esi
lea    0xf48(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
movslq -0x14(%rbp),%rax
movsbl -0x10130(%rbp,%rax,1),%esi
ff
lea    0xf43(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    -0x14(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x14(%rbp)
jmp    1810 <main+0x650>
lea    0x1839(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x84d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1a72(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf01(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xc51(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf26(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf40(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf4d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf50(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xf6b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xfa4(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xfd4(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0xfeb(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1024(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x105d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x107b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1092(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x10cb(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1104(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x111b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1154(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x118d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x11a2(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x11ba(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x11f3(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x122c(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1241(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1257(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1290(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x12c0(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x12d5(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x130e(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1347(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1380(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x13b9(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x13f2(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x142b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1449(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1467(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1487(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x14c0(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x14f9(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1532(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x156b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1580(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x159e(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x15b2(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x5c9(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x159e(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x15b2(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x15d2(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x15de(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x15ef(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1603(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1629(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1654(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x19c1(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x166b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1698(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x16c2(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1986(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x16c4(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1698(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x195c(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x16bd(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x16f7(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x16f9(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1735(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x8c8(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1761(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x176c(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x479(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1779(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1791(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x17b3(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x17d7(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x17ef(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1818(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1831(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1838(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x186b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x3ed(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x185e(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1890(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1833(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x188f(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1866(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1809(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x18b7(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x18bd(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x17df(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x361(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x18ae(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x17b8(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x18d9(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1923(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x193c(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1985(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x19b8(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1492(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1756(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1502(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x19c1(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x6e1(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x17da(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x19d0(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x1702(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x281(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x16e9(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x16de(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x19dc(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x249(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x19e6(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x22d(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
lea    0x169b(%rip),%rdi
mov    $0x0,%al
call   1060 <printf@plt>
mov    0x3112(%rip),%rax
mov    (%rax),%edi
call   10e0 <exit@plt>

x86 assembly (clang, -O2):
<main>:
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
sub    $0x10110,%rsp
mov    %rsi,%r14
mov    0x8(%rsi),%rdi
lea    0x2598(%rip),%rsi
call   10e0 <fopen@plt>
test   %rax,%rax
jne    1211 <main+0x41>
mov    0x3dd9(%rip),%rax
mov    (%rax),%edi
mov    0x8(%r14),%rdx
lea    0xdf4(%rip),%rsi
jmp    12e0 <main+0x110>
mov    %rax,%r12
lea    0x110(%rsp),%rdi
xor    %esi,%esi
mov    $0x10000,%edx
call   1080 <memset@plt>
movb   $0x0,0x110(%rsp)
lea    0x10(%rsp),%rdi
mov    $0xff,%esi
mov    %r12,%rdx
call   10b0 <fgets@plt>
test   %rax,%rax
je     12af <main+0xdf>
lea    0xdd9(%rip),%r15
lea    0x10(%rsp),%rbx
lea    0xc(%rsp),%r13
nopl   0x0(%rax,%rax,1)
mov    %rbx,%rdi
mov    %r15,%rsi
mov    %r13,%rdx
call   10d0 <sscanf@plt>
mov    %rbx,%rdi
mov    $0x3a,%esi
call   10a0 <index@plt>
lea    0x1(%rax),%rdi
call   1060 <strlen@plt>
cmp    $0x23,%eax
setl   %al
mov    $0x2,%cl
sub    %al,%cl
movslq 0xc(%rsp),%rax
mov    %cl,0x110(%rsp,%rax,1)
mov    %rbx,%rdi
mov    $0xff,%esi
mov    %r12,%rdx
call   10b0 <fgets@plt>
test   %rax,%rax
jne    1260 <main+0x90>
mov    %r12,%rdi
call   1050 <fclose@plt>
mov    0x10(%r14),%rdi
lea    0x24c4(%rip),%rsi
call   10e0 <fopen@plt>
test   %rax,%rax
jne    12f3 <main+0x123>
mov    0x3d05(%rip),%rax
mov    (%rax),%edi
mov    0x10(%r14),%rdx
lea    0xd4a(%rip),%rsi
call   10c0 <fprintf@plt>
mov    0x3ce4(%rip),%rax
mov    (%rax),%edi
call   10f0 <exit@plt>
mov    %rax,%rbx
lea    0xd2a(%rip),%rsi
lea    0xc(%rsp),%rdx
mov    %rax,%rdi
call   1090 <fscanf@plt>
mov    0x3cd7(%rip),%r12
cmp    (%r12),%rax
je     1351 <main+0x181>
lea    0xd09(%rip),%r14
lea    0xc(%rsp),%r15
cs nopw 0x0(%rax,%rax,1)
nopl   (%rax)
movslq 0xc(%rsp),%rax
movb   $0x0,0x110(%rsp,%rax,1)
mov    %rbx,%rdi
mov    %r14,%rsi
mov    %r15,%rdx
call   1090 <fscanf@plt>
cmp    (%r12),%rax
jne    1330 <main+0x160>
mov    %rbx,%rdi
call   1050 <fclose@plt>
movb   $0x0,0x110(%rsp)
pcmpeqd %xmm0,%xmm0
movdqu %xmm0,0x111(%rsp)
movdqu %xmm0,0x120(%rsp)
movdqu %xmm0,0x18f(%rsp)
movdqu %xmm0,0x19f(%rsp)
movb   $0xff,0x1af(%rsp)
ff
movb   $0x0,0x45f(%rsp)
movq   $0x0,0x3100(%rsp)
movl   $0x0,0x3108(%rsp)
movb   $0x0,0x314e(%rsp)
pxor   %xmm0,%xmm0
movdqa %xmm0,0xff10(%rsp)
movb   $0x0,0x1000f(%rsp)
movw   $0x0,0x10109(%rsp)
movb   $0x0,0x1010b(%rsp)
movdqa %xmm0,0x1270(%rsp)
movdqa %xmm0,0x1280(%rsp)
movdqa %xmm0,0x1290(%rsp)
movdqa %xmm0,0x12a0(%rsp)
movdqa %xmm0,0x12b0(%rsp)
movdqa %xmm0,0x12c0(%rsp)
movdqa %xmm0,0x12d0(%rsp)
movdqa %xmm0,0x12e0(%rsp)
movdqa %xmm0,0x12f0(%rsp)
movdqa %xmm0,0x1300(%rsp)
movl   $0x0,0x191b(%rsp)
movb   $0x0,0x211f(%rsp)
movl   $0x0,0x211b(%rsp)
movb   $0x0,0x213e(%rsp)
movl   $0x0,0x213a(%rsp)
movb   $0x0,0x2174(%rsp)
movl   $0x0,0x2170(%rsp)
movw   $0x0,0x217e(%rsp)
movl   $0x0,0x217a(%rsp)
xor    %eax,%eax
jmp    14b0 <main+0x2e0>
cs nopw 0x0(%rax,%rax,1)
add    $0x10,%rax
cmp    $0x1900,%rax
je     1661 <main+0x491>
movq   0xe110(%rsp,%rax,1),%xmm2
movdqa %xmm2,%xmm1
pcmpeqb %xmm0,%xmm1
movd   %xmm1,%ecx
test   $0x1,%cl
je     14d2 <main+0x302>
movb   $0x2,0xe110(%rsp,%rax,1)
02
movdqa %xmm1,%xmm3
pslld  $0x8,%xmm3
movd   %xmm3,%ecx
shr    $0x10,%ecx
test   $0x1,%cl
je     14ef <main+0x31f>
movb   $0x2,0xe111(%rsp,%rax,1)
02
pshuflw $0x55,%xmm2,%xmm3
pcmpeqb %xmm0,%xmm3
pextrw $0x2,%xmm3,%ecx
test   $0x1,%cl
je     150a <main+0x33a>
movb   $0x2,0xe112(%rsp,%rax,1)
02
movdqa %xmm1,%xmm3
psllq  $0x18,%xmm3
pextrw $0x3,%xmm3,%ecx
test   $0x1,%cl
je     1525 <main+0x355>
movb   $0x2,0xe113(%rsp,%rax,1)
02
pshufd $0x55,%xmm2,%xmm2
pcmpeqb %xmm0,%xmm2
pextrw $0x4,%xmm2,%ecx
test   $0x1,%cl
je     1540 <main+0x370>
movb   $0x2,0xe114(%rsp,%rax,1)
02
movdqa %xmm1,%xmm2
pslldq $0x5,%xmm2
pextrw $0x5,%xmm2,%ecx
test   $0x1,%cl
je     155b <main+0x38b>
movb   $0x2,0xe115(%rsp,%rax,1)
02
pextrw $0x3,%xmm1,%ecx
test   $0x1,%cl
je     156d <main+0x39d>
movb   $0x2,0xe116(%rsp,%rax,1)
02
pslldq $0x7,%xmm1
pextrw $0x7,%xmm1,%ecx
test   $0x1,%cl
je     1584 <main+0x3b4>
movb   $0x2,0xe117(%rsp,%rax,1)
02
movq   0xe118(%rsp,%rax,1),%xmm2
movdqa %xmm2,%xmm1
pcmpeqb %xmm0,%xmm1
movd   %xmm1,%ecx
test   $0x1,%cl
je     15a6 <main+0x3d6>
movb   $0x2,0xe118(%rsp,%rax,1)
02
movdqa %xmm1,%xmm3
pslld  $0x8,%xmm3
movd   %xmm3,%ecx
shr    $0x10,%ecx
test   $0x1,%cl
je     15c3 <main+0x3f3>
movb   $0x2,0xe119(%rsp,%rax,1)
02
pshuflw $0x55,%xmm2,%xmm3
pcmpeqb %xmm0,%xmm3
pextrw $0x2,%xmm3,%ecx
test   $0x1,%cl
je     15de <main+0x40e>
movb   $0x2,0xe11a(%rsp,%rax,1)
02
movdqa %xmm1,%xmm3
psllq  $0x18,%xmm3
pextrw $0x3,%xmm3,%ecx
test   $0x1,%cl
je     15f9 <main+0x429>
movb   $0x2,0xe11b(%rsp,%rax,1)
02
pshufd $0x55,%xmm2,%xmm2
pcmpeqb %xmm0,%xmm2
pextrw $0x4,%xmm2,%ecx
test   $0x1,%cl
je     1614 <main+0x444>
movb   $0x2,0xe11c(%rsp,%rax,1)
02
movdqa %xmm1,%xmm2
pslldq $0x5,%xmm2
pextrw $0x5,%xmm2,%ecx
test   $0x1,%cl
je     162f <main+0x45f>
movb   $0x2,0xe11d(%rsp,%rax,1)
02
pextrw $0x3,%xmm1,%ecx
test   $0x1,%cl
je     1641 <main+0x471>
movb   $0x2,0xe11e(%rsp,%rax,1)
02
pslldq $0x7,%xmm1
pextrw $0x7,%xmm1,%ecx
test   $0x1,%cl
je     14a0 <main+0x2d0>
movb   $0x2,0xe11f(%rsp,%rax,1)
02
jmp    14a0 <main+0x2d0>
pcmpeqd %xmm0,%xmm0
movdqa %xmm0,0xfef0(%rsp)
movdqa %xmm0,0xfee0(%rsp)
movw   $0xffff,0x1010e(%rsp)
lea    0xd910(%rsp),%rdi
mov    $0x800,%edx
mov    $0xff,%esi
call   1080 <memset@plt>
lea    0x1be9(%rip),%rdi
call   1040 <puts@plt>
lea    0x9eb(%rip),%rdi
call   1040 <puts@plt>
lea    0xa1e(%rip),%rdi
call   1040 <puts@plt>
lea    0xa3c(%rip),%rdi
call   1040 <puts@plt>
lea    0xa4d(%rip),%rdi
call   1040 <puts@plt>
lea    0xa63(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xa59(%rip),%rdi
call   1040 <puts@plt>
lea    0xa98(%rip),%rdi
call   1040 <puts@plt>
lea    0xad7(%rip),%rdi
call   1040 <puts@plt>
lea    0xb13(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xb27(%rip),%rdi
call   1040 <puts@plt>
lea    0xb61(%rip),%rdi
call   1040 <puts@plt>
lea    0xb9a(%rip),%rdi
call   1040 <puts@plt>
lea    0xbd2(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0xbef(%rip),%rdi
call   1040 <puts@plt>
lea    0xc2b(%rip),%rdi
call   1040 <puts@plt>
lea    0xc6b(%rip),%rdi
call   1040 <puts@plt>
lea    0xc63(%rip),%rdi
call   1040 <puts@plt>
lea    0xc6b(%rip),%rdi
call   1040 <puts@plt>
lea    0x8b9(%rip),%rbx
mov    %rbx,%rdi
call   1040 <puts@plt>
lea    0xc6b(%rip),%rdi
call   1040 <puts@plt>
lea    0xc9e(%rip),%rdi
call   1040 <puts@plt>
lea    0xcb3(%rip),%rdi
call   1040 <puts@plt>
lea    0x1dc4(%rip),%rdi
call   1040 <puts@plt>
mov    %rbx,%rdi
call   1040 <puts@plt>
lea    0xcb0(%rip),%rdi
call   1040 <puts@plt>
lea    0xcd3(%rip),%rdi
call   1040 <puts@plt>
lea    0xd1d(%rip),%rdi
call   1040 <puts@plt>
lea    0xd67(%rip),%rdi
call   1040 <puts@plt>
lea    0xdb1(%rip),%rdi
call   1040 <puts@plt>
lea    0xdfb(%rip),%rdi
call   1040 <puts@plt>
lea    0xe45(%rip),%rdi
call   1040 <puts@plt>
lea    0xe8f(%rip),%rdi
call   1040 <puts@plt>
lea    0xed9(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x7fe(%rip),%rdi
xor    %eax,%eax
call   1070 <printf@plt>
lea    0x811(%rip),%r14
lea    0x81f(%rip),%r15
xor    %ebx,%ebx
jmp    189f <main+0x6cf>
nopw   0x0(%rax,%rax,1)
movsbl 0x110(%rsp,%rbx,1),%esi
mov    %r15,%rdi
xor    %eax,%eax
call   1070 <printf@plt>
add    $0x1,%rbx
cmp    $0x10000,%rbx
je     18b2 <main+0x6e2>
test   $0x1f,%bl
jne    1880 <main+0x6b0>
mov    %r14,%rdi
mov    %ebx,%esi
xor    %eax,%eax
call   1070 <printf@plt>
jmp    1880 <main+0x6b0>
lea    0x17a2(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x19b6(%rip),%rdi
call   1040 <puts@plt>
lea    0xe9c(%rip),%rdi
call   1040 <puts@plt>
lea    0xc30(%rip),%rdi
call   1040 <puts@plt>
lea    0xec4(%rip),%rdi
call   1040 <puts@plt>
lea    0xedf(%rip),%rdi
call   1040 <puts@plt>
lea    0xeed(%rip),%rdi
call   1040 <puts@plt>
lea    0xef1(%rip),%rdi
call   1040 <puts@plt>
lea    0xf0d(%rip),%rdi
call   1040 <puts@plt>
lea    0xf47(%rip),%rdi
call   1040 <puts@plt>
lea    0xf78(%rip),%rdi
call   1040 <puts@plt>
lea    0xf90(%rip),%rdi
call   1040 <puts@plt>
lea    0xfca(%rip),%rdi
call   1040 <puts@plt>
lea    0x1004(%rip),%rdi
call   1040 <puts@plt>
lea    0x1023(%rip),%rdi
call   1040 <puts@plt>
lea    0x103b(%rip),%rdi
call   1040 <puts@plt>
lea    0x1075(%rip),%rdi
call   1040 <puts@plt>
lea    0x10af(%rip),%rdi
call   1040 <puts@plt>
lea    0x10c7(%rip),%rdi
call   1040 <puts@plt>
lea    0x1101(%rip),%rdi
call   1040 <puts@plt>
lea    0x113b(%rip),%rdi
call   1040 <puts@plt>
lea    0x1151(%rip),%rdi
call   1040 <puts@plt>
lea    0x116a(%rip),%rdi
call   1040 <puts@plt>
lea    0x11a4(%rip),%rdi
call   1040 <puts@plt>
lea    0x11de(%rip),%rdi
call   1040 <puts@plt>
lea    0x11f4(%rip),%rdi
call   1040 <puts@plt>
lea    0x120b(%rip),%rdi
call   1040 <puts@plt>
lea    0x1245(%rip),%rdi
call   1040 <puts@plt>
lea    0x1276(%rip),%rdi
call   1040 <puts@plt>
lea    0x128c(%rip),%rdi
call   1040 <puts@plt>
lea    0x12c6(%rip),%rdi
call   1040 <puts@plt>
lea    0x1300(%rip),%rdi
call   1040 <puts@plt>
lea    0x133a(%rip),%rdi
call   1040 <puts@plt>
lea    0x1374(%rip),%rdi
call   1040 <puts@plt>
lea    0x13ae(%rip),%rdi
call   1040 <puts@plt>
lea    0x13e8(%rip),%rdi
call   1040 <puts@plt>
lea    0x1407(%rip),%rdi
call   1040 <puts@plt>
lea    0x1426(%rip),%rdi
call   1040 <puts@plt>
lea    0x1447(%rip),%rdi
call   1040 <puts@plt>
lea    0x1481(%rip),%rdi
call   1040 <puts@plt>
lea    0x14bb(%rip),%rdi
call   1040 <puts@plt>
lea    0x14f5(%rip),%rdi
call   1040 <puts@plt>
lea    0x152f(%rip),%rdi
call   1040 <puts@plt>
lea    0x1545(%rip),%rdi
call   1040 <puts@plt>
lea    0x1564(%rip),%rdi
call   1040 <puts@plt>
lea    0x1579(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x156a(%rip),%rdi
call   1040 <puts@plt>
lea    0x157f(%rip),%rdi
call   1040 <puts@plt>
lea    0x15a0(%rip),%rdi
call   1040 <puts@plt>
lea    0x15ad(%rip),%rdi
call   1040 <puts@plt>
lea    0x15bf(%rip),%rdi
call   1040 <puts@plt>
lea    0x15d4(%rip),%rdi
call   1040 <puts@plt>
lea    0x15fb(%rip),%rdi
call   1040 <puts@plt>
lea    0x1627(%rip),%rdi
call   1040 <puts@plt>
lea    0x1a3d(%rip),%r14
mov    %r14,%rdi
call   1040 <puts@plt>
lea    0x163e(%rip),%rdi
call   1040 <puts@plt>
lea    0x166c(%rip),%rdi
call   1040 <puts@plt>
lea    0x1bb7(%rip),%r15
mov    %r15,%rdi
call   1040 <puts@plt>
lea    0x1a04(%rip),%r12
mov    %r12,%rdi
call   1040 <puts@plt>
lea    0x1679(%rip),%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
call   1040 <puts@plt>
mov    %r12,%rdi
call   1040 <puts@plt>
lea    0x167f(%rip),%rdi
call   1040 <puts@plt>
lea    0x16ba(%rip),%rdi
call   1040 <puts@plt>
lea    0x16bd(%rip),%rdi
call   1040 <puts@plt>
lea    0x16fa(%rip),%rdi
call   1040 <puts@plt>
lea    0x928(%rip),%rdi
call   1040 <puts@plt>
lea    0x1729(%rip),%rdi
call   1040 <puts@plt>
lea    0x1735(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1747(%rip),%rdi
call   1040 <puts@plt>
lea    0x1760(%rip),%rdi
call   1040 <puts@plt>
lea    0x1783(%rip),%rdi
call   1040 <puts@plt>
lea    0x17a8(%rip),%rdi
call   1040 <puts@plt>
lea    0x17c1(%rip),%rdi
call   1040 <puts@plt>
lea    0x17eb(%rip),%rdi
call   1040 <puts@plt>
lea    0x1805(%rip),%rdi
call   1040 <puts@plt>
lea    0x180d(%rip),%rdi
call   1040 <puts@plt>
lea    0x1918(%rip),%r13
mov    %r13,%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1828(%rip),%rdi
call   1040 <puts@plt>
lea    0x18ac(%rip),%rbx
mov    %rbx,%rdi
call   1040 <puts@plt>
mov    %r13,%rdi
call   1040 <puts@plt>
lea    0x1844(%rip),%rdi
call   1040 <puts@plt>
mov    %rbx,%rdi
call   1040 <puts@plt>
mov    %r13,%rdi
call   1040 <puts@plt>
lea    0x1893(%rip),%rdi
call   1040 <puts@plt>
lea    0x189a(%rip),%rdi
call   1040 <puts@plt>
mov    %r13,%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x18a4(%rip),%rdi
call   1040 <puts@plt>
mov    %r12,%rdi
call   1040 <puts@plt>
lea    0x18d6(%rip),%rdi
call   1040 <puts@plt>
lea    0x1921(%rip),%rdi
call   1040 <puts@plt>
lea    0x193b(%rip),%rdi
call   1040 <puts@plt>
lea    0x1985(%rip),%rdi
call   1040 <puts@plt>
lea    0x19b9(%rip),%rdi
call   1040 <puts@plt>
mov    %r15,%rdi
call   1040 <puts@plt>
mov    %r12,%rdi
call   1040 <puts@plt>
lea    0x1529(%rip),%rdi
call   1040 <puts@plt>
lea    0x19ee(%rip),%rdi
call   1040 <puts@plt>
lea    0x7a3(%rip),%rdi
call   1040 <puts@plt>
lea    0x17e8(%rip),%rdi
call   1040 <puts@plt>
lea    0x1a02(%rip),%rdi
call   1040 <puts@plt>
mov    %r12,%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
mov    %r14,%rdi
call   1040 <puts@plt>
lea    0x17e9(%rip),%rdi
call   1040 <puts@plt>
lea    0x1a21(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x1a30(%rip),%rdi
call   1040 <puts@plt>
mov    $0xa,%edi
call   1030 <putchar@plt>
lea    0x17b4(%rip),%rdi
call   1040 <puts@plt>
mov    0x31d8(%rip),%rax
mov    (%rax),%edi
call   10f0 <exit@plt>

LLVM IR (-O0):
@.str = [2 x i8] c"r\00"
@stderr = global i32 0
@.str.1 = [39 x i8] c"ERROR - hex input file %s not found.\0A\0A\00"
@EXIT_FAILURE = global i32 0
@.str.2 = [3 x i8] c"%X\00"
@.str.3 = [50 x i8] c"ERROR - combining characters file %s not found.\0A\0A\00"
@EOF = global i64 0
@.str.4 = [4 x i8] c"/*\0A\00"
@.str.5 = [64 x i8] c" wcwidth() and wcswidth() functions, as per IEEE 1003.1-2008\0A\00"
@.str.6 = [43 x i8] c" System Interfaces, pp. 2241 and 2251.\0A\0A\00"
@.str.7 = [30 x i8] c" Author: Paul Hardy, 2013\0A\0A\00"
@.str.8 = [35 x i8] c" Copyright (c) 2013 Paul Hardy\0A\0A\00"
@.str.9 = [13 x i8] c" LICENSE:\0A\00"
@.str.10 = [2 x i8] c"\0A\00"
@.str.11 = [76 x i8] c" This program is free software: you can redistribute it and/or modify\0A\00"
@.str.12 = [76 x i8] c" it under the terms of the GNU General Public License as published by\0A\00"
@.str.13 = [73 x i8] c" the Free Software Foundation, either version 2 of the License, or\0A\00"
@.str.14 = [43 x i8] c" (at your option) any later version.\0A\00"
@.str.15 = [71 x i8] c" This program is distributed in the hope that it will be useful,\0A\00"
@.str.16 = [70 x i8] c" but WITHOUT ANY WARRANTY; without even the implied warranty of\0A\00"
@.str.17 = [69 x i8] c" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\0A\00"
@.str.18 = [52 x i8] c" GNU General Public License for more details.\0A\00"
@.str.19 = [73 x i8] c" You should have received a copy of the GNU General Public License\0A\00"
@.str.20 = [77 x i8] c" along with this program. If not, see <http://www.gnu.org/licenses/>.\0A\00"
@.str.21 = [5 x i8] c"*/\0A\0A\00"
@.str.22 = [21 x i8] c"#include <wchar.h>\0A\0A\00"
@.str.23 = [28 x i8] c"#define PLANE1_ZEROES 177\0A\0A\00"
@.str.24 = [3 x i8] c"\0A\0A\00"
@.str.25 = [64 x i8] c"/* wcwidth() -- return charcell positions of one code point */\0A\00"
@.str.26 = [34 x i8] c"inline int wcwidth(wchar_t wc) {\0A\00"
@.str.27 = [30 x i8] c" return(wcswidth(&wc, 1));\0A\00"
@.str.28 = [3 x i8] c"}\0A\00"
@.str.29 = [48 x i8] c"int wcswidth(const wchar_t *pwcs, size_t n) {\0A\0A\00"
@.str.30 = [87 x i8] c" int i; /* loop variable */\0A\00"
@.str.31 = [87 x i8] c" unsigned codept; /* Unicode code point of current character */\0A\00"
@.str.32 = [87 x i8] c" unsigned plane; /* Unicode plane, 0x00..0x10 */\0A\00"
@.str.33 = [87 x i8] c" unsigned lower16; /* lower 16 bits of Unicode code point */\0A\00"
@.str.34 = [87 x i8] c" int lowpt, midpt, highpt; /* for binary searching in plane1zeroes[] */\0A\00"
@.str.35 = [87 x i8] c" int found; /* for binary searching in plane1zeroes[] */\0A\00"
@.str.36 = [87 x i8] c" int totalwidth; /* total width of string, in charcells (1 or 2/glyph) */\0A\00"
@.str.37 = [87 x i8] c" int illegalchar; /* Whether or not tihs code point is illegal */\0A\00"
@.str.38 = [33 x i8] c" char plane0width[0x10000] = {\00"
@.str.39 = [21 x i8] c"\0A /* U+%04X */ \00"
@.str.40 = [4 x i8] c"%d,\00"
@.str.41 = [5 x i8] c"};\0A\0A\00"
@.str.42 = [7 x i8] c" /*\0A\00"
@.str.43 = [65 x i8] c" Zero-width code points in Supplemental Multilingual Plane\0A\00"
@.str.44 = [7 x i8] c" */\0A\00"
@.str.45 = [40 x i8] c" int plane1zeroes[PLANE1_ZEROES] = {\0A\00"
@.str.46 = [27 x i8] c" /* Phaistos Disc */\0A\00"
@.str.47 = [17 x i8] c" 0x0101FD,\0A\00"
@.str.48 = [41 x i8] c" /* Kharoshthi Combining Glyphs */\0A\00"
@.str.49 = [71 x i8] c" 0x010A01,0x010A02,0x010A03,0x010A05,0x010A06,0x010A0C,0x010A0D,\0A\00"
@.str.50 = [62 x i8] c" 0x010A0E,0x010A0F,0x010A38,0x010A39,0x010A3A,0x010A3F,\0A\00"
@.str.51 = [37 x i8] c" /* Brahmi Combining Glyphs */\0A\00"
@.str.52 = [71 x i8] c" 0x011000,0x011001,0x011002,0x011038,0x011039,0x01103A,0x01103B,\0A\00"
@.str.53 = [71 x i8] c" 0x01103C,0x01103D,0x01103E,0x01103F,0x011040,0x011041,0x011042,\0A\00"
@.str.54 = [44 x i8] c" 0x011043,0x011044,0x011045,0x011046,\0A\00"
@.str.55 = [37 x i8] c" /* Kaithi Combining Glyphs */\0A\00"
@.str.56 = [71 x i8] c" 0x011080,0x011081,0x011082,0x0110B0,0x0110B1,0x0110B2,0x0110B3,\0A\00"
@.str.57 = [71 x i8] c" 0x0110B4,0x0110B5,0x0110B6,0x0110B7,0x0110B8,0x0110B9,0x0110BA,\0A\00"
@.str.58 = [37 x i8] c" /* Chakma Combining Glyphs */\0A\00"
@.str.59 = [71 x i8] c" 0x011100,0x011101,0x011102,0x011127,0x011128,0x011129,0x01112A,\0A\00"
@.str.60 = [71 x i8] c" 0x01112B,0x01112C,0x01112D,0x01112E,0x01112F,0x011130,0x011131,\0A\00"
@.str.61 = [35 x i8] c" 0x011132,0x011133,0x011134,\0A\00"
@.str.62 = [38 x i8] c" /* Sharada Combining Glyphs */\0A\00"
@.str.63 = [71 x i8] c" 0x011180,0x011181,0x011182,0x0111B3,0x0111B4,0x0111B5,0x0111B6,\0A\00"
@.str.64 = [71 x i8] c" 0x0111B7,0x0111B8,0x0111B9,0x0111BA,0x0111BB,0x0111BC,0x0111BD,\0A\00"
@.str.65 = [35 x i8] c" 0x0111BE,0x0111BF,0x0111C0,\0A\00"
@.str.66 = [36 x i8] c" /* Takri Combining Glyphs */\0A\00"
@.str.67 = [71 x i8] c" 0x0116AB,0x0116AC,0x0116AD,0x0116AE,0x0116AF,0x0116B0,0x0116B1,\0A\00"
@.str.68 = [62 x i8] c" 0x0116B2,0x0116B3,0x0116B4,0x0116B5,0x0116B6,0x0116B7,\0A\00"
@.str.69 = [35 x i8] c" /* Miao Combining Glyphs */\0A\00"
@.str.70 = [71 x i8] c" 0x016F51,0x016F52,0x016F53,0x016F54,0x016F55,0x016F56,0x016F57,\0A\00"
@.str.71 = [71 x i8] c" 0x016F58,0x016F59,0x016F5A,0x016F5B,0x016F5C,0x016F5D,0x016F5E,\0A\00"
@.str.72 = [71 x i8] c" 0x016F5F,0x016F60,0x016F61,0x016F62,0x016F63,0x016F64,0x016F65,\0A\00"
@.str.73 = [71 x i8] c" 0x016F66,0x016F67,0x016F68,0x016F69,0x016F6A,0x016F6B,0x016F6C,\0A\00"
@.str.74 = [71 x i8] c" 0x016F6D,0x016F6E,0x016F6F,0x016F70,0x016F71,0x016F72,0x016F73,\0A\00"
@.str.75 = [71 x i8] c" 0x016F74,0x016F75,0x016F76,0x016F77,0x016F78,0x016F79,0x016F7A,\0A\00"
@.str.76 = [44 x i8] c" 0x016F7B,0x016F7C,0x016F7D,0x016F7E,\0A\00"
@.str.77 = [44 x i8] c" 0x016F8F,0x016F90,0x016F91,0x016F92,\0A\00"
@.str.78 = [46 x i8] c" /* Musical Symbols Combining Glyphs */\0A\00"
@.str.79 = [71 x i8] c" 0x01D159,0x01D165,0x01D166,0x01D167,0x01D168,0x01D169,0x01D16D,\0A\00"
@.str.80 = [71 x i8] c" 0x01D16E,0x01D16F,0x01D170,0x01D171,0x01D172,0x01D17B,0x01D17C,\0A\00"
@.str.81 = [71 x i8] c" 0x01D17D,0x01D17E,0x01D17F,0x01D180,0x01D181,0x01D182,0x01D185,\0A\00"
@.str.82 = [71 x i8] c" 0x01D186,0x01D187,0x01D188,0x01D189,0x01D18A,0x01D18B,0x01D1AA,\0A\00"
@.str.83 = [35 x i8] c" 0x01D1AB,0x01D1AC,0x01D1AD,\0A\00"
@.str.84 = [44 x i8] c" /* Ancient Greek Musical Notation */\0A\00"
@.str.85 = [34 x i8] c" 0x01D242,0x01D243,0x01D244\0A\00"
@.str.86 = [8 x i8] c" };\0A\0A\00"
@.str.87 = [34 x i8] c" illegalchar = totalwidth = 0;\0A\00"
@.str.88 = [46 x i8] c" for (i = 0; !illegalchar && i < n; i++) {\0A\00"
@.str.89 = [26 x i8] c" codept = pwcs[i];\0A\00"
@.str.90 = [31 x i8] c" plane = codept >> 16;\0A\00"
@.str.91 = [34 x i8] c" lower16 = codept & 0xFFFF;\0A\00"
@.str.92 = [52 x i8] c" if (plane == 0) { /* the most common case */\0A\00"
@.str.93 = [57 x i8] c" if (plane0width[lower16] < 0) illegalchar = 1;\0A\00"
@.str.94 = [51 x i8] c" else totalwidth += plane0width[lower16];\0A\00"
@.str.95 = [9 x i8] c" }\0A\00"
@.str.96 = [59 x i8] c" else { /* a higher plane or beyond Unicode range */\0A\00"
@.str.97 = [56 x i8] c" if (lower16 == 0xFFFE || lower16 == 0xFFFF) {\0A\00"
@.str.98 = [30 x i8] c" illegalchar = 1;\0A\00"
@.str.99 = [12 x i8] c" }\0A\00"
@.str.100 = [35 x i8] c" else if (plane > 0x10) {\0A\00"
@.str.101 = [72 x i8] c" else if (plane == 1) { /* Supplementary Multilingual Plane */\0A\00"
@.str.102 = [16 x i8] c" /*\0A\00"
@.str.103 = [74 x i8] c" Perform a binary search in plane1zeroes[] sparse list for\0A\00"
@.str.104 = [72 x i8] c" combining code points and other zero-width code points.\0A\00"
@.str.105 = [16 x i8] c" */\0A\00"
@.str.106 = [25 x i8] c" lowpt = 0;\0A\00"
@.str.107 = [41 x i8] c" highpt = PLANE1_ZEROES - 1;\0A\00"
@.str.108 = [38 x i8] c" while (lowpt < highpt) {\0A\00"
@.str.109 = [48 x i8] c" midpt = (lowpt + highpt) >> 1;\0A\00"
@.str.110 = [50 x i8] c" if (plane1zeroes[midpt] < codept)\0A\00"
@.str.111 = [38 x i8] c" lowpt = midpt + 1;\0A\00"
@.str.112 = [55 x i8] c" else if (plane1zeroes[midpt] > codept)\0A\00"
@.str.113 = [39 x i8] c" highpt = midpt - 1;\0A\00"
@.str.114 = [21 x i8] c" else\0A\00"
@.str.115 = [65 x i8] c" lowpt = highpt = midpt; /* found the match */\0A\00"
@.str.116 = [15 x i8] c" }\0A\00"
@.str.117 = [64 x i8] c" if (lowpt >= 0 && codept == plane1zeroes[lowpt]) {\0A\00"
@.str.118 = [27 x i8] c" found = 1;\0A\00"
@.str.119 = [82 x i8] c" else if (highpt < PLANE1_ZEROES && codept == plane1zeroes[highpt]) {\0A\00"
@.str.120 = [20 x i8] c" else {\0A\00"
@.str.121 = [27 x i8] c" found = 0;\0A\00"
@.str.122 = [71 x i8] c" if (!found) totalwidth += 2; /* default for SMP glyphs */\0A\00"
@.str.123 = [88 x i8] c" /* Other non-printing in higher planes; return -1 as per IEEE 1003.1-2008. */\0A\00"
@.str.124 = [39 x i8] c" else if (/* language tags */\0A\00"
@.str.125 = [87 x i8] c" codept == 0x0E0001 || (codept >= 0x0E0020 && codept <= 0x0E007F) ||\0A\00"
@.str.126 = [65 x i8] c" /* variation selectors, 0x0E0100..0x0E01EF */\0A\00"
@.str.127 = [65 x i8] c" (codept >= 0x0E0100 && codept <= 0x0E01EF)) {\0A\00"
@.str.128 = [13 x i8] c" /*\0A\00"
@.str.129 = [57 x i8] c" Unicode plane 0x02..0x10 printing character\0A\00"
@.str.130 = [13 x i8] c" */\0A\00"
@.str.131 = [17 x i8] c" else {\0A\00"
@.str.132 = [82 x i8] c" totalwidth += 2; /* default width of 2 charcells for legal glyphs */\0A\00"
@.str.133 = [6 x i8] c" }\0A\00"
@.str.134 = [38 x i8] c" if (illegalchar) totalwidth = -1;\0A\00"
@.str.135 = [24 x i8] c" return(totalwidth);\0A\00"
@EXIT_SUCCESS = global i32 0
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i32
%5 = alloca i8**
%6 = alloca i32
%7 = alloca [256 x i8]
%8 = alloca i32
%9 = alloca i8*
%10 = alloca [65536 x i8]
%11 = alloca i32*
store i32 0, i32* %3
store i32 %0, i32* %4
store i8** %1, i8*** %5
%12 = load i8**, i8*** %5
%13 = getelementptr inbounds i8*, i8** %12, i64 1
%14 = load i8*, i8** %13
%15 = call i32* @fopen(i8* %14, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
store i32* %15, i32** %11
%16 = icmp eq i32* %15, null
br i1 %16, label %17, label %25
17: ; preds = %2
%18 = load i32, i32* @stderr
%19 = load i8**, i8*** %5
%20 = getelementptr inbounds i8*, i8** %19, i64 1
%21 = load i8*, i8** %20
%22 = call i32 @fprintf(i32 %18, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.1, i64 0, i64 0), i8* %21)
%23 = load i32, i32* @EXIT_FAILURE
%24 = call i32 @exit(i32 %23)
unreachable
25: ; preds = %2
%26 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 0
%27 = call i32 @memset(i8* %26, i32 0, i32 65536)
%28 = getelementptr inbounds [256 x i8], [256 x i8]* %7, i64 0, i64 256
store i8 0, i8* %28
br label %29
29: ; preds = %34, %25
%30 = getelementptr inbounds [256 x i8], [256 x i8]* %7, i64 0, i64 0
%31 = load i32*, i32** %11
%32 = call i32* @fgets(i8* %30, i32 255, i32* %31)
%33 = icmp ne i32* %32, null
br i1 %33, label %34, label %49
34: ; preds = %29
%35 = getelementptr inbounds [256 x i8], [256 x i8]* %7, i64 0, i64 0
%36 = call i32 @sscanf(i8* %35, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32* %8)
%37 = getelementptr inbounds [256 x i8], [256 x i8]* %7, i64 0, i64 0
%38 = call i8* @index(i8* %37, i8 signext 58)
%39 = getelementptr inbounds i8, i8* %38, i64 1
store i8* %39, i8** %9
%40 = load i8*, i8** %9
%41 = call i32 @strlen(i8* %40)
%42 = icmp sle i32 %41, 34
%43 = zext i1 %42 to i64
%44 = select i1 %42, i32 1, i32 2
%45 = trunc i32 %44 to i8
%46 = load i32, i32* %8
%47 = sext i32 %46 to i64
%48 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %47
store i8 %45, i8* %48
br label %29
49: ; preds = %29
%50 = load i32*, i32** %11
%51 = call i32 @fclose(i32* %50)
%52 = load i8**, i8*** %5
%53 = getelementptr inbounds i8*, i8** %52, i64 2
%54 = load i8*, i8** %53
%55 = call i32* @fopen(i8* %54, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
store i32* %55, i32** %11
%56 = icmp eq i32* %55, null
br i1 %56, label %57, label %65
57: ; preds = %49
%58 = load i32, i32* @stderr
%59 = load i8**, i8*** %5
%60 = getelementptr inbounds i8*, i8** %59, i64 2
%61 = load i8*, i8** %60
%62 = call i32 @fprintf(i32 %58, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.3, i64 0, i64 0), i8* %61)
%63 = load i32, i32* @EXIT_FAILURE
%64 = call i32 @exit(i32 %63)
unreachable
65: ; preds = %49
br label %66
66: ; preds = %71, %65
%67 = load i32*, i32** %11
%68 = call i64 @fscanf(i32* %67, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32* %8)
%69 = load i64, i64* @EOF
%70 = icmp ne i64 %68, %69
br i1 %70, label %71, label %75
71: ; preds = %66
%72 = load i32, i32* %8
%73 = sext i32 %72 to i64
%74 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %73
store i8 0, i8* %74
br label %66
75: ; preds = %66
%76 = load i32*, i32** %11
%77 = call i32 @fclose(i32* %76)
%78 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 0
store i8 0, i8* %78
store i32 1, i32* %6
br label %79
79: ; preds = %86, %75
%80 = load i32, i32* %6
%81 = icmp sle i32 %80, 31
br i1 %81, label %82, label %89
82: ; preds = %79
%83 = load i32, i32* %6
%84 = sext i32 %83 to i64
%85 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %84
store i8 -1, i8* %85
br label %86
86: ; preds = %82
%87 = load i32, i32* %6
%88 = add nsw i32 %87, 1
store i32 %88, i32* %6
br label %79
89: ; preds = %79
store i32 127, i32* %6
br label %90
90: ; preds = %97, %89
%91 = load i32, i32* %6
%92 = icmp sle i32 %91, 159
br i1 %92, label %93, label %100
93: ; preds = %90
%94 = load i32, i32* %6
%95 = sext i32 %94 to i64
%96 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %95
store i8 -1, i8* %96
br label %97
97: ; preds = %93
%98 = load i32, i32* %6
%99 = add nsw i32 %98, 1
store i32 %99, i32* %6
br label %90
100: ; preds = %90
%101 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 847
store i8 0, i8* %101
%102 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 6155
store i8 0, i8* %102
%103 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 6156
store i8 0, i8* %103
%104 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 6157
store i8 0, i8* %104
%105 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 6158
store i8 0, i8* %105
%106 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8203
store i8 0, i8* %106
%107 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8204
store i8 0, i8* %107
%108 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8205
store i8 0, i8* %108
%109 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8206
store i8 0, i8* %109
%110 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8207
store i8 0, i8* %110
%111 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8234
store i8 0, i8* %111
%112 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8235
store i8 0, i8* %112
%113 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8236
store i8 0, i8* %113
%114 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8237
store i8 0, i8* %114
%115 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8238
store i8 0, i8* %115
%116 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8288
store i8 0, i8* %116
%117 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8289
store i8 0, i8* %117
%118 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8290
store i8 0, i8* %118
%119 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8291
store i8 0, i8* %119
%120 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8292
store i8 0, i8* %120
%121 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8298
store i8 0, i8* %121
%122 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8299
store i8 0, i8* %122
%123 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8300
store i8 0, i8* %123
%124 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8301
store i8 0, i8* %124
%125 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8302
store i8 0, i8* %125
%126 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 8303
store i8 0, i8* %126
store i32 12272, i32* %6
br label %127
127: ; preds = %134, %100
%128 = load i32, i32* %6
%129 = icmp sle i32 %128, 12283
br i1 %129, label %130, label %137
130: ; preds = %127
%131 = load i32, i32* %6
%132 = sext i32 %131 to i64
%133 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %132
store i8 0, i8* %133
br label %134
134: ; preds = %130
%135 = load i32, i32* %6
%136 = add nsw i32 %135, 1
store i32 %136, i32* %6
br label %127
137: ; preds = %127
%138 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 12350
store i8 0, i8* %138
store i32 65024, i32* %6
br label %139
139: ; preds = %146, %137
%140 = load i32, i32* %6
%141 = icmp sle i32 %140, 65039
br i1 %141, label %142, label %149
142: ; preds = %139
%143 = load i32, i32* %6
%144 = sext i32 %143 to i64
%145 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %144
store i8 0, i8* %145
br label %146
146: ; preds = %142
%147 = load i32, i32* %6
%148 = add nsw i32 %147, 1
store i32 %148, i32* %6
br label %139
149: ; preds = %139
%150 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 65279
store i8 0, i8* %150
%151 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 65529
store i8 0, i8* %151
%152 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 65530
store i8 0, i8* %152
%153 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 65531
store i8 0, i8* %153
store i32 4448, i32* %6
br label %154
154: ; preds = %161, %149
%155 = load i32, i32* %6
%156 = icmp sle i32 %155, 4607
br i1 %156, label %157, label %164
157: ; preds = %154
%158 = load i32, i32* %6
%159 = sext i32 %158 to i64
%160 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %159
store i8 0, i8* %160
br label %161
161: ; preds = %157
%162 = load i32, i32* %6
%163 = add nsw i32 %162, 1
store i32 %163, i32* %6
br label %154
164: ; preds = %154
store i32 57344, i32* %6
br label %165
165: ; preds = %180, %164
%166 = load i32, i32* %6
%167 = icmp sle i32 %166, 63743
br i1 %167, label %168, label %183
168: ; preds = %165
%169 = load i32, i32* %6
%170 = sext i32 %169 to i64
%171 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %170
%172 = load i8, i8* %171
%173 = sext i8 %172 to i32
%174 = icmp eq i32 %173, 0
br i1 %174, label %175, label %179
175: ; preds = %168
%176 = load i32, i32* %6
%177 = sext i32 %176 to i64
%178 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %177
store i8 2, i8* %178
br label %179
179: ; preds = %175, %168
br label %180
180: ; preds = %179
%181 = load i32, i32* %6
%182 = add nsw i32 %181, 1
store i32 %182, i32* %6
br label %165
183: ; preds = %165
store i32 64976, i32* %6
br label %184
184: ; preds = %191, %183
%185 = load i32, i32* %6
%186 = icmp sle i32 %185, 65007
br i1 %186, label %187, label %194
187: ; preds = %184
%188 = load i32, i32* %6
%189 = sext i32 %188 to i64
%190 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %189
store i8 -1, i8* %190
br label %191
191: ; preds = %187
%192 = load i32, i32* %6
%193 = add nsw i32 %192, 1
store i32 %193, i32* %6
br label %184
194: ; preds = %184
%195 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 65534
store i8 -1, i8* %195
%196 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 65535
store i8 -1, i8* %196
store i32 55296, i32* %6
br label %197
197: ; preds = %204, %194
%198 = load i32, i32* %6
%199 = icmp sle i32 %198, 57343
br i1 %199, label %200, label %207
200: ; preds = %197
%201 = load i32, i32* %6
%202 = sext i32 %201 to i64
%203 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %202
store i8 -1, i8* %203
br label %204
204: ; preds = %200
%205 = load i32, i32* %6
%206 = add nsw i32 %205, 1
store i32 %206, i32* %6
br label %197
207: ; preds = %197
%208 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.4, i64 0, i64 0))
%209 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.5, i64 0, i64 0))
%210 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.6, i64 0, i64 0))
%211 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.7, i64 0, i64 0))
%212 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.8, i64 0, i64 0))
%213 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.9, i64 0, i64 0))
%214 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%215 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.11, i64 0, i64 0))
%216 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([76 x i8], [76 x i8]* @.str.12, i64 0, i64 0))
%217 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.13, i64 0, i64 0))
%218 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.14, i64 0, i64 0))
%219 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%220 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.15, i64 0, i64 0))
%221 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([70 x i8], [70 x i8]* @.str.16, i64 0, i64 0))
%222 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([69 x i8], [69 x i8]* @.str.17, i64 0, i64 0))
%223 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.18, i64 0, i64 0))
%224 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%225 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([73 x i8], [73 x i8]* @.str.19, i64 0, i64 0))
%226 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([77 x i8], [77 x i8]* @.str.20, i64 0, i64 0))
%227 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.21, i64 0, i64 0))
%228 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.22, i64 0, i64 0))
%229 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([28 x i8], [28 x i8]* @.str.23, i64 0, i64 0))
%230 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0))
%231 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.25, i64 0, i64 0))
%232 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.26, i64 0, i64 0))
%233 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.27, i64 0, i64 0))
%234 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i64 0, i64 0))
%235 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.24, i64 0, i64 0))
%236 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.29, i64 0, i64 0))
%237 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.30, i64 0, i64 0))
%238 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.31, i64 0, i64 0))
%239 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.32, i64 0, i64 0))
%240 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.33, i64 0, i64 0))
%241 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.34, i64 0, i64 0))
%242 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.35, i64 0, i64 0))
%243 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.36, i64 0, i64 0))
%244 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.37, i64 0, i64 0))
%245 = call i32 @putchar(i8 signext 10)
%246 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.38, i64 0, i64 0))
store i32 0, i32* %6
br label %247
247: ; preds = %264, %207
%248 = load i32, i32* %6
%249 = icmp slt i32 %248, 65536
br i1 %249, label %250, label %267
250: ; preds = %247
%251 = load i32, i32* %6
%252 = and i32 %251, 31
%253 = icmp eq i32 %252, 0
br i1 %253, label %254, label %257
254: ; preds = %250
%255 = load i32, i32* %6
%256 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.39, i64 0, i64 0), i32 %255)
br label %257
257: ; preds = %254, %250
%258 = load i32, i32* %6
%259 = sext i32 %258 to i64
%260 = getelementptr inbounds [65536 x i8], [65536 x i8]* %10, i64 0, i64 %259
%261 = load i8, i8* %260
%262 = sext i8 %261 to i32
%263 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([4 x i8], [4 x i8]* @.str.40, i64 0, i64 0), i32 %262)
br label %264
264: ; preds = %257
%265 = load i32, i32* %6
%266 = add nsw i32 %265, 1
store i32 %266, i32* %6
br label %247
267: ; preds = %247
%268 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([5 x i8], [5 x i8]* @.str.41, i64 0, i64 0))
%269 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%270 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.42, i64 0, i64 0))
%271 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.43, i64 0, i64 0))
%272 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.44, i64 0, i64 0))
%273 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.45, i64 0, i64 0))
%274 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.46, i64 0, i64 0))
%275 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.47, i64 0, i64 0))
%276 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.48, i64 0, i64 0))
%277 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.49, i64 0, i64 0))
%278 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.50, i64 0, i64 0))
%279 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.51, i64 0, i64 0))
%280 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.52, i64 0, i64 0))
%281 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.53, i64 0, i64 0))
%282 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.54, i64 0, i64 0))
%283 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.55, i64 0, i64 0))
%284 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.56, i64 0, i64 0))
%285 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.57, i64 0, i64 0))
%286 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.58, i64 0, i64 0))
%287 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.59, i64 0, i64 0))
%288 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.60, i64 0, i64 0))
%289 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.61, i64 0, i64 0))
%290 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.62, i64 0, i64 0))
%291 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.63, i64 0, i64 0))
%292 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.64, i64 0, i64 0))
%293 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.65, i64 0, i64 0))
%294 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([36 x i8], [36 x i8]* @.str.66, i64 0, i64 0))
%295 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.67, i64 0, i64 0))
%296 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([62 x i8], [62 x i8]* @.str.68, i64 0, i64 0))
%297 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.69, i64 0, i64 0))
%298 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.70, i64 0, i64 0))
%299 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.71, i64 0, i64 0))
%300 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.72, i64 0, i64 0))
%301 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.73, i64 0, i64 0))
%302 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.74, i64 0, i64 0))
%303 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.75, i64 0, i64 0))
%304 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.76, i64 0, i64 0))
%305 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.77, i64 0, i64 0))
%306 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.78, i64 0, i64 0))
%307 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.79, i64 0, i64 0))
%308 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.80, i64 0, i64 0))
%309 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.81, i64 0, i64 0))
%310 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.82, i64 0, i64 0))
%311 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.83, i64 0, i64 0))
%312 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([44 x i8], [44 x i8]* @.str.84, i64 0, i64 0))
%313 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.85, i64 0, i64 0))
%314 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.86, i64 0, i64 0))
%315 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%316 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.87, i64 0, i64 0))
%317 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.88, i64 0, i64 0))
%318 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([26 x i8], [26 x i8]* @.str.89, i64 0, i64 0))
%319 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([31 x i8], [31 x i8]* @.str.90, i64 0, i64 0))
%320 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.91, i64 0, i64 0))
%321 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.92, i64 0, i64 0))
%322 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.93, i64 0, i64 0))
%323 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.94, i64 0, i64 0))
%324 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.95, i64 0, i64 0))
%325 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.96, i64 0, i64 0))
%326 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.97, i64 0, i64 0))
%327 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.98, i64 0, i64 0))
%328 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.99, i64 0, i64 0))
%329 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.100, i64 0, i64 0))
%330 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.98, i64 0, i64 0))
%331 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.99, i64 0, i64 0))
%332 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([72 x i8], [72 x i8]* @.str.101, i64 0, i64 0))
%333 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.102, i64 0, i64 0))
%334 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([74 x i8], [74 x i8]* @.str.103, i64 0, i64 0))
%335 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([72 x i8], [72 x i8]* @.str.104, i64 0, i64 0))
%336 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.105, i64 0, i64 0))
%337 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([25 x i8], [25 x i8]* @.str.106, i64 0, i64 0))
%338 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.107, i64 0, i64 0))
%339 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%340 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.108, i64 0, i64 0))
%341 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.109, i64 0, i64 0))
%342 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.110, i64 0, i64 0))
%343 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.111, i64 0, i64 0))
%344 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([55 x i8], [55 x i8]* @.str.112, i64 0, i64 0))
%345 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.113, i64 0, i64 0))
%346 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.114, i64 0, i64 0))
%347 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.115, i64 0, i64 0))
%348 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.116, i64 0, i64 0))
%349 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%350 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.117, i64 0, i64 0))
%351 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.118, i64 0, i64 0))
%352 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.116, i64 0, i64 0))
%353 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.119, i64 0, i64 0))
%354 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.118, i64 0, i64 0))
%355 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.116, i64 0, i64 0))
%356 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([20 x i8], [20 x i8]* @.str.120, i64 0, i64 0))
%357 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([27 x i8], [27 x i8]* @.str.121, i64 0, i64 0))
%358 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([15 x i8], [15 x i8]* @.str.116, i64 0, i64 0))
%359 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%360 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([71 x i8], [71 x i8]* @.str.122, i64 0, i64 0))
%361 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.99, i64 0, i64 0))
%362 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([88 x i8], [88 x i8]* @.str.123, i64 0, i64 0))
%363 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.124, i64 0, i64 0))
%364 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([87 x i8], [87 x i8]* @.str.125, i64 0, i64 0))
%365 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.126, i64 0, i64 0))
%366 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.127, i64 0, i64 0))
%367 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.98, i64 0, i64 0))
%368 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.99, i64 0, i64 0))
%369 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.128, i64 0, i64 0))
%370 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([57 x i8], [57 x i8]* @.str.129, i64 0, i64 0))
%371 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([13 x i8], [13 x i8]* @.str.130, i64 0, i64 0))
%372 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([17 x i8], [17 x i8]* @.str.131, i64 0, i64 0))
%373 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([82 x i8], [82 x i8]* @.str.132, i64 0, i64 0))
%374 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.99, i64 0, i64 0))
%375 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%376 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.95, i64 0, i64 0))
%377 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.133, i64 0, i64 0))
%378 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.134, i64 0, i64 0))
%379 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%380 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.135, i64 0, i64 0))
%381 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.10, i64 0, i64 0))
%382 = call i32 (i8*, ...) @printf(i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.28, i64 0, i64 0))
%383 = load i32, i32* @EXIT_SUCCESS
%384 = call i32 @exit(i32 %383)
unreachable
}

LLVM IR (-O2):
@.str = [2 x i8] c"r\00"
@stderr = global i32 0
@.str.1 = [39 x i8] c"ERROR - hex input file %s not found.\0A\0A\00"
@EXIT_FAILURE = global i32 0
@.str.2 = [3 x i8] c"%X\00"
@.str.3 = [50 x i8] c"ERROR - combining characters file %s not found.\0A\0A\00"
@EOF = global i64 0
@.str.38 = [33 x i8] c" char plane0width[0x10000] = {\00"
@.str.39 = [21 x i8] c"\0A /* U+%04X */ \00"
@.str.40 = [4 x i8] c"%d,\00"
@EXIT_SUCCESS = global i32 0
@str = [3 x i8] c"/*\00"
@str.136 = [63 x i8] c" wcwidth() and wcswidth() functions, as per IEEE 1003.1-2008\00"
@str.137 = [42 x i8] c" System Interfaces, pp. 2241 and 2251.\0A\00"
@str.138 = [29 x i8] c" Author: Paul Hardy, 2013\0A\00"
@str.139 = [34 x i8] c" Copyright (c) 2013 Paul Hardy\0A\00"
@str.140 = [12 x i8] c" LICENSE:\00"
@str.141 = [75 x i8] c" This program is free software: you can redistribute it and/or modify\00"
@str.142 = [75 x i8] c" it under the terms of the GNU General Public License as published by\00"
@str.143 = [72 x i8] c" the Free Software Foundation, either version 2 of the License, or\00"
@str.144 = [42 x i8] c" (at your option) any later version.\00"
@str.145 = [70 x i8] c" This program is distributed in the hope that it will be useful,\00"
@str.146 = [69 x i8] c" but WITHOUT ANY WARRANTY; without even the implied warranty of\00"
@str.147 = [68 x i8] c" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\00"
@str.148 = [51 x i8] c" GNU General Public License for more details.\00"
@str.149 = [72 x i8] c" You should have received a copy of the GNU General Public License\00"
@str.150 = [76 x i8] c" along with this program. If not, see <http://www.gnu.org/licenses/>.\00"
@str.151 = [4 x i8] c"*/\0A\00"
@str.152 = [20 x i8] c"#include <wchar.h>\0A\00"
@str.153 = [27 x i8] c"#define PLANE1_ZEROES 177\0A\00"
@str.155 = [63 x i8] c"/* wcwidth() -- return charcell positions of one code point */\00"
@str.156 = [33 x i8] c"inline int wcwidth(wchar_t wc) {\00"
@str.157 = [29 x i8] c" return(wcswidth(&wc, 1));\00"
@str.159 = [2 x i8] c"\0A\00"
@str.160 = [47 x i8] c"int wcswidth(const wchar_t *pwcs, size_t n) {\0A\00"
@str.161 = [86 x i8] c" int i; /* loop variable */\00"
@str.162 = [86 x i8] c" unsigned codept; /* Unicode code point of current character */\00"
@str.163 = [86 x i8] c" unsigned plane; /* Unicode plane, 0x00..0x10 */\00"
@str.164 = [86 x i8] c" unsigned lower16; /* lower 16 bits of Unicode code point */\00"
@str.165 = [86 x i8] c" int lowpt, midpt, highpt; /* for binary searching in plane1zeroes[] */\00"
@str.166 = [86 x i8] c" int found; /* for binary searching in plane1zeroes[] */\00"
@str.167 = [86 x i8] c" int totalwidth; /* total width of string, in charcells (1 or 2/glyph) */\00"
@str.168 = [86 x i8] c" int illegalchar; /* Whether or not tihs code point is illegal */\00"
@str.169 = [4 x i8] c"};\0A\00"
@str.170 = [6 x i8] c" /*\00"
@str.171 = [64 x i8] c" Zero-width code points in Supplemental Multilingual Plane\00"
@str.172 = [6 x i8] c" */\00"
@str.173 = [39 x i8] c" int plane1zeroes[PLANE1_ZEROES] = {\00"
@str.174 = [26 x i8] c" /* Phaistos Disc */\00"
@str.175 = [16 x i8] c" 0x0101FD,\00"
@str.176 = [40 x i8] c" /* Kharoshthi Combining Glyphs */\00"
@str.177 = [70 x i8] c" 0x010A01,0x010A02,0x010A03,0x010A05,0x010A06,0x010A0C,0x010A0D,\00"
@str.178 = [61 x i8] c" 0x010A0E,0x010A0F,0x010A38,0x010A39,0x010A3A,0x010A3F,\00"
@str.179 = [36 x i8] c" /* Brahmi Combining Glyphs */\00"
@str.180 = [70 x i8] c" 0x011000,0x011001,0x011002,0x011038,0x011039,0x01103A,0x01103B,\00"
@str.181 = [70 x i8] c" 0x01103C,0x01103D,0x01103E,0x01103F,0x011040,0x011041,0x011042,\00"
@str.182 = [43 x i8] c" 0x011043,0x011044,0x011045,0x011046,\00"
@str.183 = [36 x i8] c" /* Kaithi Combining Glyphs */\00"
@str.184 = [70 x i8] c" 0x011080,0x011081,0x011082,0x0110B0,0x0110B1,0x0110B2,0x0110B3,\00"
@str.185 = [70 x i8] c" 0x0110B4,0x0110B5,0x0110B6,0x0110B7,0x0110B8,0x0110B9,0x0110BA,\00"
@str.186 = [36 x i8] c" /* Chakma Combining Glyphs */\00"
@str.187 = [70 x i8] c" 0x011100,0x011101,0x011102,0x011127,0x011128,0x011129,0x01112A,\00"
@str.188 = [70 x i8] c" 0x01112B,0x01112C,0x01112D,0x01112E,0x01112F,0x011130,0x011131,\00"
@str.189 = [34 x i8] c" 0x011132,0x011133,0x011134,\00"
@str.190 = [37 x i8] c" /* Sharada Combining Glyphs */\00"
@str.191 = [70 x i8] c" 0x011180,0x011181,0x011182,0x0111B3,0x0111B4,0x0111B5,0x0111B6,\00"
@str.192 = [70 x i8] c" 0x0111B7,0x0111B8,0x0111B9,0x0111BA,0x0111BB,0x0111BC,0x0111BD,\00"
@str.193 = [34 x i8] c" 0x0111BE,0x0111BF,0x0111C0,\00"
@str.194 = [35 x i8] c" /* Takri Combining Glyphs */\00"
@str.195 = [70 x i8] c" 0x0116AB,0x0116AC,0x0116AD,0x0116AE,0x0116AF,0x0116B0,0x0116B1,\00"
@str.196 = [61 x i8] c" 0x0116B2,0x0116B3,0x0116B4,0x0116B5,0x0116B6,0x0116B7,\00"
@str.197 = [34 x i8] c" /* Miao Combining Glyphs */\00"
@str.198 = [70 x i8] c" 0x016F51,0x016F52,0x016F53,0x016F54,0x016F55,0x016F56,0x016F57,\00"
@str.199 = [70 x i8] c" 0x016F58,0x016F59,0x016F5A,0x016F5B,0x016F5C,0x016F5D,0x016F5E,\00"
@str.200 = [70 x i8] c" 0x016F5F,0x016F60,0x016F61,0x016F62,0x016F63,0x016F64,0x016F65,\00"
@str.201 = [70 x i8] c" 0x016F66,0x016F67,0x016F68,0x016F69,0x016F6A,0x016F6B,0x016F6C,\00"
@str.202 = [70 x i8] c" 0x016F6D,0x016F6E,0x016F6F,0x016F70,0x016F71,0x016F72,0x016F73,\00"
@str.203 = [70 x i8] c" 0x016F74,0x016F75,0x016F76,0x016F77,0x016F78,0x016F79,0x016F7A,\00"
@str.204 = [43 x i8] c" 0x016F7B,0x016F7C,0x016F7D,0x016F7E,\00"
@str.205 = [43 x i8] c" 0x016F8F,0x016F90,0x016F91,0x016F92,\00"
@str.206 = [45 x i8] c" /* Musical Symbols Combining Glyphs */\00"
@str.207 = [70 x i8] c" 0x01D159,0x01D165,0x01D166,0x01D167,0x01D168,0x01D169,0x01D16D,\00"
@str.208 = [70 x i8] c" 0x01D16E,0x01D16F,0x01D170,0x01D171,0x01D172,0x01D17B,0x01D17C,\00"
@str.209 = [70 x i8] c" 0x01D17D,0x01D17E,0x01D17F,0x01D180,0x01D181,0x01D182,0x01D185,\00"
@str.210 = [70 x i8] c" 0x01D186,0x01D187,0x01D188,0x01D189,0x01D18A,0x01D18B,0x01D1AA,\00"
@str.211 = [34 x i8] c" 0x01D1AB,0x01D1AC,0x01D1AD,\00"
@str.212 = [43 x i8] c" /* Ancient Greek Musical Notation */\00"
@str.213 = [33 x i8] c" 0x01D242,0x01D243,0x01D244\00"
@str.214 = [7 x i8] c" };\0A\00"
@str.215 = [33 x i8] c" illegalchar = totalwidth = 0;\00"
@str.216 = [45 x i8] c" for (i = 0; !illegalchar && i < n; i++) {\00"
@str.217 = [25 x i8] c" codept = pwcs[i];\00"
@str.218 = [30 x i8] c" plane = codept >> 16;\00"
@str.219 = [33 x i8] c" lower16 = codept & 0xFFFF;\00"
@str.220 = [51 x i8] c" if (plane == 0) { /* the most common case */\00"
@str.221 = [56 x i8] c" if (plane0width[lower16] < 0) illegalchar = 1;\00"
@str.222 = [50 x i8] c" else totalwidth += plane0width[lower16];\00"
@str.224 = [58 x i8] c" else { /* a higher plane or beyond Unicode range */\00"
@str.225 = [55 x i8] c" if (lower16 == 0xFFFE || lower16 == 0xFFFF) {\00"
@str.228 = [34 x i8] c" else if (plane > 0x10) {\00"
@str.231 = [71 x i8] c" else if (plane == 1) { /* Supplementary Multilingual Plane */\00"
@str.232 = [15 x i8] c" /*\00"
@str.233 = [73 x i8] c" Perform a binary search in plane1zeroes[] sparse list for\00"
@str.234 = [71 x i8] c" combining code points and other zero-width code points.\00"
@str.235 = [15 x i8] c" */\00"
@str.236 = [24 x i8] c" lowpt = 0;\00"
@str.237 = [40 x i8] c" highpt = PLANE1_ZEROES - 1;\00"
@str.238 = [37 x i8] c" while (lowpt < highpt) {\00"
@str.239 = [47 x i8] c" midpt = (lowpt + highpt) >> 1;\00"
@str.240 = [49 x i8] c" if (plane1zeroes[midpt] < codept)\00"
@str.241 = [37 x i8] c" lowpt = midpt + 1;\00"
@str.242 = [54 x i8] c" else if (plane1zeroes[midpt] > codept)\00"
@str.243 = [38 x i8] c" highpt = midpt - 1;\00"
@str.244 = [20 x i8] c" else\00"
@str.245 = [64 x i8] c" lowpt = highpt = midpt; /* found the match */\00"
@str.247 = [63 x i8] c" if (lowpt >= 0 && codept == plane1zeroes[lowpt]) {\00"
@str.250 = [81 x i8] c" else if (highpt < PLANE1_ZEROES && codept == plane1zeroes[highpt]) {\00"
@str.251 = [26 x i8] c" found = 1;\00"
@str.253 = [19 x i8] c" else {\00"
@str.254 = [26 x i8] c" found = 0;\00"
@str.255 = [14 x i8] c" }\00"
@str.256 = [70 x i8] c" if (!found) totalwidth += 2; /* default for SMP glyphs */\00"
@str.258 = [87 x i8] c" /* Other non-printing in higher planes; return -1 as per IEEE 1003.1-2008. */\00"
@str.259 = [38 x i8] c" else if (/* language tags */\00"
@str.260 = [86 x i8] c" codept == 0x0E0001 || (codept >= 0x0E0020 && codept <= 0x0E007F) ||\00"
@str.261 = [64 x i8] c" /* variation selectors, 0x0E0100..0x0E01EF */\00"
@str.262 = [64 x i8] c" (codept >= 0x0E0100 && codept <= 0x0E01EF)) {\00"
@str.263 = [29 x i8] c" illegalchar = 1;\00"
@str.265 = [12 x i8] c" /*\00"
@str.266 = [56 x i8] c" Unicode plane 0x02..0x10 printing character\00"
@str.267 = [12 x i8] c" */\00"
@str.268 = [16 x i8] c" else {\00"
@str.269 = [81 x i8] c" totalwidth += 2; /* default width of 2 charcells for legal glyphs */\00"
@str.270 = [11 x i8] c" }\00"
@str.271 = [8 x i8] c" }\00"
@str.272 = [5 x i8] c" }\00"
@str.273 = [37 x i8] c" if (illegalchar) totalwidth = -1;\00"
@str.274 = [23 x i8] c" return(totalwidth);\00"
@str.275 = [2 x i8] c"}\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = alloca [256 x i8]
%4 = alloca i32
%5 = alloca [65536 x i8]
%6 = getelementptr inbounds [256 x i8], [256 x i8]* %3, i64 0, i64 0
%7 = bitcast i32* %4 to i8*
%8 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 0
%9 = getelementptr inbounds i8*, i8** %1, i64 1
%10 = load i8*, i8** %9
%11 = tail call i32* @fopen(i8* %10, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%12 = icmp eq i32* %11, null
br i1 %12, label %13, label %19
13: ; preds = %2
%14 = load i32, i32* @stderr
%15 = load i8*, i8** %9
%16 = tail call i32 @fprintf(i32 %14, i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.1, i64 0, i64 0), i8* %15)
%17 = load i32, i32* @EXIT_FAILURE
%18 = tail call i32 @exit(i32 %17)
unreachable
19: ; preds = %2
%20 = call i32 @memset(i8* %8, i32 0, i32 65536)
%21 = getelementptr inbounds [256 x i8], [256 x i8]* %3, i64 0, i64 256
store i8 0, i8* %21
%22 = call i32* @fgets(i8* %6, i32 255, i32* %11)
%23 = icmp eq i32* %22, null
br i1 %23, label %36, label %24
24: ; preds = %19, %24
%25 = call i32 @sscanf(i8* %6, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32* %4)
%26 = call i8* @index(i8* %6, i8 signext 58)
%27 = getelementptr inbounds i8, i8* %26, i64 1
%28 = call i32 @strlen(i8* %27)
%29 = icmp slt i32 %28, 35
%30 = select i1 %29, i8 1, i8 2
%31 = load i32, i32* %4
%32 = sext i32 %31 to i64
%33 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %32
store i8 %30, i8* %33
%34 = call i32* @fgets(i8* %6, i32 255, i32* %11)
%35 = icmp eq i32* %34, null
br i1 %35, label %36, label %24
36: ; preds = %24, %19
%37 = call i32 @fclose(i32* %11)
%38 = getelementptr inbounds i8*, i8** %1, i64 2
%39 = load i8*, i8** %38
%40 = call i32* @fopen(i8* %39, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str, i64 0, i64 0))
%41 = icmp eq i32* %40, null
br i1 %41, label %46, label %42
42: ; preds = %36
%43 = call i64 @fscanf(i32* %40, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32* %4)
%44 = load i64, i64* @EOF
%45 = icmp eq i64 %43, %44
br i1 %45, label %59, label %52
46: ; preds = %36
%47 = load i32, i32* @stderr
%48 = load i8*, i8** %38
%49 = call i32 @fprintf(i32 %47, i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.3, i64 0, i64 0), i8* %48)
%50 = load i32, i32* @EXIT_FAILURE
%51 = call i32 @exit(i32 %50)
unreachable
52: ; preds = %42, %52
%53 = load i32, i32* %4
%54 = sext i32 %53 to i64
%55 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %54
store i8 0, i8* %55
%56 = call i64 @fscanf(i32* %40, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.2, i64 0, i64 0), i32* %4)
%57 = load i64, i64* @EOF
%58 = icmp eq i64 %56, %57
br i1 %58, label %59, label %52
59: ; preds = %52, %42
%60 = call i32 @fclose(i32* %40)
store i8 0, i8* %8
%61 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 1
%62 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 127
%63 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 847
store i8 0, i8* %63
%64 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 6155
%65 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 8203
%66 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 8234
%67 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 8288
%68 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 8298
%69 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 12272
%70 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 12350
store i8 0, i8* %70
%71 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 65024
%72 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 65279
store i8 0, i8* %72
%73 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 65529
store i8 0, i8* %73
%74 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 65530
store i8 0, i8* %74
%75 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 65531
store i8 0, i8* %75
%76 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 4448
%77 = bitcast i8* %64 to i32*
store i32 0, i32* %77
br label %78
78: ; preds = %167, %59
%79 = phi i64 [ 0, %59 ], [ %168, %167 ]
%80 = add i64 %79, 57344
%81 = add i64 %79, 57352
%82 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %80
%83 = bitcast i8* %82 to <8 x i8>*
%84 = load <8 x i8>, <8 x i8>* %83
%85 = getelementptr inbounds i8, i8* %82, i64 8
%86 = bitcast i8* %85 to <8 x i8>*
%87 = load <8 x i8>, <8 x i8>* %86
%88 = icmp eq <8 x i8> %84, zeroinitializer
%89 = icmp eq <8 x i8> %87, zeroinitializer
%90 = extractelement <8 x i1> %88, i64 0
br i1 %90, label %91, label %93
91: ; preds = %78
%92 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %80
store i8 2, i8* %92
br label %93
93: ; preds = %91, %78
%94 = extractelement <8 x i1> %88, i64 1
br i1 %94, label %95, label %98
95: ; preds = %93
%96 = add i64 %79, 57345
%97 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %96
store i8 2, i8* %97
br label %98
98: ; preds = %95, %93
%99 = extractelement <8 x i1> %88, i64 2
br i1 %99, label %100, label %103
100: ; preds = %98
%101 = add i64 %79, 57346
%102 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %101
store i8 2, i8* %102
br label %103
103: ; preds = %100, %98
%104 = extractelement <8 x i1> %88, i64 3
br i1 %104, label %105, label %108
105: ; preds = %103
%106 = add i64 %79, 57347
%107 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %106
store i8 2, i8* %107
br label %108
108: ; preds = %105, %103
%109 = extractelement <8 x i1> %88, i64 4
br i1 %109, label %110, label %113
110: ; preds = %108
%111 = add i64 %79, 57348
%112 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %111
store i8 2, i8* %112
br label %113
113: ; preds = %110, %108
%114 = extractelement <8 x i1> %88, i64 5
br i1 %114, label %115, label %118
115: ; preds = %113
%116 = add i64 %79, 57349
%117 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %116
store i8 2, i8* %117
br label %118
118: ; preds = %115, %113
%119 = extractelement <8 x i1> %88, i64 6
br i1 %119, label %120, label %123
120: ; preds = %118
%121 = add i64 %79, 57350
%122 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %121
store i8 2, i8* %122
br label %123
123: ; preds = %120, %118
%124 = extractelement <8 x i1> %88, i64 7
br i1 %124, label %125, label %128
125: ; preds = %123
%126 = add i64 %79, 57351
%127 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %126
store i8 2, i8* %127
br label %128
128: ; preds = %125, %123
%129 = extractelement <8 x i1> %89, i64 0
br i1 %129, label %130, label %132
130: ; preds = %128
%131 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %81
store i8 2, i8* %131
br label %132
132: ; preds = %130, %128
%133 = extractelement <8 x i1> %89, i64 1
br i1 %133, label %134, label %137
134: ; preds = %132
%135 = add i64 %79, 57353
%136 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %135
store i8 2, i8* %136
br label %137
137: ; preds = %134, %132
%138 = extractelement <8 x i1> %89, i64 2
br i1 %138, label %139, label %142
139: ; preds = %137
%140 = add i64 %79, 57354
%141 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %140
store i8 2, i8* %141
br label %142
142: ; preds = %139, %137
%143 = extractelement <8 x i1> %89, i64 3
br i1 %143, label %144, label %147
144: ; preds = %142
%145 = add i64 %79, 57355
%146 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %145
store i8 2, i8* %146
br label %147
147: ; preds = %144, %142
%148 = extractelement <8 x i1> %89, i64 4
br i1 %148, label %149, label %152
149: ; preds = %147
%150 = add i64 %79, 57356
%151 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %150
store i8 2, i8* %151
br label %152
152: ; preds = %149, %147
%153 = extractelement <8 x i1> %89, i64 5
br i1 %153, label %154, label %157
154: ; preds = %152
%155 = add i64 %79, 57357
%156 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %155
store i8 2, i8* %156
br label %157
157: ; preds = %154, %152
%158 = extractelement <8 x i1> %89, i64 6
br i1 %158, label %159, label %162
159: ; preds = %157
%160 = add i64 %79, 57358
%161 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %160
store i8 2, i8* %161
br label %162
162: ; preds = %159, %157
%163 = extractelement <8 x i1> %89, i64 7
br i1 %163, label %164, label %167
164: ; preds = %162
%165 = add i64 %79, 57359
%166 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %165
store i8 2, i8* %166
br label %167
167: ; preds = %164, %162
%168 = add nuw i64 %79, 16
%169 = icmp eq i64 %168, 6400
br i1 %169, label %170, label %78
170: ; preds = %167
%171 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 64976
%172 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 65534
store i8 -1, i8* %172
%173 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 65535
store i8 -1, i8* %173
%174 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 55296
%175 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([3 x i8], [3 x i8]* @str, i64 0, i64 0))
%176 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.136, i64 0, i64 0))
%177 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @str.137, i64 0, i64 0))
%178 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.138, i64 0, i64 0))
%179 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.139, i64 0, i64 0))
%180 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str.140, i64 0, i64 0))
%181 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%182 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([75 x i8], [75 x i8]* @str.141, i64 0, i64 0))
%183 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([75 x i8], [75 x i8]* @str.142, i64 0, i64 0))
%184 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @str.143, i64 0, i64 0))
%185 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @str.144, i64 0, i64 0))
%186 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%187 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.145, i64 0, i64 0))
%188 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([69 x i8], [69 x i8]* @str.146, i64 0, i64 0))
%189 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([68 x i8], [68 x i8]* @str.147, i64 0, i64 0))
%190 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([51 x i8], [51 x i8]* @str.148, i64 0, i64 0))
%191 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%192 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([72 x i8], [72 x i8]* @str.149, i64 0, i64 0))
%193 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([76 x i8], [76 x i8]* @str.150, i64 0, i64 0))
%194 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @str.151, i64 0, i64 0))
%195 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.152, i64 0, i64 0))
%196 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([27 x i8], [27 x i8]* @str.153, i64 0, i64 0))
%197 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @str.159, i64 0, i64 0))
%198 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.155, i64 0, i64 0))
%199 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.156, i64 0, i64 0))
%200 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.157, i64 0, i64 0))
%201 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @str.275, i64 0, i64 0))
%202 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @str.159, i64 0, i64 0))
%203 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @str.160, i64 0, i64 0))
%204 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.161, i64 0, i64 0))
%205 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.162, i64 0, i64 0))
%206 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.163, i64 0, i64 0))
%207 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.164, i64 0, i64 0))
%208 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.165, i64 0, i64 0))
%209 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.166, i64 0, i64 0))
%210 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.167, i64 0, i64 0))
%211 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.168, i64 0, i64 0))
%212 = call i32 @putchar(i8 signext 10)
%213 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @.str.38, i64 0, i64 0))
br label %214
214: ; preds = %170, %221
%215 = phi i64 [ 0, %170 ], [ %226, %221 ]
%216 = trunc i64 %215 to i32
%217 = and i32 %216, 31
%218 = icmp eq i32 %217, 0
br i1 %218, label %219, label %221
219: ; preds = %214
%220 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([21 x i8], [21 x i8]* @.str.39, i64 0, i64 0), i32 %216)
br label %221
221: ; preds = %219, %214
%222 = getelementptr inbounds [65536 x i8], [65536 x i8]* %5, i64 0, i64 %215
%223 = load i8, i8* %222
%224 = sext i8 %223 to i32
%225 = call i32 (i8*, ...) @printf(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @.str.40, i64 0, i64 0), i32 %224)
%226 = add nuw nsw i64 %215, 1
%227 = icmp eq i64 %226, 65536
br i1 %227, label %228, label %214
228: ; preds = %221
%229 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([4 x i8], [4 x i8]* @str.169, i64 0, i64 0))
%230 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%231 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str.170, i64 0, i64 0))
%232 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.171, i64 0, i64 0))
%233 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([6 x i8], [6 x i8]* @str.172, i64 0, i64 0))
%234 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @str.173, i64 0, i64 0))
%235 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.174, i64 0, i64 0))
%236 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.175, i64 0, i64 0))
%237 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @str.176, i64 0, i64 0))
%238 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.177, i64 0, i64 0))
%239 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([61 x i8], [61 x i8]* @str.178, i64 0, i64 0))
%240 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @str.179, i64 0, i64 0))
%241 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.180, i64 0, i64 0))
%242 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.181, i64 0, i64 0))
%243 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str.182, i64 0, i64 0))
%244 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @str.183, i64 0, i64 0))
%245 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.184, i64 0, i64 0))
%246 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.185, i64 0, i64 0))
%247 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @str.186, i64 0, i64 0))
%248 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.187, i64 0, i64 0))
%249 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.188, i64 0, i64 0))
%250 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.189, i64 0, i64 0))
%251 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.190, i64 0, i64 0))
%252 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.191, i64 0, i64 0))
%253 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.192, i64 0, i64 0))
%254 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.193, i64 0, i64 0))
%255 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([35 x i8], [35 x i8]* @str.194, i64 0, i64 0))
%256 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.195, i64 0, i64 0))
%257 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([61 x i8], [61 x i8]* @str.196, i64 0, i64 0))
%258 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.197, i64 0, i64 0))
%259 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.198, i64 0, i64 0))
%260 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.199, i64 0, i64 0))
%261 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.200, i64 0, i64 0))
%262 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.201, i64 0, i64 0))
%263 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.202, i64 0, i64 0))
%264 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.203, i64 0, i64 0))
%265 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str.204, i64 0, i64 0))
%266 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str.205, i64 0, i64 0))
%267 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @str.206, i64 0, i64 0))
%268 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.207, i64 0, i64 0))
%269 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.208, i64 0, i64 0))
%270 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.209, i64 0, i64 0))
%271 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.210, i64 0, i64 0))
%272 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.211, i64 0, i64 0))
%273 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([43 x i8], [43 x i8]* @str.212, i64 0, i64 0))
%274 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.213, i64 0, i64 0))
%275 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([7 x i8], [7 x i8]* @str.214, i64 0, i64 0))
%276 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%277 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.215, i64 0, i64 0))
%278 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @str.216, i64 0, i64 0))
%279 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([25 x i8], [25 x i8]* @str.217, i64 0, i64 0))
%280 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([30 x i8], [30 x i8]* @str.218, i64 0, i64 0))
%281 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.219, i64 0, i64 0))
%282 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([51 x i8], [51 x i8]* @str.220, i64 0, i64 0))
%283 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([56 x i8], [56 x i8]* @str.221, i64 0, i64 0))
%284 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([50 x i8], [50 x i8]* @str.222, i64 0, i64 0))
%285 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @str.271, i64 0, i64 0))
%286 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @str.224, i64 0, i64 0))
%287 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([55 x i8], [55 x i8]* @str.225, i64 0, i64 0))
%288 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.263, i64 0, i64 0))
%289 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.270, i64 0, i64 0))
%290 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.228, i64 0, i64 0))
%291 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.263, i64 0, i64 0))
%292 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.270, i64 0, i64 0))
%293 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([71 x i8], [71 x i8]* @str.231, i64 0, i64 0))
%294 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.232, i64 0, i64 0))
%295 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([73 x i8], [73 x i8]* @str.233, i64 0, i64 0))
%296 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([71 x i8], [71 x i8]* @str.234, i64 0, i64 0))
%297 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.235, i64 0, i64 0))
%298 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([24 x i8], [24 x i8]* @str.236, i64 0, i64 0))
%299 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @str.237, i64 0, i64 0))
%300 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%301 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.238, i64 0, i64 0))
%302 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([47 x i8], [47 x i8]* @str.239, i64 0, i64 0))
%303 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([49 x i8], [49 x i8]* @str.240, i64 0, i64 0))
%304 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.241, i64 0, i64 0))
%305 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([54 x i8], [54 x i8]* @str.242, i64 0, i64 0))
%306 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.243, i64 0, i64 0))
%307 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.244, i64 0, i64 0))
%308 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.245, i64 0, i64 0))
%309 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.255, i64 0, i64 0))
%310 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%311 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.247, i64 0, i64 0))
%312 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.251, i64 0, i64 0))
%313 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.255, i64 0, i64 0))
%314 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.250, i64 0, i64 0))
%315 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.251, i64 0, i64 0))
%316 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.255, i64 0, i64 0))
%317 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([19 x i8], [19 x i8]* @str.253, i64 0, i64 0))
%318 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([26 x i8], [26 x i8]* @str.254, i64 0, i64 0))
%319 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([14 x i8], [14 x i8]* @str.255, i64 0, i64 0))
%320 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%321 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([70 x i8], [70 x i8]* @str.256, i64 0, i64 0))
%322 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.270, i64 0, i64 0))
%323 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([87 x i8], [87 x i8]* @str.258, i64 0, i64 0))
%324 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.259, i64 0, i64 0))
%325 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([86 x i8], [86 x i8]* @str.260, i64 0, i64 0))
%326 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.261, i64 0, i64 0))
%327 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.262, i64 0, i64 0))
%328 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.263, i64 0, i64 0))
%329 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.270, i64 0, i64 0))
%330 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str.265, i64 0, i64 0))
%331 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([56 x i8], [56 x i8]* @str.266, i64 0, i64 0))
%332 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([12 x i8], [12 x i8]* @str.267, i64 0, i64 0))
%333 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([16 x i8], [16 x i8]* @str.268, i64 0, i64 0))
%334 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([81 x i8], [81 x i8]* @str.269, i64 0, i64 0))
%335 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.270, i64 0, i64 0))
%336 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%337 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @str.271, i64 0, i64 0))
%338 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([5 x i8], [5 x i8]* @str.272, i64 0, i64 0))
%339 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.273, i64 0, i64 0))
%340 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%341 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.274, i64 0, i64 0))
%342 = call i32 bitcast (i32 (i8)* @putchar to i32 (i32)*)(i32 10)
%343 = call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([2 x i8], [2 x i8]* @str.275, i64 0, i64 0))
%344 = load i32, i32* @EXIT_SUCCESS
%345 = call i32 @exit(i32 %344)
unreachable
}