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

section_list * __regparm3 find_section_list(char *name,bfd_boolean add,uint context)

{
  int iVar1;
  section_list *psVar2;
  char *pcVar3;
  section_list *psVar4;
  section_list *local_20;
  
  local_20 = (section_list *)0x0;
  psVar4 = change_sections;
  if (change_sections == (section_list *)0x0) {
    if (add == 0) {
      return (section_list *)0x0;
    }
  }
  else {
    do {
      while (add != 0) {
        iVar1 = strcmp(psVar4->pattern,name);
        if (iVar1 == 0) {
          psVar2 = (section_list *)psVar4->context;
          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&
             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {
            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {
              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&
                 ((context & 0x30) != 0x30)) {
                psVar4->context = (uint)psVar2 | context;
                return psVar4;
              }
              pcVar3 = "error: %s both sets and alters LMA";
              psVar4 = psVar2;
            }
            else {
              pcVar3 = "error: %s both sets and alters VMA";
              psVar4 = (section_list *)add;
            }
          }
          else {
            pcVar3 = "error: %s both copied and removed";
          }
          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);
                    /* WARNING: Subroutine does not return */
          fatal(pcVar3,name);
        }
LAB_00016a7f:
        psVar4 = psVar4->next;
        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;
      }
      if ((psVar4->context & context) == 0) goto LAB_00016a7f;
      pcVar3 = psVar4->pattern;
      if (*pcVar3 == '!') {
        iVar1 = fnmatch(pcVar3 + 1,name,0);
        if (iVar1 == 0) {
          psVar4->used = 1;
          return (section_list *)0x0;
        }
        goto LAB_00016a7f;
      }
      iVar1 = fnmatch(pcVar3,name,0);
      if (iVar1 == 0 && local_20 == (section_list *)0x0) {
        local_20 = psVar4;
      }
      psVar4 = psVar4->next;
    } while (psVar4 != (section_list *)0x0);
LAB_00016ac0:
    if (add == 0) {
      if (local_20 == (section_list *)0x0) {
        return (section_list *)0x0;
      }
      local_20->used = 1;
      return local_20;
    }
  }
  psVar2 = (section_list *)xmalloc(0x24);
  psVar2->pattern = name;
  psVar2->context = context;
  psVar2->used = 0;
  *(undefined4 *)&psVar2->vma_val = 0;
  *(undefined4 *)((int)&psVar2->vma_val + 4) = 0;
  *(undefined4 *)&psVar2->lma_val = 0;
  *(undefined4 *)((int)&psVar2->lma_val + 4) = 0;
  psVar2->flags = 0;
  psVar4 = psVar2;
  psVar2->next = change_sections;
  change_sections = psVar4;
  return psVar2;
}



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

int * __regparm3 FUN_00016a30(char *param_1,int *param_2,uint param_3)

{
  int iVar1;
  int *piVar2;
  char *pcVar3;
  undefined4 uVar4;
  int *piVar5;
  int *local_20;
  
  local_20 = (int *)0x0;
  piVar5 = DAT_00040ba8;
  if (DAT_00040ba8 == (int *)0x0) {
    if (param_2 == (int *)0x0) {
      return (int *)0x0;
    }
  }
  else {
    do {
      while (param_2 != (int *)0x0) {
        iVar1 = strcmp((char *)piVar5[1],param_1);
        if (iVar1 == 0) {
          piVar2 = (int *)piVar5[3];
          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&
             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {
            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {
              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&
                 ((param_3 & 0x30) != 0x30)) {
                piVar5[3] = (uint)piVar2 | param_3;
                return piVar5;
              }
              pcVar3 = "error: %s both sets and alters LMA";
              piVar5 = piVar2;
            }
            else {
              pcVar3 = "error: %s both sets and alters VMA";
              piVar5 = param_2;
            }
          }
          else {
            pcVar3 = "error: %s both copied and removed";
          }
          uVar4 = dcgettext(0,pcVar3,5,piVar5);
                    /* WARNING: Subroutine does not return */
          FUN_0002c8e0(uVar4,param_1);
        }
LAB_00016a7f:
        piVar5 = (int *)*piVar5;
        if (piVar5 == (int *)0x0) goto LAB_00016ac0;
      }
      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;
      pcVar3 = (char *)piVar5[1];
      if (*pcVar3 == '!') {
        iVar1 = fnmatch(pcVar3 + 1,param_1,0);
        if (iVar1 == 0) {
          piVar5[2] = 1;
          return (int *)0x0;
        }
        goto LAB_00016a7f;
      }
      iVar1 = fnmatch(pcVar3,param_1,0);
      if (iVar1 == 0 && local_20 == (int *)0x0) {
        local_20 = piVar5;
      }
      piVar5 = (int *)*piVar5;
    } while (piVar5 != (int *)0x0);
LAB_00016ac0:
    if (param_2 == (int *)0x0) {
      if (local_20 == (int *)0x0) {
        return (int *)0x0;
      }
      local_20[2] = 1;
      return local_20;
    }
  }
  piVar2 = (int *)xmalloc(0x24);
  piVar2[1] = (int)param_1;
  piVar2[3] = param_3;
  piVar2[2] = 0;
  piVar2[4] = 0;
  piVar2[5] = 0;
  piVar2[6] = 0;
  piVar2[7] = 0;
  piVar2[8] = 0;
  piVar5 = piVar2;
  *piVar2 = (int)DAT_00040ba8;
  DAT_00040ba8 = piVar5;
  return piVar2;
}


