#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*/ exit(int);
int /*<<< orphan*/ isNumero(char *);
int /*<<< orphan*/ printf(char *);
int /*<<< orphan*/ strcmp(char *, char *);
int strlen(char *);
scalar_t__ validaCNPJ(char *);
scalar_t__ validaCPF(char *);
main(int argc, char *argv[]) {
  char numeroCardinal[250] = "\0", numeroOrdinal[250] = "\0";
  if (argc < 2) {
    printf("VALIDACAO : Falta um parametro.\n");
    printf("\tDigite \"validacao --ajuda\" para obter ajuda.\n");
    exit(1);
  }
  if (argc > 3) {
    printf("VALIDACAO : Excesso de parametros\n");
    printf("\tDigite \"validacao --ajuda\" para obter ajuda.\n");
    exit(1);
  }
  if (argc == 2) {
    if ((!strcmp(*(argv + 1), "--ajuda")) || (!strcmp(*(argv + 1), "-a"))) {
      printf("Uso: validacao [opcoes] NUMERO\n");
      printf("\tonde: NUMERO eh um numero de CNPJ ou CPF. Lembre-\n");
      printf("\tse de que NUMERO deve conter APENAS digitos.\n");
      printf("ou   nw [opcoes]\n");
      printf("Verifica a validade de um numero de CNPJ ou CPF.\n");
      printf("Opcoes:\n");
      printf("\t--cnpj, -n      Verifica a validade de um numero de CNPJ.\n");
      printf("\t--cpf, -p       Verifica a validade de um numero de CPF.\n");
      printf("\t--ajuda, -a     Mostra esta ajuda e sai.\n");
      printf("\t--versao, -v    Mostra as notas da versao e sai.\n");
      printf("Exemplos:\n");
      printf("\tvalidacao --cpf 11111111111\n");
      printf("\tvalidacao --cnpj 11111111111111\n");
      exit(0);
    } else if ((!strcmp(*(argv + 1), "--versao")) ||
               (!strcmp(*(argv + 1), "-v"))) {
      printf("\tValidacao 0.5\n");
      printf("Escrito por Jose Lopes de Oliveira Júnior. ");
      printf("<jlojunior@gmail.com>\n\n");
      printf("Copyright (C) 2005.\n");
      printf("\tEste programa é um software de livre distribuição, que pode\n");
      printf("ser copiado e distribuído sob os termos da Licença Geral\n");
      printf("GNU, conforme publicada pela Free Software Foundation,\n");
      printf("versão 2 da licença, ou (a critério do autor) qualquer versão\n");
      printf("posterior.\n");
      printf("\tEste programa é distribuído na expectativa de ser útil aos\n");
      printf(
          "seus usuários, porém NÃO POSSUI NENHUMA GARANTIA, EXPLÍCITA OU\n");
      printf("IMPLÍCITA, COMERCIAL OU DE ATENDIMENTO A UMA DETERMINADA\n");
      printf("FINALIDADE. Consulte a Licença Pública Geral GNU.\n");
      exit(0);
    } else {
      printf("VALIDACAO : Parametro invalido.\n");
      printf("\tDigite \"validacao --ajuda\" para obter ajuda.\n");
      exit(1);
    }
  } else if (argc == 3) {
    if (!isNumero(*(argv + 2))) {
      printf("VALIDACAO : O terceiro parametro eh invalido.\n");
      printf("\tDigite \"validacao --ajuda\" para obter ajuda.\n");
      exit(1);
    }
    if ((!strcmp(*(argv + 1), "--cpf")) || (!strcmp(*(argv + 1), "-p"))) {
      if (strlen(*(argv + 2)) != 11) {
        printf("VALIDACAO : Numero de CPF invalido.\n");
        printf("\tDigite \"validacao --ajuda\" para obter ajuda.\n");
        exit(1);
      }
      if (validaCPF(*(argv + 2))) {
        printf("\tVALIDACAO : Numero de CPF valido. :)\n");
        exit(0);
      } else {
        printf("\tVALIDACAO : Numero de CPF invalido. :(\n");
        exit(0);
      }
    } else if ((!strcmp(*(argv + 1), "--cnpj")) ||
               (!strcmp(*(argv + 1), "-n"))) {
      if (strlen(*(argv + 2)) != 14) {
        printf("VALIDACAO : Numero de CNPJ invalido.\n");
        printf("\tDigite \"validacao --ajuda\" para obter ajuda.\n");
        exit(1);
      }
      if (validaCNPJ(*(argv + 2))) {
        printf("\tVALIDACAO : Numero de CNPJ valido. :)\n");
        exit(0);
      } else {
        printf("\tVALIDACAO : Numero de CNPJ invalido. :(\n");
        exit(0);
      }
    } else {
      printf("VALIDACAO : O segundo parametro eh invalido.\n");
      printf("\tDigite \"validacao --ajuda\" para obter ajuda.\n");
      exit(1);
    }
    exit(0);
  }
}


