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

/* Forward declarations */

/* Type definitions */

/* Variables and functions */
int /*<<< orphan*/ ffpmsg(char *);
int /*<<< orphan*/ strcat(char *, char *);
int /*<<< orphan*/ strcpy(char *, char *);
size_t strcspn(char *, char *);
size_t strlen(char *);
int strncmp(char *, char *, int);
int /*<<< orphan*/ strncpy(char *, char *, size_t);
size_t strspn(char *, char *);
int ffpsvc(char *card, char *value, char *comm, int *status) {
  int jj;
  size_t ii, cardlen, nblank, valpos;
  if (*status > 0)
    return (*status);
  value[0] = '\0';
  if (comm)
    comm[0] = '\0';
  cardlen = strlen(card);
  if (((card)[0] < ("HIERARCH ")[0] ? -1
       : (card)[0] > ("HIERARCH ")[0]
           ? 1
           : strncmp((card), ("HIERARCH "), (9))) == 0) {
    valpos = strcspn(card, "=");
    if (valpos == cardlen) {
      if (comm != NULL) {
        if (cardlen > 8) {
          strcpy(comm, &card[8]);
          jj = cardlen - 8;
          for (jj--; jj >= 0; jj--) {
            if (comm[jj] == ' ')
              comm[jj] = '\0';
            else
              break;
          }
        }
      }
      return (*status);
    }
    valpos++;
  } else if (cardlen < 9 ||
             ((card)[0] < ("COMMENT ")[0] ? -1
              : (card)[0] > ("COMMENT ")[0]
                  ? 1
                  : strncmp((card), ("COMMENT "), (8))) == 0 ||
             ((card)[0] < ("HISTORY ")[0] ? -1
              : (card)[0] > ("HISTORY ")[0]
                  ? 1
                  : strncmp((card), ("HISTORY "), (8))) == 0 ||
             ((card)[0] < ("END     ")[0] ? -1
              : (card)[0] > ("END     ")[0]
                  ? 1
                  : strncmp((card), ("END     "), (8))) == 0 ||
             ((card)[0] < ("        ")[0] ? -1
              : (card)[0] > ("        ")[0]
                  ? 1
                  : strncmp((card), ("        "), (8))) == 0 ||
             ((&card[8])[0] < ("= ")[0] ? -1
              : (&card[8])[0] > ("= ")[0]
                  ? 1
                  : strncmp((&card[8]), ("= "), (2))) != 0) {
    if (comm != NULL) {
      if (cardlen > 8) {
        strcpy(comm, &card[8]);
        jj = cardlen - 8;
        for (jj--; jj >= 0; jj--) {
          if (comm[jj] == ' ')
            comm[jj] = '\0';
          else
            break;
        }
      }
    }
    return (*status);
  } else {
    valpos = 10;
  }
  nblank = strspn(&card[valpos], " ");
  if (nblank + valpos == cardlen) {
    return (*status);
  }
  ii = valpos + nblank;
  if (card[ii] == '/') {
    ii++;
  } else if (card[ii] == '\'') {
    value[0] = card[ii];
    for (jj = 1, ii++; ii < cardlen; ii++, jj++) {
      if (card[ii] == '\'') {
        if (card[ii + 1] == '\'') {
          value[jj] = card[ii];
          ii++;
          jj++;
        } else {
          value[jj] = card[ii];
          break;
        }
      }
      value[jj] = card[ii];
    }
    if (ii == cardlen) {
      value[jj] = '\0';
      ffpmsg("This keyword string value has no closing quote:");
      ffpmsg(card);
      return (*status = 205);
    } else {
      value[jj + 1] = '\0';
      ii++;
    }
  } else if (card[ii] == '(') {
    nblank = strcspn(&card[ii], ")");
    if (nblank == strlen(&card[ii])) {
      ffpmsg("This complex keyword value has no closing ')':");
      ffpmsg(card);
      return (*status = 205);
    }
    nblank++;
    strncpy(value, &card[ii], nblank);
    value[nblank] = '\0';
    ii = ii + nblank;
  } else {
    nblank = strcspn(&card[ii], " /");
    strncpy(value, &card[ii], nblank);
    value[nblank] = '\0';
    ii = ii + nblank;
  }
  if (comm) {
    nblank = strspn(&card[ii], " ");
    ii = ii + nblank;
    if (ii < 80) {
      if (card[ii] == '/') {
        ii++;
        if (card[ii] == ' ')
          ii++;
      }
      strcat(comm, &card[ii]);
      jj = strlen(comm);
      for (jj--; jj >= 0; jj--) {
        if (comm[jj] == ' ')
          comm[jj] = '\0';
        else
          break;
      }
    }
  }
  return (*status);
}