PUSH EBP
PUSH EDI
MOV EDI,EAX
PUSH ESI
MOV ESI,EDX
PUSH EBX
CALL 0x000166c0
ADD EBX,0x295c3
SUB ESP,0x1c
MOV dword ptr [ESP + 0x8],ECX
MOV dword ptr [ESP + 0xc],0x0
MOV EBP,dword ptr [EBX + 0xba8]
TEST EBP,EBP
JNZ 0x00016a86
JMP 0x00016b07
SUB ESP,0x8
PUSH EDI
PUSH dword ptr [EBP + 0x4]
CALL 0x00013070
ADD ESP,0x10
TEST EAX,EAX
JZ 0x00016b70
MOV EBP,dword ptr [EBP]
TEST EBP,EBP
JZ 0x00016ac0
TEST ESI,ESI
JNZ 0x00016a68
MOV EAX,dword ptr [ESP + 0x8]
TEST dword ptr [EBP + 0xc],EAX
JZ 0x00016a7f
MOV EAX,dword ptr [EBP + 0x4]
CMP byte ptr [EAX],0x21
JZ 0x00016ae0
SUB ESP,0x4
PUSH 0x0
PUSH EDI
PUSH EAX
CALL 0x00013280
ADD ESP,0x10
MOV EDX,dword ptr [ESP + 0xc]
OR EAX,EDX
CMOVZ EDX,EBP
MOV EBP,dword ptr [EBP]
MOV dword ptr [ESP + 0xc],EDX
TEST EBP,EBP
JNZ 0x00016a86
NOP
TEST ESI,ESI
JNZ 0x00016b0b
MOV EAX,dword ptr [ESP + 0xc]
TEST EAX,EAX
JZ 0x00016ad3
MOV dword ptr [EAX + 0x8],0x1
MOV EAX,dword ptr [ESP + 0xc]
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
SUB ESP,0x4
ADD EAX,0x1
PUSH 0x0
PUSH EDI
PUSH EAX
CALL 0x00013280
ADD ESP,0x10
TEST EAX,EAX
JNZ 0x00016a7f
MOV dword ptr [EBP + 0x8],0x1
MOV dword ptr [ESP + 0xc],0x0
JMP 0x00016ad3
TEST EDX,EDX
JZ 0x00016ad3
SUB ESP,0xc
PUSH 0x24
CALL 0x000132e0
MOV ECX,dword ptr [ESP + 0x18]
MOV dword ptr [EAX + 0x4],EDI
MOV dword ptr [EAX + 0xc],ECX
MOV ECX,EAX
MOV dword ptr [EAX + 0x8],0x0
MOV dword ptr [EAX + 0x10],0x0
MOV dword ptr [EAX + 0x14],0x0
MOV dword ptr [EAX + 0x18],0x0
MOV dword ptr [EAX + 0x1c],0x0
MOV dword ptr [EAX + 0x20],0x0
MOV dword ptr [ESP + 0x1c],EAX
MOV EAX,dword ptr [EBX + 0xba8]
ADD ESP,0x10
MOV dword ptr [EBX + 0xba8],ECX
MOV dword ptr [ECX],EAX
MOV EAX,dword ptr [ESP + 0xc]
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
MOV EAX,dword ptr [EBP + 0xc]
TEST AL,0x1
JZ 0x00016b7e
TEST byte ptr [ESP + 0x8],0x2
JNZ 0x00016bea
TEST byte ptr [ESP + 0x8],0x1
JZ 0x00016b89
TEST AL,0x2
JNZ 0x00016bea
TEST AL,0x4
JNZ 0x00016bd8
MOV ECX,dword ptr [ESP + 0x8]
AND ECX,0xc
CMP ECX,0xc
JZ 0x00016bdf
TEST AL,0x10
JNZ 0x00016bc0
MOV ECX,dword ptr [ESP + 0x8]
AND ECX,0x30
CMP ECX,0x30
JZ 0x00016bc7
OR EAX,dword ptr [ESP + 0x8]
MOV dword ptr [ESP + 0xc],EBP
MOV dword ptr [EBP + 0xc],EAX
MOV EAX,dword ptr [ESP + 0xc]
ADD ESP,0x1c
POP EBX
POP ESI
POP EDI
POP EBP
RET
TEST byte ptr [ESP + 0x8],0x20
JZ 0x00016b9d
PUSH EAX
LEA EAX,[EBX + 0xfffef9dc]
PUSH 0x5
JMP 0x00016bf3
TEST byte ptr [ESP + 0x8],0x8
JZ 0x00016b8d
LEA EAX,[EBX + 0xfffef9b8]
PUSH ESI
PUSH 0x5
JMP 0x00016bf3
PUSH EBP
LEA EAX,[EBX + 0xfffef994]
PUSH 0x5
PUSH EAX
PUSH 0x0
CALL 0x00013200
POP EDX
POP ECX
PUSH EDI
PUSH EAX
CALL 0x0002c8e0
(translation_unit "/* WARNING: Function: __i686.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nint * __regparm3 FUN_00016a30(char *param_1,int *param_2,uint param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  char *pcVar3;\n  undefined4 uVar4;\n  int *piVar5;\n  int *local_20;\n  \n  local_20 = (int *)0x0;\n  piVar5 = DAT_00040ba8;\n  if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }\n  piVar2 = (int *)xmalloc(0x24);\n  piVar2[1] = (int)param_1;\n  piVar2[3] = param_3;\n  piVar2[2] = 0;\n  piVar2[4] = 0;\n  piVar2[5] = 0;\n  piVar2[6] = 0;\n  piVar2[7] = 0;\n  piVar2[8] = 0;\n  piVar5 = piVar2;\n  *piVar2 = (int)DAT_00040ba8;\n  DAT_00040ba8 = piVar5;\n  return piVar2;\n}\n\n" comment (function_definition "int * __regparm3 FUN_00016a30(char *param_1,int *param_2,uint param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  char *pcVar3;\n  undefined4 uVar4;\n  int *piVar5;\n  int *local_20;\n  \n  local_20 = (int *)0x0;\n  piVar5 = DAT_00040ba8;\n  if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }\n  piVar2 = (int *)xmalloc(0x24);\n  piVar2[1] = (int)param_1;\n  piVar2[3] = param_3;\n  piVar2[2] = 0;\n  piVar2[4] = 0;\n  piVar2[5] = 0;\n  piVar2[6] = 0;\n  piVar2[7] = 0;\n  piVar2[8] = 0;\n  piVar5 = piVar2;\n  *piVar2 = (int)DAT_00040ba8;\n  DAT_00040ba8 = piVar5;\n  return piVar2;\n}" primitive_type (pointer_declarator "* __regparm3 FUN_00016a30(char *param_1,int *param_2,uint param_3)" * (ERROR "__regparm3" identifier) (function_declarator "FUN_00016a30(char *param_1,int *param_2,uint param_3)" identifier (parameter_list "(char *param_1,int *param_2,uint param_3)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) )))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  char *pcVar3;\n  undefined4 uVar4;\n  int *piVar5;\n  int *local_20;\n  \n  local_20 = (int *)0x0;\n  piVar5 = DAT_00040ba8;\n  if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }\n  piVar2 = (int *)xmalloc(0x24);\n  piVar2[1] = (int)param_1;\n  piVar2[3] = param_3;\n  piVar2[2] = 0;\n  piVar2[4] = 0;\n  piVar2[5] = 0;\n  piVar2[6] = 0;\n  piVar2[7] = 0;\n  piVar2[8] = 0;\n  piVar5 = piVar2;\n  *piVar2 = (int)DAT_00040ba8;\n  DAT_00040ba8 = piVar5;\n  return piVar2;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int *local_20;" primitive_type (pointer_declarator "*local_20" * identifier) ;) (expression_statement "local_20 = (int *)0x0;" (assignment_expression "local_20 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "piVar5 = DAT_00040ba8;" (assignment_expression "piVar5 = DAT_00040ba8" identifier = identifier) ;) (if_statement "if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }" if (parenthesized_expression "(DAT_00040ba8 == (int *)0x0)" ( (binary_expression "DAT_00040ba8 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }" { (if_statement "if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (int *)0x0;\n    }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) (else_clause "else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }" else (compound_statement "{\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }" { (do_statement "do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);" do (compound_statement "{\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    }" { (while_statement "while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }" while (parenthesized_expression "(param_2 != (int *)0x0)" ( (binary_expression "param_2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }" { (expression_statement "iVar1 = strcmp((char *)piVar5[1],param_1);" (assignment_expression "iVar1 = strcmp((char *)piVar5[1],param_1)" identifier = (call_expression "strcmp((char *)piVar5[1],param_1)" identifier (argument_list "((char *)piVar5[1],param_1)" ( (cast_expression "(char *)piVar5[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar5[1]" identifier [ number_literal ])) , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    /* WARNING: Subroutine does not return */\n          FUN_0002c8e0(uVar4,param_1);\n        }" { (expression_statement "piVar2 = (int *)piVar5[3];" (assignment_expression "piVar2 = (int *)piVar5[3]" identifier = (cast_expression "(int *)piVar5[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar5[3]" identifier [ number_literal ]))) ;) (if_statement "if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }" if (parenthesized_expression "(((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0))))" ( (binary_expression "((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))" (parenthesized_expression "((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0))" ( (binary_expression "(((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)" (parenthesized_expression "(((uint)piVar2 & 1) == 0)" ( (binary_expression "((uint)piVar2 & 1) == 0" (parenthesized_expression "((uint)piVar2 & 1)" ( (binary_expression "(uint)piVar2 & 1" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_3 & 2) == 0)" ( (binary_expression "(param_3 & 2) == 0" (parenthesized_expression "(param_3 & 2)" ( (binary_expression "param_3 & 2" identifier & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "(((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))" ( (parenthesized_expression "((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0))" ( (binary_expression "(param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)" (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) || (parenthesized_expression "(((uint)piVar2 & 2) == 0)" ( (binary_expression "((uint)piVar2 & 2) == 0" (parenthesized_expression "((uint)piVar2 & 2)" ( (binary_expression "(uint)piVar2 & 2" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) )) ))) )) (compound_statement "{\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }" { (if_statement "if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }" if (parenthesized_expression "(((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc))" ( (binary_expression "((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)" (parenthesized_expression "((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0))" ( (binary_expression "(((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)" (parenthesized_expression "(((uint)piVar2 & 4) == 0)" ( (binary_expression "((uint)piVar2 & 4) == 0" (parenthesized_expression "((uint)piVar2 & 4)" ( (binary_expression "(uint)piVar2 & 4" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_3 & 8) == 0)" ( (binary_expression "(param_3 & 8) == 0" (parenthesized_expression "(param_3 & 8)" ( (binary_expression "param_3 & 8" identifier & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "((param_3 & 0xc) != 0xc)" ( (binary_expression "(param_3 & 0xc) != 0xc" (parenthesized_expression "(param_3 & 0xc)" ( (binary_expression "param_3 & 0xc" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }" { (if_statement "if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }" if (parenthesized_expression "(((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30))" ( (binary_expression "((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)" (parenthesized_expression "((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0))" ( (binary_expression "(((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)" (parenthesized_expression "(((uint)piVar2 & 0x10) == 0)" ( (binary_expression "((uint)piVar2 & 0x10) == 0" (parenthesized_expression "((uint)piVar2 & 0x10)" ( (binary_expression "(uint)piVar2 & 0x10" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_3 & 0x20) == 0)" ( (binary_expression "(param_3 & 0x20) == 0" (parenthesized_expression "(param_3 & 0x20)" ( (binary_expression "param_3 & 0x20" identifier & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "((param_3 & 0x30) != 0x30)" ( (binary_expression "(param_3 & 0x30) != 0x30" (parenthesized_expression "(param_3 & 0x30)" ( (binary_expression "param_3 & 0x30" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }" { (expression_statement "piVar5[3] = (uint)piVar2 | param_3;" (assignment_expression "piVar5[3] = (uint)piVar2 | param_3" (subscript_expression "piVar5[3]" identifier [ number_literal ]) = (binary_expression "(uint)piVar2 | param_3" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) | identifier)) ;) (return_statement "return piVar5;" return identifier ;) })) (expression_statement "pcVar3 = "error: %s both sets and alters LMA";" (assignment_expression "pcVar3 = "error: %s both sets and alters LMA"" identifier = (string_literal ""error: %s both sets and alters LMA"" " string_content ")) ;) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" identifier = identifier) ;) }) (else_clause "else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }" else (compound_statement "{\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }" { (expression_statement "pcVar3 = "error: %s both sets and alters VMA";" (assignment_expression "pcVar3 = "error: %s both sets and alters VMA"" identifier = (string_literal ""error: %s both sets and alters VMA"" " string_content ")) ;) (expression_statement "piVar5 = param_2;" (assignment_expression "piVar5 = param_2" identifier = identifier) ;) }))) }) (else_clause "else {\n            pcVar3 = "error: %s both copied and removed";\n          }" else (compound_statement "{\n            pcVar3 = "error: %s both copied and removed";\n          }" { (expression_statement "pcVar3 = "error: %s both copied and removed";" (assignment_expression "pcVar3 = "error: %s both copied and removed"" identifier = (string_literal ""error: %s both copied and removed"" " string_content ")) ;) }))) (expression_statement "uVar4 = dcgettext(0,pcVar3,5,piVar5);" (assignment_expression "uVar4 = dcgettext(0,pcVar3,5,piVar5)" identifier = (call_expression "dcgettext(0,pcVar3,5,piVar5)" identifier (argument_list "(0,pcVar3,5,piVar5)" ( number_literal , identifier , number_literal , identifier )))) ;) comment (expression_statement "FUN_0002c8e0(uVar4,param_1);" (call_expression "FUN_0002c8e0(uVar4,param_1)" identifier (argument_list "(uVar4,param_1)" ( identifier , identifier ))) ;) })) (labeled_statement "LAB_00016a7f:\n        piVar5 = (int *)*piVar5;" statement_identifier : (expression_statement "piVar5 = (int *)*piVar5;" (assignment_expression "piVar5 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;)) (if_statement "if (piVar5 == (int *)0x0) goto LAB_00016ac0;" if (parenthesized_expression "(piVar5 == (int *)0x0)" ( (binary_expression "piVar5 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00016ac0;" goto statement_identifier ;)) })) (if_statement "if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;" if (parenthesized_expression "((piVar5[3] & param_3) == 0)" ( (binary_expression "(piVar5[3] & param_3) == 0" (parenthesized_expression "(piVar5[3] & param_3)" ( (binary_expression "piVar5[3] & param_3" (subscript_expression "piVar5[3]" identifier [ number_literal ]) & identifier) )) == number_literal) )) (goto_statement "goto LAB_00016a7f;" goto statement_identifier ;)) (expression_statement "pcVar3 = (char *)piVar5[1];" (assignment_expression "pcVar3 = (char *)piVar5[1]" identifier = (cast_expression "(char *)piVar5[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar5[1]" identifier [ number_literal ]))) ;) (if_statement "if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }" if (parenthesized_expression "(*pcVar3 == '!')" ( (binary_expression "*pcVar3 == '!'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'!'" ' character ')) )) (compound_statement "{\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }" { (expression_statement "iVar1 = fnmatch(pcVar3 + 1,param_1,0);" (assignment_expression "iVar1 = fnmatch(pcVar3 + 1,param_1,0)" identifier = (call_expression "fnmatch(pcVar3 + 1,param_1,0)" identifier (argument_list "(pcVar3 + 1,param_1,0)" ( (binary_expression "pcVar3 + 1" identifier + number_literal) , identifier , number_literal )))) ;) (if_statement "if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }" { (expression_statement "piVar5[2] = 1;" (assignment_expression "piVar5[2] = 1" (subscript_expression "piVar5[2]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (goto_statement "goto LAB_00016a7f;" goto statement_identifier ;) })) (expression_statement "iVar1 = fnmatch(pcVar3,param_1,0);" (assignment_expression "iVar1 = fnmatch(pcVar3,param_1,0)" identifier = (call_expression "fnmatch(pcVar3,param_1,0)" identifier (argument_list "(pcVar3,param_1,0)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }" if (parenthesized_expression "(iVar1 == 0 && local_20 == (int *)0x0)" ( (binary_expression "iVar1 == 0 && local_20 == (int *)0x0" (binary_expression "iVar1 == 0" identifier == number_literal) && (binary_expression "local_20 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n        local_20 = piVar5;\n      }" { (expression_statement "local_20 = piVar5;" (assignment_expression "local_20 = piVar5" identifier = identifier) ;) })) (expression_statement "piVar5 = (int *)*piVar5;" (assignment_expression "piVar5 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) }) while (parenthesized_expression "(piVar5 != (int *)0x0)" ( (binary_expression "piVar5 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (labeled_statement "LAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }" statement_identifier : (if_statement "if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }" { (if_statement "if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }" if (parenthesized_expression "(local_20 == (int *)0x0)" ( (binary_expression "local_20 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return (int *)0x0;\n      }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "local_20[2] = 1;" (assignment_expression "local_20[2] = 1" (subscript_expression "local_20[2]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return local_20;" return identifier ;) }))) }))) (expression_statement "piVar2 = (int *)xmalloc(0x24);" (assignment_expression "piVar2 = (int *)xmalloc(0x24)" identifier = (cast_expression "(int *)xmalloc(0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x24)" identifier (argument_list "(0x24)" ( number_literal ))))) ;) (expression_statement "piVar2[1] = (int)param_1;" (assignment_expression "piVar2[1] = (int)param_1" (subscript_expression "piVar2[1]" identifier [ number_literal ]) = (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar2[3] = param_3;" (assignment_expression "piVar2[3] = param_3" (subscript_expression "piVar2[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar2[2] = 0;" (assignment_expression "piVar2[2] = 0" (subscript_expression "piVar2[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[4] = 0;" (assignment_expression "piVar2[4] = 0" (subscript_expression "piVar2[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[5] = 0;" (assignment_expression "piVar2[5] = 0" (subscript_expression "piVar2[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[6] = 0;" (assignment_expression "piVar2[6] = 0" (subscript_expression "piVar2[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[7] = 0;" (assignment_expression "piVar2[7] = 0" (subscript_expression "piVar2[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[8] = 0;" (assignment_expression "piVar2[8] = 0" (subscript_expression "piVar2[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" identifier = identifier) ;) (expression_statement "*piVar2 = (int)DAT_00040ba8;" (assignment_expression "*piVar2 = (int)DAT_00040ba8" (pointer_expression "*piVar2" * identifier) = (cast_expression "(int)DAT_00040ba8" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "DAT_00040ba8 = piVar5;" (assignment_expression "DAT_00040ba8 = piVar5" identifier = identifier) ;) (return_statement "return piVar2;" return identifier ;) })))
(translation_unit "/* WARNING: Function: __x86.get_pc_thunk.bx replaced with injection: get_pc_thunk_bx */\n\nsection_list * __regparm3 find_section_list(char *name,bfd_boolean add,uint context)\n\n{\n  int iVar1;\n  section_list *psVar2;\n  char *pcVar3;\n  section_list *psVar4;\n  section_list *local_20;\n  \n  local_20 = (section_list *)0x0;\n  psVar4 = change_sections;\n  if (change_sections == (section_list *)0x0) {\n    if (add == 0) {\n      return (section_list *)0x0;\n    }\n  }\n  else {\n    do {\n      while (add != 0) {\n        iVar1 = strcmp(psVar4->pattern,name);\n        if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }\nLAB_00016a7f:\n        psVar4 = psVar4->next;\n        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;\n      }\n      if ((psVar4->context & context) == 0) goto LAB_00016a7f;\n      pcVar3 = psVar4->pattern;\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,name,0);\n        if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,name,0);\n      if (iVar1 == 0 && local_20 == (section_list *)0x0) {\n        local_20 = psVar4;\n      }\n      psVar4 = psVar4->next;\n    } while (psVar4 != (section_list *)0x0);\nLAB_00016ac0:\n    if (add == 0) {\n      if (local_20 == (section_list *)0x0) {\n        return (section_list *)0x0;\n      }\n      local_20->used = 1;\n      return local_20;\n    }\n  }\n  psVar2 = (section_list *)xmalloc(0x24);\n  psVar2->pattern = name;\n  psVar2->context = context;\n  psVar2->used = 0;\n  *(undefined4 *)&psVar2->vma_val = 0;\n  *(undefined4 *)((int)&psVar2->vma_val + 4) = 0;\n  *(undefined4 *)&psVar2->lma_val = 0;\n  *(undefined4 *)((int)&psVar2->lma_val + 4) = 0;\n  psVar2->flags = 0;\n  psVar4 = psVar2;\n  psVar2->next = change_sections;\n  change_sections = psVar4;\n  return psVar2;\n}\n\n" comment (ERROR "section_list * __regparm3 find_section_list(char *name,bfd_boolean add,uint context)" (binary_expression "section_list * __regparm3 find_section_list(char *name,bfd_boolean add,uint context)" identifier * (ERROR "__regparm3" identifier) (call_expression "find_section_list(char *name,bfd_boolean add,uint context)" identifier (argument_list "(char *name,bfd_boolean add,uint context)" ( (binary_expression "char *name" identifier * identifier) , identifier (ERROR "add" identifier) , (ERROR "uint" identifier) identifier ))))) (compound_statement "{\n  int iVar1;\n  section_list *psVar2;\n  char *pcVar3;\n  section_list *psVar4;\n  section_list *local_20;\n  \n  local_20 = (section_list *)0x0;\n  psVar4 = change_sections;\n  if (change_sections == (section_list *)0x0) {\n    if (add == 0) {\n      return (section_list *)0x0;\n    }\n  }\n  else {\n    do {\n      while (add != 0) {\n        iVar1 = strcmp(psVar4->pattern,name);\n        if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }\nLAB_00016a7f:\n        psVar4 = psVar4->next;\n        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;\n      }\n      if ((psVar4->context & context) == 0) goto LAB_00016a7f;\n      pcVar3 = psVar4->pattern;\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,name,0);\n        if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,name,0);\n      if (iVar1 == 0 && local_20 == (section_list *)0x0) {\n        local_20 = psVar4;\n      }\n      psVar4 = psVar4->next;\n    } while (psVar4 != (section_list *)0x0);\nLAB_00016ac0:\n    if (add == 0) {\n      if (local_20 == (section_list *)0x0) {\n        return (section_list *)0x0;\n      }\n      local_20->used = 1;\n      return local_20;\n    }\n  }\n  psVar2 = (section_list *)xmalloc(0x24);\n  psVar2->pattern = name;\n  psVar2->context = context;\n  psVar2->used = 0;\n  *(undefined4 *)&psVar2->vma_val = 0;\n  *(undefined4 *)((int)&psVar2->vma_val + 4) = 0;\n  *(undefined4 *)&psVar2->lma_val = 0;\n  *(undefined4 *)((int)&psVar2->lma_val + 4) = 0;\n  psVar2->flags = 0;\n  psVar4 = psVar2;\n  psVar2->next = change_sections;\n  change_sections = psVar4;\n  return psVar2;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "section_list *psVar2;" type_identifier (pointer_declarator "*psVar2" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "section_list *psVar4;" type_identifier (pointer_declarator "*psVar4" * identifier) ;) (declaration "section_list *local_20;" type_identifier (pointer_declarator "*local_20" * identifier) ;) (expression_statement "local_20 = (section_list *)0x0;" (assignment_expression "local_20 = (section_list *)0x0" identifier = (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "psVar4 = change_sections;" (assignment_expression "psVar4 = change_sections" identifier = identifier) ;) (if_statement "if (change_sections == (section_list *)0x0) {\n    if (add == 0) {\n      return (section_list *)0x0;\n    }\n  }\n  else {\n    do {\n      while (add != 0) {\n        iVar1 = strcmp(psVar4->pattern,name);\n        if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }\nLAB_00016a7f:\n        psVar4 = psVar4->next;\n        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;\n      }\n      if ((psVar4->context & context) == 0) goto LAB_00016a7f;\n      pcVar3 = psVar4->pattern;\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,name,0);\n        if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,name,0);\n      if (iVar1 == 0 && local_20 == (section_list *)0x0) {\n        local_20 = psVar4;\n      }\n      psVar4 = psVar4->next;\n    } while (psVar4 != (section_list *)0x0);\nLAB_00016ac0:\n    if (add == 0) {\n      if (local_20 == (section_list *)0x0) {\n        return (section_list *)0x0;\n      }\n      local_20->used = 1;\n      return local_20;\n    }\n  }" if (parenthesized_expression "(change_sections == (section_list *)0x0)" ( (binary_expression "change_sections == (section_list *)0x0" identifier == (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (add == 0) {\n      return (section_list *)0x0;\n    }\n  }" { (if_statement "if (add == 0) {\n      return (section_list *)0x0;\n    }" if (parenthesized_expression "(add == 0)" ( (binary_expression "add == 0" identifier == number_literal) )) (compound_statement "{\n      return (section_list *)0x0;\n    }" { (return_statement "return (section_list *)0x0;" return (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) (else_clause "else {\n    do {\n      while (add != 0) {\n        iVar1 = strcmp(psVar4->pattern,name);\n        if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }\nLAB_00016a7f:\n        psVar4 = psVar4->next;\n        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;\n      }\n      if ((psVar4->context & context) == 0) goto LAB_00016a7f;\n      pcVar3 = psVar4->pattern;\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,name,0);\n        if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,name,0);\n      if (iVar1 == 0 && local_20 == (section_list *)0x0) {\n        local_20 = psVar4;\n      }\n      psVar4 = psVar4->next;\n    } while (psVar4 != (section_list *)0x0);\nLAB_00016ac0:\n    if (add == 0) {\n      if (local_20 == (section_list *)0x0) {\n        return (section_list *)0x0;\n      }\n      local_20->used = 1;\n      return local_20;\n    }\n  }" else (compound_statement "{\n    do {\n      while (add != 0) {\n        iVar1 = strcmp(psVar4->pattern,name);\n        if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }\nLAB_00016a7f:\n        psVar4 = psVar4->next;\n        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;\n      }\n      if ((psVar4->context & context) == 0) goto LAB_00016a7f;\n      pcVar3 = psVar4->pattern;\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,name,0);\n        if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,name,0);\n      if (iVar1 == 0 && local_20 == (section_list *)0x0) {\n        local_20 = psVar4;\n      }\n      psVar4 = psVar4->next;\n    } while (psVar4 != (section_list *)0x0);\nLAB_00016ac0:\n    if (add == 0) {\n      if (local_20 == (section_list *)0x0) {\n        return (section_list *)0x0;\n      }\n      local_20->used = 1;\n      return local_20;\n    }\n  }" { (do_statement "do {\n      while (add != 0) {\n        iVar1 = strcmp(psVar4->pattern,name);\n        if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }\nLAB_00016a7f:\n        psVar4 = psVar4->next;\n        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;\n      }\n      if ((psVar4->context & context) == 0) goto LAB_00016a7f;\n      pcVar3 = psVar4->pattern;\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,name,0);\n        if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,name,0);\n      if (iVar1 == 0 && local_20 == (section_list *)0x0) {\n        local_20 = psVar4;\n      }\n      psVar4 = psVar4->next;\n    } while (psVar4 != (section_list *)0x0);" do (compound_statement "{\n      while (add != 0) {\n        iVar1 = strcmp(psVar4->pattern,name);\n        if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }\nLAB_00016a7f:\n        psVar4 = psVar4->next;\n        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;\n      }\n      if ((psVar4->context & context) == 0) goto LAB_00016a7f;\n      pcVar3 = psVar4->pattern;\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,name,0);\n        if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,name,0);\n      if (iVar1 == 0 && local_20 == (section_list *)0x0) {\n        local_20 = psVar4;\n      }\n      psVar4 = psVar4->next;\n    }" { (while_statement "while (add != 0) {\n        iVar1 = strcmp(psVar4->pattern,name);\n        if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }\nLAB_00016a7f:\n        psVar4 = psVar4->next;\n        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;\n      }" while (parenthesized_expression "(add != 0)" ( (binary_expression "add != 0" identifier != number_literal) )) (compound_statement "{\n        iVar1 = strcmp(psVar4->pattern,name);\n        if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }\nLAB_00016a7f:\n        psVar4 = psVar4->next;\n        if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;\n      }" { (expression_statement "iVar1 = strcmp(psVar4->pattern,name);" (assignment_expression "iVar1 = strcmp(psVar4->pattern,name)" identifier = (call_expression "strcmp(psVar4->pattern,name)" identifier (argument_list "(psVar4->pattern,name)" ( (field_expression "psVar4->pattern" identifier -> field_identifier) , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          psVar2 = (section_list *)psVar4->context;\n          if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);\n                    /* WARNING: Subroutine does not return */\n          fatal(pcVar3,name);\n        }" { (expression_statement "psVar2 = (section_list *)psVar4->context;" (assignment_expression "psVar2 = (section_list *)psVar4->context" identifier = (cast_expression "(section_list *)psVar4->context" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "psVar4->context" identifier -> field_identifier))) ;) (if_statement "if (((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))) {\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }" if (parenthesized_expression "(((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0))))" ( (binary_expression "((((uint)psVar2 & 1) == 0) || ((context & 2) == 0)) &&\n             (((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))" (parenthesized_expression "((((uint)psVar2 & 1) == 0) || ((context & 2) == 0))" ( (binary_expression "(((uint)psVar2 & 1) == 0) || ((context & 2) == 0)" (parenthesized_expression "(((uint)psVar2 & 1) == 0)" ( (binary_expression "((uint)psVar2 & 1) == 0" (parenthesized_expression "((uint)psVar2 & 1)" ( (binary_expression "(uint)psVar2 & 1" (cast_expression "(uint)psVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((context & 2) == 0)" ( (binary_expression "(context & 2) == 0" (parenthesized_expression "(context & 2)" ( (binary_expression "context & 2" identifier & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "(((context & 1) == 0 || (((uint)psVar2 & 2) == 0)))" ( (parenthesized_expression "((context & 1) == 0 || (((uint)psVar2 & 2) == 0))" ( (binary_expression "(context & 1) == 0 || (((uint)psVar2 & 2) == 0)" (binary_expression "(context & 1) == 0" (parenthesized_expression "(context & 1)" ( (binary_expression "context & 1" identifier & number_literal) )) == number_literal) || (parenthesized_expression "(((uint)psVar2 & 2) == 0)" ( (binary_expression "((uint)psVar2 & 2) == 0" (parenthesized_expression "((uint)psVar2 & 2)" ( (binary_expression "(uint)psVar2 & 2" (cast_expression "(uint)psVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) )) ))) )) (compound_statement "{\n            if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }\n          }" { (if_statement "if (((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)) {\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }" if (parenthesized_expression "(((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc))" ( (binary_expression "((((uint)psVar2 & 4) == 0) || ((context & 8) == 0)) && ((context & 0xc) != 0xc)" (parenthesized_expression "((((uint)psVar2 & 4) == 0) || ((context & 8) == 0))" ( (binary_expression "(((uint)psVar2 & 4) == 0) || ((context & 8) == 0)" (parenthesized_expression "(((uint)psVar2 & 4) == 0)" ( (binary_expression "((uint)psVar2 & 4) == 0" (parenthesized_expression "((uint)psVar2 & 4)" ( (binary_expression "(uint)psVar2 & 4" (cast_expression "(uint)psVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((context & 8) == 0)" ( (binary_expression "(context & 8) == 0" (parenthesized_expression "(context & 8)" ( (binary_expression "context & 8" identifier & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "((context & 0xc) != 0xc)" ( (binary_expression "(context & 0xc) != 0xc" (parenthesized_expression "(context & 0xc)" ( (binary_expression "context & 0xc" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n              if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              psVar4 = psVar2;\n            }" { (if_statement "if (((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)) {\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }" if (parenthesized_expression "(((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30))" ( (binary_expression "((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)) &&\n                 ((context & 0x30) != 0x30)" (parenthesized_expression "((((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0))" ( (binary_expression "(((uint)psVar2 & 0x10) == 0) || ((context & 0x20) == 0)" (parenthesized_expression "(((uint)psVar2 & 0x10) == 0)" ( (binary_expression "((uint)psVar2 & 0x10) == 0" (parenthesized_expression "((uint)psVar2 & 0x10)" ( (binary_expression "(uint)psVar2 & 0x10" (cast_expression "(uint)psVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((context & 0x20) == 0)" ( (binary_expression "(context & 0x20) == 0" (parenthesized_expression "(context & 0x20)" ( (binary_expression "context & 0x20" identifier & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "((context & 0x30) != 0x30)" ( (binary_expression "(context & 0x30) != 0x30" (parenthesized_expression "(context & 0x30)" ( (binary_expression "context & 0x30" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                psVar4->context = (uint)psVar2 | context;\n                return psVar4;\n              }" { (expression_statement "psVar4->context = (uint)psVar2 | context;" (assignment_expression "psVar4->context = (uint)psVar2 | context" (field_expression "psVar4->context" identifier -> field_identifier) = (binary_expression "(uint)psVar2 | context" (cast_expression "(uint)psVar2" ( (type_descriptor "uint" type_identifier) ) identifier) | identifier)) ;) (return_statement "return psVar4;" return identifier ;) })) (expression_statement "pcVar3 = "error: %s both sets and alters LMA";" (assignment_expression "pcVar3 = "error: %s both sets and alters LMA"" identifier = (string_literal ""error: %s both sets and alters LMA"" " string_content ")) ;) (expression_statement "psVar4 = psVar2;" (assignment_expression "psVar4 = psVar2" identifier = identifier) ;) }) (else_clause "else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }" else (compound_statement "{\n              pcVar3 = "error: %s both sets and alters VMA";\n              psVar4 = (section_list *)add;\n            }" { (expression_statement "pcVar3 = "error: %s both sets and alters VMA";" (assignment_expression "pcVar3 = "error: %s both sets and alters VMA"" identifier = (string_literal ""error: %s both sets and alters VMA"" " string_content ")) ;) (expression_statement "psVar4 = (section_list *)add;" (assignment_expression "psVar4 = (section_list *)add" identifier = (cast_expression "(section_list *)add" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) }))) }) (else_clause "else {\n            pcVar3 = "error: %s both copied and removed";\n          }" else (compound_statement "{\n            pcVar3 = "error: %s both copied and removed";\n          }" { (expression_statement "pcVar3 = "error: %s both copied and removed";" (assignment_expression "pcVar3 = "error: %s both copied and removed"" identifier = (string_literal ""error: %s both copied and removed"" " string_content ")) ;) }))) (expression_statement "pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4);" (assignment_expression "pcVar3 = (char *)dcgettext(0,pcVar3,5,psVar4)" identifier = (cast_expression "(char *)dcgettext(0,pcVar3,5,psVar4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "dcgettext(0,pcVar3,5,psVar4)" identifier (argument_list "(0,pcVar3,5,psVar4)" ( number_literal , identifier , number_literal , identifier ))))) ;) comment (expression_statement "fatal(pcVar3,name);" (call_expression "fatal(pcVar3,name)" identifier (argument_list "(pcVar3,name)" ( identifier , identifier ))) ;) })) (labeled_statement "LAB_00016a7f:\n        psVar4 = psVar4->next;" statement_identifier : (expression_statement "psVar4 = psVar4->next;" (assignment_expression "psVar4 = psVar4->next" identifier = (field_expression "psVar4->next" identifier -> field_identifier)) ;)) (if_statement "if (psVar4 == (section_list *)0x0) goto LAB_00016ac0;" if (parenthesized_expression "(psVar4 == (section_list *)0x0)" ( (binary_expression "psVar4 == (section_list *)0x0" identifier == (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00016ac0;" goto statement_identifier ;)) })) (if_statement "if ((psVar4->context & context) == 0) goto LAB_00016a7f;" if (parenthesized_expression "((psVar4->context & context) == 0)" ( (binary_expression "(psVar4->context & context) == 0" (parenthesized_expression "(psVar4->context & context)" ( (binary_expression "psVar4->context & context" (field_expression "psVar4->context" identifier -> field_identifier) & identifier) )) == number_literal) )) (goto_statement "goto LAB_00016a7f;" goto statement_identifier ;)) (expression_statement "pcVar3 = psVar4->pattern;" (assignment_expression "pcVar3 = psVar4->pattern" identifier = (field_expression "psVar4->pattern" identifier -> field_identifier)) ;) (if_statement "if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,name,0);\n        if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }\n        goto LAB_00016a7f;\n      }" if (parenthesized_expression "(*pcVar3 == '!')" ( (binary_expression "*pcVar3 == '!'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'!'" ' character ')) )) (compound_statement "{\n        iVar1 = fnmatch(pcVar3 + 1,name,0);\n        if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }\n        goto LAB_00016a7f;\n      }" { (expression_statement "iVar1 = fnmatch(pcVar3 + 1,name,0);" (assignment_expression "iVar1 = fnmatch(pcVar3 + 1,name,0)" identifier = (call_expression "fnmatch(pcVar3 + 1,name,0)" identifier (argument_list "(pcVar3 + 1,name,0)" ( (binary_expression "pcVar3 + 1" identifier + number_literal) , identifier , number_literal )))) ;) (if_statement "if (iVar1 == 0) {\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          psVar4->used = 1;\n          return (section_list *)0x0;\n        }" { (expression_statement "psVar4->used = 1;" (assignment_expression "psVar4->used = 1" (field_expression "psVar4->used" identifier -> field_identifier) = number_literal) ;) (return_statement "return (section_list *)0x0;" return (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (goto_statement "goto LAB_00016a7f;" goto statement_identifier ;) })) (expression_statement "iVar1 = fnmatch(pcVar3,name,0);" (assignment_expression "iVar1 = fnmatch(pcVar3,name,0)" identifier = (call_expression "fnmatch(pcVar3,name,0)" identifier (argument_list "(pcVar3,name,0)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (iVar1 == 0 && local_20 == (section_list *)0x0) {\n        local_20 = psVar4;\n      }" if (parenthesized_expression "(iVar1 == 0 && local_20 == (section_list *)0x0)" ( (binary_expression "iVar1 == 0 && local_20 == (section_list *)0x0" (binary_expression "iVar1 == 0" identifier == number_literal) && (binary_expression "local_20 == (section_list *)0x0" identifier == (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n        local_20 = psVar4;\n      }" { (expression_statement "local_20 = psVar4;" (assignment_expression "local_20 = psVar4" identifier = identifier) ;) })) (expression_statement "psVar4 = psVar4->next;" (assignment_expression "psVar4 = psVar4->next" identifier = (field_expression "psVar4->next" identifier -> field_identifier)) ;) }) while (parenthesized_expression "(psVar4 != (section_list *)0x0)" ( (binary_expression "psVar4 != (section_list *)0x0" identifier != (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (labeled_statement "LAB_00016ac0:\n    if (add == 0) {\n      if (local_20 == (section_list *)0x0) {\n        return (section_list *)0x0;\n      }\n      local_20->used = 1;\n      return local_20;\n    }" statement_identifier : (if_statement "if (add == 0) {\n      if (local_20 == (section_list *)0x0) {\n        return (section_list *)0x0;\n      }\n      local_20->used = 1;\n      return local_20;\n    }" if (parenthesized_expression "(add == 0)" ( (binary_expression "add == 0" identifier == number_literal) )) (compound_statement "{\n      if (local_20 == (section_list *)0x0) {\n        return (section_list *)0x0;\n      }\n      local_20->used = 1;\n      return local_20;\n    }" { (if_statement "if (local_20 == (section_list *)0x0) {\n        return (section_list *)0x0;\n      }" if (parenthesized_expression "(local_20 == (section_list *)0x0)" ( (binary_expression "local_20 == (section_list *)0x0" identifier == (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return (section_list *)0x0;\n      }" { (return_statement "return (section_list *)0x0;" return (cast_expression "(section_list *)0x0" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "local_20->used = 1;" (assignment_expression "local_20->used = 1" (field_expression "local_20->used" identifier -> field_identifier) = number_literal) ;) (return_statement "return local_20;" return identifier ;) }))) }))) (expression_statement "psVar2 = (section_list *)xmalloc(0x24);" (assignment_expression "psVar2 = (section_list *)xmalloc(0x24)" identifier = (cast_expression "(section_list *)xmalloc(0x24)" ( (type_descriptor "section_list *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x24)" identifier (argument_list "(0x24)" ( number_literal ))))) ;) (expression_statement "psVar2->pattern = name;" (assignment_expression "psVar2->pattern = name" (field_expression "psVar2->pattern" identifier -> field_identifier) = identifier) ;) (expression_statement "psVar2->context = context;" (assignment_expression "psVar2->context = context" (field_expression "psVar2->context" identifier -> field_identifier) = identifier) ;) (expression_statement "psVar2->used = 0;" (assignment_expression "psVar2->used = 0" (field_expression "psVar2->used" identifier -> field_identifier) = number_literal) ;) (expression_statement "*(undefined4 *)&psVar2->vma_val = 0;" (assignment_expression "*(undefined4 *)&psVar2->vma_val = 0" (pointer_expression "*(undefined4 *)&psVar2->vma_val" * (cast_expression "(undefined4 *)&psVar2->vma_val" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar2->vma_val" & (field_expression "psVar2->vma_val" identifier -> field_identifier)))) = number_literal) ;) (expression_statement "*(undefined4 *)((int)&psVar2->vma_val + 4) = 0;" (assignment_expression "*(undefined4 *)((int)&psVar2->vma_val + 4) = 0" (pointer_expression "*(undefined4 *)((int)&psVar2->vma_val + 4)" * (cast_expression "(undefined4 *)((int)&psVar2->vma_val + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar2->vma_val + 4)" ( (binary_expression "(int)&psVar2->vma_val + 4" (cast_expression "(int)&psVar2->vma_val" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar2->vma_val" & (field_expression "psVar2->vma_val" identifier -> field_identifier))) + number_literal) )))) = number_literal) ;) (expression_statement "*(undefined4 *)&psVar2->lma_val = 0;" (assignment_expression "*(undefined4 *)&psVar2->lma_val = 0" (pointer_expression "*(undefined4 *)&psVar2->lma_val" * (cast_expression "(undefined4 *)&psVar2->lma_val" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&psVar2->lma_val" & (field_expression "psVar2->lma_val" identifier -> field_identifier)))) = number_literal) ;) (expression_statement "*(undefined4 *)((int)&psVar2->lma_val + 4) = 0;" (assignment_expression "*(undefined4 *)((int)&psVar2->lma_val + 4) = 0" (pointer_expression "*(undefined4 *)((int)&psVar2->lma_val + 4)" * (cast_expression "(undefined4 *)((int)&psVar2->lma_val + 4)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((int)&psVar2->lma_val + 4)" ( (binary_expression "(int)&psVar2->lma_val + 4" (cast_expression "(int)&psVar2->lma_val" ( (type_descriptor "int" primitive_type) ) (pointer_expression "&psVar2->lma_val" & (field_expression "psVar2->lma_val" identifier -> field_identifier))) + number_literal) )))) = number_literal) ;) (expression_statement "psVar2->flags = 0;" (assignment_expression "psVar2->flags = 0" (field_expression "psVar2->flags" identifier -> field_identifier) = number_literal) ;) (expression_statement "psVar4 = psVar2;" (assignment_expression "psVar4 = psVar2" identifier = identifier) ;) (expression_statement "psVar2->next = change_sections;" (assignment_expression "psVar2->next = change_sections" (field_expression "psVar2->next" identifier -> field_identifier) = identifier) ;) (expression_statement "change_sections = psVar4;" (assignment_expression "change_sections = psVar4" identifier = identifier) ;) (return_statement "return psVar2;" return identifier ;) }))
(translation_unit "int * __regparm3 FUN_00016a30(char *param_1,int *param_2,uint param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  char *pcVar3;\n  undefined4 uVar4;\n  int *piVar5;\n  int *local_20;\n  \n  local_20 = (int *)0x0;\n  piVar5 = DAT_00040ba8;\n  if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }\n  piVar2 = (int *)xmalloc(0x24);\n  piVar2[1] = (int)param_1;\n  piVar2[3] = param_3;\n  piVar2[2] = 0;\n  piVar2[4] = 0;\n  piVar2[5] = 0;\n  piVar2[6] = 0;\n  piVar2[7] = 0;\n  piVar2[8] = 0;\n  piVar5 = piVar2;\n  *piVar2 = (int)DAT_00040ba8;\n  DAT_00040ba8 = piVar5;\n  return piVar2;\n}\n\n" (function_definition "int * __regparm3 FUN_00016a30(char *param_1,int *param_2,uint param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  char *pcVar3;\n  undefined4 uVar4;\n  int *piVar5;\n  int *local_20;\n  \n  local_20 = (int *)0x0;\n  piVar5 = DAT_00040ba8;\n  if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }\n  piVar2 = (int *)xmalloc(0x24);\n  piVar2[1] = (int)param_1;\n  piVar2[3] = param_3;\n  piVar2[2] = 0;\n  piVar2[4] = 0;\n  piVar2[5] = 0;\n  piVar2[6] = 0;\n  piVar2[7] = 0;\n  piVar2[8] = 0;\n  piVar5 = piVar2;\n  *piVar2 = (int)DAT_00040ba8;\n  DAT_00040ba8 = piVar5;\n  return piVar2;\n}" primitive_type (pointer_declarator "* __regparm3 FUN_00016a30(char *param_1,int *param_2,uint param_3)" * (ERROR "__regparm3" identifier) (function_declarator "FUN_00016a30(char *param_1,int *param_2,uint param_3)" identifier (parameter_list "(char *param_1,int *param_2,uint param_3)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint param_3" type_identifier identifier) )))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  char *pcVar3;\n  undefined4 uVar4;\n  int *piVar5;\n  int *local_20;\n  \n  local_20 = (int *)0x0;\n  piVar5 = DAT_00040ba8;\n  if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }\n  piVar2 = (int *)xmalloc(0x24);\n  piVar2[1] = (int)param_1;\n  piVar2[3] = param_3;\n  piVar2[2] = 0;\n  piVar2[4] = 0;\n  piVar2[5] = 0;\n  piVar2[6] = 0;\n  piVar2[7] = 0;\n  piVar2[8] = 0;\n  piVar5 = piVar2;\n  *piVar2 = (int)DAT_00040ba8;\n  DAT_00040ba8 = piVar5;\n  return piVar2;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "int *piVar2;" primitive_type (pointer_declarator "*piVar2" * identifier) ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "undefined4 uVar4;" type_identifier identifier ;) (declaration "int *piVar5;" primitive_type (pointer_declarator "*piVar5" * identifier) ;) (declaration "int *local_20;" primitive_type (pointer_declarator "*local_20" * identifier) ;) (expression_statement "local_20 = (int *)0x0;" (assignment_expression "local_20 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "piVar5 = DAT_00040ba8;" (assignment_expression "piVar5 = DAT_00040ba8" identifier = identifier) ;) (if_statement "if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }" if (parenthesized_expression "(DAT_00040ba8 == (int *)0x0)" ( (binary_expression "DAT_00040ba8 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }" { (if_statement "if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return (int *)0x0;\n    }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) }) (else_clause "else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }" else (compound_statement "{\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }" { (do_statement "do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);" do (compound_statement "{\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    }" { (while_statement "while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }" while (parenthesized_expression "(param_2 != (int *)0x0)" ( (binary_expression "param_2 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }" { (expression_statement "iVar1 = strcmp((char *)piVar5[1],param_1);" (assignment_expression "iVar1 = strcmp((char *)piVar5[1],param_1)" identifier = (call_expression "strcmp((char *)piVar5[1],param_1)" identifier (argument_list "((char *)piVar5[1],param_1)" ( (cast_expression "(char *)piVar5[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar5[1]" identifier [ number_literal ])) , identifier )))) ;) (if_statement "if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }" { (expression_statement "piVar2 = (int *)piVar5[3];" (assignment_expression "piVar2 = (int *)piVar5[3]" identifier = (cast_expression "(int *)piVar5[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar5[3]" identifier [ number_literal ]))) ;) (if_statement "if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }" if (parenthesized_expression "(((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0))))" ( (binary_expression "((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))" (parenthesized_expression "((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0))" ( (binary_expression "(((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)" (parenthesized_expression "(((uint)piVar2 & 1) == 0)" ( (binary_expression "((uint)piVar2 & 1) == 0" (parenthesized_expression "((uint)piVar2 & 1)" ( (binary_expression "(uint)piVar2 & 1" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_3 & 2) == 0)" ( (binary_expression "(param_3 & 2) == 0" (parenthesized_expression "(param_3 & 2)" ( (binary_expression "param_3 & 2" identifier & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "(((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))" ( (parenthesized_expression "((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0))" ( (binary_expression "(param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)" (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" ( (binary_expression "param_3 & 1" identifier & number_literal) )) == number_literal) || (parenthesized_expression "(((uint)piVar2 & 2) == 0)" ( (binary_expression "((uint)piVar2 & 2) == 0" (parenthesized_expression "((uint)piVar2 & 2)" ( (binary_expression "(uint)piVar2 & 2" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) ))) )) ))) )) (compound_statement "{\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }" { (if_statement "if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }" if (parenthesized_expression "(((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc))" ( (binary_expression "((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)" (parenthesized_expression "((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0))" ( (binary_expression "(((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)" (parenthesized_expression "(((uint)piVar2 & 4) == 0)" ( (binary_expression "((uint)piVar2 & 4) == 0" (parenthesized_expression "((uint)piVar2 & 4)" ( (binary_expression "(uint)piVar2 & 4" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_3 & 8) == 0)" ( (binary_expression "(param_3 & 8) == 0" (parenthesized_expression "(param_3 & 8)" ( (binary_expression "param_3 & 8" identifier & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "((param_3 & 0xc) != 0xc)" ( (binary_expression "(param_3 & 0xc) != 0xc" (parenthesized_expression "(param_3 & 0xc)" ( (binary_expression "param_3 & 0xc" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }" { (if_statement "if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }" if (parenthesized_expression "(((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30))" ( (binary_expression "((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)" (parenthesized_expression "((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0))" ( (binary_expression "(((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)" (parenthesized_expression "(((uint)piVar2 & 0x10) == 0)" ( (binary_expression "((uint)piVar2 & 0x10) == 0" (parenthesized_expression "((uint)piVar2 & 0x10)" ( (binary_expression "(uint)piVar2 & 0x10" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )) == number_literal) )) || (parenthesized_expression "((param_3 & 0x20) == 0)" ( (binary_expression "(param_3 & 0x20) == 0" (parenthesized_expression "(param_3 & 0x20)" ( (binary_expression "param_3 & 0x20" identifier & number_literal) )) == number_literal) ))) )) && (parenthesized_expression "((param_3 & 0x30) != 0x30)" ( (binary_expression "(param_3 & 0x30) != 0x30" (parenthesized_expression "(param_3 & 0x30)" ( (binary_expression "param_3 & 0x30" identifier & number_literal) )) != number_literal) ))) )) (compound_statement "{\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }" { (expression_statement "piVar5[3] = (uint)piVar2 | param_3;" (assignment_expression "piVar5[3] = (uint)piVar2 | param_3" (subscript_expression "piVar5[3]" identifier [ number_literal ]) = (binary_expression "(uint)piVar2 | param_3" (cast_expression "(uint)piVar2" ( (type_descriptor "uint" type_identifier) ) identifier) | identifier)) ;) (return_statement "return piVar5;" return identifier ;) })) (expression_statement "pcVar3 = "error: %s both sets and alters LMA";" (assignment_expression "pcVar3 = "error: %s both sets and alters LMA"" identifier = (string_literal ""error: %s both sets and alters LMA"" " string_content ")) ;) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" identifier = identifier) ;) }) (else_clause "else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }" else (compound_statement "{\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }" { (expression_statement "pcVar3 = "error: %s both sets and alters VMA";" (assignment_expression "pcVar3 = "error: %s both sets and alters VMA"" identifier = (string_literal ""error: %s both sets and alters VMA"" " string_content ")) ;) (expression_statement "piVar5 = param_2;" (assignment_expression "piVar5 = param_2" identifier = identifier) ;) }))) }) (else_clause "else {\n            pcVar3 = "error: %s both copied and removed";\n          }" else (compound_statement "{\n            pcVar3 = "error: %s both copied and removed";\n          }" { (expression_statement "pcVar3 = "error: %s both copied and removed";" (assignment_expression "pcVar3 = "error: %s both copied and removed"" identifier = (string_literal ""error: %s both copied and removed"" " string_content ")) ;) }))) (expression_statement "uVar4 = dcgettext(0,pcVar3,5,piVar5);" (assignment_expression "uVar4 = dcgettext(0,pcVar3,5,piVar5)" identifier = (call_expression "dcgettext(0,pcVar3,5,piVar5)" identifier (argument_list "(0,pcVar3,5,piVar5)" ( number_literal , identifier , number_literal , identifier )))) ;) (expression_statement "FUN_0002c8e0(uVar4,param_1);" (call_expression "FUN_0002c8e0(uVar4,param_1)" identifier (argument_list "(uVar4,param_1)" ( identifier , identifier ))) ;) })) (labeled_statement "LAB_00016a7f:\n        piVar5 = (int *)*piVar5;" statement_identifier : (expression_statement "piVar5 = (int *)*piVar5;" (assignment_expression "piVar5 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;)) (if_statement "if (piVar5 == (int *)0x0) goto LAB_00016ac0;" if (parenthesized_expression "(piVar5 == (int *)0x0)" ( (binary_expression "piVar5 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_00016ac0;" goto statement_identifier ;)) })) (if_statement "if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;" if (parenthesized_expression "((piVar5[3] & param_3) == 0)" ( (binary_expression "(piVar5[3] & param_3) == 0" (parenthesized_expression "(piVar5[3] & param_3)" ( (binary_expression "piVar5[3] & param_3" (subscript_expression "piVar5[3]" identifier [ number_literal ]) & identifier) )) == number_literal) )) (goto_statement "goto LAB_00016a7f;" goto statement_identifier ;)) (expression_statement "pcVar3 = (char *)piVar5[1];" (assignment_expression "pcVar3 = (char *)piVar5[1]" identifier = (cast_expression "(char *)piVar5[1]" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "piVar5[1]" identifier [ number_literal ]))) ;) (if_statement "if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }" if (parenthesized_expression "(*pcVar3 == '!')" ( (binary_expression "*pcVar3 == '!'" (pointer_expression "*pcVar3" * identifier) == (char_literal "'!'" ' character ')) )) (compound_statement "{\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }" { (expression_statement "iVar1 = fnmatch(pcVar3 + 1,param_1,0);" (assignment_expression "iVar1 = fnmatch(pcVar3 + 1,param_1,0)" identifier = (call_expression "fnmatch(pcVar3 + 1,param_1,0)" identifier (argument_list "(pcVar3 + 1,param_1,0)" ( (binary_expression "pcVar3 + 1" identifier + number_literal) , identifier , number_literal )))) ;) (if_statement "if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }" if (parenthesized_expression "(iVar1 == 0)" ( (binary_expression "iVar1 == 0" identifier == number_literal) )) (compound_statement "{\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }" { (expression_statement "piVar5[2] = 1;" (assignment_expression "piVar5[2] = 1" (subscript_expression "piVar5[2]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (goto_statement "goto LAB_00016a7f;" goto statement_identifier ;) })) (expression_statement "iVar1 = fnmatch(pcVar3,param_1,0);" (assignment_expression "iVar1 = fnmatch(pcVar3,param_1,0)" identifier = (call_expression "fnmatch(pcVar3,param_1,0)" identifier (argument_list "(pcVar3,param_1,0)" ( identifier , identifier , number_literal )))) ;) (if_statement "if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }" if (parenthesized_expression "(iVar1 == 0 && local_20 == (int *)0x0)" ( (binary_expression "iVar1 == 0 && local_20 == (int *)0x0" (binary_expression "iVar1 == 0" identifier == number_literal) && (binary_expression "local_20 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal))) )) (compound_statement "{\n        local_20 = piVar5;\n      }" { (expression_statement "local_20 = piVar5;" (assignment_expression "local_20 = piVar5" identifier = identifier) ;) })) (expression_statement "piVar5 = (int *)*piVar5;" (assignment_expression "piVar5 = (int *)*piVar5" identifier = (cast_expression "(int *)*piVar5" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*piVar5" * identifier))) ;) }) while (parenthesized_expression "(piVar5 != (int *)0x0)" ( (binary_expression "piVar5 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (labeled_statement "LAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }" statement_identifier : (if_statement "if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }" if (parenthesized_expression "(param_2 == (int *)0x0)" ( (binary_expression "param_2 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }" { (if_statement "if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }" if (parenthesized_expression "(local_20 == (int *)0x0)" ( (binary_expression "local_20 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return (int *)0x0;\n      }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (expression_statement "local_20[2] = 1;" (assignment_expression "local_20[2] = 1" (subscript_expression "local_20[2]" identifier [ number_literal ]) = number_literal) ;) (return_statement "return local_20;" return identifier ;) }))) }))) (expression_statement "piVar2 = (int *)xmalloc(0x24);" (assignment_expression "piVar2 = (int *)xmalloc(0x24)" identifier = (cast_expression "(int *)xmalloc(0x24)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc(0x24)" identifier (argument_list "(0x24)" ( number_literal ))))) ;) (expression_statement "piVar2[1] = (int)param_1;" (assignment_expression "piVar2[1] = (int)param_1" (subscript_expression "piVar2[1]" identifier [ number_literal ]) = (cast_expression "(int)param_1" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "piVar2[3] = param_3;" (assignment_expression "piVar2[3] = param_3" (subscript_expression "piVar2[3]" identifier [ number_literal ]) = identifier) ;) (expression_statement "piVar2[2] = 0;" (assignment_expression "piVar2[2] = 0" (subscript_expression "piVar2[2]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[4] = 0;" (assignment_expression "piVar2[4] = 0" (subscript_expression "piVar2[4]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[5] = 0;" (assignment_expression "piVar2[5] = 0" (subscript_expression "piVar2[5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[6] = 0;" (assignment_expression "piVar2[6] = 0" (subscript_expression "piVar2[6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[7] = 0;" (assignment_expression "piVar2[7] = 0" (subscript_expression "piVar2[7]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar2[8] = 0;" (assignment_expression "piVar2[8] = 0" (subscript_expression "piVar2[8]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" identifier = identifier) ;) (expression_statement "*piVar2 = (int)DAT_00040ba8;" (assignment_expression "*piVar2 = (int)DAT_00040ba8" (pointer_expression "*piVar2" * identifier) = (cast_expression "(int)DAT_00040ba8" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "DAT_00040ba8 = piVar5;" (assignment_expression "DAT_00040ba8 = piVar5" identifier = identifier) ;) (return_statement "return piVar2;" return identifier ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) }) (else_clause else (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ])) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) == LIT) ))) )) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) == LIT) )) || (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) == LIT) ))) )) && (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) ))) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) | IDENT)) ;) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( LIT , IDENT , LIT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & IDENT) )) == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + LIT) , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , LIT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT == LIT) && (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (return_statement return IDENT ;) }))) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (return_statement return IDENT ;) })))
(function_definition "int * __regparm3 FUN_00016a30(char *param_1,int *param_2,uint param_3)\n\n{\n  int iVar1;\n  int *piVar2;\n  char *pcVar3;\n  undefined4 uVar4;\n  int *piVar5;\n  int *local_20;\n  \n  local_20 = (int *)0x0;\n  piVar5 = DAT_00040ba8;\n  if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }\n  piVar2 = (int *)xmalloc(0x24);\n  piVar2[1] = (int)param_1;\n  piVar2[3] = param_3;\n  piVar2[2] = 0;\n  piVar2[4] = 0;\n  piVar2[5] = 0;\n  piVar2[6] = 0;\n  piVar2[7] = 0;\n  piVar2[8] = 0;\n  piVar5 = piVar2;\n  *piVar2 = (int)DAT_00040ba8;\n  DAT_00040ba8 = piVar5;\n  return piVar2;\n}" (primitive_type "int") (pointer_declarator "* __regparm3 FUN_00016a30(char *param_1,int *param_2,uint param_3)" (* "*") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00016a30(char *param_1,int *param_2,uint param_3)" (identifier "FUN_00016a30") (parameter_list "(char *param_1,int *param_2,uint param_3)" (( "(") (parameter_declaration "char *param_1" (primitive_type "char") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int *param_2" (primitive_type "int") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint param_3" (type_identifier "uint") (identifier "param_3")) () ")")))) (compound_statement "{\n  int iVar1;\n  int *piVar2;\n  char *pcVar3;\n  undefined4 uVar4;\n  int *piVar5;\n  int *local_20;\n  \n  local_20 = (int *)0x0;\n  piVar5 = DAT_00040ba8;\n  if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }\n  piVar2 = (int *)xmalloc(0x24);\n  piVar2[1] = (int)param_1;\n  piVar2[3] = param_3;\n  piVar2[2] = 0;\n  piVar2[4] = 0;\n  piVar2[5] = 0;\n  piVar2[6] = 0;\n  piVar2[7] = 0;\n  piVar2[8] = 0;\n  piVar5 = piVar2;\n  *piVar2 = (int)DAT_00040ba8;\n  DAT_00040ba8 = piVar5;\n  return piVar2;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "int *piVar2;" (primitive_type "int") (pointer_declarator "*piVar2" (* "*") (identifier "piVar2")) (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "undefined4 uVar4;" (type_identifier "undefined4") (identifier "uVar4") (; ";")) (declaration "int *piVar5;" (primitive_type "int") (pointer_declarator "*piVar5" (* "*") (identifier "piVar5")) (; ";")) (declaration "int *local_20;" (primitive_type "int") (pointer_declarator "*local_20" (* "*") (identifier "local_20")) (; ";")) (expression_statement "local_20 = (int *)0x0;" (assignment_expression "local_20 = (int *)0x0" (identifier "local_20") (= "=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "piVar5 = DAT_00040ba8;" (assignment_expression "piVar5 = DAT_00040ba8" (identifier "piVar5") (= "=") (identifier "DAT_00040ba8")) (; ";")) (if_statement "if (DAT_00040ba8 == (int *)0x0) {\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }\n  else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }" (if "if") (parenthesized_expression "(DAT_00040ba8 == (int *)0x0)" (( "(") (binary_expression "DAT_00040ba8 == (int *)0x0" (identifier "DAT_00040ba8") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }\n  }" ({ "{") (if_statement "if (param_2 == (int *)0x0) {\n      return (int *)0x0;\n    }" (if "if") (parenthesized_expression "(param_2 == (int *)0x0)" (( "(") (binary_expression "param_2 == (int *)0x0" (identifier "param_2") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return (int *)0x0;\n    }" ({ "{") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }" (else "else") (compound_statement "{\n    do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);\nLAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }\n  }" ({ "{") (do_statement "do {\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    } while (piVar5 != (int *)0x0);" (do "do") (compound_statement "{\n      while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }\n      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;\n      pcVar3 = (char *)piVar5[1];\n      if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }\n      iVar1 = fnmatch(pcVar3,param_1,0);\n      if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }\n      piVar5 = (int *)*piVar5;\n    }" ({ "{") (while_statement "while (param_2 != (int *)0x0) {\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }" (while "while") (parenthesized_expression "(param_2 != (int *)0x0)" (( "(") (binary_expression "param_2 != (int *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        iVar1 = strcmp((char *)piVar5[1],param_1);\n        if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }\nLAB_00016a7f:\n        piVar5 = (int *)*piVar5;\n        if (piVar5 == (int *)0x0) goto LAB_00016ac0;\n      }" ({ "{") (expression_statement "iVar1 = strcmp((char *)piVar5[1],param_1);" (assignment_expression "iVar1 = strcmp((char *)piVar5[1],param_1)" (identifier "iVar1") (= "=") (call_expression "strcmp((char *)piVar5[1],param_1)" (identifier "strcmp") (argument_list "((char *)piVar5[1],param_1)" (( "(") (cast_expression "(char *)piVar5[1]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar5[1]" (identifier "piVar5") ([ "[") (number_literal "1") (] "]"))) (, ",") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          piVar2 = (int *)piVar5[3];\n          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }\n          uVar4 = dcgettext(0,pcVar3,5,piVar5);\n                    \n          FUN_0002c8e0(uVar4,param_1);\n        }" ({ "{") (expression_statement "piVar2 = (int *)piVar5[3];" (assignment_expression "piVar2 = (int *)piVar5[3]" (identifier "piVar2") (= "=") (cast_expression "(int *)piVar5[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar5[3]" (identifier "piVar5") ([ "[") (number_literal "3") (] "]")))) (; ";")) (if_statement "if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }\n          else {\n            pcVar3 = "error: %s both copied and removed";\n          }" (if "if") (parenthesized_expression "(((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0))))" (( "(") (binary_expression "((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&\n             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))" (parenthesized_expression "((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0))" (( "(") (binary_expression "(((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)" (parenthesized_expression "(((uint)piVar2 & 1) == 0)" (( "(") (binary_expression "((uint)piVar2 & 1) == 0" (parenthesized_expression "((uint)piVar2 & 1)" (( "(") (binary_expression "(uint)piVar2 & 1" (cast_expression "(uint)piVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar2")) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((param_3 & 2) == 0)" (( "(") (binary_expression "(param_3 & 2) == 0" (parenthesized_expression "(param_3 & 2)" (( "(") (binary_expression "param_3 & 2" (identifier "param_3") (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))" (( "(") (parenthesized_expression "((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0))" (( "(") (binary_expression "(param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)" (binary_expression "(param_3 & 1) == 0" (parenthesized_expression "(param_3 & 1)" (( "(") (binary_expression "param_3 & 1" (identifier "param_3") (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) (|| "||") (parenthesized_expression "(((uint)piVar2 & 2) == 0)" (( "(") (binary_expression "((uint)piVar2 & 2) == 0" (parenthesized_expression "((uint)piVar2 & 2)" (( "(") (binary_expression "(uint)piVar2 & 2" (cast_expression "(uint)piVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar2")) (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }\n          }" ({ "{") (if_statement "if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }\n            else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }" (if "if") (parenthesized_expression "(((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc))" (( "(") (binary_expression "((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)" (parenthesized_expression "((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0))" (( "(") (binary_expression "(((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)" (parenthesized_expression "(((uint)piVar2 & 4) == 0)" (( "(") (binary_expression "((uint)piVar2 & 4) == 0" (parenthesized_expression "((uint)piVar2 & 4)" (( "(") (binary_expression "(uint)piVar2 & 4" (cast_expression "(uint)piVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar2")) (& "&") (number_literal "4")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((param_3 & 8) == 0)" (( "(") (binary_expression "(param_3 & 8) == 0" (parenthesized_expression "(param_3 & 8)" (( "(") (binary_expression "param_3 & 8" (identifier "param_3") (& "&") (number_literal "8")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((param_3 & 0xc) != 0xc)" (( "(") (binary_expression "(param_3 & 0xc) != 0xc" (parenthesized_expression "(param_3 & 0xc)" (( "(") (binary_expression "param_3 & 0xc" (identifier "param_3") (& "&") (number_literal "0xc")) () ")")) (!= "!=") (number_literal "0xc")) () ")"))) () ")")) (compound_statement "{\n              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }\n              pcVar3 = "error: %s both sets and alters LMA";\n              piVar5 = piVar2;\n            }" ({ "{") (if_statement "if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)) {\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }" (if "if") (parenthesized_expression "(((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30))" (( "(") (binary_expression "((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&\n                 ((param_3 & 0x30) != 0x30)" (parenthesized_expression "((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0))" (( "(") (binary_expression "(((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)" (parenthesized_expression "(((uint)piVar2 & 0x10) == 0)" (( "(") (binary_expression "((uint)piVar2 & 0x10) == 0" (parenthesized_expression "((uint)piVar2 & 0x10)" (( "(") (binary_expression "(uint)piVar2 & 0x10" (cast_expression "(uint)piVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar2")) (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "((param_3 & 0x20) == 0)" (( "(") (binary_expression "(param_3 & 0x20) == 0" (parenthesized_expression "(param_3 & 0x20)" (( "(") (binary_expression "param_3 & 0x20" (identifier "param_3") (& "&") (number_literal "0x20")) () ")")) (== "==") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((param_3 & 0x30) != 0x30)" (( "(") (binary_expression "(param_3 & 0x30) != 0x30" (parenthesized_expression "(param_3 & 0x30)" (( "(") (binary_expression "param_3 & 0x30" (identifier "param_3") (& "&") (number_literal "0x30")) () ")")) (!= "!=") (number_literal "0x30")) () ")"))) () ")")) (compound_statement "{\n                piVar5[3] = (uint)piVar2 | param_3;\n                return piVar5;\n              }" ({ "{") (expression_statement "piVar5[3] = (uint)piVar2 | param_3;" (assignment_expression "piVar5[3] = (uint)piVar2 | param_3" (subscript_expression "piVar5[3]" (identifier "piVar5") ([ "[") (number_literal "3") (] "]")) (= "=") (binary_expression "(uint)piVar2 | param_3" (cast_expression "(uint)piVar2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar2")) (| "|") (identifier "param_3"))) (; ";")) (return_statement "return piVar5;" (return "return") (identifier "piVar5") (; ";")) (} "}"))) (expression_statement "pcVar3 = "error: %s both sets and alters LMA";" (assignment_expression "pcVar3 = "error: %s both sets and alters LMA"" (identifier "pcVar3") (= "=") (string_literal ""error: %s both sets and alters LMA"" (" """) (string_content "error: %s both sets and alters LMA") (" """))) (; ";")) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" (identifier "piVar5") (= "=") (identifier "piVar2")) (; ";")) (} "}")) (else_clause "else {\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }" (else "else") (compound_statement "{\n              pcVar3 = "error: %s both sets and alters VMA";\n              piVar5 = param_2;\n            }" ({ "{") (expression_statement "pcVar3 = "error: %s both sets and alters VMA";" (assignment_expression "pcVar3 = "error: %s both sets and alters VMA"" (identifier "pcVar3") (= "=") (string_literal ""error: %s both sets and alters VMA"" (" """) (string_content "error: %s both sets and alters VMA") (" """))) (; ";")) (expression_statement "piVar5 = param_2;" (assignment_expression "piVar5 = param_2" (identifier "piVar5") (= "=") (identifier "param_2")) (; ";")) (} "}")))) (} "}")) (else_clause "else {\n            pcVar3 = "error: %s both copied and removed";\n          }" (else "else") (compound_statement "{\n            pcVar3 = "error: %s both copied and removed";\n          }" ({ "{") (expression_statement "pcVar3 = "error: %s both copied and removed";" (assignment_expression "pcVar3 = "error: %s both copied and removed"" (identifier "pcVar3") (= "=") (string_literal ""error: %s both copied and removed"" (" """) (string_content "error: %s both copied and removed") (" """))) (; ";")) (} "}")))) (expression_statement "uVar4 = dcgettext(0,pcVar3,5,piVar5);" (assignment_expression "uVar4 = dcgettext(0,pcVar3,5,piVar5)" (identifier "uVar4") (= "=") (call_expression "dcgettext(0,pcVar3,5,piVar5)" (identifier "dcgettext") (argument_list "(0,pcVar3,5,piVar5)" (( "(") (number_literal "0") (, ",") (identifier "pcVar3") (, ",") (number_literal "5") (, ",") (identifier "piVar5") () ")")))) (; ";")) (expression_statement "FUN_0002c8e0(uVar4,param_1);" (call_expression "FUN_0002c8e0(uVar4,param_1)" (identifier "FUN_0002c8e0") (argument_list "(uVar4,param_1)" (( "(") (identifier "uVar4") (, ",") (identifier "param_1") () ")"))) (; ";")) (} "}"))) (labeled_statement "LAB_00016a7f:\n        piVar5 = (int *)*piVar5;" (statement_identifier "LAB_00016a7f") (: ":") (expression_statement "piVar5 = (int *)*piVar5;" (assignment_expression "piVar5 = (int *)*piVar5" (identifier "piVar5") (= "=") (cast_expression "(int *)*piVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar5" (* "*") (identifier "piVar5")))) (; ";"))) (if_statement "if (piVar5 == (int *)0x0) goto LAB_00016ac0;" (if "if") (parenthesized_expression "(piVar5 == (int *)0x0)" (( "(") (binary_expression "piVar5 == (int *)0x0" (identifier "piVar5") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_00016ac0;" (goto "goto") (statement_identifier "LAB_00016ac0") (; ";"))) (} "}"))) (if_statement "if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;" (if "if") (parenthesized_expression "((piVar5[3] & param_3) == 0)" (( "(") (binary_expression "(piVar5[3] & param_3) == 0" (parenthesized_expression "(piVar5[3] & param_3)" (( "(") (binary_expression "piVar5[3] & param_3" (subscript_expression "piVar5[3]" (identifier "piVar5") ([ "[") (number_literal "3") (] "]")) (& "&") (identifier "param_3")) () ")")) (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00016a7f;" (goto "goto") (statement_identifier "LAB_00016a7f") (; ";"))) (expression_statement "pcVar3 = (char *)piVar5[1];" (assignment_expression "pcVar3 = (char *)piVar5[1]" (identifier "pcVar3") (= "=") (cast_expression "(char *)piVar5[1]" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "piVar5[1]" (identifier "piVar5") ([ "[") (number_literal "1") (] "]")))) (; ";")) (if_statement "if (*pcVar3 == '!') {\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }" (if "if") (parenthesized_expression "(*pcVar3 == '!')" (( "(") (binary_expression "*pcVar3 == '!'" (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3")) (== "==") (char_literal "'!'" (' "'") (character "!") (' "'"))) () ")")) (compound_statement "{\n        iVar1 = fnmatch(pcVar3 + 1,param_1,0);\n        if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }\n        goto LAB_00016a7f;\n      }" ({ "{") (expression_statement "iVar1 = fnmatch(pcVar3 + 1,param_1,0);" (assignment_expression "iVar1 = fnmatch(pcVar3 + 1,param_1,0)" (identifier "iVar1") (= "=") (call_expression "fnmatch(pcVar3 + 1,param_1,0)" (identifier "fnmatch") (argument_list "(pcVar3 + 1,param_1,0)" (( "(") (binary_expression "pcVar3 + 1" (identifier "pcVar3") (+ "+") (number_literal "1")) (, ",") (identifier "param_1") (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (iVar1 == 0) {\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }" (if "if") (parenthesized_expression "(iVar1 == 0)" (( "(") (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          piVar5[2] = 1;\n          return (int *)0x0;\n        }" ({ "{") (expression_statement "piVar5[2] = 1;" (assignment_expression "piVar5[2] = 1" (subscript_expression "piVar5[2]" (identifier "piVar5") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "1")) (; ";")) (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (goto_statement "goto LAB_00016a7f;" (goto "goto") (statement_identifier "LAB_00016a7f") (; ";")) (} "}"))) (expression_statement "iVar1 = fnmatch(pcVar3,param_1,0);" (assignment_expression "iVar1 = fnmatch(pcVar3,param_1,0)" (identifier "iVar1") (= "=") (call_expression "fnmatch(pcVar3,param_1,0)" (identifier "fnmatch") (argument_list "(pcVar3,param_1,0)" (( "(") (identifier "pcVar3") (, ",") (identifier "param_1") (, ",") (number_literal "0") () ")")))) (; ";")) (if_statement "if (iVar1 == 0 && local_20 == (int *)0x0) {\n        local_20 = piVar5;\n      }" (if "if") (parenthesized_expression "(iVar1 == 0 && local_20 == (int *)0x0)" (( "(") (binary_expression "iVar1 == 0 && local_20 == (int *)0x0" (binary_expression "iVar1 == 0" (identifier "iVar1") (== "==") (number_literal "0")) (&& "&&") (binary_expression "local_20 == (int *)0x0" (identifier "local_20") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")")) (compound_statement "{\n        local_20 = piVar5;\n      }" ({ "{") (expression_statement "local_20 = piVar5;" (assignment_expression "local_20 = piVar5" (identifier "local_20") (= "=") (identifier "piVar5")) (; ";")) (} "}"))) (expression_statement "piVar5 = (int *)*piVar5;" (assignment_expression "piVar5 = (int *)*piVar5" (identifier "piVar5") (= "=") (cast_expression "(int *)*piVar5" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*piVar5" (* "*") (identifier "piVar5")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(piVar5 != (int *)0x0)" (( "(") (binary_expression "piVar5 != (int *)0x0" (identifier "piVar5") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (labeled_statement "LAB_00016ac0:\n    if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }" (statement_identifier "LAB_00016ac0") (: ":") (if_statement "if (param_2 == (int *)0x0) {\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }" (if "if") (parenthesized_expression "(param_2 == (int *)0x0)" (( "(") (binary_expression "param_2 == (int *)0x0" (identifier "param_2") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }\n      local_20[2] = 1;\n      return local_20;\n    }" ({ "{") (if_statement "if (local_20 == (int *)0x0) {\n        return (int *)0x0;\n      }" (if "if") (parenthesized_expression "(local_20 == (int *)0x0)" (( "(") (binary_expression "local_20 == (int *)0x0" (identifier "local_20") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return (int *)0x0;\n      }" ({ "{") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (expression_statement "local_20[2] = 1;" (assignment_expression "local_20[2] = 1" (subscript_expression "local_20[2]" (identifier "local_20") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "1")) (; ";")) (return_statement "return local_20;" (return "return") (identifier "local_20") (; ";")) (} "}")))) (} "}")))) (expression_statement "piVar2 = (int *)xmalloc(0x24);" (assignment_expression "piVar2 = (int *)xmalloc(0x24)" (identifier "piVar2") (= "=") (cast_expression "(int *)xmalloc(0x24)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "xmalloc(0x24)" (identifier "xmalloc") (argument_list "(0x24)" (( "(") (number_literal "0x24") () ")"))))) (; ";")) (expression_statement "piVar2[1] = (int)param_1;" (assignment_expression "piVar2[1] = (int)param_1" (subscript_expression "piVar2[1]" (identifier "piVar2") ([ "[") (number_literal "1") (] "]")) (= "=") (cast_expression "(int)param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "param_1"))) (; ";")) (expression_statement "piVar2[3] = param_3;" (assignment_expression "piVar2[3] = param_3" (subscript_expression "piVar2[3]" (identifier "piVar2") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "param_3")) (; ";")) (expression_statement "piVar2[2] = 0;" (assignment_expression "piVar2[2] = 0" (subscript_expression "piVar2[2]" (identifier "piVar2") ([ "[") (number_literal "2") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar2[4] = 0;" (assignment_expression "piVar2[4] = 0" (subscript_expression "piVar2[4]" (identifier "piVar2") ([ "[") (number_literal "4") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar2[5] = 0;" (assignment_expression "piVar2[5] = 0" (subscript_expression "piVar2[5]" (identifier "piVar2") ([ "[") (number_literal "5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar2[6] = 0;" (assignment_expression "piVar2[6] = 0" (subscript_expression "piVar2[6]" (identifier "piVar2") ([ "[") (number_literal "6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar2[7] = 0;" (assignment_expression "piVar2[7] = 0" (subscript_expression "piVar2[7]" (identifier "piVar2") ([ "[") (number_literal "7") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar2[8] = 0;" (assignment_expression "piVar2[8] = 0" (subscript_expression "piVar2[8]" (identifier "piVar2") ([ "[") (number_literal "8") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "piVar5 = piVar2;" (assignment_expression "piVar5 = piVar2" (identifier "piVar5") (= "=") (identifier "piVar2")) (; ";")) (expression_statement "*piVar2 = (int)DAT_00040ba8;" (assignment_expression "*piVar2 = (int)DAT_00040ba8" (pointer_expression "*piVar2" (* "*") (identifier "piVar2")) (= "=") (cast_expression "(int)DAT_00040ba8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "DAT_00040ba8"))) (; ";")) (expression_statement "DAT_00040ba8 = piVar5;" (assignment_expression "DAT_00040ba8 = piVar5" (identifier "DAT_00040ba8") (= "=") (identifier "piVar5")) (; ";")) (return_statement "return piVar2;" (return "return") (identifier "piVar2") (; ";")) (} "}")))

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

type_1 * __regparm3 find_section_list(char *name,bfd_boolean var_2,type_2 var_5)

{
  int var_4;
  type_1 *psVar2;
  char *var_10;
  type_1 *var_8;
  type_1 *var_11;
  
  var_11 = (type_1 *)0x0;
  var_8 = var_1;
  if (var_1 == (type_1 *)0x0) {
    if (var_2 == 0) {
      return (type_1 *)0x0;
    }
  }
  else {
    do {
      while (var_2 != 0) {
        var_4 = var_3(var_8->pattern,name);
        if (var_4 == 0) {
          psVar2 = (type_1 *)var_8->var_5;
          if (((((type_2)psVar2 & 1) == 0) || ((var_5 & 2) == 0)) &&
             (((var_5 & 1) == 0 || (((type_2)psVar2 & 2) == 0)))) {
            if (((((type_2)psVar2 & 4) == 0) || ((var_5 & 8) == 0)) && ((var_5 & 0xc) != 0xc)) {
              if (((((type_2)psVar2 & 0x10) == 0) || ((var_5 & 0x20) == 0)) &&
                 ((var_5 & 0x30) != 0x30)) {
                var_8->var_5 = (type_2)psVar2 | var_5;
                return var_8;
              }
              var_10 = "error: %s both sets and alters LMA";
              var_8 = psVar2;
            }
            else {
              var_10 = "error: %s both sets and alters VMA";
              var_8 = (type_1 *)var_2;
            }
          }
          else {
            var_10 = "error: %s both copied and removed";
          }
          var_10 = (char *)var_6(0,var_10,5,var_8);
                    /* WARNING: Subroutine does not return */
          var_7(var_10,name);
        }
LAB_00016a7f:
        var_8 = var_8->next;
        if (var_8 == (type_1 *)0x0) goto LAB_00016ac0;
      }
      if ((var_8->var_5 & var_5) == 0) goto LAB_00016a7f;
      var_10 = var_8->pattern;
      if (*var_10 == '!') {
        var_4 = var_9(var_10 + 1,name,0);
        if (var_4 == 0) {
          var_8->used = 1;
          return (type_1 *)0x0;
        }
        goto LAB_00016a7f;
      }
      var_4 = var_9(var_10,name,0);
      if (var_4 == 0 && var_11 == (type_1 *)0x0) {
        var_11 = var_8;
      }
      var_8 = var_8->next;
    } while (var_8 != (type_1 *)0x0);
LAB_00016ac0:
    if (var_2 == 0) {
      if (var_11 == (type_1 *)0x0) {
        return (type_1 *)0x0;
      }
      var_11->used = 1;
      return var_11;
    }
  }
  psVar2 = (type_1 *)var_12(0x24);
  psVar2->pattern = name;
  psVar2->var_5 = var_5;
  psVar2->used = 0;
  *(type_3 *)&psVar2->vma_val = 0;
  *(type_3 *)((int)&psVar2->vma_val + 4) = 0;
  *(type_3 *)&psVar2->lma_val = 0;
  *(type_3 *)((int)&psVar2->lma_val + 4) = 0;
  psVar2->flags = 0;
  var_8 = psVar2;
  psVar2->next = var_1;
  var_1 = var_8;
  return psVar2;
}


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

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

int * __regparm3 MASKED(char *param_1,int *param_2,uint param_3)

{
  int iVar1;
  int *piVar2;
  char *pcVar3;
  undefined4 uVar4;
  int *piVar5;
  int *local_20;
  
  local_20 = (int *)0x0;
  piVar5 = DAT_00040ba8;
  if (DAT_00040ba8 == (int *)0x0) {
    if (param_2 == (int *)0x0) {
      return (int *)0x0;
    }
  }
  else {
    do {
      while (param_2 != (int *)0x0) {
        iVar1 = strcmp((char *)piVar5[1],param_1);
        if (iVar1 == 0) {
          piVar2 = (int *)piVar5[3];
          if (((((uint)piVar2 & 1) == 0) || ((param_3 & 2) == 0)) &&
             (((param_3 & 1) == 0 || (((uint)piVar2 & 2) == 0)))) {
            if (((((uint)piVar2 & 4) == 0) || ((param_3 & 8) == 0)) && ((param_3 & 0xc) != 0xc)) {
              if (((((uint)piVar2 & 0x10) == 0) || ((param_3 & 0x20) == 0)) &&
                 ((param_3 & 0x30) != 0x30)) {
                piVar5[3] = (uint)piVar2 | param_3;
                return piVar5;
              }
              pcVar3 = "error: %s both sets and alters LMA";
              piVar5 = piVar2;
            }
            else {
              pcVar3 = "error: %s both sets and alters VMA";
              piVar5 = param_2;
            }
          }
          else {
            pcVar3 = "error: %s both copied and removed";
          }
          uVar4 = dcgettext(0,pcVar3,5,piVar5);
                    /* WARNING: Subroutine does not return */
          FUN_0002c8e0(uVar4,param_1);
        }
LAB_00016a7f:
        piVar5 = (int *)*piVar5;
        if (piVar5 == (int *)0x0) goto LAB_00016ac0;
      }
      if ((piVar5[3] & param_3) == 0) goto LAB_00016a7f;
      pcVar3 = (char *)piVar5[1];
      if (*pcVar3 == '!') {
        iVar1 = fnmatch(pcVar3 + 1,param_1,0);
        if (iVar1 == 0) {
          piVar5[2] = 1;
          return (int *)0x0;
        }
        goto LAB_00016a7f;
      }
      iVar1 = fnmatch(pcVar3,param_1,0);
      if (iVar1 == 0 && local_20 == (int *)0x0) {
        local_20 = piVar5;
      }
      piVar5 = (int *)*piVar5;
    } while (piVar5 != (int *)0x0);
LAB_00016ac0:
    if (param_2 == (int *)0x0) {
      if (local_20 == (int *)0x0) {
        return (int *)0x0;
      }
      local_20[2] = 1;
      return local_20;
    }
  }
  piVar2 = (int *)xmalloc(0x24);
  piVar2[1] = (int)param_1;
  piVar2[3] = param_3;
  piVar2[2] = 0;
  piVar2[4] = 0;
  piVar2[5] = 0;
  piVar2[6] = 0;
  piVar2[7] = 0;
  piVar2[8] = 0;
  piVar5 = piVar2;
  *piVar2 = (int)DAT_00040ba8;
  DAT_00040ba8 = piVar5;
  return piVar2;
}