x86 assembly (clang, -O0):
<main>:
push   %rbp
mov    %rsp,%rbp
sub    $0x210,%rsp
mov    %edi,-0x4(%rbp)
mov    %rsi,-0x10(%rbp)
lea    -0x110(%rbp),%rdi
xor    %esi,%esi
mov    $0xfa,%edx
call   1050 <memset@plt>
lea    -0x210(%rbp),%rdi
xor    %esi,%esi
mov    $0xfa,%edx
call   1050 <memset@plt>
cmpl   $0x2,-0x4(%rbp)
jge    11e4 <main+0x64>
lea    0xe37(%rip),%rdi
call   1040 <printf@plt>
lea    0xe4c(%rip),%rdi
call   1040 <printf@plt>
mov    $0x1,%edi
call   10a0 <exit@plt>
cmpl   $0x3,-0x4(%rbp)
jle    1210 <main+0x90>
lea    0xe5b(%rip),%rdi
call   1040 <printf@plt>
lea    0xe20(%rip),%rdi
call   1040 <printf@plt>
mov    $0x1,%edi
call   10a0 <exit@plt>
cmpl   $0x2,-0x4(%rbp)
jne    13f6 <main+0x276>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xe4a(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
je     1254 <main+0xd4>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xe35(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    12f7 <main+0x177>
lea    0xe23(%rip),%rdi
call   1040 <printf@plt>
lea    0xe37(%rip),%rdi
call   1040 <printf@plt>
lea    0xe5f(%rip),%rdi
call   1040 <printf@plt>
lea    0xe82(%rip),%rdi
call   1040 <printf@plt>
lea    0xe88(%rip),%rdi
call   1040 <printf@plt>
lea    0xeae(%rip),%rdi
call   1040 <printf@plt>
lea    0xeab(%rip),%rdi
call   1040 <printf@plt>
lea    0xedb(%rip),%rdi
call   1040 <printf@plt>
lea    0xf0a(%rip),%rdi
call   1040 <printf@plt>
lea    0xf29(%rip),%rdi
call   1040 <printf@plt>
lea    0xf50(%rip),%rdi
call   1040 <printf@plt>
lea    0xf4f(%rip),%rdi
call   1040 <printf@plt>
lea    0xf61(%rip),%rdi
call   1040 <printf@plt>
xor    %edi,%edi
call   10a0 <exit@plt>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xf68(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
je     1331 <main+0x1b1>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0xf54(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    13d4 <main+0x254>
lea    0xf42(%rip),%rdi
call   1040 <printf@plt>
lea    0xf46(%rip),%rdi
call   1040 <printf@plt>
lea    0xf67(%rip),%rdi
call   1040 <printf@plt>
lea    0xf73(%rip),%rdi
call   1040 <printf@plt>
lea    0xf7c(%rip),%rdi
call   1040 <printf@plt>
lea    0xfb1(%rip),%rdi
call   1040 <printf@plt>
lea    0xfe1(%rip),%rdi
call   1040 <printf@plt>
lea    0x100d(%rip),%rdi
call   1040 <printf@plt>
lea    0x1044(%rip),%rdi
call   1040 <printf@plt>
lea    0x1044(%rip),%rdi
call   1040 <printf@plt>
lea    0x1078(%rip),%rdi
call   1040 <printf@plt>
lea    0x10b0(%rip),%rdi
call   1040 <printf@plt>
lea    0x10df(%rip),%rdi
call   1040 <printf@plt>
xor    %edi,%edi
call   10a0 <exit@plt>
lea    0x1101(%rip),%rdi
call   1040 <printf@plt>
lea    0xc3a(%rip),%rdi
call   1040 <printf@plt>
mov    $0x1,%edi
call   10a0 <exit@plt>
cmpl   $0x3,-0x4(%rbp)
jne    15b8 <main+0x438>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
call   1060 <isNumero@plt>
cmp    $0x0,%eax
jne    1438 <main+0x2b8>
lea    0x10e0(%rip),%rdi
call   1040 <printf@plt>
lea    0xbf8(%rip),%rdi
call   1040 <printf@plt>
mov    $0x1,%edi
call   10a0 <exit@plt>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0x10e5(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
je     1472 <main+0x2f2>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0x10ce(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    14e7 <main+0x367>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
call   1030 <strlen@plt>
cmp    $0xb,%eax
je     14aa <main+0x32a>
lea    0x10a6(%rip),%rdi
call   1040 <printf@plt>
lea    0xb86(%rip),%rdi
call   1040 <printf@plt>
mov    $0x1,%edi
call   10a0 <exit@plt>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
call   1090 <validaCPF@plt>
cmp    $0x0,%rax
je     14d4 <main+0x354>
lea    0x1092(%rip),%rdi
call   1040 <printf@plt>
xor    %edi,%edi
call   10a0 <exit@plt>
lea    0x10a6(%rip),%rdi
call   1040 <printf@plt>
xor    %edi,%edi
call   10a0 <exit@plt>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0x10b4(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
je     1521 <main+0x3a1>
mov    -0x10(%rbp),%rax
mov    0x8(%rax),%rdi
lea    0x109e(%rip),%rsi
call   1080 <strcmp@plt>
cmp    $0x0,%eax
jne    1596 <main+0x416>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
call   1030 <strlen@plt>
cmp    $0xe,%eax
je     1559 <main+0x3d9>
lea    0x1076(%rip),%rdi
call   1040 <printf@plt>
lea    0xad7(%rip),%rdi
call   1040 <printf@plt>
mov    $0x1,%edi
call   10a0 <exit@plt>
mov    -0x10(%rbp),%rax
mov    0x10(%rax),%rdi
call   1070 <validaCNPJ@plt>
cmp    $0x0,%rax
je     1583 <main+0x403>
lea    0x1063(%rip),%rdi
call   1040 <printf@plt>
xor    %edi,%edi
call   10a0 <exit@plt>
lea    0x1078(%rip),%rdi
call   1040 <printf@plt>
xor    %edi,%edi
call   10a0 <exit@plt>
lea    0x108f(%rip),%rdi
call   1040 <printf@plt>
lea    0xa78(%rip),%rdi
call   1040 <printf@plt>
mov    $0x1,%edi
call   10a0 <exit@plt>
jmp    15bd <main+0x43d>
xor    %eax,%eax
add    $0x210,%rsp
pop    %rbp
ret

x86 assembly (clang, -O2):
<main>:
push   %r14
push   %rbx
push   %rax
cmp    $0x1,%edi
jg     1192 <main+0x12>
lea    0x1457(%rip),%rdi
jmp    119e <main+0x1e>
cmp    $0x4,%edi
jb     11b9 <main+0x39>
lea    0x1427(%rip),%rdi
call   1030 <puts@plt>
lea    0x145d(%rip),%rdi
call   1030 <puts@plt>
mov    $0x1,%edi
call   10a0 <exit@plt>
mov    %rsi,%rbx
cmp    $0x2,%edi
jne    1296 <main+0x116>
mov    0x8(%rbx),%rbx
lea    0xe30(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     11f3 <main+0x73>
lea    0xe25(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
jne    130a <main+0x18a>
lea    0xf9f(%rip),%rdi
call   1030 <puts@plt>
lea    0xfb2(%rip),%rdi
call   1030 <puts@plt>
lea    0xfd9(%rip),%rdi
call   1030 <puts@plt>
lea    0xffb(%rip),%rdi
call   1030 <puts@plt>
lea    0x1000(%rip),%rdi
call   1030 <puts@plt>
lea    0x1025(%rip),%rdi
call   1030 <puts@plt>
lea    0x1021(%rip),%rdi
call   1030 <puts@plt>
lea    0x1050(%rip),%rdi
call   1030 <puts@plt>
lea    0x107e(%rip),%rdi
call   1030 <puts@plt>
lea    0x109c(%rip),%rdi
call   1030 <puts@plt>
lea    0x10c2(%rip),%rdi
call   1030 <puts@plt>
lea    0x10c0(%rip),%rdi
call   1030 <puts@plt>
lea    0x10d1(%rip),%rdi
call   1030 <puts@plt>
xor    %edi,%edi
call   10a0 <exit@plt>
mov    0x10(%rbx),%rdi
call   1060 <isNumero@plt>
test   %eax,%eax
jne    12af <main+0x12f>
lea    0xdad(%rip),%rdi
jmp    119e <main+0x1e>
mov    0x8(%rbx),%r14
lea    0xd8a(%rip),%rsi
mov    %r14,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     12dd <main+0x15d>
lea    0xd7d(%rip),%rsi
mov    %r14,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
jne    13dc <main+0x25c>
mov    0x10(%rbx),%rdi
call   1040 <strlen@plt>
cmp    $0xb,%eax
jne    13d0 <main+0x250>
mov    0x10(%rbx),%rdi
call   1090 <validaCPF@plt>
test   %rax,%rax
jne    142a <main+0x2aa>
lea    0xd7d(%rip),%rdi
jmp    128a <main+0x10a>
lea    0xcfa(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     1334 <main+0x1b4>
lea    0xcf0(%rip),%rsi
mov    %rbx,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
jne    1436 <main+0x2b6>
lea    0x1041(%rip),%rdi
call   1030 <puts@plt>
lea    0xcd0(%rip),%rdi
call   1050 <printf@plt>
lea    0x1038(%rip),%rdi
call   1030 <puts@plt>
lea    0x1043(%rip),%rdi
call   1030 <puts@plt>
lea    0x104b(%rip),%rdi
call   1030 <puts@plt>
lea    0x107f(%rip),%rdi
call   1030 <puts@plt>
lea    0x10ae(%rip),%rdi
call   1030 <puts@plt>
lea    0x10d9(%rip),%rdi
call   1030 <puts@plt>
lea    0x110f(%rip),%rdi
call   1030 <puts@plt>
lea    0x110e(%rip),%rdi
call   1030 <puts@plt>
lea    0x1141(%rip),%rdi
call   1030 <puts@plt>
lea    0x1178(%rip),%rdi
call   1030 <puts@plt>
lea    0x11a6(%rip),%rdi
jmp    128a <main+0x10a>
lea    0xcfc(%rip),%rdi
jmp    119e <main+0x1e>
lea    0xc6a(%rip),%rsi
mov    %r14,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
je     1402 <main+0x282>
lea    0xc5e(%rip),%rsi
mov    %r14,%rdi
call   1080 <strcmp@plt>
test   %eax,%eax
jne    144e <main+0x2ce>
mov    0x10(%rbx),%rdi
call   1040 <strlen@plt>
cmp    $0xe,%eax
jne    1442 <main+0x2c2>
mov    0x10(%rbx),%rdi
call   1070 <validaCNPJ@plt>
test   %rax,%rax
jne    145a <main+0x2da>
lea    0xcd2(%rip),%rdi
jmp    128a <main+0x10a>
lea    0xc7c(%rip),%rdi
jmp    128a <main+0x10a>
lea    0x1168(%rip),%rdi
jmp    119e <main+0x1e>
lea    0xcfe(%rip),%rdi
jmp    119e <main+0x1e>
lea    0xd17(%rip),%rdi
jmp    119e <main+0x1e>
lea    0xcbf(%rip),%rdi
jmp    128a <main+0x10a>

LLVM IR (-O0):
@.str = [33 x i8] c"VALIDACAO : Falta um parametro.\0A\00"
@.str.1 = [47 x i8] c"\09Digite \22validacao --ajuda\22 para obter ajuda.\0A\00"
@.str.2 = [35 x i8] c"VALIDACAO : Excesso de parametros\0A\00"
@.str.3 = [8 x i8] c"--ajuda\00"
@.str.4 = [3 x i8] c"-a\00"
@.str.5 = [32 x i8] c"Uso: validacao [opcoes] NUMERO\0A\00"
@.str.6 = [52 x i8] c"\09onde: NUMERO eh um numero de CNPJ ou CPF. Lembre-\0A\00"
@.str.7 = [47 x i8] c"\09se de que NUMERO deve conter APENAS digitos.\0A\00"
@.str.8 = [18 x i8] c"ou nw [opcoes]\0A\00"
@.str.9 = [50 x i8] c"Verifica a validade de um numero de CNPJ ou CPF.\0A\00"
@.str.10 = [9 x i8] c"Opcoes:\0A\00"
@.str.11 = [60 x i8] c"\09--cnpj, -n Verifica a validade de um numero de CNPJ.\0A\00"
@.str.12 = [59 x i8] c"\09--cpf, -p Verifica a validade de um numero de CPF.\0A\00"
@.str.13 = [43 x i8] c"\09--ajuda, -a Mostra esta ajuda e sai.\0A\00"
@.str.14 = [51 x i8] c"\09--versao, -v Mostra as notas da versao e sai.\0A\00"
@.str.15 = [11 x i8] c"Exemplos:\0A\00"
@.str.16 = [30 x i8] c"\09validacao --cpf 11111111111\0A\00"
@.str.17 = [34 x i8] c"\09validacao --cnpj 11111111111111\0A\00"
@.str.18 = [9 x i8] c"--versao\00"
@.str.19 = [3 x i8] c"-v\00"
@.str.20 = [16 x i8] c"\09Validacao 0.5\0A\00"
@.str.21 = [45 x i8] c"Escrito por Jose Lopes de Oliveira J\C3\BAnior. \00"
@.str.22 = [24 x i8] c"<jlojunior@gmail.com>\0A\0A\00"
@.str.23 = [21 x i8] c"Copyright (C) 2005.\0A\00"
@.str.24 = [65 x i8] c"\09Este programa \C3\A9 um software de livre distribui\C3\A7\C3\A3o, que pode\0A\00"
@.str.25 = [60 x i8] c"ser copiado e distribu\C3\ADdo sob os termos da Licen\C3\A7a Geral\0A\00"
@.str.26 = [56 x i8] c"GNU, conforme publicada pela Free Software Foundation,\0A\00"
@.str.27 = [67 x i8] c"vers\C3\A3o 2 da licen\C3\A7a, ou (a crit\C3\A9rio do autor) qualquer vers\C3\A3o\0A\00"
@.str.28 = [12 x i8] c"posterior.\0A\00"
@.str.29 = [64 x i8] c"\09Este programa \C3\A9 distribu\C3\ADdo na expectativa de ser \C3\BAtil aos\0A\00"
@.str.30 = [68 x i8] c"seus usu\C3\A1rios, por\C3\A9m N\C3\83O POSSUI NENHUMA GARANTIA, EXPL\C3\8DCITA OU\0A\00"
@.str.31 = [59 x i8] c"IMPL\C3\8DCITA, COMERCIAL OU DE ATENDIMENTO A UMA DETERMINADA\0A\00"
@.str.32 = [53 x i8] c"FINALIDADE. Consulte a Licen\C3\A7a P\C3\BAblica Geral GNU.\0A\00"
@.str.33 = [33 x i8] c"VALIDACAO : Parametro invalido.\0A\00"
@.str.34 = [47 x i8] c"VALIDACAO : O terceiro parametro eh invalido.\0A\00"
@.str.35 = [6 x i8] c"--cpf\00"
@.str.36 = [3 x i8] c"-p\00"
@.str.37 = [37 x i8] c"VALIDACAO : Numero de CPF invalido.\0A\00"
@.str.38 = [39 x i8] c"\09VALIDACAO : Numero de CPF valido. :)\0A\00"
@.str.39 = [41 x i8] c"\09VALIDACAO : Numero de CPF invalido. :(\0A\00"
@.str.40 = [7 x i8] c"--cnpj\00"
@.str.41 = [3 x i8] c"-n\00"
@.str.42 = [38 x i8] c"VALIDACAO : Numero de CNPJ invalido.\0A\00"
@.str.43 = [40 x i8] c"\09VALIDACAO : Numero de CNPJ valido. :)\0A\00"
@.str.44 = [42 x i8] c"\09VALIDACAO : Numero de CNPJ invalido. :(\0A\00"
@.str.45 = [46 x i8] c"VALIDACAO : O segundo parametro eh invalido.\0A\00"
define i32 @main(i32 %0, i8** %1) {
%3 = alloca i32
%4 = alloca i8**
%5 = alloca [250 x i8]
%6 = alloca [250 x i8]
store i32 %0, i32* %3
store i8** %1, i8*** %4
%7 = bitcast [250 x i8]* %5 to i8*
%8 = bitcast [250 x i8]* %6 to i8*
%9 = load i32, i32* %3
%10 = icmp slt i32 %9, 2
br i1 %10, label %11, label %15
11: ; preds = %2
%12 = call i32 @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str, i64 0, i64 0))
%13 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
%14 = call i32 @exit(i32 1)
unreachable
15: ; preds = %2
%16 = load i32, i32* %3
%17 = icmp sgt i32 %16, 3
br i1 %17, label %18, label %22
18: ; preds = %15
%19 = call i32 @printf(i8* getelementptr inbounds ([35 x i8], [35 x i8]* @.str.2, i64 0, i64 0))
%20 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
%21 = call i32 @exit(i32 1)
unreachable
22: ; preds = %15
%23 = load i32, i32* %3
%24 = icmp eq i32 %23, 2
br i1 %24, label %25, label %83
25: ; preds = %22
%26 = load i8**, i8*** %4
%27 = getelementptr inbounds i8*, i8** %26, i64 1
%28 = load i8*, i8** %27
%29 = call i32 @strcmp(i8* %28, i8* getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
%30 = icmp ne i32 %29, 0
br i1 %30, label %31, label %37
31: ; preds = %25
%32 = load i8**, i8*** %4
%33 = getelementptr inbounds i8*, i8** %32, i64 1
%34 = load i8*, i8** %33
%35 = call i32 @strcmp(i8* %34, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
%36 = icmp ne i32 %35, 0
br i1 %36, label %52, label %37
37: ; preds = %31, %25
%38 = call i32 @printf(i8* getelementptr inbounds ([32 x i8], [32 x i8]* @.str.5, i64 0, i64 0))
%39 = call i32 @printf(i8* getelementptr inbounds ([52 x i8], [52 x i8]* @.str.6, i64 0, i64 0))
%40 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.7, i64 0, i64 0))
%41 = call i32 @printf(i8* getelementptr inbounds ([18 x i8], [18 x i8]* @.str.8, i64 0, i64 0))
%42 = call i32 @printf(i8* getelementptr inbounds ([50 x i8], [50 x i8]* @.str.9, i64 0, i64 0))
%43 = call i32 @printf(i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.10, i64 0, i64 0))
%44 = call i32 @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.11, i64 0, i64 0))
%45 = call i32 @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.12, i64 0, i64 0))
%46 = call i32 @printf(i8* getelementptr inbounds ([43 x i8], [43 x i8]* @.str.13, i64 0, i64 0))
%47 = call i32 @printf(i8* getelementptr inbounds ([51 x i8], [51 x i8]* @.str.14, i64 0, i64 0))
%48 = call i32 @printf(i8* getelementptr inbounds ([11 x i8], [11 x i8]* @.str.15, i64 0, i64 0))
%49 = call i32 @printf(i8* getelementptr inbounds ([30 x i8], [30 x i8]* @.str.16, i64 0, i64 0))
%50 = call i32 @printf(i8* getelementptr inbounds ([34 x i8], [34 x i8]* @.str.17, i64 0, i64 0))
%51 = call i32 @exit(i32 0)
unreachable
52: ; preds = %31
%53 = load i8**, i8*** %4
%54 = getelementptr inbounds i8*, i8** %53, i64 1
%55 = load i8*, i8** %54
%56 = call i32 @strcmp(i8* %55, i8* getelementptr inbounds ([9 x i8], [9 x i8]* @.str.18, i64 0, i64 0))
%57 = icmp ne i32 %56, 0
br i1 %57, label %58, label %64
58: ; preds = %52
%59 = load i8**, i8*** %4
%60 = getelementptr inbounds i8*, i8** %59, i64 1
%61 = load i8*, i8** %60
%62 = call i32 @strcmp(i8* %61, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0))
%63 = icmp ne i32 %62, 0
br i1 %63, label %79, label %64
64: ; preds = %58, %52
%65 = call i32 @printf(i8* getelementptr inbounds ([16 x i8], [16 x i8]* @.str.20, i64 0, i64 0))
%66 = call i32 @printf(i8* getelementptr inbounds ([45 x i8], [45 x i8]* @.str.21, i64 0, i64 0))
%67 = call i32 @printf(i8* getelementptr inbounds ([24 x i8], [24 x i8]* @.str.22, i64 0, i64 0))
%68 = call i32 @printf(i8* getelementptr inbounds ([21 x i8], [21 x i8]* @.str.23, i64 0, i64 0))
%69 = call i32 @printf(i8* getelementptr inbounds ([65 x i8], [65 x i8]* @.str.24, i64 0, i64 0))
%70 = call i32 @printf(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @.str.25, i64 0, i64 0))
%71 = call i32 @printf(i8* getelementptr inbounds ([56 x i8], [56 x i8]* @.str.26, i64 0, i64 0))
%72 = call i32 @printf(i8* getelementptr inbounds ([67 x i8], [67 x i8]* @.str.27, i64 0, i64 0))
%73 = call i32 @printf(i8* getelementptr inbounds ([12 x i8], [12 x i8]* @.str.28, i64 0, i64 0))
%74 = call i32 @printf(i8* getelementptr inbounds ([64 x i8], [64 x i8]* @.str.29, i64 0, i64 0))
%75 = call i32 @printf(i8* getelementptr inbounds ([68 x i8], [68 x i8]* @.str.30, i64 0, i64 0))
%76 = call i32 @printf(i8* getelementptr inbounds ([59 x i8], [59 x i8]* @.str.31, i64 0, i64 0))
%77 = call i32 @printf(i8* getelementptr inbounds ([53 x i8], [53 x i8]* @.str.32, i64 0, i64 0))
%78 = call i32 @exit(i32 0)
unreachable
79: ; preds = %58
%80 = call i32 @printf(i8* getelementptr inbounds ([33 x i8], [33 x i8]* @.str.33, i64 0, i64 0))
%81 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
%82 = call i32 @exit(i32 1)
unreachable
83: ; preds = %22
%84 = load i32, i32* %3
%85 = icmp eq i32 %84, 3
br i1 %85, label %86, label %168
86: ; preds = %83
%87 = load i8**, i8*** %4
%88 = getelementptr inbounds i8*, i8** %87, i64 2
%89 = load i8*, i8** %88
%90 = call i32 @isNumero(i8* %89)
%91 = icmp ne i32 %90, 0
br i1 %91, label %96, label %92
92: ; preds = %86
%93 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.34, i64 0, i64 0))
%94 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
%95 = call i32 @exit(i32 1)
unreachable
96: ; preds = %86
%97 = load i8**, i8*** %4
%98 = getelementptr inbounds i8*, i8** %97, i64 1
%99 = load i8*, i8** %98
%100 = call i32 @strcmp(i8* %99, i8* getelementptr inbounds ([6 x i8], [6 x i8]* @.str.35, i64 0, i64 0))
%101 = icmp ne i32 %100, 0
br i1 %101, label %102, label %108
102: ; preds = %96
%103 = load i8**, i8*** %4
%104 = getelementptr inbounds i8*, i8** %103, i64 1
%105 = load i8*, i8** %104
%106 = call i32 @strcmp(i8* %105, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.36, i64 0, i64 0))
%107 = icmp ne i32 %106, 0
br i1 %107, label %130, label %108
108: ; preds = %102, %96
%109 = load i8**, i8*** %4
%110 = getelementptr inbounds i8*, i8** %109, i64 2
%111 = load i8*, i8** %110
%112 = call i32 @strlen(i8* %111)
%113 = icmp ne i32 %112, 11
br i1 %113, label %114, label %118
114: ; preds = %108
%115 = call i32 @printf(i8* getelementptr inbounds ([37 x i8], [37 x i8]* @.str.37, i64 0, i64 0))
%116 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
%117 = call i32 @exit(i32 1)
unreachable
118: ; preds = %108
%119 = load i8**, i8*** %4
%120 = getelementptr inbounds i8*, i8** %119, i64 2
%121 = load i8*, i8** %120
%122 = call i64 @validaCPF(i8* %121)
%123 = icmp ne i64 %122, 0
br i1 %123, label %124, label %127
124: ; preds = %118
%125 = call i32 @printf(i8* getelementptr inbounds ([39 x i8], [39 x i8]* @.str.38, i64 0, i64 0))
%126 = call i32 @exit(i32 0)
unreachable
127: ; preds = %118
%128 = call i32 @printf(i8* getelementptr inbounds ([41 x i8], [41 x i8]* @.str.39, i64 0, i64 0))
%129 = call i32 @exit(i32 0)
unreachable
130: ; preds = %102
%131 = load i8**, i8*** %4
%132 = getelementptr inbounds i8*, i8** %131, i64 1
%133 = load i8*, i8** %132
%134 = call i32 @strcmp(i8* %133, i8* getelementptr inbounds ([7 x i8], [7 x i8]* @.str.40, i64 0, i64 0))
%135 = icmp ne i32 %134, 0
br i1 %135, label %136, label %142
136: ; preds = %130
%137 = load i8**, i8*** %4
%138 = getelementptr inbounds i8*, i8** %137, i64 1
%139 = load i8*, i8** %138
%140 = call i32 @strcmp(i8* %139, i8* getelementptr inbounds ([3 x i8], [3 x i8]* @.str.41, i64 0, i64 0))
%141 = icmp ne i32 %140, 0
br i1 %141, label %164, label %142
142: ; preds = %136, %130
%143 = load i8**, i8*** %4
%144 = getelementptr inbounds i8*, i8** %143, i64 2
%145 = load i8*, i8** %144
%146 = call i32 @strlen(i8* %145)
%147 = icmp ne i32 %146, 14
br i1 %147, label %148, label %152
148: ; preds = %142
%149 = call i32 @printf(i8* getelementptr inbounds ([38 x i8], [38 x i8]* @.str.42, i64 0, i64 0))
%150 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
%151 = call i32 @exit(i32 1)
unreachable
152: ; preds = %142
%153 = load i8**, i8*** %4
%154 = getelementptr inbounds i8*, i8** %153, i64 2
%155 = load i8*, i8** %154
%156 = call i64 @validaCNPJ(i8* %155)
%157 = icmp ne i64 %156, 0
br i1 %157, label %158, label %161
158: ; preds = %152
%159 = call i32 @printf(i8* getelementptr inbounds ([40 x i8], [40 x i8]* @.str.43, i64 0, i64 0))
%160 = call i32 @exit(i32 0)
unreachable
161: ; preds = %152
%162 = call i32 @printf(i8* getelementptr inbounds ([42 x i8], [42 x i8]* @.str.44, i64 0, i64 0))
%163 = call i32 @exit(i32 0)
unreachable
164: ; preds = %136
%165 = call i32 @printf(i8* getelementptr inbounds ([46 x i8], [46 x i8]* @.str.45, i64 0, i64 0))
%166 = call i32 @printf(i8* getelementptr inbounds ([47 x i8], [47 x i8]* @.str.1, i64 0, i64 0))
%167 = call i32 @exit(i32 1)
unreachable
168: ; preds = %83
br label %169
169: ; preds = %168
ret i32 0
}