x86 assembly (clang, -O0):
<ffpsvc>:
push   %rbp
mov    %rsp,%rbp
sub    $0x90,%rsp
mov    %rdi,-0x10(%rbp)
mov    %rsi,-0x18(%rbp)
mov    %rdx,-0x20(%rbp)
mov    %rcx,-0x28(%rbp)
mov    -0x28(%rbp),%rax
cmpl   $0x0,(%rax)
jle    11b6 <ffpsvc+0x36>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    19d8 <ffpsvc+0x858>
mov    -0x18(%rbp),%rax
movb   $0x0,(%rax)
cmpq   $0x0,-0x20(%rbp)
je     11cf <ffpsvc+0x4f>
mov    -0x20(%rbp),%rax
movb   $0x0,(%rax)
mov    -0x10(%rbp),%rdi
call   1060 <strlen@plt>
mov    %rax,-0x40(%rbp)
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xe16(%rip),%ecx
cmp    %ecx,%eax
jge    11ff <ffpsvc+0x7f>
mov    $0xffffffff,%eax
mov    %eax,-0x54(%rbp)
jmp    1240 <ffpsvc+0xc0>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xdf3(%rip),%ecx
cmp    %ecx,%eax
jle    1222 <ffpsvc+0xa2>
mov    $0x1,%eax
mov    %eax,-0x58(%rbp)
jmp    123a <ffpsvc+0xba>
mov    -0x10(%rbp),%rdi
lea    0xdd3(%rip),%rsi
mov    $0x9,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x58(%rbp)
mov    -0x58(%rbp),%eax
mov    %eax,-0x54(%rbp)
mov    -0x54(%rbp),%eax
cmp    $0x0,%eax
jne    131a <ffpsvc+0x19a>
mov    -0x10(%rbp),%rdi
lea    0xdb3(%rip),%rsi
call   1090 <strcspn@plt>
mov    %rax,-0x50(%rbp)
mov    -0x50(%rbp),%rax
cmp    -0x40(%rbp),%rax
jne    1309 <ffpsvc+0x189>
cmpq   $0x0,-0x20(%rbp)
je     12fb <ffpsvc+0x17b>
cmpq   $0x8,-0x40(%rbp)
jbe    12f6 <ffpsvc+0x176>
mov    -0x20(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    $0x8,%rsi
call   1050 <strcpy@plt>
mov    -0x40(%rbp),%rax
sub    $0x8,%rax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jl     12f1 <ffpsvc+0x171>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    12d9 <ffpsvc+0x159>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    12de <ffpsvc+0x15e>
jmp    12f1 <ffpsvc+0x171>
jmp    12e3 <ffpsvc+0x163>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    12a9 <ffpsvc+0x129>
jmp    12f6 <ffpsvc+0x176>
jmp    12fb <ffpsvc+0x17b>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    19d8 <ffpsvc+0x858>
mov    -0x50(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x50(%rbp)
jmp    1603 <ffpsvc+0x483>
cmpq   $0x9,-0x40(%rbp)
jb     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xcd9(%rip),%ecx
cmp    %ecx,%eax
jge    1348 <ffpsvc+0x1c8>
mov    $0xffffffff,%eax
mov    %eax,-0x5c(%rbp)
jmp    1389 <ffpsvc+0x209>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xcb6(%rip),%ecx
cmp    %ecx,%eax
jle    136b <ffpsvc+0x1eb>
mov    $0x1,%eax
mov    %eax,-0x60(%rbp)
jmp    1383 <ffpsvc+0x203>
mov    -0x10(%rbp),%rdi
lea    0xc96(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x60(%rbp)
mov    -0x60(%rbp),%eax
mov    %eax,-0x5c(%rbp)
mov    -0x5c(%rbp),%eax
cmp    $0x0,%eax
je     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xc72(%rip),%ecx
cmp    %ecx,%eax
jge    13b8 <ffpsvc+0x238>
mov    $0xffffffff,%eax
mov    %eax,-0x64(%rbp)
jmp    13f9 <ffpsvc+0x279>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xc4f(%rip),%ecx
cmp    %ecx,%eax
jle    13db <ffpsvc+0x25b>
mov    $0x1,%eax
mov    %eax,-0x68(%rbp)
jmp    13f3 <ffpsvc+0x273>
mov    -0x10(%rbp),%rdi
lea    0xc2f(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x68(%rbp)
mov    -0x68(%rbp),%eax
mov    %eax,-0x64(%rbp)
mov    -0x64(%rbp),%eax
cmp    $0x0,%eax
je     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xc0b(%rip),%ecx
cmp    %ecx,%eax
jge    1428 <ffpsvc+0x2a8>
mov    $0xffffffff,%eax
mov    %eax,-0x6c(%rbp)
jmp    1469 <ffpsvc+0x2e9>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xbe8(%rip),%ecx
cmp    %ecx,%eax
jle    144b <ffpsvc+0x2cb>
mov    $0x1,%eax
mov    %eax,-0x70(%rbp)
jmp    1463 <ffpsvc+0x2e3>
mov    -0x10(%rbp),%rdi
lea    0xbc8(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x70(%rbp)
mov    -0x70(%rbp),%eax
mov    %eax,-0x6c(%rbp)
mov    -0x6c(%rbp),%eax
cmp    $0x0,%eax
je     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xba4(%rip),%ecx
cmp    %ecx,%eax
jge    1498 <ffpsvc+0x318>
mov    $0xffffffff,%eax
mov    %eax,-0x74(%rbp)
jmp    14d9 <ffpsvc+0x359>
mov    -0x10(%rbp),%rax
movsbl (%rax),%eax
movsbl 0xb81(%rip),%ecx
cmp    %ecx,%eax
jle    14bb <ffpsvc+0x33b>
mov    $0x1,%eax
mov    %eax,-0x78(%rbp)
jmp    14d3 <ffpsvc+0x353>
mov    -0x10(%rbp),%rdi
lea    0xb61(%rip),%rsi
mov    $0x8,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x78(%rbp)
mov    -0x78(%rbp),%eax
mov    %eax,-0x74(%rbp)
mov    -0x74(%rbp),%eax
cmp    $0x0,%eax
je     155b <ffpsvc+0x3db>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
movsbl 0xb3c(%rip),%ecx
cmp    %ecx,%eax
jge    1509 <ffpsvc+0x389>
mov    $0xffffffff,%eax
mov    %eax,-0x7c(%rbp)
jmp    154f <ffpsvc+0x3cf>
mov    -0x10(%rbp),%rax
movsbl 0x8(%rax),%eax
movsbl 0xb18(%rip),%ecx
cmp    %ecx,%eax
jle    152d <ffpsvc+0x3ad>
mov    $0x1,%eax
mov    %eax,-0x80(%rbp)
jmp    1549 <ffpsvc+0x3c9>
mov    -0x10(%rbp),%rdi
add    $0x8,%rdi
lea    0xaf4(%rip),%rsi
mov    $0x2,%edx
call   1040 <strncmp@plt>
mov    %eax,-0x80(%rbp)
mov    -0x80(%rbp),%eax
mov    %eax,-0x7c(%rbp)
mov    -0x7c(%rbp),%eax
cmp    $0x0,%eax
je     15f6 <ffpsvc+0x476>
cmpq   $0x0,-0x20(%rbp)
je     15e8 <ffpsvc+0x468>
cmpq   $0x8,-0x40(%rbp)
jbe    15e3 <ffpsvc+0x463>
mov    -0x20(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    $0x8,%rsi
call   1050 <strcpy@plt>
mov    -0x40(%rbp),%rax
sub    $0x8,%rax
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jl     15de <ffpsvc+0x45e>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    15c6 <ffpsvc+0x446>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    15cb <ffpsvc+0x44b>
jmp    15de <ffpsvc+0x45e>
jmp    15d0 <ffpsvc+0x450>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    1596 <ffpsvc+0x416>
jmp    15e3 <ffpsvc+0x463>
jmp    15e8 <ffpsvc+0x468>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    19d8 <ffpsvc+0x858>
movq   $0xa,-0x50(%rbp)
jmp    1603 <ffpsvc+0x483>
mov    -0x10(%rbp),%rdi
add    -0x50(%rbp),%rdi
lea    0xa1c(%rip),%rsi
call   1080 <strspn@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
add    -0x50(%rbp),%rax
cmp    -0x40(%rbp),%rax
jne    163b <ffpsvc+0x4bb>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
jmp    19d8 <ffpsvc+0x858>
mov    -0x50(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    166d <ffpsvc+0x4ed>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    18d6 <ffpsvc+0x756>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    17c6 <ffpsvc+0x646>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%cl
mov    -0x18(%rbp),%rax
mov    %cl,(%rax)
movl   $0x1,-0x2c(%rbp)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jae    175f <ffpsvc+0x5df>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    172f <ffpsvc+0x5af>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl 0x1(%rax,%rcx,1),%eax
cmp    $0x27,%eax
jne    170f <ffpsvc+0x58f>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    172a <ffpsvc+0x5aa>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
jmp    175f <ffpsvc+0x5df>
jmp    172f <ffpsvc+0x5af>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
mov    (%rax,%rcx,1),%dl
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
mov    %dl,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x2c(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x2c(%rbp)
jmp    16a6 <ffpsvc+0x526>
mov    -0x38(%rbp),%rax
cmp    -0x40(%rbp),%rax
jne    17a4 <ffpsvc+0x624>
mov    -0x18(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
lea    0x8b3(%rip),%rdi
call   1070 <ffpmsg@plt>
mov    -0x10(%rbp),%rdi
call   1070 <ffpmsg@plt>
mov    -0x28(%rbp),%rax
movl   $0xcd,(%rax)
movl   $0xcd,-0x4(%rbp)
jmp    19d8 <ffpsvc+0x858>
mov    -0x18(%rbp),%rax
mov    -0x2c(%rbp),%ecx
add    $0x1,%ecx
movslq %ecx,%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    18d1 <ffpsvc+0x751>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x28,%eax
jne    1887 <ffpsvc+0x707>
mov    -0x10(%rbp),%rdi
add    -0x38(%rbp),%rdi
lea    0x879(%rip),%rsi
call   1090 <strcspn@plt>
mov    %rax,-0x48(%rbp)
mov    -0x48(%rbp),%rax
mov    %rax,-0x88(%rbp)
mov    -0x10(%rbp),%rdi
add    -0x38(%rbp),%rdi
call   1060 <strlen@plt>
mov    %rax,%rcx
mov    -0x88(%rbp),%rax
cmp    %rcx,%rax
jne    1849 <ffpsvc+0x6c9>
lea    0x840(%rip),%rdi
call   1070 <ffpmsg@plt>
mov    -0x10(%rbp),%rdi
call   1070 <ffpmsg@plt>
mov    -0x28(%rbp),%rax
movl   $0xcd,(%rax)
movl   $0xcd,-0x4(%rbp)
jmp    19d8 <ffpsvc+0x858>
mov    -0x48(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    -0x38(%rbp),%rsi
mov    -0x48(%rbp),%rdx
call   1030 <strncpy@plt>
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x38(%rbp)
jmp    18cc <ffpsvc+0x74c>
mov    -0x10(%rbp),%rdi
add    -0x38(%rbp),%rdi
lea    0x7fe(%rip),%rsi
call   1090 <strcspn@plt>
mov    %rax,-0x48(%rbp)
mov    -0x18(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    -0x38(%rbp),%rsi
mov    -0x48(%rbp),%rdx
call   1030 <strncpy@plt>
mov    -0x18(%rbp),%rax
mov    -0x48(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
mov    -0x38(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x38(%rbp)
jmp    18d1 <ffpsvc+0x751>
jmp    18d6 <ffpsvc+0x756>
cmpq   $0x0,-0x20(%rbp)
je     19cf <ffpsvc+0x84f>
mov    -0x10(%rbp),%rdi
add    -0x38(%rbp),%rdi
lea    0x73e(%rip),%rsi
call   1080 <strspn@plt>
mov    %rax,-0x48(%rbp)
mov    -0x38(%rbp),%rax
add    -0x48(%rbp),%rax
mov    %rax,-0x38(%rbp)
cmpq   $0x50,-0x38(%rbp)
jae    19ca <ffpsvc+0x84a>
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x2f,%eax
jne    1957 <ffpsvc+0x7d7>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
mov    -0x10(%rbp),%rax
mov    -0x38(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    1952 <ffpsvc+0x7d2>
mov    -0x38(%rbp),%rax
add    $0x1,%rax
mov    %rax,-0x38(%rbp)
jmp    1957 <ffpsvc+0x7d7>
mov    -0x20(%rbp),%rdi
mov    -0x10(%rbp),%rsi
add    -0x38(%rbp),%rsi
call   10a0 <strcat@plt>
mov    -0x20(%rbp),%rdi
call   1060 <strlen@plt>
mov    %eax,-0x2c(%rbp)
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
cmpl   $0x0,-0x2c(%rbp)
jl     19c5 <ffpsvc+0x845>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movsbl (%rax,%rcx,1),%eax
cmp    $0x20,%eax
jne    19ad <ffpsvc+0x82d>
mov    -0x20(%rbp),%rax
movslq -0x2c(%rbp),%rcx
movb   $0x0,(%rax,%rcx,1)
jmp    19b2 <ffpsvc+0x832>
jmp    19c5 <ffpsvc+0x845>
jmp    19b7 <ffpsvc+0x837>
mov    -0x2c(%rbp),%eax
add    $0xffffffff,%eax
mov    %eax,-0x2c(%rbp)
jmp    197d <ffpsvc+0x7fd>
jmp    19ca <ffpsvc+0x84a>
jmp    19cf <ffpsvc+0x84f>
mov    -0x28(%rbp),%rax
mov    (%rax),%eax
mov    %eax,-0x4(%rbp)
mov    -0x4(%rbp),%eax
add    $0x90,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<ffpsvc>:
push   %rbp
push   %r15
push   %r14
push   %r13
push   %r12
push   %rbx
push   %rax
mov    (%rcx),%eax
test   %eax,%eax
jg     1514 <ffpsvc+0x394>
mov    %rcx,%r14
mov    %rdx,%r13
mov    %rsi,%r12
mov    %rdi,%r15
movb   $0x0,(%rsi)
test   %rdx,%rdx
je     11ae <ffpsvc+0x2e>
movb   $0x0,0x0(%r13)
mov    %r15,%rdi
call   1060 <strlen@plt>
mov    %rax,%rbx
cmpb   $0x48,(%r15)
jne    11db <ffpsvc+0x5b>
lea    0xe3a(%rip),%rsi
mov    %r15,%rdi
mov    $0x9,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     12d0 <ffpsvc+0x150>
cmp    $0x9,%rbx
jb     1511 <ffpsvc+0x391>
mov    (%r15),%al
cmp    $0x43,%al
jne    120b <ffpsvc+0x8b>
lea    0xe19(%rip),%rsi
mov    %r15,%rdi
mov    $0x8,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1289 <ffpsvc+0x109>
mov    (%r15),%al
cmp    $0x48,%al
jne    122a <ffpsvc+0xaa>
lea    0xdff(%rip),%rsi
mov    %r15,%rdi
mov    $0x8,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1289 <ffpsvc+0x109>
mov    (%r15),%al
cmp    $0x45,%al
jne    1249 <ffpsvc+0xc9>
lea    0xde9(%rip),%rsi
mov    %r15,%rdi
mov    $0x8,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1289 <ffpsvc+0x109>
mov    (%r15),%al
cmp    $0x20,%al
jne    1265 <ffpsvc+0xe5>
lea    0xdd3(%rip),%rsi
mov    %r15,%rdi
mov    $0x8,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1289 <ffpsvc+0x109>
cmpb   $0x3d,0x8(%r15)
jne    1289 <ffpsvc+0x109>
lea    0x8(%r15),%rdi
lea    0xdb9(%rip),%rsi
mov    $0x2,%edx
call   1040 <strncmp@plt>
test   %eax,%eax
je     1338 <ffpsvc+0x1b8>
test   %r13,%r13
je     1511 <ffpsvc+0x391>
add    $0x8,%r15
mov    %r13,%rdi
mov    %r15,%rsi
call   1050 <strcpy@plt>
add    $0xfffffff7,%ebx
js     1511 <ffpsvc+0x391>
nopw   0x0(%rax,%rax,1)
mov    %ebx,%eax
cmpb   $0x20,0x0(%r13,%rax,1)
jne    1511 <ffpsvc+0x391>
movb   $0x0,0x0(%r13,%rax,1)
lea    -0x1(%rax),%ebx
test   %eax,%eax
jg     12b0 <ffpsvc+0x130>
jmp    1511 <ffpsvc+0x391>
lea    0xd33(%rip),%rsi
mov    %r15,%rdi
call   1090 <strcspn@plt>
cmp    %rbx,%rax
jne    132f <ffpsvc+0x1af>
test   %r13,%r13
je     1511 <ffpsvc+0x391>
cmp    $0x9,%rbx
jb     1511 <ffpsvc+0x391>
add    $0x8,%r15
mov    %r13,%rdi
mov    %r15,%rsi
call   1050 <strcpy@plt>
add    $0xfffffff7,%ebx
js     1511 <ffpsvc+0x391>
mov    %ebx,%eax
cmpb   $0x20,0x0(%r13,%rax,1)
jne    1511 <ffpsvc+0x391>
movb   $0x0,0x0(%r13,%rax,1)
lea    -0x1(%rax),%ebx
test   %eax,%eax
jg     130f <ffpsvc+0x18f>
jmp    1511 <ffpsvc+0x391>
mov    %rax,%rbp
add    $0x1,%rbp
jmp    133d <ffpsvc+0x1bd>
mov    $0xa,%ebp
lea    (%r15,%rbp,1),%rdi
lea    0xce6(%rip),%rsi
call   1080 <strspn@plt>
add    %rbp,%rax
cmp    %rbx,%rax
je     1511 <ffpsvc+0x391>
mov    (%r15,%rax,1),%cl
cmp    $0x27,%cl
je     137d <ffpsvc+0x1fd>
lea    (%r15,%rax,1),%rbx
cmp    $0x28,%cl
je     13dd <ffpsvc+0x25d>
cmp    $0x2f,%cl
jne    1409 <ffpsvc+0x289>
add    $0x1,%rax
jmp    149c <ffpsvc+0x31c>
movb   $0x27,(%r12)
lea    0x1(%rax),%rcx
mov    $0x1,%esi
cmp    %rbx,%rcx
jae    143b <ffpsvc+0x2bb>
mov    $0x1,%esi
jmp    13b5 <ffpsvc+0x235>
mov    %rcx,%rax
movslq %esi,%rsi
mov    %dl,(%r12,%rsi,1)
add    $0x1,%esi
lea    0x1(%rax),%rcx
cmp    %rbx,%rcx
jae    143b <ffpsvc+0x2bb>
movzbl (%r15,%rcx,1),%edx
cmp    $0x27,%dl
jne    139b <ffpsvc+0x21b>
cmpb   $0x27,0x2(%r15,%rax,1)
movslq %esi,%rdx
movb   $0x27,(%r12,%rdx,1)
jne    143b <ffpsvc+0x2bb>
add    $0x2,%rax
add    $0x1,%esi
movzbl (%r15,%rax,1),%edx
jmp    139e <ffpsvc+0x21e>
mov    %rax,(%rsp)
lea    0xc7b(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcspn@plt>
mov    %rax,%rbp
mov    %rbx,%rdi
call   1060 <strlen@plt>
cmp    %rax,%rbp
jne    146d <ffpsvc+0x2ed>
lea    0xc5e(%rip),%rdi
jmp    144f <ffpsvc+0x2cf>
mov    %rax,(%rsp)
lea    0xc80(%rip),%rsi
mov    %rbx,%rdi
call   1090 <strcspn@plt>
mov    %rax,%rbp
mov    %r12,%rdi
mov    %rbx,%rsi
mov    %rax,%rdx
call   1030 <strncpy@plt>
mov    (%rsp),%rax
movb   $0x0,(%r12,%rbp,1)
add    %rbp,%rax
jmp    149c <ffpsvc+0x31c>
cmp    %rbx,%rcx
jne    148f <ffpsvc+0x30f>
movslq %esi,%rax
movb   $0x0,(%r12,%rax,1)
lea    0xbe4(%rip),%rdi
call   1070 <ffpmsg@plt>
mov    %r15,%rdi
call   1070 <ffpmsg@plt>
movl   $0xcd,(%r14)
mov    $0xcd,%eax
jmp    1514 <ffpsvc+0x394>
lea    0x1(%rbp),%rdx
mov    %r12,%rdi
mov    %rbx,%rsi
call   1030 <strncpy@plt>
movb   $0x0,0x1(%r12,%rbp,1)
mov    (%rsp),%rax
add    %rbp,%rax
add    $0x1,%rax
jmp    149c <ffpsvc+0x31c>
movslq %esi,%rcx
movb   $0x0,0x1(%rcx,%r12,1)
add    $0x2,%rax
test   %r13,%r13
je     1511 <ffpsvc+0x391>
lea    (%r15,%rax,1),%rdi
mov    %rax,%rbx
lea    0xb7f(%rip),%rsi
call   1080 <strspn@plt>
add    %rbx,%rax
cmp    $0x4f,%rax
ja     1511 <ffpsvc+0x391>
cmpb   $0x2f,(%r15,%rax,1)
jne    14d6 <ffpsvc+0x356>
cmpb   $0x20,0x1(%r15,%rax,1)
lea    0x2(%rax),%rcx
lea    0x1(%rax),%rax
cmove  %rcx,%rax
add    %rax,%r15
mov    %r13,%rdi
mov    %r15,%rsi
call   10a0 <strcat@plt>
mov    %r13,%rdi
call   1060 <strlen@plt>
test   %eax,%eax
jle    1511 <ffpsvc+0x391>
mov    %eax,%eax
add    $0x1,%rax
lea    -0x2(%rax),%ecx
cmpb   $0x20,0x0(%r13,%rcx,1)
jne    1511 <ffpsvc+0x391>
movb   $0x0,0x0(%r13,%rcx,1)
add    $0xffffffffffffffff,%rax
cmp    $0x1,%rax
ja     14f6 <ffpsvc+0x376>
mov    (%r14),%eax
add    $0x8,%rsp
pop    %rbx
pop    %r12
pop    %r13
pop    %r14
pop    %r15
pop    %rbp
ret

LLVM IR (-O0):
@.str = [10 x i8] c"HIERARCH \00"
@.str.1 = [2 x i8] c"=\00"
@.str.2 = [9 x i8] c"COMMENT \00"
@.str.3 = [9 x i8] c"HISTORY \00"
@.str.4 = [9 x i8] c"END \00"
@.str.5 = [9 x i8] c" \00"
@.str.6 = [3 x i8] c"= \00"
@.str.7 = [2 x i8] c" \00"
@.str.8 = [48 x i8] c"This keyword string value has no closing quote:\00"
@.str.9 = [2 x i8] c")\00"
@.str.10 = [47 x i8] c"This complex keyword value has no closing ')':\00"
@.str.11 = [3 x i8] c" /\00"
define i32 @ffpsvc(i8* %0, i8* %1, i8* %2, i32* %3) {
%5 = alloca i32
%6 = alloca i8*
%7 = alloca i8*
%8 = alloca i8*
%9 = alloca i32*
%10 = alloca i32
%11 = alloca i64
%12 = alloca i64
%13 = alloca i64
%14 = alloca i64
store i8* %0, i8** %6
store i8* %1, i8** %7
store i8* %2, i8** %8
store i32* %3, i32** %9
%15 = load i32*, i32** %9
%16 = load i32, i32* %15
%17 = icmp sgt i32 %16, 0
br i1 %17, label %18, label %21
18: ; preds = %4
%19 = load i32*, i32** %9
%20 = load i32, i32* %19
store i32 %20, i32* %5
br label %535
21: ; preds = %4
%22 = load i8*, i8** %7
%23 = getelementptr inbounds i8, i8* %22, i64 0
store i8 0, i8* %23
%24 = load i8*, i8** %8
%25 = icmp ne i8* %24, null
br i1 %25, label %26, label %29
26: ; preds = %21
%27 = load i8*, i8** %8
%28 = getelementptr inbounds i8, i8* %27, i64 0
store i8 0, i8* %28
br label %29
29: ; preds = %26, %21
%30 = load i8*, i8** %6
%31 = call i64 @strlen(i8* %30)
store i64 %31, i64* %12
%32 = load i8*, i8** %6
%33 = getelementptr inbounds i8, i8* %32, i64 0
%34 = load i8, i8* %33
%35 = sext i8 %34 to i32
%36 = load i8, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0)
%37 = sext i8 %36 to i32
%38 = icmp slt i32 %35, %37
br i1 %38, label %39, label %40
39: ; preds = %29
br label %54
40: ; preds = %29
%41 = load i8*, i8** %6
%42 = getelementptr inbounds i8, i8* %41, i64 0
%43 = load i8, i8* %42
%44 = sext i8 %43 to i32
%45 = load i8, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0)
%46 = sext i8 %45 to i32
%47 = icmp sgt i32 %44, %46
br i1 %47, label %48, label %49
48: ; preds = %40
br label %52
49: ; preds = %40
%50 = load i8*, i8** %6
%51 = call i32 @strncmp(i8* %50, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i32 9)
br label %52
52: ; preds = %49, %48
%53 = phi i32 [ 1, %48 ], [ %51, %49 ]
br label %54
54: ; preds = %52, %39
%55 = phi i32 [ -1, %39 ], [ %53, %52 ]
%56 = icmp eq i32 %55, 0
br i1 %56, label %57, label %108
57: ; preds = %54
%58 = load i8*, i8** %6
%59 = call i64 @strcspn(i8* %58, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
store i64 %59, i64* %14
%60 = load i64, i64* %14
%61 = load i64, i64* %12
%62 = icmp eq i64 %60, %61
br i1 %62, label %63, label %105
63: ; preds = %57
%64 = load i8*, i8** %8
%65 = icmp ne i8* %64, null
br i1 %65, label %66, label %102
66: ; preds = %63
%67 = load i64, i64* %12
%68 = icmp ugt i64 %67, 8
br i1 %68, label %69, label %101
69: ; preds = %66
%70 = load i8*, i8** %8
%71 = load i8*, i8** %6
%72 = getelementptr inbounds i8, i8* %71, i64 8
%73 = call i32 @strcpy(i8* %70, i8* %72)
%74 = load i64, i64* %12
%75 = sub i64 %74, 8
%76 = trunc i64 %75 to i32
store i32 %76, i32* %10
%77 = load i32, i32* %10
%78 = add nsw i32 %77, -1
store i32 %78, i32* %10
br label %79
79: ; preds = %97, %69
%80 = load i32, i32* %10
%81 = icmp sge i32 %80, 0
br i1 %81, label %82, label %100
82: ; preds = %79
%83 = load i8*, i8** %8
%84 = load i32, i32* %10
%85 = sext i32 %84 to i64
%86 = getelementptr inbounds i8, i8* %83, i64 %85
%87 = load i8, i8* %86
%88 = sext i8 %87 to i32
%89 = icmp eq i32 %88, 32
br i1 %89, label %90, label %95
90: ; preds = %82
%91 = load i8*, i8** %8
%92 = load i32, i32* %10
%93 = sext i32 %92 to i64
%94 = getelementptr inbounds i8, i8* %91, i64 %93
store i8 0, i8* %94
br label %96
95: ; preds = %82
br label %100
96: ; preds = %90
br label %97
97: ; preds = %96
%98 = load i32, i32* %10
%99 = add nsw i32 %98, -1
store i32 %99, i32* %10
br label %79
100: ; preds = %95, %79
br label %101
101: ; preds = %100, %66
br label %102
102: ; preds = %101, %63
%103 = load i32*, i32** %9
%104 = load i32, i32* %103
store i32 %104, i32* %5
br label %535
105: ; preds = %57
%106 = load i64, i64* %14
%107 = add i64 %106, 1
store i64 %107, i64* %14
br label %288
108: ; preds = %54
%109 = load i64, i64* %12
%110 = icmp ult i64 %109, 9
br i1 %110, label %244, label %111
111: ; preds = %108
%112 = load i8*, i8** %6
%113 = getelementptr inbounds i8, i8* %112, i64 0
%114 = load i8, i8* %113
%115 = sext i8 %114 to i32
%116 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0)
%117 = sext i8 %116 to i32
%118 = icmp slt i32 %115, %117
br i1 %118, label %119, label %120
119: ; preds = %111
br label %134
120: ; preds = %111
%121 = load i8*, i8** %6
%122 = getelementptr inbounds i8, i8* %121, i64 0
%123 = load i8, i8* %122
%124 = sext i8 %123 to i32
%125 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0)
%126 = sext i8 %125 to i32
%127 = icmp sgt i32 %124, %126
br i1 %127, label %128, label %129
128: ; preds = %120
br label %132
129: ; preds = %120
%130 = load i8*, i8** %6
%131 = call i32 @strncmp(i8* %130, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 8)
br label %132
132: ; preds = %129, %128
%133 = phi i32 [ 1, %128 ], [ %131, %129 ]
br label %134
134: ; preds = %132, %119
%135 = phi i32 [ -1, %119 ], [ %133, %132 ]
%136 = icmp eq i32 %135, 0
br i1 %136, label %244, label %137
137: ; preds = %134
%138 = load i8*, i8** %6
%139 = getelementptr inbounds i8, i8* %138, i64 0
%140 = load i8, i8* %139
%141 = sext i8 %140 to i32
%142 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0)
%143 = sext i8 %142 to i32
%144 = icmp slt i32 %141, %143
br i1 %144, label %145, label %146
145: ; preds = %137
br label %160
146: ; preds = %137
%147 = load i8*, i8** %6
%148 = getelementptr inbounds i8, i8* %147, i64 0
%149 = load i8, i8* %148
%150 = sext i8 %149 to i32
%151 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0)
%152 = sext i8 %151 to i32
%153 = icmp sgt i32 %150, %152
br i1 %153, label %154, label %155
154: ; preds = %146
br label %158
155: ; preds = %146
%156 = load i8*, i8** %6
%157 = call i32 @strncmp(i8* %156, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 8)
br label %158
158: ; preds = %155, %154
%159 = phi i32 [ 1, %154 ], [ %157, %155 ]
br label %160
160: ; preds = %158, %145
%161 = phi i32 [ -1, %145 ], [ %159, %158 ]
%162 = icmp eq i32 %161, 0
br i1 %162, label %244, label %163
163: ; preds = %160
%164 = load i8*, i8** %6
%165 = getelementptr inbounds i8, i8* %164, i64 0
%166 = load i8, i8* %165
%167 = sext i8 %166 to i32
%168 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0)
%169 = sext i8 %168 to i32
%170 = icmp slt i32 %167, %169
br i1 %170, label %171, label %172
171: ; preds = %163
br label %186
172: ; preds = %163
%173 = load i8*, i8** %6
%174 = getelementptr inbounds i8, i8* %173, i64 0
%175 = load i8, i8* %174
%176 = sext i8 %175 to i32
%177 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0)
%178 = sext i8 %177 to i32
%179 = icmp sgt i32 %176, %178
br i1 %179, label %180, label %181
180: ; preds = %172
br label %184
181: ; preds = %172
%182 = load i8*, i8** %6
%183 = call i32 @strncmp(i8* %182, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 8)
br label %184
184: ; preds = %181, %180
%185 = phi i32 [ 1, %180 ], [ %183, %181 ]
br label %186
186: ; preds = %184, %171
%187 = phi i32 [ -1, %171 ], [ %185, %184 ]
%188 = icmp eq i32 %187, 0
br i1 %188, label %244, label %189
189: ; preds = %186
%190 = load i8*, i8** %6
%191 = getelementptr inbounds i8, i8* %190, i64 0
%192 = load i8, i8* %191
%193 = sext i8 %192 to i32
%194 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0)
%195 = sext i8 %194 to i32
%196 = icmp slt i32 %193, %195
br i1 %196, label %197, label %198
197: ; preds = %189
br label %212
198: ; preds = %189
%199 = load i8*, i8** %6
%200 = getelementptr inbounds i8, i8* %199, i64 0
%201 = load i8, i8* %200
%202 = sext i8 %201 to i32
%203 = load i8, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0)
%204 = sext i8 %203 to i32
%205 = icmp sgt i32 %202, %204
br i1 %205, label %206, label %207
206: ; preds = %198
br label %210
207: ; preds = %198
%208 = load i8*, i8** %6
%209 = call i32 @strncmp(i8* %208, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0), i32 8)
br label %210
210: ; preds = %207, %206
%211 = phi i32 [ 1, %206 ], [ %209, %207 ]
br label %212
212: ; preds = %210, %197
%213 = phi i32 [ -1, %197 ], [ %211, %210 ]
%214 = icmp eq i32 %213, 0
br i1 %214, label %244, label %215
215: ; preds = %212
%216 = load i8*, i8** %6
%217 = getelementptr inbounds i8, i8* %216, i64 8
%218 = getelementptr inbounds i8, i8* %217, i64 0
%219 = load i8, i8* %218
%220 = sext i8 %219 to i32
%221 = load i8, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0)
%222 = sext i8 %221 to i32
%223 = icmp slt i32 %220, %222
br i1 %223, label %224, label %225
224: ; preds = %215
br label %241
225: ; preds = %215
%226 = load i8*, i8** %6
%227 = getelementptr inbounds i8, i8* %226, i64 8
%228 = getelementptr inbounds i8, i8* %227, i64 0
%229 = load i8, i8* %228
%230 = sext i8 %229 to i32
%231 = load i8, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0)
%232 = sext i8 %231 to i32
%233 = icmp sgt i32 %230, %232
br i1 %233, label %234, label %235
234: ; preds = %225
br label %239
235: ; preds = %225
%236 = load i8*, i8** %6
%237 = getelementptr inbounds i8, i8* %236, i64 8
%238 = call i32 @strncmp(i8* %237, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32 2)
br label %239
239: ; preds = %235, %234
%240 = phi i32 [ 1, %234 ], [ %238, %235 ]
br label %241
241: ; preds = %239, %224
%242 = phi i32 [ -1, %224 ], [ %240, %239 ]
%243 = icmp ne i32 %242, 0
br i1 %243, label %244, label %286
244: ; preds = %241, %212, %186, %160, %134, %108
%245 = load i8*, i8** %8
%246 = icmp ne i8* %245, null
br i1 %246, label %247, label %283
247: ; preds = %244
%248 = load i64, i64* %12
%249 = icmp ugt i64 %248, 8
br i1 %249, label %250, label %282
250: ; preds = %247
%251 = load i8*, i8** %8
%252 = load i8*, i8** %6
%253 = getelementptr inbounds i8, i8* %252, i64 8
%254 = call i32 @strcpy(i8* %251, i8* %253)
%255 = load i64, i64* %12
%256 = sub i64 %255, 8
%257 = trunc i64 %256 to i32
store i32 %257, i32* %10
%258 = load i32, i32* %10
%259 = add nsw i32 %258, -1
store i32 %259, i32* %10
br label %260
260: ; preds = %278, %250
%261 = load i32, i32* %10
%262 = icmp sge i32 %261, 0
br i1 %262, label %263, label %281
263: ; preds = %260
%264 = load i8*, i8** %8
%265 = load i32, i32* %10
%266 = sext i32 %265 to i64
%267 = getelementptr inbounds i8, i8* %264, i64 %266
%268 = load i8, i8* %267
%269 = sext i8 %268 to i32
%270 = icmp eq i32 %269, 32
br i1 %270, label %271, label %276
271: ; preds = %263
%272 = load i8*, i8** %8
%273 = load i32, i32* %10
%274 = sext i32 %273 to i64
%275 = getelementptr inbounds i8, i8* %272, i64 %274
store i8 0, i8* %275
br label %277
276: ; preds = %263
br label %281
277: ; preds = %271
br label %278
278: ; preds = %277
%279 = load i32, i32* %10
%280 = add nsw i32 %279, -1
store i32 %280, i32* %10
br label %260
281: ; preds = %276, %260
br label %282
282: ; preds = %281, %247
br label %283
283: ; preds = %282, %244
%284 = load i32*, i32** %9
%285 = load i32, i32* %284
store i32 %285, i32* %5
br label %535
286: ; preds = %241
store i64 10, i64* %14
br label %287
287: ; preds = %286
br label %288
288: ; preds = %287, %105
%289 = load i8*, i8** %6
%290 = load i64, i64* %14
%291 = getelementptr inbounds i8, i8* %289, i64 %290
%292 = call i64 @strspn(i8* %291, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
store i64 %292, i64* %13
%293 = load i64, i64* %13
%294 = load i64, i64* %14
%295 = add i64 %293, %294
%296 = load i64, i64* %12
%297 = icmp eq i64 %295, %296
br i1 %297, label %298, label %301
298: ; preds = %288
%299 = load i32*, i32** %9
%300 = load i32, i32* %299
store i32 %300, i32* %5
br label %535
301: ; preds = %288
%302 = load i64, i64* %14
%303 = load i64, i64* %13
%304 = add i64 %302, %303
store i64 %304, i64* %11
%305 = load i8*, i8** %6
%306 = load i64, i64* %11
%307 = getelementptr inbounds i8, i8* %305, i64 %306
%308 = load i8, i8* %307
%309 = sext i8 %308 to i32
%310 = icmp eq i32 %309, 47
br i1 %310, label %311, label %314
311: ; preds = %301
%312 = load i64, i64* %11
%313 = add i64 %312, 1
store i64 %313, i64* %11
br label %465
314: ; preds = %301
%315 = load i8*, i8** %6
%316 = load i64, i64* %11
%317 = getelementptr inbounds i8, i8* %315, i64 %316
%318 = load i8, i8* %317
%319 = sext i8 %318 to i32
%320 = icmp eq i32 %319, 39
br i1 %320, label %321, label %408
321: ; preds = %314
%322 = load i8*, i8** %6
%323 = load i64, i64* %11
%324 = getelementptr inbounds i8, i8* %322, i64 %323
%325 = load i8, i8* %324
%326 = load i8*, i8** %7
%327 = getelementptr inbounds i8, i8* %326, i64 0
store i8 %325, i8* %327
store i32 1, i32* %10
%328 = load i64, i64* %11
%329 = add i64 %328, 1
store i64 %329, i64* %11
br label %330
330: ; preds = %381, %321
%331 = load i64, i64* %11
%332 = load i64, i64* %12
%333 = icmp ult i64 %331, %332
br i1 %333, label %334, label %386
334: ; preds = %330
%335 = load i8*, i8** %6
%336 = load i64, i64* %11
%337 = getelementptr inbounds i8, i8* %335, i64 %336
%338 = load i8, i8* %337
%339 = sext i8 %338 to i32
%340 = icmp eq i32 %339, 39
br i1 %340, label %341, label %372
341: ; preds = %334
%342 = load i8*, i8** %6
%343 = load i64, i64* %11
%344 = add i64 %343, 1
%345 = getelementptr inbounds i8, i8* %342, i64 %344
%346 = load i8, i8* %345
%347 = sext i8 %346 to i32
%348 = icmp eq i32 %347, 39
br i1 %348, label %349, label %362
349: ; preds = %341
%350 = load i8*, i8** %6
%351 = load i64, i64* %11
%352 = getelementptr inbounds i8, i8* %350, i64 %351
%353 = load i8, i8* %352
%354 = load i8*, i8** %7
%355 = load i32, i32* %10
%356 = sext i32 %355 to i64
%357 = getelementptr inbounds i8, i8* %354, i64 %356
store i8 %353, i8* %357
%358 = load i64, i64* %11
%359 = add i64 %358, 1
store i64 %359, i64* %11
%360 = load i32, i32* %10
%361 = add nsw i32 %360, 1
store i32 %361, i32* %10
br label %371
362: ; preds = %341
%363 = load i8*, i8** %6
%364 = load i64, i64* %11
%365 = getelementptr inbounds i8, i8* %363, i64 %364
%366 = load i8, i8* %365
%367 = load i8*, i8** %7
%368 = load i32, i32* %10
%369 = sext i32 %368 to i64
%370 = getelementptr inbounds i8, i8* %367, i64 %369
store i8 %366, i8* %370
br label %386
371: ; preds = %349
br label %372
372: ; preds = %371, %334
%373 = load i8*, i8** %6
%374 = load i64, i64* %11
%375 = getelementptr inbounds i8, i8* %373, i64 %374
%376 = load i8, i8* %375
%377 = load i8*, i8** %7
%378 = load i32, i32* %10
%379 = sext i32 %378 to i64
%380 = getelementptr inbounds i8, i8* %377, i64 %379
store i8 %376, i8* %380
br label %381
381: ; preds = %372
%382 = load i64, i64* %11
%383 = add i64 %382, 1
store i64 %383, i64* %11
%384 = load i32, i32* %10
%385 = add nsw i32 %384, 1
store i32 %385, i32* %10
br label %330
386: ; preds = %362, %330
%387 = load i64, i64* %11
%388 = load i64, i64* %12
%389 = icmp eq i64 %387, %388
br i1 %389, label %390, label %399
390: ; preds = %386
%391 = load i8*, i8** %7
%392 = load i32, i32* %10
%393 = sext i32 %392 to i64
%394 = getelementptr inbounds i8, i8* %391, i64 %393
store i8 0, i8* %394
%395 = call i32 @ffpmsg(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.8, i64 0, i64 0))
%396 = load i8*, i8** %6
%397 = call i32 @ffpmsg(i8* %396)
%398 = load i32*, i32** %9
store i32 205, i32* %398
store i32 205, i32* %5
br label %535
399: ; preds = %386
%400 = load i8*, i8** %7
%401 = load i32, i32* %10
%402 = add nsw i32 %401, 1
%403 = sext i32 %402 to i64
%404 = getelementptr inbounds i8, i8* %400, i64 %403
store i8 0, i8* %404
%405 = load i64, i64* %11
%406 = add i64 %405, 1
store i64 %406, i64* %11
br label %407
407: ; preds = %399
br label %464
408: ; preds = %314
%409 = load i8*, i8** %6
%410 = load i64, i64* %11
%411 = getelementptr inbounds i8, i8* %409, i64 %410
%412 = load i8, i8* %411
%413 = sext i8 %412 to i32
%414 = icmp eq i32 %413, 40
br i1 %414, label %415, label %446
415: ; preds = %408
%416 = load i8*, i8** %6
%417 = load i64, i64* %11
%418 = getelementptr inbounds i8, i8* %416, i64 %417
%419 = call i64 @strcspn(i8* %418, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0))
store i64 %419, i64* %13
%420 = load i64, i64* %13
%421 = load i8*, i8** %6
%422 = load i64, i64* %11
%423 = getelementptr inbounds i8, i8* %421, i64 %422
%424 = call i64 @strlen(i8* %423)
%425 = icmp eq i64 %420, %424
br i1 %425, label %426, label %431
426: ; preds = %415
%427 = call i32 @ffpmsg(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.10, i64 0, i64 0))
%428 = load i8*, i8** %6
%429 = call i32 @ffpmsg(i8* %428)
%430 = load i32*, i32** %9
store i32 205, i32* %430
store i32 205, i32* %5
br label %535
431: ; preds = %415
%432 = load i64, i64* %13
%433 = add i64 %432, 1
store i64 %433, i64* %13
%434 = load i8*, i8** %7
%435 = load i8*, i8** %6
%436 = load i64, i64* %11
%437 = getelementptr inbounds i8, i8* %435, i64 %436
%438 = load i64, i64* %13
%439 = call i32 @strncpy(i8* %434, i8* %437, i64 %438)
%440 = load i8*, i8** %7
%441 = load i64, i64* %13
%442 = getelementptr inbounds i8, i8* %440, i64 %441
store i8 0, i8* %442
%443 = load i64, i64* %11
%444 = load i64, i64* %13
%445 = add i64 %443, %444
store i64 %445, i64* %11
br label %463
446: ; preds = %408
%447 = load i8*, i8** %6
%448 = load i64, i64* %11
%449 = getelementptr inbounds i8, i8* %447, i64 %448
%450 = call i64 @strcspn(i8* %449, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0))
store i64 %450, i64* %13
%451 = load i8*, i8** %7
%452 = load i8*, i8** %6
%453 = load i64, i64* %11
%454 = getelementptr inbounds i8, i8* %452, i64 %453
%455 = load i64, i64* %13
%456 = call i32 @strncpy(i8* %451, i8* %454, i64 %455)
%457 = load i8*, i8** %7
%458 = load i64, i64* %13
%459 = getelementptr inbounds i8, i8* %457, i64 %458
store i8 0, i8* %459
%460 = load i64, i64* %11
%461 = load i64, i64* %13
%462 = add i64 %460, %461
store i64 %462, i64* %11
br label %463
463: ; preds = %446, %431
br label %464
464: ; preds = %463, %407
br label %465
465: ; preds = %464, %311
%466 = load i8*, i8** %8
%467 = icmp ne i8* %466, null
br i1 %467, label %468, label %532
468: ; preds = %465
%469 = load i8*, i8** %6
%470 = load i64, i64* %11
%471 = getelementptr inbounds i8, i8* %469, i64 %470
%472 = call i64 @strspn(i8* %471, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
store i64 %472, i64* %13
%473 = load i64, i64* %11
%474 = load i64, i64* %13
%475 = add i64 %473, %474
store i64 %475, i64* %11
%476 = load i64, i64* %11
%477 = icmp ult i64 %476, 80
br i1 %477, label %478, label %531
478: ; preds = %468
%479 = load i8*, i8** %6
%480 = load i64, i64* %11
%481 = getelementptr inbounds i8, i8* %479, i64 %480
%482 = load i8, i8* %481
%483 = sext i8 %482 to i32
%484 = icmp eq i32 %483, 47
br i1 %484, label %485, label %498
485: ; preds = %478
%486 = load i64, i64* %11
%487 = add i64 %486, 1
store i64 %487, i64* %11
%488 = load i8*, i8** %6
%489 = load i64, i64* %11
%490 = getelementptr inbounds i8, i8* %488, i64 %489
%491 = load i8, i8* %490
%492 = sext i8 %491 to i32
%493 = icmp eq i32 %492, 32
br i1 %493, label %494, label %497
494: ; preds = %485
%495 = load i64, i64* %11
%496 = add i64 %495, 1
store i64 %496, i64* %11
br label %497
497: ; preds = %494, %485
br label %498
498: ; preds = %497, %478
%499 = load i8*, i8** %8
%500 = load i8*, i8** %6
%501 = load i64, i64* %11
%502 = getelementptr inbounds i8, i8* %500, i64 %501
%503 = call i32 @strcat(i8* %499, i8* %502)
%504 = load i8*, i8** %8
%505 = call i64 @strlen(i8* %504)
%506 = trunc i64 %505 to i32
store i32 %506, i32* %10
%507 = load i32, i32* %10
%508 = add nsw i32 %507, -1
store i32 %508, i32* %10
br label %509
509: ; preds = %527, %498
%510 = load i32, i32* %10
%511 = icmp sge i32 %510, 0
br i1 %511, label %512, label %530
512: ; preds = %509
%513 = load i8*, i8** %8
%514 = load i32, i32* %10
%515 = sext i32 %514 to i64
%516 = getelementptr inbounds i8, i8* %513, i64 %515
%517 = load i8, i8* %516
%518 = sext i8 %517 to i32
%519 = icmp eq i32 %518, 32
br i1 %519, label %520, label %525
520: ; preds = %512
%521 = load i8*, i8** %8
%522 = load i32, i32* %10
%523 = sext i32 %522 to i64
%524 = getelementptr inbounds i8, i8* %521, i64 %523
store i8 0, i8* %524
br label %526
525: ; preds = %512
br label %530
526: ; preds = %520
br label %527
527: ; preds = %526
%528 = load i32, i32* %10
%529 = add nsw i32 %528, -1
store i32 %529, i32* %10
br label %509
530: ; preds = %525, %509
br label %531
531: ; preds = %530, %468
br label %532
532: ; preds = %531, %465
%533 = load i32*, i32** %9
%534 = load i32, i32* %533
store i32 %534, i32* %5
br label %535
535: ; preds = %532, %426, %390, %298, %283, %102, %18
%536 = load i32, i32* %5
ret i32 %536
}

LLVM IR (-O2):
@.str = [10 x i8] c"HIERARCH \00"
@.str.1 = [2 x i8] c"=\00"
@.str.2 = [9 x i8] c"COMMENT \00"
@.str.3 = [9 x i8] c"HISTORY \00"
@.str.4 = [9 x i8] c"END \00"
@.str.5 = [9 x i8] c" \00"
@.str.6 = [3 x i8] c"= \00"
@.str.7 = [2 x i8] c" \00"
@.str.8 = [48 x i8] c"This keyword string value has no closing quote:\00"
@.str.9 = [2 x i8] c")\00"
@.str.10 = [47 x i8] c"This complex keyword value has no closing ')':\00"
@.str.11 = [3 x i8] c" /\00"
define i32 @ffpsvc(i8* %0, i8* %1, i8* %2, i32* nocapture %3) {
%5 = load i32, i32* %3
%6 = icmp sgt i32 %5, 0
br i1 %6, label %211, label %7
7: ; preds = %4
store i8 0, i8* %1
%8 = icmp ne i8* %2, null
br i1 %8, label %9, label %10
9: ; preds = %7
store i8 0, i8* %2
br label %10
10: ; preds = %9, %7
%11 = tail call i64 @strlen(i8* dereferenceable(1) %0)
%12 = load i8, i8* %0
%13 = icmp eq i8 %12, 72
br i1 %13, label %14, label %42
14: ; preds = %10
%15 = tail call i32 @strncmp(i8* %0, i8* getelementptr inbounds ([10 x i8], [10 x i8]* @.str, i64 0, i64 0), i32 9)
%16 = icmp eq i32 %15, 0
br i1 %16, label %17, label %42
17: ; preds = %14
%18 = tail call i64 @strcspn(i8* %0, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.1, i64 0, i64 0))
%19 = icmp eq i64 %18, %11
br i1 %19, label %20, label %40
20: ; preds = %17
%21 = icmp ugt i64 %11, 8
%22 = select i1 %8, i1 %21, i1 false
br i1 %22, label %23, label %38
23: ; preds = %20
%24 = getelementptr inbounds i8, i8* %0, i64 8
%25 = tail call i32 @strcpy(i8* %2, i8* %24)
%26 = trunc i64 %11 to i32
%27 = add i32 %26, -9
%28 = icmp sgt i32 %27, -1
br i1 %28, label %29, label %38
29: ; preds = %23, %35
%30 = phi i32 [ %36, %35 ], [ %27, %23 ]
%31 = zext i32 %30 to i64
%32 = getelementptr inbounds i8, i8* %2, i64 %31
%33 = load i8, i8* %32
%34 = icmp eq i8 %33, 32
br i1 %34, label %35, label %38
35: ; preds = %29
store i8 0, i8* %32
%36 = add nsw i32 %30, -1
%37 = icmp sgt i32 %30, 0
br i1 %37, label %29, label %38
38: ; preds = %35, %29, %23, %20
%39 = load i32, i32* %3
br label %211
40: ; preds = %17
%41 = add i64 %18, 1
br label %99
42: ; preds = %10, %14
%43 = icmp ult i64 %11, 9
br i1 %43, label %97, label %44
44: ; preds = %42
%45 = load i8, i8* %0
%46 = icmp eq i8 %45, 67
br i1 %46, label %47, label %52
47: ; preds = %44
%48 = tail call i32 @strncmp(i8* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.2, i64 0, i64 0), i32 8)
%49 = icmp eq i32 %48, 0
br i1 %49, label %81, label %50
50: ; preds = %47
%51 = load i8, i8* %0
br label %52
52: ; preds = %44, %50
%53 = phi i8 [ %51, %50 ], [ %45, %44 ]
%54 = icmp eq i8 %53, 72
br i1 %54, label %55, label %60
55: ; preds = %52
%56 = tail call i32 @strncmp(i8* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.3, i64 0, i64 0), i32 8)
%57 = icmp eq i32 %56, 0
br i1 %57, label %81, label %58
58: ; preds = %55
%59 = load i8, i8* %0
br label %60
60: ; preds = %58, %52
%61 = phi i8 [ %59, %58 ], [ %53, %52 ]
%62 = icmp eq i8 %61, 69
br i1 %62, label %63, label %68
63: ; preds = %60
%64 = tail call i32 @strncmp(i8* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.4, i64 0, i64 0), i32 8)
%65 = icmp eq i32 %64, 0
br i1 %65, label %81, label %66
66: ; preds = %63
%67 = load i8, i8* %0
br label %68
68: ; preds = %60, %66
%69 = phi i8 [ %67, %66 ], [ %61, %60 ]
%70 = icmp eq i8 %69, 32
br i1 %70, label %71, label %74
71: ; preds = %68
%72 = tail call i32 @strncmp(i8* %0, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.5, i64 0, i64 0), i32 8)
%73 = icmp eq i32 %72, 0
br i1 %73, label %81, label %74
74: ; preds = %68, %71
%75 = getelementptr inbounds i8, i8* %0, i64 8
%76 = load i8, i8* %75
%77 = icmp eq i8 %76, 61
br i1 %77, label %78, label %81
78: ; preds = %74
%79 = tail call i32 @strncmp(i8* %75, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.6, i64 0, i64 0), i32 2)
%80 = icmp eq i32 %79, 0
br i1 %80, label %99, label %81
81: ; preds = %74, %78, %71, %63, %55, %47
br i1 %8, label %82, label %97
82: ; preds = %81
%83 = getelementptr inbounds i8, i8* %0, i64 8
%84 = tail call i32 @strcpy(i8* %2, i8* %83)
%85 = trunc i64 %11 to i32
%86 = add i32 %85, -9
%87 = icmp sgt i32 %86, -1
br i1 %87, label %88, label %97
88: ; preds = %82, %94
%89 = phi i32 [ %95, %94 ], [ %86, %82 ]
%90 = zext i32 %89 to i64
%91 = getelementptr inbounds i8, i8* %2, i64 %90
%92 = load i8, i8* %91
%93 = icmp eq i8 %92, 32
br i1 %93, label %94, label %97
94: ; preds = %88
store i8 0, i8* %91
%95 = add nsw i32 %89, -1
%96 = icmp sgt i32 %89, 0
br i1 %96, label %88, label %97
97: ; preds = %94, %88, %82, %42, %81
%98 = load i32, i32* %3
br label %211
99: ; preds = %78, %40
%100 = phi i64 [ %41, %40 ], [ 10, %78 ]
%101 = getelementptr inbounds i8, i8* %0, i64 %100
%102 = tail call i64 @strspn(i8* %101, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
%103 = add i64 %102, %100
%104 = icmp eq i64 %103, %11
br i1 %104, label %105, label %107
105: ; preds = %99
%106 = load i32, i32* %3
br label %211
107: ; preds = %99
%108 = getelementptr inbounds i8, i8* %0, i64 %103
%109 = load i8, i8* %108
switch i8 %109, label %168 [
i8 47, label %110
i8 39, label %112
i8 40, label %156
]
110: ; preds = %107
%111 = add i64 %103, 1
br label %173
112: ; preds = %107
store i8 39, i8* %1
%113 = add i64 %103, 1
%114 = icmp ult i64 %113, %11
br i1 %114, label %115, label %141
115: ; preds = %112, %132
%116 = phi i64 [ %139, %132 ], [ %113, %112 ]
%117 = phi i64 [ %135, %132 ], [ %103, %112 ]
%118 = phi i32 [ %138, %132 ], [ 1, %112 ]
%119 = getelementptr inbounds i8, i8* %0, i64 %116
%120 = load i8, i8* %119
%121 = icmp eq i8 %120, 39
br i1 %121, label %122, label %132
122: ; preds = %115
%123 = add i64 %117, 2
%124 = getelementptr inbounds i8, i8* %0, i64 %123
%125 = load i8, i8* %124
%126 = icmp eq i8 %125, 39
%127 = sext i32 %118 to i64
%128 = getelementptr inbounds i8, i8* %1, i64 %127
store i8 39, i8* %128
br i1 %126, label %129, label %141
129: ; preds = %122
%130 = add nsw i32 %118, 1
%131 = load i8, i8* %124
br label %132
132: ; preds = %129, %115
%133 = phi i8 [ %131, %129 ], [ %120, %115 ]
%134 = phi i32 [ %130, %129 ], [ %118, %115 ]
%135 = phi i64 [ %123, %129 ], [ %116, %115 ]
%136 = sext i32 %134 to i64
%137 = getelementptr inbounds i8, i8* %1, i64 %136
store i8 %133, i8* %137
%138 = add nsw i32 %134, 1
%139 = add i64 %135, 1
%140 = icmp ult i64 %139, %11
br i1 %140, label %115, label %141
141: ; preds = %132, %122, %112
%142 = phi i32 [ 1, %112 ], [ %138, %132 ], [ %118, %122 ]
%143 = phi i64 [ %103, %112 ], [ %135, %132 ], [ %117, %122 ]
%144 = phi i64 [ %113, %112 ], [ %139, %132 ], [ %116, %122 ]
%145 = icmp eq i64 %144, %11
br i1 %145, label %146, label %151
146: ; preds = %141
%147 = sext i32 %142 to i64
%148 = getelementptr inbounds i8, i8* %1, i64 %147
store i8 0, i8* %148
%149 = tail call i32 @ffpmsg(i8* getelementptr inbounds ([48 x i8], [48 x i8]* @.str.8, i64 0, i64 0))
%150 = tail call i32 @ffpmsg(i8* %0)
store i32 205, i32* %3
br label %211
151: ; preds = %141
%152 = add nsw i32 %142, 1
%153 = sext i32 %152 to i64
%154 = getelementptr inbounds i8, i8* %1, i64 %153
store i8 0, i8* %154
%155 = add i64 %143, 2
br label %173
156: ; preds = %107
%157 = tail call i64 @strcspn(i8* %108, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.9, i64 0, i64 0))
%158 = tail call i64 @strlen(i8* %108)
%159 = icmp eq i64 %157, %158
br i1 %159, label %160, label %163
160: ; preds = %156
%161 = tail call i32 @ffpmsg(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.10, i64 0, i64 0))
%162 = tail call i32 @ffpmsg(i8* %0)
store i32 205, i32* %3
br label %211
163: ; preds = %156
%164 = add i64 %157, 1
%165 = tail call i32 @strncpy(i8* %1, i8* %108, i64 %164)
%166 = getelementptr inbounds i8, i8* %1, i64 %164
store i8 0, i8* %166
%167 = add i64 %164, %103
br label %173
168: ; preds = %107
%169 = tail call i64 @strcspn(i8* %108, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.11, i64 0, i64 0))
%170 = tail call i32 @strncpy(i8* %1, i8* %108, i64 %169)
%171 = getelementptr inbounds i8, i8* %1, i64 %169
store i8 0, i8* %171
%172 = add i64 %169, %103
br label %173
173: ; preds = %151, %168, %163, %110
%174 = phi i64 [ %111, %110 ], [ %155, %151 ], [ %167, %163 ], [ %172, %168 ]
br i1 %8, label %175, label %209
175: ; preds = %173
%176 = getelementptr inbounds i8, i8* %0, i64 %174
%177 = tail call i64 @strspn(i8* %176, i8* getelementptr inbounds ([2 x i8], [2 x i8]* @.str.7, i64 0, i64 0))
%178 = add i64 %177, %174
%179 = icmp ult i64 %178, 80
br i1 %179, label %180, label %209
180: ; preds = %175
%181 = getelementptr inbounds i8, i8* %0, i64 %178
%182 = load i8, i8* %181
%183 = icmp eq i8 %182, 47
br i1 %183, label %184, label %191
184: ; preds = %180
%185 = add nuw nsw i64 %178, 1
%186 = getelementptr inbounds i8, i8* %0, i64 %185
%187 = load i8, i8* %186
%188 = icmp eq i8 %187, 32
%189 = add nuw nsw i64 %178, 2
%190 = select i1 %188, i64 %189, i64 %185
br label %191
191: ; preds = %184, %180
%192 = phi i64 [ %178, %180 ], [ %190, %184 ]
%193 = getelementptr inbounds i8, i8* %0, i64 %192
%194 = tail call i32 @strcat(i8* %2, i8* %193)
%195 = tail call i64 @strlen(i8* %2)
%196 = trunc i64 %195 to i32
%197 = icmp sgt i32 %196, 0
br i1 %197, label %198, label %209
198: ; preds = %191
%199 = and i64 %195, 4294967295
br label %200
200: ; preds = %198, %207
%201 = phi i64 [ %199, %198 ], [ %202, %207 ]
%202 = add nsw i64 %201, -1
%203 = and i64 %202, 4294967295
%204 = getelementptr inbounds i8, i8* %2, i64 %203
%205 = load i8, i8* %204
%206 = icmp eq i8 %205, 32
br i1 %206, label %207, label %209
207: ; preds = %200
store i8 0, i8* %204
%208 = icmp ugt i64 %201, 1
br i1 %208, label %200, label %209
209: ; preds = %207, %200, %191, %175, %173
%210 = load i32, i32* %3
br label %211
211: ; preds = %4, %209, %160, %146, %105, %97, %38
%212 = phi i32 [ %39, %38 ], [ %106, %105 ], [ %210, %209 ], [ 205, %146 ], [ 205, %160 ], [ %98, %97 ], [ %5, %4 ]
ret i32 %212
}