
/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void rule_print(FILE *out,rule *rp)

{
  symbol **ppsVar1;
  symbol *psVar2;
  int iVar3;
  int iVar4;
  
  fputs(rp->lhs->name,(FILE *)out);
  fwrite(&DAT_0002000a,1,4,(FILE *)out);
  if (0 < rp->nrhs) {
    iVar3 = 0;
    do {
      while (psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL) {
        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);
        if (psVar2->nsubsym < 2) goto LAB_00015bb4;
        iVar4 = 1;
        do {
          ppsVar1 = psVar2->subsym + iVar4;
          iVar4 = iVar4 + 1;
          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);
        } while (iVar4 < psVar2->nsubsym);
        iVar3 = iVar3 + 1;
        if (rp->nrhs <= iVar3) {
          return;
        }
      }
      __fprintf_chk(out,1,&DAT_000201db,psVar2->name);
LAB_00015bb4:
      iVar3 = iVar3 + 1;
    } while (iVar3 < rp->nrhs);
  }
  return;
}



/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void FUN_00015b40(FILE *param_1,undefined4 *param_2)

{
  int iVar1;
  undefined4 *puVar2;
  int iVar3;
  int iVar4;
  
  fputs(*(char **)*param_2,param_1);
  fwrite(&DAT_0002000a,1,4,param_1);
  if (0 < (int)param_2[4]) {
    iVar3 = 0;
    do {
      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {
        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);
        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;
        iVar4 = 1;
        do {
          iVar1 = iVar4 * 4;
          iVar4 = iVar4 + 1;
          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));
        } while (iVar4 < (int)puVar2[0xf]);
        iVar3 = iVar3 + 1;
        if ((int)param_2[4] <= iVar3) {
          return;
        }
      }
      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);
LAB_00015bb4:
      iVar3 = iVar3 + 1;
    } while (iVar3 < (int)param_2[4]);
  }
  return;
}