LLVM IR (-O2):
@.str.3 = [8 x i8] c"--ajuda\00"
@.str.4 = [3 x i8] c"-a\00"
@.str.18 = [9 x i8] c"--versao\00"
@.str.19 = [3 x i8] c"-v\00"
@.str.21 = [45 x i8] c"Escrito por Jose Lopes de Oliveira J\C3\BAnior. \00"
@.str.35 = [6 x i8] c"--cpf\00"
@.str.36 = [3 x i8] c"-p\00"
@.str.40 = [7 x i8] c"--cnpj\00"
@.str.41 = [3 x i8] c"-n\00"
@str = [46 x i8] c"VALIDACAO : O terceiro parametro eh invalido.\00"
@str.47 = [40 x i8] c"\09VALIDACAO : Numero de CPF invalido. :(\00"
@str.48 = [38 x i8] c"\09VALIDACAO : Numero de CPF valido. :)\00"
@str.49 = [36 x i8] c"VALIDACAO : Numero de CPF invalido.\00"
@str.51 = [41 x i8] c"\09VALIDACAO : Numero de CNPJ invalido. :(\00"
@str.52 = [39 x i8] c"\09VALIDACAO : Numero de CNPJ valido. :)\00"
@str.53 = [37 x i8] c"VALIDACAO : Numero de CNPJ invalido.\00"
@str.55 = [45 x i8] c"VALIDACAO : O segundo parametro eh invalido.\00"
@str.57 = [31 x i8] c"Uso: validacao [opcoes] NUMERO\00"
@str.58 = [51 x i8] c"\09onde: NUMERO eh um numero de CNPJ ou CPF. Lembre-\00"
@str.59 = [46 x i8] c"\09se de que NUMERO deve conter APENAS digitos.\00"
@str.60 = [17 x i8] c"ou nw [opcoes]\00"
@str.61 = [49 x i8] c"Verifica a validade de um numero de CNPJ ou CPF.\00"
@str.62 = [8 x i8] c"Opcoes:\00"
@str.63 = [59 x i8] c"\09--cnpj, -n Verifica a validade de um numero de CNPJ.\00"
@str.64 = [58 x i8] c"\09--cpf, -p Verifica a validade de um numero de CPF.\00"
@str.65 = [42 x i8] c"\09--ajuda, -a Mostra esta ajuda e sai.\00"
@str.66 = [50 x i8] c"\09--versao, -v Mostra as notas da versao e sai.\00"
@str.67 = [10 x i8] c"Exemplos:\00"
@str.68 = [29 x i8] c"\09validacao --cpf 11111111111\00"
@str.69 = [33 x i8] c"\09validacao --cnpj 11111111111111\00"
@str.70 = [15 x i8] c"\09Validacao 0.5\00"
@str.71 = [23 x i8] c"<jlojunior@gmail.com>\0A\00"
@str.72 = [20 x i8] c"Copyright (C) 2005.\00"
@str.73 = [64 x i8] c"\09Este programa \C3\A9 um software de livre distribui\C3\A7\C3\A3o, que pode\00"
@str.74 = [59 x i8] c"ser copiado e distribu\C3\ADdo sob os termos da Licen\C3\A7a Geral\00"
@str.75 = [55 x i8] c"GNU, conforme publicada pela Free Software Foundation,\00"
@str.76 = [66 x i8] c"vers\C3\A3o 2 da licen\C3\A7a, ou (a crit\C3\A9rio do autor) qualquer vers\C3\A3o\00"
@str.77 = [11 x i8] c"posterior.\00"
@str.78 = [63 x i8] c"\09Este programa \C3\A9 distribu\C3\ADdo na expectativa de ser \C3\BAtil aos\00"
@str.79 = [67 x i8] c"seus usu\C3\A1rios, por\C3\A9m N\C3\83O POSSUI NENHUMA GARANTIA, EXPL\C3\8DCITA OU\00"
@str.80 = [58 x i8] c"IMPL\C3\8DCITA, COMERCIAL OU DE ATENDIMENTO A UMA DETERMINADA\00"
@str.81 = [52 x i8] c"FINALIDADE. Consulte a Licen\C3\A7a P\C3\BAblica Geral GNU.\00"
@str.82 = [32 x i8] c"VALIDACAO : Parametro invalido.\00"
@str.84 = [34 x i8] c"VALIDACAO : Excesso de parametros\00"
@str.86 = [32 x i8] c"VALIDACAO : Falta um parametro.\00"
@str.87 = [46 x i8] c"\09Digite \22validacao --ajuda\22 para obter ajuda.\00"
define i32 @main(i32 %0, i8** nocapture %1) {
%3 = icmp slt i32 %0, 2
br i1 %3, label %4, label %8
4: ; preds = %2
%5 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str.86, i64 0, i64 0))
%6 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.87, i64 0, i64 0))
%7 = tail call i32 @exit(i32 1)
unreachable
8: ; preds = %2
%9 = icmp ugt i32 %0, 3
br i1 %9, label %10, label %14
10: ; preds = %8
%11 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([34 x i8], [34 x i8]* @str.84, i64 0, i64 0))
%12 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.87, i64 0, i64 0))
%13 = tail call i32 @exit(i32 1)
unreachable
14: ; preds = %8
%15 = icmp eq i32 %0, 2
br i1 %15, label %16, label %64
16: ; preds = %14
%17 = getelementptr inbounds i8*, i8** %1, i64 1
%18 = load i8*, i8** %17
%19 = tail call i32 @strcmp(i8* dereferenceable(1) %18, i8* dereferenceable(8) getelementptr inbounds ([8 x i8], [8 x i8]* @.str.3, i64 0, i64 0))
%20 = icmp eq i32 %19, 0
br i1 %20, label %24, label %21
21: ; preds = %16
%22 = tail call i32 @strcmp(i8* dereferenceable(1) %18, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.4, i64 0, i64 0))
%23 = icmp eq i32 %22, 0
br i1 %23, label %24, label %39
24: ; preds = %21, %16
%25 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([31 x i8], [31 x i8]* @str.57, i64 0, i64 0))
%26 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([51 x i8], [51 x i8]* @str.58, i64 0, i64 0))
%27 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.59, i64 0, i64 0))
%28 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([17 x i8], [17 x i8]* @str.60, i64 0, i64 0))
%29 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([49 x i8], [49 x i8]* @str.61, i64 0, i64 0))
%30 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([8 x i8], [8 x i8]* @str.62, i64 0, i64 0))
%31 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str.63, i64 0, i64 0))
%32 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @str.64, i64 0, i64 0))
%33 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([42 x i8], [42 x i8]* @str.65, i64 0, i64 0))
%34 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([50 x i8], [50 x i8]* @str.66, i64 0, i64 0))
%35 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([10 x i8], [10 x i8]* @str.67, i64 0, i64 0))
%36 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([29 x i8], [29 x i8]* @str.68, i64 0, i64 0))
%37 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([33 x i8], [33 x i8]* @str.69, i64 0, i64 0))
%38 = tail call i32 @exit(i32 0)
unreachable
39: ; preds = %21
%40 = tail call i32 @strcmp(i8* dereferenceable(1) %18, i8* dereferenceable(9) getelementptr inbounds ([9 x i8], [9 x i8]* @.str.18, i64 0, i64 0))
%41 = icmp eq i32 %40, 0
br i1 %41, label %45, label %42
42: ; preds = %39
%43 = tail call i32 @strcmp(i8* dereferenceable(1) %18, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.19, i64 0, i64 0))
%44 = icmp eq i32 %43, 0
br i1 %44, label %45, label %60
45: ; preds = %42, %39
%46 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([15 x i8], [15 x i8]* @str.70, i64 0, i64 0))
%47 = tail call i32 @printf(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @.str.21, i64 0, i64 0))
%48 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([23 x i8], [23 x i8]* @str.71, i64 0, i64 0))
%49 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([20 x i8], [20 x i8]* @str.72, i64 0, i64 0))
%50 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([64 x i8], [64 x i8]* @str.73, i64 0, i64 0))
%51 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([59 x i8], [59 x i8]* @str.74, i64 0, i64 0))
%52 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([55 x i8], [55 x i8]* @str.75, i64 0, i64 0))
%53 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([66 x i8], [66 x i8]* @str.76, i64 0, i64 0))
%54 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([11 x i8], [11 x i8]* @str.77, i64 0, i64 0))
%55 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([63 x i8], [63 x i8]* @str.78, i64 0, i64 0))
%56 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([67 x i8], [67 x i8]* @str.79, i64 0, i64 0))
%57 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([58 x i8], [58 x i8]* @str.80, i64 0, i64 0))
%58 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([52 x i8], [52 x i8]* @str.81, i64 0, i64 0))
%59 = tail call i32 @exit(i32 0)
unreachable
60: ; preds = %42
%61 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([32 x i8], [32 x i8]* @str.82, i64 0, i64 0))
%62 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.87, i64 0, i64 0))
%63 = tail call i32 @exit(i32 1)
unreachable
64: ; preds = %14
%65 = getelementptr inbounds i8*, i8** %1, i64 2
%66 = load i8*, i8** %65
%67 = tail call i32 @isNumero(i8* %66)
%68 = icmp eq i32 %67, 0
br i1 %68, label %69, label %73
69: ; preds = %64
%70 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str, i64 0, i64 0))
%71 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.87, i64 0, i64 0))
%72 = tail call i32 @exit(i32 1)
unreachable
73: ; preds = %64
%74 = getelementptr inbounds i8*, i8** %1, i64 1
%75 = load i8*, i8** %74
%76 = tail call i32 @strcmp(i8* dereferenceable(1) %75, i8* dereferenceable(6) getelementptr inbounds ([6 x i8], [6 x i8]* @.str.35, i64 0, i64 0))
%77 = icmp eq i32 %76, 0
br i1 %77, label %81, label %78
78: ; preds = %73
%79 = tail call i32 @strcmp(i8* dereferenceable(1) %75, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.36, i64 0, i64 0))
%80 = icmp eq i32 %79, 0
br i1 %80, label %81, label %99
81: ; preds = %78, %73
%82 = load i8*, i8** %65
%83 = tail call i32 @strlen(i8* %82)
%84 = icmp eq i32 %83, 11
br i1 %84, label %89, label %85
85: ; preds = %81
%86 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([36 x i8], [36 x i8]* @str.49, i64 0, i64 0))
%87 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.87, i64 0, i64 0))
%88 = tail call i32 @exit(i32 1)
unreachable
89: ; preds = %81
%90 = load i8*, i8** %65
%91 = tail call i64 @validaCPF(i8* %90)
%92 = icmp eq i64 %91, 0
br i1 %92, label %96, label %93
93: ; preds = %89
%94 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([38 x i8], [38 x i8]* @str.48, i64 0, i64 0))
%95 = tail call i32 @exit(i32 0)
unreachable
96: ; preds = %89
%97 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([40 x i8], [40 x i8]* @str.47, i64 0, i64 0))
%98 = tail call i32 @exit(i32 0)
unreachable
99: ; preds = %78
%100 = tail call i32 @strcmp(i8* dereferenceable(1) %75, i8* dereferenceable(7) getelementptr inbounds ([7 x i8], [7 x i8]* @.str.40, i64 0, i64 0))
%101 = icmp eq i32 %100, 0
br i1 %101, label %105, label %102
102: ; preds = %99
%103 = tail call i32 @strcmp(i8* dereferenceable(1) %75, i8* dereferenceable(3) getelementptr inbounds ([3 x i8], [3 x i8]* @.str.41, i64 0, i64 0))
%104 = icmp eq i32 %103, 0
br i1 %104, label %105, label %123
105: ; preds = %102, %99
%106 = load i8*, i8** %65
%107 = tail call i32 @strlen(i8* %106)
%108 = icmp eq i32 %107, 14
br i1 %108, label %113, label %109
109: ; preds = %105
%110 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([37 x i8], [37 x i8]* @str.53, i64 0, i64 0))
%111 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.87, i64 0, i64 0))
%112 = tail call i32 @exit(i32 1)
unreachable
113: ; preds = %105
%114 = load i8*, i8** %65
%115 = tail call i64 @validaCNPJ(i8* %114)
%116 = icmp eq i64 %115, 0
br i1 %116, label %120, label %117
117: ; preds = %113
%118 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([39 x i8], [39 x i8]* @str.52, i64 0, i64 0))
%119 = tail call i32 @exit(i32 0)
unreachable
120: ; preds = %113
%121 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([41 x i8], [41 x i8]* @str.51, i64 0, i64 0))
%122 = tail call i32 @exit(i32 0)
unreachable
123: ; preds = %102
%124 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([45 x i8], [45 x i8]* @str.55, i64 0, i64 0))
%125 = tail call i32 @puts(i8* dereferenceable(1) getelementptr inbounds ([46 x i8], [46 x i8]* @str.87, i64 0, i64 0))
%126 = tail call i32 @exit(i32 1)
unreachable
}