PUSH EBP
PUSH EDI
PUSH ESI
PUSH EBX
CALL 0x00011bc0
ADD EBX,0x123f3
SUB ESP,0x24
MOV EBP,dword ptr [ESP + 0x3c]
PUSH dword ptr [ESP + 0x38]
MOV EAX,dword ptr [EBP]
PUSH dword ptr [EAX]
CALL 0x00011270
LEA EAX,[EBX + 0xffff80ce]
PUSH dword ptr [ESP + 0x40]
PUSH 0x4
PUSH 0x1
PUSH EAX
CALL 0x000110e0
MOV EAX,dword ptr [EBP + 0x10]
ADD ESP,0x20
TEST EAX,EAX
JLE 0x00015c2f
LEA EAX,[EBX + 0xffff829f]
XOR ESI,ESI
MOV dword ptr [ESP + 0x4],EAX
LEA EAX,[EBX + 0xffff80d3]
MOV dword ptr [ESP + 0xc],EAX
JMP 0x00015bbc
PUSH dword ptr [EDI]
PUSH dword ptr [ESP + 0x8]
PUSH 0x1
PUSH dword ptr [ESP + 0x3c]
CALL 0x00011240
ADD ESP,0x10
ADD ESI,0x1
CMP dword ptr [EBP + 0x10],ESI
JLE 0x00015c2f
MOV EAX,dword ptr [EBP + 0x14]
MOV EDI,dword ptr [EAX + ESI*0x4]
CMP dword ptr [EDI + 0x8],0x2
JNZ 0x00015ba0
MOV EAX,dword ptr [EDI + 0x40]
MOV EAX,dword ptr [EAX]
PUSH dword ptr [EAX]
PUSH dword ptr [ESP + 0x8]
PUSH 0x1
PUSH dword ptr [ESP + 0x3c]
CALL 0x00011240
ADD ESP,0x10
CMP dword ptr [EDI + 0x3c],0x1
MOV ECX,0x1
JLE 0x00015bb4
MOV dword ptr [ESP + 0x34],EBP
MOV EBP,EDI
MOV EDI,dword ptr [ESP + 0xc]
MOV dword ptr [ESP + 0x8],ESI
MOV ESI,ECX
LEA ESI,[ESI]
MOV EAX,dword ptr [EBP + 0x40]
MOV EAX,dword ptr [EAX + ESI*0x4]
ADD ESI,0x1
PUSH dword ptr [EAX]
PUSH EDI
PUSH 0x1
PUSH dword ptr [ESP + 0x3c]
CALL 0x00011240
ADD ESP,0x10
CMP dword ptr [EBP + 0x3c],ESI
JG 0x00015c00
MOV ESI,dword ptr [ESP + 0x8]
MOV EBP,dword ptr [ESP + 0x34]
ADD ESI,0x1
CMP dword ptr [EBP + 0x10],ESI
JG 0x00015bbc
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid FUN_00015b40(FILE *param_1,undefined4 *param_2)\n\n{\n  int iVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(*(char **)*param_2,param_1);\n  fwrite(&DAT_0002000a,1,4,param_1);\n  if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }\n  return;\n}\n\n" comment (function_definition "void FUN_00015b40(FILE *param_1,undefined4 *param_2)\n\n{\n  int iVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(*(char **)*param_2,param_1);\n  fwrite(&DAT_0002000a,1,4,param_1);\n  if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00015b40(FILE *param_1,undefined4 *param_2)" identifier (parameter_list "(FILE *param_1,undefined4 *param_2)" ( (parameter_declaration "FILE *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(*(char **)*param_2,param_1);\n  fwrite(&DAT_0002000a,1,4,param_1);\n  if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (expression_statement "fputs(*(char **)*param_2,param_1);" (call_expression "fputs(*(char **)*param_2,param_1)" identifier (argument_list "(*(char **)*param_2,param_1)" ( (pointer_expression "*(char **)*param_2" * (cast_expression "(char **)*param_2" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "*param_2" * identifier))) , identifier ))) ;) (expression_statement "fwrite(&DAT_0002000a,1,4,param_1);" (call_expression "fwrite(&DAT_0002000a,1,4,param_1)" identifier (argument_list "(&DAT_0002000a,1,4,param_1)" ( (pointer_expression "&DAT_0002000a" & identifier) , number_literal , number_literal , identifier ))) ;) (if_statement "if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }" if (parenthesized_expression "(0 < (int)param_2[4])" ( (binary_expression "0 < (int)param_2[4]" number_literal < (cast_expression "(int)param_2[4]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[4]" identifier [ number_literal ]))) )) (compound_statement "{\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);" do (compound_statement "{\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    }" { (while_statement "while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "(puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2)" ( (comma_expression "puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2" (assignment_expression "puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4)" identifier = (pointer_expression "*(undefined4 **)(param_2[5] + iVar3 * 4)" * (cast_expression "(undefined4 **)(param_2[5] + iVar3 * 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2[5] + iVar3 * 4)" ( (binary_expression "param_2[5] + iVar3 * 4" (subscript_expression "param_2[5]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) , (binary_expression "puVar2[2] == 2" (subscript_expression "puVar2[2]" identifier [ number_literal ]) == number_literal)) )) (compound_statement "{\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }" { (expression_statement "__fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);" (call_expression "__fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10])" identifier (argument_list "(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10])" ( identifier , number_literal , (pointer_expression "&DAT_000201db" & identifier) , (pointer_expression "**(undefined4 **)puVar2[0x10]" * (pointer_expression "*(undefined4 **)puVar2[0x10]" * (cast_expression "(undefined4 **)puVar2[0x10]" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (subscript_expression "puVar2[0x10]" identifier [ number_literal ])))) ))) ;) (if_statement "if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;" if (parenthesized_expression "((int)puVar2[0xf] < 2)" ( (binary_expression "(int)puVar2[0xf] < 2" (cast_expression "(int)puVar2[0xf]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "puVar2[0xf]" identifier [ number_literal ])) < number_literal) )) (goto_statement "goto LAB_00015bb4;" goto statement_identifier ;)) (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" identifier = number_literal) ;) (do_statement "do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);" do (compound_statement "{\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        }" { (expression_statement "iVar1 = iVar4 * 4;" (assignment_expression "iVar1 = iVar4 * 4" identifier = (binary_expression "iVar4 * 4" identifier * number_literal)) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "__fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));" (call_expression "__fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1))" identifier (argument_list "(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1))" ( identifier , number_literal , (pointer_expression "&DAT_0002000f" & identifier) , (pointer_expression "**(undefined4 **)(puVar2[0x10] + iVar1)" * (pointer_expression "*(undefined4 **)(puVar2[0x10] + iVar1)" * (cast_expression "(undefined4 **)(puVar2[0x10] + iVar1)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2[0x10] + iVar1)" ( (binary_expression "puVar2[0x10] + iVar1" (subscript_expression "puVar2[0x10]" identifier [ number_literal ]) + identifier) ))))) ))) ;) }) while (parenthesized_expression "(iVar4 < (int)puVar2[0xf])" ( (binary_expression "iVar4 < (int)puVar2[0xf]" identifier < (cast_expression "(int)puVar2[0xf]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "puVar2[0xf]" identifier [ number_literal ]))) )) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if ((int)param_2[4] <= iVar3) {\n          return;\n        }" if (parenthesized_expression "((int)param_2[4] <= iVar3)" ( (binary_expression "(int)param_2[4] <= iVar3" (cast_expression "(int)param_2[4]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[4]" identifier [ number_literal ])) <= identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "__fprintf_chk(param_1,1,&DAT_000201db,*puVar2);" (call_expression "__fprintf_chk(param_1,1,&DAT_000201db,*puVar2)" identifier (argument_list "(param_1,1,&DAT_000201db,*puVar2)" ( identifier , number_literal , (pointer_expression "&DAT_000201db" & identifier) , (pointer_expression "*puVar2" * identifier) ))) ;) (labeled_statement "LAB_00015bb4:\n      iVar3 = iVar3 + 1;" statement_identifier : (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;)) }) while (parenthesized_expression "(iVar3 < (int)param_2[4])" ( (binary_expression "iVar3 < (int)param_2[4]" identifier < (cast_expression "(int)param_2[4]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[4]" identifier [ number_literal ]))) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nvoid rule_print(FILE *out,rule *rp)\n\n{\n  symbol **ppsVar1;\n  symbol *psVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(rp->lhs->name,(FILE *)out);\n  fwrite(&DAT_0002000a,1,4,(FILE *)out);\n  if (0 < rp->nrhs) {\n    iVar3 = 0;\n    do {\n      while (psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL) {\n        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);\n        if (psVar2->nsubsym < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);\n        iVar3 = iVar3 + 1;\n        if (rp->nrhs <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(out,1,&DAT_000201db,psVar2->name);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < rp->nrhs);\n  }\n  return;\n}\n\n" comment (function_definition "void rule_print(FILE *out,rule *rp)\n\n{\n  symbol **ppsVar1;\n  symbol *psVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(rp->lhs->name,(FILE *)out);\n  fwrite(&DAT_0002000a,1,4,(FILE *)out);\n  if (0 < rp->nrhs) {\n    iVar3 = 0;\n    do {\n      while (psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL) {\n        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);\n        if (psVar2->nsubsym < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);\n        iVar3 = iVar3 + 1;\n        if (rp->nrhs <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(out,1,&DAT_000201db,psVar2->name);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < rp->nrhs);\n  }\n  return;\n}" primitive_type (function_declarator "rule_print(FILE *out,rule *rp)" identifier (parameter_list "(FILE *out,rule *rp)" ( (parameter_declaration "FILE *out" type_identifier (pointer_declarator "*out" * identifier)) , (parameter_declaration "rule *rp" type_identifier (pointer_declarator "*rp" * identifier)) ))) (compound_statement "{\n  symbol **ppsVar1;\n  symbol *psVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(rp->lhs->name,(FILE *)out);\n  fwrite(&DAT_0002000a,1,4,(FILE *)out);\n  if (0 < rp->nrhs) {\n    iVar3 = 0;\n    do {\n      while (psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL) {\n        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);\n        if (psVar2->nsubsym < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);\n        iVar3 = iVar3 + 1;\n        if (rp->nrhs <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(out,1,&DAT_000201db,psVar2->name);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < rp->nrhs);\n  }\n  return;\n}" { (declaration "symbol **ppsVar1;" type_identifier (pointer_declarator "**ppsVar1" * (pointer_declarator "*ppsVar1" * identifier)) ;) (declaration "symbol *psVar2;" type_identifier (pointer_declarator "*psVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (expression_statement "fputs(rp->lhs->name,(FILE *)out);" (call_expression "fputs(rp->lhs->name,(FILE *)out)" identifier (argument_list "(rp->lhs->name,(FILE *)out)" ( (field_expression "rp->lhs->name" (field_expression "rp->lhs" identifier -> field_identifier) -> field_identifier) , (cast_expression "(FILE *)out" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (expression_statement "fwrite(&DAT_0002000a,1,4,(FILE *)out);" (call_expression "fwrite(&DAT_0002000a,1,4,(FILE *)out)" identifier (argument_list "(&DAT_0002000a,1,4,(FILE *)out)" ( (pointer_expression "&DAT_0002000a" & identifier) , number_literal , number_literal , (cast_expression "(FILE *)out" ( (type_descriptor "FILE *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) (if_statement "if (0 < rp->nrhs) {\n    iVar3 = 0;\n    do {\n      while (psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL) {\n        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);\n        if (psVar2->nsubsym < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);\n        iVar3 = iVar3 + 1;\n        if (rp->nrhs <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(out,1,&DAT_000201db,psVar2->name);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < rp->nrhs);\n  }" if (parenthesized_expression "(0 < rp->nrhs)" ( (binary_expression "0 < rp->nrhs" number_literal < (field_expression "rp->nrhs" identifier -> field_identifier)) )) (compound_statement "{\n    iVar3 = 0;\n    do {\n      while (psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL) {\n        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);\n        if (psVar2->nsubsym < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);\n        iVar3 = iVar3 + 1;\n        if (rp->nrhs <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(out,1,&DAT_000201db,psVar2->name);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < rp->nrhs);\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      while (psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL) {\n        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);\n        if (psVar2->nsubsym < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);\n        iVar3 = iVar3 + 1;\n        if (rp->nrhs <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(out,1,&DAT_000201db,psVar2->name);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < rp->nrhs);" do (compound_statement "{\n      while (psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL) {\n        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);\n        if (psVar2->nsubsym < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);\n        iVar3 = iVar3 + 1;\n        if (rp->nrhs <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(out,1,&DAT_000201db,psVar2->name);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    }" { (while_statement "while (psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL) {\n        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);\n        if (psVar2->nsubsym < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);\n        iVar3 = iVar3 + 1;\n        if (rp->nrhs <= iVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "(psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL)" ( (comma_expression "psVar2 = rp->rhs[iVar3], psVar2->type == MULTITERMINAL" (assignment_expression "psVar2 = rp->rhs[iVar3]" identifier = (subscript_expression "rp->rhs[iVar3]" (field_expression "rp->rhs" identifier -> field_identifier) [ identifier ])) , (binary_expression "psVar2->type == MULTITERMINAL" (field_expression "psVar2->type" identifier -> field_identifier) == identifier)) )) (compound_statement "{\n        __fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);\n        if (psVar2->nsubsym < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);\n        iVar3 = iVar3 + 1;\n        if (rp->nrhs <= iVar3) {\n          return;\n        }\n      }" { (expression_statement "__fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name);" (call_expression "__fprintf_chk(out,1,&DAT_000201db,(*psVar2->subsym)->name)" identifier (argument_list "(out,1,&DAT_000201db,(*psVar2->subsym)->name)" ( identifier , number_literal , (pointer_expression "&DAT_000201db" & identifier) , (field_expression "(*psVar2->subsym)->name" (parenthesized_expression "(*psVar2->subsym)" ( (pointer_expression "*psVar2->subsym" * (field_expression "psVar2->subsym" identifier -> field_identifier)) )) -> field_identifier) ))) ;) (if_statement "if (psVar2->nsubsym < 2) goto LAB_00015bb4;" if (parenthesized_expression "(psVar2->nsubsym < 2)" ( (binary_expression "psVar2->nsubsym < 2" (field_expression "psVar2->nsubsym" identifier -> field_identifier) < number_literal) )) (goto_statement "goto LAB_00015bb4;" goto statement_identifier ;)) (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" identifier = number_literal) ;) (do_statement "do {\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        } while (iVar4 < psVar2->nsubsym);" do (compound_statement "{\n          ppsVar1 = psVar2->subsym + iVar4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);\n        }" { (expression_statement "ppsVar1 = psVar2->subsym + iVar4;" (assignment_expression "ppsVar1 = psVar2->subsym + iVar4" identifier = (binary_expression "psVar2->subsym + iVar4" (field_expression "psVar2->subsym" identifier -> field_identifier) + identifier)) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "__fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name);" (call_expression "__fprintf_chk(out,1,&DAT_0002000f,(*ppsVar1)->name)" identifier (argument_list "(out,1,&DAT_0002000f,(*ppsVar1)->name)" ( identifier , number_literal , (pointer_expression "&DAT_0002000f" & identifier) , (field_expression "(*ppsVar1)->name" (parenthesized_expression "(*ppsVar1)" ( (pointer_expression "*ppsVar1" * identifier) )) -> field_identifier) ))) ;) }) while (parenthesized_expression "(iVar4 < psVar2->nsubsym)" ( (binary_expression "iVar4 < psVar2->nsubsym" identifier < (field_expression "psVar2->nsubsym" identifier -> field_identifier)) )) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if (rp->nrhs <= iVar3) {\n          return;\n        }" if (parenthesized_expression "(rp->nrhs <= iVar3)" ( (binary_expression "rp->nrhs <= iVar3" (field_expression "rp->nrhs" identifier -> field_identifier) <= identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "__fprintf_chk(out,1,&DAT_000201db,psVar2->name);" (call_expression "__fprintf_chk(out,1,&DAT_000201db,psVar2->name)" identifier (argument_list "(out,1,&DAT_000201db,psVar2->name)" ( identifier , number_literal , (pointer_expression "&DAT_000201db" & identifier) , (field_expression "psVar2->name" identifier -> field_identifier) ))) ;) (labeled_statement "LAB_00015bb4:\n      iVar3 = iVar3 + 1;" statement_identifier : (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;)) }) while (parenthesized_expression "(iVar3 < rp->nrhs)" ( (binary_expression "iVar3 < rp->nrhs" identifier < (field_expression "rp->nrhs" identifier -> field_identifier)) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00015b40(FILE *param_1,undefined4 *param_2)\n\n{\n  int iVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(*(char **)*param_2,param_1);\n  fwrite(&DAT_0002000a,1,4,param_1);\n  if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00015b40(FILE *param_1,undefined4 *param_2)\n\n{\n  int iVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(*(char **)*param_2,param_1);\n  fwrite(&DAT_0002000a,1,4,param_1);\n  if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00015b40(FILE *param_1,undefined4 *param_2)" identifier (parameter_list "(FILE *param_1,undefined4 *param_2)" ( (parameter_declaration "FILE *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(*(char **)*param_2,param_1);\n  fwrite(&DAT_0002000a,1,4,param_1);\n  if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }\n  return;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "undefined4 *puVar2;" type_identifier (pointer_declarator "*puVar2" * identifier) ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (expression_statement "fputs(*(char **)*param_2,param_1);" (call_expression "fputs(*(char **)*param_2,param_1)" identifier (argument_list "(*(char **)*param_2,param_1)" ( (pointer_expression "*(char **)*param_2" * (cast_expression "(char **)*param_2" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "*param_2" * identifier))) , identifier ))) ;) (expression_statement "fwrite(&DAT_0002000a,1,4,param_1);" (call_expression "fwrite(&DAT_0002000a,1,4,param_1)" identifier (argument_list "(&DAT_0002000a,1,4,param_1)" ( (pointer_expression "&DAT_0002000a" & identifier) , number_literal , number_literal , identifier ))) ;) (if_statement "if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }" if (parenthesized_expression "(0 < (int)param_2[4])" ( (binary_expression "0 < (int)param_2[4]" number_literal < (cast_expression "(int)param_2[4]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[4]" identifier [ number_literal ]))) )) (compound_statement "{\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }" { (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" identifier = number_literal) ;) (do_statement "do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);" do (compound_statement "{\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    }" { (while_statement "while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }" while (parenthesized_expression "(puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2)" ( (comma_expression "puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2" (assignment_expression "puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4)" identifier = (pointer_expression "*(undefined4 **)(param_2[5] + iVar3 * 4)" * (cast_expression "(undefined4 **)(param_2[5] + iVar3 * 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2[5] + iVar3 * 4)" ( (binary_expression "param_2[5] + iVar3 * 4" (subscript_expression "param_2[5]" identifier [ number_literal ]) + (binary_expression "iVar3 * 4" identifier * number_literal)) ))))) , (binary_expression "puVar2[2] == 2" (subscript_expression "puVar2[2]" identifier [ number_literal ]) == number_literal)) )) (compound_statement "{\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }" { (expression_statement "__fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);" (call_expression "__fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10])" identifier (argument_list "(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10])" ( identifier , number_literal , (pointer_expression "&DAT_000201db" & identifier) , (pointer_expression "**(undefined4 **)puVar2[0x10]" * (pointer_expression "*(undefined4 **)puVar2[0x10]" * (cast_expression "(undefined4 **)puVar2[0x10]" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (subscript_expression "puVar2[0x10]" identifier [ number_literal ])))) ))) ;) (if_statement "if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;" if (parenthesized_expression "((int)puVar2[0xf] < 2)" ( (binary_expression "(int)puVar2[0xf] < 2" (cast_expression "(int)puVar2[0xf]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "puVar2[0xf]" identifier [ number_literal ])) < number_literal) )) (goto_statement "goto LAB_00015bb4;" goto statement_identifier ;)) (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" identifier = number_literal) ;) (do_statement "do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);" do (compound_statement "{\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        }" { (expression_statement "iVar1 = iVar4 * 4;" (assignment_expression "iVar1 = iVar4 * 4" identifier = (binary_expression "iVar4 * 4" identifier * number_literal)) ;) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" identifier = (binary_expression "iVar4 + 1" identifier + number_literal)) ;) (expression_statement "__fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));" (call_expression "__fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1))" identifier (argument_list "(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1))" ( identifier , number_literal , (pointer_expression "&DAT_0002000f" & identifier) , (pointer_expression "**(undefined4 **)(puVar2[0x10] + iVar1)" * (pointer_expression "*(undefined4 **)(puVar2[0x10] + iVar1)" * (cast_expression "(undefined4 **)(puVar2[0x10] + iVar1)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(puVar2[0x10] + iVar1)" ( (binary_expression "puVar2[0x10] + iVar1" (subscript_expression "puVar2[0x10]" identifier [ number_literal ]) + identifier) ))))) ))) ;) }) while (parenthesized_expression "(iVar4 < (int)puVar2[0xf])" ( (binary_expression "iVar4 < (int)puVar2[0xf]" identifier < (cast_expression "(int)puVar2[0xf]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "puVar2[0xf]" identifier [ number_literal ]))) )) ;) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;) (if_statement "if ((int)param_2[4] <= iVar3) {\n          return;\n        }" if (parenthesized_expression "((int)param_2[4] <= iVar3)" ( (binary_expression "(int)param_2[4] <= iVar3" (cast_expression "(int)param_2[4]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[4]" identifier [ number_literal ])) <= identifier) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "__fprintf_chk(param_1,1,&DAT_000201db,*puVar2);" (call_expression "__fprintf_chk(param_1,1,&DAT_000201db,*puVar2)" identifier (argument_list "(param_1,1,&DAT_000201db,*puVar2)" ( identifier , number_literal , (pointer_expression "&DAT_000201db" & identifier) , (pointer_expression "*puVar2" * identifier) ))) ;) (labeled_statement "LAB_00015bb4:\n      iVar3 = iVar3 + 1;" statement_identifier : (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" identifier = (binary_expression "iVar3 + 1" identifier + number_literal)) ;)) }) while (parenthesized_expression "(iVar3 < (int)param_2[4])" ( (binary_expression "iVar3 < (int)param_2[4]" identifier < (cast_expression "(int)param_2[4]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_2[4]" identifier [ number_literal ]))) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (pointer_expression * IDENT))) , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , LIT , LIT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + (binary_expression IDENT * LIT)) ))))) , (binary_expression (subscript_expression IDENT [ LIT ]) == LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (pointer_expression & IDENT) , (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (subscript_expression IDENT [ LIT ])))) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) < LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT * LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (pointer_expression & IDENT) , (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) ))))) ))) ;) }) while (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= IDENT) )) (compound_statement { (return_statement return ;) })) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , (pointer_expression & IDENT) , (pointer_expression * IDENT) ))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;)) }) while (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) ;) })) (return_statement return ;) })))
(function_definition "void FUN_00015b40(FILE *param_1,undefined4 *param_2)\n\n{\n  int iVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(*(char **)*param_2,param_1);\n  fwrite(&DAT_0002000a,1,4,param_1);\n  if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00015b40(FILE *param_1,undefined4 *param_2)" (identifier "FUN_00015b40") (parameter_list "(FILE *param_1,undefined4 *param_2)" (( "(") (parameter_declaration "FILE *param_1" (type_identifier "FILE") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "undefined4 *param_2" (type_identifier "undefined4") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  int iVar1;\n  undefined4 *puVar2;\n  int iVar3;\n  int iVar4;\n  \n  fputs(*(char **)*param_2,param_1);\n  fwrite(&DAT_0002000a,1,4,param_1);\n  if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }\n  return;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "undefined4 *puVar2;" (type_identifier "undefined4") (pointer_declarator "*puVar2" (* "*") (identifier "puVar2")) (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (expression_statement "fputs(*(char **)*param_2,param_1);" (call_expression "fputs(*(char **)*param_2,param_1)" (identifier "fputs") (argument_list "(*(char **)*param_2,param_1)" (( "(") (pointer_expression "*(char **)*param_2" (* "*") (cast_expression "(char **)*param_2" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (, ",") (identifier "param_1") () ")"))) (; ";")) (expression_statement "fwrite(&DAT_0002000a,1,4,param_1);" (call_expression "fwrite(&DAT_0002000a,1,4,param_1)" (identifier "fwrite") (argument_list "(&DAT_0002000a,1,4,param_1)" (( "(") (pointer_expression "&DAT_0002000a" (& "&") (identifier "DAT_0002000a")) (, ",") (number_literal "1") (, ",") (number_literal "4") (, ",") (identifier "param_1") () ")"))) (; ";")) (if_statement "if (0 < (int)param_2[4]) {\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }" (if "if") (parenthesized_expression "(0 < (int)param_2[4])" (( "(") (binary_expression "0 < (int)param_2[4]" (number_literal "0") (< "<") (cast_expression "(int)param_2[4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]")))) () ")")) (compound_statement "{\n    iVar3 = 0;\n    do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);\n  }" ({ "{") (expression_statement "iVar3 = 0;" (assignment_expression "iVar3 = 0" (identifier "iVar3") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    } while (iVar3 < (int)param_2[4]);" (do "do") (compound_statement "{\n      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }\n      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);\nLAB_00015bb4:\n      iVar3 = iVar3 + 1;\n    }" ({ "{") (while_statement "while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }" (while "while") (parenthesized_expression "(puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2)" (( "(") (comma_expression "puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2" (assignment_expression "puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4)" (identifier "puVar2") (= "=") (pointer_expression "*(undefined4 **)(param_2[5] + iVar3 * 4)" (* "*") (cast_expression "(undefined4 **)(param_2[5] + iVar3 * 4)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2[5] + iVar3 * 4)" (( "(") (binary_expression "param_2[5] + iVar3 * 4" (subscript_expression "param_2[5]" (identifier "param_2") ([ "[") (number_literal "5") (] "]")) (+ "+") (binary_expression "iVar3 * 4" (identifier "iVar3") (* "*") (number_literal "4"))) () ")"))))) (, ",") (binary_expression "puVar2[2] == 2" (subscript_expression "puVar2[2]" (identifier "puVar2") ([ "[") (number_literal "2") (] "]")) (== "==") (number_literal "2"))) () ")")) (compound_statement "{\n        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);\n        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;\n        iVar4 = 1;\n        do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);\n        iVar3 = iVar3 + 1;\n        if ((int)param_2[4] <= iVar3) {\n          return;\n        }\n      }" ({ "{") (expression_statement "__fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);" (call_expression "__fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10])" (identifier "__fprintf_chk") (argument_list "(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10])" (( "(") (identifier "param_1") (, ",") (number_literal "1") (, ",") (pointer_expression "&DAT_000201db" (& "&") (identifier "DAT_000201db")) (, ",") (pointer_expression "**(undefined4 **)puVar2[0x10]" (* "*") (pointer_expression "*(undefined4 **)puVar2[0x10]" (* "*") (cast_expression "(undefined4 **)puVar2[0x10]" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (subscript_expression "puVar2[0x10]" (identifier "puVar2") ([ "[") (number_literal "0x10") (] "]"))))) () ")"))) (; ";")) (if_statement "if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;" (if "if") (parenthesized_expression "((int)puVar2[0xf] < 2)" (( "(") (binary_expression "(int)puVar2[0xf] < 2" (cast_expression "(int)puVar2[0xf]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "puVar2[0xf]" (identifier "puVar2") ([ "[") (number_literal "0xf") (] "]"))) (< "<") (number_literal "2")) () ")")) (goto_statement "goto LAB_00015bb4;" (goto "goto") (statement_identifier "LAB_00015bb4") (; ";"))) (expression_statement "iVar4 = 1;" (assignment_expression "iVar4 = 1" (identifier "iVar4") (= "=") (number_literal "1")) (; ";")) (do_statement "do {\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        } while (iVar4 < (int)puVar2[0xf]);" (do "do") (compound_statement "{\n          iVar1 = iVar4 * 4;\n          iVar4 = iVar4 + 1;\n          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));\n        }" ({ "{") (expression_statement "iVar1 = iVar4 * 4;" (assignment_expression "iVar1 = iVar4 * 4" (identifier "iVar1") (= "=") (binary_expression "iVar4 * 4" (identifier "iVar4") (* "*") (number_literal "4"))) (; ";")) (expression_statement "iVar4 = iVar4 + 1;" (assignment_expression "iVar4 = iVar4 + 1" (identifier "iVar4") (= "=") (binary_expression "iVar4 + 1" (identifier "iVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "__fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));" (call_expression "__fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1))" (identifier "__fprintf_chk") (argument_list "(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1))" (( "(") (identifier "param_1") (, ",") (number_literal "1") (, ",") (pointer_expression "&DAT_0002000f" (& "&") (identifier "DAT_0002000f")) (, ",") (pointer_expression "**(undefined4 **)(puVar2[0x10] + iVar1)" (* "*") (pointer_expression "*(undefined4 **)(puVar2[0x10] + iVar1)" (* "*") (cast_expression "(undefined4 **)(puVar2[0x10] + iVar1)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(puVar2[0x10] + iVar1)" (( "(") (binary_expression "puVar2[0x10] + iVar1" (subscript_expression "puVar2[0x10]" (identifier "puVar2") ([ "[") (number_literal "0x10") (] "]")) (+ "+") (identifier "iVar1")) () ")"))))) () ")"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar4 < (int)puVar2[0xf])" (( "(") (binary_expression "iVar4 < (int)puVar2[0xf]" (identifier "iVar4") (< "<") (cast_expression "(int)puVar2[0xf]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "puVar2[0xf]" (identifier "puVar2") ([ "[") (number_literal "0xf") (] "]")))) () ")")) (; ";")) (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if ((int)param_2[4] <= iVar3) {\n          return;\n        }" (if "if") (parenthesized_expression "((int)param_2[4] <= iVar3)" (( "(") (binary_expression "(int)param_2[4] <= iVar3" (cast_expression "(int)param_2[4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]"))) (<= "<=") (identifier "iVar3")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (expression_statement "__fprintf_chk(param_1,1,&DAT_000201db,*puVar2);" (call_expression "__fprintf_chk(param_1,1,&DAT_000201db,*puVar2)" (identifier "__fprintf_chk") (argument_list "(param_1,1,&DAT_000201db,*puVar2)" (( "(") (identifier "param_1") (, ",") (number_literal "1") (, ",") (pointer_expression "&DAT_000201db" (& "&") (identifier "DAT_000201db")) (, ",") (pointer_expression "*puVar2" (* "*") (identifier "puVar2")) () ")"))) (; ";")) (labeled_statement "LAB_00015bb4:\n      iVar3 = iVar3 + 1;" (statement_identifier "LAB_00015bb4") (: ":") (expression_statement "iVar3 = iVar3 + 1;" (assignment_expression "iVar3 = iVar3 + 1" (identifier "iVar3") (= "=") (binary_expression "iVar3 + 1" (identifier "iVar3") (+ "+") (number_literal "1"))) (; ";"))) (} "}")) (while "while") (parenthesized_expression "(iVar3 < (int)param_2[4])" (( "(") (binary_expression "iVar3 < (int)param_2[4]" (identifier "iVar3") (< "<") (cast_expression "(int)param_2[4]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_2[4]" (identifier "param_2") ([ "[") (number_literal "4") (] "]")))) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void function_1(type_1 *out,type_2 *rp)

{
  type_3 **ppsVar1;
  type_3 *psVar2;
  int var_6;
  int var_5;
  
  var_1(rp->lhs->name,(type_1 *)out);
  var_2(&DAT_0002000a,1,4,(type_1 *)out);
  if (0 < rp->nrhs) {
    var_6 = 0;
    do {
      while (psVar2 = rp->rhs[var_6], psVar2->type == var_3) {
        var_4(out,1,&DAT_000201db,(*psVar2->subsym)->name);
        if (psVar2->nsubsym < 2) goto LAB_00015bb4;
        var_5 = 1;
        do {
          ppsVar1 = psVar2->subsym + var_5;
          var_5 = var_5 + 1;
          var_4(out,1,&DAT_0002000f,(*ppsVar1)->name);
        } while (var_5 < psVar2->nsubsym);
        var_6 = var_6 + 1;
        if (rp->nrhs <= var_6) {
          return;
        }
      }
      var_4(out,1,&DAT_000201db,psVar2->name);
LAB_00015bb4:
      var_6 = var_6 + 1;
    } while (var_6 < rp->nrhs);
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (pointer_expression argument: (identifier)))) (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)) (number_literal) (number_literal) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal))))))) right: (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal)))) body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (pointer_expression argument: (identifier)) (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (subscript_expression argument: (identifier) index: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (pointer_expression argument: (identifier)) (pointer_expression argument: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier)))))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))) consequence: (compound_statement (return_statement))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal) (pointer_expression argument: (identifier)) (pointer_expression argument: (identifier))))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))) (return_statement))))

/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */

void MASKED(FILE *param_1,undefined4 *param_2)

{
  int iVar1;
  undefined4 *puVar2;
  int iVar3;
  int iVar4;
  
  fputs(*(char **)*param_2,param_1);
  fwrite(&DAT_0002000a,1,4,param_1);
  if (0 < (int)param_2[4]) {
    iVar3 = 0;
    do {
      while (puVar2 = *(undefined4 **)(param_2[5] + iVar3 * 4), puVar2[2] == 2) {
        __fprintf_chk(param_1,1,&DAT_000201db,**(undefined4 **)puVar2[0x10]);
        if ((int)puVar2[0xf] < 2) goto LAB_00015bb4;
        iVar4 = 1;
        do {
          iVar1 = iVar4 * 4;
          iVar4 = iVar4 + 1;
          __fprintf_chk(param_1,1,&DAT_0002000f,**(undefined4 **)(puVar2[0x10] + iVar1));
        } while (iVar4 < (int)puVar2[0xf]);
        iVar3 = iVar3 + 1;
        if ((int)param_2[4] <= iVar3) {
          return;
        }
      }
      __fprintf_chk(param_1,1,&DAT_000201db,*puVar2);
LAB_00015bb4:
      iVar3 = iVar3 + 1;
    } while (iVar3 < (int)param_2[4]);
  }
  return;
}

